Coucou,
Je me demande si...la raison ne vient pas plutôt du fait que l'on compare deux points (possédant chacun des coordonnées) et j'avais déjà eu un soucis similaire à cause notamment au géoréférencement de mes plans mais aussi parfois sur des écarts de précision...
J'avais essayé de solutionner le problème avec cette fonction mais je ne sais pas si cela te sera utile :
(defun pt-member (pt pt-list fuzz / d)
(setq d (strlen (substr (vl-princ-to-string fuzz) (1+ (cond ((= (type fuzz) 'REAL) (vl-string-position (ascii ".") (vl-princ-to-string fuzz))) (t 0))))))
(if (> (length pt) (length (car pt-list)))
(setq pt (reverse (cdr (reverse pt))))
)
(while (and pt-list
(not (equal (mapcar '(lambda (x) (rtos x 2 d)) pt) (mapcar '(lambda (x) (rtos x 2 d)) (car pt-list)) fuzz))
)
(setq pt-list (cdr pt-list))
)
pt-list
)
L'idée ici c'est de vérifier si oui ou non, un point appartient à une liste de point, avec
pt le point à comparer,
pt-list la liste de point à comparer et
fuzz le degré de précision. Plus le fuzz est précis (
ex : 0.001) et plus tu veux t'assurer de la position exacte du point. Le retour est similaire à la fonction
(member) qui retourne la liste restante à partir du point correspondant à la recherche.
C'était une idée comme une autre, développé en peu de temps donc probablement pas parfaite mais cela avait corrigé mon souci à l'époque.
Il serait également possible de comparer les points via (distance), bref un tas d'améliorations ^^
Petite remarque, tu n'as pas besoin d'écrire
(setq nompoly (cdr (assoc -1 (entget (entlast)))))
étant donné que
(entlast) te renvoie déjà le même résultat donc petit raccourci avec
(setq nompoly (entlast))
et un autre raccourci, c'est la fonction
(member) pour récupérer la liste des sommets d'une polyligne, car tu ne t'intéresse qu'au code DXF 10 donc boucler un
(member) en tronquant à chaque passage dans la boucle la liste obtenue via
(member), c'est plus rapide à l'exécution.
Bisous,
Luna