willy95 Posté(e) le 11 octobre 2008 Posté(e) le 11 octobre 2008 Bonjour à tous... Je suis débutant en la matière et je n'arrive pas à ecrire dans un fichier txt les renseignements type coordonnées des sommets d'une polyligne ainsi que les distances entre eux, Je recherche à présenter de la manière suivante : Sommet 1 : X=1000,000 Y=2000,00Distance : 200 Sommet 2 : X=1200,000 Y=2000,00Distance : 200 Sommet 3 : X=1400,000 Y=2000,00 etc... Si quelqu'un peu m'aider sur ce sujet j'en serai très reconnaissant. Merci à tous pour vos aide.
(gile) Posté(e) le 11 octobre 2008 Posté(e) le 11 octobre 2008 Salut et bienvenue, AutoCAD ne permet pas de faire ce que tu demandes sans un peu de programmation. Tu peux Utiliser la commande LISTE pour avoir la liste des sommets de la polyligne et la commande DISTANCE pour chaque distance entre les sommets. Mais il faudra ecrire toi même ton fichier txt. Sinon, je te propose un petit LISP qui Automatise tout ça (pour le chargement et l'utilisation de LISP, voir ce sujet) (defun c:pline2txt (/ pl elst file pts cnt) (if (and (setq pl (car (entsel "\nSélectionnez une polyligne: "))) (setq elst (entget pl)) (= (cdr (assoc 0 elst)) "LWPOLYLINE") ) (if (setq file (getfiled "Créer un fichier" "" "txt" 1)) (progn (setq pts (mapcar 'cdr (vl-remove-if-not (function (lambda (x) (= (car x) 10))) elst ) ) file (open file "w") cnt 1 ) (and (= 1 (logand 1 (cdr (assoc 70 elst)))) (setq start (car pts)) ) (while (cdr pts) (write-line (strcat "Sommet " (itoa cnt) " : X=" (rtos (caar pts)) " Y=" (rtos (cadar pts)) ) file ) (write-line (strcat "Distance : " (rtos (distance (car pts) (cadr pts))) ) file ) (setq pts (cdr pts) cnt (1+ cnt) ) ) (write-line (strcat "Sommet " (itoa cnt) " : X=" (rtos (caar pts)) " Y=" (rtos (cadar pts)) ) file ) (and start (write-line (strcat "Distance : " (rtos (distance (car pts) start)) ) file ) ) ) ) (princ "\nEntité non valide.") ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
willy95 Posté(e) le 14 décembre 2008 Auteur Posté(e) le 14 décembre 2008 Bonjour, après avoir étudier votre programme que vous m'aviez transmis sur les coordonnées des sommets de polylignes exportées dans un fichier txt, je pensai pouvoir rajouter à la fin de la liste : la superificie totale en m² et le périmètre total en m. Je suis vraiement perdu sans votre aide pour pourvoir rajouter ces formules correctement, pouvez vous m'aider ? J'ai vraiement chercher et etudier votre programme mais ma difficulté ce trouve dans la position de ces textes et la non répétition de mes rajouts. Je l'espere, Au plaisir de vous lire. PS : message recu sur la communication
(gile) Posté(e) le 14 décembre 2008 Posté(e) le 14 décembre 2008 Salut, J'ai un peu modifié la routine (passage en Visual LISP où les propriétés Length (périmètre) et Area (aire) sont directement accessibles) tou en conservant l'essentiel de sa structure. La comparaison des deux peut t'aider à comprendre les différences entre AutoLISP et Visual LISP pour traiter une polyligne. (defun c:pline2txt (/ pl file pts cnt start) (vl-load-com) (if (and (setq pl (car (entsel "\nSélectionnez une polyligne: "))) (setq pl (vlax-ename->vla-object pl)) (= (vla-get-ObjectName pl) "AcDbPolyline") ) (if (setq file (getfiled "Créer un fichier" "" "txt" 1)) (progn (setq pts (2d-Coord->pt-lst (vlax-get pl 'Coordinates)) file (open file "w") cnt 1 ) (and (= (vla-get-Closed pl) :vlax-true) (setq start (car pts)) ) (while (cdr pts) (write-line (strcat "Sommet " (itoa cnt) " : X=" (rtos (caar pts)) " Y=" (rtos (cadar pts)) ) file ) (write-line (strcat "Distance : " (rtos (distance (car pts) (cadr pts))) ) file ) (setq pts (cdr pts) cnt (1+ cnt) ) ) (write-line (strcat "Sommet " (itoa cnt) " : X=" (rtos (caar pts)) " Y=" (rtos (cadar pts)) ) file ) (and start (write-line (strcat "Distance : " (rtos (distance (car pts) start)) ) file ) ) (write-line (strcat "Périmètre = " (rtos (vla-get-Length pl))) file) (write-line (strcat "Aire = " (rtos (vla-get-Area pl))) file) (close file) ) ) (princ "\nEntité non valide.") ) (princ) ) ;;; 2d-coord->pt-lst Convertit une liste de coordonnées 2D en liste de points 2D ;;; (2d-coord->pt-lst '(1.0 2.0 3.0 4.0)) -> ((1.0 2.0) (3.0 4.0)) (defun 2d-coord->pt-lst (lst) (if lst (cons (list (car lst) (cadr lst)) (2d-coord->pt-lst (cddr lst)) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
willy95 Posté(e) le 14 décembre 2008 Auteur Posté(e) le 14 décembre 2008 Encore merci pour tout j'ai compris comment faire avec " (write-line (strcat "Aire = " (rtos (vla-get-Area pl))) file) " j'ai juste du mal avec les "vla" que je ne connais pas du tout. Merci à tous et surtout à Gile qui ecrit aussi vite qu'il pense (pas comme moi).
pierrevigneux Posté(e) le 24 janvier 2010 Posté(e) le 24 janvier 2010 (defun c:pline2txt (/ pl file pts cnt start)Question sur le lips : Est-ce qu'il peut fonctionner sur la version 2004? Merci ! [Edité le 24/1/2010 par pierrevigneux] Acadnadien
willy95 Posté(e) le 24 janvier 2010 Auteur Posté(e) le 24 janvier 2010 Personellement je m'en sert sur 2006 sans probleme.
pierrevigneux Posté(e) le 24 janvier 2010 Posté(e) le 24 janvier 2010 documents/Routines/pline2txt.lsp") ; error: bad argument type: numberp: nil Voilà ce qu'elle me retourne! Acadnadien
(gile) Posté(e) le 24 janvier 2010 Posté(e) le 24 janvier 2010 Salut, Essaye de refaire un copier coller.Il ne devrait y avoir aucun problème avec les versions d'AutoCAD postérieures à 2000. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pierrevigneux Posté(e) le 24 janvier 2010 Posté(e) le 24 janvier 2010 Bonsoir!Mais c'est ce que j'ai fait Essaye de refaire un copier coller. Il ne devrait y avoir aucun problème avec les versions d'AutoCAD postérieures à 2000. Acadnadien
pierrevigneux Posté(e) le 24 janvier 2010 Posté(e) le 24 janvier 2010 J'ai aussi essayé la commande partielledefun c:pline2txt (/ pl file pts cnt start) (vl-load-com) (if (and (setq pl (car (entsel "\nSélectionnez une polyligne: "))) (setq pl (vlax-ename->vla-object pl)) (= (vla-get-ObjectName pl) "AcDbPolyline") ) (if (setq file (getfiled "Créer un fichier" "" "txt" 1)) (progn (setq pts (2d-Coord->pt-lst (vlax-get pl 'Coordinates)) file (open file "w") cnt 1 ) (and (= (vla-get-Closed pl) :vlax-true) (setq start (car pts)) ) (while (cdr pts) (write-line (strcat "Sommet " (itoa cnt) " : X=" (rtos (caar pts)) " Y=" (rtos (cadar pts)) ) file ) (write-line (strcat "Distance : " (rtos (distance (car pts) (cadr pts))) ) file ) (setq pts (cdr pts) cnt (1+ cnt) ) ) (write-line (strcat "Sommet " (itoa cnt) " : X=" (rtos (caar pts)) " Y=" (rtos (cadar pts)) ) file ) (and start (write-line (strcat "Distance : " (rtos (distance (car pts) start)) ) file ) )Resultaterror: malformed list on inputComprend pas ? Acadnadien
(gile) Posté(e) le 24 janvier 2010 Posté(e) le 24 janvier 2010 Il manque la première parenthèse... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pierrevigneux Posté(e) le 24 janvier 2010 Posté(e) le 24 janvier 2010 Désolé !Il manque la première parenthèse Je l'ai recopié une autre fois vérifié la première parenthèse,même réponse. Acadnadien
pierrevigneux Posté(e) le 24 janvier 2010 Posté(e) le 24 janvier 2010 J'ai tout recopié, la commade au complet et ré-essayé, ça fontionne très bien maintenant. Les sommets en xy, les distances, le périmètre et l'aire, le tout dans un fichier txt. Je crois que je ne suis pas vraiment doué en lips. Mes excuses et merci encore une fois Gile ! [Edité le 24/1/2010 par pierrevigneux] Acadnadien
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