Aller au contenu

Lisp action sur calque Xref


Messages recommandés

Posté(e)

Bonjour à tous,

 

Je souhaite, en sélectionnant une une Xref, modifier :

- la couleur et le type de ligne d'un calque de cette Xref dans le dessin courant.

 

Voila ! En fait j'ai cette action a répéter sur 3-4 calques par xref et par dessin donc je souhaiterais automatiser la partie un peu pénible de la manip...

 

Est-ce possible ?

Si oui pourriez-vous me mettre sur la piste car je ne sais pas comment agir sur les calques d'une Xref sachant que le nom de la Xref change d'un dessin à l'autre, c'est pour cela qu'il faut la sélectionner !

 

Merci d'avance !!!

Posté(e)

heu je vais avoir besoin d'un peu plus d'aide car je n'y connait pas grand chose à part quelles que petites bidouilles ...

j'avais un collègue qui avais des livres sur le lisp mais il est partie !!!

Maintenant je n'ai que vous ;)

 

@+

Posté(e)

Désolé d'être un boulet !

Mais je ne maitrise pas l'anglais donc j'ai traduit le texte (avec un traducteur de la toile )

Et rien a y faire je n'ai pas avancé !!!

 

Posté(e)

Un truc genre:

 

(command "_.-layer" "_co" "253" (cdr (assoc 8 (entget (car (nentsel))))) "")

 

tu fais un copier/coller dans la zone de commande, tu tapes sur t tu clickques un objet qui se trouve dans le layer de l'xref que tu veux modifier

 

(Giles) a écrit un petit tutorial pour créer des raccourcis en lisp mais je ne sais pas où il l'a mis...

 

 

Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog

Posté(e)

bonjour,

désolé de ne pas avoir pris le temps avant pour regarder plus en détails vos réponses.

 

La piste que tu me propose Carboleum est dans le gout sauf que :

- je souhaite sélectionner une Xref et agir sur plusieurs calques dont je connais le nom

et ton code agit sur le calque de l'objet sélectionné.

Et la je ne sais pas comment faire :(

 

merci @+

Posté(e)

(defun c:color-xref ()
(setq liste-de-layers-à-éteindre '("layer1" "layer2"))
(setq nom-de-l'xref (cdr (assoc 2 (entget (car (entsel))))))
(mapcar '(lambda (x) (command "_.-layer" "_co" "253" (strcat nom-de-xref "|" x) "")) liste-de-layers-à-éteindre)
)

 

non testé ;-)

 

 

Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog

Posté(e)

Merci beaucoup

Surtout que je ne comprend pas la moitié du code ;)

mais j'ai pu me débrouillé une personnalisation de dessous les fagots <acronym class=dict title=.

 

Voici le code qui fait exactement ce que je veux :

 

(defun c:xtr ()

(setq nom-de-xref (cdr (assoc 2 [surligneur](entget (car (entsel)[/surligneur])))))

(setq liste-de-calques1 '("*"))
[surligneur](mapcar '(lambda (x)[/surligneur] (command "_.-layer" "in" [surligneur](strcat nom-de-xref "|" x) ""))[/surligneur] liste-de-calques1)
(mapcar '(lambda (x) (command "_.-layer" "ra" (strcat nom-de-xref "|" x) "")) liste-de-calques1)

(setq liste-de-calques2 '("ST_N_Murs BA" "ST_N_Murs BA Hach" "ST_N_Murs Agglo"))
(mapcar '(lambda (x) (command "_.-layer" "ac" (strcat nom-de-xref "|" x) "")) liste-de-calques2)
 
(setq liste-de-calques3 '("ST_N_Murs BA" "ST_N_Murs Agglo"))
(mapcar '(lambda (x) (command "_.-layer" "co" "4" (strcat nom-de-xref "|" x) "")) liste-de-calques3)
(mapcar '(lambda (x) (command "_.-layer" "tl" "tiret" (strcat nom-de-xref "|" x) "")) liste-de-calques3)

(setq liste-de-calques4 '("ST_N_Murs BA Hach"))
(mapcar '(lambda (x) (command "_.-layer" "co" "3" (strcat nom-de-xref "|" x) "")) liste-de-calques4)
(mapcar '(lambda (x) (command "_.-layer" "t" "" (strcat nom-de-xref "|" x) "")) liste-de-calques4)

)

 

Pourriez vous m'expliquer en détail ce qui ce passe dans les zone en jaune ?

Est-ce possible de simplifier le code dans les cas ou je n'est pas de liste de calque ?

Pourquoi as tu mis un "_." devant -layeur ou "_" devant co dans ton code ?

 

MERCI @+

Posté(e)

 

(entget (car (entsel))) renvoie la liste des caractéristiques de l'objet cliqué. Cette liste est la façon dont AutoCAD garde les objets en mémoire et les traite (en quelques sortes)

Tu peux faire des tests sur une ligne, un texte, etc.

En modifiant cette liste, tu peux modifier l'objet en question.

 

mapcar applique une fonction à tous les membres d'une liste. Demandes à Google, il te trouvera certainement quelques tutoriels intéressant. Attention: Le lisp utilisé sous AutoCAD est un dialecte, ce qui veux dire qu'il ne comprend pas tout à fait d'autres dialectes lisp. Mais mapcar est une fonction commune à la plupart des lisps.

 

strcat est très bien expliqué dans le help d'autocad. Ici, elle permets d'ajouter le nom de l'xref au début du nom du layer; car c'est comme celà que AutoCAD traite les layers des xrefs.

 

Le _ permet de se libérer de la contrainte de la langue/ En effet, AutoDesk a traduit ses commandes dans d'autres langues que l'anglais initial. Mettre un _ devant la commande anglaise permet au versions localisées (dans une autre langue) de la comprendre.

 

Si tu as d'autres question, n'hésites pas!

 

 

Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog

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é