essepe Posté(e) le 20 juillet 2009 Posté(e) le 20 juillet 2009 Bonjour,Je suis à la recherche d'une routine me permettant de créer un fichier txt listant les longueurs de chaque segment d'une polyligne (ou de plusieurs) sous la forme :Polyligne n°1 long1 long2 long3 long4...Polyligne n°2 long1 long2 long3 long4.......Les polylignes ayant été créées dans un ordre quelconque, je souhaiterai pouvoir écrire les données de la première que je pointerais, puis pointer la deuxième-> écriture, puis la troisième-> écriture,etc... puis fermeture du fichier après la dernière. Je n'ai que de très faibles connaissances en lisp, aussi j'espère trouver ici une aide pour résoudre cette demande.Merci par avance :)
essepe Posté(e) le 20 juillet 2009 Auteur Posté(e) le 20 juillet 2009 Je crois que je me suis trompé de forum ! J'ai reposé ma question sur AutoCad 2008Désolé. :(
(gile) Posté(e) le 20 juillet 2009 Posté(e) le 20 juillet 2009 Salut et bienvenue Un petit truc vite fait :(defun c:seglen2file (/ *error* filename file cnt pline param lst) (defun *error* (msg) (if (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (if file (close file) ) (if lst (mapcar (function (lambda (x) (redraw x 4))) lst) ) (princ) ) (if (setq filename (getfiled "Créer un fichier" (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) ".txt" ) "txt" 1 ) ) (progn (setq file (open filename "w") cnt 1 ) (while (setq pline (car (entsel))) (if (wcmatch (cdr (assoc 0 (entget pline))) "*POLYLINE") (progn (setq param (fix (vlax-curve-getEndParam pline)) line "" ) (while ( (setq line (strcat " " (rtos (- (vlax-curve-getDistAtParam pline param) (vlax-curve-getDistAtParam pline (setq param (1- param)) ) ) ) line ) ) ) (write-line (strcat "Polyligne n°" (itoa cnt) line) file) (setq cnt (1+ cnt) lst (cons pline lst) ) (redraw pline 3) ) (princ "\nL'objet sélectionné n'est pas une polyligne.") ) ) (close file) (mapcar (function (lambda (x) (redraw x 4))) lst) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
essepe Posté(e) le 20 juillet 2009 Auteur Posté(e) le 20 juillet 2009 :D salut gileSuper nickel ! Vite fait mais (très) bien fait ! Cela correspond exactement à ma demande.Merci de ta réponse et de ta réactivité,cela va m'aider énormément !@+essepe
lili2006 Posté(e) le 20 juillet 2009 Posté(e) le 20 juillet 2009 Bonjour à toutes et tous, Salut Gilles, Une question : A quoi sert cette "sous-routine" ? (defun *error* (msg) (or (= msg "Fonction annulée") (princ (strcat "\nErreur: " msg))) (and file (close file)) (princ) Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 20 juillet 2009 Posté(e) le 20 juillet 2009 Re, Petite erreur de frappe sur cette ligne => (princ "\n[b][color=#FF0000]L'onbjet[/color] [/b]sélectionné n'est pas une polyligne.") Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 20 juillet 2009 Posté(e) le 20 juillet 2009 Merci lili2006, J'ai corrigé la faute de frappe. La routine *error* est une redéfinition "locale" (elle est placée à l'intérieur de la fonction principale et déclarée comme une variable locale) de la fonction *error* qui gère les erreurs dans les fonctions LISP.Le fait de quitter un fonction LISP en cours avec la touche Echap est traité comme une erreur.Il est donc parfois important de modifier localement cette fonction pour restaurer l'environnement initial au cas où l'utilisateur fasse Echap avant le fin de l'exécution du LISP. Dans ce cas un fichier texte est ouvert en écriture, puis l'utilisateur sélectionne des polylignes une par une, s'il fait Echap pour sortir de la commande, l'instruction (close file) qui est placée après la boucle (while ...) ne sera pas exécutée. C'est là que la fonction *error* prend le relais et ferme le fichier. PS : regarde les page 33 et 34 de ton polycop "Introduction à AutoLISP" Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
essepe Posté(e) le 20 juillet 2009 Auteur Posté(e) le 20 juillet 2009 ;) si je peux abuser, serait-il possible facilement de placer en surbrillance ou colorer les polylignes sélectionnées afin de ne pas écrire 2 fois les informations par erreur ?essepe
lili2006 Posté(e) le 20 juillet 2009 Posté(e) le 20 juillet 2009 Re, PS : regarde les page 33 et 34 de ton polycop "Introduction à AutoLISP" Justement, c'est un peu pour cela que je te posais la question car elle est écrit ce cette façon sur le poly => ;; Fonction de gestion des erreurs (defun GPTF_err (msg) (if (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (if file (close file) ) (setq *error* m:err ; restauration de *error* m:err nil ) (princ) ) GPTF (de l'exemple de routine "GetPointToFile") apparait ici après le defun alors que ici tu as écris directement : (defun *error* (msg) Je me demandais pourquoi !? MAIS, je pense que la réponse est page 34, ;) Merci de ta réponse, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lovecraft Posté(e) le 20 juillet 2009 Posté(e) le 20 juillet 2009 Bonjour Essepe, J'ai supprimé ton message sur le forum Autocad 2008. (Car il traite du même sujet) @plus Lovecraft http://www.youtube.com/user/CADMINATOR?feature=mhee
(gile) Posté(e) le 20 juillet 2009 Posté(e) le 20 juillet 2009 ;) si je peux abuser, serait-il possible facilement de placer en surbrillance ou colorer les polylignes sélectionnées afin de ne pas écrire 2 fois les informations par erreur ?essepe J'ai modifié le code réponse 2. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
essepe Posté(e) le 21 juillet 2009 Auteur Posté(e) le 21 juillet 2009 Bonjour Gile,J'étais absent toute la journée ; merci pour le complément de routine, c'est vraiment sympa de ta part.@+essepe :D
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