Aller au contenu

Changer une entité de calque


Messages recommandés

Invité Sylvainhinard
Posté(e)

Bonjour,

 

Je cherche à programmer en LISP, pour commencer je souhaiterais savoir comment faire pour changer le calque d'une entité : par exemple je choisi un objet quelquonque, (ligne, polyligne,cercle...) et je souhaite qui passe du calque TOTO au calque TOTO1?

 

Comment faire la même chose que précedemment mais en filtrant les entité : par exemple passer du calque TOTO a TOTO1 tout les cercle rouge?

 

Bon je sais certain vont trouver cela facile mais il faut bien commencer non?

Posté(e)

avec les menu express de la version complet, il y a la commande "ssx" qui selectionne les objet souhaité.

 

Par exemple:

^C^C(load "ssx");ssx;;e;hatch;;_draworder;p;;ar;

 

- appelle "ssx"

- cheche toutes les hachures

- les affiche en arrière.

 

^C^C(load "ssx");ssx;;c;1;e;circle;;changer;p;;pr;ca;toto1;;

 

selectionne les entités "cercle" "rouge" et les mets dans le calques toto1

apres dans un lisp il faut mettre cette commande COMMAND

 

c'est une solution facile a mettre en place.

Posté(e)

Voici un exemple pas trop long, qui fonctionne un peu à la façon des Express (par pointage)

 

Tu peux améliorer le filtre pour y rajouter d'autres options (couleur, type de ligne, etc..)

Cela peut être fait dans une boucle avec (getkword) et construire ainsi la liste de filtre pour affiner ta sélection. Mais déjà pour débuter simplement ;) je te laisse décortiquer

 

(defun c:typ2calq ( / model_ent js vers_calqu ent n)
(while (null (setq model_ent (entsel "\nChoix d'une entité type: "))))
(setq model_ent (entget (car model_ent)))
(setq js (ssget "_X" (list (assoc 0 model_ent))))
(cond
	(js
		(while (null (setq vers_calqu (entsel "\nChoix de l'entité pour calque de destination: "))))
		(setq vers_calqu (assoc 8 (entget (car vers_calqu))) n 0)
		(repeat (sslength js)
			(setq ent (entget (ssname js n)))
			(entmod (subst vers_calqu (assoc 8 ent) ent))
			(setq n (1+ n))
		)
		(princ (strcat "\n" (itoa n) " entité(s) " (cdr (assoc 0 model_ent)) " sont sur le calque " (cdr vers_calqu)))
	)
)
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut

 

Bon, bah c'est mon tout d'apporter ma petite pierre

 

Pour répondre à ta première question, il faut changer dans l'entité sélectionnée le code dxf 8

 

exemple pour une sélection unique

(setq ent (entget (car (entsel))))
(setq ent (entmod (subst (cons 8 "TOTO1") (assoc 8 ent) ent)))
(entupd (cdr (assoc -1 ent)))

 

Maintenant, pour faire un filtre sur une selection multiple que sur des cercles de couleurs rouge

(setq sel (ssget (list (cons 0 "circle") (cons 62 1))))

 

Le code dxf 0 correspond au type d'entité et le code 62 à la couleur

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Invité Sylvainhinard
Posté(e)

Merci beaucoup pour vos précieux renseignement, je retourne au travail... J'ai eu les renseignement qu'il me fallait. La prochaine fois j'aurais besoin d'une leçon sur les boucles...

"I'll be back"...

Vive CADxp!!!

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é