Vous êtes sur la page 1sur 46

Universit Joseph FOURIER

UFR de Mcanique
Gnie Civil et Infrastructures

M2 GCI

AutoCAD 2008
programmation AutoLISP

D. RICOTIER

Septembre 2008

AutoCAD 2008 Programmation AutoLISP

M2 GCI

SOMMAIRE
1. GNRALITS ........................................................................................................................................................... 3
1.1. QUEST CE QUAUTOLISP ? ..................................................................................................................................... 3
1.2. MODES DUTILISATION DAUTOLISP ....................................................................................................................... 3
1.3. MAJUSCULES OU MINUSCULES ?............................................................................................................................... 3
1.4. COMMENT ECRIRE UN PROGRAMME LISP ? .............................................................................................................. 3
1.5. COMMENT LANCER UN PROGRAMME AUTOLISP ? ................................................................................................... 3
1.6. EXEMPLE DE PROGRAMME AUTOLISP ..................................................................................................................... 4
1.6.1. Objectif............................................................................................................................................................. 4
1.6.2. Contenu du programme : ................................................................................................................................. 4
1.6.3. Remarques et commentaires ............................................................................................................................ 4
1.7. TRANSFORMER UN PROGRAMME EN UNE FONCTION ................................................................................................. 5
1.7.1. Comment utiliser une fonction AutoLISP ? ...................................................................................................... 6
1.7.2. Diffrence entre une fonction et un programme .............................................................................................. 6
1.7.3. Transformer une fonction en une commande ................................................................................................... 7
1.7.4. Comment exploiter une commande AutoCAD personnelle .............................................................................. 7
1.7.5. Un catalogue des principales fonctions AutoLISP ........................................................................................... 7
1.7.6. Les diffrentes types de donnes dans AutoLISP ............................................................................................. 7
1.7.7. Laffectation dune valeur a une variable ........................................................................................................ 7
1.7.8. Le calcul numrique ......................................................................................................................................... 8
2. LES ENTREES ............................................................................................................................................................. 9
2.1. ENTREES DE DONNEES .............................................................................................................................................. 9
2.2. LA PROTECTION DES ENTREES ................................................................................................................................ 10
3. TRAITEMENT DES VARIABLES ET COMMANDES AUTOCAD ................................................................... 11
3.1. AFFECTATION DUNE VARIABLE ............................................................................................................................. 11
3.2. APPEL DES COMMANDES AUTOCAD ...................................................................................................................... 11
3.3. DEFINIR UNE FONCTION .......................................................................................................................................... 11
3.4. DEFINIR UNE NOUVELLE COMMANDE AUTOCAD................................................................................................... 11
3.5. CHARGER COMMANDES ET FONCTIONS .................................................................................................................. 11
4. TRAITEMENT DES CHAINES DE CARACTERES ............................................................................................ 11
4.1. CONCATENATION ................................................................................................................................................... 11
4.2. TRANSFORMATION EN MAJUSCULES OU MINUSCULES ............................................................................................ 11
4.3. TRANSFORMATION D'UNE CHAINE EN UN REEL ....................................................................................................... 12
4.4. TRANSFORMATION DUNE CHAINE EN UN ENTIER ..................................................................................................... 12
4.5. LONGUEUR D'UNE CHAINE ...................................................................................................................................... 12
4.6. SOUS-CHAINE ......................................................................................................................................................... 12
5. LE TRAITEMENT DES LISTES ............................................................................................................................. 12
5.1. COMPOSER UNE LISTE............................................................................................................................................. 12
5.2. AJOUTER UN ATOME A UNE LISTE ........................................................................................................................... 12
5.3. LONGUEUR D'UNE LISTE ......................................................................................................................................... 13
5.4. SOMMER DEUX LISTES ............................................................................................................................................ 13
5.5. RENVERSER UNE LISTE ........................................................................................................................................... 13
5.6. EXTRAIRE DES ATOMES DUNE LISTE ...................................................................................................................... 13
5.6.1. Fonction car ................................................................................................................................................... 13
5.6.2. Fonction cdr ................................................................................................................................................... 13
5.6.3. Concatnation car et cdr ................................................................................................................................ 13
5.7. LE DERNIER ATOME DUNE LISTE............................................................................................................................ 13
6. CONDITION, BOUCLE, TEST ................................................................................................................................ 14
6.1. LA CONDITION SI ................................................................................................................................................... 14
6.2. LES DIFFERENTS TESTS POSSIBLES .......................................................................................................................... 14
6.3. LA CONDITION GENERALE ...................................................................................................................................... 15
6.4. LA BOUCLE ............................................................................................................................................................. 15
7. QUELQUES FONCTIONS SPECIFIQUES DU DESSIN: ..................................................................................... 16

M2 GCI

AutoCAD 2008 Programmation AutoLISP

7.1. BASCULER D'UN ECRAN SUR L'AUTRE ..................................................................................................................... 16


7.2. LE MODE POLAIRE .................................................................................................................................................. 16
7.3. POINT D'INTERSECTION DE DEUX DROITES .............................................................................................................. 16
7.4. DISTANCE ENTRE DEUX POINTS: ............................................................................................................................. 16
7.5. ANGLE DEFINI PAR DEUX POINTS : .......................................................................................................................... 16
7.6. ACCROCHAGE A LA GEOMETRIE DES OBJETS EXISTANTS: ....................................................................................... 16
8. EDITEUR VISUAL LISP .......................................................................................................................................... 16
8.1. PRESENTATION ....................................................................................................................................................... 16
8.2. BOUTONS UTILES .................................................................................................................................................... 17
9. EXEMPLES ................................................................................................................................................................ 18
9.1. TROU OBLONG ........................................................................................................................................................ 18
9.1.1. Objectif........................................................................................................................................................... 18
9.1.2. Programme .................................................................................................................................................... 18
9.1.3. Rsultat .......................................................................................................................................................... 18
9.2. SURFACE ................................................................................................................................................................ 18
9.2.1. Objectif........................................................................................................................................................... 18
9.2.2. Programme .................................................................................................................................................... 18
9.2.3. Rsultat .......................................................................................................................................................... 18
9.3. TREMIE................................................................................................................................................................... 19
9.3.1. Objectif........................................................................................................................................................... 19
9.3.2. Programme .................................................................................................................................................... 19
9.3.3. Rsultat .......................................................................................................................................................... 19
9.4. TIRANT DANCRAGE ............................................................................................................................................... 20
9.4.1. Objectif........................................................................................................................................................... 20
9.4.2. Programme .................................................................................................................................................... 20
9.4.3. Rsultat .......................................................................................................................................................... 21
9.5. TRANSFERT DE POINTS DEPUIS AUTOCAD VERS UN FICHIER TXT .......................................................................... 22
9.5.1. Objectif........................................................................................................................................................... 22
9.5.2. Programme .................................................................................................................................................... 22
9.5.3. Rsultat .......................................................................................................................................................... 22
9.6. TRANSFERT DE POINTS DEPUIS UN FICHIER TXT VERS AUTOCAD .......................................................................... 23
9.6.1. Objectif........................................................................................................................................................... 23
9.6.2. Programme .................................................................................................................................................... 23
9.6.3. Rsultat .......................................................................................................................................................... 23
9.7. TRCE DUNE SECTION IPE SOUS AUTOCAD ........................................................................................................... 24
9.7.1. Objectif........................................................................................................................................................... 24
9.7.2. Programme .................................................................................................................................................... 24
9.7.3. Structure de ipe.txt ......................................................................................................................................... 25
9.8. EXTRAIRE LES SOMMETS DUNE POLYLIGNE DANS UN FICHIER TEXTE .................................................................... 26
9.8.1. Objectif........................................................................................................................................................... 26
9.8.2. Programme .................................................................................................................................................... 26
9.8.3. Rsultat .......................................................................................................................................................... 26
9.9. PROFIL TELESIEGE .................................................................................................................................................. 27
9.9.1. Objectif........................................................................................................................................................... 27
9.9.2. Informations relatives au programme ............................................................................................................ 27
9.9.3. Calage des origines ........................................................................................................................................ 28
9.9.4. Remplissage manuel du tableau ..................................................................................................................... 28
9.9.5. Remplissage automatique............................................................................................................................... 29
9.9.6. Exportation vers un fichier texte .................................................................................................................... 29

AutoCAD 2008 Programmation AutoLISP

M2 GCI

1. GNRALITS
1.1. Quest ce quAutoLISP ?
AutoLISP est un langage de programmation associ AutoCAD. Il permet la ralisation de fonctions
personnelles et macro-commandes.

1.2. Modes dutilisation dAutoLISP


AutoLISP sutilise :
en mode programme,
en mode direct, conversationnel, ligne par ligne depuis la ligne de commande AutoCAD pour
raliser des calculs numriques, ou stocker des valeurs dans des variables.
Exemple :
Commande: (setq A(+ 12))
12
Permet de stocker 12 dans la variable de nom A.
Pour exploiter la valeur de A :
Commande: dc
DECALER
Paramtres courants: Effacer source=Non Calque=Source OFFSETGAPTYPE=0
Spcifiez la distance de dcalage ou [Par/Effacer/Calque] <1.0000>: !A
12
Slectionnez l'objet dcaler ou [Quitter/annUler] <Quitter>:
Spcifiez un point sur le ct dcaler ou [Quitter/Multiple/annUler]
<Quitter>:
Slectionnez l'objet dcaler ou [Quitter/annUler] <Quitter>:
Commande :
La rponse !A donne un dcalage de 12.

1.3. Majuscules ou minuscules ?


Avec le systme dexploitation Windows, pas de prcaution particulire prendre entre majuscules et
minuscules. Les noms a et A sentent la mme variable

1.4. Comment crire un programme LISP ?


Un programme AutoLISP est un fichier dextension .lsp qui scrit avec un diteur de texte (notepad par
exemple).
Exemples :

