# Faire un Lisp sans connaissance, gratuitement et légalement **Category:** [AutoLISP](https://dessein-tech.com/c/developpement-programmation-autolisp-lisp-visuallisp-dao-cao/31) **Created:** 2024-06-25 13:10 UTC **Views:** 1143 **Replies:** 13 **URL:** https://dessein-tech.com/t/faire-un-lisp-sans-connaissance-gratuitement-et-legalement/327 --- ## Post #1 by @loudard60730 Allez sur cette adresse : https://www.perplexity.ai/ dites lui que vous voulez créer un lisp pour autocad, faisant telle chose en n'oubliant pas d'être le plus précis possible exemple : me créer un lisp pour autocad, me mettant tous les points du dessin à la taille 3% par rapport à l'écran avec la commande ddptype sa réponse : https://www.perplexity.ai/search/me-crer-un-Pm3aPZ18T2ubR2V4GkJ1WA --- ## Post #2 by @Patrick Pas possible de voir le résultat avec le lien fourni mais on peut relancer le prompt. Merci, effectivement ces IA sont étonnantes, en gardant à l'esprit que : https://dessein-tech.com/t/les-risques-pour-les-developpeurs-lies-a-lutilisation-de-lia-pour-generer-du-code/321 --- ## Post #3 by @Patrick Par curiosité j'ai demandé à Claude Sonnet 3.5 de générer ce Lisp, voici le résultat : Voici un script LISP pour AutoCAD qui ajuste la taille de tous les points du dessin à 3% de la taille de l'écran en utilisant la commande DDPTYPE : ```lisp (defun C:SetPointSize3Percent () (vl-load-com) (setq acadObj (vlax-get-acad-object)) (setq doc (vla-get-ActiveDocument acadObj)) ; Ouvrir la boîte de dialogue DDPTYPE (command "DDPTYPE") ; Calculer 3% de la hauteur de l'écran (setq screenHeight (getvar "SCREENSIZE")) (setq pointSize (* screenHeight 0.03)) ; Définir la taille du point (setq ptypeObj (vla-get-PdMode doc)) (vla-put-PdSize ptypeObj pointSize) ; Mettre à jour l'affichage (vla-Regen doc acAllViewports) (princ "\nTaille des points définie à 3% de la hauteur de l'écran.") (princ) ) ; Pour exécuter la fonction, tapez SetPointSize3Percent dans la ligne de commande AutoCAD ``` Pour utiliser ce script : 1. Copiez ce code dans un éditeur de texte. 2. Enregistrez-le avec une extension .lsp (par exemple "SetPointSize3Percent.lsp"). 3. Chargez le fichier dans AutoCAD en utilisant la commande APPLOAD. 4. Tapez SetPointSize3Percent dans la ligne de commande AutoCAD pour exécuter la fonction. Ce script fait les choses suivantes : 1. Il ouvre la boîte de dialogue DDPTYPE. 2. Il calcule 3% de la hauteur de l'écran. 3. Il définit la taille des points à cette valeur. 4. Il met à jour l'affichage pour refléter les changements. Notez que ce script utilise l'interface ActiveX d'AutoCAD pour certaines opérations, ce qui le rend compatible avec les versions récentes d'AutoCAD. --- ## Post #4 by @loudard60730 Réponse Voici un script AutoLISP qui met à jour la taille des points dans votre dessin AutoCAD à 3 % par rapport à l'écran en utilisant la commande `DDPTYPE` : lisp ``` (defun c:ResizePoints () (setq screen-width (getvar "SCREENSIZE")) (setq point-size (* 0.03 screen-width)) ; 3% de la largeur de l'écran (command "DDPTYPE" point-size) ; Appliquer la nouvelle taille de point (princ (strcat "\nTaille des points mise à jour à : " (rtos point-size 2 2))) ) (princ "\nTapez 'ResizePoints' pour ajuster la taille des points.") (princ) ``` ## Explication du Code * **`(defun c:ResizePoints ()`** : Définit une nouvelle commande LISP nommée `ResizePoints`. * **`(setq screen-width (getvar "SCREENSIZE"))`** : Récupère la taille de l'écran. * **`(setq point-size (* 0.03 screen-width))`** : Calcule 3 % de la largeur de l'écran pour définir la taille des points. * **`(command "DDPTYPE" point-size)`** : Exécute la commande `DDPTYPE` avec la nouvelle taille de point. * **`(princ (strcat "\nTaille des points mise à jour à : " (rtos point-size 2 2)))`** : Affiche un message confirmant que la taille des points a été mise à jour. ## Utilisation 1. Copiez le code ci-dessus dans un fichier texte et enregistrez-le avec l'extension `.lsp`, par exemple `ResizePoints.lsp`. 2. Dans AutoCAD, utilisez la commande `APPLOAD` pour charger le fichier LISP. 3. Tapez `ResizePoints` dans la ligne de commande pour exécuter le script et ajuster la taille des points. Ce script vous permettra de modifier facilement la taille des points dans votre dessin AutoCAD selon vos besoins. --- ## Post #5 by @loudard60730 J'adore apprendre en lisant les explications :star_struck: --- ## Post #6 by @Patrick Et n'oubliez pas de voter ! https://dessein-tech.com/t/lintelligence-artificielle-et-lautolisp-votre-avis/369 --- ## Post #7 by @serge.camire Bonjour, Je comprends que le sujet est de montrer que l'IA s'immisce tranquillement dans nos vies. Il est cependant important de souligner les limites et dérapages possibles. Ce n'est pas la panacée, même si cela pourra servir de dépanneur. Si l'IA avait été plus renseignée (car elle apprend tous les jours), elle aurait proposé : `(setvar "pdsize" -0.3)` Voir la possibilité d'inscrire des valeurs négatives via PDSIZE ici : [https://help.autodesk.com/view/ACD/2025/ENU/?guid=GUID-826CA91D-704B-400B-B784-7FCC9619AFB9](https://help.autodesk.com/view/ACD/2025/ENU/?guid=GUID-826CA91D-704B-400B-B784-7FCC9619AFB9) --- ## Post #8 by @Patrick Bien vu @serge.camire ! :wink: --- ## Post #9 by @Elian Bonjour à tous, Le LISP est génial surtout si Perplexity fait le boulot. Je lui ai donc demandé de faire ce LISP : "Peux-tu faire un lisp qui ferait cela : Exploser un bloc en supprimant tous les paramètres de mise en forme et d'ajustement, ensuite purger le bloc puis le recréer en lui donnant un nouveau nom" Il m'a proposé une solution mais qui ne fonctionne pas correctement puisque, malgré 5 variantes proposées par Perplexity, la reconstitution du bloc ne fonctionne pas et les éléments restent décompsés. Le derniers script est le suivant : ## Solution recommandée **Essaye ce script, qui force la sélection à chaque étape et demande explicitement le point d’insertion :** lisp ```lisp (defun c:recreerBloc (/ bloc nom nvnom pt ss) (setq bloc (car (entsel "\nSélectionnez le bloc à retraiter : "))) (if (and bloc (eq (cdr (assoc 0 (entget bloc))) "INSERT")) (progn (setq nom (cdr (assoc 2 (entget bloc)))) (command "_explode" bloc) (alert "Merci de sélectionner les objets issus de l'explosion") (setq ss (ssget)) (if ss (progn (setq pt (getpoint "\nCliquez le point d'insertion pour le nouveau bloc : ")) (command "-purge" "b" nom "n") (setq nvnom (getstring T "\nEntrez le nouveau nom du bloc : ")) (command "-block" nvnom pt ss "") (command "-insert" nvnom pt "" "" "") (princ (strcat "\nBloc recréé sous le nom : " nvnom)) ) (princ "\nAucun objet sélectionné après explosion.") ) ) (princ "\nAucun bloc sélectionné ou objet non valide.") ) (princ) ) ``` Bon, à ce stade je ne sais plus ce que je dois lui demander de corriger. Avez-vous une idée ? Merci d'avance / Elian --- ## Post #10 by @Patrick Voici les principales erreurs identifiées dans ce programme AutoLISP (analyse Claude): ## Erreurs critiques **1. Gestion de la sélection après explosion** ```lisp (alert "Merci de sélectionner les objets issus de l'explosion") (setq ss (ssget)) ``` L'alert interrompt le flux et l'utilisateur doit cliquer OK avant de pouvoir sélectionner. Il faut utiliser `princ` à la place : ```lisp (princ "\nMerci de sélectionner les objets issus de l'explosion : ") ``` **2. Problème avec la commande PURGE** ```lisp (command "-purge" "b" nom "n") ``` Cette syntaxe est incorrecte. La bonne syntaxe est : ```lisp (command "_.purge" "_blocks" nom "_no") ``` **3. Erreur dans la commande BLOCK** ```lisp (command "-block" nvnom pt ss "") ``` On ne peut pas passer directement un selection set. Il faut convertir ou utiliser une approche différente : ```lisp (command "_.block" nvnom pt) (command ss "") ``` ## Erreurs mineures **4. Gestion des erreurs incomplète** - Pas de vérification si `pt` est valide - Pas de vérification si `nvnom` est vide - La commande `_explode` peut échouer **5. Redondance dans l'insertion** ```lisp (command "-insert" nvnom pt "" "" "") ``` Les paramètres d'échelle et rotation vides peuvent poser problème selon la configuration AutoCAD. ## Version corrigée suggérée ```lisp (defun c:recreerBloc (/ bloc nom nvnom pt ss) (setq bloc (car (entsel "\nSélectionnez le bloc à retraiter : "))) (if (and bloc (eq (cdr (assoc 0 (entget bloc))) "INSERT")) (progn (setq nom (cdr (assoc 2 (entget bloc)))) (if (command "_explode" bloc) (progn (princ "\nSélectionnez les objets issus de l'explosion : ") (setq ss (ssget)) (if ss (progn (setq pt (getpoint "\nCliquez le point d'insertion : ")) (if pt (progn (setq nvnom (getstring T "\nNouveau nom du bloc : ")) (if (and nvnom (/= nvnom "")) (progn (command "_.purge" "_blocks" nom "_no") (command "_.block" nvnom pt) (command ss "") (command) (command "_.insert" nvnom pt 1 1 0) (princ (strcat "\nBloc recréé : " nvnom)) ) (princ "\nNom de bloc invalide.") ) ) (princ "\nPoint d'insertion non spécifié.") ) ) (princ "\nAucun objet sélectionné.") ) ) (princ "\nErreur lors de l'explosion du bloc.") ) ) (princ "\nSélection invalide.") ) (princ) ) ``` Les corrections principales portent sur la syntaxe des commandes AutoCAD et l'amélioration de la gestion d'erreurs. --- ## Post #11 by @Elian Bonjour Patrick, Merci de votre retour. C'est toujours épatant de ne pas être seul dans les difficultés :smiley:. J'ai chargé le nouveau script mais malheureusement, cela ne fonctionne toujours pas pour ce qui est de la reconstitution du bloc. Quand le LISP est appliqué sur le bloc, il l'explose tout simplement et le laisse en l'état. Je suis sur Autocad LT 2026. Le problème vient-du fait qu'il s'agit de la version LT ? Merci d'avance pour le temps que vous consacré à mon problème. Bonne soirée / Elian --- ## Post #12 by @Patrick Bonjour l'intelligence artificielle peut rendre de grands services surtout pour les programmeurs débutants d'ailleurs, en donnant la structure générale d'un programme et la logique comme c'est le cas ici. Après pour déboguer correctement un programme et s'assurer que tout fonctionne bien il faut quand même avoir des connaissances suffisantes dans le langage et on ne peut pas éviter cette étape. Je ne suis moi-même plus trop dans le coup donc je ne vais pas pouvoir vous aider plus mais peut-être ceux qui passeront par ici le pourront. --- ## Post #13 by @system --- ## Post #14 by @Patrick Bonjour, suite à cette discussion, je signale l'**espace Perplexity pour AutoLISP** que j'ai mis en place, qui vous donnera des réponses plus adaptées: https://dessein-tech.com/t/perplexity-ai-pour-autolisp-est-un-moteur-de-recherche-conversationnel-ia-gratuit/3367 --- **Canonical:** https://dessein-tech.com/t/faire-un-lisp-sans-connaissance-gratuitement-et-legalement/327 **Original content:** https://dessein-tech.com/t/faire-un-lisp-sans-connaissance-gratuitement-et-legalement/327