laurentpo Posté(e) le 24 février 2014 Posté(e) le 24 février 2014 Bonjour. Je souhaiterais pouvoir créer un programme en LISP qui écrirait, dans un fichier texte, les coordonnées du dernier point qui vient juste d'être créé. J'ai trouvé ce programme qui me paraît être un très bon point de départ: (defun c:PO2TXT (/ file points c i) ;POints to TeXT (setq nomfic "C:/test/CoordPoint.txt") (setq file (open nomfic "w")) (setq points (ssget) i 0) (repeat (sslength points) (if (= "POINT" (cdr (assoc 0 (entget (ssname points i))))) (setq c (cdr (assoc 10 (entget (ssname points i)))) i (1+ i) ) ) (write-line (strcat (rtos (car c)) " ; " (rtos (cadr c)) " ; " (rtos (caddr c)) ) file) ) (close file) (Princ) ) Mais je n'arrive pas à remplacer la sélection des points à l'écran (visiblement la commande ssget) par la sélection d'un seul qui est le dernier créer (peut-être avec la commande entlast). Merci beaucoup.
Tramber Posté(e) le 25 février 2014 Posté(e) le 25 février 2014 Si je remplace ta fonction (defun c:PO2TXT (/ file points c i) ;POints to TeXT (setq nomfic "C:/test/CoordPoint.txt") (setq file (open nomfic "w")) (setq points (ssget '((0 . "POINT"))) i 0) (cond(points (setq dernier(cdr (assoc 10 (entget (ssname points(1-(sslength points))))))) (write-line (strcat (rtos (car dernier)) " ; " (rtos (cadr dernier)) " ; " (rtos (caddr dernier)) ) file) )) (close file) (Princ) )Cela devrait fonctionner pour le dernier point créé dans une sélection (je crois que l'ordre de création est pris en compte).Si tu veux le dernier point créé dans le dessin entier, je peux te changer la formule.... ou toi-même en replacant :(ssget '((0 . "POINT")))par (ssget "_X" '((0 . "POINT"))) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
laurentpo Posté(e) le 25 février 2014 Auteur Posté(e) le 25 février 2014 Merci beaucoup pour le coup de main. J'ai utilisé le code avec la variante (ssget "_X" '((0 . "POINT"))) Pour pouvoir tester j'ai créé un nouveau fichier puis créer 3 points avec la commande point en saisissant les coordonnées à la main puis j'ai lancer le LISP. Mais c'est le premier point créer qui est écrit dans le fichier texte et pas le dernier.
Olivier Eckmann Posté(e) le 25 février 2014 Posté(e) le 25 février 2014 Alors il faut remplacer (ssname points(1-(sslength points))) par (ssname points 0)
laurentpo Posté(e) le 25 février 2014 Auteur Posté(e) le 25 février 2014 Cela fonctionne parfaitement.Merci beaucoup à tous les deux pour votre aide rapide et efficace.
Tramber Posté(e) le 25 février 2014 Posté(e) le 25 février 2014 Ah ben oui, je donnais le premier au lieu du dernier !J'avais testé la première routine mais point (!) la seconde version. :P Merci Olivier. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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