Aller au contenu

CODES DXF (rapides)


Messages recommandés

Posté(e)

J'ai trouvé ce petit LISP pratique sur mon manuel autoCAD V12 :cool:

 

mais c'etait avec un entlast au début et entget derriere

pour l'instant j'ai modifié comme ça

 

(defun C(deuxpoint)PRINTDXF ()
  (setq ent (ssget))
  (setq entl (entget (setq toto (ssname ent 0))))
  (setq ct 0)
  (princ "\nRésultat de entget l'entité:")
  (repeat (length entl)
        (print (nth ct entl))
        (setq ct (+ ct 1))
  )
) 

 

le second return du SSGET m'embete ! :casstet:

si ya mieux ?

:)

 

[Edité le 17/3/2006 par CDL]

Posté(e)

Salut,

 

le second return du SSGET m'embete !

 

Tu veux parler de la seconde invite "Choix des objets: " ?

 

Tu peux utiliser (ssget "_s") pour un seul objet ou (car (entget)) pour avoir directement le nom d'entité :

 

(defun C (2points) PRINTDXF ()
 (mapcar 'print
  (cons	"Résultat de entget l'entité:"
	(entget (car (entsel)))
  )
 )
 (princ)
)

 

Erratum : C'est (ssget "_:S") et non (ssget "_s")

 

[Edité le 17/3/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Très pratique aussi, à mon avis, pour accéder à la valeur d'un code dxf d'une entité, il y a GETVAL, trouvée dans la faq AutoLISP.

 

Cette routine est très polyvalente, elle accèpte comme argument aussi bien les "ENAME" que les listes entsel ou les listes entget :

 

;;; GETVAL (Reini Urban) Retourne la première valeur du groupe d'une entité.
;;; Accepte tous les genres de représentations de l'entité
;;; (ename, les listes entget, les listes entsel)
;;; NOTE:  Ne peut obtenir que le premier groupe 10 d'une LWPOLYLINE !

(defun GETVAL (grp ele)                 ; " valeur dxf" de tout entite.
   (cond ((= (type ele) 'ENAME)          ; ENAME
           (cdr (assoc grp (entget ele))))
         ((not ele) nil)                 ; valeur vide
         ((not (listp ele)) nil)         ; element invalide
         ((= (type (car ele)) 'ENAME)    ; liste entsel
           (cdr (assoc grp (entget (car ele)))))
         (T (cdr (assoc grp ele)))       ; liste entget
   )
 ) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Tu peux aussi rajouter (textscr) avant le dernier (princ) pour ouvrir la fenêtre de texte.

C'etait dans l'exemple ! :P (mais je fait toujours le minimum)

Merci pour les autres astuses , je teste (pas facile, faire 2 truc en mene temps sur 2 ordi) :casstet:

A demain !

:)

Posté(e)

Une routine que je me sers assez souvent quand je monte des lisp.

 

Ca m'évite de chercher à chaque fois dans l"aide pour me remémorer le code que je recherche :exclam:

 

(defun c:dxflistdata ( / oldim obj lst_pair grp_el typ_el ch1 ch2 ch nb msg ent)
(setq ent 0 oldim (getvar "dimzin"))
(setvar "dimzin" 0)
(while (not (listp ent))
(if user-dxf
	(setq msg "\n[Entite/Sous-entite]< S > - Choix de l'objet à lister ses codes DXF: ")
	(setq msg "\n[Entite/Sous-entite]< E > - Choix de l'objet à lister ses codes DXF: ")
)
(initget "Entite Sous-entite")
(if user-dxf
	(setq ent (nentsel msg))
	(setq ent (entsel msg))
)
(if (eq ent "Sous-entite") (setq user-dxf T))
(if (eq ent "Entite") (setq user-dxf nil))
)
(cond
(ent
	(setq obj (entget (car ent)) ch "\tDATA DXF d'OBJET\n" nb 1)
	(while obj
		(setq lst_pair (car obj))
		(setq grp_el (car lst_pair) typ_el (cdr lst_pair))
		(cond
			((eq (type grp_el) 'INT)
				(setq ch1 (itoa grp_el))
			)
			((eq (type grp_el) 'REAL)
				(setq ch1 (rtos grp_el 2 4))
			)
			((eq (type grp_el) 'STR)
				(setq ch1 grp_el)
			)
			((eq (type grp_el) 'ENAME)
				(setq ch1 "")
			)
			(T
				(setq ch1 "")
			)
		)
		(cond
			((eq (type typ_el) 'INT)
				(setq ch2 (itoa typ_el))
			)
			((eq (type typ_el) 'REAL)
				(setq ch2 (rtos typ_el 2 4))
			)
			((eq (type typ_el) 'STR)
				(setq ch2 typ_el)
			)
			((eq (type typ_el) 'ENAME)
				(setq ch2 "")
			)
			((eq (type typ_el) 'LIST)
				(setq ch2 (strcat (rtos (car typ_el) 2 4) " " (rtos (cadr typ_el) 2 4) (if (caddr typ_el) (strcat " " (rtos (caddr typ_el) 2 4)) "")))
			)
			(T
				(setq ch2 "")
			)
		)
		(if (eq (type typ_el) 'LIST)
			(setq ch (strcat ch "(" ch1 " " ch2 ")\n"))
			(setq ch (strcat ch "(" ch1 " . " ch2 ")\n"))
		)
		(setq obj (cdr obj) ch1 "" ch2 "" nb (1+ nb))
		(if (> nb 31) (progn (alert ch) (setq ch "suite DATA DXF d'OBJET\n" nb 1)))
	)
	(alert ch)
)
)
(setvar "dimzin" oldim) 
(prin1)
)

 

NB: espace après le < et avant le > .Mais ici ça ne bloque pas le code,

Pas obligé de les enlever (histoire de présentation correct sur le forum)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Pour le fun, une synthèse "à ma façon" de la routine proposée à CDL et de celle de Bonuscad :

 

(defun c:dxf_lst ()
 (initget "Entité Sous-entité")
 (mapcar
   'print
   (entget
     (car
(if (= (getkword "\n[Entité/Sous-entité]: ")
       "Sous-entité")
  (nentsel)
  (entsel)
)
     )
   )
 )
 (textscr)
 (princ)
) 

 

[Edité le 19/3/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci bonuscad !

Superbe utilisation de la fonction alerte ! :)

Merci (giles) c’est trop fun

Beaucoup de fonctions que je ne maîtrise pas encore assez ! :o

 

Bonne semaine !

Pour moi lundi c’est : les cases de dialogues et la création de fichiers ! :casstet:

 

pour info j'ai testé sur LT+LTExtender : sans problémes ! :D

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é