Aller au contenu

xdata


lili2006

Messages recommandés

Bonsoir à toutes et tous,

 

Je souhaiterez connaitre toutes les possibilités des xdata en prévision de faire un petit SIG ( Système d' Information Géographique) que avec AutoCAD de base.

 

Il y à bien "attach xdata" des Express mais je ne sais pas exactement ce que ce Lisp est capable de faire.

 

Je voudrais pouvoir associer des informations aux entités graphiques de mon plan (celles-ci pouvant être quelconques), et les exporter vers Excel. Bien sûr, il faudrait que je puisse garder à jour les liens Excel-AutoCAD et AutoCAD-Excel, un peu comme LXL de Patrick_35, mais pas pour des attributs.

 

Si quelqu'un à des idées, je suis preneur.

 

De même si quelqu'un à écrit un petit tuto sur l'utilisation de "attach xdata" des Express,...

 

Merci d'avance.

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 112
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

Salut

 

Les xdatas permettent d'accrocher les données que l'on veux à une entité graphique.

On met ce que l'on veux dans ces données.

 

Tu t'attaques à quelque chose de sérieux et qui n'est pas à la portée du premier venu.

Mais, tu as l'aide disponible sur cadxp ;)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Patrick_35, merci pour ta réponse.

 

Tu t'attaques à quelque chose de sérieux

 

Je ne veux pas faire quelque chose de trés compliqué (enfin, je m'rend p't'ête pas compte !), l'idée étant d'associer, dans un premier temps le nom ainsi que d'autres informations relatives à la personne occupant la tombe (je sais ce n'est pas trés drôle, mais c'est pour une application "basique" avec des étudiants !) matérialisée sur mon plan topo et de les recencer sur EXcel ainsi que d'autres informations (mais pas en attributs!). De plus, je souhaiterai pouvoir créer des requêtes de recherche ou de filtrage. Si c'est trop compliqué, je verrai alors avec le Map de AutoCAD, mais cela sera en dernier recourt car, une fois de plus, on a pas l'argent,...

 

[Edité le 29/11/2007 par lili2006]

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Cette fois c'est moi qui repond, Oui c'est tous a fait possible j'ai un bout de code ou j'ai déjà fais sa au boulot, je te le ferait passer demain dans la journee, le problemeavec ce genre de manip c'es que graphiquement tu ne peut pas savoir si l'entitee ne question a quelque chose d'attachée ou pas a moin d'etre tres rigoureux.

A+ D.D.

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Derain, je te remercie d'avance de bien vouloir partager tes connaissances, quant à la rigueur, je tacherai de m'y tenir, mais je pense y être déjà un peu habitué. De plus, chaque utilisation d'outils spécifiques nous y contraint un peu, et c'est plutôt bien pour des apprenants, je trouve,...

 

Bonne nuit.

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

 

Qui dit SIG dit plutôt Autocad Map qu'Autocad. Il est à mon avis plus intéressant de travailler avec une base de données qu'avec des xdata. Néanmoins si tu le fais avec les xdata, rien ne t'empêche ensuite de récupérer tes xdata crée sous Autocad en données d'objet (base de données) dans Map.

 

C'est ce que je fais pour des anciens plans de réseau d'assainissemet que versent les délégataires pour alimenter notre SIG.

 

Bonne journée.

 

PH PELLOUX

Lien vers le commentaire
Partager sur d’autres sites

comme promit

 

 ;---------------------------------------------------------------
; 	Sauvegarde et restauration de données par les Xdata	
; Derain d.							
;---------------------------------------------------------------

(defun c:setxdata()
(setq lastent (entget (car(entsel)))) 
(if (not (tblsearch "appid" "PBuilder"))(regapp "PBuilder"))
(setq exdata '((-3 ("PBuilder" (1000 . "www.partsBuilder.com")))))
(setq newent  
(append lastent exdata))  
(entmod newent)             
)

(defun c:getxdata()
(entget (car (entsel)) '("PBuilder"))
)

 

voici donc une routine elementaire

 

A+ D.D.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Derain, merci pour cette routine.

J'ai cependant plusieurs questions : (Exemple pour le recensement de tombes dans un cimetière, pas trés gai, je sais, mais trés utile,...)

 

1) Comment puis-je associer à ma polyligne des informations de type : Nom, adresse, localisation dans le cimetière,....?

 

2) Comment transférer alors ces informations sous EXcel ?

 

3) Comment puis-je garder une mise à jour de ces informations, soit en les modifiants dans Excel, soit dans AutoCAD ?

 

4) Comment puis-je "selectionner" les éléments dans AutoCAD en créant une requête ? (Exemple: Selection de toutes les tombes datant du début du siècle dernier, les caveaux de trois places,...etc,.. ?)

 

