Aller au contenu

Extraction des coordonnées des noeuds des polylignes


Messages recommandés

Posté(e)

Bonjour tout le monde, Je suis nouveau sur le Forum :rolleyes:

 

Je me demande s'il existe un moyen pour extraire les coordonnées (x,y) des extrémités des polylignes d'un dessin Autocad.

 

Merci d'avance

 

 

 

Youssef,

Posté(e)

Coucou

 

Bienvenue sur CadXP

La règle (non écrite) qui précise que les nouveaux inscrits posent mal les questions est respectée.

 

Que souhaites-tu ?

  • Connaître les coordonnées de début et fin de la polyligne ? dans ce cas utilise la case des propriétés
  • Les écrire automatiquement avec des flèches de renvoi ? dans ce cas il faut utiliser une routine lisp

Merci de préciser la demande pour que la réponse soit satisfaisante.

 

Amicalement

Posté(e)

Merci Didier pour votre réponse rapide.

 

En effet, je dispose d'un plan Autocad d'un réseau d'eau potable (2500 conduites) et je cherche dans le cas idéale d'extraire vers un tableau excel les coordonnées X,Y du point milieu de chaque conduite. J'imagine que ce n'est pas faisable d'un seul coup, du coup j'ai pensé à exploiter les coordonnées des extrémités des conduites.

 

Meilleures salutations. :)

Posté(e)

Bonjour,

 

Je peux te proposer une méthode simple (qui demande un peu de manipulations sous Excel) :

Tu peux utiliser la commande "Extraction de données" présente dans le menu "Outils".

Elle te permet de générer un fichier Excel avec les coordonnées de tous les sommets de tes polylignes.

Après, avec une petite formule sous Excel, tu peux simplement calculer le milieu de ces sommets.

 

Guillaume

AutoCAD, AutoCAD Map3D, AutoCAD Architecture, Revit, COVADIS, InfraWorks 360, ReCap 360, ...

BIM Infrastructure

Posté(e)

Coucou

 

On ne sait pas encore tout ce qu'il faut savoir pour t'aider efficacement !

Ces 2500 polylignes :

  • sont-ce 2500 poylignes différentes ?
  • sont-ce des polyligne avec de multiples segments ?
  • y-a-t'il des arcs dans certaines ?

On peut rapidement te faire un programme qui fera ce travail encore faut-il avoir les bonnes données du problème.

 

Le plus efficace serait de déposer un exemple de fichier sur le site (pas la totalité) avec un exemple de ce que tu veux obtenir.

Pense à zipper le fichier avant l'upload car CadXP refuse les DWG.

 

Amicalement

Posté(e)

Coucou

 

Voici un code qui va te rendre service si et seulement si

les polylignes à traiter sont des segments unitaires à deux sommets :

 

(setq Fic_Texte	"milieux.txt"
 	f	(open Fic_Texte "w")
 	n	-1
 	) ;_ fin de setq

(setq JeuSel (ssget "X" (list (cons 0 "LWPOLYLINE"))))
    ;(setq JeuSel (ssget (list (cons 0 "LWPOLYLINE"))))

(repeat	(sslength jeusel)
	(setq List-sommets
	     (vlax-safearray->list
		     (variant-value
			     (vlax-get-property
				     (vlax-ename->vla-object
					     (ssname jeusel (setq n (+ 1 n)))
					     ) ;_ fin de vlax-ename->vla-object
				     'coordinates
				     ) ;_ fin de vlax-get-property
			     ) ;_ fin de variant-value
		     ) ;_ fin de vlax-safearray->list
  	) ;_ fin de setq
(setq pmil
	     (list (/ (+ (nth 0 list-sommets) (nth 2 list-sommets)) 2.0)
		       (/ (+ (nth 1 list-sommets) (nth 3 list-sommets)) 2.0)
		       ) ;_ fin de list
  	) ;_ fin de setq
(write-line
	(strcat (rtos (car pmil) 2) "," (rtos (cadr pmil) 2))
	f
	) ;_ fin de write-line
) ;_ fin de repeat

(close f)

 

En souhaitant que cela te soit utile ...

Au fait :

Pourquoi tu parles de "nœuds" dans l'intitulé ?

 

Amicalement

Posté(e)

Coucou

 

Ah j'ai oublié de te dire un truc :

La cinquième ligne du code est pour faire un jeu de sélection global de toutes les polylignes de tous le calques du fichier,

Si tu souhaites choisir "classiquement" avec un message "choix des objets":

Intervertis les points-virgules comme ceci :

 


 ; (setq JeuSel (ssget "X" (list (cons 0 "LWPOLYLINE"))))
(setq JeuSel (ssget (list (cons 0 "LWPOLYLINE"))))

 

Amicalement

Posté(e)

Bonjour messieurs,

 

J'ai exploré la piste d'extraction de données depuis Autocad mais sans résultats, ca me donne les longueurs de mes polylignes et non pas les coordonnées que je cherche, je te remercie beaucoup Guillaume! :D :D

 

Didier, Je vous mets en bas une partie du fichier source et un modèle du fichier de sortie que je cherche à avoir finalement, sinon je n'ai pas su comment exécuter le code que tu m'as écrit , je n'ai jamais utilisé un :D :D Je te remercie vivement!

 

Youssef.

 

Mon lien

Posté(e)

Coucou

 

