Aller au contenu

Supprimer une XDATA en VLA


Fraid

Messages recommandés

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?

Lien vers le commentaire
Partager sur d’autres sites

Hello

HUMOUR: 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

Lien vers le commentaire
Partager sur d’autres sites

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

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é