Comme dis plus haut, je désirerai créer un petit SIG en utilisant que les possibilités de AutoCAD et EXcel.

 

Quel est alors ton point de vue sur ce sujet ?

 

Test pour une polyligne fermée =>

 

Commande: setxdata

Choix de l'objet: ((-1 . ) (0 . "LWPOLYLINE") (330 .

) (5 . "15BAF") (100 . "AcDbEntity") (67 . 0) (410 .

"Model") (8 . "BAC TRACE") (100 . "AcDbPolyline") (90 . 4) (70 . 1) (43 . 0.0)

(38 . 0.0) (39 . 0.0) (10 59014.0 109050.0) (40 . 0.0) (41 . 0.0) (42 . 0.0)

(10 76540.5 109050.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 76540.5 100180.0)

(40 . 0.0) (41 . 0.0) (42 . 0.0) (10 59014.0 100180.0) (40 . 0.0) (41 . 0.0)

(42 . 0.0) (210 0.0 0.0 1.0) (-3 ("PBuilder" (1000 . "www.partsBuilder.com"))))

Commande:

 

Test pour un texte =>

 

SETXDATA

Choix de l'objet: ((-1 . ) (0 . "TEXT") (330 .

d'entité: 7efcacf8>) (5 . "15BB0") (100 . "AcDbEntity") (67 . 0) (410 .

"Model") (8 . "BAC TRACE") (62 . 3) (100 . "AcDbText") (10 64505.9 109812.0

0.0) (40 . 351.26) (1 . "PLANS EXECUTION BAC") (50 . 0.0) (41 . 1.0) (51 . 0.0)

(7 . "TIT") (71 . 0) (72 . 4) (11 67777.2 109987.0 0.0) (210 0.0 0.0 1.0) (100

. "AcDbText") (73 . 0) (-3 ("PBuilder" (1000 . "www.partsBuilder.com"))))

Commande:

 

Merci d'avance.

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

1/ pour cette exemple je n'est utiliser que la danner associer a 1000 rien ne t'empeche dans utiliser d'autre (superieur a 1000) comme le fait autocad le 8 pour les calque .... a toi de definir quel pointeur definit quelle variable ou encore de n'utiliser qu'une seul valeur en separant les champ par des ; ou autre choses.

 

2/ Dans le sans AutoCAD -> excel tu fabrique en list un fichier csv qui reprend toutes les infos qui sont dans les xdata et tu le relit dans excel.

 

Dans le sens excel -> acad de la meme facon tu fabrique un csv tu le lis en lisp puis tu affecte les données au chaque des entitee qui en on besoin.

 

Nota: bien entendu il te faudra gerer un index unique comme dans une base de donnée qui te permetra d'identifier quel info provenant d'excel corresponde a quelle ligne dans AutoCAD

 

Je parle de passer par un CSV dans un premier temps car tu peut facilement debbuger le fichier entre deux modif mais rien ne d'empeche par la suite de le faire par un lien DDe ou OLE sans passer par un CSV.

 

j'ai dela fais sa sous invetor en vba mais pas ou autocad, mais bon sa doit etre du meme genre.

 

