DaWeeD_Gab Posté(e) le 1 février 2017 Posté(e) le 1 février 2017 Bonjour, je ne trouve pas la commande qui rétablie l'isolation de calques dans un filtre de groupe : Je créé un filtre de groupe, voirie par exemple, j'y glisse mes calques concernés et je fais un clic droit sur le filtre de groupe pour choisir la commande "Isoler le groupe> toutes les fenêtres". Je travaille ensuite sur mes calques isolés, jusque là tout va bien !Mais lorsque je veux rétablir la visibilité des calques avant isolation, je ne trouve pas la commande, qui d'après la logique (ou MA logique :) ) devrait être dans le même menu contextuel que "isoler le groupe" avec quelque chose comme "rétablir l'état précédent". Je me tape donc tous les calques à la main pour les libérer...Mais qu'ai-je donc raté ??!!! en vous remerciant pour vos lumières,David Autocad Map 3D 2025 - Covadis version 18.3b - Windows Onze "Si j'avais du lard je vous ferais une omelette au lard mais j'ai pas d'oeuf..." Coluche
DenisHen Posté(e) le 1 février 2017 Posté(e) le 1 février 2017 Salut David. Et pourquoi ne pas enregistrer ton état de calque (_LAYERSTATE) avant l'isolation de certains calques ? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DaWeeD_Gab Posté(e) le 1 février 2017 Auteur Posté(e) le 1 février 2017 Salut David. Et pourquoi ne pas enregistrer ton état de calque (_LAYERSTATE) avant l'isolation de certains calques ? Salut, oui je fais ça à présent mais j'aimerais éviter cette manip... chaque clic compte ! :D Autocad Map 3D 2025 - Covadis version 18.3b - Windows Onze "Si j'avais du lard je vous ferais une omelette au lard mais j'ai pas d'oeuf..." Coluche
DenisHen Posté(e) le 1 février 2017 Posté(e) le 1 février 2017 chaque clic compte ! :D Entièrement d'accord. Surtout que je n'ai pas trouvé le moyen de placer cette commande (EtatCalque) uniquement en ligne de commande, ou placer l'enregistrement de l'état de calques et le rappel dans deux boutons... Peut-être en LISP... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 1 février 2017 Posté(e) le 1 février 2017 Re David. Je t'ai fais un petit LISP contenant deux commandes :- SauveEtatCalq : qui sauvegardera ton état des calques actifs (dans le fichier "ListCalq.lst" du répertoire de ton DWG). - RecupEtatCalq : qui rétablira l'état des calques actifs sauvegardé dans ce fichier. Tu peux donc placer ces deux commandes dans deux boutons...;;;************************************************ ;;; Sauvegarde des états de calque dans un fichier ;;;************************************************ (defun c:SauveEtatCalq (/ Doc ListCalq lay Chemin Fichier EcritFich) (princ "\nDéveloppé par Denis H.") ;;; Active le début de l'undo (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (setq Chemin (getvar "dwgprefix")) (setq Fichier "ListCalq.lst") (setq EcritFich (open (strcat Chemin Fichier) "w")) (while (setq lay (tblnext "LAYER" (not lay))) (if (and (not (wcmatch (cdr (assoc 2 lay)) "*|*")) (/= (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 2 lay))))) nil ) ;_ Fin de /= ) ;_ Fin de and (write-line (cdr (assoc 2 lay)) EcritFich) ;_ Fin de if ) ;_ Fin de if ) ;_ Fin de while (close EcritFich) (vla-endundomark Doc) (princ) ) ;_ Fin de defun ;;;************************************************ ;;; Sauvegarde des états de calque dans un fichier ;;;************************************************ (defun c:RecupEtatCalq (/ Doc ListCalq lay Chemin Fichier LitFich) (princ "\nDéveloppé par Denis H.") ;;; Active le début de l'undo (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (setq Chemin (getvar "dwgprefix")) (setq Fichier "ListCalq.lst") (setq LitFich (open (strcat Chemin Fichier) "r")) (while (setq Lign (read-line LitFich)) (command-s "-calque" "ac" Lign "") ) ;_ Fin de while (close LitFich) (vla-endundomark Doc) (princ) ) ;_ Fin de defun Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 1 février 2017 Posté(e) le 1 février 2017 Re encore... J'ai modifié mes deux commandes pour qu'elles se débrouillent SANS écrire/lire un fichier. Tout est sauvegardé DANS le DWG... C'est plus rapide... Les voici : ;;;************************************************ ;;; Sauvegarde des états de calque dans un fichier ;;;************************************************ (defun c:SauveEtatCalq (/ Doc ListCalq lay Chemin Fichier EcritFich) (princ "\nDéveloppé par Denis H.") (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (while (setq lay (tblnext "LAYER" (not lay))) (if (and (not (wcmatch (cdr (assoc 2 lay)) "*|*")) (/= (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 2 lay))))) nil ) ;_ Fin de /= ) ;_ Fin de and (setq ListCalq (cons (cdr (assoc 2 lay)) ListCalq)) ) ;_ Fin de if ) ;_ Fin de while (vlax-ldata-put "DenisH" "ListCalqActif" ListCalq) (vla-endundomark Doc) (princ) ) ;_ Fin de defun ;;;************************************************ ;;; Sauvegarde des états de calque dans un fichier ;;;************************************************ (defun c:RecupEtatCalq (/ Doc ListCalq lay Chemin Fichier LitFich) (princ "\nDéveloppé par Denis H.") (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (setq ListCalq (vlax-ldata-get "DenisH" "ListCalqActif")) (setq n 0) (if (/= (nth n ListCalq) "") (while (/= (nth n ListCalq) nil) (command-s "-calque" "ac" (nth n ListCalq) "") (setq n (+ 1 n)) ) ;_ Fin de while ) ;_ Fin de if (vla-endundomark Doc) (princ) ) ;_ Fin de defun ;|«Visual LISP© Format Options» (72 2 40 2 T "Fin de " 100 50 0 0 nil nil nil nil T) ;*** NE PAS AJOUTER de texte au-dessous du commentaire! ***|; Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DaWeeD_Gab Posté(e) le 2 février 2017 Auteur Posté(e) le 2 février 2017 Bonjour Denis,Merci beaucoup pour ton travail !cependant je n'arrive pas à faire fonctionner le lisp :(J'ai enregistré le script en .lsp , chargé, lancé la commande sauveetatcalq,je gele ensuite certains calques mais lorsque je lance recupetatcalq, rien ne se passe...j'ai essayé avec le premier lisp, la liste est bien créée dans le répertoire pourtant ! Autocad Map 3D 2025 - Covadis version 18.3b - Windows Onze "Si j'avais du lard je vous ferais une omelette au lard mais j'ai pas d'oeuf..." Coluche
DenisHen Posté(e) le 2 février 2017 Posté(e) le 2 février 2017 Bonjour David. Non, mon code ne fonctionne que sur l'Activation/InActivation des calques, par sur le Gèle/Dégèle... Je vais chercher comment le modifier... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 2 février 2017 Posté(e) le 2 février 2017 Re. Essai avec ceci :;;;************************************************ ;;; Sauvegarde des états de calque dans un fichier ;;;************************************************ (defun c:SauveEtatCalq (/ Doc ListCalq lay Chemin Fichier EcritFich) (princ "\nDéveloppé par Denis H.") (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (while (setq lay (tblnext "LAYER" (not lay))) (if (and (not (wcmatch (cdr (assoc 2 lay)) "*|*")) (/= (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 2 lay))))) nil ) ;_ Fin de /= ) ;_ Fin de and (setq ListCalq (cons (cdr (assoc 2 lay)) ListCalq)) ) ;_ Fin de if ) ;_ Fin de while (vlax-ldata-put "DenisH" "ListCalqActif" ListCalq) (vla-endundomark Doc) (princ) ) ;_ Fin de defun ;;;************************************************ ;;; Sauvegarde des états de calque dans un fichier ;;;************************************************ (defun c:RecupEtatCalq (/ Doc ListCalq lay Chemin Fichier LitFich) (princ "\nDéveloppé par Denis H.") (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (setq ListCalq (vlax-ldata-get "DenisH" "ListCalqActif")) (setq n 0) (if (/= (nth n ListCalq) "") (while (/= (nth n ListCalq) nil) (command-s "-calque" "l" (nth n ListCalq) "") (setq n (+ 1 n)) ) ;_ Fin de while ) ;_ Fin de if (vla-endundomark Doc) (princ) ) ;_ Fin de defun ;|«Visual LISP© Format Options» (72 2 40 2 T "Fin de " 100 50 0 0 nil nil nil nil T) ;*** NE PAS AJOUTER de texte au-dessous du commentaire! ***|; Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DaWeeD_Gab Posté(e) le 2 février 2017 Auteur Posté(e) le 2 février 2017 hello,et re-merci!ça fonctionne à présent sauf pour un point : lorsque je fais RecupEtatCalq,tous les calques sont dégelés y compris ceux qui étaient gelés lors du SauvEtatCalq !Mes connaissances en LISP étant proche du néant, je ne peux pas y mettre les mains dedans.en tout cas merci encore pour le travail fourni ! :) Autocad Map 3D 2025 - Covadis version 18.3b - Windows Onze "Si j'avais du lard je vous ferais une omelette au lard mais j'ai pas d'oeuf..." Coluche
DenisHen Posté(e) le 2 février 2017 Posté(e) le 2 février 2017 Re. Je vois, je pense que c'est le 70 dans la ligne : (/= (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 2 lay)))))Je vais chercher... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 2 février 2017 Posté(e) le 2 février 2017 En fait, ce n'est pas le 70 qui génait, mais sa valeur. Pour savoir si le calque est actif, sa valeur est nil, sinon, c'est T. Pour son gèle, c'est 0 ou 1... D'où mon erreur. Voici le code corrigé :;;;************************************************ ;;; Sauvegarde des états de calque dans un fichier ;;;************************************************ (defun c:SauveEtatCalq (/ Doc ListCalq lay) (princ "\nDéveloppé par Denis H.") (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (while (setq lay (tblnext "LAYER" (not lay))) (if (and (not (wcmatch (cdr (assoc 2 lay)) "*|*")) (/= (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 2 lay))))) 1) ) ;_ Fin de and (setq ListCalq (cons (cdr (assoc 2 lay)) ListCalq)) ) ;_ Fin de if ) ;_ Fin de while (vlax-ldata-put "DenisH" "ListCalqActif" ListCalq) (vla-endundomark Doc) (princ) ) ;_ Fin de defun ;;;************************************************ ;;; Sauvegarde des états de calque dans un fichier ;;;************************************************ (defun c:RecupEtatCalq (/ Doc ListCalq lay) (princ "\nDéveloppé par Denis H.") (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (setq ListCalq (vlax-ldata-get "DenisH" "ListCalqActif")) (setq n 0) (if (/= (nth n ListCalq) "") (while (/= (nth n ListCalq) nil) (command-s "-calque" "l" (nth n ListCalq) "") (setq n (+ 1 n)) ) ;_ Fin de while ) ;_ Fin de if (vla-endundomark Doc) (princ) ) ;_ Fin de defun Pour inverser le gèle/dégèle des calques, change le 1 en 0 à la fin de cette ligne : (/= (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 2 lay))))) 1)0=sauvegarde des calques libérés1=sauvegarde des calques gelés En espérant t'avoir été utile... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 3 février 2017 Posté(e) le 3 février 2017 Salut. Voilà, j'ai refais mon code pour que soit sauvegardé l'ensemble des calques et leur statu Gelé/Libéré. On peut maintenant en sauvegarder plusieurs avec cette syntaxe à coller dans un bouton (ne pas oublier le point-virgule en fin de phrase) : ^C^C(c:SauveEtatCalq "NomDeLétat"); qu'on récupèrera avec : ^C^C(c:RecupEtatCalq "NomDeLétat");Et voici le code :;;;***********************************************;;; Sauvegarde des états de calque dans le dessin ;;;***********************************************(defun c:SauveEtatCalq (NomEtat / Doc ListCalq lay CalqCour) (princ "\nDéveloppé par Denis H.") (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (setq CalqCour (strcat "ListCalq_" NomEtat "_CalqCour")) (setq NomEtat (strcat "ListCalq_" NomEtat)) (while (setq lay (tblnext "LAYER" (not lay))) (if (and (not (wcmatch (cdr (assoc 2 lay)) "*|*"))) ;_ Fin de and (progn (setq ListCalq (cons (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 2 lay))))) ListCalq)) (setq ListCalq (cons (cdr (assoc 2 lay)) ListCalq)) ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while (vlax-ldata-put "DenisH" NomEtat ListCalq) (vlax-ldata-put "DenisH" CalqCour (getvar "clayer")) (vla-endundomark Doc) (princ)) ;_ Fin de defun;;;*************************************************;;; Récupération des états de calque dans le dessin ;;;*************************************************(defun c:RecupEtatCalq (NomEtat / Doc ListCalq lay CalqCour) (princ "\nDéveloppé par Denis H.") (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (setq CalqCour (strcat "ListCalq_" NomEtat "_CalqCour")) (setq NomEtat (strcat "ListCalq_" NomEtat)) (setq ListCalq (vlax-ldata-get "DenisH" NomEtat)) (setq CalqCour (vlax-ldata-get "DenisH" CalqCour)) (command-s "-calque" "l" CalqCour "") (setvar "clayer" CalqCour) (while (/= (car ListCalq) nil) (if (= (cadr ListCalq) 0) (command-s "-calque" "l" (car ListCalq) "") (command-s "-calque" "g" (car ListCalq) "") ) ;_ Fin de if (setq ListCalq (cddr ListCalq)) ) ;_ Fin de while (vla-endundomark Doc) (princ)) ;_ Fin de defun[/Code]David, tiens moi au courant pour savoir si ce que j'ai fais te convient... PS : j'ai corrigé un petit bug concernant le calque courant. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DaWeeD_Gab Posté(e) le 3 février 2017 Auteur Posté(e) le 3 février 2017 Bonjour Denis,Super ! ça marche très bien, encore un grand merci, et félicitation pour ton boulot !C'est très utile!Il va bien falloir que je me mette au LISP un jour !Bonne journée :) Autocad Map 3D 2025 - Covadis version 18.3b - Windows Onze "Si j'avais du lard je vous ferais une omelette au lard mais j'ai pas d'oeuf..." Coluche
DenisHen Posté(e) le 3 février 2017 Posté(e) le 3 février 2017 Salut David. De rien, content d'avoir aidé... Pour débuter en LISP, il y a l'excellent "Introduction à AutoLisp" de Maître (gile). N'oublis pas le petit [Résolu] dans ton premier message... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 6 février 2017 Posté(e) le 6 février 2017 Salut à tous... J'ai modifié mes deux codes pour qu'ils enregistrent si le calque est ACtif ou INactif et s'il est Gelé ou Libéré... Avec toujour les deux lignes de commandes : Pour sauvegarder l'état des calques :^C^C(c:SauveEtatCalq "NomDeLétat"); qu'on récupèrera avec : ^C^C(c:RecupEtatCalq "NomDeLétat"); Et voici le code :;;;************************************************* ;;; Récupération des états de calque dans le dessin ;;;************************************************* (defun c:RecupEtatCalq (NomEtat / Doc ListCalq lay CalqCour) (princ "\nDéveloppé par Denis H.") (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (setq ListCalq (vlax-ldata-get "DenisH" (strcat "ListCalq_" NomEtat))) (setq CalqCour (vlax-ldata-get "DenisH" (strcat "ListCalq_" NomEtat "_CalqCour"))) (command-s "-calque" "l" CalqCour "AC" CalqCour "") (setvar "clayer" CalqCour) (while (/= (car ListCalq) nil) (if (and (< (caddr ListCalq) 0) (/= (car ListCalq) CalqCour)) (command-s "-calque" "In" (car ListCalq) "") (command-s "-calque" "Ac" (car ListCalq) "") ) ;_ Fin de if (if (and (= (cadr ListCalq) 1) (/= (car ListCalq) CalqCour)) (command-s "-calque" "G" (car ListCalq) "") (command-s "-calque" "L" (car ListCalq) "") ) ;_ Fin de if (setq ListCalq (cdddr ListCalq)) ) ;_ Fin de while (vla-endundomark Doc) (princ) ) ;_ Fin de defun ;;;*********************************************** ;;; Sauvegarde des états de calque dans le dessin ;;;*********************************************** (defun c:SauveEtatCalq (NomEtat / Doc ListCalq lay CalqCour) (princ "\nDéveloppé par Denis H.") (setq Doc (vla-get-activedocument (vlax-get-acad-object))) (setq CalqCour (strcat "ListCalq_" NomEtat "_CalqCour")) (setq NomEtat (strcat "ListCalq_" NomEtat)) (while (setq lay (tblnext "LAYER" (not lay))) (if (and (not (wcmatch (cdr (assoc 2 lay)) "*|*"))) ;_ Fin de and (progn (setq ListCalq (cons (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 2 lay))))) ListCalq)) (setq ListCalq (cons (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 2 lay))))) ListCalq)) (setq ListCalq (cons (cdr (assoc 2 lay)) ListCalq)) ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while (vlax-ldata-put "DenisH" NomEtat ListCalq) (vlax-ldata-put "DenisH" CalqCour (getvar "clayer")) (vla-endundomark Doc) (princ) ) ;_ Fin de defun Si ça peut servir à quelqu'un... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DaWeeD_Gab Posté(e) le 7 février 2017 Auteur Posté(e) le 7 février 2017 Salut Denis,Magnifique ! il ne me reste plus qu'à confectionner deux belles petites icones et le tour est joué !merci encore.David Autocad Map 3D 2025 - Covadis version 18.3b - Windows Onze "Si j'avais du lard je vous ferais une omelette au lard mais j'ai pas d'oeuf..." Coluche
DenisHen Posté(e) le 7 février 2017 Posté(e) le 7 février 2017 Salut David. De rien, content d'avoir aidé... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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