Aller au contenu

Code DXF de LONGUEUR et LARGEUR d\'une entité MUR


LUDWIG

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

AutoCAD, Revit, GstarCAD, Fisa-CAD, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

(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

AutoCAD, Revit, GstarCAD, Fisa-CAD, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

Tu fais un copier/coller sur la ligne de commande de ces deux morceaux de code

puis 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

AutoCAD, Revit, GstarCAD, Fisa-CAD, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité