chris_mtp Posté(e) le 16 novembre 2008 Posté(e) le 16 novembre 2008 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
chris_mtp Posté(e) le 16 novembre 2008 Auteur Posté(e) le 16 novembre 2008 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.
(gile) Posté(e) le 16 novembre 2008 Posté(e) le 16 novembre 2008 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
chris_mtp Posté(e) le 16 novembre 2008 Auteur Posté(e) le 16 novembre 2008 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.
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant