zebulon_ Posté(e) le 19 avril 2010 Partager Posté(e) le 19 avril 2010 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). AmicalementVincent 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) Lien vers le commentaire Partager sur d’autres sites More sharing options...
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