Aller au contenu

SVP Routine Changement de Calque pour Attributs


Messages recommandés

Posté(e)

Hello Vaillants PROs du Lisp/VLisp

 

SVP je cherche une routine pour re-organiser les Blocs (Classiques ou Dynamiques)

au niveau du calque de certains attributs (ou TOUS, si ils sont TOUS sur le meme calque) !?

... Je n'ai pas trouve ...

 

En fait transferer TOUS les Attributs d'un certain Calque PRECIS (qui pourrait etre le calque ZERO ou autre) VERS un Autre calque PRECIS (qui pourrait etre le calque ZERO ou autre) pour TOUS les Blocs trouves dans une Selection classique AutoCAD OU pour TOUS les Blocs du DWG (Aucune selection)

 

Donc j'imagine un truc du genre :

 

1) Question : TOUS les Blocs (Classiques ou Dynamiques) du DWG

ou Selection classique et ne retenir que les Blocs ...

 

2) Quel est le nom du calque concerne / depart (qui pourrait etre le calque ZERO) ?

Avec cela on trouve TOUS les Attributs concernes de TOUS les Blocs de la selection (ou TOUT le DWG)

Si calque INEXISTANT ou ZERO Attribut ou calque verrouille : STOP (avec si possible message correspondant) !

 

3) Quel est le nom du calque concerne / arrivee (qui pourrait etre le calque ZERO) ?

Si calque INEXISTANT ou meme calque que le calque Depart : STOP (avec si possible message correspondant) !

 

4) ACTION ...

 

5) Si possible: 2 petits compteurs indiquant le Nbr de Blocs concernes et le nombre total d'Attributs traites ...

 

Me suis je bien fait comprendre ??

 

Si j'avais seulement 2/3 Blocs a traiter dans le DWG, je pourrais le faire avec l'Editeur de Blocs ...

 

Merci d'avance, Bon WE, Bye, lecrabe

Autodesk Expert Elite Team

Posté(e)

Coucou

 

J'ai fait du "simple", je l'ai écrit cet AM pour Sa Majesté Lecrabe (hihi)

En simple AutoLisp

Si tu es intéressé on peut développer, mettre du DCL et autres joyeusetés

En ligne de commande :

Tu choisis le calque de départ, là où sont les blocs à traiter puis le calque d'arrivée des attributs (qui sera créé s'il n'existe pas)

Et c'est tout...

 

Amicalement

(setq calquedep (getstring "\nCalque à traiter ?\n"))
(setq jeublocs (ssget "x"
	  	(list
		(cons 0 "INSERT")
		(cons 66 1)
		(cons 8 calquedep)
	  	) 
   	)
)
(alert (strcat (itoa (sslength jeublocs)) "\n Blocs trouvés dans le Calque : " calquedep))
(setq calquearr (getstring "\nCalque de destination des attributs ?\n"))
(setq n 0 nbatt 0)
(repeat	(sslength jeublocs)
 (setq ent (ssname jeublocs n))
 (while (/= "SEQEND" (cdr (assoc 0 (entget (entnext ent)))))
(setq att (subst
	(cons 8 calquearr)
	(assoc 8 (entget (entnext ent)))
	(entget (entnext ent))
  	)
)
(entmod att)
(entupd ent)
(setq nbatt (+ 1 nbatt))
(setq ent (entnext ent))
 )
 (setq n (+ 1 n))
)
(alert (strcat (itoa nbatt) "\n attributs sont passés dans le calque : " calquearr))

Posté(e)

Hello

 

1) MERCI

 

2) Par un simple Copier / Coller, j'ai une tonne d'erreur

 

3) Et si j'embarque le TOUT dans un defun ...

 

Ajout de la Ligne au debut : (defun C:Attr2NewLayer ()

Et Ajout a la fin : )

 

Alors >>> Commande: ATTR2NEWLAYER

 

Calque à traiter ?

att_ecl

; erreur: type d'argument incorrect: lselsetp nil

 

4) Je suis une Quiche en Lisp !

 

Bye, Bon WE, lecrabe (Decapodiquement Votre Devoue Admirateur)

Autodesk Expert Elite Team

Posté(e)

Coucou

 

Ayant pris contact en direct avec notre très cher décapode ...

 

Voici la version qui lui sied, que ne ferait-on pas pour lui seoir ?

(il est trop beau ce verbe)

Les premiers soucis venaient du fait que certains attributs étaient définis en couleur "dubloc"

Si ça peut servir d'exemple à quelqu'un c'est avec plaisir que je colle le résultat ici

Je pense le mettre aussi en exemple plus décortiqué pour apprentissage sur da-code

 

(Defun C:Change_Att_Calque (/ calquedep jeublocs calquearr n att ent nbatt)

 (setq calquedep (getstring "\nNom du Calque des Blocs à traiter ? "))
 (setq calqueatt (strcase (getstring "\nCalque des Attributs à traiter ? ")))
 (setq calquearr (getstring "\nCalque de Destination des Attributs ? "))

 (setq	jeublocs (ssget	"x"
		(list
	  	(cons 0 "INSERT")
	  	(cons 66 1)
	  	(cons 8 calquedep)
		) ;_ Fin de list
     ) ;_ Fin de ssget
 ) ;_ Fin de setq


 (setq	n 0
nbatt 0
 ) ;_ Fin de setq

 (repeat (sslength jeublocs)
(setq ent (ssname jeublocs n))

(while ;(and
 	(/= "SEQEND" (cdr (assoc 0 (entget (entnext ent)))))
 
(if (= calqueatt (cdr (assoc 8 (entget (entnext ent)))))
    (progn
      (setq att (subst
       	(cons 8 calquearr)
       	(assoc 8 (entget (entnext ent)))
       	(entget (entnext ent))
     	) ;_ Fin de subst
      ) ;_ Fin de setq
      (entmod att)
      (entupd ent)
      (setq att (subst
       	(cons 62 256)
       	(assoc 62 (entget (entnext ent)))
       	(entget (entnext ent))
     	) ;_ Fin de subst
      ) ;_ Fin de setq
      (entmod att)
      (entupd ent)
      (setq nbatt (+ 1 nbatt))
    ) ;_ Fin de progn
  	) ;_ Fin de if
  	(setq ent (entnext ent))
) ;_ Fin de while
(setq n (+ 1 n))
 ) ;_ Fin de repeat

 (princ "\n ---- Résultats de la Routine Lisp ---- \n" ) 

 (princ (strcat (itoa (sslength jeublocs)) " Blocs trouvés dans le Calque " calquedep "\n" ) )
 (princ (strcat (itoa nbatt) " Attributs ont été transferés dans le Calque " calquearr ) )
 (princ)

) ;fin defun

 

Amicalement

Posté(e)

Bonjour,

 

Hormis le cas particulier du calque 0, tu dois pouvoir t'en sortir avec un Covadis:

- inactive tous les calques sauf le calque 0 et le calque à traiter => tu ne devrais avoir que les attributs concernés de visible

- Covadis Edtion / Attribut / modifier calque

- tu sélectionnes ce qu'il y a de visible à l'écran

- tu dois confirmer par * ou tout pour indiquer les étiquettes à traiter (pas de covadis sous la main pour confirmer)

- tu indiques le calque de destination de tes attributs

 

Olivier

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é