Aller au contenu

Rendre objet calque courant


Messages recommandés

Posté(e)

Bonjour à tous,

 

Serait il possible par modification du lisp de Gile Getlayers, en sélectionnant un objet de rendre le calque de l'objet courant ?

 

J'ai beau essayer d'insérer un c: après le defun mais autocad me retourne l'erreur suivante; erreur: nombre d'arguments insuffisants du coup !!!!!!

 

 ;; GETLAYERS (gile) 02/12/07
;; Retourne la liste des calques cochés dans la boite de dialogue
;;
;; arguments
;; titre : le titre de la boite de dialogue ou nil (defaut = Choisir les calques)
;; lst1 : la liste des calques à pré-cochés ou nil
;; lst2 : la liste des calques non cochables (grisés) ou nil

(defun c:getlayers (titre lst1 lst2 / toggle_column tmp file lay layers len
dcl_id)

(defun toggle_column (lst)
(apply 'strcat
(mapcar
(function
(lambda (x)
(strcat ":toggle{key="
(vl-prin1-to-string x)
";label="
(vl-prin1-to-string x)
";}"
)
)
)
lst
)
)
)

(setq tmp (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
)
(while (setq lay (tblnext "LAYER" (not lay)))
(setq layers (cons (cdr (assoc 2 lay)) layers))
)
(setq layers (vl-sort layers '<)
len (length layers)
)
(write-line
(strcat
"GetLayers:dialog{label="
(cond (titre (vl-prin1-to-string titre))
("\"Choisir les calques\"")
)
";:boxed_row{:column{"
(cond
((< len 12) (toggle_column layers))
((< len 24)
(strcat (toggle_column (sublist layers 0 (/ len 2)))
"}:column{"
(toggle_column (sublist layers (/ len 2) nil))
)
)
((< len 45)
(strcat (toggle_column (sublist layers 0 (/ len 3)))
"}:column{"
(toggle_column (sublist layers (/ len 3) (/ len 3)))
"}:column{"
(toggle_column (sublist layers (* (/ len 3) 2) nil))
)
)
(T
(strcat (toggle_column (sublist layers 0 (/ len 4)))
"}:column{"
(toggle_column (sublist layers (/ len 4) (/ len 4)))
"}:column{"
(toggle_column (sublist layers (/ len 2) (/ len 4)))
"}:column{"
(toggle_column (sublist layers (* (/ len 4) 3) nil))
)
)
)
"}}spacer;ok_cancel;}"
)
file
)
(close file)
(setq dcl_id (load_dialog tmp))
(if (not (new_dialog "GetLayers" dcl_id))
(exit)
)
(foreach n lst1
(set_tile n "1")
)
(foreach n lst2
(mode_tile n 1)
)
(action_tile
"accept"
"(setq lst nil)
(foreach n layers
(if (= (get_tile n) \"1\")
(setq lst (cons n lst))))
(done_dialog)"
)
(start_dialog)
(unload_dialog dcl_id)
(vl-file-delete tmp) 
lst
) 

 

Merci par avance de votre aide.

Chris_mtp

Posté(e)

Je ne trouve pas non plus la partie de lisp dans le AutoCAD.mnl qui permet d'appeler la commande ai_molc.

 

Je voudrais simplement trouver ce code pour le copier dans un nouveau lisp et changer le nom de la fonction d'appel pour la personnaliser à mes besoins.

 

Chris_mtp.

Posté(e)

Salut,

 

Attention de ne pas tout mélanger, GetLayers est une boite de dialogue qui retourne une liste de nom de calques sélectionnés, donc rien à voir avec le calque courant.

 

ai_molc semble n'être plus défini en LISP (voir ici), mais c'est pas bien difficile d'écrire une expression qui fait la même chose :

 

(setvar "CLAYER" (cdr (assoc 8 (entget (car (entsel)))))) 

 

on peut encore appeler la fonction en LISP en faisant :

 

(c:ai_molc) 

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

Posté(e)

C'est bon, je m'en suis sorti en faisant un nouveau lisp avec une nouvelle fonction d'appel, intégrer ton code, écrire un princ à la fin sans oublier les parenthèses et ca marche.

 

Merci pour ton aide.

Chris_mtp.

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é