Toto.lsp
Ferraillage.lsp
Acad.lsp

1.5. Comment lancer un programme AutoLISP ?


Un programme AutoLISP se lance dans la ligne de commande :
Commande: (load "mvsetup")
Le programme sexcute ligne par ligne.

M2 GCI

AutoCAD 2008 Programmation AutoLISP

1.6. Exemple de programme AutoLISP


1.6.1. Objectif
Tracer un cercle de centre donn et daire donne.
AutoCAD ne possde pas de commande pour tracer un tel cercle.
Le nom du fichier texte qui contient le programme : ca.lsp
1.6.2. Contenu du programme :
; Ce programme trace un cercle d'aire donne et de centre donn
;--------------------entre des donnes----------------------(setq A (getreal "\nAire du cercle:"))
(setq P (getpoint "\nCentre du cercle:"))
;---------------------Calcul du rayon------------------------(setq R (sqrt (/ A pi)))
;---------------------Trac du cercle------------------------(command "cercle" P R)
1.6.3. Remarques et commentaires
Une ligne qui commence par un point-virgule est une ligne de commentaires. Cette ligne nest pas excute
par linterprteur AutoLISP. Elle est utile pour le programmeur.
Exemple :

;--------------------entre des donnes-----------------------

La premire ligne excutable est :

(setq A (getreal "\nAire du cercle:"))


Une zone excutable de programme AutoLISP contient autant de parenthses ouvrantes que de parenthses
fermantes. Cette syntaxe est incontournable. Globalement, dans un programme AutoLISP on compte autant
de parenthses droites que de parenthses gauches.
setq est un mot rserv qui veut dire affectation.
A est le nom de la variable qui contiendra l'aire du cercle.
getreal est un mot rserv qui donne la main l'utilisateur pour que ce dernier entre au clavier un nombre
rel reprsentant l'aire du cercle.
Aire du cercle: est le message qui sera lu par l'utilisateur dans la zone texte lorsque le systme attendra la
valeur de A, aire du cercle. Ce message est entre guillemets (syntaxe oblige) et compltement associ la
fonction "getreal".
\n : le message commence par \n, le signe "\" est un code qui annonce que le caractre suivant est un
caractre de contrle, en l'occurrence le caractre de contrle "n" affiche le message "Aire du cercle:" au
dbut d'une nouvelle ligne de la zone texte.
La zone du message: "Aire du cercle:" est destine lutilisateur du programme, le message doit tre le
moins ambigu possible.

La seconde ligne excutable est :

(setq P (getpoint "\nCentre du cercle:"))


Mmes remarques pour les parenthses. "P" est un nom de variable, "p" tait trs bien aussi. "getpoint"
donne la main pour une entre de point au clavier.
4

AutoCAD 2008 Programmation AutoLISP

M2 GCI

"\nCentre du cercle:" est le message sans ambigut, destin l'utilisateur du programme et inscrit au dbut
d'une nouvelle ligne de la zone texte.
Une entre de donne se fait avec une fonction laquelle est associe un message pour l'utilisateur et qui la
forme (get."\nMessage pour lutilisateur ").

La troisime ligne excutable est :

(setq R (sqrt (/ A pi)))


Exemple A=12.312 Le systme connat pi.
sqrt est le nom rserv pour la fonction racine carre.
Attention la position de tous les espaces: (/A pi) n'est pas reconnu. (/ Api) non plus.
L'interprteur AutoLISP excute le niveau de parenthses le
plus profond : ici (/ A pi).
Rsultat 7.636.
Notez la syntaxe du calcul numrique : (Opration oprant operateur)
La valeur est transmise au niveau de parenthses suivant (sqrt 7.636) rsultat 2.763... qui est transmis au
niveau suprieur (setq R 2.763). La valeur 2.763 est verse dans la variable R.
Une zone excutable AutoLISP s'image avec un oignon ou avec des poupes russes.

La quatrime ligne excutable est :

(Command "cercle" P R)
Command est la fonction d'appel des commandes AutoCAD. La commande AutoCAD appele est entre
guillemets. Ici "cercle" suivent les valeurs des paramtres de la commande :
P le centre d'abord, R le rayon ensuite.
Ecrire un programme AutoLISP suppose une connaissance approfondie des commandes AutoCAD et de
leur syntaxe.
Comment lancer ce programme qui a pour nom CA.LSP :
(load "CA")
ou (load "ca") aprs l'excution du programme les valeurs des variables sont en mmoire.
Commande: !a
12.0
Commande: !p
(280.185 92.2209 0.0)
Commande: !r
1.95441
Le point P est une LISTE de trois rels (x y z). Une liste est un ensemble d'atomes et/ou de listes (12
13.654.020.256) est une liste de 4 atomes.
("Matre" A ("sur" "un" "arbre") 15.36987) est aussi une liste.

1.7. Transformer un programme en une fonction


;Ce programme trace un cercle d'aire donne et de centre donn
;--------------------entre des donnes----------------------(defun CERCAIRE (/ A P R)
(setq A (getreal "\nAire du cercle:"))
5

M2 GCI

AutoCAD 2008 Programmation AutoLISP

(setq P (getpoint "\nCentre du cercle:"))


;---------------------Calcul du rayon------------------------(setq R (sqrt (/ A pi)))
;---------------------Trac du cercle------------------------(command "cercle" P R)
) ; fin de defun CERCAIRE
Avec un diteur de texte, deux lignes s'ajoutent au programme pour fabriquer une fonction.
La premire ligne ajoute: (defun CERCAIRE (/ A P R).
On remarque un dsquilibre des parenthses d'o la prsence de la dernire ligne.
defun est un mot rserv pour dclarer une nouvelle fonction, CERCAIRE est le nom de la fonction.
Attention ne pas choisir comme nom un mot rserv. Suivent les variables de la fonction qui s'crivent :
(variables externes / variables internes)
Les variables internes sont dclares l'intrieur de la fonction avec (setq ....
Les variables externes sont fournies en paramtres la fonction.
Exemple :
Fonction qui transforme un angle de degrs en radians.
(defun DER (A /)
(* pi (1 A 180.0))
)
Pour la fonction CERCAIRE pas de paramtre mais A P R sont variables internes.
Pour la fonction DER pas de variable interne mais un paramtre : A
Dclarer des variables internes permet au systme de ne pas encombrer inutilement la mmoire.
La deuxime ligne ajoute :
) ; fin de defun CERCAIRE
permet de clore la fonction et de rtablir l'quilibre du jeu des parenthses.
" ; fin de defun CERCAIRE" est un commentaire destin au programmeur.
Un commentaire peut donc se placer en fin de ligne.
1.7.1. Comment utiliser une fonction AutoLISP ?
D'abord charger le programme :
Commande : (load "CA")
CERCAIRE
La fonction est maintenant disponible, et pour chaque utilisation de la fonction, saisir :
Commande : (CERCAIRE)
Le gain ne parait pas extrme entre fonction et programme.
1.7.2. Diffrence entre une fonction et un programme
Une fonction peut tre lance depuis le clavier, mais aussi appele dans un autre programme :
La mmoire n'est pas encombre :
Commande : !A
Nil

AutoCAD 2008 Programmation AutoLISP

M2 GCI

nil est quivalent nul, rien, vide, faux.


l'oppos de nil est T (comme true), vrai
1.7.3. Transformer une fonction en une commande
; Ce programme trace un cercle d'aire donne
; et de centre donn.
(defun C:CAIRE (/ A P R)
; --------entres des donnes---------(setq A (getreal "\nAire du cercle:"))
(setq P (getpoint "\nCentre du cercle:"))
; --------calcul du rayon-------------(setq R (sqrt (1 A pi)))
;--------trac du cercle-------------(command "cercle" P R)
);fin de defun c:CAIRE
La seule modification est l'ajout de C: immdiatement et sans espace devant le nom de la fonction (qui a t
raccourci pour des raisons de frappe au clavier).
Le programme CA.LSP est le programme d'une nouvelle commande AutoCAD.
1.7.4. Comment exploiter une commande AutoCAD personnelle
On charge d'abord le programme AutoLISP par
Commande : (load "CA")
C:CAIRE
Puis, pour chaque utilisation de la nouvelle commande, appel de cette commande :
Commande: CAIRE
Au mme titre que n'importe quelle commande AutoCAD, la commande est relance avec un retour chariot.
1.7.5. Un catalogue des principales fonctions AutoLISP
Pour une vision exhaustive d'AutoLISP, il est fortement recommand de lire avec attention la liste des
commandes AutoLISP.
1.7.6. Les diffrentes types de donnes dans AutoLISP
AutoLISP manipule

des entiers : 2 15 0 8974 etc ...


des rels : 2.15 -58.6587 0.259 (0.259 est plus convenable que .259)
des chaines de caractres : "paul" "Nom et Prnom" etc ...
des listes
des fichiers

1.7.7. Laffectation dune valeur a une variable


(setq A 35.65 B 14 C "pierre")
(setq A 35.65
B 14
C "pierre"
7

M2 GCI

AutoCAD 2008 Programmation AutoLISP

)
(setq A 35.65)
(setq B 14)
(setq C "pierre")
Les prcdentes faons d'affecter les valeurs aux variables A, B, C sont toutes les trois convenables.
1.7.8. Le calcul numrique
a) Laddition
(setq A (+ 1225.3 8.65 -5.21))
Rsultat : A = 40.74
b) La soustraction
(setq B (- 987.65458.3 95.25))
Rsultat : B = 434.10
c) La multiplication
(setq C (* 0.25 56.32 -4.25))
Rsultat : C = -59.84
d) La division
(setq D (/128 5))
Rsultat : D = 25 (attention, c'est la division entire)
(setq D (/128 5.0))
Rsultat : D = 25.60
e) Expression algbrique
(setq E (/ (* pi 6.59) (- 78.6 (* 0.25 (+ 36.12 57.34))))) est une expression
algbrique valable.
Rsultat : E = 0.374818
On peut bien sur entrer dans des expressions algbriques des variables dj affectes :
(setq F (* E (/ 227.15)))
Rsultat : F = 1.15329
f) Calcul trigonomtrique
Les angles sont entrs en radians
(setq G (cos (/ pi 6)))
Resultat : G = 0.866025
(setq H (sin (/ (* 3 pi) 2)))
Rsultat : H = -1.0
(setq J (atan 1.0))
Rsultat : J = 0.785398
g) Racine carre
(setq K (sqrt 2))
Rsultat: K = 1.41421
h) Elvation une puissance
(setq L (expt 2 10))
Rsultat: L = 1024

