lecrabe Posté(e) le 19 juin 2009 Partager Posté(e) le 19 juin 2009 ReHello En ce moment je plonge à fond sur les XDATAs et donc j'ai encore besoin d'une petite routine que l'on pourrait appeler COPY_XD.lsp (idem dans le principe à la routine COPY_OD.lsp de MAP/CIVIL qui copie les Object Data vers N entités) Sélection de UNE entitéSi elle n'a pas de XDATA, c terminé ! Si elle a des XDATAs (mono-application ou multi-application) on les copie SUR les N entités que l'on va sélectionner (par la sélection classique d'AutoCAD) - Si les objets destination n'ont pas de XDATA, cela me semble assez simple - Si les objets destination ont DEJA des XDATAs registrés sur d'autres noms d'applications, c moins simple ! - Si les objets destination ont DEJA des XDATAs registrés sur les MEMEs applications, il faut ECRASER les anciens XDATAs par ceux de l'objet de DEPART - Et le pire des cas : les objets destination ont DEJA des XDATAs registrés sur d'autres noms d'applicatiosn et AUSSI tout ou en partie sur les MEMEs noms d'application que l'objet de DEPART !!Donc ajout partiel et Ecrasement partiel ou total ... C bien au dela de mes faibles compétences en Lisp ou V-Lisp, donc je fais encore appel à la communauté ... Merci d'avance, Le Decapode "Tripatouilleur de XDATA" Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabcad Posté(e) le 19 juin 2009 Partager Posté(e) le 19 juin 2009 Salut Lecrabe, Ah les Xdatas, les afficher dans une boite de dialogue et de les modifier dans cette boite de dialogue, ce serait cool non ? A plus Fabcad Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 19 juin 2009 Partager Posté(e) le 19 juin 2009 Re, Voilà ;) ;; COPY_XD ;; Copier les xdatas d'un objet source vers des objets cible (defun c:COPY_XD (/ ss source sdata n apps ent elst cdata) (if (and (setq source (car (entsel "\nSélectionnez l'objet source: "))) (setq sdata (cdr (assoc -3 (entget source '("*"))))) ) (progn (setq n -1 apps (mapcar 'car sdata) ) (princ "\nSélectionnez les objets cible.") (if (setq ss (ssget)) (while (setq ent (ssname ss (setq n (1+ n)))) (setq elst (entget ent '("*")) cdata (cdr (assoc -3 elst)) elst (vl-remove (assoc -3 elst) elst) ) (entmod (append elst (list (cons -3 (append (vl-remove-if (function (lambda (x) (member (car x) apps) ) ) cdata ) sdata ) ) ) ) ) ) ) ) (princ "\nL'objet séléctionné ne contient pas de données étendues." ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) le 20 juin 2009 Auteur Partager Posté(e) le 20 juin 2009 Hello Je viens de tester avec un bon vieux MAP 2004 et cela semble marcher nickel-chrome ! Je susi impressioné par la faible longueur de la routine car j'imaginais (trop d'imagination sans doute) que ce serait compliqué lors de la présence de XDATAs variés sur les objets de destination avec donc suivant les cas : ajout dans une nouvelle application ou ajout dans une application existante ! Encore merci Gilles, tu es le King des XDATAs Bon WE, Le Decapode Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 20 juin 2009 Partager Posté(e) le 20 juin 2009 Je susi impressioné par la faible longueur de la routine car j'imaginais (trop d'imagination sans doute) que ce serait compliqué lors de la présence de XDATAs variés sur les objets de destination avec donc suivant les cas : ajout dans une nouvelle application ou ajout dans une application existante ! Il suffit d'ajouter (append) la liste des nouvelles données à la liste des anciennes de laquelle on a supprimé toutes les entrées dont le nom de l'application est aussi dans les nouvelle (vl-remove-if) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD 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