Aller au contenu

Routine Lisp pour géré des calques


ben_f20

Messages recommandés

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)
)

Lien vers le commentaire
Partager sur d’autres sites

il y a 50 minutes, ben_f20 a dit :

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)
)

Bonjour @ben_f20,

Bienvenue sur Cadxp, car il semblerait que ce soit ton premier message, en tant que membre inscrit.

Dans un premier, je ne suis pas sûr que pour débuter en LISP, soit judicieux de passer par Chat GPT. Les maîtres lispeurs pourront te le dire. Pour débuter et comprendre le langage LISP, je pense qu'il faille mieux passer par de la formation classique en commençant par exemple à consulter le site de @didier, DA-CODE, ou voir Introduction à AutoLISP de @(gile), par exemple, ou suivre une formation avec un formateur qui a les compétences  en ce qui concerne le développement  LISP et la programmation.

En ce qui concerne ton besoin de ne pas afficher certains calques dans certaines fenêtres de présentation et que ceux-ci soient toujours visibles dans l'espace objet, il n'y a pas besoin de passer par le LISP. Cette fonction est native à AutoCAD.

Tu ne dois pas désactiver les calques que tu ne souhaites pas voir dans certaines fenêtres de présentation mais tu dois les geler dans les fenêtres dans lesquelles tu ne souhaites pas les voir.

Lorsque tu es dans une fenêtre de présentation, dans la liste des calques, il faut geler les calques que tu ne souhaites pas voir en cliquant sur l'icône, Geler ou libérer dans la fenêtre active.

GELER-DANS-LA-PRES-001.png

Tu peux aussi ouvrir le gestionnaire des propriétés des calques et aller sur la colonne, Gel de la fenêtre.

GELER-DANS-LA-PRES-002.png

Tu peux aussi, sans passer par la liste des calques ou le gestionnaire des propriétés des calques, lancer la commande DELCALQUE OU _LAYFRZ, puis sélectionner les objets sur les calques que tu souhaites geler dans la fenêtre où tu souhaites geler les calques.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Geler les calques via le gestionnaire n'est pas le problème. Je voudrais simplement automatiser cela pour réaliser mes présentations beaucoup plus rapidement, car j'ai énormément de calques de type "ECL", "CFO", etc. (Je précise qu'ils sont nécessaires, donc je ne veux pas tout regrouper dans un seul calque.) L'idée est d'avoir une routine qui crée une présentation avec les calques triés, afin de m'éviter de le faire manuellement.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @ben_f20

j'utilise ChatGPT, qui, j'ai l'impression, est aussi perdu que moi, mais bref.)

Pour ce qui est d'utiliser ChatGPT, personne ne peut guère vous blâmer, car des grands génies du marketing cherchent à vous faire croire qu'ils savent répondre à vos soucis, et quand vous serez assez asservis par ce nouveau maître, ils vous obligeront à payer leurs services, et vous le ferez.
La solution gratuite est d'apprendre par vous-même, je fais partie des humains qui cherchent à diffuser du savoir, pas des chimères (voir ma signature).

Quant à être aussi perdu que vous, il l'est bien plus, car contrairement à ce qu'il revendique, il n'a pas d'intelligence.

Ça, c'était mon coup de gueule, maintenant, je réponds :
Pour faire ce que vous demandez, il n'y a pas besoin de LSP, une simple gestion du clavier et les outils simples que sont vos doigts, on y arrive.

Dans la fenêtre de présentation, se mettre en EO puis
Commande : FCALQUE Entrée G Entrée * Entrée L Entrée CF* Entrée.

Amicalement

Vidéo pour exemple d'utilisation :

Lien pour Vidéo

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Pourquoi ne pas passer par les filtres des propriétés ?

Tu te crées un filtre des propriétés dans lequel tu y mettras tous les calques avec ECL et CFO, par exemple. De ce fait, quand tu iras dans une fenêtre où tu souhaites tous les geler, tu fais un clic droit sur le non du filtre des propriétés --> Fenêtre --> Geler.

L'avantage du filtre des propriétés, est que si tu crées de nouveaux calques avec ECL ou CFO, ils s'ajouteront automatiquement dans le filtre correspondant, contrairement aux filtres de groupes.

Modifié par didier
  • Like 2

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @ben_f20

le temps de monter en compétence

Utilisez ce temps pour vous familiariser avec le clavier et ses raccourcis, quand on maîtrise il n'y a pas photo, rares sont les gens à dire le contraire, mais je sais qu'ils existent.
Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é