Aller au contenu

Copier les XDATAs vers N entites


lecrabe

Messages recommandés

 

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

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

 

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

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

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é