Salut, Plusieurs choses: 1. entlast retourne le nom d'entité (ENAME) de la dernière entité, donc pas besoin de faire : (setq nomEntité(cdar(entget(entlast)))) 2. entnext retourne le nom d'entité (ENAME) de l'entité suivant celle passée en argument. (entnext (entlast)) retournera toujours nil (pas d'entité suivant la dernière) sauf si entlast est une entité complexe (référence de bloc avec attribut, polyligne 2d ou 3d, maillage). La commande POLYLIGN (_PLINE) crée des entité de type LWPOLYLINE (polylignes optimisées) qui ne sont pas des entités complexes et contiennent tous leurs sommets dans liste DXF de l'entité. 3. Plutôt que de faire 3 appels de la fonction entget, n'en faire qu'un et attribuer la liste résultante dans une variable. (setq nomEntité (entlast))
(setq listeDXF (entget nomEntité))
(setq s1 (cdr (assoc 10 listeDXF)))
(setq s2 (cdr (assoc 10 (cdr (member (assoc 10 listeDXF) listeDXF))))) Ou encore, pour avoir tous les sommets (groupe DXF 10) d'une polyligne, tu peux utiliser une des nombreuses variantes de la fonction souvent appelée massoc (MultipleASSOC) en faisant : (setq sommets (massoc 10 listeDXF) avec foreach (defun massoc (key alst / ret)
(foreach p alst
(if (= (car p) key)
(setq ret (cons p ret))
)
)
(reverse ret)
) avec while (defun massoc (key alst / ret)
(while alst
(if (= (caar alst) key)
(setq ret (cons (car alst) ret))
)
(setq alst (cdr alst))
)
(reverse ret)
) avec vl-remove-if-not (defun massoc (key alst)
(vl-remove-if-not
'(lambda (x)
(= (car x) key)
)
alst
)
) avec append + mapcar (defun massoc (key alst)
(apply 'append
(mapcar '(lambda (x)
(if (= (car x) key)
(list x)
)
)
alst
)
)
) avec repeat (defun massoc (key alst / ret)
(repeat (length alst)
(if (= (caar alst) key)
(setq ret (cons (car alst) ret))
)
(setq alst (cdr alst))
)
(reverse ret)
) récursive (defun massoc (key alst)
(if (setq alst (member (assoc key alst) alst))
(cons (car alst) (massoc key (cdr alst)))
)
)