rebcao Posté(e) le 4 décembre 2020 Posté(e) le 4 décembre 2020 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 Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
lecrabe Posté(e) le 4 décembre 2020 Posté(e) le 4 décembre 2020 Hello J ai repondu sur "ton" meme sujet dans le forum French AutoCAD Autodesk ... https://forums.autodesk.com/t5/autocad-tous-produits-francais/bd-p/127 LA SANTE, Bye, lecrabe Autodesk Expert Elite Team
Luna Posté(e) le 4 décembre 2020 Posté(e) le 4 décembre 2020 (modifié) 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 :%<\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 Modifié le 4 décembre 2020 par Luna
Luna Posté(e) le 4 décembre 2020 Posté(e) le 4 décembre 2020 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
lecrabe Posté(e) le 4 décembre 2020 Posté(e) le 4 décembre 2020 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
Luna Posté(e) le 4 décembre 2020 Posté(e) le 4 décembre 2020 En réponse à rebcaoSuper 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
(gile) Posté(e) le 4 décembre 2020 Posté(e) le 4 décembre 2020 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 - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 5 décembre 2020 Posté(e) le 5 décembre 2020 Hello WAOUH MERCI a Luna & Gilles ! Bon WE, La Sante, Bye, lecrabe Autodesk Expert Elite Team
rebcao Posté(e) le 6 décembre 2020 Auteur Posté(e) le 6 décembre 2020 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 Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant