Aller au contenu

Cadennasser un bloc


jalna

Messages recommandés

Comme pour les calques, il serait bien de pouvoir cadennasser un bloc non pas ar son calque d'isertion, mais par son nom!!

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Pour rendre un bloc Décomposable ou pas (avec la même commande)

 

(defun c:bld(/ bl)
 (if (setq bl (ssget "_:e:s" (list (cons 0 "INSERT"))))
   (progn
     (setq bl (vlax-ename->vla-object (ssname bl 0)))
     (if (not (vlax-property-available-p bl 'path))
(progn
  (if (vlax-property-available-p bl 'effectivename)
    (setq bl (vla-get-effectivename bl))
    (setq bl (vla-get-name bl))
  )
  (setq bl (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) bl))
  (if (eq (vla-get-explodable bl) :vlax-true)
    (progn
      (vla-put-explodable bl :vlax-false)
      (princ (strcat "\nLe bloc " (vla-get-name bl) " ne peut plus être décomposé."))
    )
    (progn
      (vla-put-explodable bl :vlax-true)
      (princ (strcat "\nLe bloc " (vla-get-name bl) " est décomposable."))
    )
  )
)
     )
   )
 )
 (princ)
)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Merci Patrick_35.

 

Mais je recherche à cadenasser des blocs par leurs nom

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Bon, je crois qu'il doit y avoir une fonction interne à AutoCAD pour cadenasser un bloc!! :cool:

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Serait-ce possible de l'adapter pour traiter l'ensemble des blocs du dessin ?

 

(vlax-for b	(vla-get-Blocks
	  (vla-get-ActiveDocument
	    (vlax-get-acad-object)
	  )
	)
     (vla-put-explodable b :vlax-false)
   ) 

 

 

Mais je recherche à cadenasser des blocs par leurs nom

 

(defun c:verrbl	(/ name)
 (vl-load-com)
 (setq name (getstring T "\Nom du bloc: "))
 (if (tblsearch "BLOCK" name)
   (vla-put-explodable
     (vla-item	(vla-get-Blocks
	  (vla-get-ActiveDocument
	    (vlax-get-acad-object)
	  )
	)
	name
     )
     :vlax-false
   )
   (princ "\Le bloc \"" name "\" est introuvable.")
 )
 (princ)
) 

 

 

Sans passer par du lisp, comment quelqu'un peut contrer cette méthode pour exploser un bloc ?

 

Oui, comme montré ci dessus, une parade (qui vaut ce qu'elle vaut) avec un réacteur qui verrouille systématiquement tous les blocs au lancement de la commande EXPLODE.

Pour que ceci fonctionne les routines doivent être chargées dans le dessin et les expressions :

(unexplodeblock-on) active le réacteur

(unexplodeblock-off) désactive le réacteur

Donc dans un fichier de chargement automatique (acaddoc.lsp ou AutoCAD.mnl) coller les routines suivantes suivies de l'expression (unexplodeblock-on) activera automatiquement le récteur à chaque ouverture de dessin.

 

 

(defun unexplodeblock-on ()
 (or *unexplode-reac*
     (setq *unexplode-reac*
     (vlr-command-reactor
       nil
       '((:vlr-commandWillStart . gilelockblock))
     )
     )
 )
 (princ "\nVerrouillage des blocs activé")
)

(defun unexplodeblock-off ()
 (and *unexplode-reac*
     (vlr-remove *unexplode-reac*)
      (setq *unexplode-reac* nil)
 )
 (princ "\nVerrouillage des blocs désactivé")
)

(defun gilelockblock (rea cmd)
 (if (= (car cmd) "EXPLODE")
   (vlax-for b	(vla-get-Blocks
	  (vla-get-ActiveDocument
	    (vlax-get-acad-object)
	  )
	)
     (vla-put-explodable b :vlax-false)
   )
 )
) 

 

[Edité le 23/4/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut (gile) et merci!

 

Une erreur se glisse avec le lisp

 

(defun c:verrbl (name)

(vl-load-com)

(setq name (getstring T "\Nom du bloc: "))

(if (tblsearch "BLOCK" name)

(vla-put-explodable

(vla-item (vla-get-Blocks

(vla-get-ActiveDocument

(vlax-get-acad-object)

)

)

name

)

:vlax-false

)

(princ "\Le bloc \"" name "\" est introuvable.")

)

(princ)

)

 

Voila l'erreur

; erreur: nombre d'arguments insuffisants

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Ok merci!

 

Mais je recherche autre chose !

 

Je m'explique!

 

J'ai un calque1

Sur ce calque j'ai 3 blocs(b1-b2-b3), répété x fois

Je veux tout effacer sauf tous les b2

 

c'est la le soucis si je cadenasse le calque 1 c'est mes blocs (b1-b2-b3) qui sont aussi cadenassés!

 

Suis-je clair?

 

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Je crois qu'il y a un malentendu sur la signification de "cadenasser".

Les LISP que j'ai donné, comme celui de Patrick_35 jouent sur la possibilité ou non de décomposer un ou des blocs.

 

S'il s'agit de verrouiller des entités comme on verrouille un calque (qu'on ne puisse plus les modifier), je ne vois pas de solution.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Que vois-je ;)

 

Des réacteurs by (gile)

 

:laugh: :laugh: :laugh:

 

Jalna

La demande est un peu plus précise, mais comme (gile) est dans un grand jour avec les réacteurs, je lui laisse la suite :D

 

Edit :

 

Ah, on s'est croisé.

 

La solution est de choisir dans une liste les blocs à "verrouiller", d'inscrire ces blocs avec les ldata.

Dans les réacteurs de commande, d'intercepter la commande décomposer, de regarder dans le jeu de sélection s'il y a des blocs dans la liste pour les enlever du jeu de sélection.

Bon, je vois cela de ma fenêtre, mais cela doit être faisable.

 

Sinon, reste la solution de mettre les blocs que l'on souhaite verrouiller sur un calque à part qui lui sera verrouillé.

 

@+

 

[Edité le 23/4/2008 par Patrick_35]

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Je crois qu'il y a un malentendu sur la signification de "cadenasser".

Les LISP que j'ai donné, comme celui de Patrick_35 jouent sur la possibilité ou non de décomposer un ou des blocs.

 

S'il s'agit de verrouiller des entités comme on verrouille un calque (qu'on ne puisse plus les modifier), je ne vois pas de solution.

 

Oui c'est exactement cela!

Verrouillé et non pas cadenassé!! (désolé)

 

Sinon, reste la solution de mettre les blocs que l'on souhaite verrouiller sur un calque à part qui lui sera verrouillé.

 

C'est ce que je fais!!

 

Merci quand même!

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

(vlax-for b (vla-get-Blocks

(vla-get-ActiveDocument

(vlax-get-acad-object)

)

)

(vla-put-explodable b :vlax-false)

)

 

Merci (Gile) pour ces 7 lignes de codes (et encore, tu sautes une ligne pour de simples parenthèses). Rapide et précis encore une fois !

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité