Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 jeu. 02 août 2018 13:50

decibel
Membre
Date d'inscription: 5 déc. 2016
Messages: 7

[ACAD] Associer attributs de bloc de l'espace papier à 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 jeu. 02 août 2018 14:16

Patrice
JeSuisCharlie
Date d'inscription: 16 sept. 2005
Messages: 3862

Re: [ACAD] Associer attributs de bloc de l'espace papier à 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 jeu. 02 août 2018 16:19

decibel
Membre
Date d'inscription: 5 déc. 2016
Messages: 7

Re: [ACAD] Associer attributs de bloc de l'espace papier à 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.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#4 mer. 08 août 2018 20:25

decibel
Membre
Date d'inscription: 5 déc. 2016
Messages: 7

Re: [ACAD] Associer attributs de bloc de l'espace papier à 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 mer. 08 août 2018 22:11

olivier.eckmann
Membre
Date d'inscription: 14 déc. 2007
Messages: 223

Re: [ACAD] Associer attributs de bloc de l'espace papier à 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 (mer. 08 août 2018 22:34)

Hors ligne

 

#6 jeu. 09 août 2018 09:19

decibel
Membre
Date d'inscription: 5 déc. 2016
Messages: 7

Re: [ACAD] Associer attributs de bloc de l'espace papier à l'espace objet

Merci  Olivier! ça fonctionne très bien smile .

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |