youssefb Posté(e) le 29 août 2016 Posté(e) le 29 août 2016 Bonjour tout le monde, Je suis nouveau sur le Forum 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,
didier Posté(e) le 30 août 2016 Posté(e) le 30 août 2016 Coucou Bienvenue sur CadXPLa 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ésLes écrire automatiquement avec des flèches de renvoi ? dans ce cas il faut utiliser une routine lispMerci de préciser la demande pour que la réponse soit satisfaisante. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
youssefb Posté(e) le 30 août 2016 Auteur Posté(e) le 30 août 2016 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. :)
Lommig Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 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
didier Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
youssefb Posté(e) le 31 août 2016 Auteur Posté(e) le 31 août 2016 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
didier Posté(e) le 31 août 2016 Posté(e) le 31 août 2016 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
youssefb Posté(e) le 1 septembre 2016 Auteur Posté(e) le 1 septembre 2016 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,
didier Posté(e) le 1 septembre 2016 Posté(e) le 1 septembre 2016 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épertoireEnsuite dans AutoCAD menu Outils > AutoLisp > Charger une ApplicationSe diriger vers le répertoire où est le fichier copié sur le site puis cliquer sur chargerAutre 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 milieuLes 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 1 septembre 2016 Posté(e) le 1 septembre 2016 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 AutoCADMais 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
youssefb Posté(e) le 2 septembre 2016 Auteur Posté(e) le 2 septembre 2016 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
didier Posté(e) le 2 septembre 2016 Posté(e) le 2 septembre 2016 Coucou Content d'avoir rendu serviceÀ ta disposition dans le futur, mais souviens-toi d'expliciter clairement les demandes. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 2 septembre 2016 Posté(e) le 2 septembre 2016 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
zebulon_ Posté(e) le 2 septembre 2016 Posté(e) le 2 septembre 2016 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 AmicalementVincent 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)
bonuscad Posté(e) le 2 septembre 2016 Posté(e) le 2 septembre 2016 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
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