Faire un Lisp sans connaissance, gratuitement et légalement

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

1 « J'aime »

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 :

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 :

(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®.

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.

J’adore apprendre en lisant les explications :star_struck:

1 « J'aime »

Et n’oubliez pas de voter !

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

1 « J'aime »

Bien vu @serge.camire ! :wink:

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

(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

Voici les principales erreurs identifiées dans ce programme AutoLISP (analyse Claude):

Erreurs critiques

1. Gestion de la sélection après explosion

(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 :

(princ "\nMerci de sélectionner les objets issus de l'explosion : ")

2. Problème avec la commande PURGE

(command "-purge" "b" nom "n")

Cette syntaxe est incorrecte. La bonne syntaxe est :

(command "_.purge" "_blocks" nom "_no")

3. Erreur dans la commande BLOCK

(command "-block" nvnom pt ss "")

On ne peut pas passer directement un selection set. Il faut convertir ou utiliser une approche différente :

(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

(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

(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.

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

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.