AutoCAD 2008 Programmation AutoLISP

M2 GCI

i) Valeur absolue
(setq M (abs (cos pi))
Rsultat : M = 1.0
j) Conversions
Transformer un rel en entier :
(setq N (fix 12.89))
Rsultat : N = 12
C'est prendre la partie entire
Transformer un entier en rel :
(setq P (float 15))
Rsultat : P = 15.0
Transformer un entier en une chaine de caractres :
(setq Q (itoa 12))
Rsultat : Q = "12"
Transformer un rel en une chaine de caractres :
(setq R (rtos 12.56987 2 3))
Rsultat : R = "12.569"
Le 2 indique le mode d'criture dcimal.
Le 3 indique le nombre de dcimales.
k) Autres
(max, (log, (min, etc.

2. Les entres
2.1. Entres de donnes
La structure gnrale d'une fonction d'entre de donne est :
(get. ... "\nMessage destin l'utilisateur du programme : ")
Entre dun entier :
(setq A (getint "\nAge du capitaine : "))
25.5 est une entre non valable. Message AutoCAD : Ncessite une valeur entire.
Entre dun rel :
(setq B (getreal "\nCot de l'appareil : "))
"Cher" est une entre non valable. Message AutoCAD : Ncessite une valeur numrique.
Entre dun point :
(setq P1 (getpoint "\nPremier point : "))
Le point est entr au clavier ou la souris.
(setq P2 (getpoint P1 "\nSecond point : "))
Le systme attache en P1 en attendant P2 un curseur lastique.
Le point entr est une liste de trois rels.
Exemple : P = (12.56 58.96 0.00)
Entre dun mot :
(setq C (getstring "\nNom du candidat : "))
Si un espace figure dans la chaine, il est validant.
Exemple : C = "Nicolas"
9

M2 GCI

AutoCAD 2008 Programmation AutoLISP

Entre dune chaine de caractres :


(setq C (getstring T "\nNom du candidat : "))
T comme TRUE (vrai)
Lespace nest pas validant.
Exemple : C = "Nicolas Sarkozy"
Entre dune distance :
(setq D (getdist "\nLongueur du segment : "))
L'entre au clavier demande un rel.
L'entre la souris demande deux points.
(setq D (getdist P1 "\nJusqu'o ? "))
Un curseur lastique est attach P1 en attendant le second point.
Entre dun angle :
(setq A (getangle "\nValeur de l'angle : "))
L'entre au clavier est un rel.
L'entre la souris demande deux points. L'angle est exprim en radians par rapport l'axe X du SCU.
(setq A (getangle P1 "\nSecond point de la direction : "))
Un curseur lastique est attach P1 en attendant le second point.

2.2. La protection des entres


Une protection d'entre s'annonce avant une entre et n'est valable qu'une fois.
Forme gnrale :
(initget <code> <chaine>)
le code est un entier somme de puissances de 2 :
1 refuse une entre nulle (un retour chariot sans valeur)
2 refuse une valeur 0 (zro)
4 refuse une valeur ngative
Exemple :
(initget 7)
(setq A (getreal "\nEntrer un nombre positif : "))
7=1+2+4
AutoLISP refusera :
un retour chariot (obligation d'entrer une valeur)
une valeur ngative
une valeur nulle
Message AutoCAD : La valeur doit tre positive et non nulle ou Entrer un nombre positif.
La chaine est une suite de mots clefs valables pour une entre.
Exemple :
(initget 1 "Oui Non")
(setq X (getint "\nLimprimante est-elle branche 0/N : "))
AutoLISP refusera :
un retour chariot (obligation d'entrer une valeur)
10

AutoCAD 2008 Programmation AutoLISP

M2 GCI

toute rponse autre que o, oui, n, non

Message AutoCAD : Ncessite une valeur entire ou une option.


La partie majuscule du mot clef est une clef. Ici o du oui et n du non

3. Traitement des variables et commandes AutoCAD


3.1. Affectation dune variable
Affectation de la valeur d'une variable AutoCAD une variable AutoLISP :
(setq A (getvar "dimscale"))
A prend la valeur de la variable "dimlfac"
Attention les variables peuvent ne pas avoir le mme nom en AutoLISP et en AutoCAD.
Affectation d'une valeur une variable AutoCAD :
(setvar "dimscale" 0.5)

3.2. Appel des commandes AutoCAD


(command "ligne" "0,0" "@210,0" "@0,297" "@-210,0" "c")
C'est le trac d'un rectangle au format A4.

3.3. Dfinir une fonction


(defun <nom de la fonction> (<paramtres> / <variables internes>)
(<corps de la fonction>)
) ; fin de fonction
Voir le premier exemple.

3.4. Dfinir une nouvelle commande AutoCAD


(defun c:<nom de la commande> (/ <variables internes>)
(<corps de la commande>)
) ; fin de commande
Dans une commande, il ny a jamais de paramtres externes.

3.5. Charger commandes et fonctions


Comment charger commandes et fonctions de manire automatique ?
Lorsque les commandes et les fonctions personnelles sont regroupes dans un fichier qui a pour nom: ACAD
.lsp, ce fichier est "load" automatiquement au chargement d'AutoCAD. Toutes les applications un peu
structures possdent un fichier ACAD.lsp.
Sinon, et cest le cas courant, il faut charger une application par APPLOAD.

4. Traitement des chaines de caractres


4.1. Concatnation
C'est la somme de chaines de caractres :
(setq A "et" B "dessert" C "fromage")
(setq BON_REPAS (strcat C " " A " " B))
La variable BON_ REPAS est gale "fromage et dessert".

4.2. Transformation en majuscules ou minuscules


(setq A (strcase "dEUx-Pi"))
11

M2 GCI

AutoCAD 2008 Programmation AutoLISP

La variable A est gale "DEUX-PI"


(setq A (strcase "dEUx-Pi" T))
La variable A est gale "deux-pi"

4.3. Transformation d'une chaine en un rel


(setq A (atof "12.56"))
Rsultat : A = 12.56

4.4. transformation dune chaine en un entier


(setq A (atoi "12"))
Rsultat : A = 12
Si vous essayez (atoi 12) parce que vous confondez avec (itoa 12)
Rsultat : ; erreur: type d'argument incorrect: stringp 12

4.5. Longueur d'une chaine


(setq a (strlen "mon beau sapin"))
Rsultat : A = 14
Les espaces sont compts comme un caractre.

4.6. Sous-chaine
Forme gnrale :
(substr <chaine> <dbut> <longueur>)
(setq A (substr "maitre corbeau" 1 6))
Rsultat : A = "maitre"
(setq A (substr "maitre corbeau" 11))
Rsultat : A = "beau"
Lorsque la longueur n'est pas donne, c'est jusqu'au bout.

5. Le traitement des listes


Une liste est un ensemble d'atomes et/ou de listes. Peu de langage de programmation traitent des listes
htrognes d'o la puissance d'AutoLISP. Une ligne de programme AutoLISP a une structure de liste. Ne
pas confondre liste et atome.
(12) n'est pas gal 12.
La liste qui contient l'atome 12 n'est pas l'atome 12. Cest diffrent. Lorsque vous pensez liste, pensez
contenant, sac.

5.1. Composer une liste


(setq L (list 12 5.65 "pierre"))
Rsultat : L = (12 5.65 "pierre")

5.2. Ajouter un atome une liste


(setq L (cons (list "Paris" "Brest") L))
Rsultat : L = (("Paris" "Brest") 125.65 "pierre")
L'atome ajout la liste se place en dbut de liste. Ici l'atome est une liste.

12

AutoCAD 2008 Programmation AutoLISP

M2 GCI

5.3. Longueur d'une liste


(setq N (length L))
Rsultat : N = 4

5.4. Sommer deux listes


(setq L1 (list 1 2 3 4))
(setq L (append L1 L))
Rsultat : L = (1 2 3 4 ("Paris" "Brest") 12 5.65 "pierre")

5.5. Renverser une liste


(setq L (reverse L))
Rsultat : L = ("pierre" 5.65 12 ("Paris" "Brest") 4 3 2 1)

5.6. Extraire des atomes dune liste


Deux fonctions permettent l'essentiel du travail d'extraction :
(setq PT (list x y z))
PT est un point 3D (structure de liste)
5.6.1. Fonction car
(car PT) donne le premier atome de la liste PT
Donc
(setq X (car PT))
5.6.2. Fonction cdr
(cdr PT) donne une liste prive de son premier atome.
(cdr PT) est gal une liste (y z).
Pour obtenir l'atome y :
(setq Y (car (cdr PT)))
et (cdr (cdr PT)) donne la liste (z)
Pour obtenir l'atome z :
(setq Z (car (cdr (cdr PT))))
5.6.3. Concatnation car et cdr
Pour une simplification de la syntaxe, il est permis de concatner jusqu' quatre niveaux de A et de D entre C
et R.
D'o :
(setq X (car PT))
(setq Y (cadr PT))
(setq Z (caddr PT))
Donc les caadr, cadar, cadddr, cadaar etc ... sont possibles.

5.7. Le dernier atome dune liste


(setq Z (last PT))

13

M2 GCI

AutoCAD 2008 Programmation AutoLISP

6. Condition, boucle, test


6.1. La condition SI
Forme gnrale
(if <test> <action si le test est vrai> <action si le test est nil>)
<action si le test est nil> est optionnel.
Le drame numro 1 de la condition si est l'imbrication (possible mais difficile)
Le drame numro 2 est l'unicit de l'action qui suit le test.
Exemple :
(initget 3)
(setq N (getint "\nEntrez un nombre : "))
(if (< N 0) (prompt "\nNombre ngatif")
(prompt "\nNombre positif")
)
Pour lever le drame numro 2, on peut avec la fonction PROGN regrouper plusieurs actions lorsqu'une seule
est attendue.
Exemple :
Recherche d'un entier cach aprs avoir initialis NB _COUPS et NC.
(initget 3)
(setq N (getint "\nEntrez votre nombre : "))
(if (< N NC)
(progn
(prompt "\nTrop petit ! ")
(setq NB_COUPS (+ NB_COUPS 1))
) ; fin de progn
(if (> N NC)
(progn
(prompt "\nTrop grand ! ")
(setq NB_COUPS (+ NB_COUPS 1))
) ; fin de progn
(progn
(setq NB_COUPS (+ NB_COUPS 1))
(prompt (strcat "\nGagn en " (itoa NB_COUPS) " coups"))
);fin de progn
) ; fin de if imbriqu
) ; fin de if
Lindentation et les commentaires de fin de ligne permettent au programmeur de se relire.

6.2. Les diffrents tests possibles


Forme gnrale :
(> nombre1 nombre2) suprieur
(< nombre 1 nombre2) infrieur
(>= nombre 1 nombre2) suprieur ou gal
(<= nombre1 nombre2) infrieur ou gal
(/= atome1 atome2) diffrent de
14

AutoCAD 2008 Programmation AutoLISP

M2 GCI

(= atome1 atome2) gal


(and (test1) (test2))
(or (test1) (test2))
(null atome)

6.3. La condition gnrale


Forme gnrale :
(cond
((test1) (action 1,1)
(action 1,2)
..............
(action 1, ... )
)
((test2) (action 2,1)
(action 2,2)
..............
(action 2, ... )
)
.......................
((testn) (action n,l)
(action n,2)
..............
(action n, ... )
)
) ; fin de cond
le systme cherche un test qui se vrifie, s'il est trouv, il excute toutes les actions associes puis sort de la
condition.
Exemple :
(initget 1)
(setq N (getint "\nEntrez un nombre : "))
(cond
((= N 0) (prompt "\nN est gal 0. "))
((> N 0) (prompt "\nN est positif. "))
(T (prompt "\nN est ngatif. "))
) ; fin de cond
Si un entier n'est ni nul, ni positif, c'est qu'il est ngatif.

6.4. La boucle
La boucle est un outil indispensable tout langage de programmation.
Exemple :
Recherche d'un entier cach NC. Tant que le nombre entr est diffrent de NC on recommence.
(while (/= (getint "\nEntrez un nombre: ") NC))
(prompt "\nGagn ! ")

15

M2 GCI

AutoCAD 2008 Programmation AutoLISP

7. Quelques fonctions spcifiques du dessin:


7.1. Basculer d'un cran sur l'autre
(graphscr) passe de l'cran texte l'cran graphique.
(textscr) passe de l'cran graphique l'cran texte.

7.2. Le mode polaire


Forme gnrale :
(polar <point de dpart> <angle en radians> <longueur du rayon>)
Fonction trs utile pour le trac des figures. Cf programmes ci aprs.
(setq P2 (polar Pl (/ pi 2) 12.5))

7.3. Point d'intersection de deux droites


(setq J (inters P1 P2 Q1 Q2))
le point J est trouv si les deux droites (P1 P2) et (QI Q2) se coupent. Sinon J est nil.
(setq J (inters P1 P2 Q1 Q2 nil))
Les deux droites (P1 P2) et (QI Q2) sont considres comme infinies et le point J trouv.

7.4. Distance entre deux points:


(setq D (distance P1 P2))
D est un rel positif.

7.5. Angle dfini par deux points :


(setq A (angle P1 P2))
Langle A est un rel en radians.

7.6. Accrochage a la gomtrie des objets existants:


(setq P (osnap (getpoint "\nPoint de depart : ") "int"))
Le point P se placera l'intersection la plus proche.
Les diffrents modes de la fonction "osnap" sont ceux du mode ACCROBJ : "int", "ext", "cen", ... etc .....

8. Editeur Visual LISP


8.1. Prsentation
La commande VLISP affiche l'environnement de dveloppement interactif Visual LISP (IDE).
Commande: vlisp
Il permet de dvelopper, de tester et de mettre au point des programmes AutoLISP.
Exemple :

16

AutoCAD 2008 Programmation AutoLISP

M2 GCI

8.2. Boutons utiles

Slectionner
une fentre

Charge la fentre
ddition

Insrer un
commentaire

Aide sur
une fonction

Slectionner une fentre permet de basculer dune fentre une autre et dafficher la console Visual LISP.
Charger la fentre ddition permet de charger le programme dans la fentre active dAUtoCAD. La
console Visual LISP affiche :
1 feuille charg partir de #<editor "C:/Documents and Settings/Damien/Mes documents/Universit L2L3/BEM2/LISP/tremie.lsp">
Insrer un commentaire est indispensable pour rdiger son programme. Un programme non comment est
trs difficile dchiffrer et donc faire voluer.
Aide sur une fonction vous aidera utiliser correctement les fonctions AutoLISP. Cette aide est
intgralement en Anglais. Vous progresserez donc galement en Anglais.

17

M2 GCI

AutoCAD 2008 Programmation AutoLISP

9. EXEMPLES
9.1. Trou oblong
9.1.1. Objectif
Ce programme de base permet de tracer un trou oblong connaissant les deux centres de cercles et le rayon.
9.1.2. Programme

9.1.3. Rsultat

9.2. Surface
9.2.1. Objectif
Ce programme permet dcrire la valeur de la surface dune zone ferme sous la forme S=12.34m2.
9.2.2. Programme

9.2.3. Rsultat

18

AutoCAD 2008 Programmation AutoLISP

M2 GCI

9.3. Trmie
9.3.1. Objectif
Ce programme permet de dessiner une trmie en piquant un point lintrieur de la zone.

9.3.2. Programme

Commande: tremie
Slectionnez un point intrieur de la trmie :
symtrie_Verticale/symtrie_Horizontale/symtrie_Centrale/<accepter>c
nil
Commande :
9.3.3. Rsultat

19

M2 GCI

AutoCAD 2008 Programmation AutoLISP

9.4. Tirant dancrage


9.4.1. Objectif
Lobjectif de ce programme est de dessiner un tirant dancrage connaissant :

Sa longueur libre
Sa longueur scelle
Son angle dinclinaison par rapport lhorizontal

9.4.2. Programme

20

AutoCAD 2008 Programmation AutoLISP

M2 GCI

Commande: tirant
Point d'ancrage :
Longueur libre : 8
Longueur scelle : 5
Angle par rapport l'horizontal : -35
Symtrie [Oui/Non] <N> :o
nil
Commande:
9.4.3. Rsultat

21

M2 GCI

AutoCAD 2008 Programmation AutoLISP

9.5. Transfert de points depuis AutoCAD vers un fichier txt


9.5.1. Objectif
Ce programme permet de transfrer les coordonnes de tous les points dun dessin dans un fichier txt.

9.5.2. Programme

9.5.3. Rsultat

22

AutoCAD 2008 Programmation AutoLISP

M2 GCI

9.6. Transfert de points depuis un fichier txt vers AutoCAD


9.6.1. Objectif
Ce programme permet de tracer une polyligne partir dun fichier de points organiss.

9.6.2. Programme

9.6.3. Rsultat

23

M2 GCI

AutoCAD 2008 Programmation AutoLISP

9.7. Trc dune section IPE sous AutoCAD


9.7.1. Objectif
Ce programme permet de tracer un profil IPE sous AutoCAD partir dun fichier txt.
9.7.2. Programme

24

AutoCAD 2008 Programmation AutoLISP

M2 GCI

9.7.3. Structure de ipe.txt

25

M2 GCI

AutoCAD 2008 Programmation AutoLISP

9.8. Extraire les sommets dune polyligne dans un fichier texte


9.8.1. Objectif
Ce programme permet dexporter dans un fichier texte les coordonnes des sommets dune polyligne et
dindiquer leur numros.

9.8.2. Programme

9.8.3. Rsultat

26

AutoCAD 2008 Programmation AutoLISP

M2 GCI

9.9. Profil tlsige


9.9.1. Objectif
Lobjectif de ce programme est de remplir un tableau sous chaque pylne contenant :

Labscisse du pied de pylne


Laltitude du pied de pylne
La hauteur du pylne
Linclinaison du pylne
Les quipements (monte ou retour)

Sur la figure suivante, on distingue le cble de monte, le cble retour, le sige, et les pylnes.

Voici le rsultat du tableau aprs programmation.

Le programme se divise en plusieurs parties :

Afficher un message dinformation


Dfinir lorigine de calcul des abscisses et ordonnes
Remplir une seule colonne du tableau en slectionnant un seul pylne
Remplir tout le tableau automatiquement
Exporter les rsultats vers un fichier texte

9.9.2. Informations relatives au programme

27

M2 GCI

AutoCAD 2008 Programmation AutoLISP

9.9.3. Calage des origines


Commande: calage
Indiquez l'origine des abscisses et ordonnes : 404.227
Commande:

9.9.4. Remplissage manuel du tableau

28

AutoCAD 2008 Programmation AutoLISP

M2 GCI

9.9.5. Remplissage automatique

9.9.6. Exportation vers un fichier texte

29

M2 GCI

Rsultat du fichier texte :

30

AutoCAD 2008 Programmation AutoLISP