Fraid Posté(e) le 22 mars 2021 Posté(e) le 22 mars 2021 Bonjour, Je souhaiterai pouvoir supprimer une XDATA en vla.je ne trouve pas de méthode adaptée.vla-delete supprime l'objet qui contient les xdatas. je prend pour exemple, la transparence des calques sous la forme 1071 (32 bit integer)que l'on récupère ainsi ;;;Arg: vla-object issu d'une collection de calques) (defun getlaytransparency (lay / xtypeOut xdataOut dot) (vla-GetXData lay "AcCmTransparency" 'xtypeOut 'xdataOut) (if xdataOut (setq dot (fix (/ (- 33554687 (cadr (mapcar 'vlax-variant-value (vlax-safearray->list xdataOut))))) 2.55)) (setq dot 0) ) dot ) mais si je voulais supprimer cette xdata (pour mettre la transparence a 0). comment s'y prendre? https://github.com/Fraiddd
lecrabe Posté(e) le 22 mars 2021 Posté(e) le 22 mars 2021 HelloHUMOUR: tu as trop de XDATA, je te propose le Lisp suivant ...Bonne Semaine, La Sante, Bye, lecrabe "fatigue" ;;; Commande au clavier : DeleteAllXdata ;;; ATTENTION : c TRES DANGEUREUX car c GLOBAL / GENERAL (parce que "X") ;;; Ne surtout pas ECRASER le DWG courant (defun C:DeleteAllXdata ( / curass countr) (setq curass (ssget "X" '((-3 ("*")))) countr 0 ) (if curass (repeat (sslength curass) (DelXdata (ssname curass countr) '("*")) (setq countr (1+ countr)) ) ) (princ) ) (defun DelXdata (ent app / entlst tmplst) (setq entlst (entget ent app)) (foreach memb (cdr (assoc -3 entlst)) (setq tmplst (cons -3 (list (cons (car memb) nil))) entlst (subst tmplst (assoc -3 entlst) entlst) entlst (entmod entlst) ) ) ) Autodesk Expert Elite Team
Fraid Posté(e) le 22 mars 2021 Auteur Posté(e) le 22 mars 2021 Merci :D ça c'est dans mes cordes, par contre il me semble que cela n'efface pas les xdata des calques.. c'est bien du vla que je veux faire, pour que cela tourne avec un objet dbx. https://github.com/Fraiddd
(gile) Posté(e) le 22 mars 2021 Posté(e) le 22 mars 2021 Salut, Pour modifier plus facilement les xdata (et plus généralement pour rendre plus "LISP friendly" les variants et autres joyeusetés), tu trouveras en bas de cette page une petite bibliothèque de routines nommée AutomationHelpers qui contient, entre autre, deux fonctions : gc:GetXdata et gc:SetXdata qui, respectivement, retournent ou prennent en argument une liste DXF.Pour supprimer toutes les données pour une application, tu fais simplement (gc:setxdata '((1001 . "NomApplication"))). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Fraid Posté(e) le 22 mars 2021 Auteur Posté(e) le 22 mars 2021 Pour supprimer toutes les données pour une application, tu fais simplement (gc:setxdata '((1001 . "NomApplication"))). Merci, je pouvais toujours chercher une méthode...2 jours la dessus... https://github.com/Fraiddd
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