Bonjour,
Après quelques jours à essayer d'écrire un script .lsp pour gérer mes calques sans succès, je me tourne vers vous pour obtenir une solution, car je n'y arrive tout simplement pas. (À noter que je débute complètement dans l'écriture de LISP et j'utilise ChatGPT, qui, j'ai l'impression, est aussi perdu que moi, mais bref.)
Avant de vous expliquer ce que ma routine doit faire, je vais poser un peu le décor. Je suis chargé d'études électriques et passe beaucoup de temps a trier mes calques.
Concernant le but de mon script LISP, j'aimerais qu'il me permette d'afficher uniquement les calques de "type éclairage", "type CFO" ou "type CFA". Pour ce faire, j'ai renommé tous mes calques avec lesquels je souhaite interagir de cette manière :
"ID-ECL[le nom de mon bloc]" pour l'éclairage, "ID-CFO[le nom de mon bloc]" pour le CFO, etc... (A noter également que tout les calque qui n'ont pas cette structure de départ ne doit pas être modifier)
Je pense que vous comprenez le principe. Cependant, je n'arrive pas à désactiver les calques uniquement dans ma présentation. À chaque fois que j'exécute le LISP, il désactive les calques dans l'espace objet.
À terme, j'aimerais pouvoir simplement créer une présentation qui se base sur une présentation existante dans mon plan et entrer le nom de ma nouvelle présentation ainsi que le type de calques à afficher. Mais j'en suis encore très loin !
Je vous joins mon code, repris et commenté par ChatGPT.
(defun c:GCALK (/ calque nomCalque)
;; Fonction pour vérifier si un calque commence par une chaîne spécifique
(defun CommencePar (chaine debut)
(eq (strcase (substr chaine 1 (strlen debut))) (strcase debut))
)
;; Parcours de tous les calques dans le dessin
(setq ListeCalques (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))))
;; Boucle pour parcourir tous les calques
(vlax-for calque ListeCalques
(setq nomCalque (vla-get-Name calque))
;; Si le calque commence par "_ID-ECL_", on le laisse actif
;; Sinon, si il commence par "_ID-", mais n'est pas de type ECL, on le désactive
(if (CommencePar nomCalque "_ID-ECL_")
(vla-put-Freeze calque :vlax-false) ;; Garde les calques ECL actifs
(if (and (CommencePar nomCalque "_ID-")
(not (CommencePar nomCalque "_ID-ECL_")))
(vla-put-Freeze calque :vlax-true) ;; Désactive les autres types de calques
)
)
)
(princ "\nTous les calques non ECL ont été désactivés.\n")
(princ)
)