LUDWIG Posté(e) le 21 septembre 2005 Posté(e) le 21 septembre 2005 Bonjour J'ai une entité avec des Xdata de type ascii : ((-1 . ) (0 . "LINE") (330 . ) (5 . "307") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 30.5609 19.9631 0.0) (11 16.4007 17.6765 0.0) (210 0.0 0.0 1.0) [b] (-3 ("SAF_ID" (1002 . "{") [u] (1000 . "5")[/u] (1002 . "}"))) [/b]) J'eessaye d'en modifié la valeur pour incrémenter la valeur et que l'entité devienne : ((-1 . ) (0 . "LINE") (330 . ) (5 . "307") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 30.5609 19.9631 0.0) (11 16.4007 17.6765 0.0) (210 0.0 0.0 1.0) [b] (-3 ("SAF_ID" (1002 . "{") [u] (1000 . [surligneur] "10"[/surligneur] )[/u] (1002 . "}"))) [/b]) J'ai essayé ça : (setq entite (subst (cons 1000 safid) (itoa (+ increment (atoi SAFID))) entite)) (avec "increment" un entier que je passe en argument de mon lisp) Mais cela ne fonctionne pas, je n'atteints pas les xdata avec cette commande... Comment dois-je procéder ? Existe-t'il un moyen plus facile pour manipuler les Xdata ? Merci d'avance Autocad 2021 - Revit 2022 - Windows 10
(gile) Posté(e) le 21 septembre 2005 Posté(e) le 21 septembre 2005 Salut, Je ne suis pas sûr d'avoir bien compris mais avec : (setq safid (caddr (cadr (assoc -3 entite)))) et (setq entite (subst (cons -3 (list "SAF_ID" '(1002 . "{") (cons 1000 (itoa (+ increment (atoi (cdr safid))))) '(1002 . "}") ) ) (assoc -3 entite) entite ) ) çà semble marcher. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 21 septembre 2005 Posté(e) le 21 septembre 2005 Bonjour Ludwig Si tu as les expresstools, tu pourrais t'inspirer du programme "XDATA.lsp" Xdata permet de rajouter des données, mais pas de substituer des données. Cependant tu doit pouvoir l'adapter. Un autre conseil, pour une valeur entière utilise plutot le code "1070" que le code "1000" qui est plutot destiné aux chaines de caractères. ce qui pourrait donné en code (pas achevé, j'ai fais la substitution mais je n'ais pas reconstruis la liste pour la mise à jour)Attention l'ordre des xdata est TRES important, si tu as plusieurs fois le même code par exemple 1070, assure toi de bien extraire celui qui t'interesse et de le remettre dans le même ordre. (defun c:test ( / ) (while (not (setq e_sel (entsel))) ) (setq e_name (car e_sel)) (setq increment 10) (setq e_list (entget e_name (list "SAF_ID"))) (cond ((setq xd_list (assoc -3 e_list)) (setq xd_list (cdadr xd_list)) (print (assoc 1070 xd_list)) (setq xd_list (subst (cons 1070 (+ increment (cdr (assoc 1070 xd_list)))) (assoc 1070 xd_list) xd_list)) (print (assoc 1070 xd_list)) ) (T (princ "\nAucune donnée d'objet étendue n'est associée à cet objet.") ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
LUDWIG Posté(e) le 22 septembre 2005 Auteur Posté(e) le 22 septembre 2005 Merci les amis ! Vous m'avez déjà permis de voir que j'avais inverser les arguments de SUBST :red: Ensuite effectivement, je ne fais pas mon SUBST directement dans la liste de l'entité mais juste dans la liste de l'xdata, puis je reconstruis l'entité. Maintenant ça fonctionne. A+ Autocad 2021 - Revit 2022 - Windows 10
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