Invité Sylvainhinard Posté(e) le 18 septembre 2006 Posté(e) le 18 septembre 2006 Bonjour, J'ai crée un bloc "TRANCHEE" avec les attribut O40,O63,O80 et O110. J'ai utilisé la commande des Express Tools -> Blocs -> Export Attribute Information. J'obtient le fichiers texte dont je vous joins un extrait: HANDLE BLOCKNAME O40 O63 O80 O110 LONGUEUR'C5465 TRANCHEE 0 0 0 3 11.70'C545E TRANCHEE 0 0 0 3 12.46'C5455 TRANCHEE 0 0 0 3 15.65'C544C TRANCHEE 0 0 0 5 20.39 Ma question est : Comment faire un filtre suivant les Handles pour selectionner des entités dans Autocad à partir d'un fichier texte de ce genre? Merci Beaucoup à tous
zebulon_ Posté(e) le 19 septembre 2006 Posté(e) le 19 septembre 2006 Bonjour, dans les codes de groupes s'appliquant à toutes les entités, il y a le code DXF 5 qui représente l'identificateur. C'est une chose. il y a aussi la commande (handent handle) qui permet de récupérer le nom d'une entité à partir du handle. (setq e (handent "C5465")) revoie le nom de l'entité corrrespondant à "C5465" et la stocke dans e. Le handle (ou identificateur) reste constant d'une session à l'autre, alors que le nom de l'entité peut changer. Mais il serait peut être plus simple de filtrer directement les blocs "TRANCHEE" avec une commande : (setq ss (ssget "_X" '((0 . "INSERT") (2 . "TRANCHEE")))) sans utiliser les express tools, et d'extraire du jeu de sélection créé avec ce ssget ce qu'il te faut. Mais quel est ton but ? Amicalement Zebulon_ C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Invité Sylvainhinard Posté(e) le 19 septembre 2006 Posté(e) le 19 septembre 2006 Bonjour, Zebulon_, en fait je voudrait filtrer mes blocs suivant les attributs. Par exemple selectionner tout les blocs "tranchee" dont l'attribut "longueur" à une valeur égale à "12.00". Je connait la commande filter mais on ne peut pas faire la manipulation que je souhaite. Merci Beaucoup pour ton aide Sylvain
(gile) Posté(e) le 19 septembre 2006 Posté(e) le 19 septembre 2006 Salut, Une routine LISP pour faire un jeu de sélection en filtrant les blocs du dessin suivant la valeur d'un attribut éditable. On peut utiliser directement la sous routine att_filter en renseignant directement les arguments nom du bloc, nom de l'étiquette et valeur de l'attribut : (att_filter "tranchee" "longueur" "12.0") ou utiliser la commande att_fltr_sel et répondre aux invites à la ligne de commande. Si la valeur de l'attribut et le filtre pour cette valeur sont des nombres (sous forme de chaine de caractère) il sont comparés comme des nombres : 12 = 12.0 = 12.00. ;; Retourne un jeu de sélection en filtrant le nom du bloc, et la valeur d'un attribut (defun att_filter (bloc etiq val / ss n ref att att_lst) (if (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 bloc)))) (repeat (setq n (sslength ss)) (setq ref (ssname ss (setq n (1- n)))) (setq att (entnext ref)) (while (/= (cdr (assoc 0 (setq att_lst (entget att)))) "SEQEND") (if (= (cdr (assoc 2 att_lst)) (strcase etiq)) (if (and (numberp (read (cdr (assoc 1 att_lst)))) (numberp (read val)) ) (if (/= (atof (cdr (assoc 1 att_lst))) (atof val)) (ssdel ref ss) ) (if (/= (cdr (assoc 1 att_lst)) val) (ssdel ref ss) ) ) ) (setq att (entnext att)) ) ) ) ss ) ;; Sélectionne tous les blocs du nom spécifié ayant la valeur spécifiée pour l'attribut spécifié (defun c:att_fltr_sel (/ bloc etiq val) (setq bloc (getstring "\nEntrez le nom du bloc: ")) (setq etiq (getstring "\nEntrez l'étiquette de l'attribut: ")) (setq val (getstring "\nEntrez la valeur de l'attribut: ")) (sssetfirst nil (att_filter bloc etiq val)) (princ) ) [Edité le 19/9/2006 par (gile)] 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