Last Updated on 15 novembre 2026 by Didier Lourdelle
4. Une seule commande DECALER avec sept distances possibles
Voici un exemple issu de mes développements pédagogiques AutoLISP.
La commande EDPS_DECALER_NIV4 propose sept distances prédéfinies et mémorise la dernière valeur utilisée.
Au premier lancement, AutoCAD affiche :
Commande : EDPS_DECALER_NIV4
Décalage [10/20/30/40/50/65/90] <10> :
L’utilisateur peut sélectionner une distance ou simplement valider pour conserver la valeur par défaut.
S’il choisit 40, la commande DECALER est lancée avec cette distance.
Au lancement suivant, l’invite devient :
Décalage [10/20/30/40/50/65/90] <40> :
La dernière valeur est automatiquement reproposée.
Le code AutoLISP
(defun c:EDPS_DECALER_NIV4 ( / choix )
;; Initialisation de la valeur par défaut.
;; dist reste globale pour mémoriser le dernier choix.
(if (= nil dist)
(setq dist "10")
)
;; Définition des choix autorisés.
(initget "10 20 30 40 50 65 90")
;; Construction de l'invite et lecture du choix.
(setq choix
(getkword
(strcat
"\nDécalage [10/20/30/40/50/65/90] <"
dist
"> : "
)
)
)
;; Mémorisation du choix utilisateur.
(if choix
(setq dist choix)
)
;; Lancement de la commande AutoCAD.
(command "_.OFFSET" dist)
(princ)
)
Cette routine reste volontairement simple et pédagogique.
Elle permet pourtant d’introduire plusieurs notions fondamentales du langage AutoLISP.
5. Ce qu’AutoLISP apporte réellement
Une variable pour mémoriser une valeur
La variable dist conserve la distance sélectionnée entre les appels, dans le contexte AutoLISP courant.
Elle est volontairement absente de la liste des variables locales de la fonction.
Dans une application plus importante, il serait préférable de lui donner un nom spécifique pour limiter les risques de conflit avec d’autres routines.
INITGET pour contrôler la saisie
Avec initget, nous définissons les réponses autorisées avant l’appel à getkword.
Une valeur extérieure à la liste ne sera pas acceptée comme mot-clé valide.
GETKWORD pour proposer des choix
getkword permet de créer une interaction directement dans la ligne de commande AutoCAD.
Pas besoin de développer une boîte de dialogue pour proposer quelques options.
STRCAT pour construire une invite dynamique
Avec strcat, nous construisons un message intégrant la dernière distance utilisée.
L’invite s’adapte automatiquement au contexte.
IF pour adapter le comportement
La structure conditionnelle if permet de mémoriser une nouvelle valeur uniquement lorsqu’un choix a été effectué.
Si l’utilisateur valide directement, la valeur précédente est conservée.
COMMAND pour conserver le fonctionnement natif
Enfin, command lance la commande DECALER avec la distance sélectionnée.
Nous conservons ainsi le fonctionnement habituel d’AutoCAD pour la sélection de l’objet et l’indication du côté.
AutoLISP ne remplace pas ici la commande native. Il enrichit son comportement.
6. Sept macros ou une routine AutoLISP ?
| Critère | Macros | AutoLISP |
|---|---|---|
| Mise au point initiale | Très rapide | Nécessite du code |
| Distances prédéfinies | Sept outils | Une commande |
| Dernière valeur utilisée | Pas de mémorisation dédiée dans cet exemple | Valeur mémorisée |
| Contrôle de saisie | Paramètres fixes | INITGET |
| Conditions | Possibilités limitées | IF, COND |
| Boucles | Peu adaptées aux macros classiques | WHILE, REPEAT, FOREACH |
| Réutilisation | Duplication possible | Fonctions communes |
| Maintenance | Plusieurs macros à vérifier | Logique centralisée |
| Évolutivité | Adaptée aux séquences simples | Adaptée aux comportements complexes |
Il serait cependant trompeur d’affirmer qu’une routine AutoLISP est toujours préférable.
Pour sept distances fixes, les sept macros peuvent rester la solution la plus simple.
Le véritable avantage d’AutoLISP apparaît lorsque nous voulons faire évoluer le fonctionnement sans multiplier les modifications.