4/ Je ne suis plus tres sur il faudrait regarder la doc, mais tu doit pouvoir fair un filtre sur une selection avec un ssget

 
(ssget "X" '((0 . "LWPOLYLINE") (-3 ("PBuilder"))))

la tu filtre déjà toutes les entitee qui sont attacher a l'applic, tu peut alonger la liste de filtre ou encore parser tous les entitee de la selection a la recherche de celles que tu veux

 

A+ D.D.

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

une première ébauche.

deux commandes :

cim pour enregistrer les xdata dans un objet sélectionné

cimxl pour exporter les xdata des objets selectionné au format .csv (dans c:/testcim.csv)

 

(defun getxData-lili (ent txt / VLA-OB XDATA XTYPE)
 (if (equal (type ent) 'ENAME)(setq ent (vlax-ename->vla-object ent)))
 (setq xData (vlax-make-safearray vlax-vbVariant (cons 0 1))
xType (vlax-make-safearray vlax-vbInteger (cons 0 1)))
 (vlax-safearray-fill xData (cons 0 (list txt)))
 (vlax-safearray-fill xType '(1001 1000))
 (vla-setxdata ent xType xData)
 )

(defun c:cim (/ ADRESSE ENT LOCALISATION NOM TXT L VLA-OB XDATA XTYPE )
 (setq ent (car (entsel "\n Choisir l'objet dans lequel enregistrer les renseignements :")))
 (if ent
   (progn
     (setq vla-ob (vlax-ename->vla-object ent))
     (vla-getxdata  vla-ob "" 'xType 'xData)
     (if (and xType xData)
(progn
  (setq l (mapcar 'vlax-variant-value  (vlax-safearray->list xData)))
  (alert (strcat "Xdata Existants : " (cadr l))))
(progn
  (setq Nom (getstring T "\n Nom :")
	adresse (getstring T "\n Adresse :")
	localisation (getstring T "\n Localisation :")
	txt (strcat Nom ";" adresse ";" localisation))
  (getxData-lili ent txt) ) )
     )
   )
  (princ)
 )

(defun c:cimxl (/ E F I L SEL XDATA XTYPE)
 (setq sel (ssget)
f (open "c:\\testcim.csv" "w"))
 (repeat (setq i (sslength sel))
   (setq e (vlax-ename->vla-object (ssname sel (setq i (1- i)))))
   (vla-getxdata  e "" 'xType 'xData)
   (if (and xType xData)
     (progn
(setq l (mapcar 'vlax-variant-value  (vlax-safearray->list xData)))
(princ (cadr l) f)
(princ "\n" f)
)
     )
   )
 (close f)
 )


 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Bred, pas de problème pour la routine "cim ", par contre pour "cimxl" =>

 

Commande: cimxl

Choix des objets: 1 trouvé(s)

Choix des objets:

; erreur: type d'argument incorrect: FILE nil

Commande:

 

zebulon_, merci pour le lien, je vais prendre le temps de "décortiquer tout ça" pour voir ce que je comprend avec mon maigre niveau.

 

Derain, merci encore de l'énergie que tu met dans tes réponses, mais malheuresement, je n'ai pas le niveau pour te suivre et c'est pas faute de vouloir essayer,...

 

En ce qui concerne la routine "TxtExc" de Patrick_35, il faut d'abord que je réinstall EXcel 2003 pour tester et te donnerai mon sentiment, =>

 

Commande:

Commande: TxtExc

Version d'excel inconnue ou non installée

Commande:

 

pelloux, pour lier "ponctuellement" un fichier à la discussion, tu peux toujours utiliser ce site, forcément je suis intéressé et t'en remercie d'avance,...

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Rere,

 

Derain

 

J'ai retesté "TxtExc" de Patrick_35,, le truc c'est que je récupère tous les textes, mais ceux-ci ne sont pas forcément liés aux objets qui m'intéressent, et après, je fais quoi ??

 

a une ligne pret (reste a trouver laquelle).

 

Qu'entend -tu exactement ??

 

zebulon_, comme prévu, j'ai rien compris !!!

 

Merci à tous.

 

[Edité le 30/11/2007 par lili2006]

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Bred, pas de problème pour la routine "cim ", par contre pour "cimxl" =>

 

citation extraite du message original:

Commande: cimxl

Choix des objets: 1 trouvé(s)

Choix des objets:

; erreur: type d'argument incorrect: FILE nil

Commande:

:casstet: :casstet: :casstet:

c'est bizarre....

fais le pas à pas en passant par le visual lisp, à la ligne

(setq sel (ssget)
[b]f (open "c:\\testcim.csv" "w"))[/b]

tu devrais avoir en retour

#< file "c:\\testcim.csv ">

 

(ou écris (princ f) juste après, et regarde ce que te dit la ligne de commande....)

 

... ou un

(vl-load-com)

?

 

... d'autre on-t'ils le problème ?

merci des retours....

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

... j'ai testé avec les même renseignements que tu as rentés, car je me demanandais si ce n'étais pas à cause des virgules, mais ça a marché chez moi....

Essaye quand même d'écrire des renseignements sans virgule pour voir....

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Bred, voici ce que me renvoi le deuxième test =>

 

Commande: cim

Choisir l'objet dans lequel enregistrer les renseignements :

Nom :Monsieur Test

Adresse :15 Rue des Maréchaux

Localisation :2ème allée sud sud ouest

Commande:

Commande: cimxl

Choix des objets: 1 trouvé(s)

Choix des objets:

; erreur: type d'argument incorrect: FILE nil

Commande:

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Rere,

 

Si je ressaie de renvoyer des renseignements sur la même entité avec cim =>

 

<!--url{0}-->

 

donc, les infos sont bien en mémoire, non ??

 

C'est à l'utilisation de "cimxl", que j'ai des soucis (j'ai changé de fichier pour voir) =>

 

Commande: cimxl

Choix des objets: 1 trouvé(s)

Choix des objets:

; erreur: type d'argument incorrect: FILE nil

Commande:

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant



×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité