Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

afin de me faciliter la tâche avec les xdata, j'ai utilisé une bibliothèque de fonctions proposée par Didier DUHEM sur son site perso.

C'est écrit en lisp (je veux dire sans VLISP) et j'ai trouve le principe excellent. Par contre, comme j'utilise de plus en plus VLISP, et pour éviter de faire un (vlax-ename->vla-object ...), j'ai réécrit ces fonctions en VLISP. Je les ai déposé ici .

 

Pour en illustrer le fonctionnement, j'ai dessiné 2 ou 3 lignes dans un fichier quelconque

 

1) rajouter des xdata, sans vérifier s'il y en a déjà, dans un objet que le lisp vient de créer

(vl-load-com)
(load "XdataFer")
(setq AcDoc (vla-get-activeDocument (vlax-get-acad-object)))

(defun c:testput (/ I eobj sel xdata)
 (setq I 0)
 (ssget)
 (vlax-for eobj (setq sel (vla-get-ActiveSelectionSet AcDoc))
   (setq xdata (x_putint "key0" I nil "MonAppli"))
   (x_write xdata eobj "MonAppli")
   (setq I (+ I 1))
 )
 (vla-delete sel)
) 

 

un xdlist revoie ceci.

* Registered Application Name: MonAppli

* Code 1002, Starting or ending brace: {

* Code 1000, ASCII string: key0

* Code 1070, 16-bit integer: 0

* Code 1002, Starting or ending brace: }

 

2) rajouter des xdata en préservant les xdata existants de la même appli

(defun c:testrajout (/ I eobj sel xdata)
 (setq I 65)
 (ssget)
 (vlax-for eobj (setq sel (vla-get-ActiveSelectionSet AcDoc))
   (setq xdata (x_read eobj "MonAppli"))
   (setq xdata (x_putstr "key1" (chr I) xdata "MonAppli"))
   (x_write xdata eobj "MonAppli")
   (setq I (+ I 1))
 )
 (vla-delete sel)
)

 

xdlist donne

* Registered Application Name: MonAppli

* Code 1002, Starting or ending brace: {

* Code 1000, ASCII string: key0

* Code 1070, 16-bit integer: 0

* Code 1002, Starting or ending brace: }

* Code 1002, Starting or ending brace: {

* Code 1000, ASCII string: key1

* Code 1000, ASCII string: A

* Code 1002, Starting or ending brace: }

 

3) lire une information xdata d'un objet

(defun c:testtrouvinfo (/ eobj sel ResKey1)
 (ssget)
 (vlax-for eobj (setq sel (vla-get-ActiveSelectionSet AcDoc))
   (setq ResKey1 (x_trouvinfo "key1" eobj "MonAppli"))
   (alert ResKey1)
 )
 (vla-delete sel)
)

 

4) modifier la valeur d'une clé

(defun c:testmod (/ I eobj sel xdata)
 (setq I 97)
 (ssget)
 (vlax-for eobj (setq sel (vla-get-ActiveSelectionSet AcDoc))
   (setq xdata (x_read eobj "MonAppli"))
   (setq xdata (x_modstr "key1" (chr I) xdata "MonAppli"))
   (x_write xdata eobj "MonAppli")
   (setq I (+ I 1))
 )
 (vla-delete sel)
) 

 

xdlist donne

* Registered Application Name: MonAppli

* Code 1002, Starting or ending brace: {

* Code 1000, ASCII string: key0

* Code 1070, 16-bit integer: 0

* Code 1002, Starting or ending brace: }

* Code 1002, Starting or ending brace: {

* Code 1000, ASCII string: key1

* Code 1000, ASCII string: a

* Code 1002, Starting or ending brace: }

 

5) supprimer une clé

(defun c:testdel (/ eobj sel xdata)
 (ssget)
 (vlax-for eobj (setq sel (vla-get-ActiveSelectionSet AcDoc))
   (setq xdata (x_read eobj "MonAppli"))
   (setq xdata (x_otegen "key1" xdata "MonAppli"))
   (x_write xdata eobj "MonAppli")
 )
 (vla-delete sel)
) 

 

xdlist donne

* Registered Application Name: MonAppli

* Code 1002, Starting or ending brace: {

* Code 1000, ASCII string: key0

* Code 1070, 16-bit integer: 0

* Code 1002, Starting or ending brace: }

 

6) supprimer tous les xdata d'une appli

(defun c:testraz (/ eobj sel xdata)
 (ssget)
 (vlax-for eobj (setq sel (vla-get-ActiveSelectionSet AcDoc))
   (setq xdata '((1001) ("MonAppli")))
   (x_write xdata eobj "MonAppli")
 )
 (vla-delete sel)
) 

 

xdlist donne

No Xdata associated with Application Name(s).

 

Amicalement

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é