Aller au contenu

Inverser la visibilité des calques


La Lozère

Messages recommandés

Bonjour,

Quelqu'un aurait-il dans sa "valise", une routine permettant d'inverser l'état de visibilité des calques.

Ainsi une routine qui rendrait tous les calques inactif/geler en actif/dégeler et tous les calques actif/dégeler en inactif ou geler.

je sais pas si j'ai été clair.

 

J'ai cherché dans les routines de (gile) et patrick_35 mais je n'ai rien trouvé.

 

Merci.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

Je rajoute le pourquoi de ma demande.

Pour monter un projet, je travail avec un fichier que l'on va appeler "calcul".

Et lorsque je dois envoyer le résultat de mon travail au client, après un "enregistrer sous..." je fais le ménage. Et tous les éléments nécessaire aux calculs (MNT, lignes de constructions, etc...) je les efface. Pour faire cela, j'inverse l'état de visibilité des calques, et je supprime tous ce qui est devenu visible, et je ré-active tous les calques.

 

Pour le calque courant, je rend courant un des calques que je rend visible et donc je peux geler "l'ancien" calque courant.

 

Pour le calque 0, en faisant la manip ci-dessus, il peut être gelé.

Normalement, si j'ai bien travaillé, il ne devrait rien y avoir dessus. Mais bon, rien est moins sur.....

 

Pour les calques verrouillés, si ils sont inactifs/gelés, il faudra les déverrouiller avant de les rendre visible.

 

Merci à vous.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

Un premier jet qui répond au cahier des charges du crabe.

Pour adat-btp, il me semble que la commande LAYDEL devrait faire l'affaire...

 

