abe49 Posté(e) le 22 août 2016 Partager Posté(e) le 22 août 2016 Bonjour à tous, Etant novice sur le site, j'espère que mon post ne sera pas redondant avec un ancien sujet.J'ai besoin pour implémenter des données dans un logiciel de modélisation hydraulique d'extraire des longueurs hydrauliques à partir de fichiers AutoCAD.Pour ce faire, j'ai tenté la fonction _DATAEXTRACTION, mais le résultat n'est pas satisfaisant (pas de cohérence entre l'ordre de sélection des polylignes et le fichier xls).Aussi, j'ai entrepris de créer un LISP (il faut bien se lancer un jour ; merci pour le fascicule de M. Gilles Chanteau), qui me permettrait de mesurer des distances et d'enregistrer au fur et à mesure les résultats dans un fichier texte. Toutefois, mon niveau proche du néant ne me permet de comprendre où est mon erreur dans mon code.Pourriez-vous m'éclairer ?Voici mon code :;; DIST (gerald) ;; Envoie vers excel la distance entre 2 points. (defun c:lg (/ p1 p2 file) (while (setq p1 (getpoint "\nSpécifiez le premier point : ")) (setq p2 (getpoint "\nSpécifiez le second point : ")) (setq dist (distance p1 p2)) ) (setq file (open "c:\\Distances.txt" "w")) (write-line (dist) file) (close file) ) A bientôt,Gérald Lien vers le commentaire Partager sur d’autres sites More sharing options...
DenisHen Posté(e) le 22 août 2016 Partager Posté(e) le 22 août 2016 Bonjour, et bienvenu. Qu'est-ce qui ne fonctionne pas dans ton code ? Je pense que ton fichier "Distance.txt" ne contient que la dernière distance. Il me semble que l'overture en mode append résoudrait ce problème.(setq file (open "c:\\Distances.txt" "a")) Et dans ton fichier txt, te ne veux pas y placer aussi le nom de la section (ex:Pt4->Pt5 Dist=XXX.XX) avant la distance ? Mais tu devrais avoir d'autres réponses de membres plus calés en Lisp que moi... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi) Lien vers le commentaire Partager sur d’autres sites More sharing options...
DenisHen Posté(e) le 22 août 2016 Partager Posté(e) le 22 août 2016 Re, Essai ceci :;; DIST (gerald) ;; Envoie vers excel la distance entre 2 points. (defun c:lg (/ p1 dist NomFich) (while (setq p1 (getpoint "\nSpécifiez le premier point : ")) (setq dist (getdist p1 "\nSpécifiez le second point : ")) ) ;_ Fin de while (setq NomFich (strcat (getvar "dwgprefix") (getvar "dwgname"))) (setq NomFich (substr NomFich 1 (- (strlen NomFich) 4))) (setq NomFich (strcat NomFich ".txt")) (setq NomFich (open NomFich "a")) (write-line (rtos dist 2 2) NomFich) (close NomFich) (princ) ) ;_ Fin de defun Ton fichier sera au même endroit que ton DWG Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi) Lien vers le commentaire Partager sur d’autres sites More sharing options...
abe49 Posté(e) le 22 août 2016 Auteur Partager Posté(e) le 22 août 2016 Bonjour DenisH, Si je ne mets pas la séquence d'enregistrement dans le Lisp, effectivement, seule la dernière mesure apparaît dans la barre de commande d'AutoCAD.Si après j'ajoute la séquence d'enregistrement, AutoCAD m'indique "; erreur" + la dernière mesure et le fichier txt est vide. Tu as raison pour le mode d'ouverture, le "a" semble plus adapté (testé mais ne change rien pour l'instant, j'ai dû faire une bêtise plus grosse que moi). Ta suggestion d'ajouter un nom par ligne est judicieuse. C'est un Lisp pour débuter et qu'il faudra que j'essaie d'améliorer. La prochaine étape étant d'extraire la pente du TN sur le parcours hydraulique superficiel (pour l'instant, je l'extrait par le listing d'étiquette de covadis). Merci.Gérald Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 22 août 2016 Partager Posté(e) le 22 août 2016 Salut J'ai corrigé 2/3 petites choses(defun c:lg (/ p1 p2 file) (setq file (open "c:\\Distances.txt" "w")) (while (setq p1 (getpoint "\nSpécifiez le premier point : ")) (setq p2 (getpoint p1 "\nSpécifiez le second point : ")) (setq dist (distance p1 p2)) (write-line (rtos dist) file) ) (close file) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
DenisHen Posté(e) le 22 août 2016 Partager Posté(e) le 22 août 2016 Pour le cas où tu voudrais ajouter le nom d'un tronçon, tu peux tester ça :;; DIST (gerald) ;; Envoie vers excel la distance entre 2 points. (defun c:lg (/ p1 dist NomFich) (setq NomFich (strcat (getvar "dwgprefix") (getvar "dwgname"))) (setq NomFich (substr NomFich 1 (- (strlen NomFich) 4))) (setq NomFich (strcat NomFich ".csv")) (setq NomFich (open NomFich "a")) (while (setq Tronc (getstring "\nSaisir le nom du tronçon :")) (setq p1 (getpoint "\nSpécifiez le premier point : ")) (setq dist (getdist p1 "\nSpécifiez le second point : ")) (write-line (strcat Tronc ";" (rtos dist 2 2)) NomFich) (close NomFich) ) ;_ Fin de while (princ) ) ;_ Fin de defun Ce fichier sera un CSV pour une ouverture plus facile dans Excel. Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi) Lien vers le commentaire Partager sur d’autres sites More sharing options...
abe49 Posté(e) le 22 août 2016 Auteur Partager Posté(e) le 22 août 2016 Re-bonjour DenisH, Merci beaucoup pour ton amélioration. Toutefois, sur une séquence, seule la dernière mesure est enregistrée dans le fichier txt. Au plaisir de te lire,Gérald Lien vers le commentaire Partager sur d’autres sites More sharing options...
DenisHen Posté(e) le 22 août 2016 Partager Posté(e) le 22 août 2016 J'ai fais une petite modif, voici un code que j'ai testé :;; DIST (gerald) ;; Écrit dans un CSV les tronçons et leur distance. (defun c:lg (/ p1 dist Tronc Nom NomFich) (setq Nom (strcat (getvar "dwgprefix") (getvar "dwgname"))) (setq Nom (substr Nom 1 (- (strlen Nom) 4))) (setq Nom (strcat Nom ".csv")) (while (setq Tronc (getstring "\nSaisir le nom du tronçon :")) (setq p1 (getpoint "\nSpécifiez le premier point : ")) (setq dist (getdist p1 "\nSpécifiez le second point : ")) (setq NomFich (open Nom "a")) (write-line (strcat Tronc ";" (rtos dist 2 2)) NomFich) (close NomFich) ) ;_ Fin de while (princ) ) ;_ Fin de defun 1 Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi) Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 22 août 2016 Partager Posté(e) le 22 août 2016 Coucou Je ne viens pas te répondre mais te questionner car je manque d'éléments pour t'aider efficacement.De quelles distances parle-t'on ?Comment sont elles mesurées dans AutoCAD ?est-ce par exemple, entre deux blocs avec attributs ?ou bien des longueurs de polylignes ?sous quel format doit-on livrer les résultats ?le fichier de résultat est-il un xls, un cvs, un txt, autre chose ? Si le problème est bien posé il sera bien traité pour l’instant je ne sais pas quoi faire. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
abe49 Posté(e) le 23 août 2016 Auteur Partager Posté(e) le 23 août 2016 Bonjour DenisH, Patrick35 et Didier, Tout d'abord merci à vous trois pour vos réponse. Patrick35, tes corrections de mon code fonctionnent comme je le souhaitais. :) Merci. DenisH, tes corrections fonctionnent également, à part l'entrée des noms de bassin versant qui ne sont pas enregistrés dans le fichier texte. Mais, pour l'instant, avoir juste les distances me convient. Merci à toi aussi pour ton aide. Didier, en fait j'utilise Mike Urban pour la modélisation du fonctionnement en temps réelle de réseaux EP. Pour faire court, mon modèle est constitué de bassins versants (autant que d'entrée dans le réseau, e.g. avaloirs, branchement...), pour lesquels je dois déterminer, par exemple, la pente et la longueur hydraulique (le parcours de la goutte d'eau sur le bassin versant). Aussi, la fonction DIST d'AutoCAD me convient parfaitement (je n'ai pas besoin de conserver de traces de la mesure). Une fois mon fichier texte obtenu, je l'ouvre avec excel et je copie-colle le contenu dans la base de données Mike Urban (.mdb). J'espère avoir répondu à tes interrogations. Gérald. Lien vers le commentaire Partager sur d’autres sites More sharing options...
DenisHen Posté(e) le 23 août 2016 Partager Posté(e) le 23 août 2016 Salut. C'est curieux, chez moi, ça fonctionne... Voici ce que ça donne dans mon CSV :AB;13.28BC;14.29CD;11.43 Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi) Lien vers le commentaire Partager sur d’autres sites More sharing options...
abe49 Posté(e) le 25 août 2016 Auteur Partager Posté(e) le 25 août 2016 Salut, Désolé ! Effectivement, le lisp fonctionne. Gérald Lien vers le commentaire Partager sur d’autres sites More sharing options...
abd2080 Posté(e) le 11 mars 2018 Partager Posté(e) le 11 mars 2018 bonsoir monsieurs. Tout d'abord merci à vous: si vous permettez , je suis en train de découvrir le langage lisp; je me demande si quelqu'un peut apporter quelque modification sur ce lisp DIST (gerald). ;; DIST (gerald);; Écrit dans un CSV les tronçons et leur distance. (defun c:lg (/ p1 dist Tronc Nom NomFich) (setq Nom (strcat (getvar "dwgprefix") (getvar "dwgname"))) (setq Nom (substr Nom 1 (- (strlen Nom) 4))) (setq Nom (strcat Nom ".csv")) (while (setq Tronc (getstring "\nSaisir le nom du tronçon :")) (setq p1 (getpoint "\nSpécifiez le premier point : ")) (setq dist (getdist p1 "\nSpécifiez le second point : ")) (setq NomFich (open Nom "a")) (write-line (strcat Tronc ";" (rtos dist 2 2)) NomFich) (close NomFich) ) ;_ Fin de while (princ)) ;_ Fin de defun pour qu'il propose de sélectionner un texte comme nom de tronçon (nom de tronçon écrit sur le dessin ) et de pouvoir saisir le nom du tronçon le cas échéant(s'il n'est pas écrit sur le dessin). et de changer la couleur de de ce texte (nom de tronçon sur le dessin) après chaque opération pour identifier les tronçons déjà sélectionnées. le résultat sur le fichier CSV reste le même. un grand merci a tous le monde. merci beaucoup. Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 12 mars 2018 Partager Posté(e) le 12 mars 2018 Coucou Est-ce que :Tu veux que quelqu'un te fasse ce que tu demandes ?Tu veux te former au langage et devenir autonome ? Réponse 1 : nous le dire et on va te faire ça.Réponse 2 : un peu de pub pour mon site en signature. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
abd2080 Posté(e) le 12 mars 2018 Partager Posté(e) le 12 mars 2018 merci dedier de votre reponse je veux que quelqu'un de nous chers membres de le faire pour moi (réponse 1).et merci pour le site "Les bases AutoLisp" merci d'avance à tous le monde. Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 14 mars 2018 Partager Posté(e) le 14 mars 2018 Salut, Si j'ai bien compris, la routine ci-dessous devrait satisfaire la demande. (defun c:lg (/ filename txt elst name p1 dist lst file) (setq filename (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) ".csv")) (vl-catch-all-apply '(lambda () (while (and (or (and (setq txt (car (entsel "\nSélectonnez le texte du tronçon : "))) (setq elst (entget txt)) (wcmatch (cdr (assoc 0 elst)) "*TEXT") (setq name (cdr (assoc 1 elst))) ) (/= (vl-string-trim " \t\n" (setq name (getstring "\nSaisir le nom du tronçon :")) ) "" ) ) (setq p1 (getpoint "\nSpécifiez le premier point : ")) (setq dist (getdist p1 "\nSpécifiez le second point : ")) ) (if elst (entmod (if (assoc 62 elst) (subst '(62 . 3) (assoc 62 elst) elst) (append elst '((62 . 3))) ) ) ) (setq elst nil lst (cons (strcat name ";" (rtos dist 2 2)) lst) ) ) ) ) (setq file (open filename "w")) (foreach str (reverse lst) (write-line str file) ) (close file) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
abd2080 Posté(e) le 14 mars 2018 Partager Posté(e) le 14 mars 2018 ça fonctionne très bien. c'est effectivement ce qui j'ai demandé . un grand merci Monsieur gile. Lien vers le commentaire Partager sur d’autres sites More sharing options...
abd2080 Posté(e) le 14 mars 2018 Partager Posté(e) le 14 mars 2018 salut tout le monde y a t'il un possibilité d'introduire dans le code un facteur qui permet de changer l'affichage des distances sur le fichier de sortie (multiplier le resultat par 0.01 ou 0.1 par exemple). merci infiniment. Lien vers le commentaire Partager sur d’autres sites More sharing options...
DenisHen Posté(e) le 14 mars 2018 Partager Posté(e) le 14 mars 2018 y a t'il un possibilité d'introduire dans le code un facteur qui permet de changer l'affichage des distances sur le fichier de sortie (multiplier le resultat par 0.01 ou 0.1 par exemple). J'ai du mal à comprendre, tu veux écrire le texte de la distance en plus gros, ou tu veux multiplier la distance par une constante ? Cas n°1 : n'oublie pas que ton fichier de sortie est un CSV, il n'y a donc pas de mise en forme possible... Cas n°2 : Je pense que c'est ici, change cette sélection :(cons (strcat name ";" (rtos dist 2 2)) lst)Par ça(cons (strcat name ";" (rtos (* dist 0.01) 2 2)) lst)Où 0.01 est le coef, tu peux mettre autre chose... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi) Lien vers le commentaire Partager sur d’autres sites More sharing options...
abd2080 Posté(e) le 14 mars 2018 Partager Posté(e) le 14 mars 2018 salutmerci de votre reponse.je veux multiplier la distance par une constante.amicalement. Lien vers le commentaire Partager sur d’autres sites More sharing options...
abd2080 Posté(e) le 14 mars 2018 Partager Posté(e) le 14 mars 2018 merci DenisHen c'est parfait. merci beaucoup. Lien vers le commentaire Partager sur d’autres sites More sharing options...
abd2080 Posté(e) le 9 février 2019 Partager Posté(e) le 9 février 2019 salut tout le monde.y a t'il la possibilité de modifier le code pour ajouter la distance calculé comme suffixe au nom de tronçon sur le dessin (concaténer le nom et la distance).Par exemple si le nom de tronçon est Tr1 et la distance 3,54 , le résultat a afficher sur le dessin est Tr1_3,54et merci d'avance a tous. Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 9 février 2019 Partager Posté(e) le 9 février 2019 Coucou Il suffit de modifier(setq elst nil lst (cons (strcat name ";" (rtos dist 2 2)) lst) )en(setq elst nil lst (cons (strcat name "_" (rtos dist 2 2)) lst) ) Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
abd2080 Posté(e) le 9 février 2019 Partager Posté(e) le 9 février 2019 Merci didier de votre réponse.je veut aussi que le résultat soit afficher sur le nom de tronçon sélectionné sur le dessin autocad.Menci infiniment. Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 9 février 2019 Partager Posté(e) le 9 février 2019 Coucou Est-ce qu'il faut RAJOUTER un texte ou MODIFIER le texte qui a été cliqué pour le choix du tronçon ? Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
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