Blocs-08 : Listing Coordonnées et Attributs

But de l'exercice :
Créer un fichier externe
avec coordonnées
et valeurs d'attributs


Assurément il existe dans AutoCAD une possibilité d'extraire des coordonnées et des valeurs attributaires dans un fichier externe en natif, c'est l'extraction de données et ça fonctionne très bien.
Toutefois il y a des réglages à faire et il peut être utile de créer un programme qui va faire cette extraction automatiquement avec certains réglages pré-établis et fréquemment utilisés.
Ces réglages dans le cas de mon exemple seront :

 - Création d'un fichier CSV, lisible directement par Excel
- Nom du fichier identique au nom du dessin en cours
- Choix des blocs de type "tcpoint".

Ces blocs "tcpoint" ont des attributs dont les étiquettes sont MAT et ALT .
MAT contient le numéro du point et ALT l'altitude.
Éventuellement un troisième ayant "COD" comme étiquette
Ils sont "natifs" d'un produit communément associé à AutoCAD chez les géomètres : Covadis.

le principe du programme est le suivant :

 - Création d'un fichier CSV dans le répertoire du dessin en cours
- Choix dans le dessin des points à traiter
- Extraction des coordonnées X et Y de chaque point
- Parcours des étiquettes et extraction des valeurs d'attributs MAT et ALT
- Le tout est mis dans une liste (list).
- Quand toutes les entités du jeu de sélection sont traitées la liste est terminée
- Création de la ligne d'entête du fichier
- Parcours de cette liste pour écrire chaque item dans le fichier externe
- Affichage d'une case d'alerte (alert) qui indique le nom du fichier et le nombre de points traités.


Simpliste mais efficace, je reviendrai plus tard dans cet exemple expliquer les contrôles nécessaires pour plus de "robustesse"


Image du code :


et le code 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
41
42
43
(defun c:ptf ( / dec fichier f jeu ent blk xy x y z lignes elem)
   (setq dec 3)
   (setq fichier (strcat
                 (getvar "dwgprefix")
                 (substr (setq test (getvar "dwgname")) 1 (- (strlen test) 4))
".csv"
)
)
(setq f (open fichier "w"))
;;======================================
(setq jeu (ssget (list (cons 0 "INSERT") (cons 2 "TCPOINT"))))
;;======================================
(setq n 0)
(repeat (sslength jeu)
   (setq ent (ssname jeu n))
   (setq blk (entget ent))
   (setq xy (cdr (assoc 10 blk)))
   (setq x (car xy) y (cadr xy))
   (while (/= "SEQEND" (cdr (assoc 0 (entget ent))))
      (if (= "MAT" (cdr (assoc 2 (entget ent))))
         (setq mat (cdr (assoc 1 (entget ent))))
      ) 
      (if (= "ALT" (cdr (assoc 2 (entget ent))))
         (setq z (cdr (assoc 1 (entget ent))))
      )
    (setq ent (entnext ent))
)
(if (= z "")
(setq z "0.00")
)
(setq lignes (append (cons (list (strcat mat ";" (rtos x 2 2) ";" (rtos y 2 2) ";" z))lignes)))
(setq n (+ 1 n))
) ;_ Fin de repeat
(write-line "Numéro;X;Y;Zatt" f)
(foreach elem lignes (write-line (car elem) f))
(close f)
(alert 
   (strcat (itoa n)
   " points sont ecrits dans le fichier \n"
   fichier
   ) ;_ Fin de strcat
) ;_ Fin de alert
) ;_ Fin de defun

 


Haut de page

Retour vers Exercices blocs

le 17 mai 2019