Un langage de programmation qui
vous permet d'automatiser le travail !!!
Leçon no. 4
- Il existe des fonctions qui permettent une interactionentre l'usager et le programme. On les appèle les fonctions GET,parce qu'elles commencent toutes par ces trois lettres. Lorsque le programmerencontre une fonction GET, il arrête l'exécution pour permettreà l'usager de répondre à la question posée.
(SETQ REPONSE (GETXXX "\nQuelle est la réponse?"))
- Chacune des fonctions a une utilité précise:
FONCTION UTILITÉ EXEMPLE GETINT un entier 4 GETREAL un réel 4.0 GETPOINT un point un click à l'écran GETDIST un réel 4'-0" (ou deux points) GETANGLE un angle (en radian) 3.1416 (ou deux points) GETCORNER un point un click à l'écran GETKWORD un mot clé Oui GETSTRING une chaîne de caractères Michel
Exemples:(SETQ age (GETINT "\nQuelle est votre âge? : "))
(SETQ poids (GETREAL "\nCombien pesez-vous? : "))
(SETQ depart (GETPOINT "\nDonnez le pointde départ: "))
(SETQ haut (GETDIST "\nCombien mesurez-vous? : "))
(SETQ nom (GETSTRING "\nQuelle est votre prénom? : "))
Variable Entrée de l'usager Valeur gardée en mémoire age 41 41 poids 71 71.0 depart click 12,14,0 haut 5'-8" 68.0 nom Michel "Michel"
- Au lieu de toujours écrire les fonctions à l'invite commande,nous allons maintenant écrire nos lignes de programmationdans un éditeur de texte (Notepad). Pour vous permettre de bâtirun petit programme autonome, nous allons analyser la fonction DEFUN àl'aide de deux petits exemples.
Dans l'éditeur de texte, vous sauvergardez le fichier avecl'extension .LSP, puis dans AutoCAD, vous devez le charger en mémoire.Nous verrons plusieurs façon de mettre un programme en mémoire,mais pour l'instant, nous taperons l'instruction à l'invite commande.
COMMAND: (LOAD "d:/mondossier/autolisp/etoile.lsp")
La fonction LOAD permet de charger un fichier AutoLISP. On indique,entre guillemets, le nom du fichier (etoile.lsp) précédédu chemin de recherche (d:\\mondossier\\autolisp\\)
Remarquez que j'ai utilisé le / au lieu de \\ ....car le\ est un caractère réservé en LISP.
Exemple 1 - Nouvelle commande AutoCAD
(DEFUN C:ETOILE () (SETVAR "CMDECHO" 0) (SETQ OSN (GETVAR "OSMODE")) (SETVAR "OSMODE" 0) (SETQ PT (GETPOINT "\nDonnele centre de l'étoile")) (SETQ RD (GETDIST "\nRayon? : ")) (SETQ PT1 (POLAR PT 1.5707RD)) (SETQ PT2 (POLAR PT 2.8274RD)) (SETQ PT3 (POLAR PT 4.0841RD)) (SETQ PT4 (POLAR PT 5.3407RD)) (SETQ PT5 (POLAR PT 0.3142RD)) (SETQ PT1A (INTERS PT1 PT3PT2 PT5)) (SETQ PT2A (INTERS PT2 PT4PT1 PT3)) (SETQ PT3A (INTERS PT3 PT5PT2 PT4)) (SETQ PT4A (INTERS PT4 PT1PT3 PT5)) (SETQ PT5A (INTERS PT4 PT1PT2 PT5)) (COMMAND "_PLINE" PT1 PT1APT2 PT2A PT3 PT3A
PT4 PT4A PT5 PT5A "C")(SETVAR "OSMODE" OSN) (PRINC) ) Dans cette exemple, nous avons défini une nouvelle commande"etoile". Donc, au même titre que "_line" ou "_circle", nous pouvonsexécuter la commande "etoile". Remarquez à la premièreligne du programme comment on définit une nouvelle commande. Onécrit C: avant le nom....... C:ETOILE.Mais faites attention !! C: ne signifie pas que votre fichier est dansvotre disque rigide C:, cela veut simplement dire que vous définissezune nouvelle commande AutoCAD.
Exemple 2 - Nouvelle fonction AutoLISP
(DEFUN DER (X)
(/ (* X PI) 180.0)
)(DEFUN C:ETOILE ()
(SETVAR "CMDECHO" 0)
(SETQ OSN (GETVAR "OSMODE"))
(SETVAR "OSMODE" 0)
(SETQ PT (GETPOINT "\nDonnele centre de l'étoile"))
(SETQ RD (GETDIST "\nRayon ?: "))
(SETQ PT1 (POLAR PT (DER90) RD))
(SETQ PT2 (POLAR PT (DER162) RD))
(SETQ PT3 (POLAR PT (DER234) RD))
(SETQ PT4 (POLAR PT (DER306) RD))
(SETQ PT5 (POLAR PT (DER18) RD))
(SETQ PT1A (INTERS PT1 PT3 PT2PT5))
(SETQ PT2A (INTERS PT2 PT4 PT1PT3))
(SETQ PT3A (INTERS PT3 PT5 PT2PT4))
(SETQ PT4A (INTERS PT4 PT1 PT3PT5))
(SETQ PT5A (INTERS PT4 PT1 PT2PT5))
(COMMAND "_PLINE" PT1 PT1A PT2PT2A PT3 PT3A PT4 PT4A PT5 PT5A "C")
(SETVAR "OSMODE" OSN)
(PRINC)
)Dans cette exemple, nous avons défini une nouvelle fonctionAutoLISP qui nous servira à l'intérieur d'un programme. Lafonction DER convertit des Degrés En Radians. Remarquez qu'on nemet pas C:, de cette façon, AutoLISP comprend que nous voulons définirune fonction LISP. Remarquez aussi le X à l'intérieur desparenthèses. C'est pour dire à AutoLISP que cette fonctiondoit avoir un argument.
Si je voudrais créer une fonction qui additionne deux nombres, je pourrais écrire:
(DEFUN PLUS (x y)
Donc dans un programme je pourrais faire: (plus4 5)
(+ x y)
)- Quand on exécute un programme, toutes lescalculs que nous faisons sont gardés en mémoire dans desvariables (ex: PT3). Ces calculs sont importants dans l'exécutiondu programme, mais quand ce dernier est terminé, il est conseilléde vider le contenu des variables pour deux raisons. Cela libèrede la mémoire vive et cela évitera des erreurs d'exécutionéventuelles.
Pour ce faire, nous devons définirdes variables locales. Dans l'exemple 1 et 2, toutes les variablesétaient globales. Nous définissons des variables localesdans la fonction DEFUN, à l'intérieur des parenthèses,comme ceci:
(DEFUN C:ETOILE (/ OSN PT RDPT1 PT2 PT3 PT4 PT5 PT1A PT2A PT3A PT4A PT5A)
......
)