;| fdxf version 2 Donne la liste dxf d'un sélection set dans cette version, on retourne en plus le EffectiveName s'il y a dans la sélection un bloc dynamique les lignes (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) initialise les accés aux propriétés vba du document actif il est préférable de les placer dans la fonction définie avec (defun c: si on ne veux pas qu'elles soit évaluées ça chaque appel de la fonction (fdxf mais i'ai préféré les placer ici pour rassembler tout le vba pour que ce soit plus lisible |; defun Fdxf (entite / lstdxf) ; l'argument et la variable (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (setq lstdxf (entget entite)) ;;; Si l'entite est un bloc (if (= "INSERT" (cdr (assoc 0 lstdxf))) (progn ;;; definition du nom vba de l'entite (setq Vba-ent (vlax-ename->vla-object entite)) ;;; Si cennte entité est un bloc dynamique (if (= (vla-get-IsDynamicBlock Vba-ent) :vlax-true) ;;; récupération du effectivename et ajout à la lstdxf (progn (setq bdn (vla-get-effectivename Vba-ent)) (setq lstdxf (cons (cons "EffNameBlDyn" bdn) lstdxf)) ) ) ) ) lstdxf ; le rappel de la variable sans rien sert de valeur de retour de la fonction ) ;| dxf version 1 parcours le jeu de sélection et appelle la fonction Fdxf puis imprime le résultat en sautant une ligne |; (defun c:dxf (/ lstdxf ent) (princ "\n sélectionnez quelques entités ") (setq ss (ssget) i 0 ) ; i va servir de compteur (repeat (sslength ss) (setq ent (ssname ss i)) ; ent est l'entité place en position i du selection-set ss (setq lstdxf (Fdxf ent)) ; je stoke dans lstdxf la valeur de retour de la fonction fdxf pour l'élément ent (princ lstdxf) (princ "\n ") ;on saute une ligne pour plus de clarté (setq i (1+ i)) ) ;fin repeat (princ) ;; Une fonction se termine toujours par l'évaluation de sa dernière expression ;; sans ce princ, le programme sortirai par l'évaluation de la dernière expression en locurence la valeur de i )