Dans Polyligne, Liste des sommets on a vu comment extraire les coordonnées des sommets d'une LWPOLINE et mémoriser ces derniers dans une liste.
Cette liste peut servir à traiter les sommets, par exemple insérer des blocs sur chacun d'entre-eux, ce sera peut-être l'objet d'un article d'ailleurs, mais une fois que ces données sont extraites du dessin il est souvent demandé dans les sites et forums sur AutoCAD® de pouvoir créer un fichier externe avec ces valeurs de sommets, un fichier TXT ou mieux encore un fichier XLS.
Je ferai un exemple, plus tard, pour envoyer directement dans Excel® mais ce que je vais montrer dans cette page est la création d'un fichier CSV qui est entre le TXT et le XLS, à savoir qu'il est ouvrable par Excel® par simple double-clic depuis l'Explorer de fichiers de Windows® mais n'a pas le format d'un XLS, on peut ouvrir un CSV et l'enregistrer en XLS très aisément.
Cet exemple ne traitera pas des polylignes ayant des segments d'arcs, ce sera aussi un autre exercice, allons-y pas à pas.
Le principe de cette routine est le suivant :
- Création d'un fichier avec l'extension CSV qui aura le même nom que le DWG dans lequel on travaille et qui sera enregistré dans le même répertoire (dossier).
- Ouverture de ce fichier pour pouvoir y écrire (open).
- Test de sélection pour être certain que l'utilisateur choisisse bien une polyligne.
- Parcours de la liste des codes DXF de cette entité et quand on trouve une coordonnée (code 10) qui est sous forme de liste (list) on en extrait la valeur X (car) et la valeur Y (cadr).
- Transformation de ces valeurs numériques (real) en texte (string) via (rtos), vous noterez qu'une variable "dec" permet de choisir le nombre de décimales qui apparaîtront dans le fichier.
- Concaténation par la fonction (strcat) de la valeur du X, puis un point-virgule et enfin la valeur du Y. (ce point-virgule permet à Excel® de séparer les champ dans des cases différentes).
- Écriture de la ligne composée dans le fichier externe par la fonction (write-line)
- Incrémentation du compteur "n" qui est sous forme d'entier (integer) et ainsi de suite...
- Et enfin, fermeture du fichier externe (close).
Le fichier en image :
Le fichier en texte :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | (defun c:ecrire-sommets ( / Nom fich ent ent-liste n pt x y ligne-a-ecrire) (setq Nom (strcat (getvar "dwgprefix") (getvar "dwgname"))) (setq Nom (substr Nom 1 (- (strlen Nom) 4))) (setq Nom (strcat Nom ".csv")) (setq fich (open nom "w")) (write-line "X;Y" fich) (while (/= "LWPOLYLINE" (cdr (assoc 0 (entget (setq ent (car (entsel "\nChoix de la polyligne\n"))) ) ) ) ) ) ;_ Fin de while (setq ent-liste (entget ent) n 0 dec 3) (repeat (length ent-liste) (if (= 10 (car (nth n ent-liste))) (progn (setq pt (cdr (nth n ent-liste))) (setq x (car (cdr (nth n ent-liste)))) (setq y (cadr (cdr (nth n ent-liste)))) (setq ligne-a-ecrire (strcat (rtos x 2 dec) ";" (rtos y 2 dec))) (write-line ligne-a-ecrire fich) ) ) ;_ Fin de if (setq n (+ 1 n)) ) ;_ Fin de repeat (close fich) (princ) ) |
Vous avez remarqué qu'il y a des (setq) en pagaille, il est possible des regrouper mais je considère que c'est un cours de débutants et je détaille pas à pas. Libre à vous de vous servir de ce squelette de programme pour en faire un bien à vous.
retour aux exercices sur polylignes
24 mars 2018