OK, je déposerai le fichier lisp en pièce jointe, ce sera plus facile à lancer la commande.

 

Mais avant de le faire, dis-moi si le formatage du fichier est vraiment nécessaire

Car avec ma routine je n'extrais pas le calque de l'entité

C'est tout à fait facile à faire si besoin est

Et je n'extrais pas non plus les coordonnées des sommets,

J'écris directement dans le fichier les coordonnées des milieux des segments droits.

  • il me faut savoir aussi si tu veux choisir tes polylignes de manière classique "choix des objets" ?
  • ou s'il faut traiter la totalité des polylignes de tous les calques du fichier ?
  • d'ailleurs ces polylignes sont bien des segments droits avec deux sommets ?

Quand je saurai ça je déposerai le fichier prêt à l'emploi.

 

Amicalement

 

Posté(e)

Bonjour Didier, je vous remercie pour ta réactivité .

 

Pour le formatage, il me suffira la longueur, et les coordonnées du point milieu de chaque conduite.

Sinon pour le selection, je dois traiter la totalité des polylignes du dessin et puis ces polylignes sont bien des segments droits avec deux sommets.

 

as-tu une bonne formation de AutoLisp que tu peux me recommander ?

 

 

Merci beaucoup.

 

Meilleures salutations,

Posté(e)

Coucou

 

Le fichier lisp est en pièce jointe,

Pour charger un fichier lisp si tu n'es pas au point :

Copier le fichier dans un répertoire

Ensuite dans AutoCAD menu Outils > AutoLisp > Charger une Application

Se diriger vers le répertoire où est le fichier copié sur le site puis cliquer sur charger

Autre solution :

Glisser-déposer le fichier depuis l'explorer de Windows dans l'interface graphique d'AutoCAD.

 

Ma routine va te créer un fichier milieux.txt qui contiendra les champs :

calque,longueur, X du milieu, Y du milieu

Les champs sont séparés par une virgule ce qui le rend facilement lisible par Excel

 

J'ai rajouté le renseignement du calque de l'entité au cas où tu souhaites filtrer dans Excel !

 

Amicalement

CadXp_Ecrire_Milieu_Polylignes_Fichier_Texte.LSP

Posté(e)

Coucou

 

Je n'ai pas répondu à toutes les questions mais toi non plus...

Pour l'apprentissage du lisp la question a tellement été posée par tellement de gens que la réponse est éculée :

Se définir un but précis, s'y tenir, ne pas lâcher l'affaire jusqu'à obtention de résultats, perso j'ai mis des mois mais c'était avant l'internet.

Je suis sur le point de mettre mon site perso d'apprentissage de programmation sur AutoCAD

Mais il ne faut pas croire que lire c'est savoir, je reprends ma métaphore souvent citée :

Pour apprendre à marcher : il faut mettre un pied devant l'autre et recommencer, ça y est tu sais marcher (en théorie)

Teste des solutions et prends conseil sur CadXp on te répondra

 

Pourquoi parles-tu de nœuds ?

 

Amicalement

Posté(e)

Bonjour Didier et Bravo!

 

Je te remercie pour ton superbe programme!! C'est magic! Je te remercie ainsi pour tes recommandations!

 

Et je m'excuse pour mes réponses en retard . Je viens de déménager et je n'ai toujours pas la connexion.

 

Je voulais dire par noeuds les points d'interrogation des conduites.

 

Mes salutations

 

Youssef

Posté(e)

Salut,

 

À didier,

Juste pour information, les fonctions vlax-curve* (qui prennent aussi bien un ename qu'un vla-object en argument) permettent d'obtenir tous ces renseignements et ce quelque soient le nombre de segments et la nature des segments (droit ou en arc)

 

(setq lon  (vlax-curve-getDistAtParam
     poly
     (vlax-curve-getEndParam poly)
   )
     pmil (vlax-curve-getpointAtDist poly (/ lon 2.0))
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour (Gile),

 

effectivement les fonctions vlax-curve sont bien utiles. Cependant, le param utilisé par certaines de ces fonctions reste assez mystérieux. En y regardant de plus prêt, la fonction (vlax-curve-getParamAtPoint curve-obj point) peut s'avérer très utile pour déterminer sur quel segment de la polyligne curve-obj se situe le point. Le paramètre renvoyé s'il est par exemple 1.5, alors on sait que le point est au milieu du 2ème segment, s'il est 2.75 alors il est au 3/4 du 3ème segment... si le point est un sommet, on a une valeur entière. J'ai fait quelques essais sur une polyligne car je n'ai pas trouvé dans l'aide ce que signifie ce Param où on nous dit uniquement "A number representing a parameter..." ce qui n'est pas très parlant !

 

A toutes fins utiles, espérant ne pas être hors sujet

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)
Cependant, le param utilisé par certaines de ces fonctions reste assez mystérieux.

 

Effectivement, je l'ai déjà remarqué.

Pour des polylignes cela fonctionne bien, on retrouve facilement l'index de position par rapport aux sommets.

Par contre pour une ligne ce n'est plus un index mais une longueur de position.

Et pour une spline, et bien j'en sais rien c'est resté très obscur pour moi... jamais arrivé à identifier à quoi cela pouvait correspondre.

 

C'est bien la seule fonction vlax-curve qui donne un retour différent de cette valeur paramètre suivant l'objet traité.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é