Pages: 1
- Sujet précédent - [ACAD] Associer attributs de bloc de l'espace Papier a l'espace Objet - Sujet suivant
#1 Thu 02 August 2018 13:50
- decibel
- Juste Inscrit !
- Date d'inscription: 5 Dec 2016
- Messages: 7
[ACAD] Associer attributs de bloc de l'espace Papier a l'espace Objet
Bonjour,
Je suis débutante sur AutoCAD... J'utilise AutoCAD Map 2017
Je travaille sur un réseau de génie civil composé de polylignes dans l'espace objet. Des plans de présentations correspondant à des tronçons de ces polylignes ont été créés dans l'espace papier. On a donc un tronçon = une présentation. Pour chaque présentation, il y a un bloc avec données attributaires. Je souhaiterais récupérer le bloc et l'associer dans les propriétés du tronçon dans l'espace objet.
J'ai déjà essayé la commande _DATAEXTRACTION. Elle m'extrait les données du bloc et les coordonnées ne correspondent pas au tronçon de l'espace objet.
Merci d'avance pour vos astuces.
Hors ligne
#2 Thu 02 August 2018 14:16
- Patrice
- JeSuisCharlie
- Date d'inscription: 16 Sep 2005
- Messages: 4779
Re: [ACAD] Associer attributs de bloc de l'espace Papier a l'espace Objet
Hello
1) No comprendo !?
2) SVP peux tu mettre a notre disposition un extrait de ton DWG qui serait un bon exemple ,
Avec quelques Textes d'explication significatifs dessines ...
3) Tu as droit a 500 Ko (ZIP/RAR/etc) en fichier attache ... Si je me souviens bien !?
Sinon un lien : Download Free, WETransfert ou equivalent ...
GeoBye, Pat
(Autodesk Expert Elite Team)
Hors ligne
#3 Thu 02 August 2018 16:19
- decibel
- Juste Inscrit !
- Date d'inscription: 5 Dec 2016
- Messages: 7
Re: [ACAD] Associer attributs de bloc de l'espace Papier a l'espace Objet
Ci-joint mon fichier en DWG. Il y a l'objet et 2 pages de présentation (N°1 et N°2). Une page de présentation correspond à un sous-ensemble des polylignes présentes dans Objet. Pour chaque présentation, il y a les caractéristiques des lignes dans des blocs. Je souhaite récupérer ces caractéristiques pour qu'elles soient associées aux propriétés quand on sélectionne une Polyligne dans Objet.
Ensuite le but sera d'extraire les coordonnées de chaque polyligne avec les caractéristiques des blocs des présentations. Pour cela j'ai déjà un fichier Lisp qui extrait les Propriétés et les Coordonnées.
La visualisation du fichier sera plus explicite.
Hors ligne
#4 Wed 08 August 2018 20:25
- decibel
- Juste Inscrit !
- Date d'inscription: 5 Dec 2016
- Messages: 7
Re: [ACAD] Associer attributs de bloc de l'espace Papier a l'espace Objet
Bonjour,
Finalement, j'ai suivi la procédure sur ce sujet (Routines LSP sur ODs) https://georezo.net/forum/viewtopic.php?id=44248
Je ne peux pas associer un bloc de présentation à un objet dans l'espace objet. Du coup, j'ai copié coller le bloc dans l'espace objet. Ensuite j'ai défini une table de données contenant des champs semblables aux étiquettes de mon bloc. Ensuite, j'ai généré des liens en reliant le bloc à la table OD créée, puis j'ai cliqué sur 'Tout'.
Après, j'ai utilisé la routine COPY_OD, j'ai sélectionné successivement mon bloc et la polyligne correspondante. Après validation, j'obtiens mon OD dans les propriétés avec les informations que j'avais auparavant dans le bloc quand je sélectionne ma polyligne.
La prochaine étape est d'intégrer les données de la table dans un fichier.txt avec les coordonnées des sommets de chaque polyligne.
J'ai trouvée sur le net une routine wkt.lsp sur http://joch04.free.fr/achtml/QTP-WKT.htm
Elle permet d'avoir une table avec 6 champs extraits des propriétés : Calque, Type de ligne, Couleur, Epaisseur, largeur, Geometrie pour les polylignes sélectionnées.
Seulement, je souhaiterais rajouter en plus les champs de ma table OD également (COMMUNE, ADRESSE, INFRA, LONG,...).
D'après ce que j'ai trouvé, il faudrait utiliser la fonction entget pour extraire les données d'OD, mais je ne sais pas comment l'intégrer dans le script lisp wkt, ci-dessous :
Code:
; auteur vincentp010 ; suite à ces messages ; http://cadxp.com/topic/39027-extraction-wkt/page__view__findpost__p__216626 ; Faire une sélection et vérifier dans les propriété qu'il n'y a pas de polylign2D ; s'il y en à, utiliser la fonction CONVERTPOLY pour les transformer en polylignes (defun c:wkt (/ ss ent f1 f nb lspl pl c strcoords strdelim) (vl-load-com) (print "Selectionnez les polylignes") (setq ss (cadr (sssetfirst nil (ssget (list (cons 0 "LWPOLYLINE")))))) (if (/= ss nil) (progn (setq f1 (getfiled "Fichier wtk a creer" "" "wkt" 1)) (if (/= f1 nil) (progn (setq f (open f1 "w")) (write-line "Calque|Type de ligne|Couleur|Epaisseur|Largeur|Geometrie" f) (setq nb 0 lspl nil) (while (< nb (sslength ss)) (setq ent (vlax-ename->vla-object (ssname ss nb))) (setq pl (list (strcat (vla-get-layer ent)"|" (vla-get-LineType ent) "|" (rtos(vla-get-color ent)) "|" (rtos (vla-get-LineWeight ent)) "|" (rtos (vla-get-ConstantWidth ent) 2)) (vlax-safearray->list (vlax-variant-value (vla-get-coordinates ent))) )) (setq lspl (append lspl (list pl))) (setq nb (+ nb 1)) );_end while ;ordre croissant suivant premiere entite (setq lspl (vl-sort lspl (function (lambda (e1 e2) (< (car e1) (car e2)))) )) (foreach pl lspl (setq strcoords "(") (setq strdelim "") (foreach c (nth 1 pl) (setq strcoords (strcat strcoords strdelim (rtos c 2))) (if (= strdelim " ") (setq strdelim ",") (setq strdelim " ") ) );_end foreach (write-line (strcat (nth 0 pl) "|LINESTRING" strcoords ")") f) );_end foreach (close f) (print (strcat "Fichier " f1 " cree")) (print) ));_end f1 nil ));_end ss nil ) (vlax-dump-object <Vla-Object> T)
Quelqu'un pourrait m'aider, svp?
Hors ligne
#5 Wed 08 August 2018 22:11
- olivier.eckmann
- Participant assidu
- Date d'inscription: 14 Dec 2007
- Messages: 353
Re: [ACAD] Associer attributs de bloc de l'espace Papier a l'espace Objet
Bonjour,
on peut ajouter le Handle (identifiant unique de l'objet AutoCAD) en modifiant légèrement le programme précédent
Code:
; auteur vincentp010 ; suite à ces messages ; http://cadxp.com/topic/39027-extraction-wkt/page__view__findpost__p__216626 ; Faire une sélection et vérifier dans les propriété qu'il n'y a pas de polylign2D ; s'il y en à, utiliser la fonction CONVERTPOLY pour les transformer en polylignes (defun c:wkt (/ ss ent f1 f nb lspl pl c strcoords strdelim) (vl-load-com) (print "Selectionnez les polylignes") (setq ss (cadr (sssetfirst nil (ssget (list (cons 0 "LWPOLYLINE")))))) (if (/= ss nil) (progn (setq f1 (getfiled "Fichier wtk a creer" "" "wkt" 1)) (if (/= f1 nil) (progn (setq f (open f1 "w")) (write-line "Handle|Calque|Type de ligne|Couleur|Epaisseur|Largeur|Geometrie" f) (setq nb 0 lspl nil) (while (< nb (sslength ss)) (setq ent (vlax-ename->vla-object (ssname ss nb))) (setq pl (list (strcat (vla-get-handle ent) "|" (vla-get-layer ent) "|" (vla-get-LineType ent) "|" (rtos(vla-get-color ent)) "|" (rtos (vla-get-LineWeight ent)) "|" (rtos (vla-get-ConstantWidth ent) 2)) (vlax-safearray->list (vlax-variant-value (vla-get-coordinates ent))) )) (setq lspl (append lspl (list pl))) (setq nb (+ nb 1)) );_end while ;ordre croissant suivant premiere entite (setq lspl (vl-sort lspl (function (lambda (e1 e2) (< (car e1) (car e2)))) )) (foreach pl lspl (setq strcoords "(") (setq strdelim "") (foreach c (nth 1 pl) (setq strcoords (strcat strcoords strdelim (rtos c 2))) (if (= strdelim " ") (setq strdelim ",") (setq strdelim " ") ) );_end foreach (write-line (strcat (nth 0 pl) "|LINESTRING" strcoords ")") f) );_end foreach (close f) (print (strcat "Fichier " f1 " cree")) (print) ));_end f1 nil ));_end ss nil )
Ensuite via MAP tu peux faire une requête en mode Rapport pour extraire le Handle (DESCRIPTEUR_E) et chaque OD.
Il reste à faire une jointure sur ce Handle via Excel ou une BDD quelconque.
petite vidéo de la mise en œuvre : https://autode.sk/2AUneDj
Olivier
Dernière modification par olivier.eckmann (Wed 08 August 2018 22:34)
Hors ligne
#6 Thu 09 August 2018 09:19
- decibel
- Juste Inscrit !
- Date d'inscription: 5 Dec 2016
- Messages: 7
Re: [ACAD] Associer attributs de bloc de l'espace Papier a l'espace Objet
Merci Olivier! ça fonctionne très bien .
Hors ligne
Pages: 1
- Sujet précédent - [ACAD] Associer attributs de bloc de l'espace Papier a l'espace Objet - Sujet suivant