Aller au contenu

Listing xyz et Distance Polyligne 2D


Messages recommandés

Posté(e)

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,00

Distance : 200

Sommet 2 : X=1200,000 Y=2000,00

Distance : 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.

 

 

 

Posté(e)

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

  • 2 mois après...
Posté(e)

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

Posté(e)

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

Posté(e)

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).

  • 1 an après...
Posté(e)

J'ai aussi essayé la commande partielle

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

)

)

Resultat

error: malformed list on input

Comprend pas ?

Acadnadien

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité