LUDWIG Posté(e) le 15 mars 2005 Posté(e) le 15 mars 2005 Bonjour, Je suis sur ADT2005 et je voudrais développer une commande LISP pour inverser la largeur et la longueur d'une entité AEC_wall (mur Autodesk Architectural Desktop) sans changer son sens. Or je n'arrive même pas à extraire les codes DXF ou seraient stockées ces infos. Faut-il entrer le nom d'une application (comme ici pour récupérer les valeurs d'un hyperlien) ? Laquelle ? Merci d'avance de votre aide... Autocad 2021 - Revit 2022 - Windows 10
BIM G CO Posté(e) le 15 mars 2005 Posté(e) le 15 mars 2005 J'utilise ces deux fonctions assemblées pour savoir ce qui ce cache derrière mes dessins: Pour (Programmation 1) tu as l'entité sélectionnée (setq ent (Programmation 1) (defun table_entete (TB / TBLIST TBLIST TBNAME RES) (setq TBNLIST nil) (setq TBLIST (tblnext TB T)) (while TBLIST (setq TBNAME (cdr (assoc 2 TBLIST))) (setq TBNLIST (append TBNLIST (list TBNAME))) (setq TBLIST (tblnext TB)) ) (setq RES TBNLIST) ) (defun Programmation (ARG_TYPE / PRIVE_RESULTAT n PRIVE_ENTITE PRIVE_FILE PRIVE_BOUCLE PRIVE_ENTETE ) (cond ((= ARG_TYPE 1) ; Entité Variable Entité (progn (setq PRIVE_ENTITE nil) (while (not PRIVE_ENTITE) (setq PRIVE_ENTITE (entsel "Entité:")) ) (setq PRIVE_ENTITE (entget (car PRIVE_ENTITE))) (if (assoc 7 PRIVE_ENTITE) (progn (Princ "\nBibliothèque :") (foreach n (tblsearch "STYLE" (cdr (assoc 7 PRIVE_ENTITE))) (print n) ) ) ) (if (assoc 7 PRIVE_ENTITE) (Princ "\n\nEntité :") ) (foreach n PRIVE_ENTITE (print n)) (setq PRIVE_RESULTAT PRIVE_ENTITE) (if (and (= (cdr (assoc 0 PRIVE_ENTITE)) "INSERT") (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 PRIVE_ENTITE)))) ) (progn (Princ "\n\nEntité(s) dans le bloc:") (setq PRIVE_ENTITE (entget (cdr (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 PRIVE_ENTITE)) ) ) ) ) ) (foreach n PRIVE_ENTITE (print n)) (while (entnext (cdr (assoc -1 PRIVE_ENTITE))) (princ "\n") (setq PRIVE_ENTITE (entget (entnext (cdr (assoc -1 PRIVE_ENTITE))) ) ) (foreach n PRIVE_ENTITE (print n)) ) ) ) ) ) ((= ARG_TYPE 2) ; Table de l'entité selectionnée (progn (setq PRIVE_ENTITE nil) (while (not PRIVE_ENTITE) (setq PRIVE_ENTITE (entsel "Entité: ")) ) (setq PRIVE_ENTITE (entget (car PRIVE_ENTITE))) (if (or (= (cdr (assoc 0 PRIVE_ENTITE)) "TEXT") (= (cdr (assoc 0 PRIVE_ENTITE)) "MTEXT") ) (progn (print (cdr (assoc 0 PRIVE_ENTITE))) (setq PRIVE_RESULTAT (TABLE_ENTETE "STYLE")) ) ) (if (or (= (cdr (assoc 0 PRIVE_ENTITE)) "LINE") (= (cdr (assoc 0 PRIVE_ENTITE)) "LWPOLYLINE") (= (cdr (assoc 0 PRIVE_ENTITE)) "CIRCLE") (= (cdr (assoc 0 PRIVE_ENTITE)) "XLINE") ) (progn (print (cdr (assoc 0 PRIVE_ENTITE))) (foreach n (tblsearch "LTYPE" (cdr (assoc 6 PRIVE_ENTITE))) (if n (print n) ) ) (setq PRIVE_RESULTAT (TABLE_ENTETE "LTYPE")) ) ) (if (= (cdr (assoc 0 PRIVE_ENTITE)) "INSERT") (progn (print (cdr (assoc 2 PRIVE_ENTITE))) (setq PRIVE_RESULTAT (TABLE_ENTETE "BLOCK")) ) ) (if PRIVE_RESULTAT (progn (princ "\nListe des Entêtes: ") (foreach n PRIVE_RESULTAT (Print n)) ) ) ) ) ((= ARG_TYPE 3) ; Voler le type de ligne de l'archi format DXF (progn (setq PRIVE_FILE (open "C:\\LTYPE.CSV" "w")) (foreach n (TABLE_ENTETE "LTYPE") (progn (setq PRIVE_BOUCLE 0) (setq PRIVE_RESULTAT "") (setq PRIVE_ENTETE (entget (tblobjname "LTYPE" n))) (if (assoc -1 PRIVE_ENTETE) (setq PRIVE_ENTETE (vl-remove (assoc -1 PRIVE_ENTETE) PRIVE_ENTETE))) (if (assoc 5 PRIVE_ENTETE) (setq PRIVE_ENTETE (vl-remove (assoc 5 PRIVE_ENTETE) PRIVE_ENTETE))) (if (assoc 330 PRIVE_ENTETE) (setq PRIVE_ENTETE (vl-remove (assoc 330 PRIVE_ENTETE) PRIVE_ENTETE))) (if (assoc 340 PRIVE_ENTETE) (setq PRIVE_ENTETE (vl-remove (assoc 340 PRIVE_ENTETE) PRIVE_ENTETE))) (while (< PRIVE_BOUCLE (length PRIVE_ENTETE)) (setq PRIVE_ENTITE (vl-string-subst ":" " . " (vl-princ-to-string (nth PRIVE_BOUCLE PRIVE_ENTETE) ) ) ) (setq PRIVE_ENTITE (strcat "[" (substr PRIVE_ENTITE 2))) (setq PRIVE_ENTITE (strcat (substr PRIVE_ENTITE 1 (- (strlen PRIVE_ENTITE) 1) ) "]" ) ) (setq PRIVE_RESULTAT (strcat PRIVE_RESULTAT (if (/= "" PRIVE_RESULTAT) ";" "" ) PRIVE_ENTITE ) ) (setq PRIVE_BOUCLE (1+ PRIVE_BOUCLE)) ) (if (/= (cdr (assoc 2 PRIVE_ENTETE)) "Continuous") (write-line PRIVE_RESULTAT PRIVE_FILE)) ) ) (close PRIVE_FILE) ) ) (t nil) ) PRIVE_RESULTAT ) Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
LUDWIG Posté(e) le 16 mars 2005 Auteur Posté(e) le 16 mars 2005 Salut Je n'arrive pas utilise ton code et surtout je ne comprends pas à quoi il sert ... Tu peux expliquer ? Autocad 2021 - Revit 2022 - Windows 10
BIM G CO Posté(e) le 16 mars 2005 Posté(e) le 16 mars 2005 (Programmation 1) donne le code DXF de ton entité sélectionnée (+ si c'est un TEXT ou MTEXT donne le STYLE) (Programmation 2) donne la table des entêtes de l'objet sélectionné (sauf si c'est une ligne / polyligne/droite => donne les caractéristique du calque ou ce trouve l'entité) (Programmation 3) écrit un fichier LTYPE.LIN contenant la liste des lignes utilisés dans le fichier (pour l'instant il ne prend pas en compte les types de lignes complexes : shx et caractères) Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
BIM G CO Posté(e) le 16 mars 2005 Posté(e) le 16 mars 2005 Tu fais un copier/coller sur la ligne de commande de ces deux morceaux de codepuis tu tape : (Programmation 1) Je l'utilise pour ma part dans un MNU : ID_Prog01 [&Entité]^C^C(setq PUBLIC_PROGRAM (Programmation 1))(princ); ID_Prog02 [&Table des Entêtes]^C^C(setq PUBLIC_PROGRAM (Programmation 2))(princ); ID_Prog03 [C&apture Type de lignes $DXF]^C^C(setq PUBLIC_PROGRAM (Programmation 3))(princ); Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
LUDWIG Posté(e) le 16 mars 2005 Auteur Posté(e) le 16 mars 2005 Ah Ok Pour ma part j'utilise DXFlistdata des outils de Bonuscad. C'est un peu plus ordonné. Le problème, c'est que ça ne donne pas les longueurs-largeurs de murs, ni même point de départ-point d'arrivée. J'avais le même problème quand j'ai voulu récupéré des liens hypertextes : ces liens sont gérés par une autre application (PE_URL) et il faut donner une syntaxe spécial pour le récupérer (setq lastent (entget(car(entsel)) '("PE_URL")) )... Donc je ne sais pas si je dois indiqué le nom d'une autre application pour qu'elle me donne ces valeurs de longueur et largeur... Autocad 2021 - Revit 2022 - Windows 10
bonuscad Posté(e) le 16 mars 2005 Posté(e) le 16 mars 2005 Ludwig Pour identifier tes applications utilisées pour pouvoir faire ton (enget ename [listapp]), voici comment tu peux faire (setq dxf_app (tblnext "APPID" T)) (print (cdr (assoc 2 dxf_app))) (while (setq dxf_app (tblnext "APPID")) (print (cdr (assoc 2 dxf_app))) ) Tu auras ainsi la liste de tes applications enregistrée dans ton dessin.Après c'est une gestion des données étendues.....Il faut bien connaitre sa structure (pas évident) :casstet: Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
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