ben_f20 Posté(e) le 27 septembre Posté(e) le 27 septembre 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) ) Citer
Steven Posté(e) le 27 septembre Posté(e) le 27 septembre 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. Tu peux aussi ouvrir le gestionnaire des propriétés des calques et aller sur la colonne, Gel de la fenêtre. 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. Citer 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.
Fraid Posté(e) le 27 septembre Posté(e) le 27 septembre Bonjour, L'Autolisp est du LSD pour les IA. Et si vous continuez à publier du code pourri, cela ne va pas s'arranger, puisqu' elles vont finir par se prendre elle même en référence. (effet récursif) Citer https://github.com/Fraiddd
ben_f20 Posté(e) le 27 septembre Auteur Posté(e) le 27 septembre 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. Citer
didier Posté(e) le 27 septembre Posté(e) le 27 septembre 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 1 Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
Steven Posté(e) le 27 septembre Posté(e) le 27 septembre (modifié) 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é le 27 septembre par didier 2 Citer 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.
ben_f20 Posté(e) le 27 septembre Auteur Posté(e) le 27 septembre Merci pour vos astuces, @Steven et @didier. Je vais essayer de mettre en place des filtres de propriétés le temps de monter en compétence pour me créer une routine plus poussée et adaptée a mon usage. Citer
didier Posté(e) le 27 septembre Posté(e) le 27 septembre 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 Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
Messages recommandés