Définir une commande
Avec (defun) on entre dans le vif du sujet on dirait bien ...
car defun est la contraction de define function.
il faut utiliser defun pour créer une fonction dans un programme AutoLISP ou Visual Lisp
c'est à dire :
- un nom de nouvelle commande utilisable dans AutoCAD
- une fonction à l'intérieur d'un programme AutoLISP ou Visual Lisp
(defun nom_fonction ([arguments] [/ variables...]) code_de_programmation)
nom_fonction | un Symbol nommant la fonction. |
Arguments | les noms des arguments attendus par la fonction (il peut n'y avoir qu'un seul argument) |
Variables | le nom de la (ou des) variable(s) locale utilisée(s) par la fonction |
code_de_programmation | une suite d'expressions AutoLisp à évaluer pour que la fonction s'exécute |
- Le slash précédant les noms des variables doit être séparé du premier nom local et du dernier argument, le cas échéant, par au moins une espace.
- Si vous ne déclarez pas d'arguments ou de Symbols locaux (variables locales), vous devrez a minima taper une paire de parenthèses (ouvrante puis fermante) après le nom de fonction.
- Si des arguments ou nom de symboles locaux sont dupliqués AutoLisp ne va traiter que la première occurrence et négligera les suivants en doublons.
À la fin de l'exécution de la fonction la valeur retournée est la dernière expression évaluée.
Notez bien que la parenthèse fermante appairée à celle qui est avant le mot defun se trouvera en toute fin de définition de la fonction, soit après le code de programmation définissant cette dernière.
(defun) définit le nom de la commande principale, il n'est pas obligatoire que le nom du fichier lisp soit le même, il est possible de définir la commande toto dans le fichier "tata.lsp".
defun c:
Le "c:" n'est pas une lettre de lecteur, cela signifie qu'une fois le fichier chargé (load) on pourra lancer le nom de la commande sans la mettre entre parenthèses, comme une commande en AutoCAD natif.
Les lignes de codes après (defun c: peuvent contenir d'autres définitions de commandes par (defun)
les variables : locales ou pas ?
une variable est définie par la fonction (setq) et une valeur lui est affectée
la "portabilité" des variables, locales ou pas, est expliquée dans (setq).
La fonction n'a pas d'argument ni de variable locale :
( defun ma_fonction ( )
code_de_programmation ...
) ; fin du defun ma_fonction
La fonction a deux arguments, x et y :
(defun ma_fonction (x y) code_de_programmation ... ) ; fin du defun ma_fonction
La fonction a deux variables locales a et b :
(defun ma_fonction (/ a b) code_de_programmation ... ) ; fin du defun ma_fonction
La fonction a un argument (x) et une variable locale (temp)
(defun ma_fonction (x / temp) code_de_programmation ... ) ; fin du defun ma_fonction
Il ne faut pas utiliser le nom d'une fonction AutoLisp comme nom de Symbol en argument à (defun).
Cela remplacerait le nom initial de la fonction originale et cette dernière ne serait plus accessible, il s'agit des fonctions détaillées sur ce site mais aussi T (la lettre T qui signifie TRUE, il y a aussi la valeur de pi (le fameux nombre utile aux sages) qui est préenregistrée dans le logiciel avec une flopée de décimales qui permet des calculs ultra-précis.
Voir les explications de atoms-family à ce sujet.
Liste des fonctions de gestions des Symbols :
atom atoms-family boundp not null numberp quote set setq type
vl-symbol-name vl-symbol-value vl-symbolp
7 juillet 2017,
mise à jour le 18 décembre 2017
mise à jour le 22 mars 2019