CadXP: Comment exploiter les MARQUEURS DE POSTION - CadXP

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Comment exploiter les MARQUEURS DE POSTION

#1 L'utilisateur est hors-ligne   rebcao 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 7 301
  • Inscrit(e) : 25-août 04
  • LocationSELESTAT

Posté 04 décembre 2020 - 13:51

Bonjour à Toutes et à Tous,

Comment peut-on exploiter (EXPORTER) les données LATITUDE - LONGITUDE présentes dans les PROPIETETES de l'objet ?

SI on essaye en LISP visiblement rien ? c'est sans des XDATAS?

Même dans l'EXTRACTION DE DONNES il n'y aucune trace de ces données !!!

(voir fichier joint)

Je vous remercie, Christian
Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger des Supports de Cours AutoCAD, des Outils AutoCAD...
cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
0

#2 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 447
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42) Forez

Posté 04 décembre 2020 - 13:59

Hello

J ai repondu sur "ton" meme sujet dans le forum French AutoCAD Autodesk ...

https://forums.autod...ancais/bd-p/127

LA SANTE, Bye, lecrabe
Autodesk Expert Elite Team
0

#3 L'utilisateur est hors-ligne   Luna 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 190
  • Inscrit(e) : 27-février 20

Posté 04 décembre 2020 - 15:12

Coucou,

Bon si je comprend bien la demande, tu souhaites exporter (fichier .csv, tableau AutoCAD, ... ?) les positions géographiques d'un ensemble de Marqueurs de position en associant les coordonnées géographiques au nom du marqueur, c'est bien cela ?
Ne pouvant pas vraiment répondre sur le forum AutoDesk, et en reprenant les points de la discussion, le LISP ne permet pas de récupérer les valeurs de longitude et latitude de l'objet de manière directe (que se soit la liste DXF obtenue via (entget) ou les propriétés de l'objet via (getpropertyvalue)...) donc le Visual Lisp semble la solution la plus adéquat.

En passant par (vlax-dump-object), on retrouve bien les propriétés que l'on cherche "Latitude" et "Longitude" sous format string.
Donc ces propriétés peuvent facilement être récupérable via
(setq name (vlax-ename->vla-object (car (entsel))))
(setq lon (vla-get-Longitude name))
(setq lat (vla-get-Latitude name))


Ensuite on peut exploiter ces données soit en passant par la liste DXF de l'objet et le code 1 pour associer le nom du marqueur aux coordonnées (attention, la liste DXF de l'objet POSITIONMARKER possède 2 listes pointées au code 1, et celle qui nous intéresse est la seconde donc penser à faire (cdr (assoc 1 (reverse (entget name)))) pour avoir la bonne valeur), soit via la même fonction (vla-get-Textstring name) et ensuite exporter cela sous le format souhaité.
Faut-il donc exporter ces valeurs dans un champ ou bien un fichier .csv ?

A savoir qu'il n'y a pas forcément besoin de programmation pour définir un champ directement dans AutoCAD car avec un champ objet, on peut récupérer les propriétés Latitude, ou Longitude directement et semble s'écrire de la manière :

Citation

%<\AcObjProp Object(%<\_ObjId 3227242304>%).Latitude>%

Ainsi, le problème se pose plutôt dans l'obtention de cet ObjId afin de lier le bon marqueur avec le bon champ. Pour ce point, je manque de réponses car je m'y suis déjà pencher mais je n'ai pas vraiment eu le temps de fouiller correctement donc les adeptes de Visual LISP devraient pouvoir le savoir (je doute que cette ID soit facilement récupérable en LISP vanilla, s'il est récupérable).
Le champ peut ainsi être contenu dans n'importe quel objet affichant un texte (MTEXT, TEXT, ATTRIBUT, ...) permettant d'être à jour en cas de modifications et la récupération de l'ObjectID n'est nécessaire que dans le cas d'un traitement de plusieurs Marqueurs pour éviter la liaison des données à la mano qui est tout à fait faisable également en insérant un champ "Latitude" et "Longitude" en sélectionnant le marqueur lié. :3

Cela correspond bien à ta demande, ou bien me suis-je égarée ?

Bisous, Luna

Ce message a été modifié par Luna - 04 décembre 2020 - 15:52 .

0

#4 L'utilisateur est hors-ligne   Luna 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 190
  • Inscrit(e) : 27-février 20

Posté 04 décembre 2020 - 15:47

Il y a également moyen de récupérer ces propriétés en fouillant un peu plus les listes DXF mais le code est un peu plus long si jamais il y a besoin de passer par du LISP vanilla :
(setq name (car (entsel)))
(setq coor (cdr (assoc 304 (entget (cdr (assoc -2 (entget (cdr (assoc 360 (reverse (entget (cdr (assoc 330 (entget name))))))))))))))
(setq lat (substr coor 1 (vl-string-position (ascii "\\") coor)))
(setq lon (substr coor (+ 2 (vl-string-position (ascii "P") coor))))


Voili voilou, c'est tout ce que j'ai pu trouvé...

Bisous, Luna
0

#5 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 447
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42) Forez

Posté 04 décembre 2020 - 15:53

Hello

MERCI pour tes efforts ! ... Je sens que Christian va t'offrir une Biere + Flammekueche !?

Bon WE, La Sante, Bye, lecrabe
Autodesk Expert Elite Team
0

