CDL Posté(e) le 17 mars 2006 Posté(e) le 17 mars 2006 J'ai trouvé ce petit LISP pratique sur mon manuel autoCAD V12 :cool: mais c'etait avec un entlast au début et entget derrierepour 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]
(gile) Posté(e) le 17 mars 2006 Posté(e) le 17 mars 2006 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
(gile) Posté(e) le 17 mars 2006 Posté(e) le 17 mars 2006 Tu peux aussi rajouter (textscr) avant le dernier (princ) pour ouvrir la fenêtre de texte. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 17 mars 2006 Posté(e) le 17 mars 2006 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
CDL Posté(e) le 17 mars 2006 Auteur Posté(e) le 17 mars 2006 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 ! :)
bonuscad Posté(e) le 17 mars 2006 Posté(e) le 17 mars 2006 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
(gile) Posté(e) le 18 mars 2006 Posté(e) le 18 mars 2006 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
CDL Posté(e) le 19 mars 2006 Auteur Posté(e) le 19 mars 2006 Merci bonuscad !Superbe utilisation de la fonction alerte ! :) Merci (giles) c’est trop funBeaucoup 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
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