Steven Posté(e) le 3 janvier 2011 Posté(e) le 3 janvier 2011 Salut et bonne année à troutes et à tous. Y a-t-il un moyen de sélectionner des blocs par les attributs?Je voudrais par exemple sélectionner tous les blocs d'un dessin qui à un attribut CR2.J'ai regarder par la commande "filter" (que je ne maîtrise pas du tout) et je n'ai rien trouvé de concluant. [Edité le 3/1/2011 par Steven] Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
Fraid Posté(e) le 3 janvier 2011 Posté(e) le 3 janvier 2011 Bonjour, Un lisp de (gile) (defun c:ssatt (/ doc att elst tag val name ss1 ss2) (vl-load-com) (and (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (setq att (car (nentsel "\nSélectionnez l'attribut source: "))) (setq att (vlax-ename->vla-object att)) (= (vla-get-ObjectName att) "AcDbAttribute") (setq tag (vla-get-TagString att) val (vla-get-TextString att) blk (vla-ObjectIDToObject doc (vla-get-OwnerId att)) name (if (vlax-property-available-p blk 'EffectiveName) (vla-get-EffectiveName blk) (vla-get-Name blk) ) ss2 (ssadd) ) (princ "\nSélectionnez les blocs ou <tout>: ") (or (ssget (list '(0 . "INSERT") '(66 . 1) (cons 2 (strcat name ",`*U*")) ) ) (ssget "_X" (list '(0 . "INSERT") '(66 . 1) (cons 2 (strcat name ",`*U*")) ) ) ) (vlax-for blk (setq ss1 (vla-get-ActiveSelectionSet doc)) (if (= name (if (vlax-property-available-p blk 'EffectiveName) (vla-get-EffectiveName blk) (vla-get-Name blk) ) ) (foreach a (vlax-invoke blk 'GetAttributes) (if (and (= (vla-get-TagString a) tag) (= (vla-get-TextString a) val) ) (ssadd (vlax-vla-object->ename blk) ss2) T ) ) T ) ) (not (vla-delete ss1)) (sssetfirst nil ss2) ) (princ) ) https://github.com/Fraiddd
(gile) Posté(e) le 3 janvier 2011 Posté(e) le 3 janvier 2011 Salut, ssatt sélectionne tous les blocs de même nom ayant la même valeur d'attribut que l'attribut source sélectionné. sstag (ci dessous) sélectionne tous les blocs ayant un attribut dont l'étiquette correspond à la chaîne entrée (non sensible à la casse et acceptant les caractères génériques). SSTAG entré en ligne de commande sélectionne et 'gripe' les blocs. (sstag "etiquette") entré à l'invite "Choix des objets: " d'une commande de modification, ajoute les blocs au jeu de sélection. (defun sstag (tag / ss res ref name blk) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (setq res (ssadd)) (if (ssget "_X" '((0 . "INSERT") (66 . 1))) (progn (vlax-for ref (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (setq has nil) (foreach att (vlax-invoke ref 'GetAttributes) (if (wcmatch (strcase (vla-get-TagString att)) (strcase tag)) (setq has T) ) ) (if has (ssadd (vlax-vla-object->ename ref) res) ) ) (vla-delete ss) ) ) (if (< 0 (sslength res)) res ) ) (defun c:sstag (/ tag) (if (setq tag (getstring "\Entrez l'étiquette: ")) (sssetfirst nil (sstag tag)) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Steven Posté(e) le 3 janvier 2011 Auteur Posté(e) le 3 janvier 2011 Encore une fois, je suis épaté par ces lisps magique de chacun de vous :D C'est le ssatt qui est parfait dans le cas présent. Toutefois le sstag rique de me servire prochainement. Merci à vous deux ;) Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
philsogood Posté(e) le 22 novembre 2012 Posté(e) le 22 novembre 2012 helloest-il possible de sélectionner des blocs à partir de la valeur d'un attributj'ai des blocs avec un attribut classe dans lesquels je renseigne leur classe (moteur, robinetterie, divers...)idéalement je souhaiterai pouvoir sélectionner l'ensemble des blcos de mon fiochier à partir de moteur, robienetterie... est-ce possible?Phil Projeteur Revit Indépendant - traitement des eaux/CVC
bryce Posté(e) le 22 novembre 2012 Posté(e) le 22 novembre 2012 Bonjour, Facile, en modifiant légèrement le Lisp sstag de (gile) ! ;)(defun ssattval (val / ss res ref name blk) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (setq res (ssadd)) (if (ssget "_X" '((0 . "INSERT") (66 . 1))) (progn (vlax-for ref (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (setq has nil) (foreach att (vlax-invoke ref 'GetAttributes) (if (wcmatch (strcase (vla-get-TextString att)) (strcase val)) (setq has T) ) ) (if has (ssadd (vlax-vla-object->ename ref) res) ) ) (vla-delete ss) ) ) (if (< 0 (sslength res)) res ) ) (defun c:ssattval (/ val) (if (setq val (getstring "\Entrez la valeur d'attribut: ")) (sssetfirst nil (ssattval val)) ) (princ) ) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
philsogood Posté(e) le 22 novembre 2012 Posté(e) le 22 novembre 2012 Super bryceJ'essaie de décontortiquer le lisp pour le comrpendre++Phil Projeteur Revit Indépendant - traitement des eaux/CVC
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