#6 L'utilisateur est hors-ligne   Luna 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 190
  • Inscrit(e) : 27-février 20

Posté 04 décembre 2020 - 16:25

En réponse à rebcao

Citation

Super Merci le Retraité :visage_souriant_avec_des_yeux_en_forme_de_cœur:

ça marche, exactement ce qu'il me fallait...

Le Saint-Nicolas va t'amener le Chocolat et le Père Fouettard te donnera la fessée...

Par contre j'ai essayé de récupérer la valeur de POSITION... Et il me donne ça : #<variant 8197 ...>

Je pensais obtenir la liste du point : (775478.0 6.26975e+06 0.0) comme dans la liste de CHAMPS...

; ObjectName (RO) = "AcDbGeoPositionMarker"
; OwnerID (RO) = 43
; PlotStyleName = "ByLayer"
; Position = (775440.0 6.26973e+06 0.0)
; Radius = 1.0
; Rotation = 2.35619

Christian


Le visual LISP est quelque peu particulier et les listes ne sont pas réellement sous forme de liste comme en vanilla, mais sous forme de #<safearray...> et les valeurs quelconques sous forme de #<variant...> mais mes compétences en Visual sont très limitées (car inexistantes :3 ). Personnellement, la propriété de position n'a pas vraiment besoin de Visual LISP pour être récupérée, puisqu'elle est directement lisible via la liste DXF (entget name) associée au code DXF 10 sous forme de liste donc plus rapidement exploitable pour un programme basé sur le langage vanilla.

Autrement, pour répondre à cette question précisément il faudrait écrire ceci :
(vlax-safearray->list (vlax-variant-value (vla-get-position name)))

Et là tu retrouves ta liste de coordonnées comme souhaitée. (ici name correspond au nom VLA-Object du marqueur, donc après la conversion (vlax-ename->vla-object (car (entsel))) !)

Chat commence à devenir compliqué si les sujets s'étendent sur plusieurs forums à la fois ^^"

Bisous,Luna
0

#7 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11 451
  • Inscrit(e) : 02-septembre 05

Posté 04 décembre 2020 - 17:53

Salut,

Avec Visual LISP, il y a souvent moyen d'accéder directement à une liste LISP en utilisant : (vlax-get object 'Property) à la place de : (vla-getProperty object). Voir ce sujet.
Exemple :
(vlax-get name 'Position)


On peut aussi utiliser la bibliothèque AutomationHelpers en bas de cette page.
Exemple :
(gc:VariantToLispData (vla-get-position name))


En ce qui concerne les champs, on obtient l'ObjectId sous forme de chaîne (string) avec la fonction vla-GetObjectIdString.
Exemple:
(vl-load-com)
(or *acad* (setq *acad* (vlax-get-acad-object)))
(or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
(or *util* (setq *util* (vla-get-Utility *acdoc*)))

(defun c:GEOPOS (/ ent obj pt ms id)
  (and
    (setq ent (car (entsel)))
    (setq obj (vlax-ename->vla-object ent))
    (= (vla-get-ObjectName obj) "AcDbGeoPositionMarker")
    (setq pt (getpoint "\nPoint d'insertion: "))
    (setq ms (vla-get-Modelspace (vla-get-ActiveDocument (vlax-get-acad-object))))
    (setq id (vla-GetObjectIdString *util* obj :vlax-false))
    (vla-AddMText
      (vla-get-Modelspace *acdoc*)
      (vlax-3d-point (trans pt 1 0))
      0.
      (strcat
	"Latitude : "
	"%<\\AcObjProp Object(%<\\_ObjId "
	id
	">%).Latitude>%"
	"\\PLongitude : "
	"%<\\AcObjProp Object(%<\\_ObjId "
	id
	">%).Longitude>%"
       )
    )
  )
  (princ)
)

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#8 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 447
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42) Forez

Posté 05 décembre 2020 - 14:23

Hello

WAOUH MERCI a Luna & Gilles !

Bon WE, La Sante, Bye, lecrabe
Autodesk Expert Elite Team
0

#9 L'utilisateur est hors-ligne   rebcao 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 7 301
  • Inscrit(e) : 25-août 04
  • LocationSELESTAT

Posté 06 décembre 2020 - 09:32

Bonjour à Toutes et à Tous,

Tout d'abord je vous demande d'excuser cette réponse tardive, et je tiens à remercier le "Jeune Retraité" Le TouLouLou, qui a fait le relais de vos réponses sur le Forum AUTODESK ! En effet, CADXP n'a envoyé aucune notification de vos réponses.

Merci à Luna et à Gilles pour toutes ces précisions.

Luna, en ce qui concerne les CHAMPS, cette commande ne permet pas une modification aisée ! Je parle de la commande standard INSERER un CHAMP... sans bien sur, encore une fois utiliser un PROGRAMME qui contourne les défauts de la commande CHAMPS...

Mais une fois de plus les développeurs AUTODESK ont été particulièrement inspirés lorsqu'ils ont inventé cet objet : MARQUEUR DE POSITION !!!!! Une sorte de LIGNE DE REPERE avec un TEXTE MULT aux PROPRIETES (style de texte) FORCEEES !!!

Merci.

Christian
Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger des Supports de Cours AutoCAD, des Outils AutoCAD...
cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)