(defun c:toglay (/ acdoc clay lock name)
 (vl-load-com)
 (setq acdoc (vla-get-Activedocument (vlax-get-acad-object))
       clay (getvar 'clayer)
       )
 (initget "Oui Non")
 (if (/= "Oui"
         (setq lock
                (getkword "\nTraiter les calques verrouillés ? [Oui/Non] : ")
         )
     )
   (setq lock "Non")
 )
 (vlax-for l (vla-get-Layers acdoc)
   (setq name (vla-get-Name l))
   (if (and
         (/= name "0")
         (/= name clay)
         (or (= "Oui" lock) (= (vla-get-Lock l) :vlax-false))
       )
     (if (and (= (vla-get-LayerOn l) :vlax-true)
              (= (vla-get-Freeze l) :vlax-false)
         )
       (vla-put-Freeze l :vlax-true)
       (progn
         (vla-put-Freeze l :vlax-false)
         (vla-put-LayerOn l :vlax-true)
       )
     )
   )
 )
 (vla-regen acdoc acAllViewports)
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Merci (gile), super ton bout de code, il se rapproche énormément de ce que je recherche.

Juste une chose, je vais parler dans mon langage, mais pour moi, il suffirait, de définir courant un des calques qui est normalement geler ou inactif (le 1er dans la liste alphabétique par exemple), et ensuite de lancer le code en l'appliquant sur tous les calques, le calque 0 et l'ancien calque courant, y compris.

 

De plus, (gile), sauf à mal utiliser la commande LAYDEL, mais elle ne fait que supprimer les calques dans leurs ensemble. Et pour l'utiliser, soit, on clic les objets des calques que l'on souhaite supprimer, soit on les sélectionne dans une liste.

Dans le premier cas, il faudrait inverser la visibilité pour sélectionner les calques,

Et dans le deuxième il faudrait connaître leurs noms, et il peut y en avoir plusieurs 10aine.

Donc, pour moi, la commande LAYDEL ne convient pas.

 

Encore merci.

A plus.

 

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Celui_là devrait répondre à ta demande.

 

 

(defun c:toglay (/ acdoc layers clay lock name)
 (vl-load-com)
 (setq acdoc (vla-get-Activedocument (vlax-get-acad-object))
       layers (vla-get-Layers acdoc)
 )
 (vlax-for l layers
   (if (and
         (not clay)
         (or
           (= (vla-get-LayerOn l) :vlax-false)
           (= (vla-get-Freeze l) :vlax-true)
         )
         [surligneur](not (wcmatch (vla-get-Name l) "*|*"))[/surligneur]
       )
     (progn
       (vla-put-Freeze l :vlax-false)
       (vla-put-LayerOn l :vlax-true)
       (setvar 'clayer (setq clay (vla-get-Name l)))
     )
   )
 )
 (if clay
   (progn
     (vlax-for l layers
       (setq name (vla-get-Name l))
       (if (and (= (vla-get-LayerOn l) :vlax-true)
                (= (vla-get-Freeze l) :vlax-false)
           )
         (vl-catch-all-apply 'vla-put-Freeze (list l :vlax-true))
         (progn
           (vla-put-Freeze l :vlax-false)
           (vla-put-LayerOn l :vlax-true)
         )
       )
     )
     (vla-regen acdoc acAllViewports)
   )
   (princ "\nAucun calque gelé ou désactivé.")
 )
 (princ)
) 

 

Avec LAYDEL, tu peux sélectionner plusieurs calques dans la liste. si tes calques de construction avaient un même préfixe, ils seraient très facile à sélectionner et donc de supprimer ces calques et tout ce qu'il y a dessus en une seule fois...

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

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Salut,

Désolé (gile), je n'avais pas vu ta réponse.

Je viens de tester ton prog

et voilà ce qu'il me renvoi:

Commande: toglay

; erreur: paramètre de la variable AutoCAD rejeté: CLAYER "X_CAD_Fond de

plan-ALLEGE|GEOS_INSTALLATIONS-TCMC"

Les X-ref ne poseraient-ils pas un problème?

 

De plus,

J'ai bricolé ton précédent code [surligneur](En jaune)[/surligneur] pour arriver à ce que je voulais. Ce n'est pas très orthodoxe, mais ça marche. En fait, j'utilise ton code pour une permière commande qui en même temps sauvegarde l'état des calques. Et une fois l'opération effectué, je restore l'état des calques via une autre commande. Ceci pour palier le risque de réactiver des calques d'X-ref gelés ou inactifs. Il faut juste que je rajoute la suppression de l'état de calques sauvegardé à la fin de la commande, plus un ou 2 trucs.

 

(defun c: [surligneur]  togon  [/surligneur]  (/ acdoc clay lock name)

 [surligneur]   (command "clayer" "0")
[surligneur](command "-calque" "in" "0" "o" "")[/surligneur]  
 (command "-calque" "A" "E" "toglay" "" "" "")[/surligneur]  

 (vl-load-com)
 (setq	acdoc (vla-get-Activedocument (vlax-get-acad-object))
clay  (getvar 'clayer)
 )
 (initget "Oui Non")
 (if (/= "Oui"
  (setq	lock
	 (getkword
	   "\nTraiter les calques verrouillés ? [Oui/Non] : "
	 )
  )
     )

   (setq lock "Non")
 )
 (vlax-for l (vla-get-Layers acdoc)
   (setq name (vla-get-Name l))
   (if	(and
  (/= name "0")
  (/= name clay)
  (or (= "Oui" lock) (= (vla-get-Lock l) :vlax-false))
)
     (if (and (= (vla-get-LayerOn l) :vlax-true)
       (= (vla-get-Freeze l) :vlax-false)
  )
(vla-put-Freeze l :vlax-true)
(progn
  (vla-put-Freeze l :vlax-false)
  (vla-put-LayerOn l :vlax-true)
)
     )
   )
 )
 (vla-regen acdoc acAllViewports)
 (princ)

)

[surligneur] (defun c:togoff	()
 (command "-calque" "A" "R" "toglay" "" "")[/surligneur] 
)

 

Mais, cela m'intéresserais de voir ce que fais ton dernier prog une fois qu'il fonctionne, car j'avoue que ce que j'ai fait est du bricolage.

Il faudrait que je me penche plus sur la programmation LISP, cela commence à bien m'intéressait.

A plus

 

[Edité le 20/10/2009 par adat-btp]

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

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é