© Gilles Chanteau 1 Introduction à AutoLISP® Programmation d'AutoCAD® © Gilles

© Gilles Chanteau 1 Introduction à AutoLISP® Programmation d'AutoCAD® © Gilles Chanteau 2 Sommaire 1 Généralités 3 1.1 Types d’expressions, types de données 3 1.2 Syntaxe et évaluation (quote type) 3 2 Saisie directe 6 2.1 Opérateurs arithmétiques (+ - * / sqrt rem expt exp log Boole logand logior) 6 2.2 Variables (setq eval set) 7 3 Programmes 9 3.1 Chargement de fichiers (load appload) 9 3.2 Chargement automatique (autoload S::STARTUP) 10 4 Éditeur Visual LISP® 11 4.1 Présentation 11 4.2 Les fenêtres 11 4.3 Mise en forme 12 4.4 Sélection par double clic 13 4.5 Aperçu des fonctions de débogage 13 5 Commandes AutoCAD® (command pause vl-cmdf) 14 6 Définitions de fonctions (defun defun-q) 15 6.1 (defun c:symbole …) vs (defun symbole …) 15 7 Entrées utilisateur (getint getreal getpoint getcorner getangle getorient getdist getstring getkword) 16 7.1 Initialisation (initget) 16 7.2 Boites de dialogue (getfiled acad_coclordlg acad_truecoclordlg) 17 8 Listes et points 18 8.1 Construction des listes (quote list cons) 18 8.2 Accès aux éléments (car cdr last nth vl-position member length) 18 8.3 Manipulation des listes (append reverse subst vl-remove) 19 8.4 Liste d'association et paire pointée (assoc) 19 9 Variables système (getvar setvar) 20 9.1 Variables d'environnement (getenv setenv) 20 10 Fonctions géométriques (distance angle polar inters sin cos atan trans) 21 11 Affichage de texte (prompt princ prin1 print alert textscr graphscr) 22 12 Décisions conditionnelles (if cond) 23 12.1 Comparaison (= /= < > eq equal zerop minusp wcmatch) 23 12.2 Oprérateurs logiques (and or not null) 24 12.3 Type de donnée (atom listp vl-consp numberp) 25 13 Procédures itératives et récursives 26 13.1 Boucle et incrémentation (repeat while 1+ 1-) 26 13.2 Traitement de liste (foreach mapcar lambda apply vl-every vl-some vl-member-if(-not) vl-remove-if(-not) vl-sort) 26 13.3 Fonctions récursives 28 14 Chaînes de caractères et Fichier ASCII 30 14.1 Chaînes de caractères (strcat strlen strcase substr vl-string-* read) 30 14.2 Conversions (itoa atoi rtos atof distof angtos angtof ascii chr vl-string->list vl-list->string float fix cvunit) 30 14.3 Fichiers ASCII (findfile open close read-char read-line write-car write-line) 32 15 Gestion des erreurs (*error* vl-catch-all-…) 33 16 Accès aux objets 35 16.1 Entité unique (entsel nentsel nentselp entlast entnext entdel handent) 35 16.2 Données DXF des objets (entget entmake entmakex entmod entupd) 36 16.3 Jeux de sélection (ssget ssadd ssdel sslength ssmemb ssname ssnamex ssgetfirst sssetfirst) 37 16.4 Filtres de sélection 38 16.5 Tables (tblnext tblsearch tblobjname) 39 16.6 Données étendues et dictionnaires (regapp, xdroom, xdsize, dictnext dictsearch dictadd dictremove dictrename namedobjdict) 40 © Gilles Chanteau 3 1 Généralités Inventé par John McCarthy en 1958 au Massachusetts Institute of Technology, le LISP, acronyme de List Processing est le deuxième plus vieux langage de programmation. Langage de haut niveau, il est généralement classé parmi les langages fonctionnels. Il a été très en vogue dans les années 1970/80 dans les domaines de la recherche et de l'intelligence artificielle. AutoLISP® est un dialecte du LISP spécialement implémenté pour fonctionner avec AutoCAD®. Dans la suite de ce document, il ne sera question que d’AutoLISP®. 1.1 Types d’expressions, types de données Les expressions LISP se partagent entre deux types : liste et atome. Tout ce qui n’est pas une liste est un atome (excepté nil). 1.1.1 Les atomes Les atomes peuvent être des expressions dites autoévaluantes : - les nombres entiers, sans séparateur décimal : 1, -27, 23504 … (compris entre -2147483648 et 2147483647) - les nombres réels, avec séparateur décimal, 1.0, 0.05, 3.375 … - les chaînes, ensembles de caractères contenus entre des guillemets : "a", "Le résultat est : 128.5". ou des expressions évaluables : - les symboles, qui sont des suites de caractères (exceptés parenthèses, guillemets, apostrophes, points et points virgules) non exclusivement constituées de chiffres. Les symboles peuvent être affectés à des fonctions (prédéfinies ou définies par l'utilisateur), ou à des données, dans ce cas, on parle de variables, les données stockées dans les variables peuvent être des expressions LISP et aussi des pointeurs vers des objets spécifiques (jeux de sélection, noms d’entités, descripteurs de fichiers…). Certains symboles sont protégés, outre les fonctions LISP prédéfinies, il s'agit de T et pi. 1.1.2 Les listes La liste est l’expression fondamentale de tous les langages LISP. Une liste commence avec une parenthèse ouvrante et se termine avec une parenthèse fermante, entre ces parenthèses, chaque élément est séparé par une espace. Les éléments constituant les listes sont des expressions LISP de tout type y compris des listes. Ces imbrications multiples expliquent la multiplication des parenthèses caractéristique à ce langage. Un programme LISP est une liste d'expressions qui peuvent être elle mêmes des listes. Ce qui fait dire que LISP est défini récursivement. 1.1.3 Nil nil est une expression atypique en ce sens qu’elle exprime plusieurs concepts. Elle exprime la notion de vide : un symbole auquel aucune valeur n’est affectée est nil, une liste qui ne contient aucun élément est nil aussi. nil sert aussi pour exprimer le résultat Booléen faux (false) opposé à T vrai (true). Malgré que son type soit nil, elle est considérée à la fois comme un atome et comme une liste. 1.2 Syntaxe et évaluation (quote type) Un programme LISP (langage dit « fonctionnel ») est essentiellement constitué d’appels de fonction. Une fonction, en informatique comme en mathématique est un ensemble d’instructions qui retourne un résultat dépendant des arguments (paramètres) qui lui sont passés, les mêmes arguments passés à une fonction retournent toujours le même résultat. Une expression LISP retourne toujours un résultat (fusse-t-il nil), il n’existe pas en LISP d’instruction qui ne retourne rien. Le résultat de l’évaluation d’un appel de fonction est retourné à l’endroit même de cet appel. AutoLISP® fournit de nombreuses fonctions prédéfinies. © Gilles Chanteau 4 La programmation LISP consiste à définir de nouvelles fonctions en utilisant les fonctions préexistantes, qu’elles soient natives ou définies par l’utilisateur. 1.2.1 Évaluation des applications de fonction AutoCAD® intègre un interpréteur qui permet d’évaluer les expressions LISP. L’interpréteur est accessible directement à la ligne de commande. Les expressions de type liste destinées à être évaluées sont appelées des appels de fonction (ou applications de fonction). La Notation dite « préfixe » du LISP en détermine la structure : le premier élément est une fonction (opérateur), les suivants les arguments requis par cette fonction. Suivant les fonctions les arguments peuvent être optionnels et leur nombre variable. (fonction [argument …]) Par exemple 2 + 3 s’écrit en LISP : (+ 2 3) Commande: (+ 2 3) 5 L’évaluation d’une expression LISP commence par le contrôle de l’appariement des parenthèses. Commande: (+ 2 3)) ; erreur: parenthèse fermante supplémentaire en entrée S’il manque une (ou des) parenthèse(s) fermantes, il est demandé à l’utilisateur de corriger : Commande: (+ 2 3 (_> Ceci fait, l’évaluation est faite et son résultat est retourné : Commande: (+ 2 3 (_> ) 5 Ensuite l’interpréteur recherche la définition de la fonction (premier terme de la liste). Si cette définition n’est pas trouvée, un message d’erreur est retourné : Commande: (toto) ; erreur: no function definition: TOTO Si la fonction est définie, la validité de chaque argument (termes suivants) est évaluée, au premier argument incorrect trouvé, un message d’erreur est retourné : Commande: (+ "2" "3") ; erreur: type d'argument incorrect: numberp: "2" Les arguments pouvant être aussi des applications de fonction, celles-ci seront évaluées tour à tour et les résultats retournés à l’endroit même de chaque expression. Par exemple, dans l’expression (sqrt (+ (* 4 4) (* 3 3))), (+ (* 4 4) (* 3 3)) est l’argument de la fonction sqrt, (* 4 4) et (* 3 3) les arguments de la fonction +, 4 et 4 ou 3 et 3 ceux de la fonction *. L’évaluation procède de façon récursive en réduisant chaque appel de fonction à une expression autoévaluante à partir des expressions les plus imbriquées. © Gilles Chanteau 5 Le suivi de l’expression ci-dessus peut être décrit comme suit : Saisie : (* 4 4) Résultat : 16 Saisie : (* 3 3) Résultat : 9 Saisie : (+ 16 9) Résultat : 25 Saisie : (SQRT 25) Résultat : 5.0 Soit : (sqrt (+ (* 4 4) (* 3 3))) => (sqrt (+ 16 (* 3 3))) => (sqrt (+ 16 9)) => (sqrt 25) => 5.0 1.2.2 Données sous forme de listes (quote) AutoLISP® intègre de nombreuses fonctions qui requièrent comme argument une (ou des) liste(s) -voir chapitre 8. Ce type de liste est considéré comme une donnée unique, par exemple, un point se définit comme la liste de ses coordonnées (x y [z]). Ces listes n’étant pas des applications de fonction, il faut empêcher leur évaluation. On utilise pour cela la fonction quote. (quote expression) (quote (1 2 3)) retourne : (1 2 3) (quote (+ 2 3)) retourne : (+ 2 3) Cette fonction, très largement utilisée, s’abrège avec une apostrophe : '(1 2 3) est équivalent à (quote (1 2 3)) 1.2.3 Fonction type La fonction type retourne le type de donnée de l'expression qui lui est passée comme argument. Les uploads/s3/ introduction-a-autolisp.pdf

  • 33
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager