Bonjour Olivier,
Je te remercie pour tes commentaires. Il est effectivement essentiel que le code informatique soit documenté dès sa conception, et non a posteriori. Cette documentation doit obligatoirement être réalisée par la ou les personnes qui ont écrit le code initial, ce sur quoi nous sommes pleinement d’accord.
Cependant, comme tu le sais, la majorité des routines disponibles en ligne, notamment AutoLISP réalisées par des amateurs, sont souvent peu ou pas du tout documentées. J’ai donc pris la liberté de me placer dans la position d’un utilisateur plutôt débutant souhaitant comprendre un minimum le fonctionnement du programme, ainsi que certaines fonctions AutoLISP.
C’est la raison pour laquelle certaines fonctions sont explicitement expliquées dans le code, notamment par l’intermédiaire de la documentation fournie par l’Intelligence Artificielle, qui a été sollicitée pour rédiger des commentaires en se mettant à la place d’un utilisateur débutant, afin de faciliter la compréhension.
Concernant la fonction qui n’est pas définie dans ce code : je précise que je n’ai pas personnellement essayé d’exécuter ce programme. La première raison est que je ne possède plus AutoCAD®. La seconde, c’est que ce code provient d’un fichier d’aide d’Autodesk®, et je suppose qu’il fonctionnait, puisque je l’ai récupéré quelque part, bien que je ne me souvienne plus précisément où. Il est probable qu’il s’agissait d’un extrait parmi plusieurs, et qu’une autre partie du fichier définit la fonction absente dans cet extrait, ce qui expliquerait cette situation.
Enfin, ma demande n’était pas de procéder au débogage du code, ce qui relève d’un travail spécifique généralement effectué avec des outils appropriés. Nous en avons d’ailleurs longuement discuté dans la section consacrée à l’intelligence artificielle et à la programmation sur ce site.
Si on veut déboguer le code il faut le demander dans le prompt et comme suit, un dialogue avec l’IA s’engage (je ne vais pas plus loin, je n’ai aucun moyen de tester et ce n’était pas le but de cet article):
Réponse de l’IA:
Je vois le problème dans votre code AutoLISP ! La fonction number-sequence
n’existe pas en AutoLISP. Cette fonction semble venir d’Emacs Lisp.
Voici les problèmes principaux et la correction :
Problèmes identifiés :
number-sequence
n’existe pas en AutoLISP- La structure des codes DXF pour
LWPOLYLINE
n’est pas correcte - La façon de construire les sommets de la polyligne n’est pas appropriée
Version corrigée :
(defun c:makepoly ( / points pt vertex-list)
(setq points '())
(prompt "\nCliquez des points pour la polyligne (appuyez sur Entrée pour terminer)")
; Collecte des points
(while (setq pt (getpoint "\nPoint suivant : "))
(setq points (append points (list pt)))
)
; Vérification du nombre minimum de points
(if (>= (length points) 3)
(progn
; Construction de la liste des sommets
(setq vertex-list '())
(foreach point points
(setq vertex-list
(append vertex-list
(list (cons 10 (list (car point) (cadr point))))
)
)
)
; Création de la polyligne
(entmakex
(append
(list
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 (length points)) ; Nombre de sommets
(cons 70 1) ; 1 = fermé
)
vertex-list
)
)
(prompt "\nPolyligne fermée créée.")
)
(prompt "\nAu moins 3 points sont nécessaires pour créer une polyligne fermée.")
)
(princ)
)
Principales corrections :
- Suppression de
number-sequence
: Remplacé par une boucleforeach
- Code DXF 90 : Ajout du nombre de sommets (obligatoire pour LWPOLYLINE)
- Structure des sommets : Correction de la façon dont les coordonnées sont assignées
- Simplification : Code plus lisible et plus conforme aux standards AutoLISP
Cette version devrait fonctionner correctement dans AutoCAD® !