Aller au contenu

SVP Routine pour inverser le Contenu de 2 attributs


Messages recommandés

Posté(e)

Hello

 

1) Voir le titre ... Je n'ai pas trouve sur Internet !?

Mais je suis un peu moyen mou en ce moment !

 

2) Soit un Bloc classique (ou Bloc dynamique) avec N attributs

 

3) On pose 2 questions :

- Nom de l'Etiquette de Attribut 1

- Nom de l'Etiquette de Attribut 2

 

4) On fait une selection AutoCAD "normale/classique" ...

 

5) On ne retient dans la selection que les N Blocs (le Nom du Bloc peut etre different)

ayant les DEUX attributs (utilises ou pas, vides ou pas)

 

6) On demarre la boucle de traitement ...

 

5) On inverse le contenu des DEUX attributs ...

On met a jour le bloc concerne

 

6) On boucle sur les N blocs concernes

donc GOTO Point No 6

 

Merci d'avance, Bye, lecrabe

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Vite fait.

 

(defun c:swapatt (/ getAtts tag1 tag2 ss i br)
 (defun getAtts (ent / elst atts)
   (while (= (cdr (assoc 0 (setq elst (entget (setq ent (entnext ent)))))) "ATTRIB")
     (setq atts (cons (cons (cdr (assoc 2 elst)) elst) atts))
   )
 )
 (if (and (setq tag1 (strcase (getstring "\nEtiquette du premier attribut: ")))
          (setq tag2 (strcase (getstring "\nEtiquette du second attribut: ")))
          (setq ss (ssget '((0 . "INSERT") (66 . 1))))
     )
   (repeat (setq i (sslength ss))
     (setq atts (getAtts (ssname ss (setq i (1- i)))))
     (if (and (setq att1 (cdr (assoc tag1 atts)))
              (setq att2 (cdr (assoc tag2 atts)))
         )
       (progn
         (entmod (subst (assoc 1 att1) (assoc 1 att2) att2))
         (entmod (subst (assoc 1 att2) (assoc 1 att1) att1))
       )
     )
   )
 )
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Trop rapide pour moi (gile)...

 

J'avais vu un truc avec les fonctions "setpropertyvalue"

 

(defun C:invAtt ( / valAtt1 valAtt2 cpteur nb sselect sel att1 att2)
(setq valAtt1 (strcase (getstring "\nEtiquette de l'attribut 1 : ")))
(setq valAtt2 (strcase (getstring "\nEtiquette de l'attribut 2 : ")))
(setq cpteur 0 nb 0)
(if (setq sselect (ssget  '((0 . "INSERT"))))
	(while (setq sel (ssname sselect cpteur))
		(if (and
			(not (vl-catch-all-error-p (vl-catch-all-apply 'getpropertyvalue (list sel valAtt1))))
			(not (vl-catch-all-error-p (vl-catch-all-apply 'getpropertyvalue (list sel valAtt2))))
			)
			(progn
				(setq att1 (getpropertyvalue sel valAtt1) att2 (getpropertyvalue sel valAtt2))
				(setpropertyvalue sel valAtt1 att2)
				(setpropertyvalue sel valAtt2 att1)
				(setq nb (1+ nb))
			)
		)
		(setq cpteur (1+ cpteur))
	)
)
(princ (strcat "\n " (itoa nb) " bloc(s) traité(s)."))
(princ)
)

 

Je crois que ça marche.

Posté(e)

Hello Les Jeunes Padawans

 

C Top ! MERCI !!

 

Bon WE, Bye, lecrabe

 

PS: votre devoue Decapode est "tres moyen mou" aujourd'hui

car il a OSE supposer qu'une autre routine de notre grand Maitre Gilles

ne fonctionnait pas ! Quelle Honte !!

En fait il ne savait pas l'utiliser ou plutot il avait OUBLIE !!

Autodesk Expert Elite Team

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é