AuT Posté(e) le 19 août 2009 Posté(e) le 19 août 2009 Bonjour tout le monde, Je suis à la recherche d'un Lisp (ou autre) qui supprime les attributs d'un block sans le décomposer.J'ai plusieurs plans qui comportent chacun une centaine de bloc au minimum.Pour l'instant je fait : Bedit > selection des attributs > effacer > enregistrer.Si quelqu'un connait une routine qui fait ça tout seul ça serait top. D'avance merci ++
lecrabe Posté(e) le 19 août 2009 Posté(e) le 19 août 2009 Hello Sans passer par un Lisp tu peux faire la manipulation suivante : 1) Sur le calque ZERO, insérer ton bloc qq part avec Echelle=1 et Rotation=0 2) Le decomposer/exploser puis effacer tous les attributs inutiles ... 3) Refaire une commande BLOC en selectionnant le graphique restant Tu redonnes le MEME nom avec le MEME point d'Insertion et tu confirmes ... 4) Commande au clavier : BATTMANTu selectionnes le bon BLOC dans l'ascenseur puis SYNC puis OK Le Decapode PS: Je suppose bien sur que les routines Express/Bonus sont installees ! Autodesk Expert Elite Team
AuT Posté(e) le 19 août 2009 Auteur Posté(e) le 19 août 2009 Merci pour ton tuyau Lecrabe Je vais tester, mais si je comprend bien la manip' ça ne me fera pas gagner beaucoup plus de temps que d'effacer les att. dans l'éditeur de bloc directement... si? :s ++ AuT
(gile) Posté(e) le 19 août 2009 Posté(e) le 19 août 2009 Salut, Un truc comme ça ?(defun c:delatt () (vl-load-com) ;; Supprimer les attributs dans toutes les définitions de bloc (vlax-for blk (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)) ) (if (and (= (vla-get-isXref blk) :vlax-false) (= (vla-get-isLayout blk) :vlax-false) ) (vlax-for obj blk (if (= (vla-get-ObjectName obj) "AcDbAttributeDefinition") (vla-delete obj) ) ) ) ) ;; Supprimer les attributs dans toutes les références de bloc insérées (if (ssget "_X" '((0 . "INSERT") (66 . 1))) (progn (vlax-for blk (setq ss (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) (mapcar 'vla-delete (vlax-invoke blk 'GetAttributes)) ) (vla-delete ss) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 19 août 2009 Posté(e) le 19 août 2009 Hello Le gros interet de BATTMAN c'est qu'il permet de re-synchroniser toutes les insertions de blocs avec la nouvelle definition du bloc ! On peut donc ajouter et/ou supprimer des attributs ... Les attributs supprimes sont supprimes partout ! Les attributs ajoutes sont ajoutes partout (vide ou avec valeur par defaut) Le Decapode Autodesk Expert Elite Team
AuT Posté(e) le 19 août 2009 Auteur Posté(e) le 19 août 2009 Un truc comme ça j'ai bien l'impression oui :) Je vais tester ça de suite ... Un grand merci !!!!
lecrabe Posté(e) le 19 août 2009 Posté(e) le 19 août 2009 ReHello Je suis grillé par le grand Maître Gilles ! Toujours Tip-Top avec ses routines d'enfer !! Merci, Le Decapode Autodesk Expert Elite Team
AuT Posté(e) le 19 août 2009 Auteur Posté(e) le 19 août 2009 Alors là !!!! Que dire à part: MERCI! :) C'est niquel...bien joué Gile!Et merci à toi aussi Lecrabe pour ton tuyau... En vous souhaitant une bonne journée, maintenant la mienne va être plus relaxe! <acronym class=dict title= ++
Patrick_35 Posté(e) le 19 août 2009 Posté(e) le 19 août 2009 Salut (gile) est le plus rapide ;) Voici quand même une solution qui supprime l'attribut sélectionné (setq ent (nentsel)) ; Sélection de l'attribut (setq ent (vlax-ename->vla-object (car ent))) ; Transformer la sélection en objet vl (setq bl (vla-objectidtoobject (vla-get-database ent)(vla-get-ownerid ent))) ; Recherher le pére (setq pos 1) (foreach att (vlax-invoke bl 'getattributes) ; rechercher la position de l'attribut (and (equal att ent)(setq ok pos)) (setq pos (1+ pos)) ) (setq blo (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-name bl))) ; bloc de réference dans la table des blocks (setq pos 1) (vlax-for ent blo ; parcourir les entités qui compose le bloc (if (eq (vla-get-objectname ent) "AcDbAttributeDefinition") ; c'est un attribut (progn (if (eq pos ok) ; c'est la même position que celui sélectionné (vla-delete ent) ; je l'efface ) (setq pos (1+ pos)) ) ) ) (vl-cmdf "_.attsync" "_name" (vla-get-name bl)) ; je synchronise les attributs @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 19 août 2009 Posté(e) le 19 août 2009 (gile) est le plus rapide ;) Facile, j'ai juste complété ce que j'avais donné ici. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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