bseb67 Posté(e) le 3 août 2009 Posté(e) le 3 août 2009 Salut à tous, Pour la première fois depuis 2ans, je dois faire un bedit d'un bloc dans lequelje dois supprimer des entités. Mais là je suis un peu dans le flou:- je pensais faire un ssget "x" et filtrer sur les objets voulus, mais en fait le ssget me renvoieles objets de tout le dessin et pas ceux uniquement contenus dans le bloc ouvert :( - et je ne vois pas comment filtrer autrement... Si l'un de vous peut m'éclairer? Merci. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 3 août 2009 Posté(e) le 3 août 2009 Salut, ssget ne sélectionnera que des références de bloc insérées dans le dessin.Il faut que tu agisses sur la définition du bloc. Avec AutoLISP :- atteindre la définition du bloc : (setq BlkDef (tblsearch "BLOCK" "NomDuBloc"))- la première entité dans la définition :(setq ent (cdr (assoc -2 BlkDef)))- les entités suivantes : (setq ent (entnext ent)) avec Visual LISP- atteindre la définition du bloc : (setq BlkDef (vla-Item (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))) "NomDuBloc"))- parcourir les entités :(vlax-for ent BlkDef ...) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bseb67 Posté(e) le 4 août 2009 Auteur Posté(e) le 4 août 2009 Ok et merci (gile), je vais alors essayer par la définition du bloc. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Patrick_35 Posté(e) le 4 août 2009 Posté(e) le 4 août 2009 Salut Une méthode plus simple que d'utiliser bedit Sélection de l'objet à effacer dans le bloc(setq obj (nentsel)) Effacer l'objet(vla-delete (vlax-ename->vla-object (car obj))) Regen, pour éviter une boucle pour mettre à jour les blocs modifiés(vl-cmdf "_.regen") @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bseb67 Posté(e) le 4 août 2009 Auteur Posté(e) le 4 août 2009 Alors là je suis sur le cul :o un simple: ; on parcourt les entités du bloc (vlax-for vl_ent (vla-Item (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))) bl_name) (cond ; on teste si c'est un bloc ((/= (vla-get-ObjectName vl_ent) VAR_ACAD_DEF_BLOC) ) ; on teste si le nom est un de ceux cherchés ((/= (member (vla-get-EffectiveName vl_ent) lst_ss_bl_name) nil) (vla-delete vl_ent) ) ) ; cond ) ; vlax-for ; un regen pour mettre à jour (vl-cmdf "_.regen") où:VAR_ACAD_DEF_BLOC = "AcDbBlockReference"bl_name = nom du bloc à traiterlst_ss_bl_name = liste de noms de blocs Il y a des moments ou je me dit autocad c'est de la bouse, mais pource cas là: c'est super fort :D Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 4 août 2009 Posté(e) le 4 août 2009 Salut, (/= (member (vla-get-EffectiveName vl_ent) lst_ss_bl_name) nil)peut s'écrire plus simplement :(member (vla-get-EffectiveName vl_ent) lst_ss_bl_name) En LISP, les procédures de décision (if, cond...) n'évaluent pas si l'expression-test retourne strictement un Booléen (T ou nil) mais simplement une valeur non nil ou nil. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bseb67 Posté(e) le 4 août 2009 Auteur Posté(e) le 4 août 2009 oui, je sais, mais c'est encore un reflex gardé... ;) Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant