Sunteți pe pagina 1din 268

141246430.doc R.2.1 4/22/2013 ATC.

Iasi 1
AutoLISP
Introducere
AutoLISP-ul este un limbaj de programare pentru AutoCAD.
Acest curs ofer\ cursantului posibilitatea de a-[i `nsu[i
cuno[tine practice de lucru `n AutoLISP prin cursuri [i te!te
care e!plic\ structura [i sinta!a limbajului [i relaia acestuia
cu AutoCAD-ul. Prin e!erciii aplicati"e la teoria de
programare [i e!emple concrete cursantul `[i completea#\
aceste cuno[tine.
Acest curs repre#int\ o culegere de te!te [i un g$id pentru
un curs AutoLISP pe o perioada de % #ile& oferit de
Autodes'& Inc. (raining Department. La e!erciiile de
proiectare se adaug\ lecii suplimentare [i discuii la obiect.
Acest curs poate fi folosit indi"idual atunci c`nd este `n
combinaie cu o disc$et\ ce conine fi[ierele necesare
pentru re#ol"area e!erciiilor.
Acest curs este ba#at pe o "ersiune AutoLISP ce poate fi
g\sit\ pe toate platformele pe care este implementat
AutoCAD )*+.
Obiective
La sf`r[itul acestui curs& cursantul "a fi capabil s\ `neleag\
sinta!a AutoLISP& o "arietate de funcii standard [i procesul
de e"aluare Lisp. Cursantul "a putea folosi
AutoLISP-ul pentru,
-tili#area comen#ilor AutoCAD prin intermediul
funciilor de ba#\ AutoLISP.
Crearea de noi funcii AutoLISP.
Crearea de noi funcii AutoCAD pe ba#a limbajului
AutoLISP.
Corectarea [i modificarea entit\ilor din ba#a de
date a AutoCAD-ului.
Citirea [i scrierea `n fi[iere cu te!te ASCII cu
ajutorul limbajului AutoLISP.
Combinarea programelor de tip AutoLISP cu
fi[ierele AutoCAD de tip script.
141246430.doc R.2.1 4/22/2013 ATC. Iasi 1
AUTODESK, INC.
Cuprins
Acest material cuprinde subiectele pre#entate mai jos.
.!plicarea acestor subiecte repre#int\ coninutul principal al
capitolelor de mai jos.
Introducere...........................................................................*
/eneralit\i............................................................................%
.!presii simbolice.................................................................0
Atomi [i liste........................................................................*%
."alu\ri ...............................................................................+*
.!presii simbol AutoLISP far\ comen#i AutoCAD.................%1
(ipuri de date numerice......................................................2*
Puncte AutoCAD [i liste AutoLISP........................................20
Prelucrare de liste...............................................................10
Comen#i AutoCAD [i liste AutoLISP.....................................0*
Selecie interacti"\ de puncte.............................................03
4uncii.................................................................................50
4uncii care acionea#\ ca [i comen#i AutoCAD...................30
4i[iere de programare AutoLISP........................................*6*
4uncia C...........................................................................*61
(este logice [i condiionale...............................................**%
7ucle de program.............................................................*+%
8peraii cu [iruri................................................................*%*
Acces la entit\i.................................................................*%3
Liste asociate entit\ilor....................................................*20
9odificarea unei entit\i....................................................*11
Selectarea grafic\ a unei entit\i.......................................*:1
(ratarea erorilor...............................................................*0*
8peraii cu fi[iere..............................................................*01
................................................................................................
Seturi de selecie..............................................................*3%
(abele [i nume de obiecte................................................+6%
4i[iere script [i AutoLISP....................................................+**
2
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Accesul la entit\i simple [i la polilinii...............................+*0
Accesul la entit\i simple [i la blocuri................................++*
Crearea entit\ilor cu funcia entma'e..............................++1
Crearea poliliniilor [i a definitiilor de bloc cu funcia
entma'e ...........................................................................++0
(ratarea [irurilor...............................................................+%*
(ratarea entit\ilor............................................................+2%

141246430.doc R.2.1 4/22/2013 3
AUTODESK, INC.
Generalit\]i despre AutoLISP
Ce este AutoLISP-ul ?
AutoLISP-ul este un dialect al limbajului de programare Lisp
utili#at pentru completarea posibilit\ilor de proiectare `n
AutoCAD.
Lisp este un acronim pentru list processing ;in alte te!te&
list programming. .ste un limbaj de programare superior
foarte cunoscut pentru aplicaiile lui `n domeniul sistemelor
speciali#ate& inteligen\ artificial\& programare pe ba#\ de
reguli [i AutoCAD.
Lisp este unul dintre limbajele de programare cele mai
"ec$i. Ca [i 48)()A<& primele implement\ri ale limbajului
Lisp datea#\ din anii :6. 9ulte sublimbaje ale limbajului Lisp
e!ist\ `n pre#ent& inclu#`nd Common Lisp& 4ran# Lisp& 9u
Lisp [i = Lisp.
Limbajul Lisp are multe caracteristici care se adresea#\ at`t
profesioni[tilor c`t [i amatorilor.
AutoLISP are o sinta!\ simpl\& precis\. Procesul de
e"aluare [i sinta!a folosit\ pentru crearea
e!presiilor Lisp sunt u[or de `n"\at.
.ste un interpretor a[a `nc`t re#ultatele obinute
din calcule pot fi "i#uali#ate interacti" `ntr-o
sesiune AutoCAD.
AutoLISP interacionea#\ direct cu AutoCAD f\r\ s\
necesite programe de sprijin e!tern& cum ar fi
compilatorul.
Programele AutoLISP s`nt u[or de `neles [i
modificat.
AutoLISP-ul este capabil de iteraie [i recursi"itate.
4unciile pot utili#a instruciuni condiionale [i
de start standard [i pot fi definite `n a[a fel
`nc`t o funcie apelea#a la recursiune .
AutoLISP-ul `ncurajea#\ programatorul s\ scrie
funcii simple&structurate [i s\ combine aceste
funcii cu scopul de a crea programe comple!e
dar u[or de `neles.
Pentru cei ce s`nt interesai s\ lucre#e cu programe
AutoLISP le recomand\m urm\toarele c\ri,
4
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Common LISP: A Gentle Introduction to Symbolic
Computing de Da"id S. (ouret#'>? LISP de @inston A Born
Looking at LISP de (on> Basemer Common LispCraft de
)obert @ilens'> AutoLISP Programmer's Reference
Manual
Ce poate face AutoLISP-ul ?
AutoLISP-ul este o scul\ puternic\. Poate fi folosit pentru a
adapta AutoCAD-ul la orice fel de aplicaii& f\c`nd astfel
AutoCAD-ul mai sensibil la modul de lucru. 9ulte dintre cele
mai complicate aplicaii proiectate pentru AutoCAD folosesc
pe scar\ larg\ limbajul de programare AutoLISP.
AutoLISP poate crea subrutine [i macrouri puternice.
Subrutinele AutoLISP pot fi alc\tuite din comen#i AutoCAD [i
funcii AutoLISP [i pot automati#a operaii comple!e `n
cadrul AutoCAD-ului.
Subrutinele AutoLISP pot crea noi funcii AutoLISP [i noi
comen#i AutoCAD care pot fi folosite `n linia de comand\
sau `n cadrul fi[ierelor script [i menu-urilor AutoLISP.
Cum `nc\rc\m AutoLISP-ul ?
AutoLISP-ul este o component\ standard a AutoCAD-ului&
portabil\ pe toate ma[inile de calcul. Interpretorul AutoLISP
se `ncarc\ automat la fiecare sesiune AutoCAD.
AutoLISP operea#\ `n cadrul editorului grafic AutoCAD.
Interpretorul st\ `n Cumbr\C `n timpul unei sesiuni de
interpretare grafic\ a[tept`nd s\ e"alue#e o e!presie
simbolic\ introdus\ `n linia de comand\ a AutoCAD-lui.
AutoLISP-ul este disponibil numai `n cadrul editorului
grafic.
Ce trebuie s\ [tim pentru a folosi AutoLISP-ul ?
Cuno[tinte temeinice de lucru cu AutoCAD.
(rebuie de asemenea s\ a"ei cuno[tine despre,
4i[iere script.
9enu-uri utili#ator.
Dn unele ca#uri este mai simplu [i mai u[or s\ optimi#ai o
sec"ent\ de desenare cu un fi[ier script sau cu un menu de
ba#\ dec`t s\ folosii un program AutoLISP.
141246430.doc R.2.1 4/22/2013 5
AUTODESK, INC.
Ce editor de tet ar trebui folosit ?
.ste ne"oie de un editor de te!t ASCII pentru a crea fi[iere
program AutoLISP pe ba#a acestui manual.
4i[ierele de te!t ASCII pot fi `nt`lnite sub denumirea de
fi[iere CprogrammerC& Cnon-documentC sau CunformattedC.
Eersiunea 9S-D8SF 1.6 a ap\rut cu un editor de te!t
simplu numit .DI(. Dac\ folosii "ersiunea D8S %5: a
AutoCAD-ului din acest manual este posibil s\ dorii s\
folosii acest editor.
Aplicaia <8(.PAD din 9icrosoftF @indoGs
(9
este un editor
de te!t ASCII a[a cum este aplicaia (e!t .ditor din Sun
9>cros>stemsF SPA)C
(9
din 8pen @indoGs
(9
.
.!ist\ o "arietate de editoare de te!t gratuite [i care circul\
liber pentru AutoCAD [i AutoLISP `n cadrul 4orumului
CompuSer"e AutoCAD ;/8 ACADH. 8rice editor profesional
de programare este o unealt\ bun\ cu care se pot scrie
fi[iere program AutoLISP.
!ard"are pentru AutoLISP [i necesarul de memorie
Computerul dumnea"oastr\ trebuie s\ aib\ $ardGare-ul [i
memoria cerut\ de AutoCAD pentru a putea folosi AutoLISP-
ul. 9anualele AutoCA! Interface [i Installation And
Performance Guide pre#int\ cerinele specifice fiec\rei
platforme.
Lansarea `n eecu#ie
Lansai editorul grafic AutoCAD `nainte de a lansa orice alt\
comanda. Ea trebui s\ introducei s-e!presiile AutoLISP din
linia de comand\.
E\ suger\m s\ lansai sesiunea de editare grafic\ ori de c`te
ori utili#ai acest manual.
6
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Expresii simbolice
.!presiile simbolice s`nt instruciuni de ba#\ ale
limbajului AutoLISP.
Obiective
Dn acest capitol "ei `n"\a,
Cum s\ creai o e!presie simbolic\
Cum recunoa[te AutoCAD-ul e!presiile simbolice
Cum s\ folosii e!presiile simbolice `n cadrul
comen#ilor AutoCAD
Cum s\ aflai "aloarea unei e!presii simbolice
Instruc#iuni `n AutoLISP
Dn principal LISP-ul procesea"# listele, el procesea#\ [i
e$aluea"# listele de obiecte. AutoLISP-ul procesea#\ liste
cunoscute ca epresii simbolice& `n cadrul AutoCAD-ului.
Listele s`nt principalul mijloc de construire a e!presiilor
simbolice `n AutoLISP. 8 e!presie simbolic\ din AutoLISP
poate fi comparat\ cu o propo#iie `n limba engle#\.
8 e!presie simbolic\ sau o s-epresie are `ntotdeauna o
anumit\ "aloare. 4uncia principal\ a LISP-ului este s\
determine "aloarea unei s-e!presii. De fiecare dat\ c`nd
lans\m o s-e!presie interpretorului LISP ;de obicei sub
forma unei liste& el "a e"alua acea e!presie [i ne "a da
re#ultatul. Acest re#ultat se nume[te valoarea epresiei.
8 e!presie simbolic\ sau o s-e!presie repre#int\ pur [i
simplu o instruciune `n LISP.
S-e!presiile `n AutoLISP s`nt construite prin `ncadrarea
unei sec"ene "alide de caractere `ntre parante#e.
Caracterul parante#\ st`nga sau ; se nume[te parante#\
desc$is\ [i caracterul parante#\ dreapta sau H se nume[te
parante#\ `nc$is\. Dn mod obi[nuit aceste caractere s`nt
denumite desc$is [i `nc$is%
Parante#ele dintr-o s-e!presie trebuie s\ fie ec$ilibrate.
8ric\rei parante#e desc$ise trebuie sa-i corespund\ una
`nc$is\.
141246430.doc R.2.1 4/22/2013 7
AUTODESK, INC.
Obs% Cea mai frec"ent\ gre[eal\ `n AutoLISP este
ne`nc$iderea parante#elor. .ditoarele de te!t profesionale
au aceast\ caracteristic\ de a g\si parante#ele
corespondente cu un minim de efort.
Cum recunoa[te AutoCA&-ul o s-epresie
AutoCAD-ul recunoa[te o s-e!presie AutoLISP printr-o
parante#\ desc$is\. Dac\ g\se[te o astfel de parante#\&
AutoCAD-ul transfer\ intrarea utili#atorului c\tre
interpretorul AutoLISP [i a[teapt\ re#ultatul. AutoCAD
afi[ea#\ re#ultatul s-e!presiei.
Command: (+ 1 2)
3
Command:
AutoCAD AutoLISP
(+ 1 2)
3
Figura 1. Diagrama de comunicatie dintre AutoCAD si AutoLISP
'emplu
Pe linia de comand\ a AutoCAD-ului `nscriei s-e!presiile `n
coloana din st`nga a tabelului care urmea#\. Comparai
re#ultatele date de AutoCAD cu re#ultatele care se afl\ `n
coloana din dreapta a tabelului.
Command:(+1!
"
Command:
S-e!presii )e#ultate
;I * +H %
;- + *H *
;J 2 +H +
8
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
;K 2 +H 5
Tabelul 1. Rezultatele expresiilor simbolice
S-epresiile [i comen(ile AutoCA&
S-e!presiile pot fi introduse ca intrare la comen#i AutoCAD.
AutoCAD-ul "a recunoa[te parante#ele desc$ise& "a
transfera intrarea interpretorului AutoLISP [i "a a[tepta
re#ultatul.
AutoCAD-ul tip\re[te re#ultatul intr\rii s-e!presiilor pe linia
de comand\. AutoCAD-ul folose[te re#ultatul unei s-e!presii
introduse& drept intrare la comanda curent\.
AutoCAD AutoLISP
(/ 360 15)
24
Command:array
polar
last
5,5
(/ 360 15)
Command:array
polar
last
5,5
20
Figura . Cum AutoCAD!ul si AutoLISP!ul comunica intr!o comanda AutoCAD
141246430.doc R.2.1 4/22/2013 9
AUTODESK, INC.
'emplu
Dn comanda Cpolar arra>C care urmea#\& `mp\rind %:6 de
grade la *1 se determin\ num\rul de obiecte de creat& de
e!emplu se crea#\ un obiect la fiecare *1 grade de rotaie.
Introducei comen#ile.
Command: line
#$om %o&nt: 5,5
To %o&nt: 5,8
To %o&nt: Enter
Command: arra
S'(')t o*+')t,: last
1 -ound
S'(')t o*+')t,: Enter
R')tan.u(a$ o$ Po(a$ a$$a/ (R0P!: !
C'nt'$ %o&nt o- a$$a/: 5,5
Num*'$ o- &t'm,: "/ 360 15#
An.(' to -&(( (+1))2, 31)2! 4"567:Enter
Rotat' o*+')t, a, t8'/ a$' )o%&'d9 4:7Enter
Figura ". #xpresia $%"&' 1() genereaza un arra* de + linii
Caracterul semnul eclam\rii
AutoCAD-ul anali#ea#\ intrarea utili#atorului `n linia de
comand\ caut`nd un alt caracter AutoLISP asociat, semnul
e!clamarii sau L. Acest caracter este denumit `n mod
frec"ent bang. Dac\ semnul e!clamarii este primul
caracter& AutoCAD-ul transfer\ intrarea c\tre interpretorul
AutoLISP [i a[teapt\ re#ultatul.
8rice s-e!presie "alid\ poate urma dup\ semnul e!clam\rii.
Command, L;I *+H
10
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Caracterul CbangC este deseori folosit pentru a cere
AutoLISP-ului "aloarea unui simbol. Dn acest ca#& simbolul
nu trebuie s\ se afle `ntre parante#e.
Command, Lpi
'emplu
pi este un simbol predefinit `n AutoLISP. .!tragei "aloarea
simbolului pi pe linia de comand\ AutoCAD.
Command: $!i
".1;1<=
Command:
)ecapitulare

S-epresiile s`nt e!presii AutoLISP "alide aflate
`ntre parante#e.
AutoCAD-ul caut\ dou\ caractere speciale,
parante#ele desc$ise sau open [i semnul
e!clam\rii sau bang.
8pen indic\ AutoCAD-ului c\ urmea#\ o s-e!presie.
7ang indic\ AutoCAD-ului c\ urmea#\ o s-e!presie
sau un simbol.
S-e!presiile [i caracterul bang pot fi folosite `n linia
de comand\ sau `n cadrul comen#ilor AutoCAD.
Caracterul bang poate precede S-e!presiile sau
simbolurile.
141246430.doc R.2.1 4/22/2013 11
AUTODESK, INC.
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
12
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Atomi [i liste

.!ist\ dou\ mari categorii de tipuri de date `n AutoLISP,
atomi [i liste% Atomii s`nt obiecte simple. Listele s`nt
obiecte comple!e. Acest capitol define[te atomii [i listele.
Obiective
Dn acest capitol se "a studia,
Diferena dintre atomi [i liste
Componentele unei liste
Cum s\ recunoa[tem un raport de erori AutoLISP
<atura obiectului AutoLISP nil
Atomi
-n atom este cel mai simplu tip de date din Lisp. -n atom
poate fi un num\r `ntreg
*
un num\r real
2150.33%26*
un [ir de caractere
A String 8f Pearls
o funcie AutoLISP predefinit\
I
un simbol
=MN
sau oricare alt tip de obiecte e!istente `n tabelul %-*.
141246430.doc R.2.1 4/22/2013 13
AUTODESK, INC.
Ti!%ri de ato&i E'e&!le Ti! de data
A%to(I)*
,&m*o( %&,>,m&d?%t S:@
,&$ AB'((o, 2o$(d.A STR
&nt$'. 1,"C5C,3"C5D INT
numa$ $'a( 1.6,;<.5CD,3DC5<;".1 REAL
d',)$&%to$ d' -&E&'$ 4#&(': FaD7 #ILE
num' 'nt&tat' AutoCAD 4Ent&t/ nam': 5666661a7 ENA@E
,'t d' ,'(')t&' AutoCAD 4S'(')t&on ,'t: 17 PICKSET
,u*$ (-un)t&' &nt'$na! 4Su*$: F1'"7 SUBR
,u*$ '>t'$na (#un)t&a ADS! 4E>t. Su*$: 1 F"a=C6;=D7 EGSUBR
Tabelul . #xemple de atomi din AutoLISP si tipul de date al acestora
.!ist\ o regul\ simpl\ pentru a afla dac\ un obiect este un
atom sau o list\. Dac\ obiectul nu se afl\ `ntre parante#e
atunci este un atom? dac\ da& atunci este o list\.
Liste
Listele s`nt s- e!presii comple!e formate din atomi [iJsau
alte liste. Listele necesit\ sinta!e simple dar riguroase.
8 list\ trebuie s\ se afle `ntre parante#e.
Pentru orice list\ care poate fi e"aluat\& primul
termen din cadrul listei respecti"e trebuie s\ fie
o funcie.
8biectele din cadrul listei trebuie separate prin cel
puin un spaiu.
Iat\ c`te"a e!emple de liste. 8bser"ai c\ fiecare obiect
este separat printr-un spaiu de celelalte obiecte din cadrul
listei.
(+ 1 2 )
(- 4 2 )
(x y z )
(1.0 1.0 0.0 )
Despre evaluarea listelor "om "orbi puin mai t`r#iu.
'lementele unei liste
Atomii [i listele pot fi combinate sub form\ de liste. Dn
urm\toarele patru e!emple am introdus trei atomi `ntr-o
list\. 4iecare atom este un element al listei.
14
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'emplu
Aceast\ list\ are trei elemente, numerele reale *.6& *.6 [i
6.6
(1.0 1.0 0.0)
Aceast\ list\ are trei elemente, funcia de adunare I
;funcie intern\H& nr. `ntreg * [i nr. `ntreg %.
(+ 1 3)
Aceast\ list\ are trei elemente, funcia de adunare I& nr.
`ntreg * [i list\ ;I + %H
(+ 1 (+ 2 3 ))
(+ 1 (+ 2 3))
#&$,t '('m'nt: +
S')ond '('m'nt: 1
T8&$d '('m'nt: (+ "!
Figura +. Lista de trei elemente, doi atomi si o lista
'emplu
Aceast\ list\ are trei elemente, funcia de adunare I& lista
;I *;I + %HH [i lista ;I 2 1H.
(+ (+ 1 (+ 2 3)) (+ 4 5))
(+ (+ 1 (+ 2 3)) (+ 4 5))
#&$,t '('m'nt: +
S')ond '('m'nt: (+ 1 (+ "!!
T8&$d '('m'nt: (+ ; <!
Figura (. Lista de trei elemente, un atom si doua liste.
Ceea ce este `ncadrat `ntre parante#e repre#int\ o list\.
O list\ se compune dintr-o parante(\ de desc$idere
urmat\ de (ero sau de mai multe obiecte care pot fi
atomi sau liste dup\ care urmea(\ o parante(\ de
`nc$idere%
141246430.doc R.2.1 4/22/2013 15
AUTODESK, INC.
Condi#ii de eroare
C`nd introducei s-e!presii `n linia de comand\ AutoCAD&
interpretorul AutoLISP "\ "a spune dac\ ai introdus o
epresie neec$ilibrat\. 8 e!presie neec$ilibrat\ are mai
multe parante#e desc$ise dec`t `nc$ise.
Iat\ o e!presie neec$ilibrat\. Di lipse[te o parante#\ `nc$is\.
Command: (+ 1 (+ "!
17
AutoLISP-ul semnali#ea#\ o e!presie neec$ilibrat\ printr-un
mesaj special.
n7
unde n este num\rul de parante#e `nc$ise care lipsesc.
S`nt dou\ modalit\i de re#ol"are `n ca#ul condiiilor de
eroare, completai num\rul corect de parante#e `nc$ise sau
ap\sai Ctrl-C pentru a anula e!presia [i a ne re`ntoarce `n
linia de comand\.
*ot\ .ste de asemenea posibil s\ "edei acest mesaj c`nd
un [ir este neec$ilibrat. -n [ir neec$ilibrat are g$ilimele
duble la un cap\t [i simple la cel\lalt.
Particularit\#ile obiectului nil
(oate obiectele din AutoLISP s`nt atomi sau liste. Atomii [i
listele se e!clud mutual. -n atom nu este niciodat\ list\ [i o
list\ nu este niciodat\ atom.
.!cepia o face obiectul nil%
8biectul nil este +lista goal\+% Prin con"enie nil este [i
atom [i list\. nil poate fi e!primat `n dou\ moduri, 6 sau nil?.
nil este ec$i"alentul AutoLISP pentru fals% 9ulte funcii `n
AutoLISP testea#\ dac\ o condiie este ade"arat\ sau fals\&
de e!emplu dac\ "aloarea unui num\r este mai mare dec`t
6. De c`te ori un test de condiie este fals& AutoLISP-ul "a
returna obiectul nil ca fiind "aloarea testului.
nil este singurul obiect din AutoLISP corespun#ator lui CfalsC?
de aceea orice alt\ "aloare returnat\ de un test de condiie
trebuie s\ corespund\ lui Cade"\ratC.
16
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
)ecapitulare
Cele dou\ mari clase de obiecte din AutoLISP s`nt
atomii [i listele%
.!ist\ c`te"a tipuri diferite de atomi.
Atomii s`nt obiecte care nu s`nt `ncadrate `ntre
parante#e.
Listele s`nt `ntodeauna `ncadrate `ntre parante#e
8biectele coninute `ntr-o list\ constituie
elementele unei liste
.lementele unei liste pot fi atomi sau liste
.lementele unei liste s`nt separate `ntre ele de cel
puin un spaiu
AutoLISP detectea#\ epresiile neec$ilibrate
nil este [i atom [i list\
nil este lista goal\
nil este returnat de testele de condiie pentru a
indica +fals+
141246430.doc R.2.1 4/22/2013 17
AUTODESK, INC.
E+ERCITI,( 1- AT./I )I (I)TE
Dn acest e!erciiu "ei,
)ecapitula ce ai `neles despre atomi [i liste
Determina dac\ un obiect este atom sau list\
4olosi AutoLISP pentru a afla "aloarea diferitelor
obiecte
Partea I
*. Determinai dac\ obiectul este atom sau list\.
+. Completai re#ultatul e"alu\rii `n c\sua
corespun#atoare.
Tabelul ". Determinarea naturii obiectului
18
.0iecte Ato&i (iste
C".<
A6,6A
(1.6 .6 ".6!
ASt$&n.A
(ASt$&n.A!
(!
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Partea a II-a
*. /asii "aloarea acestui atom `n linia de comand\
AutoCAD
+. (ip\rii CLC urmat de un atom
%. Scriei r\spunsul `n coloana din dreapta,
'emplu
Command: H;.<
Tabelul +. Determinarea -alorii atomului
Partea a III-a
*. Determinai num\rul de elemente coninut de fiecare
list\.
+. Scriei r\spunsul `n coloana din dreapta.
L&,ta Numa$ d' '('m'nt'
(1.6 .6 ".6!
(+ 1 !
(+ 1 (+ "!!
(+ 1 (+ " ;! <!
(+ 1 (+ (+ " ;!! <!
(!
Tabelul (. Determinarea numarului de elemente din lista
141246430.doc R.2.1 4/22/2013 19
Ato&i 1alori
;.<
At'>tA
1C
,'tI
>/J
n&(
AUTODESK, INC.
Aceast\ pagin\ este l\sat\ liber\ `n mod intenionat
20
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Evaluarea
'valuarea este procesul prin care AutoLISP-ul determin\
"aloarea unui obiect. ."aluarea se aplic\ [i la atomi [i la
liste.
4iecare obiect din AutoLISP are o "aloare. Prin e"aluarea
unui obiect& AutoLISP-ul determin\ "aloarea acestuia.
Obiective
Dn acest capitol "ei studia,
Procesul e"alu\rii
Cum returnea#\ AutoLISP-ul o "aloare
Cum e"aluea#\ AutoLISP-ul atomi [i liste
Cum se folosesc funciile aritmetice de ba#\ `n
AutoLISP
Cum se anulea#\ e"aluarea unui obiect
Cum leag\ AutoLISP-ul o "aloare de o "ariabil\
)eturnarea valorii
C`nd transmitei un obiect spre e"aluare AutoLISP-ului&
acesta `i determin\ "aloarea [i o returnea(\% Dntr-un
e!emplu anterior& folosind caracterul CLC& AutoLISP-ul a
e"aluat obiectul pi [i a returnat "aloarea AutoCAD-ului.
AutoCAD-ul a tip\rit "aloarea returnat\ `n #ona liniei de
comand\.
Command: H%&
".1;1<= 4333 Ka(oa$' $'tu$nata
Dntr-un e!emplu anterior folosind comanda A))AM&
AutoLISP-ul a e"aluat lista ;J %:6 *1H [i a returnat "aloarea
+2 AutoCAD-ului. AutoCAD-ul a folosit "aloarea returnat\ la
intrare `n comanda A))AM.
C'nt'$ %o&nt o- a$$a/: <,<
Num*'$ o- &t'm,: (0 "56 1<!
An.(' to -&(( (+1))2, 31)2! 4"567:Ent'$
141246430.doc R.2.1 4/22/2013 21
AUTODESK, INC.
Number of tems: (/ 360 15)
(/ 360 15)
24
AutoCAD %$om%t U,'$ 'nt'$,
AutoLISP
$')'&K',
$'tu$n,
Figura &. AutoLISP returneaza -aloarea expresiei in linia de comanda AutoCAD.
'valuarea atomilor
Atomii s`nt obiecte simple [i s`nt e"aluai folosind reguli
simple potri"it tipului lor de date. 9ajoritatea atomilor se
autoe"aluea#\. <umerele `ntregi& numerele reale& [irurile&
se autoe"aluea#\ la "aloarea pe care o au. 9odul `n care se
e"aluea#\ un simbol nu poate fi discutat dec`t dup\ ce
`n"\am cum se leag\ o list\.
Ti! de ato& E'e&!l% Re2%la de
e3al%are
1aloare
Int$'. 1 La(oa$'a ',t'
n$. &n,u,&
1
R'a( ;.< La(oa$'a ',t'
n$. &n,u,&
;.<
S&$ At'>tA La(oa$'a ',t'
n$. &n,u,&
At'>tA
S&m*o( > L'.a$'a )u$'nta U(t&ma a,&.na$'
Tabelul &. Reguli de e-aluare a atomilor
'valuarea listelor
."aluarea unei liste poate fi facut\ `ntr-unul din aceste dou\
moduri, se ia lista ca atare sau se e"aluea#\. Dn funcie de
natura listei& metodele dau re#ultate diferite&de e!emplu&
"alori diferite.
22
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Dac\ o list\ este luat\ ca atare& atunci "aloarea ei este lista
`ns\[i. Acest lucru "a fi mai clar dup\ e!plicarea funciei
Ouote mai t`r#iu `n aceast\ lecie.
Dac\ o list\ urmea#\ a fi e"aluat\ de AutoLISP& atunci trebuie
respectat\ regula sintactic\.
Pentru orice list\ care poate fi e"aluat\& primul
element din cadrul listei trebuie s\ fie o func#ie.
Listele s`nt e"aluate potri"it instruciunilor referitoare la
primul element al listei. Dac\ primul element este numele
unei subrutine interne AutoLISP sau funcii& restul de
elemente ale listei s`nt transferate funciei ca argumente
formale [i s`nt e"aluate de c\tre funcie.
4unciile s`nt fie funcii interne AutoLISP& fie subrutine& a[a
cum s`nt cele pre#entate `n capitolul 2 al manualului
AutoLISP Programmer%s Reference Manual& fie funcii
e!terne definite de utili#ator sau esubr definite de
aplicaii ADS& sau funcii AutoLISP definite de utili#ator.
Cum evaluea(\ AutoLISP-ul o list\
Eom folosi o list\ simpl\ pentru a ilustra procesul de
e"aluare a unei liste.
Aceasta este o list\ format\ din trei elemente, funcia I
numerele `ntregi * [i +.
(+ 1 2)
'tapa I, Anali(a primului element
Primul element al unei liste pe care AutoLISP-ul o poate
e"alua trebuie s\ fie o func#ie%
AutoLISP-ul "erific\ primul element al listei unde se a[teapt\
s\ g\seasc\ o funcie. Dac\ primul element al listei pe care
AutoLISP-ul `ncearc\ s\ o e"alue#e nu este o funcie& acesta
"a da na[tere unei erori.
.lementele care urmea#\ dup\ o funcie `n cadrul unei liste
s`nt argumentele funciei? adic\ ele repre#int\ datele
asupra c\rora funcia operea#\.
'tapa a II-a, 'valuarea func#iei
AutoLISP e"aluea#\ funcia. 8 funcie e"aluea#\ un set de
instruciuni care sugerea#\ AutoCAD-ului cum s\ acione#e
mai departe.
4uncia I e"aluea#\ un set de instruciuni pentru AutoLISP.
Dac\ ar fi s\ e!prim\m `n cu"inte aceste instruciuni& am
141246430.doc R.2.1 4/22/2013 23
AUTODESK, INC.
putea spune, g#si&i $aloarea fiec#rui element din aceast#
list# Care s'nt argumentele func&iei( Pune&i toate $alorile la
un loc )i returna&i re"ultatul ca fiind $aloarea 'ntregii liste
24
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'tapa a III-a, Continuarea instruc#iunilor func#iei
;.. * ..H
-rm\rind instruciunile din funcia I& AutoLISP-ul g\se[te
"aloarea urm\torului element din list\, num\rul `ntreg *.
<umerele `ntregi se e"aluea#\ pe sine. Astfel AutoLISP-ul
memorea#\ "aloarea * `n sti"a programului& de e!emplu o
introduce `ntr-o locaie de memorie temporar\.
;.. .. +H
Conin`nd cu instruciunile de la funcia I& AutoLISP-ul
"erific\ dac\ mai s`nt [i alte elemente `n list\. 9ai e!ist\ un
element, num\rul `ntreg +. AutoLISP-ul `i pastrea#\ "aloarea
`n sti"\.
'tapa a I--a, )eturnarea valorii func#iei
<emaig\sind alte elemente `n list\& de e!emplu argumente
la funcie& AutoLISP-ul `[i termin\ instruciunile de la funcia
I prin ad\ugarea "alorilor argumentelor * [i + [i prin
returnarea num\rului `ntreg % ca fiind "aloarea listei.
Command: (+ 1 !
"
Command:
.n eemplu mai comple
AutoLISP e"aluea#\ elementele dintr-o list\ de la st`nga la
dreapta.
Dn multe ca#uri ar fi con"enabil pentru noi s\ urm\m
procesul de e"aluare din interior spre e!terior dec`t de la
dreapta spre st`nga. )e#ultatele s`nt de obicei acelea[i [i
adesea este mai u[or pentru noi s\ citim coduri AutoLISP cu
un grad de imbricare mai mare& lucr`nd din interior `n
e!terior. Dar nu acesta este modul `n care AutoLISP-ul
e"aluea#\ o list\. Dntotdeauna lucrea#\ de la st`nga la
dreapta.
Considerai aceast\ list\ format\ din trei elemente, ;I * ;I +
%HH
4uncia I
Atomul *
Lista ;I + %H
141246430.doc R.2.1 4/22/2013 25
AUTODESK, INC.
(+ 1 (+ 2 3))
Ka(u' &, 1 Ka(u' &, <
Ka(u' &, 5
Figura .. #-aluarea unei liste complexe
AutoLISP-ul e"aluea#\ aceast\ list\ folosind e!act aceea[i
metod\ ca `n e!emplul anterior.
;I ..
AutoLISP-ul caut\ primul element al listei a[tept`nd s\
g\seasc\ o funcie [i apoi o e"aluea#\. 4uncia returnea#\
"aloarea ei ca un set de instruciuni pentru AutoLISP.
(.. 1 ..
-rm`nd instruciunile funciei I& AutoLISP-ul afl\ "aloarea
celui de al doilea element al listei& de e!. primul argument
la funcia I, atomul *. Apoi `i memorea#\ "aloarea [i
continu\.
(.. .. (+ "! ..
AutoLISP-ul g\se[te "aloarea celui de al treilea element al
listei& cum ar fi al doilea argument la funcia I.
Al treilea element este el `nsu[i o list\. Cum afl\ AutoLISP-ul
"aloarea unei listeP Prin e"aluare. Cum e"aluea#\ AutoLISP-
ul o list\P
(.. .. (+ ..
9ai `nt`i e"aluea#\ funcia I [i `i prime[te instruciunile
( .. .. (.. ..
(.. .. (.. .. "! ..
Apoi g\se[te "aloarea argumentelor + [i %. (ermin`ndu-i
instruciunile de la funcia I din cadrul listei (+ "!, AutoLISP-
ul adaug\ "alorile [i returnea#\ re#ultatul care `n acest ca#
este nr. `ntreg 1.
26
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
<emaig\sind alte elemente `n list\& AutoLISP-ul termin\
instruciunile de la funcia I `n lista principal\ prin
ad\ugarea "alorii celor dou\ elemente la un loc [i return`nd
"aloarea :.
/unc#ii aritmetice
AutoLISP-ul include funcii interne pentru operaii aritmetice
ca, adunarea& sc\derea& `nmulirea [i `mp\rirea
I funcia de adunare
- funcia de sc\dere
K funcia de `nmulire
J funcia de `mp\rire
141246430.doc R.2.1 4/22/2013 27
AUTODESK, INC.
'emple
E'!resii arit&etice )4e'!resii A%to(I)*
1 + (+ 1 !
3 1 (3 1!
M ; (M ;!
; 0 (0 ; !
Tabelul .. Aritmetica AutoLISP
8rdinea argumentelor `n funciile de adunare [i de
`nmulire nu are importan\. .ste `ns\ important\ pentru
sc\dere [i `mp\rire.
(! 2 1)
Su*t$a)t t8&,...
... -$om t8&,.
Fig. / 0rdinea argumentelor in 1unctia de scadere
Dn ca#ul sc\derii& "aloarea celui de al doilea argument este
sc\#ut\ din "aloarea primului argument [i re#ultatul returnat
este "aloarea listei.
(/ 4 2)
D&K&d' t8&,...
... */ t8&,.
Fig. 2 0rdinea argumentelor in 1unctia de impartire
Dn ca#ul `mp\ririi& "aloarea celui de al doilea argument
este di"i#orul "alorii primului argument.
Iat\ c`te"a e!emple comple!e.
28
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'emple
E'!resii arit&etice )4e'!resii A%to(I)*
1 + ( 3 "! (+ 1 (3 "!!
(; + ! 3 1 (3 (+ ; ! 1!
; M ; 0 (0 (M ; ;! !
; 0 M " (M " (0 ; !!
Tabelul /. #xemple complexe de expresii aritmetice
)ecapitulare
AutoLISP-ul determin\ "aloarea unui obiect prin
evaluare.
AutoLISP-ul returnea#\ valoarea fiec\rui obiect pe
care il e"aluea#\.
9ajoritatea atomilor se e"aluea#\ pe sine.
Simbolurile se e"aluea#\ prin legare sau atribuire.
Listele s`nt e"aluate printr-un proces standard.
Primul element al oricarei liste ce poate fi e"aluat\
trebuie s\ fie o funcie%
AutoLISP-ul are funcii standard pentru operaii
aritmetice.
141246430.doc R.2.1 4/22/2013 29
AUTODESK, INC.
E+ERCITI,( 2- (I)TE )I ARIT/ETICA (I)TE(.R
Dn acest e!erciiu "ei,
Consolida cuno[tinele despre procesul de e"aluare
Dncepe scrierea e!presiilor AutoLISP folosind
listele
(ransforma e!presiile aritmetice `n e!presii
AutoLISP
(ransforma e!presiile AutoLISP `n e!presii
aritmetice
Partea I
*. 4olosii funcia I& -& J& [i K.
+. (ransformai e!presiile aritmetice `n e!presii AutoLISP.
%. Scriei r\spunsurile `n coloana din dreapta.
'emplu
.!presia `n notaia aritmetic\ standard,
1 + 2
.!presia `n AutoLISP,
( + 1 2 )
E'!resii arit&etice )4e'!resii
" + 16 + <
6 M 1<
15 3 16
1< 0 "
< + (16 M !
(< + 16! M
Tabelul 2. Traducerea expresiilor aritmetice
30
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Partea a II-a
*. (ransformai s-e!presiile `n e!presii aritmetice
+. Scriei r\spunsurile `n coloana din dreapta
'emplu
.!presia `n notaia aritmetic\ standard
;+ K 1H J ;0 - +H
.!presia `n AutoLISP
(/ (* 2 5) (- 7 2))
Tabelul 1'. Traducerea expresiilor AutoLISP
141246430.doc R.2.1 4/22/2013 31
s4e'!resii e'!resii arit&erice
(+ (+ < ;! (3 ; !!
(3 < (+ ; (3 " !!!
(0 D (3 (0 5 ! 1!!
(M (0 (+ ;! "!!
(3 < (0 5 (+ 1 !!!
(+ (0 (M "! (3 ; !! 1!
AUTODESK, INC.
Liste neevaluate
Ealoarea unei liste poate fi determinat\ `n unul din aceste
dou\ moduri, se e"aluea#\ lista sau se consider\ lista ca
atare.
4uncia AutoLISP Ouote este folosit\ pentru a returna o list\
sau un atom nee"aluat& adic\ la "aloarea ca list\.
4olosii Ouote ca fiind primul element `ntr-o list\ [i ad\ugai
un singur argument. Ealoarea listei "a fi "aloarea
nee"aluat\ a celui de al doilea element al listei& adic\
argumentul la Ouote.
'emplu
Aceast\ e!presie returnea#\ lista ;*.6 +.6 %.6H nee"aluat\.
Command: (Iuot' (1.6 .6 ".6!!
(1.6 .6 ".6!
Ce s-ar `nt`mpla dac\ AutoLISP-ului i s-ar cere s\ e"alue#e
listaP
De ceP
Command: (1.6 .6 ".6!
9
Opera#ia de legare a dou\ obiecte
Legarea este procesul prin care o "aloare este atribuit\
unui simbol definit de utili#ator sau unei "ariabile. Dn
AutoLISP& spunem c\ la un simbol sau la o "ariabil\ se leag\
o "aloare. Aceasta `nseamn\ `n limbajul 7ASIC c\ o "aloare
este egal\ de o "ariabil\ sau c\ o "aloare este atribuit\
unei "ariabile.
4uncia AutoLISP setO se folose[te pentru a lega un simbol
sau o "ariabil\ de o "aloare.
'emplu
Aceast\ e!presie leag\ simbolul ! de "aloarea 2.1.
Command: (,'tI > ;.<!
;.<
Command: H>
;.<
32
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Dn 7ASIC& aceea[i operaie ar putea fi e!primat\ astfel,
L.( ! Q 2.1
Cum func#ionea(\ func#ia set0
Ealoarea funciei setO este un set de instruciuni pentru
AutoLISP.
Aceste instruciuni ar putea fi e!primate astfel, Lua&i primul
argument ca atare *u+l e$alua&i G#si&i $aloarea celui de al
doilea argument Lega&i primul argument de $aloarea celui
de al doilea argument Returna&i $aloarea leg#rii ca fiind
$aloarea listei
'emplu
<otai returnarea "alorii acestei e!presii. Ealoarea listei
este "aloarea leg\turii stabilite pentru simbolul ! de c\tre
funcia setO.
Command: (,'tI > ;.<!
;.<
)ecapitulare
4uncia 0uote suprim\ procesul de e"aluare.
Legarea este procesul de atribuire a unei "alori la
o "ariabil\.
4unctia set0 este folosit\ pentru a lega o "ariabil\
de o "aloare.
141246430.doc R.2.1 4/22/2013 33
AUTODESK, INC.
E+ERCITI,( 3- E1A(,AREA (I)TE(.R )I (E5AREA 1ARIA6I(E(.R
Dn acest e!erciiu "ei,
Consolida cuno[tinele despre procesul de e"aluare
Determina dac\ o list\ poate fi e"aluat\ f\r\ erori
Consolida cuno[tinele despre procesul de legare
4olosi funcia setO pentru a lega "ariabile de "alori&
adic\ "ei atribui "alori "ariabilelor
Partea I
*. Determinai dac\ o list\ poate fi e"aluat\ sau trebuie
considerat\ ca atare.
+. Punei un semn `n coloana corespun#\toare
Tabelul 11. Determinarea situatiei in care o lista poate 1i e-aluata
34
s4e'!resii E3al%ari7 8%&ai 9ata
3alorii7
(+ 1 !
(+ 1 (+ "!!
(1.6 .6 ".6!
(Iuot' (1.6 .6
".6!!
(,'tI > ;.<!
(,'tI / (1.6 .6
".6!!
(/ (1 !!
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Partea a II-a
*. Legai "ariabila ! de "alorile din tabel
+. 4olosii funcia setO [i funcia Ouote dac\ este necesar
%. Eerificai "aloarea "ariabilei folosind CbangC pentru a-i
afla legarea curent\.
'emplu
Command: (,'tI > 1!
1
Command: H>
1
Command:(,'tI > (+ 1 "!!
5
Command: H>
5
Command: (,'tI > (Iuot' (; (+ < 5!!!
(; (+ < 5!!
Command:H>
(; (+ < 5!!
1aloare !entr%
'
1
;.<
At'>tA
(1.6 .6 ".6!
(+ 1 "!
(1 (+ "!!
Tabelul 1. Legarea lui x unor -alori di1erite
141246430.doc R.2.1 4/22/2013 35
AUTODESK, INC.
Aceast\ pagin\ este l\sat\ liber\ `n mod intenionat.
36
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
S-expresii AutoLISP `n cadrul comenzilor AutoA!
S-e!presiile AutoLISP pot fi folosite `n cadrul comen#ilor
AutoCAD.
Obiective
Dn acest capitol "ei studia,
Cum s\ folosii AutoLISP-ul `n cadrul comen#ilor
AutoCAD
Cum s\ returnai o "aloare din AutoLISP c\tre o
comand\ AutoCAD
)eturnarea unei valori `n linia de comand\
Ealoarea unei e!presii AutoLISP este trecut\ din AutoLISP `n
AutoCAD ca r\spuns la linia AutoCAD `n aciune.
Dac\ linia de comand\ este `n aciune& "aloarea unei
e!presii este pur [i simplu tiparit\ `n #ona liniei de
comand\.
Command: (,'tI > (+ ; 5!!
16
Command: H>
16
Aceast\ e!presie returnea#\ "aloarea di"i#\rii r\d\cinii
p\trate num\rului 16 prin num\rul real 3.
Command: (0 (,I$t <6.6! =.6!
6.CD<5C
Aceast\ e!presie returnea#\ "aloarea multiplic\rii
re#ultatului obinut prin adunarea lui +.1 cu :.% de +2.6.
Command: (M (+ .< 5."! ;.6!
11.
)eturnarea unei valori la o comand\ AutoCA&
Dac\ o comand\ AutoCAD este `n aciune& atunci e"aluarea
unei e!presii AutoLISP returnea#\ "aloarea e!presiei `n
AutoCAD. Ealoarea de"ine r\spunsul la linia curent\ a
comen#ii AutoCAD.
Dn acest e!emplu& comanda A))AM recepionea#\ ca num\r
de repetiii ale funciei& re#ultatul unei e!presii AutoLISP
pentru care :.6 se di"ide la 6.%1? cu alte cu"inte& nu [tim
dinainte c`te repetiii cuprinde unitatea 6.%1 la o distant\ de
:.6 unitai& deci rug\m AutoLISP-ul s\ calcule#e "aloarea
pentru noi [i s\ returne#e r\spunsul AutoCAD-ului.Deoarece
comanda din A))AM accept\ numai numere `ntregi [i nu
numere reale& "om folosi funcia AutoLISP fi! pentru a
rotunji cel mai apropiat num\r `ntreg.
141246430.doc R.2.1 4/22/2013 37
AUTODESK, INC.
'emplu
Dncepei un desen nou.
(ip\rii comen#ile [i e!presiile care urmea#\.
Command: (0 5.6 6."<!
1C.1;=
Command: (-&> 1C.1;=!
1C
Command: (-&> (0 5.6 6."<!!
1C
Command: (&n'
#$om %o&nt: 1,1
To %o&nt: <,<
To %o&nt: Ent'$
Command: a$$a/
S'(')t o*+')t,: I
S'(')t o*+')t,: Ent'$
R')tan.u(a$ o$ Po(a$ a$$a/ (R0P!: $
Num*'$ o- $o2, (3! 417: 1
Num*'$ o- )o(umn, (III! 417: (-&> (0 5.6 6."<!!
D&,tan)' *'t2''n )o(umn,: 6."<
AutoCAD crea#\ *0 elemente `n arra>.
(rebuie a"ut `n "edere faptul c\ o e!presie AutoLISP a fost
folosit\ interacti"& `n mijlocul unei comen#i AutoCAD& pentru
a calcula o "aloare ;`n acest ca# un num\r `ntregH care
ulterior este dat\ automat comen#ii `n acel punct special la
sec"ena de cerere a comen#ii.
38
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Dn e!emplul urmator& AutoLISP-ul calculea#\ m\rimea ra#ei
unei racord\ri.
'emplu
Dncepei un desen nou.
(ip\rii e!presiile [i comen#ile care urmea#\.
9\rimea ra#ei unei racord\ri este stabilit\ la +.+2.
Command: line
#$om %o&nt: 1,1
To %o&nt: 5,5
To %o&nt: Enter
Command: line
#$om %o&nt: 10,1
To %o&nt: 6,5
To %o&nt: Enter
Command: 9illet
Po(/(&n'0Rad&u,04S'(')t t2o (&n',7: r
Ent'$ -&(('t $ad&u, 41.67: "/ 28.0 12.5#
Command: 9illet
Po(/(&n'0Rad&u,04S'(')t t2o (&n',7: !ic: 9irst line
S'(')t ,')ond o*+')t: !ic: second line
Figura 1'. Doua linii cu o racordare la o raza de $%/.' 1.() sau .+
)ecapitulare
S-e!presiile pot fi folosite ca r\spunsuri la cererile
de comand\ AutoCAD.
AutoLISP returnea#\ "aloarea unei s-e!presii
folosite `n cadrul unei comen#i AutoCAD la
cererea comen#ii.

141246430.doc R.2.1 4/22/2013 39


AUTODESK, INC.
E+ERCITI,( 4- E+*RE)II A,T.(I)* I8 CA;R,( C./E8<I(.R A,T.CA;
Dn acest e!erciiu "ei,
4olosi funcii aritmetice [i funcia setO pentru a crea
"alori [i leg\turi simbol
4olosi "alorile [i simbolurile ca r\spunsuri la cererile
de comand\ AutoCAD
Instruc#iuni
*. Dncepei un desen nou.
+. Desenai un arc cu un ung$i inclus de * radian.
%. Desenai dou\ cercuri concentrice, unul cu o ra#\ de dou\
treimi pi [i unul cu o ra#\ la jum\tate din aceast\
"aloare.
2. Amplasai arcul `n jurul centrului cercurilor.
1. 4i!ai c`te o copie la fiecare *1 grade de rotaie.
Command: arc
C'nt'$04Sta$t %o&nt7: 5,5
C'nt'$0End04S')ond %o&nt7: c
C'nt'$: 3,5
An.('0L'n.t8 o- )8o$d04End %o&nt7: a
In)(ud'd an.(': "/ 180 !i#
Command: "set= ' "> !i "/ 2.0 3.0###
.6=;;
Command: circle
"P0P0TTR04C'nt'$ %o&nt7: 5,5
D&am't'$04Rad&u,7: $'
Command: circle
"P0P0TTR04C'nt'$ %o&nt7: 5,5
D&am't'$04Rad&u,7: "/ ' 2#
40
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Command: "set= ' "/ 360 15##
;
Command: arra
S'(')t o*+')t,: !ic: t?e arc
1 -ound
S'(')t o*+')t,: Enter
R')tan.u(a$ o$ Po(a$ a$$a/ (R0P!: !
C'nt'$ %o&nt o- a$$a/: 5,5
Num*'$ o- &t'm,: $'
An.(' to -&(( (+1))2, 31)2! 4"567:Enter
Rotat' o*+')t, a, t8'/ a$' )o%&'d9 4:7Enter
Figura 11. Arra* completat
141246430.doc R.2.1 4/22/2013 41
AUTODESK, INC.
Aceast\ pagin\ este l\sat\ liber\ `n mod intenionat.
42
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
"ipuri de date numerice
AutoLISP-ul are dou\ tipuri de date numerice, numere
`ntregi [i numere reale. 4uncia t>pe returnea#\ tipurile de
date ale unui obiect.
Obiective
Dn acest capitol "ei studia,
Diferenele dintre cele dou\ tipuri de date
numerice
Cum s\ determinai tipul de date al unui obiect
&eterminarea tipului de date ale unui obiect
4uncia AutoLISP t>pe se folose[te pentru a determina tipul
de date al unui obiect. t>pe cere un argument [i returnea#\
un simbol care indic\ tipul de date al argumentului.
De e!emplu& aceast\ e!presie returnea#\ tipul de date al
num\rului real *.6
Command: (t/%' 1.6!
REAL
*umere reale
AutoLISP-ul repre#int\ numerele reale `n "irgul\ mobil\&
dubl\ preci#ie cu cel puin *2 #ecimale. <u e!ist\ tipuri de
date care s\ repre#inte numere cu simpl\ preci#ie `n
AutoLISP. (oate numerele reale s`nt cu dubl\ preci#ie [i ele
s`nt repre#entate `n AutoLISP `n aceea[i manier\ ca `n
AutoCAD.
<umerele reale s`nt numere introduse cu punct #ecimal& de
e!emplu 2.1 sau *+%.21:.
Command: (,'tI > ;.<!
;.<
Pentru "alori cuprinse `ntre *.6 [i -*.61 (ero trebuie s\
precead\ punctul (ecimal& de e!emplu& 6.21 sau 6.*+%
sau -6.50:.
Command: (,'tI > 6.1"!
6.1"
Preci(ia afi[\rii si preci(ia intern\
Preci#ia implicit\ a afi[\rii unui num\r real `n AutoLISP este
de 1 #ecimale. )epre#entarea intern\ este `ntotdeauna
meninut\ cu cel puin *2 #ecimale semnificati"e de
preci#ie.
141246430.doc R.2.1 4/22/2013 43
AUTODESK, INC.
Dac\ este necesar\ afi[area sau tip\rirea "alorii unui num\r
real cu o preci#ie mai mare dec`t preci#ia de afi[are a
AutoLISP-ului& num\rul real poate fi transformat `ntr-un [ir
cu ajutorul funciei AutoLISP rtos [i apoi afi[at sau tip\rit cu
preci#ia de afi[are dorit\.
rtos cere p`n\ la % argumente, un num\r real& un num\r
`ntreg care repre#int\ unul dintre sistemele de unitai
AutoCAD [i num\rul de #ecimale pentru [irul care "a fi
returnat.
'emplu
Introducei e!presiile care urmea#\.
Legai simbolul ! de num\rul real 2.1
Command: "set= ' 4.5#
;.<
Eerificai-i "aloarea [i tipul de date
Command: $'
;.<
Command: "t!e '#
4olosii funcia rtos pentru a "i#uali#a "aloarea lui ! ca
num\r #ecimal cu o preci#ie de 5 #ecimale.
Command: "rtos ' 2 8#
A;.<6666666A
*umere `ntregi
<umerele `ntregi s`nt numere introduse f\r\ punct #ecimal.
<umerele `ntregi `n AutoLISP s`nt numere `ntregi cu semn
pe %+ bii cuprinse `ntre +.*20.25%.:25 [i I+.*20.25%.:20.
De[i AutoLISP-ul folose[te "alori de %+ bii& cele transferate
`ntre AutoLISP [i AutoCAD s`nt limitate la "alori de *: bii&
de e!emplu nu se poate transfera o "aloare mai mic\ de
-%+.0:5 sau mai mare de I%+.0:0 `n AutoCAD. Dac\ folosii
o "aloare care dep\[este aceste limite& putei folosi funcia
float pentru a o transforma `ntr-un num\r real `nainte de a o
transfera `n AutoCAD.
44
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'emplu
Introducei e!presiile care urmea#\.
Legai simbolul ! de un num\r `ntreg cu "aloarea de
:11%1.
Command: "set= ' 64435!
5<<"<
Eerificai-i "aloarea [i tipul de date.
Command: $'
5<<"<
Command: "9loat '#
5<<"<.6
Command: "9i' "9loat '##
5<<"<
Command: "t!e '#
INT
4olosii funciile float [i fi! pentru a returna "aloarea lui ! cu
tipuri de date diferite [i folosii funcia rtos pentru a imprima
"aloarea cu un format de #ece #ecimale.
Command: "t!e "9loat '##
REAL
Command- "t!e "9i' "9loat '###
INT
Command: "rtos "9loat '# 2 10#
A5<<"<.6666666666A
Conversia automat\ a numerelor `ntregi
AutoLISP-ul "a converti numerele `ntregi `n numere reale
ori de c`te ori "a `nt`lni ambele tipuri de date ca
argumente la funcie.
Dac\ dou\ numere `ntregi s`nt folosite ca argumente la
funcia de adunare I& "aloarea returnat\ a e!presiei este
un num\r `ntreg? totu[i& dac\ argumentele s`nt un num\r
real [i un num\r `ntreg& "aloarea returnat\ este e!primat\
printr-un num\r real.
'emplu
Aceast\ e!presie returnea#\ un num\r `ntreg.
141246430.doc R.2.1 4/22/2013 45
AUTODESK, INC.
Command: "@ 1 2#
"
Command: "t!e "@ 1 2##
INT
Aceast\ e!presie returnea#\ un num\r real.
Command: "@ 1.0 2#
".6
Command: "t!e "@ 1.0 2#
REAL
)ecapitulare
AutoLISP-ul are dou\ tipuri de date numerice,
numere `ntregi [i numere reale.
<umerele `ntregi au "alori de %+ bii `n AutoLISP.
<umai numerele `ntregi cu "alori de *: bii pot fi
transferate `ntre AutoLISP [i AutoCAD.
<umerele reale s`nt numere #ecimale cu dubl\
preci#ie.
<umerele reale s`nt reinute cu cel puin *2
#ecimale de preci#ie.
AutoLISP-ul "a con"erti un num\r `ntreg `ntr-un
num\r real c`nd le `nt`lne[te pe am`ndou\ `n
cadrul aceleia[i e!presii.
-n num\r real trebuie `ntotdeauna s\ aib\ o cifr\
care precede punctul #ecimal.
4uncia t2pe returnea#\ tipul de date al unui
obiect.
4uncia fi transform\ un num\r real `ntr-un num\r
`ntreg.
4uncia float transform\ un num\r `ntreg `ntr-un
num\r real.
46
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 5- A.(.)IREA 8,/ERE(.R I8TRE5I )I REA(E
Dn acest e!erciiu "ei,
Consolida cuno[tinele despre tipurile de date ale
numerelor `ntregi [i reale.
4olosi funcia setO pentru a lega "ariabile de "alori
cu tipuri de date numerice diferite.
Determina "aloarea returnat\ [i tipul de date
numerice ale unei e!presii AutoLISP
Partea I
*.Legai simbolurile de "alori diferite.
+.Introducei s-e!presia corespun#atoare `n linia de
comand\ AutoCAD.
si&0ol 3aloare
a 1
*
) "
> 1.6
/ .6
J ;.<
Tabelul 1". Legarea -ariabilelor de -alori numerice.
141246430.doc R.2.1 4/22/2013 47
AUTODESK, INC.
Partea aII-a
*.Determinai "aloarea returnat\ [i tipul de date pentru
fiecare e!presie.
+.Scriei r\spunsurile `n coloanele corespun#atoare
%.(rebuie mai `nt`i s\ efectuai prima parte a acestui
e!erciiu.
e'!resia4s ret%rnarea 3alorii ti! de data !entr%
3aloarea ret%rnata
(+ 1 !
(+ 1 .6!
(+ 1.6 .6!
(+ a *!
(+ a /!
(+ / J!
(-&> >!
(-(oat a!
(-&> J!
(-(oat (-&> J!!
(-&> (+ (-(oat a! (-(oat *!!!
(0 > /!
(-&> (0 > /!!
(-(oat (-&> (0 > /!!!
(+ (-&> (0 a /!! (-&> (-(oat a!!!
Tabelul 1+. 3alorile returnate si tipurile de date numerice ale expresiilor.
48
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Puncte AutoA! [i liste AutoLISP
AutoCAD-ul folose[te coordonatele carte(iene pentru a
descrie punctele +- [i %-dimensionale. AutoLISP-ul repre#int\
un punct sub forma unei liste de numere reale%
Obiective
Dn acest capitol "ei studia,
Cum repre#int\ AutoLISP-ul puncte
Cum s\ construii o list\ care repre#int\ un punct
folosind at`t constante c`t [i "ariabile.
Puncte AutoCA&
-n punct %-dimensional este format din trei numere& fiecare
a"`nd o "aloare independent\ care corespunde unei
distane de la originea sistemului de coordonate de-a lungul
a!elor =& M [i N. Imaginai-"\ punctul %-D sub forma a trei
cutii& fiecare conin`nd un num\r real.
Distance from origin
a!is # $ % a!is a!is
Figura 1. Punct "!d reprezentat prin trei coordonate
Luai& de e!emplu& punctul %-D *&+&%. AutoCAD-ul are o
gam\ larg\ de operatori pentru a descrie acest punct,
Introducerea `n coordonate absolute& relati"e [i polare&
ag\area de obiecte& filtre de coordonate etc. Dar
repre#entarea intern\ a punctului se reduce la o asociere
`ntre trei numere reale.
%-dimensional point *&+&%
Q *.6 Q +.6 Q %.6 # $ %
Figura 1". 3alori de!a lungul axelor de coordonate.
AutoLISP-ul repre#int\ un punct AutoCAD %-D sub forma
unei liste formate din trei numere reale& unde primul
141246430.doc R.2.1 4/22/2013 49
AUTODESK, INC.
element este "aloarea coordonatei =& al doilea "aloarea M [i
al treilea "aloarea N.
Punctul *&+&% e!primat sub forma unui obiect AutoLISP este
;*.6 +.6 %.6H
%-dimensional point *&+&% as an AutoLISP object
;*.6 +.6 %.6H
Figura 1+. Lsta AutoLISP sub 1orma unui punct AutoCAD
Construirea listelor de coordonate ale punctelor
)e#ultatul unei `ncerc\ri de a crea un obiect AutoLISP&
recunoscut de AutoCAD ca punct %-D& este clar, o list\
format\ din trei numere reale. Cum se poate construi o
astfel de list\P
.!ist\ dou\ funcii pentru construirea acestor obiecte, Ouote
[i list.
Construirea punctelor cu func#ia 0uote
A[a cum ai obser"at mai de"reme& funcia Ouote impiedic\
procesul de e"aluare pentru singurul ei argument [i
returnea#\ acest argument nee"aluat.
Construirea unei liste format\ din trei numere reale este un
proces simplu cu ajutorul funciei Ouote. De e!emplu&
e!presia ;Ouote ;*.6 +.6 %.6H returnea#\ "aloarea ;*.6 +.6
%.6H& o repre#entare AutoLISP "alid\ a unui punct AutoCAD.
50
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'emplu
Introducei e!presiile care urmea#\. Creai dou\ liste
formate din c`te trei numere reale [i folosii listele `n linia
de comand\ AutoCAD.
Command: "set= !t1 "=%ote "1.0 1.0 1.0###
(1.6 1.6 6.6!
Command: $!t1
(1.6 1.6 6.6!
Command: "set= !t2 "=%ote "5.0 5.0 0.0###
(<.6 <.6 6.6!
Command: $!t2
(<.6 <.6 6.6!
Command: line
#$om %o&nt: $!t1
To %o&nt: $!t2
To %o&nt: Enter
pt1 (1"0 1"0 0"0)
pt2 (5"0 5"0 0"0)
Figura 1(. Linie de la pt1 la pt
Construirea punctelor cu func#ia list
Ealoarea returnat\ a funciei list este o list\ format\ din
valorile argumentelor func#iei. 4uncia poate primi
oric`te argumente dorii.
list e"aluea#\ fiecare argument& unul dup\ altul [i le
memorea#\ "aloarea temporar. C`nd funcia list `[i
epui#ea#\ argumentele `[i compune "alorile argumentelor
din elemente `n cadrul unei liste [i returnea#\ lista.
141246430.doc R.2.1 4/22/2013 51
AUTODESK, INC.
'emplu
Introducei e!presiile care urmea#\.
Dn timp ce lucrai& nu uitai c\ numerele reale se e"aluea#\
pe sine& de e!emplu& Command, L2.1 returnea#\ 2.1.
4olosii funcia list pentru a returna o list\ format\ din trei
numere reale.
Command: "list 1.0 2.0 3.0#
(1.6 .6 ".6!
4olosii funcia setO pentru a lega simbolul pt la o list\ cu trei
numere reale.
Command: "set= !t "list 1.0 2.0 3.0##
(1.6 .6 ".6!
Command: $!t
(1.6 .6 ".6!
4olosii simbolul pt ca intrare la comanda AutoCAD ID [i
"erificai dac\ AutoCAD-ul recunoa[te "aloarea simbolului ca
punct "alid %-D.
Command: id
Po&nt: $!t
G11.6666 :1.6666 Z1".6666
Command:
(lst 1"0 2"0 3"0)
$'tu$n Ka(u'
(1"0 2"0 3"0)
'Ka(uat', to 1.6
'Ka(uat', to .6
'Ka(uat', to ".6
'Ka(uat' a(( a$.um'nt,
and $'tu$n a (&,t o- Ka(u',
Figura 1&. 3aloare returnata de 1unctia list
52
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Construirea punctelor din variabile cu func#ia list
Deoarece funcia list `[i e"aluea#\ argumentele& putei folosi
simboluri sau "ariabile ca argumente ale funciei list peJsau
`n loc de numere reale.
S\ admitem c\ a"ei trei "ariabile !& > [i # care s`nt legate de
numerele reale *.6& +.6 [i %.6.
Ealue of ! is *.6& or ! Q *.6
Ealue of > is +.6& or > Q +.6
Ealue of # is %.6& or # Q %.6
7ind ! to *.6
7ind > to +.6
7ind # to %.6
(set# $ 1"0)
(set# y 2"0)
(set# % 3"0)
Figura 1..Legarea -ariabilelor de numere reale cu 1unctia set4
Atunci e!presia ;list ! > #H "a returna aceea[i "aloare ca [i
e!presia ;list *.6 +.6 %.6H
(lst $ y % )
$'tu$n Ka(u'
(1"0 2"0 3"0)
'Ka(uat', to 1.6
'Ka(uat', to .6
'Ka(uat', to ".6
'Ka(uat' a(( a$.um'nt,
and $'tu$n a (&,t o- Ka(u',

Figura 1/. 3aloare returnata de 1unctia list
141246430.doc R.2.1 4/22/2013 53
AUTODESK, INC.
#xemplu
Introducei e!presiile care urmea#\.
Legai simbolurile !& > [i # de trei numere reale
Command: "set= ' 1.0#
1.6
Command $':
1.6
Command: "set= 2.0#
.6
Command: $
.6
Command: "set= B 3.0#
".6
Command: $B
".6
4olosii "ariabilele ca argumente la funcia list.
Command: "list ' B#
(1.6 .6 ".6!
9emorai lista `ntr-o "ariabil\ numit\ pt [i folosii-o `n cadrul
comen#ii AutoCAD.
Command: "set= !t "list ' B##
(1.6 .6 ".6!
Command: $!t
(1.6 .6 ".6!
Command: id
Po&nt: $!t
G11.6666 :1.6666 Z1".6666
Command:
54
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
)ecapitulare
AutoCAD-ul folose[te sistemul de coordonate
carte#iene %-D pentru a specifica punctele.
-n punct AutoCAD este repre#entat `n AutoLISP
sub forma unei liste de numere reale.
AutoLISP-ul repre#int\ un punct AutoCAD +-D sub
forma unei liste format\ din dou\ numere reale.
-n punct AutoCAD %-D este repre#entat sub forma
unei liste cu trei numere reale.
4uncia 0uote poate construi o list\ de numere din
constante.
4uncia list poate construi o list\ de numere din
constante sau din "ariabile.
141246430.doc R.2.1 4/22/2013 55
AUTODESK, INC.
E+ERCITI,( 6- ,TI(I<AREA (I)TE(.R ;E 8,/ERE CA *,8CTE A,T.CA;
Dn acest e!erciiu "ei,
Consolida cuno[tinele despre relaia dintre listele
AutoLISP formate din dou\ sau trei numere reale
[i punctele AutoCAD.
Lega "ariabile pentru a repre#enta coordonatele
unui punct.
Crea liste ale "ariabilelor coordonatelor pentru a
repre#enta puncte.
4olosi liste ca r\spunsuri la cererile de comand\
AutoCAD.
Partea I
*. Introducei e!presiile `n coloana din st`nga.
+. Scriei "aloarea returnat\ a fiecarei e!presii `n coloana
din mijloc.
%. Dac\ o legatur\ simbol apare `n cadrul e!presiei& scriei-
i "aloarea `n coloana din dreapta.
Tabelul 1(. Crearea punctelor din liste de numere
56
E'!resia 1aloarea e'!resiei )i&0ol de atri0%ire
(,'tI > 1.6! 1.6 > 1 1.6
(,'tI / .6!
(,'tI J 6.6!
((&,t 1.6 .6 6.6!
((&,t > / J!
(,'tI %t1 ((&,t > / J!!
H%t1
(Iuot' (<.6 5.6 6.6!!
(,'tI %t (Iuot' (<.6 5.6 6.6!!!
H%t
(Iuot' (> / J!!
(,'tI nota%o&nt (Iuot' (> / J!!!
Hnota%o&nt
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Partea a II-a
*. Dn acela[i desen din partea I introducei e!presiile care
urmea#\.
+. Creai o Linie [i un Cerc folosind "ariabilele legate de
liste formate din numere reale a[a cum s`nt
punctele pentru comen#ile AutoCAD.
%. Legaturile simbol se ba#ea#\ pe partea I a acestui
e!erciiu.
Command: line
#$om %o&nt: $!t1
To %o&nt: $!t2
To %o&nt: Enter
Command: circle
"P0P0TTR04)'nt'$ %o&nt7: 2!
#&$,t %o&nt on d&am't'$: $!t1
S')ond %o&nt on d&am't'$: $!t2
1&:&6
*&+&6
Figura 12. Linie si cerc 1olosind -ariabilele pt1 si pt
141246430.doc R.2.1 4/22/2013 57
AUTODESK, INC.
Aceast\ pagin\ este l\sat\ liber\ `n mod intenionat.
58
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Separarea listelor
A"`nd instruciuni pentru construirea listelor - funciile list [i
Ouote - ne-ar fi de folos s\ a"em [i c`te"a instruciuni pentru
separarea listelor.
Dac\ am a"ea un set instruciuni pentru e!tragerea fiec\rui
element dintr-o list\& atunci am putea reali#a mult mai u[or
programe AutoLISP.
Desenai un dreptung$i cunosc`nd numai
coordonatele colurilor opuse.
/\sii punctul de mijloc dintre oricare ar fi dou\
puncte ; nu numai punctele finale H ale unei
linii sau ale unui cerc.
Determinai dac\ un punct se afl\ `ntr-o anumit\
regiune +-D sau %-D a unui sistem de
coordonate carte#iane.
De "reme ce acest lucru necesit\ mai mult dec`t abilitatea
de a separa liste& separarea listelor este o cerin\
fundamental\ `n aceast\ operaie.
Obiective
Dn acest capitol "ei studia,
Cum s`nt repre#entate listele `n memoria
computerului sub forma unui arbore binar.
Cum s`nt listele repre#entate grafic.
Cum s\ folosii funciile car [i edr pentru separarea
listelor.
Cum s\ separai liste care repre#int\ puncte `n
AutoCAD [i cum s\ specificai puncte prin
crearea unor liste noi ba#ate pe punctele
e!istente.
Structura intern\ a unei liste
8 list\ AutoLISP este repre#entat\ `n memoria computerului
sub forma unui arbore binar. 8rice punct de pe arborele
binar unde poate ap\rea o ramificaie se nume[te nod.
<odul este una din unit\ile fundamentale pentru stocarea
memoriei `n AutoLISP.
Primul nod de sus al unui arbore binar se nume[te nodul
radacin\%
141246430.doc R.2.1 4/22/2013 59
AUTODESK, INC.
Structura unei liste AutoLISP este desf\cut\ nod cu nod&
`ncep`nd de la nodul r\d\cin\. 4iecare nod se desface `n
dou\ ramificaii repre#ent`nd diferite p\ri ale listei, primul
element al listei [i lista cu primul element `ndep\rtat.
$oot o- (&,t
-&$,t '('m'nt (&,t 2&t8out -&$,t '('m'nt
Figura '. 5odul radacina si primul set de rami1icatii pentru o lista.
De e!emplu prima ramificaie a listei ;*.6 +.6 %.6H ar putea
fi repre#entat\ astfel.
(1.6 .6 ".6!
1.6 (.6 ".6!
Figura 1. 5odul radacina si primul set de rami1icatii pentru lista $1.' .' ".')
60
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Subdi"i#area de-a lungul ramificaiei arborelui continu\ p`n\
ce partea dreapt\ a ramificaiei se termin\ cu lista goal\ sau
nil.
(1.6 .6 ".6!
1.6 (.6 ".6!
.6 (".6!
".6 (!
Figura . Arbore binar complet pentru lista $1.' .' ".')
AutoLISP-ul are apelati"e speciale pentru cele dou\ pari ale
ramificaiei listei. Primul element al listei se nume[te car-ul
listei. Lista f\r\ primul ei element se nume[te cdr-ul listei.
)amificaia st`ng\ este partea car a listei iar ramificaia
dreapt\ este partea cdr%
$oot o- (&,t
)a$ )d$
Figura ". Partile car si cdr de la nodul radacina al listei.
141246430.doc R.2.1 4/22/2013 61
AUTODESK, INC.
)epre#entarea unei liste cu trei elemente atomice prin car [i
cdr& c\reia `i este atribuit simbolul !& ar ar\ta dup\ cum
urmea#\. Dac\ o list\ format\ din unul sau mai multe
elemente se afl\ la oricare din nodurile arborelui& este
urmat\ de o ramificaie. Partea st`ng\ a ramificaiei este car-
ul listei la care se refer\ nodul iar partea dreapt\ este cdr-ul
listei la care se refer\ nodul.
$oot o- >
()a$ >! ()d$ >!
()a$ ()d$ >!! ()d$ ()d$ >!!
()a$ ()d$ ()d$ >!!! ()d$ ()d$ ()d$ >!!! o$ (!
Figura +. Reprezentarea completa a unei liste cu trei atomi ca elemente cu car
si cdr.
S\ combin\m graficul care repre#int\ arborele binar pentru
"alorile simbolului pt& care este legat de lista ;*.6 +.6 %.6H
cu ramificaiile car [i cdr ale arborelui.
$oot o- (&,t
()a$ o- (&,t! ()d$ o- (&,t!
()a$ ()d$ o- (&,t!! ()d$ ()d$ o- (&,t!!
()a$ ()d$ ()d$ o- (&,t!!! ()d$ ()d$ ()d$ o- (&,t!!!
(1"0 2"0 3"0)
1"0 (2"0 3"0)
2"0 (3"0)
3"0 ()
(&ar pt)
pt
(&dr pt)
(&ar (&dr pt)) (&dr (&dr pt))
(&ar (&dr (&dr pt))) (&dr (&dr (&dr pt)))
Figura (. 6ra1ic combinat pentru simbolul pt7 legat de lista $1.' .' ".').
62
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
)ecapitulare
Listele s`nt repre#entate `n memorie sub forma
unui arbore binar.
Primul element al listei este car-ul listei.
Lista dup\ ce primul element este `ndep\rtat
repre#int\ cdr-ul listei.
4unciile car [i cdr formea#\ ramificaiile car [i cdr
ale listei.
8 ramificaie cdr a unui arbore binar se termin\ `n
nil sau lista goal\.
141246430.doc R.2.1 4/22/2013 63
AUTODESK, INC.
E+ERCITI,( 7- 5RAA,( 1A(.RI(.R I8TR4,8 AR6.RE 6I8AR
Dn acest e!erciiu "ei,
Consolida cuno[tinele despre repre#entarea
listelor `n memorie.
Completa un grafic a "alorilor unei liste&
repre#entat sub forma unui arbore binar.
Instruc#iuni
*. (erminai graful complet al unui arbore binar pentru
"ariabila alst.
+. alst este legat\ de lista ;5.6 %.6 6.6H.
%. Ar\tai valoarea fiecarui nod din grafic.
(D.6 ".6 6.6!
D.6 9
9 9
9 9
Figura &. Completarea gra1ului binar
64
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 8- 5RAA,( E+*RE)II(.R I8TR4,8 AR6.RE 6I8AR
Dn acest e!erciiu "ei,
Consolida cuno[tinele despre separarea listelor [i
restabilirea elementelor lor indi"iduale.
Completa un grafic al e!presiilor care restabilesc
elementele unei liste& grafic repre#entat sub
forma unui arbore binar.
Instruc#iuni
*. (erminai graficul complet al unui arbore binar pentru
"ariabila !lst.
+. !lst este legat\ de lista ;*.6 ;+.6 %.6H 2.6H.
%. Ar\tai valoarea fiec\rui nod din grafic
2. Ar\tai epresia care restabile[te fiecare "aloare din
grafic.
1. 9arcai ramificaiile car [i cdr ale unui arbore.
:. 8bser"ai c\ elementele acestei liste s`nt formate din
doi atomi [i o list\.
141246430.doc R.2.1 4/22/2013 65
AUTODESK, INC.
(1.6 (.6 ".6! ;.6!
1.6 ((.6 ".6! ;.6!
(.6 ".6! 9
9 9
()a$ >(,t! ()d$ >(,t!
()a$ ()d$ >(,t!!
()a$ ()a$ ()d$ >(,t!!!
()d$ ()d$ >(,t!!
>(,t
9 9
9 9 9
9 9
9 9
Figura .. Completarea gra1icul binar
66
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
/unc#iile car si cdr
4unciile car [i cdr s`nt funcii non-destructi"e. <ici una
dintre ele nu afectea#\ legarea argumentului ei ceea ce
este un mod curios de a spune despre ;car !H c\ poate
returna o valoare diferit\ de dar nu va sc$imba
valoarea lui %
car
4uncia car returnea#\ primul element al listei. Singurul
argument al funciei car trebuie s\ fie o list\& iar lista trebuie
s\ aib\ unul sau mai multe elemente.
'emplu
Introducei e!presia care urmea#\. Legai "ariabila pt la o
list\ cu trei numere reale. 4olosii funcia car pentru a
returna coordonata ! `n list\ ;primul elementH [i legai
"ariabila ! de acea "aloare.
Command: "set= !t "list 1.0 2.0 0.0##
(1.6 .6 6.6!
Command: $!t
(1.6 .6 6.6!
Command: "car !t#
1.6
Command: "set= ' "car !t##
1.6
Command: $'
1.6
Command: $!t
(1.6 .6 6.6!
cdr
4uncia cdr returnea#\ o list\ [i elementele ei cu e!cepia
primului element? cu alte cu"inte `ndep\rtea#\ primul
element al listei `n afara "alorii lui returnate.
141246430.doc R.2.1 4/22/2013 67
AUTODESK, INC.
'emplu
Introducei e!presiile care urmea#\.
Legai "ariabila pt de o list\ cu trei numere reale.
Command: "set= !t "list 1.0 2.0 0.0##
(1.6 .6 6.6!
Command: $!t
(1.6 .6 6.6!
4olosii funcia cdr pentru a returna o list\ f\r\ primul
element [i legai "ariabila >#lst de acea "aloare.
Command: "cdr !t#
(.6 6.6!
Command: "set= Blst "cdr !t##
(.6 6.6!
Command: $lBlst
(.6 6.6!
Command: $!t
(1.6 .6 6.6!
Construirea unui dreptung$i cunosc`nd col#urile opuse
Dn figurile care urmea#\ cunoa[tem dou\ puncte din
colurile unui dreptung$i. Celelalte dou\ puncte se
calculea#\ prin combinarea cordonatelor = [i M ale
punctelor cunoscute `n di"erse moduri pentru a forma noi
perec$i de coordonate.
Nno2n %o&nt
Nno2n %o&nt
)a()u(at'd %o&nt
)a()u(at'd %o&nt
Figura /. 3alorile 8 si 9 pentru colturile unui dreptung:i.
68
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Aceast\ pagin\ este l\sat\ liber\ `n mod intenionat
141246430.doc R.2.1 4/22/2013 69
AUTODESK, INC.
4igura care urmea#\ repre#int\ coordonatele punctelor `n
funcie de "ariabilele = [i M.
G1,:1
G1,:
G,:1
G,:
6,6
Figura 2. 3alorile 879 pentru colturile dreptung:iului
Considerai c\ dou\ "ariabile s`nt legate de cele dou\ liste
formate din numere reale.
(setq pt1 (list 1.0 5.0 0.0))
(setq pt2 (list 10.0 1.0 0.0))
Acest tabel arat\ funciile necesare pentru returnarea
"alorilor =& M [i N din fiecare punct.
coordinate !t1 !t2
G ()a$ %t1! ()a$ %t!
: ()a$ ()d$ %t1!! ()a$ ()d$ %t!!
Z ()a$ ()d$ ()d$ %t1!!! ()a$ ()d$ ()d$ %t!!!
Tabelul 1&. #xpresiile 1olosite pentru returnarea coordonatelor 87 9 si ;.
70
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
4igura urm\toare e!prim\ punctele de coordonate sub
forma de e!presii AutopLISP& ba#ate pe cunoa[terea a dou\
puncte pt* [i pt+. Pentru a simplifica lucrurile& acestea s`nt
tratate ca puncte +-dimensionale.
%t1
((&,t ()a$ %t1! ()a$ ()d$ %t!!!
((&,t ()a$ %t! ()a$ ()d$ %t1!!!
%t
6,6
Figura "'. Calcularea colturilor unui dreptung:i
141246430.doc R.2.1 4/22/2013 71
AUTODESK, INC.
'emplu
Introducei e!presiile care urmea#\.
4olosii funcia list pentru a le combina `n alte dou\ puncte
ale dreptung$iului.
Command: "set= !t1 "list 1.0 5.0##
(1.6 <.6!
Command: $!t1
(1.6 <.6!
Command: "set= !t3 "list 10.0 1.0##
(16.6 1.6!
Command: $!t3
(16.6 1.6!
4olosii funciile car [i cdr pentru a e!trage "alorile = [i M ale
punctelor cunoscute.
Command: "car !t1#
1.6
Command: "car "cdr !t3##
1.6
Command: "list "car !t1# "car "cdr !t3###
(1.6 1.6!
Command: "set= !t2 "list "car !t1# "car "cdr !t3####
(1.6 1.6!
Command: $!t2
(1.6 1.6!
Command: "car !t3#
16.6
Command- "car "cdr !t1##
<.6
Command: "list "car !t3# "car "cdr !t1###
(16.6 <.6!
72
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Command: "set= !t4 "list "car !t3# "car "cdr !t1####
(16.6 <.6!
Command: $!t4
(16.6 <.6!
Desenai dreptung$iul folosind linia de comand\ AutoCAD.
Punctele s`nt +-dimensionale. Linia de comand\ AutoCAD "a
completa automat "aloarea N a punctului ba#at\ pe
"aloarea curent\ a in\limii ;ele"ationH.
Command: line
#$om %o&nt: $!t1
To %o&nt- $!t2
To %o&nt: $!t3
To %o&nt: $!t4
To %o&nt: close
1,<
1,1
16,<
16,1
6,6
%t1
%t %t"
%t;
Figura "1. Localizarea colturilor unui dreptung:i
)ecapitulare
4uncia car returnea#\ primul element al unei
listei.
4uncia cdr returnea#\ o list\ cu e!cepia primului
element.
.!ist\ funcii standard la care se face apel pentru
stabilirea componentelor =& M [i N ale unui punct
repre#entat printr-o list\.
141246430.doc R.2.1 4/22/2013 73
AUTODESK, INC.
E+ERCITI,( 9- (,CR,( C, (I)TE ;E *,8CTE
Dn acest e!erciiu "ei,
Consolida cuno[tinele despre funcii care separ\
liste [i funcii care crea#\ liste.
Crea puncte formate din liste [i le "ei lega de
"ariabile.
Crea puncte formate din liste ba#ate pe "alorile =
[i M din alte puncte formate din liste.
3atematica problemei
Dou\ puncte +-dimensionale [i punctul care se afl\ la
mijlocul distanei dintre ele pot fi e!primate logic `n funcie
de = [i M dup\ cum urmea#\.
pt1 = pt1x, pt1y
pt2 = pt2x, pt2y
midpt = mptx, mpty
Ealorile = [i M ale lui mpt pot fi e!primate aritmetic dup\ cum
urmea#\.

mptx = (pt1x + pt2x)/2
mpty = (pt1y + pt2y)/2
Instruc#iuni
Scriei un set de e!presii AutoLISP care e!ecut\ urmatoarele
comen#i `n ordine
*. Legai o "ariabil\ pt* de lista format\ din dou\ numere
reale *.1 [i 5.3.
+. Legai o "ariabil\ pt+ de o list\ format\ din dou\
numere reale 0.5 [i %.+.
%. Scriei un set de e!presii care leag\ "ariabila midpt de
punctul care se afl\ la mijlocul distanei dintre
punctele pt* [i pt+.
Dupa ce ai "erificat e!presiile `n editorul AutoCAD scriei-
le mai jos.
74
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
omenzi AutoA! si AutoLISP
Comen#ile AutoCAD pot fi c$emate direct din AutoLISP& s-
e!presiile AutoLISP pot fi folosite ca r\spunsuri la cererile de
comand\.
Obiective
Dn acest capitol "ei studia,
Cum s\ c$emai o comand\ AutoCAD direct din
AutoLISP.
Cum s\ folosii [irul AutoLISP& s-e!presiile constante
[i "ariabile ca r\spunsuri la cererile de comand\.
Sinta!a funciei AutoLISP command.
Cum s\ e"itai lucrul c`nd traducei un program
folosind comen#ile `n limba engle#\ indiferent
de "ersiunea AutoCAD.
/unc#ia command
4uncia command apelea#\ funciile AutoCAD din AutoLISP.
4uncia command accept\ un argument de tip [ir care
trebuie s\ fie numele unei comen#i AutoCAD [i oricare alte
argumente opionale care ar fi `n mod normal introduse `n
linia de comand\.
Dn ca#urile `n care este ne"oie de un return ca r\spuns la o
comand\& [irul CC este folosit ca argument. Aceasta este
repre#entarea AutoLISP a [irului nul pe care AutoCAD-ul o
interpretea#\ ca un return `n cadrul funciei apelati"e
command.
4uncia command accept\ [iruri [i "ariabile AutoLISP ca
argumente. De e!emplu aceste trei seturi de e!presii
trasea#\ aceea[i entitate Line.
/olosirea argumentelor de tip [ir
Command: ()ommand A(&n'A A1,1A A<,<A AA!
n&(
/olosirea argumentelor constante
Command: ()ommand A(&n'O (Iuot' (1.6 1.6!! (Iuot' (<.6 <.6!! AA!
n&(
/olosirea argumentelor variabile
Command: (,'tI %t1 ((&,t 1.6 1.6! %t ((&,t <.6 <.6!!
141246430.doc R.2.1 4/22/2013 75
AUTODESK, INC.
(<.6 <.6!
Command: ()ommand A(&n'A %t1 %tAA!
n&(
'fecte secundare
4uncia command returnea#\ `ntotdeauna nil. 'fectul
secundar al unei e!presii command este mult mai
interesant dec`t "aloarea returnat\. -n efect secundar al
unei e!presii AutoLISP repre#int\ o sc$imbare `n starea
programului care se produce datorit\ unei funcii de
apelare. .fectul secundar al apel\rii unei funcii setO este
pentru a crea un nou simbol de legatur\ sau pentru a atribui
o "aloare la o "ariabil\. .fectul secundar al apel\rii unei
funcii command este de a reali#a o comand\ AutoCAD care
modific\ fi[ierul grafic `ntr-un anume fel.
'emplu
Dncepei un desen nou.
Introducei e!presiile care urmea#\.
Legai dou\ "ariabile de dou\ puncte +-dimensionale.
Command: "set= !t1 "list 1.0 1.0##
(1.6 1.6!
Command: "set= !t2 "list 5.0 5.0##
(<.6 <.6!
Apelai la comanda LI<. [i folosii "ariabilele ca argumente.
Command: "co&&and ClineC !t1 !t2 CC#
n&(
1,1
<,<
Figura ". Linie de la 1.1 la (.(
76
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'emplu
Introducei e!presiile care urmea#\.
4olosii "ariabilele pt* [i pt+ de la e!erciiul anterior ca
puncte repre#ent`nd centrele a dou\ cercuri [i ca puncte
finale ale diametrului unui cerc.
Command: circle
"P0P0TTR04)'nt'$ %o&nt7: $!t1
D&am't'$04Rad&u,7: 0.5
Command: "co&&and CcircleC !t2 0.5#
Command: "co&&and CcircleC C2!C !t1 !t2#
Figura "". Cercuri de1inite de pt1 si pt
141246430.doc R.2.1 4/22/2013 77
AUTODESK, INC.
'emplu
4olosii "alorile lui pt* [i pt+ de la e!erciiul anterior.
Introducei e!presiile care urmea#\.
Desenai dou\ arce folosind pt* [i pt+ ca puncte finale [i o
"aloare a ra#ei de %.1.
Command: arc
C'nt'$04Sta$t %o&nt7: $!t1
C'nt'$0End04S')ond %o&nt7: e
End %o&nt: $!t2
An.('0D&$')t&on0Rad&u,04C'nt'$ %o&nt7: r
Rad&u,: 3.5
Command:"co&andDarcD !t2 DeD !t1 DrD 3.5#
Figura "+. Arce de1inite de pt1 si pt
78
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
4lobali(area comen(ilor
(oate "ersiunile AutoCAD-ului "or accepta comen#ile [i
opiunile din limbajul american [i engle#esc indiferent de
"ersiunea limbii surs\. Acest lucru permite utili#atorului s\
scrie o aplicaie AutoLISP care poate fi folosit\ `n toate
"ersiunile de limbaj ale AutoCAD-ului f\r\ a traduce funciile
command `n limba surs\.
4iecare "ersiune AutoCAD tradus\ `ntr-o anumit\ limb\
pastrea#\ un menu de opiuni [i comen#i din limba surs\. De
e!emplu "ersiunea german\ AutoCAD pastrea#\ un menu de
opiuni [i comen#i `n limba german\ astfel `ncit cei care o
folosesc `[i pot introduce comen#ile `n german\. (oate
"ersiunile AutoCAD indiferent de limba surs\ p\stre#\ un
menu de opiuni [i comen#i `n engle#a american\ `mpreun\
cu un menu `n limba surs\.
Pentru a folosi "ersiunea engle#easc\ a comen#ilor [i
opiunilor AutoCAD& prefaati [irul cu un caracter
RsubliniereS sau cu CTC. De e!emplu acesta este modul `n
care se apelea#\ la linia de comand\ `n toate "ersiunile
AutoCAD.
Command: ()ommand A?(&n'A A1.1A A<.1A A1.<A A?)A!
)ecapitulare
4unctia command permite apelarea comen#ilor AutoCAD
din AutoLISP.
5irul nul sau CC este tratat ca un return de c\tre funcia
command.
.!presiile AutoLISP s`nt acceptate ca r\spunsuri la cererile
de comand\ AutoCAD `n cadrul funciei command.
Argumentele funciei command s`nt numele comen#ii
AutoCAD urmate de r\spunsurile la cererile de comand\.
Caracterul subliniere poate fi prefaat `n cadrul unei
instruciuni de tip command `n engle#a american\ [i "a
funciona `n toate "ersiunile de limbaj ale AutoCAD-ului.
141246430.doc R.2.1 4/22/2013 79
AUTODESK, INC.
E+ERCITI,( 10- TRA8)A.R/AREA C./E8<I(.R I8 A,T.(I)*
Dn acest e!erciiu "ei,
(ransforma comen#ile AutoCAD script `n e!presii
AutoLISP.
Scrie e!presiile.
(esta e!presiile `n editorul AutoCAD.
Instruc#iuni
*. Dncepei un desen nou.
+. (ransformai comen#ile [i cererile AutoCAD `n e!presii
ale funciei command. Scriei r\spunsurile `n coloana
din dreapta.
%. (estai e!presiile `n editorul AutoCAD.
Comen(i si cereri
Command: (&n'
#$om %o&nt: 1,1
To %o&nt: <,<
To %o&nt: ENTER
Command: )&$)('
"P0P0TTR04C'nt'$ %o&nt7: ","
D&am't'$04Rad&u,7: 6.<
Command: )&$)('
"P0P0TTR04C'nt'$ %o&nt7: %
#&$,t %o&nt on d&am't'$: 1,1
S')ond %o&nt on d&am't'$: <,<
Command: a$)
C'nt'$04Sta$t %o&nt7: ,1
C'nt'$0End04S')ond %o&nt7: )
C'nt'$: 1,1
An.('0L'n.t8 o- )8o$d04End %o&nt7: (
L'n.t8 o- )8o$d: 1.;1;
'presii AutoLISP
(command "line" "1,1" "5,5" "")
o$
(command "line" '(1.0 1.0) '(5.0 5.0) "")
Tabelul 1.. Traducerea comenzilor in AutoLISP
80
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 11- A*E(,( C./E8<II *.(E(I8E ;I8 A,T.(I)*
Dn acest e!erciiu,
Eei folosi AutoLISP-ul pentru a e!ecuta o comand\
AutoCAD [i pentru a desena o nou\ entitate.
Eei apela comanda AutoCAD PLI<. din AutoLISP.
Eei scrie un set de e!presii AutoLISP pentru a
desena o polilinie rectangular\.
Instruc#iuni
*. Dncepei un desen nou.
+. Creai urmatoarele legaturi de "ariabile `n AutoCAD,
(setq pt1 (list 1.0 1.0 0.0))
(setq pt3 (list 11.0 8.0 0.0))
%. 4olosii "ariabilele pt* [i pt%.
2. Scriei un set de e!presii ce "or desena un dreptung$i&
folosind comanda CPol>lineC opiunea +-D `nc$is\ de
la punctul *&* la **&* la **&5 la *&5& folosind
"ariabilele pt* [i pt%.
1. 4olosii funciile car& cdr& list [i command dac\ este ne"oie.
:. (estai e!presiile `n AutoCAD.
0. Scriei-le mai jos.
141246430.doc R.2.1 4/22/2013 81
AUTODESK, INC.
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
82
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Selec]ia interactiv\ a punctelor
AutoLISP-ul dispune de funcii care opresc e"aluarea unei
e!presii [i permit utili#atorului s\ stoc$e#e puncte [i distane
folosind metodele standard AutoCAD de specificare a
acestor "alori. Punctul sau distana de"ine "aloarea
returnat\ a e!presiei.
Obiective
Dn acest capitol "ei studia,
Cum s\ cerei informaii utili#atorului `n cadrul unui
program AutoLISP.
Cum s\ cerei coordonatele unui punct
utili#atorului.
Cum s\ cerei o distan\ utili#atorului.
Cum s\ cerei utili#atorului "aloarea pe care o
dorii.
Cum s\ folosii puncte [i distane de la utili#ator `n
cadrul funciilor AutoLISP command [i comen#ilor
AutoCAD.
Puncte si distan#e
4uncia getpoint permite utili#atorului s\ selecte#e un punct
folosind orice metode standard AutoCAD de selectare a
punctelor, selectare grafic\& coordonate absolute& relati"e
sau relati"e polare& ag\area obiectelor& filtre de coordonate
sau accesarea ultimului punct.
4uncia getdist permite utili#atorului s\ specifice o distant\
prin introducerea "alorii sau seleciond dou\ puncte. .ste
acela[i mecanism folosit de fiecare comand\ AutoCAD care
cere utili#atorului o distan\.
getpoint
4uncia getpoint folose[te ser"iciile AutoCAD pentru a
permite utili#atorului s\ introduc\ un punct. Punctul selectat
de utili#ator repre#int\ "aloarea returnat\ a e!presiei.
AutoLISP-ul returnea#\ punctul sub forma unei liste format\
din trei numere reale, "alorile coordonatelor =& M [i N.
Command:(.'t%o&nt!
1,1,6
(1.61.66.6!
4uncia getpoint este folosit\ pentru a obine un punct de la
utili#ator `n cadrul unei e!presii AutoLISP. De e!emplu ar
putea fi ne"oie s\ cerei utili#atorului din cadrul unui
141246430.doc R.2.1 4/22/2013 83
AUTODESK, INC.
program AutoLISP& puncte care "or fi folosite apoi ca puncte
finale ale unei linii.
84
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Command: (,'tI %t1 (.'t%o&nt!!
1,1
(1.6 1.6 6.6!
Command: (,'tI %t (.'t%o&nt!!
<,<
(<.6 <.6 6.6!
Command: ()ommand O(&n'O %t1 %t PO!
Deoarece toate ser"iciile AutoCAD de specificare a
punctelor s`nt disponibile `n timpul apel\rii funciei getpoint&
nu s`ntei constr`ns s\ introducei coordonatele e!acte ale
punctului.
Command: (,'tI %t1 (.'t%o&nt!!
4%&)N a %o&nt 2&t8 t8' mou,'7
4(&,t o- t8$'' $'a(, $'tu$n'd7
Command: (,'tI %t (.'t%o&nt!!
4%&)N a %o&nt 2&t8 t8' mou,'7
4(&,t o- t8$'' $'a(, $'tu$n'd7
Command: ()ommand P(&n' P %t1 %t PO!
'emplu
Introducei e!presiile care urmea#\. Legai "ariabilele pt* [i
pt+ de puncte pe care le selectai cu mouse-ul `n cadrul
unei funcii de apelare getpoint [i folosii "ariabilele `ntr-o
comanda LI<..
Command: ( ,'tI %t1 (.'t%o&nt!!
%&)N a %o&nt
Command: (,'tI %t (.'t%o&nt!!
%&)N a %o&nt
Command: ()ommand P(&n'O %t1 %tOO!
'emplu
Introducei e!presiile care urmea#\. Legai "ariabila pt* de
un punct pe care `l selectai cu mouse-ul [i "ariabila pt+ de
un punct descris de coordonatele polare relative. 4olosii
"ariabilele `n linia de comand\.
Command: (,'tI %t1 (.'t%o&nt !!
%&)N a %o&nt
Command: (,'tI %t (.'t%o&nt!!
Q4;<
141246430.doc R.2.1 4/22/2013 85
AUTODESK, INC.
Command: ()ommand P(&n'O %t1 %tO P!
'emplu
Introducei e!presiile care urmea#\. Legai "ariabila pt* de
un punct pe care `l selectai cu mouse-ul `n cadrul unei
funcii de apelare getpoint [i folosii "ariabila `ntr-o comand\
CI)CL..
Command: (,'tI %t1 (.'t%o&nt!!
%&)N a %o&nt
Command: ()ommand P)&$)('O %t1 6.<!
getdist
4uncia getdist cere utili#atorului dou\ puncte. Ealoarea
returnat\ este un num\r real, distana %-D `ntre dou\
puncte.
Command: (,'tI d,t1 (.'td&,t!!
S')ond %o&nt: 2,2
1.;1;1
Command: Hd,t1
1. ;1;1
4uncia getdist prime[te un argument op#ional& punctul de
ba#\ de la care se m\soar\ distana. Dn acest ca# funcia
cere utili#atorului un singur punct.
Command: (,'tI %t1 ((&,t 1.6 1.6 6.6!!
(1.6 1.6 6.6!
Command: (,'tI d,t1 (.'td&,t %t1!!
,
1.;1;1
Command: Hd,t1
1.;1;1
86
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Figura "(. Functia getdist <drag= din punctul initial 1717'
'emplu
Introducei e!presiile care urmea#\. Legai "ariabila pt* de
un punct folosind coordonatele absolute [i "ariabila rad
de distana dintre dou\ puncte pe care o selectai cu
mouse-ul. 4olosii "ariabila `n comanda CI)CL..
Command: (,'tI %t1 (.'t%o&nt!!
<,<
(<.6 <.6 6.6!
Command: (,'tI $ad (.'td&,t!!
%&)N t2o %o&nt,
Command: ()ommand P)&$)('O %t1 $ad!
'emplu
Introducei e!presiile care urmea#\. Legai "ariabila cen de
un punct pe care `l selectai cu mouse-ul. Legai "ariabila
rad de distana dintre cen [i un punct pe care `l selectai cu
mouse-ul. 4olosii "ariabilele `n comanda CI)CL..
Command: (,'tI )'n (.'t%o&nt!!
%&)N a %o&nt
Command: (,'tI $ad (.'td&,t )'n!!
%&)N a %o&nt
Command: ()ommand P)&$)('O )'n $ad!
141246430.doc R.2.1 4/22/2013 87
AUTODESK, INC.
&ialog cu utili(atorul
4unciile getpoint [i getdist primesc [i argumente opionale,
un [ir de te!t care este afi[at `n #ona liniei de comand\ ca o
cerere pentru utili#ator.
Command: (.'t%o&nt PPo&nt:O!
Po&nt: 1,1
(1.6 1.6 6.6!
Dac\ getdist cere dou\ puncte& se cere automat al doilea
punct CSecond point,C.
Command: (.'td&,t P#$om %o&nt:O!
#$om %o&n: 1,1
(1.6 1.6 6.6!
S')ond %o&nt: ,
1.;1;1
Deoarece getdist prime[te dou\ cereri opionale& ordinea [i
tipul de date `n acest ca# s`nt importante. Dac\ primul
argument al funciei getdist este un [ir& acesta repre#int\ o
cerere. Dac\ primul argument este un punct& atunci se
poate proceda la cererea celui de-al doilea argument.
Command: (.'td&,t (Iuot' (1.6 1.6 6.6!! PTo %o&nt:O!
To %o&nt: ,
1.;1;1
)ecapitulare

4uncia getpoint returnea#\ un punct de la


utili#ator.
4uncia getdist returnea#\ o distan\ dat\ sub
forma unui num\r real de la utili#ator.
Ambele funcii primesc argumente opionale
pentru utili#ator.
-tili#atorul poate aplica oricare dintre metodele
AutoCAD de specificare a punctelor [i
distanelor la o cerere AutoLISP pentru un punct
sau o distan\.
88
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
141246430.doc R.2.1 4/22/2013 89
AUTODESK, INC.
E+ERCITI,( 12- CEREREA )I A.(.)IREA *,8CTE(.R ;E (A ,TI(I<AT.R
Dn acest e!erciiu "ei,
Scrie e!presiile care cer utili#atorului puncte [i
distane.
Scrie comen#ile de desenare `n AutoCAD.
Partea I
Instruc#iuni
Scriei un set de e!presii. (estai-le `n editorul AutoCAD
apoi scriei-le mai jos.
*. Cerei utili#atorului patru puncte.
+. Atribuii-le "ariabilelor pt* prin pt2.
%. (rasai o polilinie +-D `nc$is\ `ntre cele patru puncte.
Partea a II-a
Instruc#iuni
Scriei un set de e!presii. (estai-le `n editorul AutoCAD
apoi scriei-le mai jos.
*. Cerei utili#atorului un punct centru [i atribuii "aloarea
unei "ariabile numite cen.
+. Cerei utili#atorului distana de la "ariabila cen [i atribuii
"aloarea unei "ariabile numite rad.
%. Desenai un cerc cu centrul cen [i ra#a rad.
90
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Partea a III-a
Instruc#iuni
Scriei un set de e!presii. (estai-le `n editorul AutoCAD
apoi scriei-le mai jos.
*. Cerei utili#atorului dou\ puncte.
+. Atribuii-le "ariabilelor pt* [i pt+.
%. Desenai o polilinie +-D `nc$is\.
2. 4olosii pt* [i pt+ pentru colurile opuse ale poliliniei.
1. Calculai celelalte dou\ puncte din pt* [i pt+ folosind
funciile car& cdr [i list.
141246430.doc R.2.1 4/22/2013 91
AUTODESK, INC.
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
92
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
&unc]ii
Pe l`ng\ funciile interne& AutoLISP-ul permite crearea
funciilor definite de utili#ator& adic\ funcii ale caror seturi
de instruciuni [i nume au fost definite.
Obiective
Dn acest capitol "ei studia,
Definiia funciei AutoLISP.
Cum s\ creai propriile funcii AutoLISP.
Sinta!a funciei defun.
Cum s\ trimitei argumente unei funcii.
Cum returnea#\ funcia o valoare%
/unc#iile si evaluarea listelor
Considerai procesul de e"aluare al unei e!presii tipice
care folose[te o funcie intern\ AutoLISP.
(setq x 10)
AutoLISP-ul e"aluea#\ primul element unde se a[teapt\ s\
gasesc\ o funcie. Aici g\se[te subprogramul setO [i reface
leg\tura. Legarea lui setO repre#int\ un set de instruciuni
care arat\ cum trebuie facut\ procesarea. AutoLISP-ul
e"aluea#\ argumentele lui setO `n ordine [i termin\ prin
aplicarea instruciunilor de procesare la "aloarea
argumentelor.
)e#ultatul `n acest ca# este o "aloare returnat\& *6& pentru
e!presie [i un efect secundar al "ariabilei ! care este legat\
de *6.
setO este un subprogram [i instruciunile lui au fost
predefinite `n AutoLISP. -tili#atorul nu le poate sc$imba.
(otu[i este posibil\ crearea unor noi funcii care s\ e!ecute
orice instruciuni de procesare dorite de utili#ator.
Leg\turi noi se crea#\ prin folosirea subprogramului defun
care este funcia de definire%
141246430.doc R.2.1 4/22/2013 93
AUTODESK, INC.
Sintaa func#iei defun
Sinta!a funciei defun este puin diferit\ de cea a celorlalte
funcii folosite p`n\ acum.
(defun <sym name> (<arg list> / <local var>) <expr> ...)
defun cere obligatoriu dou\ argumente [i un num\r "ariabil
de argumente care urmea#\ dup\ primele dou\.
Argumentele func#iei defun
Primul argument al funciei este numele noii funcii de
definit. 4olosii un nume nou pe care l-ai creat& de
preferin\ unul care descrie aciunile funciei.
A6'*7I' <u folosii niciodat\ numele unei funcii sau a unui
simbol construite intern deoarece acesta se "a suprapune
peste definiia original\ [i `l "a face inaccesibil p`n\ lansai
AutoLISP-ul `n cadrul unei noi sesiuni AutoCAD.
Dn acest e!emplu& primul argument al funciei defun este
numele simbol m>fun care de"ine numele funciei definite de
utili#ator.
(defun myfun (<arg list> / <local var>) <expr> ...)
Al doilea argument cerut de defun este o list\ de
argumente cerute [i "ariabile locale. Cele dou\ tipuri de
argumente s`nt separate de o linie. Acum este suficient s\
folosii o list\ goal\%
.!emplul este e!tins pentru a include lista argumentelor
cerute [i a "ariabilelor locale.
(defun MYFUN ( ) <expr> ... )
Argumentele care urmea#\ dup\ argumentele cerute s`nt
e!presii de e"aluat c`nd se e!ecut\ funcia definit\ de
utili#ator. .le repre#int\ instruciunile de procesare care "or
fi e!ecutate c`nd funcia "a fi apelat\.
)eturnarea valorii unei func#ii
Ealoarea returnat\ a funciei definite de utili#ator este
"aloarea ultimei e!presii din corpul definiiei funciei.
94
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Dn urm\toarele e!emple& e!presiile "or fi ad\ugate corpului
funciei m>fun. Seturi diferite de e!presii "or da `nelesuri
diferite funciei m>fun precum [i "alori returnate diferite.
Dn acest e!emplu m>fun adaug\ dou\ numere [i returnea#\
r\spunsul.
(defun myfun ( )
(+ 1 2 )
)
'emplu
Introducei e!presiile care urmea#\. Definii funcia m>fun
apoi apelai-o.
Command: "de9%n &9%n "# "@1 2 ##
/EA,8
Command: "&9%n#
3
'emplu
Introducei e!presiile care urmea#\. Definii funcia m>fun
apoi apelai-o. m>fun "a returna radacina patrat\ a lui :+2&
rotunjit\ p`na la cel mai apropiat num\r `ntreg.
Command: (d'-un m/-un (! (-&> (,I$t 5;.6!!
@:#UN
Command: (m/-un!
;
'emplu
Introducei e!presiile care urmea#\. Definii funcia m>fun
apoi apelai-o. m>fun "a returna distana dintre dou\ puncte
alese de utili#ator.
Command: (d'-un m/-un (! (.'td&,t P#$om %o&nt: P!!
@:#UN
Command: (m/-un!
#$om %o&nt: %&)N a %o&nt
S')ond %o&nt: %&)N a %o&nt
141246430.doc R.2.1 4/22/2013 95
AUTODESK, INC.
Dn cele trei e!emple pe care le-ai parcurs& "aloarea
returnat\ a funciei m>fun este "aloarea returnat\ a ultimei
e!presii din corpul definiiei.
(defun myfun ()
(+ 1 2)
)
-un)t&on nam'
(&,t o- $'Iu&$'d a$.um'nt, and (o)a( Ka$&a*(',
*od/ o- d'-&n&t&on
Figura "&.Corp de expresii pentru o de1initie a 1unctiei
.!presii multiple pot fi introduse `n corpul definiiei funciei.
Ealoarea returnat\ a funciei este "aloarea returnat\ a
ultimei e!presii din corpul definiiei.
Dn acest e!emplu "aloarea returnat\ a funciei m>fun este
"aloarea e!presiei ;I% 2H
Command: (d'-un m/-un (! (+1 ! (+" ;!!
@:#UN
Command: (m/-un!
0
(defun myfun ()
(+ 1 2)
)
-un)t&on nam'
(&,t o- $'Iu&$'d a$.um'nt, and (o)a( Ka$&a*(',
*od/ o- d'-&n&t&on
(+ 3 4) $'tu$n Ka(u' o- -un)t&on
Figura "..>ltima expresie din corp este -aloarea returnata a 1unctiei.
96
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Argumentele unei func#ii
;defun m>fun ;Uarg listV J Ulocal "arVH Ue!prV... H
Lista argumentelor cerute dintr-o e!presie defun "\
permite s\ ad\ugai argumente la funciile de apelare.
Dn acest e!emplu funcia m>fun este definit\ cu un singur
argument solicitat, simbolul !. ! este folosit `n cadrul
e!presiei din corpul definiiei funciei m>fun, ;K ! *6H. 8rice
"aloare se utili#ea#\ ca argument la m>fun& aceasta "a
de"eni automat "aloarea lui ! din corpul e!presiei ;K ! *6H.
Command: (d'-un m/-un (>! (M > 16!!
@:#UN
16
Command: (m/-un 1!
6
Command: (m/-un !
Command:
(myfun 1)
(defun myfun ($)
(' $ 10)
)
u,'$ )a((, m/-un 2&t8 a$.um'nt o- 1
1 &, ma%%'d &nto a$.um'nt >
Ka(u' o- > *')om', 1 &n *od/ o- '>%$',,&on,
(defun myfun (1)
(' $ 10)
)
Figura "/. 3aloarea argumentului se a1la in corpul de expresii al 1unctiei.
141246430.doc R.2.1 4/22/2013 97
AUTODESK, INC.
'emplu
Introducei e!presiile care urmea#\. Creai o funcie numit\
add-one care solicit\ un argument. Ad\ugai unu la "aloarea
lui [i returnai. 4olosii funcia cu dou\ "alori diferite
.
Command: (d'-un add3on' (>! (+ > 1!!
ADD3ONE
Command: (add3on' 1!

Command: (add3on' ;!
<
'emplu
Introducei e!presiile care urmea#\. Creai o funcie numit\
dtr care cere un argument e!primat `n grade [i returnea#\
"aloarea transformat\ `n radiani. 4olosii funcia cu trei
"alori diferite.
4ormula aritmetic\ pentru transformarea gradelor `n radiani
pentru "aloarea d este,
(d / 180) * pi
Command: (d'-un dt$ (d! (M %& (0 d 1D6.6!!!
DTR
Command: (dt$ 1D6!
".1;1<=
Command: (dt$ "56!
5.D"1=
Command: (dt$ =6!
1.<C6D
'emplu
Introducei e!presiile care urmea#\. Creai o funcie care se
nume[te add-tGo care cere dou\ argumente& adaug\ "alorile
lor [i returnea#\. 4olosii funcia cu dou\ seturi de "alori
diferite.
Command: (d'-un add3t2o (> /! (+> /!!
ADD3TRO
Command: (add3t2o 1 !
"
Command: (add3t2o ; <!
=
98
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
)ecapitulare

<oile funcii e!terne s`nt create cu ajutorul funciei


defun.
(oate funciile returnea#\ o valoare.
4unciile s`nt definite f\r\ argumente sau cu un
num\r fi! de argumente solicitate.
Argumentele unei funcii s`nt e"aluate oriunde s-ar
afla `n corpul definiiei funciei.

141246430.doc R.2.1 4/22/2013 99


AUTODESK, INC.
E+ERCITI,( 13- ;EAI8REA ,8.R 8.I A,8CTII
6rebuie s\ completa#i partea a III-a a acestui
eerci#iu% Se vor face referiri la aceast\ parte `n
eerci#iile care urmea(\%
Dn acest e!erciiu "ei,
Consolida cuno[tinele despre cum s`nt create
funciile definite de utili#ator.
Scrie funcii cu argumente solicitate.
Scrie o funcie care apelea#\ o comand\ AutoCAD.
Partea I
Instruc#iuni
*. Creai o funcie numit\ times-tGo.
+. 4uncia solicit\ dou\ argumente.
%. 4uncia multiplic\ cele dou\ argumente [i returnea#\
"aloarea.
2. (estai-o `n AutoCAD.
1. Scriei-o mai jos.
Partea a II-a
Instruc#iuni
*. Creai o funcie numit\ rtd.
+. 4uncia solicit\ un argument.
%. 4uncia transform\ "aloarea argumentului din radiani `n
grade [i returnea#\ "aloarea.
2. (estai-o `n AutoCAD.
1. Scriei-o mai jos.
4ormula aritmetic\ de transformare din radiani `n grade
pentru "aloarea r este,
(r / pi) * 180
100
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Partea a III-a
Instruc#iuni
*. Creai o funcie numit\ rectangle.
+. 4uncia nu cere argumente.
%. Cerei utili#atorului dou\ puncte [i memorai-le sub form\
de "ariabile.
2. (rasai o polilinie +-D `nc$isa folosind punctele pentru
colurile opuse.
1. Calculai celelalte dou\ puncte cu ajutorul funciilor car&
cdr [i list.
:. (estai-o `n AutoCAD.
0. Scriei-o mai jos.
141246430.doc R.2.1 4/22/2013 101
AUTODESK, INC.
Aceast\ pagin\ a fost l\sat\ liber\ intenionat.
102
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
/unc#ii care ac#ionea(\ sub form\ de comen(i AutoCA&
8 funcie definit\ de utili#ator poate apela o funcie
AutoLISP command `n cadrul corpului definiiei ei. Apelarea
ei apare utili#atorului sub forma unei comen#i AutoCAD& o
comand\ ce poate fi apelat\ f\r\ ca aceasta s\ se afle `ntre
parante#e.
Obiective
Dn acest capitol "ei studia,
Cum s\ transformai o funcie AutoLISP definit\ de
utili#ator `ntr-o nou\ comand\ AutoCAD.
Cum s\ folosii simbolul pause `n cadrul funciilor
de tip command.
Cum s\ obinei "aloarea unei "ariabile de sistem
`n AutoLISP.
O noua comand\ 8OO3
Pentru a ilustra unele puncte sensibile ale definirii funciilor
[i comen#ilor AutoCAD "om crea o funcie simpl\ [i util\ care
combin\ comanda N889 cu opiunea Center& sc$imb`nd
factorul de afi[are cu +.
Considerai cererile pentru o operaie N889 C.<(.).
Command: Joom
A((0C'nt'$0D/nam&)0E>t'n,0L'-t0P$'K&ou,0Lma>0R&ndo204S)a('(G0GP7:
C'nt'$ %o&nt:
@a.n&-&)at&on o$ B'&.84)u$$'nt7:
A"em ne"oie de dou\ "alori pentru aceast\ funcie, noul
punct centru [i factorul curent de afi[are multiplicat cu +.
Eom obine cele dou\ puncte de la utili#ator prin
suspendarea evolu#iei func#iei [i "om obine factorul de
afi[are prin setarea "ariabilei de sistem EI.@SIN..
Simbolul +pause+
Putem obine un punct de la utili#ator prin legarea unei
"ariabile cu setO [i getpoint [i transferarea "ariabilei c\tre
comanda N889.
(setq pt (getpoint Center point: ))
(command zoom c pt ...)
Putem suspenda cererile de comand\ care "in din AutoCAD
pentru a permite utili#atorului s\ r\spund\ direct.
141246430.doc R.2.1 4/22/2013 103
AUTODESK, INC.
(command zoom c pause ...)
Simbolul special AutoLISP pause este folosit ca argument
pentru funciile tip command. pause suspend\ e"aluarea
e!presiei [i permite utili#atorului s\ raspund\ `n linia de
comand\ unde este introdus ;`n ca#ul ilustrat mai sus&
cererea pentru un nou punct de centru pentru afi[areH.
-ariabile de sistem AutoCA&
4uncia AutoLISP get"ar are un singur argument, numele
unei "ariabile de sistem e!primat\ sub forma unui [ir& adic\
`ntre g$ilimele. 4uncia returnea#\ "aloarea "ariabilei de
sistem.
Dn acest e!emplu funcia get"ar returnea#\ "aloarea
"ariabilei de sistem EI.@SIN..
Command: (.'tKa$ PK&'2,&J'O!
/unc#ia 8PL.S
A"em toate instruciunile necesare pentru definirea funciei
noastre.
8 modalitate de a suspenda comanda N889 [i de a
permite utili#atorului s\ selecte#e un nou punct
de centru.
8 modalitate de a obine factorul de afi[are curent
#oom.
'emplu
Introducei e!presiile care urmea#\. Creai o nou\ funcie
numit\ #plus [i folosii-o. #plus "a afi[a noul punct de centru
pe care `l selectai cu factorul +. defun #p
Command: (d'-un J%(u,(! !
17 (,'tI J%(u,38'&.8t (M6.< (.'tKa$ PK&'2,&J'O!!!
17 ()ommand PJoomO P)O %au,' J%(u,38'&.8t!!
ZPLUS
Command: (J%(u,!
A((0C'nt'$0D/nam&)0E>t'n,0L'-t0P$'K&ou,0Lma>0R&ndo2,04S)a('(G0GP!7:
C'nt'$ %o&nt: %&)N a %o&nt ;.
@a.n&-&)at&on o$ B'&.84=.66667:;.<.666666666
Command: n&(
Command:
/unc#ia C,8PL.S
8 sinta!\ special\ pentru numele funciei definite de
utili#ator ne permite s\ apel\m funcia sub o form\
prescurtat\ f\r\ s\ folosim parante#e. Aceast\ funcie apare
mai cur`nd sub forma unei comen#i AutoCAD dec`t sub
forma unei funcii.
104
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Dac\ numele unei funcii `ncepe cu litera C,& atunci funcia
poate fi apelat\ fie sub forma unei funcii sau sub forma
unei comen#i.
Dac\ numele unei funcii `ncepe cu caracterul C,& funcia
poate fi apelat\ pe linia de comand\ fie ca o funcie& fie ca o
comand\.
Dn acest e!emplu& funcia c,#plus este apelat\ ca o funcie
[i ca o comand\.
'emplu
Introducei e!presiile care urmea#\. Definii funcia c,#plus [i
apelai-o `n ambele moduri& ca o funcie [i ca o comand\.
Command: (d'-un): J%(u, (!
17 (,'tI J%(u,38'&.8t (M 6.< (.'tKa$ AK&'2,&J'A!!!
17 ()ommand AJoomA A)A %au,' J%(u,38'&.8t!!
C:ZPLUS
Command: ():J%(u,!
A((0C'nt'$0D/nam&)0E>t'nt,0L'-t0P$'K&ou,0Lma>0R&ndo204S)a('(G0GP!7:)
C'nt'$ %o&nt: %&)N a %o&nt
@a.n&-&)at&on o$ B'&.8t 4.<66667: 11<666666666
Command: n&(
Command:J%(u,
AllJCenterJD>namicJ.!tentsJLeftJPre"iousJEma!J@indoGJUS
cale;=J=PHV,c Center point, pic' a point
9agnification or Beig$t U3.6666V, 2.1666666666
Command,nil
Command,
)ecapitulare

Simbolul pause permite utili#atorului s\ r\spund\ la


o cerere dintr-o comand\ AutoCAD apelat\ de
funcia AutoLISP de tip command.
4uncia getvar stabile[te "aloarea "ariabilei de
sistem.
Prefa`nd numele unei funcii definit\ de utili#ator
cu C, se crea#\ o nou\ comand\ AutoCAD

141246430.doc R.2.1 4/22/2013 105


AUTODESK, INC.
106
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 14- CREAREA ;E 8.I C./E8<I A,T.CA;
6rebuie s\ completa#i partea I a acestui eerci#iu1
deoarece se vor face referiri la aceast\ parte [i `n alte
eerci#ii%
Dn acest e!erciiu "ei,
Crea comen#i noi `n AutoCAD din funcii AutoLISP.
9odifica o funcie e!istent\ dintr-un e!erciiu
anterior [i o "ei transforma `ntr-o comand\.
Partea I
*. 9odificai funcia rectangle din partea a III-a a e!erciiului
**-*.
+. Definii funcia ca c,rectangle.
%. Scriei funcia mai jos.
2. (estai-o `n AutoCAD.
Partea a II-a
*. Definii o funcie numit\ c,#minus.
+. Aceasta trebuie s\ fac\ acelea[i lucruri ca [i funcia
c,#plus& dar sc$imbai factorul de afi[are de la + la
*J+.
%. Scriei funcia mai jos.
2. (estai-o `n AutoCAD.
141246430.doc R.2.1 4/22/2013 107
AUTODESK, INC.
&i[ierele pro'ram AutoLISP
Putei crea funcii definite de utili#ator introduc`nd codul
corespun#\tor `n linia de comand\. Pentru definirea
funciilor [i pentru succesiuni comple!e de s-e!presii este
adesea mult mai eficient s\ folosii un editor de te!t [i s\
scriei funciile sau e!presiile `ntr-un fi[ier de tip te!t cu o
e!tensie .lsp Codul din fi[ier poate fi `nc\rcat `n editorul
grafic cu ajutorul funciei AutoLISP load.
Obiective
Dn acest capitol "ei studia,
Cum s\ scrieti fi[iere tet care conin programe
AutoLISP.
Cum s\ `ncarca#i fi[ierele program AutoLISP `n
editorul grafic AutoCAD.
Cum lucrea#\ funcia AutoLISP load%
Cum s\ recunoa[tei cele mai frec"ente mesa9e de
erori `n timpul inc\rc\rii.

'valuarea la `nc\rcarea fi[ierului


4uncia load cite[te pe r`nd e!presiile dintr-un fi[ier [i
e"aluea#\ fiecare e!presie `n parte. Ealoarea returnat\ de
funcia load este "aloarea ultimei e!presii care a fost
e"aluat\.
4uncia load cere un singur argument de tip [ir, numele
fi[ierului lsp de `nc\rcat.
(load filename).
Dac\ ad\ugai codul pentru funcia c,rectangle la numele unui
fi[ier rectanglsp putei `nc\rca fi[ierul `ntr-o sesiune de
editare grafic\ f\r\ s\
reintroducei `ntreaga definiie a funciei
*O6: 4uncia AutoLISP load este diferit\ de comanda
AutoCAD L8AD.
108
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
C\utarea fi[ierului
AutoLISP-ul "a c\uta fi[ierul rectanglsp `n directorul curent
`mpreun\ cu alte directoare menionate `n specificarea de
cale a bibliotecii AutoCAD-ului. Dac\ g\se[te fi[ierul& `l "a
`nc\rca `n editor.
Pentru lista de directoare aflate `n specificarea de cale a
bibliotecii AutoCAD consultai descrierea funciei findfile `n
capitolul 2 din AutoLISP Programmer's Reference Manual
3esa9e de eroare la `nc\rcare
Dac\ AutoLISP-ul afi[ea#\ un mesaj de eroare la `nc\rcarea
fi[ierului& trebuie s\ editai fi[ierul [i s\ corectai eroarea.
Lista erorilor AutoLISP [i a cau#elor acestora se afl\ `n
Appendi! D din AutoLISP Programmer's Reference Manual..
8 list\ succint\ a erorilor pe care este posibil s\ le `nt`lnii la
`nc\rcare este dat\ mai jos. 9ajoritatea mesajelor indic\
erori tipice de programare AutoLISP cum ar fi,
8rtografierea gre[it\ a funciilor sau a numelor
simbol
(ipuri gre[ite de argumente la funcie
Parante#e ne`mperec$eate
/$ilimele ne`mperec$eate
141246430.doc R.2.1 4/22/2013 109
AUTODESK, INC.
/esaFe de eroare E'!licatii
)anSt o%'n -&(' -o$ &n%ut 33 LOAD -a&('d #&,&'$u( num&t &n #un)t&a (oad nu %oat' -&
.a,&t., ,au ut&(&Jato$u( nu a$' a))', ,a
)&t'a,)a -&,&'$u(.
'>t$a $&.8t %a$'n S3a d't')tat una ,au ma& mu(t' %a$ant'J'
d$'a%ta &n %(u,.
&n,u--&)&'nt ,t$&n. ,%a)' Nu '>&,ta ,%at&u ,u-&)&'nt %'nt$u a a$an+a ,&$u(
t'>t ,%')&-&)at, d' o*&)'& dato$&ta .8&(&m'('(o$
n'&m%'$')8'at'.
ma(-o$m'd (&,t O (&,ta )&t&ta d&nt$3un -&,&'$ ,3a t'$m&nat
%$'matu$. C'a ma& -$')K'nta )auJa ',t'
&m%'$')8'$'a .$',&ta a %a$ant'J'(o$ ,au a
.8&(&m'('o$..
Tabelul 1/. ?esa@e de eroare la incarcare
)ecapitulare
Programele AutoLISP pot fi stocate `n fi[iere te!t
e!terne.
4i[ierele AutoLISP au e!tensia .lsp.
4uncia load `ncarc\ un program AutoLISP `n
AutoCAD.
AutoLISP-ul "\ atrage atenia printr-un mesaj de
eroare dac\ are o problem\ la `nc\rcarea
fi[ierului.
110
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 15- I8CARCAREA ,8,I AI)IER ),R)A A,T.(I)*
Dn acest e!erciiu "ei,
Crea un fi[ier program AutoLISP.
Dnc\rca fi[ierul `n editorul grafic .
4olosi comanda definit\ de fi[ier.
Instruc#iuni
*. 4olosii editorul te!t pe staia d"s. de lucru. )ugai
instructorul s\ "\ ajute s\ configurai editorul de te!t
`n sistemul d"s.
+. Creai un fi[ier de te!t numit rectanglsp
%. Sal"ai fi[ierul `n directorul de lucru.
2. Dnc\rcai fi[ierul `n editorul grafic.
1. 4olosii comanda ).C(A</L..
(defun c:rectangle ()
(setq pt1 (getpoint "\nFirst corner: "))
(setq pt3 (getpoint "\nOther corner: "))
(command
"_.pline"
pt1
(list (car pt1) (car (cdr pt3)))
pt3
(list (car pt3) (car (cdr pt1)))
"c"
)
)
Command: "load Crectan2C#
C:RECTANGLE
Command: rectan2le
#&$,t )o$n'$:
141246430.doc R.2.1 4/22/2013 111
AUTODESK, INC.
Su'estii de pro'ramare optim\ a (unc]iilor )
Acest capitol tratea#\ o serie de aspecte referitoare la
interfaa [i operaiile interne ale funciilor C,& dar aceste
re#ultate pot fi aplicate la orice definiie a unei funcii nu
numai la cele a c\ror nume `ncepe cu C,.
Obiective
Dn acest capitol "ei studia,
Cum se `ntrerupe e!ecuia unei funcii definite de
utili#ator.
Cum s\ anulai afi[area cererilor de comand\
AutoCAD `n timpul e!ecut\rii unei comen#i
AutoLISP.
Conceptul de alocare [i de variabile locale [i
globale.
Diferena dintre "ariabilele locale [i globale.
Cum s\ declarai [i s\ folosii "ariabilele locale `n
cadrul definiiei funciei.
)eturnarea [irului vid de la o func#ie C,
Ealoarea ultimei e!presii din corpul de e!presii care
urmea#\ dup\ argumentele cerute [i "ariabilele locale din
definiia unei funcii este `ntotdeauna returnat\ ca "aloarea
funciei. Cred c\ ai obser"at c\ funcia c,rectangle returnea#\
nil. Acest lucru este e"ident deoarece o funcie de apelare
de tip command este ultima e!presie din corpul definiiei
funciei c,rectangle [i funcia de tip command returnea#\
`ntotdeauna nil.
4uncia AutoLISP prin* "a "i#uali#a un [ir vid pe ecran dac\
prin* este ultima e!presie din definiia funciei. De e!emplu&
aceast\ "ersiune modificat\ a comen#ii ).C(A</L. nu
"i#uali#ea#\ nil la cererea de comand\ dup\ ce aceasta a fost
e!ecutat\.
112
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
( defun c:rectangle ()
(setq pt1 (getpoint "\nFirst corner: "))
(setq pt3 (getpoint "\nOther corner: "))
(command
"_.pline"
pt1
(list (car pt1) (car (cdr pt3)))
pt3
(list (car pt3) (car (cdr pt1)))
"c"
)
(prin1)
)
Anularea afi[\rii cererilor de comand\ AutoCA&
Implicit AutoCAD-ul dublea#\ toate comen#ile [i opiunile `n
#ona liniei de comand\& inclu#ind [i pe cele emise de un
program AutoLISP.
Eariabila de sistem C9D.CB8 poate suprima aceast\
Ccomand\ dubl\C.
Dn aceast\ "ersiune modificat\ a funciei c,rectangle&
C9D.CB8 este setat\ pe off la startul rutinei iar la ie[ire este
setat\ pe on.
(defun c:rectangle ()
(setq old_cmdecho (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq pt1 (getpoint "\nFirst corner: "))
(setq pt3 (getpoint "\nOther corner: "))
(command "pline"
pt1
(list (car pt1) (car (cdr pt3)))
pt3
(list (car pt3) (car (cdr pt1)))
"c"
)
(setvar "CMDECHO" old_cmdecho)
(prin1)
)
Alocarea, 3oduri de legare a unei variabile
AutoLISP-ul folose[te o sc$em\ dinamic\ de alocare.
Alocarea unei "ariabile este determinat\ `n timpul
funcion\rii de ordinea apel\rii funciei [i de declaraiile de
"ariabil\.
Eariabilele s`nt legate `n dou\ moduri, global [i local
8 "ariabil\ global\ este o "ariabil\ a c\rei legare ;sau
atribuire a unei "aloriH a fost f\cut\ cu ajutorul funciilor set [i
setO [i nedeclarat\ local\ `n funcie. Eariabilele globale pot fi
"i#uali#ate sub forma de liste pe ecran folosind funcia de
apelare ;familia de atomi 6H.
141246430.doc R.2.1 4/22/2013 113
AUTODESK, INC.
Eariabilele globale s`nt accesibile tuturor funciilor definite
de utili#ator at`t pentru citire c`t [i pentru
scriere.Eariabilele globale s`nt adesea folosite pentru
CcomunicareC `ntre programele AutoLISP. De e!emplu
Programul * "a seta o condiie `ntr-o "ariabil\ global\ pe
care Programul o "a "erifica `nainte de a aciona.
8 "ariabil\ local\ este o "ariabil\ a c\rei legare a fost facut\
cu ajutorul funciilor set [i setO `n cadrul unei funcii a c\rei
"ariabil\ a fost declarat\ local\ sau cu ajutorul declaraiei
sub forma unui argument cerut la o funcie.
Eariabilele locale `[i menin leg\tura numai `n conte!tul
unei funcii `n care au fost declarate ca fiind locale. .le `[i
pierd leg\tura odat\ cu ie[irea funciei.
Legarea unei "ariabile globale se poate sc$imba `n ca#ul
aloc\rii unei funcii `n care o "ariabil\ cu acela[i nume a fost
declarat\ local. La ie[irea funciei& "ariabila este legat\ din
nou de "aloarea global\ original\.
-n set de s-e!presii ilustrea#\ aceste concepte.
'emplu
Citii e!plicaiile [i introducei s-e!presiile adec"ate.
9ai `nt`i "ei lega global "ariabila ! de "aloarea *.
Command: "set= ' 1#
1
Command: $'
1
Apoi "ei defini o funcie localTarg care `l declar\ pe ! ca
argument. Legarea lui ! se poate sc$imba local `n cadrul
aloc\rii funciei localTarg [i legarea global\ "a fi restabilit\ la
ie[irea funciei localTarg .
Command: "de9%n localGar2 "'# "!rint '# "> ' '##
LOCAL?ARG
Command: "localGar2 2#

;
Command: $'
1
Apoi "ei defini o funcie localT"ar care `l declar\ pe ! ca
"ariabil\ local\. Legarea lui ! se poate sc$imba local `n
cadrul aloc\rii funciei localT"ar [i legarea global\ "a fi
restabilit\ la ie[irea funciei localT"ar.
Command: "de9%n localG3ar "/ '# "set= ' 3# "!rint '##
LOCAL?LAR
Command: "localG3ar#
114
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
"
Command: $'
1
Eei defini apoi o funcie globalT"ar unde "ariabila ! nu a fost
definit\ nici ca argument nici ca "ariabil\ local\? de aceea
sc$imbarea `n interiorul leg\turii se "a face global& `n afara
alocarii funciei globalT"ar.
Command: "de9%n 2lo0alG3ar "# "set= ' 4# "!rint '##
GLOBAL?LAR
Command: "2lo0alG3ar#
;
Command: $'
;
/olosirea variabilelor locale
4uncia c,rectangle a fost pe deplin clarificat\. Dn acest
e!emplu& "ariabilele oldTemdec$o& pt* [i pt+ s`nt declarate ca
fiind locale la funcie? deci ele nu pot intra `n conflict cu
"ariabilele globale care au acela[i nume [i nici cu "ariabilele
cu acela[i nume care pot fi g\site `n cadrul altor funcii.
(defun c:rectangle (/ old_cmdecho pt1 pt3)
(setq old_cmdecho (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq pt1 (getpoint "\nFirst corner: "))
(setq pt2 (getpoint "\nOther corner: "))
(command "pline"
pt1
(list (car pt1) (car (cdr pt3)))
pt3
(list (car pt3) (car (cdr pt1)))
"c"
)
(setvar "CMDECHO" old_cmdecho)
(prin1)
)
Declaraia "ariabilelor locale se face de obicei dup\ un
program care a fost "erificat [i pus la punct `ntruc`t
declaraia face dificil\ sau c$iar imposibil\ e!aminarea
"alorilor lor `n ca#ul `n care funcia abortea#\ sau face ce"a
nea[teptat din cau#a unei erori `n cod.
4lobali(area variabilelor de sistem
Eariabilele de sistem apelate de funcia AutoLISP set"ar nu
se traduc niciodat\ din limba engle#\ `n limba utili#atorului.
Cererile de apelare a funciei set"ar funcionea#\ `n toate
"ersiunile AutoCAD-ului f\r\ s\ necesite traducerea numelui
"ariabilei de sistem din limba engle#\ `n limba utili#atorului.
141246430.doc R.2.1 4/22/2013 115
AUTODESK, INC.
Eariabilele de dimensiune se traduc numai `n linia de
comand\ pentru dimensionare.
)edefinirea comen(ii
Putei `nlocui comen#ile AutoCAD e!istente cu comen#i
AutoLISP care au acela[i nume.
-tili#atorul poate apela o comand\ AutoCAD prin prefaarea
numelui comen#ii prin caracterul punct ;.H& de
e!emplu& .LI<.& indiferent dac\ comanda a fost nedefinit\.
.ste bine s\ prefaai numele unei comen#i apelate de
funcia AutoLISP de tip command printr-un punct ;.H sau prin
subliniere ;pentru a "\ asigura c\ funcionea#a `n toate
limbileH.
S`nt dou\ etape de parcurs pentru `nlocuirea comen#ii
AutoCAD cu o comand\ AutoLISP care are acela[i nume.
4olosii comanda -<D.4I<. pentru a ani$ila o
comand\ AutoCAD pentru sesiunea de editare
curent\.
Creai o funcie AutoLISP care are acela[i nume ca
[i comanda AutoCAD [i prefaai-o cu c,.
Putei redefini o comand\ AutoCAD folosind comanda
).D.4I<..
'emplu
Introducei e!presiile care urmea#\.
Ani$ilai comanda AutoCAD LI<..
Command: %nde9ine
Command nam': line
Dnlocuii-o cu o comand\ AutoLISP cu acela[i nume care
desenea#\ o linie segment. Apelai "ersiunea engle#easc\ a
comen#ii AutoCAD LI<. din cadrul funciei AutoLISP.
Command: "de9%n c- line "# "co&&and H.G line H !a%se !a%se HD##
C- (I8E
Apelai comanda LI<..
116
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Command: line
.3 (&n' #$om %o&nt: !ic: a !oint
To %o&nt !ic: a !oint
To %o&nt:
Command: nil
)edefinii comanda AutoCAD.
Command: rede9ine
Command nam': line
141246430.doc R.2.1 4/22/2013 117
AUTODESK, INC.
)ecapitulare
Putei ie[i dintr-o funcie apel`nd prin; sau princ
care repre#int\ ultima e!presie `n corpul
definitiei funciei.
Eariabila de sistem C9D.CB8 poate suprima
afi[area cererilor de comand\ AutoCAD.
AutoLISP-ul utili#ea#\ o sc$em\ dinamic\ de
alocare.
Eariabilele globale s`nt accesibile pentru toate
funciile.
Eariabilele locale s`nt accesibile numai `n
conte!tul funciilor `n care au fost declarate.
Putei folosi "ariabile locale `n cadrul funciilor
pentru a e"ita posibilitatea unor conflicte `ntre
"ariabile cu acelea[i nume din alte funcii.
Eariabilele de sistem apelate de funcia set"ar nu
se traduc niciodat\ din engle#\.
Comen#ile AutoCAD pot fi `nlocuite cu comen#i
AutoLISP care au acela[i nume& folosind
comanda -<D.4I<..
Comanda AutoCAD "a fi `ntotdeauna apelat\ c`nd
numele comen#ii este prefaat printr-un punct?
de e!emplu .LI<.& indiferent dac\ comanda a
fost ani$ilat\.
Prefaai `ntotdeauna numele unei comen#i cu un
punct ;.H sau prin caracterul subliniere ; T H `n
ca#ul funciei de tip command.
Prefaai `ntotdeauna opiunea de comand\ prin
caracterul subliniere ; T H `n ca#ul funciei de tip
command.
118
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 16- A,8CTIA ;E *R.5RA/ARE .*TI/A
Dn acest e!erciiu,
Eei consolida cuno[tinele cu pri"ire la ordonarea
funciilor C,& inclu#`nd ie[irea funciilor&
dublarea cererii de comand\ [i declaraia
"ariabilei locale.
Eei modifica fi[ierul rectanglsp pentru a introduce
noi concepte din acest capitol.
Eei crea un nou fi[ier te!t cu o funcie modificat\.
Partea I
'tape de lucru
*. 9odificai fi[ierul rectanglsp
+. Ad\ugai funcia de ie[ire imediat\.
%. Anulai ecoul cererii de comand\.
2. Declarai "ariabilele corespun#\toare ca "ariabile locale.
1. Dnc\rcai& lansai [i testai programul dup\ ce ai f\cut
modific\rile.
Partea a II-a
'tape de lucru
)escriei funcia c,#plus de la sf`r[itul capitolul *+
`ntr-un fi[ier numit "pluslsp
4olosii funcia getpoint pentru a obine noul punct
de centru a ecranului.
Anulai ecoul din opiunile [i cererile de comand\
N889.
Declarai toate "ariabilele local.
Introducei funcia de ie[ire.
Dnc\rcai& demarai [i testai programul dup\ ce ai
f\cut modific\rile.
*O6A 4unciile /.(!!! nu pot fi folosite `n cadrul
e!presiilor funciilor command? de e!emplu& ;command ClineC
;getpointHH nu este permis\.
141246430.doc R.2.1 4/22/2013 119
AUTODESK, INC.
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
120
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
"este lo'ice [i de e'alitate
Programele AutoLISP pot face un salt pe ba#a "alorii unei
epresii test.
Obiective
Dn acest capitol "ei studia,
Cum se poate sc$imba controlul desf\[urarii
unui program pe ba#a unei epresii test%
Cum s\ folosii testele de egalitate [i testele
logice ca e!presii test.
Diferena dintre simbolul t [i simbolul nil%
Cum s\ determinai tipul de date al unui obiect.
)amificarea programului
Aceasta diagrama simpl\ ilustrea#\ principiul ramific\rii
programului.
Set "alue of !
! Q CBello& Gorld.CP
7ranc$ to function ;>H 7ranc$ to function ;#H
t or true
nil or false
Figura . Rami1icarea programului bazata pe testul de conditie
Dn aceast\ diagram\& dac\ "aloarea "ariabilei ! este egal\ cu
[irul de tip te!t CBello& GorldC& atunci programul se "a
ramifica `n e!presia > [i "a continua? dac\ nu & se "a
ramifica `n e!presia # [i "a continua.
4unciile care reali#ea#\ testele condi#ionale s`nt folosite
pentru ramificaii `n interiorul programelor AutoLISP. Cele
dou\ funcii de ba#\ pentru testele condiionale s`nt,
f
&ond
141246430.doc R.2.1 4/22/2013 121
AUTODESK, INC.
-nele "alori sau seturi de "alori s`nt testate cu if sau cond
iar programul se ramific\ conform re#ultatelor testului.
AutoLISP-ul dispune de o "arietate de funcii care testea#\
"alorile pe ba#a anumitor criterii sau unele "alori pe ba#a
celorlalte. Dn acest capitol ne concentr\m atenia asupra
unora dintre cele mai utili#ate funcii de acest tip.
(& )& *
e#ual
and
or
not
lo+and
t si nil
Dn AutoLISP& simbolul t este ec$i"alentul pentru Cade"\ratC
`n orice test condiional. Simbolul nil este ec$i"alentul lui
CfalsC.
Dac\ o e!presie AutoLISP nu se e"aluea#\& atunci e!presia
este nil sau fals\. Dac\ o e!presie nil este folosit\ `ntr-un test
condiional& atunci "a fi e!ecutat\ o ramificaie pentru o
condiie fals\.
Dac\ o e!presie AutoLISP e"aluea#\ orice altce"a dec`t nil&
atunci e!presia este t sau ade"\rat\. Dac\ o e!presie t este
folosit\ `ntr-un test condiional& atunci "a fi e!ecutat\
ramificaia pentru o condiie ade"arat\.
t [i nil se e!clud mutual. Dac\ o e!presie este t& atunci nu
poate fi nil. Dac\ o e!presie este nil& atunci nu poate fi t.
122
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 8R 17- .6IECTE(E )I E+*RE)II(E *.T AI T )A, 8I(
Dn acest e!erciiu,
Eei `n"\a s\ determinai dac\ "aloarea returnat\ a
unei funcii este t sau nil.
Instruc#iuni
*. Dntr-un desen nou& desenai o entitate de tip linie.
+. Introducei e!presiile `n coloana din st`nga a tabelului.
%. Determinai dac\ e!presiile s`nt t sau nil.
2. Eerificai c\sua adec"at\ din tabel.
E'!resie t nil
(,'tI 'nam' ('ntn'>t!!
H'nam'
(,'tI 'nam' ('ntn'>t 'nam'!!
H'nam'
(+ 1 !
(3 1 1!
(!
()ommand A'$a,'A A(a,tA AA!
()ommand AuA!
Tabelul 12. #xpresiile pot 1i t sau nil
141246430.doc R.2.1 4/22/2013 123
AUTODESK, INC.
/unc#ii care testea(\ egalitatea
4uncia Q are dou\ sau mai multe argumente cu orice tip de
date. Aceast\ funcie "erific\ dac\ toate argumentele au
"alori ec$i"alente. Dac\ da& funcia returnea#\ t? dac\ nu&
returnea#\ nil.
De e!emplu& aceast\ e!presie "erific\ dac\ "alorile num\rului
real 2.6 [i e!presia ;I +.6 +.6H s`nt ec$i"alente
Command: (1 ;.6 (+ .6 .6!!
T
Aceast\ e!presie "erific\ dac\ 2.6 este ec$i"alent cu
e!presia ;I *.1 +.6H
Command: (1 ;.6 (+ 1.< .6!!
n&(
4uncia U "erific\ dac\ primul ei argument este numeric mai
mic dec`t al doilea argument.
Command: (4 ;< <6!
T
4uncia eOual este `n esen\ aceea[i cu funcia Q.
'erci#iu
Introducei e!presiile care urmea#\.
Legai dou\ "ariabile de "alori numerice. 4olosii "ariabilele
ca argumente la c`te"a funcii [i "erificai re#ultatele.
Command: "set= ' 1#
1
Command: "set= 1.5#
1.<
Eerificai dac\ ! este mai mic dec`t >.
Command: "I ' #
T
Eerificai dac\ ! este mai mare dec`t >.
Command: "J ' #
n&(
124
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Eerificai dac\ > este mai mare sau egal cu *&1.
Command: "JK 1.5#
T
Eerificai dac\ ! este mai mic sau egal cu >.
Command, <=> 2?
(
Eerificai dac\ ! nu este egal cu >.
Command: "/K ' #
T
Acest tabel arat\ funciile care "erific\ egalitatea `n
AutoLISP.
A%nctie Test
1 E.a( )u
01 Nu ',t' '.a( )u
4 @a& m&) d')&t
41 @a& m&) ,au '.a( )u
7 @a& ma$' d')&t
71 @a& ma$' ,au '.a( )u
m&nu,% @a& m&) d')&t J'$o
J'$o% E.a( )u J'$o
'Iua( E.a( )u
'I Au a)''a,& ('.atu$a
Tabelul '. Functii de egalitate
141246430.doc R.2.1 4/22/2013 125
AUTODESK, INC.
/unc#ii care verific\ tipul de date
AutoLISP-ul dispune de c`te"a funcii care "erific\ tipul de
date ale unui simbol sau e!presii.
A%nctie Test
ATO@ E,t' a$.um'ntu( un atom9
LISTP E,t' a$.um'ntu( o (&,ta9
BOUNDP E,t' a$.um'ntu( ('.at d' o Ka(oa$'9
NULL E,t' a$.um'ntu( n&(9
NU@BERP E,t' a$.um'ntu( un numT$9
Tabelul 1. Functii care testeaza tipul de date
'emplu
Introducei e!presiile care urmea#\.
Legai trei "ariabile de trei tipuri de date diferite, un simbol&
un num\r real [i o list\.
Command: "set= ' La0c#
ABC
Command: "set= 1.0#
1.6
Command: "set= B L"1 2 3##
(1 "!
4olosii "ariabilele ca argumente la funcii care testea#\
tipul de date. .!aminai re#ultatele funciilor.
S`nt aceste "ariabile atomiP
Command: "ato& '#
T
Command: "ato& #
T
Command: "ato& B#
n&(
S`nt aceste "ariabile listeP
Command: "list! '#
n&(
Command: "list! #
n&(
126
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Command: "list! B#
T
Combinarea func#iilor t2pe cu func#iile +>+
Putei "erifica tipul de date al unui obiect `n AutoLISP
folosind fie funcia Q& fie funcia eOual cu funcia t>pe.
'emplu
Introducei e!presiile care urmea#\.
Legai dou\ "ariabile cu tipuri de date diferite, un num\r
`ntreg [i un num\r real.
Command: "set= ' 1#
1
Command: "set= 1.5#
1.<
4olosii funciile t>pe [i Q pentru a "erifica tipul lor de date.
Command: "K "t!e '# LI8T#
T
Command: "e=%al "t!e '# LREA(#
n&(
Command: "e=%al "t!e # LREA(#
T
141246430.doc R.2.1 4/22/2013 127
AUTODESK, INC.
/unc#ii logice
.!ist\ c`te"a funcii de test logic `n AutoLISP. Dn acest
capitol "om studia patru dintre cele mai importante funcii,
not& and& or [i logand.
/unc#ia not
4uncia not solicit\ un argument. Dac\ argumentul este nil&
atunci e!presia returnea#\ t? dac\ nu& aceasta returnea#\
nil.
4uncia not este o funcie a c\rei "aloare returnat\ este
opusul argumentului ei. Dai-i nil [i "a returna t. Dai-i t [i "a
returna nil.
.!emplu
Command: (not n&(!
T
Command: (not t!
n&(
/unc#ia and
4uncia and solicit\ unul sau mai multe argumente. Dac\
unul dintre argumente este nil& ea returnea#\ nil. Dac\ toate
argumentele s`nt t & atunci returnea#\ t.
4uncia and opre[te procesarea de `ndat\ ce g\se[te un
argument nil. -nele programe s`nt scrise `n acord cu acest
comportament. De e!emplu& putei fi siguri c\ programul nu
"a g\si o instruciune `ntr-o list\ de argumente ale funciei
and dac\ nici unul dintre argumentele anterioare nu este nil.
'emplu
Command: (and 1 "!
T
Command: (and 1 n&(!
n&(
/unc#ia or
4uncia or solicit\ unul sau mai multe argumente. Dac\ unul
dintre argumente este t& funcia returnea#\ t. Dac\ toate
argumentele s`nt nil& atunci funcia returnea#\ nil.
4uncia or opre[te procesarea de `ndat\ ce g\se[te un
argument t. -nele programe s`nt scrise `n conformitate cu
128
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
acest comportament. De e!emplu& putei fi siguri c\
programul nu "a g\si o instruciune `ntr-o list\ de
argumente ale funciei or dac\ nici unul dintre argumentele
anterioare nu este t.
'emplu
Command: (o$ 1 "!
T
Command: (o$ 1 n&(!
T
Command: (o$ n&( n&( n&(!
n&(
/unc#ia logand
4uncia logand are dou\ sau mai multe argumente care ar
trebui s\ fie numere `ntregi. 4uncia returnea#\ un num\r
`ntreg.
4uncia logand reali#ea#\ o comparaie A<D bit cu bit a
biilor din argumentele care s`nt numere `ntregi. Dac\ un
bit este setat la "aloarea Cade"\ratC `n toate argumentele
funciei logand& atunci acel bit este setat la "aloarea
Cade"\ratC [i `n "aloarea returnat\.
<umerele `ntregi 0& % [i *1 s`nt repre#entate `n bii `n
tabelul de mai jos.
Intre2 1 0it 2 0it 4 0it 8 0it 16 0it
C G G G
" G G
1< G G G G
Tabelul . Aiti setati la -aloarea Bade-aratB in trei numere intregi.
Aceast\ e!presie "a returna un num\r `ntreg `n care toi
biii care s`nt setai la "aloarea Cade"\ratC `n toate cele trei
argumente "or fi setai la "aloarea Cade"\ratS. Dn acest
ca#& biii pentru "alorile * [i + "or fi returnai ca Cade"\ratC
de c\tre e!presie& deoarece s`nt singurii bii setai
Cade"\ratC `n toate cele trei argumente.
Command: ((o.and C 1< "!
"
141246430.doc R.2.1 4/22/2013 129
AUTODESK, INC.
4uncia logand "a fi de folos atunci c`nd "a fi folosit\
`mpreun\ cu funciile Centit2 accessC mai t`r#iu `n acest
curs& `n special cu "alorile binare cum ar fi codurile grupului
06 D=4 pentru Pol>lines [i 7loc' Definitions .
130
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
)ecapitulare
)amificarea unui program depinde de "aloarea unui
test condi#ional.
(oate obiectele [i e!presiile din AutoLISP s`nt t sau nil.
AutoLISP dispune de o "arietate de funcii care
testea#\ tipul de egalitate [i tipul de date ale
obiectelor [i e!presiilor.
Putei testa tipul e!act de date al unui obiect
combin`nd funciile t>pe [i Q.
4unciile logice not& and [i or "erific\ dac\ una sau mai
multe e!presii s`nt t sau nil.
4uncia logand reali#ea#\ o comparaie A<D bit cu bit a
unei liste de numere? aceasta funcie "a fi de ajutor
`n combinaie cu funciile de tip entit2 access mai
t`r#iu.
141246430.doc R.2.1 4/22/2013 131
AUTODESK, INC.
'presii test [i epresii condi#ionale
4unciile de egalitate [i funciile logice s`nt folosite
`n epresii test. .!presiile test s`nt folosite `n
e!presii condiionale [i iterati"e formate din
funcii ca if [i G$ile. .le "erific\ dac\ e!ist\ o
anumit\ condiie [i arat\ AutoLISP-ului ce funcie
s\ e!ecute care depinde de condiie& sau de
re#ultatul testului.
*O6: 8rice atom& simbol sau e!presie poate fi folosit\ ca
e!presie test deoarece orice obiect `n LISP are o "aloare,
fie nil& fie altce"a.
Obiective
Dn acest capitol "ei studia,
Cum s\ folosii epresiile condi#ionale pentru a
face salt la diferite seturi de e!presii `n cadrul
programului AutoLISP
Sinta!a funciilor if [i cond.
Cum s\ folosii funcia progn pentru a e!ecuta
multiple s- e!presii `n cadrul funciei if.
'presii condi#ionale
.!presiile condiionale controlea#\ desf\[urarea unui
program AutoLISP. 4olosim e!presiile test pentru a "erifica
dac\ o anumit\ condiie e!ist\& iar re#ultatul e!presiei test
este folosit pentru a comuta e!presia condiional\. .!presia
condiional\ poate opta pentru e!ecuia programului `n
oricare din cele c`te"a direcii posibile. 4iecare direcie "a
a"ea un set de e!presii de e"aluat `n AutoLISP.
Cele mai folosite e!presii condiionale `n AutoLISP s`nt
funciile if [i cond.
/unc#ia if
4uncia if are dou\ argumente obligatorii [i un al treilea
argument care este opional.
Dac\ "aloarea primului argument este t& adic\ oricare `n
afar\ de nil& AutoLISP-ul e"aluea#\ al doilea argument.
Dac\ "aloarea primului argument este nil& AutoLISP-ul sare
peste al doilea argument. Dac\ e!ist\ cel de-al treilea
argument opional& AutoLISP-ul il e"aluea#\.
132
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Simplific`nd puin lucrurile& funcia if ar ar\ta cam a[a,
(if
(I_return_true)
(do_this)
(else_do_this)
)
'emplu
Introducei e!presiile care urmea#\,
Legai "ariabila ! de o "aloare a lui *. Legai "aloarea lui >
ba#at\ pe "aloarea lui !.
Command: (,'tI > 1!
1
Command: (&- (1 > 1! (,'tI / 1! (,'tI / 6!!
1
Command: H/
1
Legai "ariabila ! de o "aloare a lui 6. Legai "ariabila >
ba#at\ pe "aloarea !.
Command: (,'tI > 6!
6
Command: (&- (1 > 1! (,'tI / 1! (,'tI / 6!!
6
Command: H/
6
141246430.doc R.2.1 4/22/2013 133
AUTODESK, INC.
E+ERCITI,( 18- RA/IAICAREA *R.5RA/,(,I A.(.)I8; A,8CTIA IA
Dn acest e!erciiu ,
Eei folosi funcia if.
Eei scrie o funcie pentru a comuta S<AP pe on sau
off `n funcie de setarea curent\.
'tape de lucru
*. Dntr-un fi[ier nou& folosii editorul de te!t pentru a
crea o funcie numit\ c,snaptog.
+. Introducei codul de mai jos.
%. 4uncia ar trebui s\ comute modul S<AP `n funcie
de "aloarea curent\.
(defun c:snaptog (/ snapval)
(setq snapval (getvar "SNAPMODE")) ;get current SNAPMODE

(if
(= 1 snapval) ;if it's on...
(setvar "SNAPMODE" 0) ;turn it off...
(setvar "SNAPMODE" 1) ;otherwise, turn it on
)

(prin1) ;quiet exit

)
2. Sal"ai funcia `ntr-un fi[ier numit snaptoglsp din
directorul student.
1. Dnc\rcai fi[ierul `n AutoCAD.
:. Desenai c`te"a entit\i tip Line [i Circle.
0. 4olosii S<AP(8/ pentru a comuta S<AP pe on sau off
c`nd desenai entit\ile.
*O6: Dncercai s\ apelai S<AP(8/ `n cadrul unei
comen#i LI<. sau CI)CL..
134
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'presii multiple `n cadrul func#iei if%
4uncia if permite e!ecuia unei singure e!presii dup\ ce a
fost e"aluat\ e!presia test.
Putei face ca e!presii multiple s\ apar\ ca o singur\
e!presie la funcia if prin amplasarea acestora `n cadrul
e!presiei progn.
4uncia progn e"aluea#\ pe fiecare dintre argumentele sale&
pe r`nd [i returnea#\ "aloarea ultimului argument. .!presii
multiple aflate `n cadrul funciei progn apar sub forma unei
simple e!presii la o funcie de apelare.
Dn acest e!emplu& dac\ "ariabila ! este egala cu *& atunci
"alorile "or fi atribuite ambelor "ariabile > [i #. Asignarea
este reali#at\ de dou\ s-e!presii.
'emplu
Command: (,'tI > 1!
1
Command: (&- (1 > 1! (%$o.n (,'tI / ! (,'tI J "!! (,'tI / 6!!
"
Command: H/

Command: HJ
"
141246430.doc R.2.1 4/22/2013 135
AUTODESK, INC.
E+ERCITI,( 19- E+*RE)II /,(TI*(E I8 CA;R,( A,8CTIEI IA
Dn acest e!erciiu,
Eei modifica funcia e!istent\ de la e!erciiul *5.
Eei folosi funcia progn.
Eei e!ecuta s-e!presii multiple prin apelarea unei
funcii if.
'tape de lucru
*. Dn editorul de te!t& desc$idei fi[ierul snaptoglsp din
directorul student.
+. )edenumii funcia c,modetog.
%. Cu ajutorul funciei progn& ad\ugai codul care comut\
S<AP98D. [i /)ID98D. pe ba#a "alorii curente a lui
S<AP98D..
2. Sal"ai fi[ierul pe disc ca modetoglsp.
1. Dnc\rcai programul modificat `n AutoCAD.
:. (estai comanda 98D.(8/.
136
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
/unc#ia cond
4uncia cond cere un argument obligatoriu [i un num\r
oarecare de argumente opionale.
4iecare argument al funciei cond poate fi un set de e!presii
incluse `ntr-o list\ e!tern\.
4uncia cond e"aluea#\ prima e!presie `n fiecare din listele
de argumente& pe r`nd& p`n\ ce o e!presie e"aluea#\
Cade"\ratC. Atunci funcia cond e"aluea#\ e!presiile care
urmea#\ primei e!presii din cadrul argumentului [i
returnea#\.
4uncia cond este de preferat funciei if ori de c`te ori e!ist\
mai mult de dou\ ca#uri de testat& adic\ mai mult de dou\
ramific\ri `n orice punct din program.
'emplu
Aceast\ definiie a funciei "a introduce "alori diferite `n
#ona liniei de comand\& `n funcie de "aloarea numeric\ a
"ariabilei !.
4ii ateni `n mod special la modul `n care pot fi construite
argumentele la funcia cond. Prima e!presie dintr-un
argument este e!presia test [i e!presiile care urmea#\ dup\
test "or fi e"aluate dac\ argumentul test este ade"\rat.
4uncia cond opre[te testarea argumentelor de `ndat\ ce
g\se[te un argument a c\rui e!presie test este ade"arat\&
adic\ nu este nil.
(defun testx (x)
(cond
(
(= x 0)
(prompt "\nX equals 0.")
)
(
(< x 0)
(prompt "\nX is less than 0.")
)
(
(> x 0)
(prompt "\nX is greater than 0.")
)
)
(prin1)
)
)ecapitulare
4uncia if testea#\ o e!presie [i se ramific\ spre oricare
dintre cele dou\ s-e!presii.
141246430.doc R.2.1 4/22/2013 137
AUTODESK, INC.
4uncia progn este folosit\ pentru a e!ecuta s-e!presii
multiple `n cadrul funciei if.
138
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
4uncia cond poate testa mai multe e!presii [i poate
e!ecuta orice num\r de s-e!presii `ntr-o ramificaie dat\.
141246430.doc R.2.1 4/22/2013 139
AUTODESK, INC.
E+ERCITI,( 20- ,TI(I<AREA A,8CTIEI C.8; *E8TR, RA/IAICAREA *R.5RA/,(,I
Dn acest e!erciiu,
Eei folosi funcia cond `n cadrul unei funcii noi.
Eei testa o "ariabil\ pentru egalitate numeric\.
Eei e!ecuta toate trei ramificaiile e!presiei cond.
'tape de lucru
*. Creai o nou\ funcie `ntr-un nou fi[ier cu ajutorul
editorului de te!t.
+. <umii aceast\ funcie test!.
%. 4uncia cere un argument obligatoriu.
2. Dntr-o instruciune cond& folosii testele de egalitate
pentru a "edea dac\ "aloarea argumentului este
egal\& mai mic\ sau mai mare dec`t 6.
1. Dac\ este satisfacut un test de egalitate& folosii funcia
prompt pentru a semnali#a utili#atorul.
(prompt "\nX equals 0.")
:. Sal"ai fi[ierul ca test,lsp `n directorul student.
0. Dnc\rcai fi[ierul `n AutoCAD.
5. 4olosii funcia test! cu "alorile argumentelor 6& * [i -*.
140
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
141246430.doc R.2.1 4/22/2013 141
AUTODESK, INC.
*ucle de pro'ram
7uclele de program repre#int\ un concept important pentru
orice limbaj de programare. 7uclele permit instruciunilor
programului s\ fie e!ecutate de nenum\rate ori pe ba#a
"alorii unei espresii test.
Obiective
Dn acest capitol "ei studia,
Cum s\ folosii buclele pentru a repeta un set de
e!presii.
Sinta!a funciilor repeat [i "$ile.
'plicarea modului de func#ionare a buclelor
8 bucl\ se e!plic\ astfel,
C (estai o e!presie. Dac\ e!presia este ade"\rat\& atunci
e!ecutai un set de instruciuni ale programului& pe r`nd&
apoi testai e!presia din nou. Dac\ este tot ade"\rat\&
e!ecutai toate instruciunile programului apoi testai din
nou e!presia la infini.
A[a lucrea#\ funcia G$ile. 4uncia repeat e!ecut\ un set de
e!presii de un num\r de ori prestabilit.
Ca e!emplu s\ presupunem c\ a"em un set de e!presii pe
care "rem s\-l e!ecut\m de 1 ori. .ste mai `nelept s\ scriei
setul de e!presii o singur\ dat\ `n program [i s\ folosii unele
funcii care s\ cear\ AutoLISP-ului s\ repete e!presiile de 1
ori dec`t s\ scriei setul de e!presii de 1 ori.
Ca e!emplu ;si nu unul str\lucitH "om construi o funcie
simpl\ de num\rare folosind funcia repeat. 4uncia "a ad\uga
num\rul `ntreg * la "aloarea unei "ariabile ori de c`te ori
funcia este apelat\ [i apoi "a tip\ri "aloarea "ariabilei `n
#ona liniei de comand\.
142
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
/unc#ia repeat
4uncia repeat cere dou\ argumente [i un num\r oarecare de
argumente opionale.
Primul argument trebuie s\ fie un num\r `ntreg ;sau e"aluat
`ntr-un num\r `ntregH. Acesta spune funciei repeat de c`te
ori s\ e!ecute al doilea argument p`n\ la al n -lea
argument.
'emplu
Command: ($'%'at " (%$om%t ATnB'((oA!!
B'((o
B'((o
B'((on&(
nil de la sf`r[it este "aloarea returnat\ de funcia repeat.
'emplu
Introducei e!presiile care urmea#\.
.!presiile definesc funcia count.
Dn funcia count& dup\ ce "ariabila num este legat\ de 6&
"aloarea lui num este "i#uali#at\ pe monitor [i incrementat\
cu * p`n\ la un total de *6 ori.
Command: "de9%n co%nt "#
17 "set= n%& 0#
17 "re!eat 10 "!rint n%&# "set= n%& "1@ n%&###
17 "!rin1##
COUNT
4olosii funcia count. Aceasta "a introduce numerele de la 6
la 3 `n #ona liniei de comand\.
Command: "co%nt#
6
1

"
;
<
5
C
D
=
141246430.doc R.2.1 4/22/2013 143
AUTODESK, INC.
8 "ersiune ce"a mai interesant\ a funciei count "a W(.)/.
ultimele trei entitai desenate [i care s`nt "i#ibile pe
monitor.
'emplu
Dntr-un desen nou& desenai cel puin trei ;%H entit\i de
orice fel.
Introducei e!presiile care urmea#\.
Command: "de9%n co%nt "# "re!eat 3 "co&&and CeraseC ClC CC###
COUNT
4olosii funcia count pentru a [terge ultimele entit\i din
desen.
Command: "co%nt#
3ai multe despre intr\rile utili(atorului
4uncia initget poate reface "alorile permise pentru intrarea
utili#atorului `n timpul oric\rei apel\ri a funciilor de tip
/.(===& de e!emplu funciile getpoint [i getdist.
Apelai initget care are un num\r `ntreg ca argument [iJsau o
list\ de cu"inte c$eie acceptabile& imediat dup\ apelarea
unei funcii /.(===.
Acest e!emplu admite numai numere `ntregi cu e!cepia lui
6& ca r\spuns la getint.
(initget (+ 1 2 4))
(setq response (getint "\nEnter an integer: "))
4uncia get'Gord reface un cu"`nt c$eie de la utili#ator ba#at
pe un [ir de cu"inte c$eie stabilite de funcia initget.
Acest e!emplu permite utili#atorului s\ raspund\ cu M.S sau
<8 la cererea de comand\. -n r\spuns nul sau un return nu
s`nt admise.
(initget 1 "Yes No")
(getkword "\nContinue? Yes/No: ")
144
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 21- 6,C(ARE I8 *R.5RA/
Dn acest e!erciiu,
Eei consolida cuno[tinele despre bucle de
program.
Eei consolida cuno[tinele despre funcia cond.
Eei folosi funcia repeat pentru a e!ecuta un set de
s-e!presii de un num\r stabilit de ori.
Eei scrie o funcie care cere utili#atorului num\rul
de bucl\ri de program.
Eei folosi instruciunea cond `n cadrul buclei.
'tape de lucru
*. Dncepei un desen nou `n AutoCAD.
+. Desenai un Cerc cu centrul `n punctul 1&1 [I o ra#\ de o
unitate.
%. Dn editorul te!t& desc$idei fi[ierul numit displacelsp
din directorul student.
2. Creai funcia c,displace. 4olosii codul `n displacelsp ca
ba#\ pentru funcie.
1. DISPLAC. ar trebui s\ e!ecute urm\toarele,
S\ cear\ utili#atorului o incrementare a deplas\rii.
S\ cear\ utili#atorului de c`te ori s\ e!ecute
deplasarea.
S\ cear\ utili#atorului direcia de deplasare.
S\ repete codul care restabile[te ultima entitate
desenat\ [i care este "i#uali#at\ pe monitor [i s\ o
deplase#e cu un increment adec"at de un num\r
de ori.
continuare pe pagina urmatoare
141246430.doc R.2.1 4/22/2013 145
AUTODESK, INC.
;No null, zero or negative response allowed
(initget (+ 1 2 4))
(setq increment (getdist "\nIncrement for movement: "))
;No null, zero or negative response allowed
(initget (+ 1 2 4))
(setq number_of_times (getint "\nNumber of times to displace: "))

;No null response allowed, setup keywords for response
(initget 1 "Up Down Right Left")
(setq direction (getkword "\nUp/Down/Left/Right: "))
(repeat number of times (command MOVE (entlast) (list 0.0 0.0 0.0)

(cond ;match direction of movement...
((= direction "Up") ;based on keyword supplied by user
(command (list 0.0 increment))
)
((= direction "Down")
(command (list 0.0 (- 0.0 increment)))
)
((= direction "Right")
(command (list increment 0.0))
)
((= direction "Left")
(command (list (- 0.0 increment) 0.0))
)
)

(command "") ;second point of displacement...
;for MOVE command prompt


:. Sal"ai fi[ierul te!t.
0. Dnc\rcati fi[ierul `n AutoCAD.
5. Acti"ai comanda DISPLAC..
146
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
/unc#ia "$ile
4uncia repeat este cea mai simpl\ funcie de buclare util\
dac\ [tii e!act de c`te ori trebuie s\ repetai e"aluarea
grupului de e!presii anterioare intr\rii buclei.
(otu[i "ei `nt`lni oca#ii c`nd "ei dori s\ repetai ce"a de un
num\r nedefinit de ori? adic\ num\rul de repetiii nu poate fi
determinat `naintea intr\rii `n bucl\.
Dntr-un astfel de ca#& funcia G$ile "\ d\ posibilitatea s\
repetai un set de e!presii de c`te ori este necesar p`n\ ce
"aloarea unei e!presii test se sc$imb\.
'emplu
(setq x 0) ;set initial value for test
(while
(< x 10) ;while x is less than 10...
(print x) ;print value of x...
(setq x (+ 1 x)) ;add 1 to x and then...
) ;go back to test expression
! is less t$an *6P
print t$e "alue of !
add * to !
(set# $ 10)
(,-le
(* $ 10)
(prnt $)
(set# $ (+ 1 $))
)
initiali#e !
go bac' to test
M.S <8
Figuae ". Diagrama buclei 1unctiei C:ile
141246430.doc R.2.1 4/22/2013 147
AUTODESK, INC.
Pentru a ie[i dintr-o bucl\ G$ile& "aloarea e!presiei test
trebuie s\ fie egal\ cu nil. De aceea& dac\ e!presia test este
iniial t& "aloarea e!presiei test trebuie s\ se sc$imbe ca
re#ultat al unei atribuiri din cadrul corpului buclei.
)ecapitulare
@uclele repet\ un set de e!presii.
7uclele pot repeta de un num\r de ori prestabilit
sau p`n\ ce "aloarea e!presiei test este nil.
4uncia repeat repet\ un set de e!presii de un
num\r de ori stabilit.
4uncia "$ile repet\ un set de s-e!presii p`n\ ce
e!presia test este egal\ cu nil.
148
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 21- ,TI(I<AREA A,8CTIEI MNI(E *E8TR, 6,C(ARE I8 *R.5A/
Dn acest e!erciiu,
Eei consolida cuno[tinele despre buclele de
program din AutoLISP.
Eei modifica o funcie e!istent\ de la e!erciiul
anterior.
Eei crea un program care desenea#\ dreptung$iuri
multiple.
Eei folosi funcia G$ile.
'tape de lucru
*. Dn editorul de te!t& `nc\rcai fi[ierul rectanglelsp
+. Sal"ai fi[ierul ca mrectanglsp `n directorul student
%. 4acei modific\ri `n fi[ier.
2. 9odificai funcia c,rectangle pentru a cere utili#atorului s\
desene#e dreptung$iuri multiple `n timpul unei
singure sec"ene de funcionare.
1. Plasai corpul codului care cere colurile [i desenea#\
polilinia `n cadrul unei funcii G$ile.
:. -n r\spuns nul& adic\ un return la cererea Cfirst cornerC
"a termina funcia.
0. <umii noua funcie c,mrectangle pentru Cdreptung$iuri
multipleC.
5. Sal"ai fi[ierul.
3. Dnc\rcai fi[ierul `n AutoCAD.
*6.Acti"ai comanda 9).C(A</L..
141246430.doc R.2.1 4/22/2013 149
AUTODESK, INC.
+iruri [i tip\rirea lor
Dn AutoLISP& orice serie de caractere alfanumerice aflate
`ntre g$ilimele duble repre#int\ un [ir tet. Wirul poate
include caractere speciale cum ar fi K& A& & X [i .
Obiective
Dn acest capitol "ei studia,
Despre [irurile te!t [i "alorile lor
Cum s\ folosii caracterele de control `n [irurile te!t.
Cum s\ luai [iruri te!t de la utili#ator.
Cum s\ folosii comanda AutoCAD (.=( cu "ariabile
AutoLISP-ul legate la [iruri te!t.
Diferenele dintre cele [ase funcii de tip\rire `n
AutoLISP.
Cum s\ folosii funciile de tip\rire.
-alorile [irurilor tet
Wirurile te!t se e"aluea#\ pe sine& adic\ "aloarea unui [ir
te!t este [irul `n sine.
Command: HAT8&, &, a ,t$&n.A
AT8&, &, a ,t$&n..A
Command: (,'tI > AT8&, &, a ,t$&n..A!
AT8&, &, a ,t$&n..A

Command: H>
AT8&, &, a ,t$&n..A
Caractere de control
Caracterul C\C precede un caracter de control `n cadrul
unui [ir te!t. Caracterul care urmea#\ imediat are o
semnificaie special\.
Dn urm\torul tabel g\sii caracterele de control cunoscute
de asemenea [i ca +escape codes+ care s`nt recunoscute
`n cadrul [irurilor AutoLISP.
150
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Cod )e&ni9icatie
TT T )a$a)t'$
TA A )a$a)t'$
T' )a$a)t'$ ',)a%'
Tn )a$a)t'$ n'2(&n'
T$ )a$a)t'$ $'tu$n
Tt )a$a)t'$ ta*
Tnnn Ca$a)t'$ a( )a$u& )od o)ta( ',t' nnn
Tabelul . Caractere de control Dn Eiruri
/unc#ia getstring
4uncia getstring a[teapt\ ca utili#atorul s\ introduc\ un [ir
te!t. Are dou\ argumente opionale, suprim\ caracterul
spaiu ca [i return [i un [ir de la utili#ator.
Dac\ primul argument opional este furni#at [i acesta nu
este nil& atunci este posibil ca [irul s\ conin\ spaii? primul
spaiu din [ir este tratat ca CreturnC.
'emplu
Introducei e!presiile care urmea#\.
Legai "ariabila t!t de [irul te!t CsingleC.
Command: "set= t't "2etstrin2 COnEnter te't- C##
Ent'$ t'>t: sin2le
A,&n.('A
Command: $t't
A,&n.('A
Legai "ariabila t!t de [irul te!t `n care s-au introdus spaii.
Command: "set= t't "2etstrin2 T COnEnter te't- C##
Ent'$ t'>t: e&0edded s!aces
A'm*'dd'd ,%a)',A
Command: $t't
A'm*'dd'd ,%a)',A
141246430.doc R.2.1 4/22/2013 151
AUTODESK, INC.
-ariabila de sistem 6'A6'-AL
Dac\ "ariabila de sistem (.=(.EAL este mai mare dec`t 6&
putei r\spunde la o cerere de comand\ (.=( sau D(.=( cu o
"ariabil\ AutoLISP [i comanda "a tip\ri "aloarea asignat\
"ariabilei? dac\ nu& comanda "a tip\ri semnul e!clamarii [i
numele "ariabilei.
Comanda (.=( "a tip\ri `ntotdeauna "aloarea unei "ariabile
[ir atunci c`nd este apelat\ `n cadrul unei funcii AutoLISP
de tip command indiferent de setarea (.=(EAL.
Comanda D(.=( nu poate fi apelat\ de funcia AutoLISP de
tip command.
152
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'emplu
Dntr-un desen nou introducei e!presiile care urmea#\.
Prima comand\ (.=( "a tip\ri Lt!t*. A dou\ comand\ (.=( "a
tip\ri Second line. Ee#i figura *5-*.
Command: "set= t't1 CAirst line.C#
A#&$,t (&n'.A
Command: "set= t't2 C)econd line.C#
AS')ond (&n'.A
Command: te't
Uu,t&-/0St/('04Sta$t %o&nt7: 1,5
B'&.8t: 0.5
Rotat&on: 0
T'>t: $t't1
Command: "set3ar Cte'te3alC 1#
1
Command: te't
Uu,t&-/0St/('04Sta$t %o&nt7: Enter
T'>t: $t't2
Figura +1. entitati tip text
141246430.doc R.2.1 4/22/2013 153
AUTODESK, INC.
/unc#iile de tip\rire
.!ist\ [ase funcii de tip\rire `n AutoLISP. Cinci dintre ele
tip\resc [iruri te!t iar una tip\re[te caractere te!t. (rei dintre
aceste funcii tip\resc orice fel de e!presii indiferent dac\
acestea s`nt de tipul [ir te!t. 4uncia pentru caractere [i
patru dintre funciile de tip [ir pot tip\ri nu numai `ntr-un
fi[ier dar [i pe un monitor.
A%nctia Ar2%&ente ;escriere
%$&n1 Eexpr E1ile!descFF T&%a$',t' expr ,& $'tu$n'aJa expr. E>%and'aJa
)a$a)t'$'(' d' )ont$o(.
%$&n) Eexpr E1ile!descFF T&%a$',t' expr ,& $'tu$n'aJa expr. Nu '>%and'aJa
)a$a)t'$'(' d' )ont$o(
%$&nt Eexpr E1ile!descFF La -'( )a %$&n1, ,& &n %(u, t&%a$',t' un n'2(&n'
&na&nt' d' expr ,& un ,%at&u du%a expr.
%$om%t EmsgF T&%a$',t' msg %' d&,%(a/ ,& $'tu$n'aJa n&(.
2$&t'3)8a$ num E1ile!descF T&%a$',t' un )a$a)t'$ ASCII )on-o$m )u a$.um'ntu(
num %'nt$u )odu( J')&ma( ASCII ,& $'tu$n'aJa
numT$u(.
2$&t'3(&n' string E1ile!descF T&%a$',t' string -T$T Iuot', ,& $'tu$n'aJT string )u
Iuot',. A,'manato$ )u %$&n).
Table ". Functii de tiparire
Intrarea [i ie[irea `nJ[i dintr-un fi[ier inclu#`nd [i tip\rirea
`ntr-un fi[ier "or fi discutate mai t`r#iu `n acest curs.
4uncia prompt este folosit\ pentru tip\rirea mesajelor
destinate utili#atorului& pe afi[aj.
4uncia print tip\re[te e!presii `ntr-o manier\ compatibil\ cu
funcia load& `n timp ce funcia princ le tip\re[te `ntr-o
manier\ compatibil\ cu funcia read-line. Eei studia funcia
read-line `n capitolul destinat intr\rii [i ie[irii `ntr-un fi[ier
mai t`r#iu `n acest curs.
4unciile prin*& princ [i print accept\ orice e!presie ca
argument [i `i "a tip\ri "aloarea.
4unciile prompt [i Grite-line accept\ numai argumente de tip
[ir.
154
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
)ecapitulare
5irurile tet s`nt caractere alfanumerice aflate
`ntre g$ilimele duble.
Caracterele de control din cadrul unui [ir de tip
te!t `ncep cu un caracter CaC.
4uncia getstring primeste [iruri interacti" de la
utili#ator.
Eariabila de sistem (.=(.EAL demonstrea#\ cum
comanda AutoCAD (.=( "a tip\ri o "ariabil\
AutoLISP.
AutoLISP-ul dispune de o "arietate de funcii de
tip\rire pentru diferite `ntrebuin\ri.
141246430.doc R.2.1 4/22/2013 155
AUTODESK, INC.
E+ERCITI,( 22- )IR,RI ;E TE+T )I A,8CTII ;E TI*ARIRE
Dn acest e!erciiu,
Eei consolida cuno[tinele despre [iruri de tip te!t
[i funcii de tip\rire.
Eei obine dou\ [iruri te!t interacti" de la
utili#ator.
Eei folosi [irurile de tip te!t cu patru dintre
funciile de tip\rire.
'tape de lucru
*. Intoducei e!presiile care urmea#\.
+. Legai cinci "ariabile de la a la d de diferite tipuri de
date, num\r `ntreg& list\& [ir [i [ir care conine
caractere de control.
Command: "set= a 1#
Command:"set= 0 L"1.0 1.0 0.0##
Command: "set= c "2etstrin2 COn)trin2- C##
St$&n.: 'B
A>/JA
Command: "set= d "2etstrin2 COnAile na&e- C##
#&(' nam': Ost%dentO'.dP2
ATT,tud'ntTT>.d2.A
%. 4olosii "ariabilele ca argumente la diferite funcii de
tip\rire.
2. Scriei "alorile `n casuele corespun#atoare din tabelul
care urmea#\.
1aria0ila !rin1 !rinc !rint !ro&!t
a
*
)
d
Tabelul (. 3ariabile si 1unctii de tiparire
156
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Aceast\ pagin\ a fost l\sat\ liber\ in mod intenionat
141246430.doc R.2.1 4/22/2013 157
AUTODESK, INC.
Accesul la entit\]i
4iec\rei entit\i dintr-o sesiune de editare `i este atribuit
un nume de entitate de c\tre AutoCAD. <umele unei
entit\i este un identificator unic al fiec\rei entit\i
dintr-un desen. <umele unei entit\i se poate
sc$imba de la o sesiune de editare la alta& dar
fiecare nume de entitate este unic determinat\ `n
timpul unei sesiuni de editare.
Obiective
Dn acest capitol "ei studia,
Cum s\ folosii numele de entit\#i pentru a stabili [i
modifica entit\ile indi"iduale.
Cum s\ aflai numele ultimei entit\i ad\ugate la desen.
Cum s\ aflai numele primei entit\i ad\ugate la desen.
Cum se pot trece `n re"ist\ numele entit\ilor din desen.
Cum s\ creai noi comen#i AutoCAD care acionea#\ asupra
numelor de entit\i.
/unc#ii de acces la entit\#i
<umele de entit\i pot fi stabilite de AutoLISP [i entit\ile
la care se refer\ pot fi modificate de AutoLISP.
Dn acest capitol "ei folosi funciile de acces la entit\i
din AutoLISP pentru a lucra cu entit\i [i grupuri de
entit\i.
Aflai o entitate sau un grup de entit\i.
Acti"ai o entitate cu o comand\ AutoCAD.
.!aminai propriet\ile unei entit\i.
9odificai propriet\ile unei entit\i.
A%nctii de acces la
entitati
;escriere
'nt(a,t $'tu$n'aJa num'(' u(t&m'& 'nt&taV& adau.ata
&n *aJa d' dat'
'nt,'( $'tu$n'aJa (&,ta -o$mata d&n num'(' 'nt&taV&&
,& %un)tu( &n )a$' a -o,t ,'(')tata 'nt&tat'a
'ntn'>t $'tu$n'aJa %$&ma 'nt&tat' d&n *aJa d' dat'
'ntn'>t 'nam' $'tu$n'aJa num'(' 'nt&taV&& &n *aJa d' dat'
du%a a$.um'ntu( 'nam'
Tabelul &.Functii de acces a entitatilor
158
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Cum se afl\ numele ultimei entit\#i
Introducei comen#ile [i e!presiile care urmea#\.
Dntr-un desen nou creai o entitate Line.
Command: line
#$om %o&nt: 1,1
To %o&nt: 5,5
To %o&nt: Enter
4olosii funcia entlast pentru a stabili numele ultimei entit\i
ad\ugate la desen& adic\ entitatea Line. ;<um\rul din numele
entit\ii poate fi diferit pe computerul dumnea"oastraH.
Command: "entlast#
4Ent&t/ nam': 5666667
4uncia entlast stabile[te numele ultimei entit\i principale
ne[tears\ din desen.
Legai "ariabla numit\ ename de "aloarea returnat\ de funcia
entlast. Eerificai legarea lui ename.
Command: "set= ena&e "entlast##
4Ent&t/ nam': 5666667
Command: $ena&e
4Ent&t/ nam': 5666667
/olosirea numelui unei entit\#i intr-o comand\ AutoCA&
<umele entit\ilor pot fi folosite ca argumente la funcia de
tip command ori de c`te ori o comand\ AutoCAD cere un set
de selecie.
Dn acest e!emplu& numele entit\ii Line este furni#at ca
argument la comanda AutoCAD .)AS..Aceasta e!presie "a
[terge entitatea Line.
Command: ()ommand A'$a,'A 'nam' AA!
'emplu
Introducei e!presiile [i comen#ile care urmea#\. .!presia
AutoLISP "a [terge entitatea Line. Comanda - o "a restabili.
Command: "co&&and CeraseC ena&e CC#
n&(
141246430.doc R.2.1 4/22/2013 159
AUTODESK, INC.
Command: ,
GROUP
Aflarea numelui primei entit\#i
'emplu
Citii instruciunile [i tip\rii e!presiile cu caractere aldine.
Dn acelai desen& cu ajutorul entit\ii Line& creai o entitate
Circle.
Command: circle
"P0P0TTR04C'nt'$ %o&nt7: 5,5
D&am't'$04Rad&u,7: 1
1&1
*&*
Figura +.#ntitati tip linie si cerc
4olosii funcia entlast pentru a stabili numele ultimei entit\i
ad\ugat\ la desen& entitatea Circle. ;<um\rul din numele
entitaii poate fi diferit pe computerul d"s.H.
Command: "entlast#
4Ent&t/ nam': 566666D7
4uncia entlast stabile[te ultima entitate principal\ ne[tears\
din desen? `n acest ca# entitatea Circle.
4olosii funcia entne!t pentru a e!trage numele primei
entit\i din ba#a de date& adic\& entitatea Line.
160
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Legai o "ariabil\ numit\ entname de "aloarea returnat\ de
entne!t. Eerificai legarea lui ename.
Command: "set= ena&e "entne't##
4Ent&t/ nam': 5666667
Command: $ena&e
4Ent&t/ nam': 5666667
'emplu
Introducei e!presiile care urmea#\.
Aflai numele primei entit\i din desen& entitatea Linie.
Stergei-o. )estabilii-o cu comanda -.
Command: "set= ena&e "entne't##
4Ent&t/ nam': 5666667
Command: "co&&and CeraseC ena&e CC#
n&(
Command: ,
ERASE
Aflai numele ultimei entit\i din desen, entitatea Circle.
Deplasai-o cu o unitate `n directia = po#iti"\ din po#iia
iniial\.
Command: "set= ena&e "entlast##
4Ent&t/ nam': 566666D7
Command: "co&&and C&o3eC ena&e CC C1,0C CC#
n&(
141246430.doc R.2.1 4/22/2013 161
AUTODESK, INC.
1&1
*&*
Figura +". Situatia dupa miscarea cercului cu o unitate in directia 8 poziti-a
Aducei cercul `n po#iia iniial\.
Command: ,
@OLE
@aleierea ba(ei de date entitate cu entitate
4uncia entlast stabile[te numele ultimei entit\i din ba#a de
date. 4uncia entne!t stabile[te numele primei entit\i din
ba#a de date.
4uncia entne!t are un argument opional, numele unei
entit\i. Dn acest ca# funcia entne!t returnea#\ numele
entit\ii care urmea#\ dup\ argument `n ba#a de date.
Dac\ nu e!ist\ nici o entitate care se urme#e dup\ cea din
numele argumentului entitaii& entne!t returnea#\ nil.
De e!emplu acest set de e!presii "or returna numele celei
de a doua entit\i din ba#a de date.
Command: ('ntn'>t ('ntn'>t!!
4Ent&t/ nam': 566666D7
sau
Command: (,'tI 'nam'1 ('ntn'>t!!
4Ent&t/ nam': 5666667
Command: (,'tI 'nam' ('ntn'>t 'nam'1!!
4Ent&t/ nam': 566666D7
162
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
.!presia care urmea#\ ar [terge atunci a doua entitate din
ba#a de date.
Command: ()ommand A'$a,'A 'nam' AA!
Ar fi bine s\ se poat\ stabili numele tuturor entit\ilor din
ba#a de date& pe r`nd& pentru a le procesa una c`te una.
4uncia entne!t poate face acest lucru c`nd este plasat\
`ntr-o bucl\ G$ile `mpreun\ cu instruciunile de procesare
pentru entit\i.
)ecapitulare
4iecare entitate dintr-un desen are un nume unic
de entitate.
<umele entit\ilor nu se sc$imb\ niciodat\ `n timpul
unei sesiuni de editare grafic\& dar se pot
sc$imba pe parcursul sesiunilor de editare
grafic\.
AutoLISP dispune de funcii care returnea#\
numele entit\ii.
4uncia entlast returnea#\ numele ultimei entit\i
ad\ugat\ la desen.
4uncia entnet returnea#\ numele primei entit\i
ad\ugat\ la desen sau numele entit\ii care
urmea#\ dup\ argumentul opional.
Putei folosi entnet [i o bucl\ "$ile pentru a accesa
fiecare entitate din desen.
<umele entit\ilor pot fi folosite cu comen#i
AutoCAD.
141246430.doc R.2.1 4/22/2013 163
AUTODESK, INC.
E+ERCITI,( 23- ACCE)AREA 8,/E(.R ;E E8TITATI
Dn acest e!erciiu,
Eei aprofunda cuno[tinele despre accesarea
numelor de entit\i.
Eei crea o comanda 98E.ALL care afl\ numele
fiec\rei entit\i din ba#a de date& pe r`nd& [i
deplasea#\ fiecare entitate cu o unitate `n =
po#iti".
Eei folosi funciile entne!t [i G$ile.
Eei folosi numele entit\ilor [i comanda AutoCAD
98E..
'tape de lucru
*. 4olosii editorul de te!te pentru a sal"a urm\torul cod `n
fi[ierul numit mo$ealllsp.
(defun c:moveall ()
(setq ename (entnext)) ;get first entity
(while
ename ;we have an entity?
(command "._MOVE" ename "" "1,0" "") ;move it
(setq ename (entnext ename)) ;get the next entity
)
(prin1) ;quiet exit
)
+. Desenai c`te"a entit\i `n desenul d"s.
%. Dnc\rcai fi[ierul mo$ealllsp.
2. Acti"ai comanda 98E.ALL.
1. -rm\rii deplasarea entit\ilor& c`te una pe r`nd.
Command: "load C&o3eallC#
C:@OLEALL
Command: &o3eall
164
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 24- )CA(AREA T,T,R.R E8TITATI(.R ACCE)ATE *RI8 8,/E
Dn acest e!erciiu,
Eei aprofunda cuno[tinele despre accesarea
numelor de entit\i.
Eei modifica funcia de la e!erciiul +2.
Eei folosi funciile entne!t [i G$ile.
Eei crea o comand\ care scalea#\ fiecare entitate
din desen.
Eei tip\ri num\rul de entitai scalate folosind un
contor `n cadrul unei bucle.
Aceste e!presii "or tip\ri [irul Scaling entit> *. `n #ona
liniei de comand\.
(setq counter 1)
(prompt (strcat "\nScaling entity " (itoa counter) "."))
'tape de lucru
*. Desc$idei fi[ierul te!t mo$ealllsp.
+. Sal"ai te!tul `ntr-un nou fi[ier numit scalealllsp.
%. 4olosii codul din funcia c,mo"eall.lsp.
2. 9odificai c,mo"eall.
<umii noua funcie c,scaleall.
Scalai fiecare entitate cu un factor ;6.1H relati" fa\
de punctul origine 6&6.
Ad\ugai codul care tip\re[te `n #ona liniei de
comand\ num\rul de entit\i modificate.
Command: ,)a('a((
S)a(&n. 'nt&t/ 1.
S)a(&n. 'nt&t/ .
S)a(&n. 'nt&t/ ".
1. Dnc\rcai fi[ierul scalealllsp.
:. Acti"ai comanda SCAL.ALL.
141246430.doc R.2.1 4/22/2013 165
AUTODESK, INC.
Liste asociate entit\]ilor
Putei folosi numele unei entit\i pentru a e!trage toate
elementele unei entit\i. Dn AutoLISP un astfel de document
este repre#entat print-o list\ asociat\. Listele asociate
cuprind subliste ale listelor obi[nuite sau perec$i cu
punct.
Obiective
Dn acest capitol "ei studia,
4ormatul unei perec$i cu punct sau cum s\ creai
o astfel de perec$e.
4ormatul unei liste asociate.
Cum s\ e!tragei o list\ asociat\ unei entit\i.
Cum s\ e!aminai o lista asociat\.
Cum s\ determinai tipul entit\ii din lista asociat\.
Perec$i cu punct
8 perec$e cu punct este o form\ special\ a unei liste. 8
perec$e cu punct este o list\ format\ din dou\ elemente a
c\rei parte cdr din arborele binar se termin\ cu ultimul
element al listei [i nu cu nil.
At`t listele obi[nuite c`t [i perec$ile cu punct s`nt folosite `n
listele asociate entit\ilor pentru a repre#enta grupul de
coduri D=4 [i "alorile asociate acestora.
Perec$ile cu punct conin `ntotdeauna dou\ elemente.
Primul element al unei perec$i cu punct poate fi stabilit la
fel ca [i primul element al unei liste obi[nuite, cu funcia car.
Al doilea element al perec$ii cu punct poate fi stabilit direct
cu funcia cdr [i acest lucru difer\ de modul `n care se
stabile[te al doilea element dintr-o list\ obi[nuit\.
'emplu
Perec$ea cu punct care conine cele dou\ elemente 6 [i
CLineC arat\ astfel.
(0 " ./0N1.)
Ilustraia care urmea#\ pre#int\ arborii binari pentru dou\
obiecte similare, o list\ [i o perec$e cu punct& ambele
conin`nd acelea[i elemente.
166
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
(6 ALINEA!
6 (ALINEA!
ALINEA (!
(6 . ALINEA!
6 ALINEA
car cdr car cdr
car cdr
Figura ++. Arbori binari pentru lista obisnuita si perec:e cu punct a-ind elemente
identice.
/unc#ia cons
4uncia cons cere dou\ argumente obligatorii, o "aloare care
se adaug\ [i o "aloare la care se adaug\.
Dac\ "aloarea care se adaug\ este un atom& atunci funcia
cons returnea#\ o perec$e cu punct a celor dou\ elemente.
Dac\ "aloarea la care se adaug\ este o lista& atunci funcia
cons returnea#\ lista cu primul argument ad\ugat `n capul
listei.
'emplu
Introducei e!presiile care urmea#\.
4ormai o list\ obi[nuit\ din elementele 0 [i ./ne."
Command: (,'tI >(&,t ((&,t 6 ALINEA!!
(6 ALINEA!
4ormai o perec$e cu punct din elementele 0 [i ./ne."
Command: "set= 'dot "cons 0 C(I8EC##
(6 . ALINEA!
.!tragei primul element din list\ [i din perec$ea punct cu
car.
Command: "car 'list#
6
141246430.doc R.2.1 4/22/2013 167
AUTODESK, INC.
Command: "car 'dot#
6
.!tragei cel de-al doilea element din lista normal\ cu car [i
cdr.
Command: "car "cdr 'list##
ALINEA
.!tragei cel de-al doilea element din list\ [i din perec$ea
punct cu car.
Command: "cdr 'dot#
ALINEA
'ntit\#i `nregistrate `n ba(a de date [i liste asociate
9odul `n care AutoLISP-ul repre#int\ o entitate `nregistrat\
`n ba#a de date pentru o entitate desenat\ de tip Line de la
*&* la 1&1 pe La>erul 6 este pre#entat `n continuare.
(
(-1 . <Entity name: xxxxxxxx>)
(0 . "LINE")
(8 . "0")
(10 1.0 1.0 0.0)
(11 5.0 5.0 0.0)
(210 0.0 0.0 1.0)
)
.ntitatea `nregistrat\ `n ba#a de date este p\strat\ sub
forma unei liste asociate%
8 list\ asociat\ este o list\ de liste.
Primul element al fiec\rei subliste este tipul acelei liste.
Celelalte elemente repre#int\ datele asociate cu codul.
De e!emplu& codul din prima sublist\ este num\rul `ntreg
!1. Data asociat\ este numele entit\ii. Codul din a dou\
sublist\ este num\rul `ntreg 0. Data asociat\ este tipul
entit\ii? `n acest ca#& o entitate Line.
Semnificaia codurilor 2,10 [i 11 si datele lor s`nt u[or de
imaginat ce repre#int\.
Datele codului 210 s`nt repre#entate de sensul po#iti" al
a!ei 3 din sistemul de coordonate care conine entitatea.
3emorarea si etragerea formatelor
Prin con"enie& datele dintr-o list\ asociat\ entit\ii pot fi
e!trase prin scoaterea cdr-ului unei subliste. Pentru
aceasta& AutoLISP-ul folose[te perec$i cu punct `n ca#ul
sublistelor cu dou\ elemente [i forme normale de liste `n
ca#ul sublistelor cu mai mult de dou\ elemente.
168
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
De e!emplu& aceste e!presii returnea#\ La>erul entit\ii
Line [i punctul de start.
Command: ()d$ S(D . A6A!!
A6A
Command: ()d$ S(16 1.6 1.6 6.6!!
(1.6 1.6 6.6!
Coduri de 4rup &A/
Codul fiec\rei subliste dintr-o list\ asociat\ unei entit\i
corespunde unui cod de grup D=4. Documentaia despre
aceste coduri e!ist\ `n AutoCA! Release -. AutoLISP
Programmer%s Reference Manual& Appendi! 7.
.!ist\ mici diferene `ntre codurile de grup dintr-un fi[ier
D=4 [i codurile de grup returnate `ntr-o list\ asociat\ unei
entit\i. Dn ane!a din AutoLISP Programmer%s Reference
Manual g\sii lista corect\ a codurilor de grup pentru liste
asociate entit\ilor.
Acestea s`nt codurile listelor asociate entit\ilor ;sau coduri
de grup D=4H pentru entitatea Line.
Cod de 2ro%! )e&ni9icatie
31 Num'(' 'nt&tat&&
6 T&%u( (L&n', C&$)(', A$), 't).!
D La/'$
16 Pun)t d' ,ta$t
11 Pun)t -&na(
16 D&$')t&a %oJ&t&Ka a a>'& Z d'
'>t$uJ&un'
Tabelul .. Coduri de grup D8F si proprietatile entitaFilor
141246430.doc R.2.1 4/22/2013 169
AUTODESK, INC.
'tragerea unei entit\#i din ba(a de date cu func#ia entget
4uncia entget cere un singur argument, numele unei
entit\i. 4uncia "a returna `nregistrarea entit\ii sub forma
unei liste asociate.
'emplu
Dncepei un desen nou [i desenai o linie de la *&* la 1&1?
tip\rii e!presiile care urmea#\.
Command: "set= ena&e "entne't##
4Ent&t/ nam': >>>>>>>>7
Command: "set= elist "ent2et ena&e##
( (31 . 4Ent&t/ nam': >>>>>>>>7! (6 . ALINEA! (D . A6A! (16 1.6 1.6 6.6! (11
<.6 <.6 6.6! (16 6.6 6.6 1.6!!
Command: $elist
( (31 . 4Ent&t/ nam': >>>>>>>>7! (6 . ALINEA! (D . A6A! (16 1.6 1.6 6.6! (11
<.6 <.6 6.6! (16 6.6 6.6 1.6!!
'tragerea datelor dintr-o list\ asociat\
4uncia assoc cere dou\ argumente, "aloarea unui cod [i o
list\ asociat\. Dac\ funcia g\se[te o perec$e pentru cod `n
lista asociat\& atunci returnea#\ sublista corespun#atoare?
dac\ nu& returnea#\ nl.
Presupunei c\ "ariabila elist este legat\ de lista asociat\ `n
ca#ul entit\ii Line.
Command: (,'tI '(&,t ('nt.'t ('ntn'>t!!!
( (31 . 4Ent&t/ nam': >>>>>>>>7! (6 . ALINEA! (D . A6A! (16 1.6 1.6 6.6! (11
<.6 <.6 6.6! (16 6.6 6.6 1.6!!
Command: H'(&,t
( (31 . 4Ent&t/ nam': >>>>>>>>7! (6 . ALINEA! (D . A6A! (16 1.6 1.6 6.6! (11
<.6 <.6 6.6! (16 6.6 6.6 1.6!!
Aceast\ e!presie "a returna sublista care descrie la>erul
entit\ii.
Command: (a,,o) D '(&,t!
(D . A6A!
Dn aceast\ e!presie& apel\m cdr care returnea#\ la>erul
entit\ii.
Command: ()d$ (a,,o) D '(&,t!!
A6A
170
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'emplu
Introducei e!presiile care urmea#\.
Asigurai-"\ c\ "ariabila elist este legat\ de lista asociat\ `n
ca#ul entit\ii Line.
Command: "set= ena&e "entne't##
4Ent&t/ nam': >>>>>>>>7
Command: $ena&e
4Ent&t/ nam': >>>>>>>>7
Command: "set= elist "ent2et ena&e##
( (31 . 4Ent&t/ nam': >>>>>>>>7! (6 . ALINEA! (D . A6A! (16 1.6 1.6 6.6! (11
<.6 <.6 6.6! (16 6.6 6.6 1.6!!
Command: $elist
( (31 . 4Ent&t/ nam': >>>>>>>>7! (6 . ALINEA! (D . A6A! (16 1.6 1.6 6.6! (11
<.6 <.6 6.6! (16 6.6 6.6 1.6!!
.!tragei tipul entit\ii& La>erul [i punctul de start al
sublistei din lista asociat\.
Command: "assoc 0 elist#
(6 . ALINEA!
Command: "assoc 8 elist#
(D . A6A!
Command: "assoc 10 elist#
(16 1.6 1.6 6.6!
Apelai cdr pentru a e!trage tipul entit\ii& La>erul [i punctul
de start din subliste.
Command: "cdr "assoc 0 elist##
ALINEA
Command: "cdr "assoc 8 elist##
A6A
Command: "cdr "assoc 10 elist##
(1.6 1.6 6.6!
141246430.doc R.2.1 4/22/2013 171
AUTODESK, INC.
)ecapitulare
Perec$ile cu punct au dou\ elemente [i s`nt
forme speciale de liste.
Al doilea element al perec$ii cu punct este returnat
de cdr.
Perec$ile cu punct s`nt folosite ca liste obi[nuite `n
listele asociate entit\ilor.
.ntit\ile `nregistrate `n ba#a de date s`nt
repre#entate `n AutoLISP sub forma de liste
asociate.
8 lista asociat\ este o list\ de liste.
4iecare sublist\ dintr-o list\ asociat\ are dou\ p\ri,
car [i cdr.
Partea car a unei liste asociate entit\ii este un cod
de grup D=4 care desemnea#\ o proprietate a
entit\ii car este de asemenea denumit codul
sublistei.
Partea cdr a unei liste asociate entit\ii repre#int\
"aloarea codului de grup D=4.
4uncia assoc returnea#\ o sublista prin c\utarea
unui cod.
172
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 25- ,TI(I<AREA (I)TE(.R A).CIATE E8TITAT(.R
Dn acest e!erciiu ,
Eei consolida cuno[tinele despre listele asociate
entit\ilor.
Eei folosi funcia entget.
Eei modifica funcia de la e!erciiul +1.
Eei crea o funcie care scalea#\ numai entit\ile de
tip Line din desen.
'tape de lucru
*. Desc$idei fi[ierul te!t scalealllsp.
+. Sal"ai te!tul `ntr-un nou fi[ier sclinelsp.
%. Sc$imbai numele funciei din c,scaleall `n c,scline.
2. 9odificai funcia ca s\ scale#e numai entit\ile de tip
Line din desen.
1. Sal"ai fi[ierul.
:. Desenai c`te"a tipuri de entit\i `n desen,.Lines&
Circles and Arcs.
0. Inc\rcai fi[ierul sclinelsp [i acti"ai comanda SCLI<..
<umai entit\ile de tip Line "or fi scalate cu aceasta
comand\.
141246430.doc R.2.1 4/22/2013 173
AUTODESK, INC.
C,SCAL'ALL
(defun c:scaleall ()
(setq ename (entnext)) ;get first entity
(setq counter 1) ;initialize counter
(while
ename ;we have an entity?
(command "._SCALE" ename "" "0,0" "0.5");scale it
(prompt ;tell user which one
(strcat
"\nScaling entity "
(itoa counter)
".\n"
)
)
(setq counter (1+ counter)) ;increment the counter
(setq ename (entnext ename)) ;get the next entity
)
(prin1) ;quiet exit
)
C,SCLI*'
(defun c:scline ()
(setq ename (entnext)) ;get first entity
(setq counter 1) ;initialize counter
(while
ename ;we have an entity?
(if ;if it's a Line...
(=
"LINE"
(cdr (assoc 0 (entget ename)))
)
(progn
(command "._SCALE" ename "" "0,0" "0.5");scale it and...
(prompt ;tell user which one
(strcat
"\nScaling entity "
(itoa counter)
".\n"
)
)
)
)
(setq counter (1+ counter)) ;increment the counter
(setq ename (entnext ename)) ;get the next entity
)
(prin1) ;quiet exit
)
174
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
141246430.doc R.2.1 4/22/2013 175
AUTODESK, INC.
,odi(icarea unei entit\]i
9odificarea unei entit\i cu AutoLISP-ul are loc `n dou\
etape.
9odificai lista asociat\ unei entit\i cu funcia subst.
Actuali#ai entitatea prin aplicarea funciei entmod
la noua list\ asociat\.
Obiective
Dn acest capitol "ei studia,
Cum s\ modificai o list\ asociat\ unei entit\i.
Cum s\ actuali#ai `nregistrarea unei entit\i `ntr-
un desen pe ba#a sc$imb\rilor din lista asociat\.
Substituirea valorilor intr-o list\ asociat\
4uncia subst `nlocuie[te un element dintr-o list\. 4uncia
cere trei argumente, "aloarea de substituire& "aloarea de
substituit `ntr-o list\ [i o list\ care conine "aloarea de
substituit.
Putei folosi funcia subst pentru a `nlocui o "aloare `ntr-o
list\ asociat\ unei entit\i.
Iat\ un e!emplu care ilustrea#\ modul cum funcionea#\
funcia subst. Eom `nlocui num\rul *1 cu num\rul *: `n lista
noastr\ de p\trate de numere `ntregi.
Command: (,'tI m/(&,t ((&,t ; = 1<!!
(; = 1<!
Command: Hm/(&,t
(; = 1<!
Command: (,u*,t 15 1< m/(&,t!
(; = 15!
Command: Hm/(&,t
(; = 1<!
Deoarece funcia subst este non-destructi"\& ea nu "a afecta
legarea "ariabilei m>list. Dn acest e!emplu funcia setO este
ad\ugat\ e!presiei pentru a sc$imba legarea.
Command: (,'tI m/(&,t (,u*,t 15 1< m/(&,t!!
(; = 15!
Command: Hm/(&,t
(; = 15!
176
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'emplu
Introducei comen#ile [i e!presiile care urmea#\.
Dntr-un desen nou& desenai o entitate Line de la *&* la 1&1.
Command: line
#$om %o&nt: 1,1
To %o&nt: 5,5
To %o&nt: Enter
4olosii funcia subst pentru a sc$imba punctul de start al
listei asociate entit\ii Line.
.!tragei sublista pentru punctul de start [i p\strai-o sub
forma unei "ariabile.
Command: "set= ena&e "entne't##
4Ent&t/ nam': >>>>>>>>7!
Command: "set= elist "ent2et ena&e##
( (31 . 4Ent&t/ nam': >>>>>>>>7! (6 . ALINEA! (D . A6A! (16 1.6 1.6 6.6! (11
<.6 <.6 6.6! (16 6.6 6.6 1.6!!
Command: "set= oldGstart "assoc 10 elist##
(16 1.6 1.6 6.6!
Dnlocuii "ec$iul punct de start cu unul nou de 0.1&+.1&6 [i
sc$imbai legarea "ariabilei elist.
Command: "set= nePGstart "list 10 7.5 2.5 0.0##
(16 C.< .< 6.6!
Command: "set= elist "s%0st nePGstart oldGstart elist##
( (31 . 4Ent&t/ nam': >>>>>>>>7! (6 . ALINEA! (D . A6A! (16 C.< .< 6.6! (11
<.6 <.6 6.6! (16 6.6 6.6 1.6!!
Command: "assoc 10 elist#
(16 C.< .< 6.6!
141246430.doc R.2.1 4/22/2013 177
AUTODESK, INC.
Actuali(area unei entit\#i
4uncia entmod modific\ propriet\ile unei entit\i cer`nd
AutoCAD-ului s\ actuali#e#e entitatea pe ba#a modific\rilor
f\cute `n lista asociat\ entit\ii.
4uncia entmod solicit\ un singur argument , o list\ "alabil\
asociat\ entit\ii.
'emplu
4olosii funcia entmod pentru a aplica modific\rile la
entitatea Line pe ba#a modific\rilor f\cute `n copia listei
asociate.
Introducei e!presiile care urmea#\.
Command: $elist
((31 . 4Ent&t/ nam': >>>>>>>>7! (6 . ALINEA! (D . A6A! (16 C.< .< 6.6! (11
<.6 <.6 6.6! (16 6.6 6.6 1.6!!
Command: "ent&od elist#
((31 . 4Ent&t/ nam': >>>>>>>>7! (6 . ALINEA! (D . A6A! (16 C.< .< 6.6! (11
<.6 <.6 6.6! (16 6.6 6.6 1.6!!
Punctul de start al entit\ii Line ar trebui s\ se deplase#e de
la *.6& *.6& 6.6 la 0.1& +.1& 6.6.
*&*&6
1&1&6

1&1&6
0.1&+.1&6
Figura +(. Linie inainte si dupa apelarea 1unctiei entmod.
)ecapitulare
8 sublist\ dintr-o list\ asociat\ poate fi `nlocuit\ cu
funcia subst.
4uncia entmod "a actuali#a `nregistrarea unei
entit\i `n ba#a de date pe ba#a modific\rilor din
lista asociat\.
178
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 26- ACT,A(I<AREA I8RE5I)TRARII ,8EI E8TITATI
Dn acest e!erciiu,
Eei aprofunda cuno[tinele despre modificarea
entitailor [i despre listele asociate.
Eei folosi funcia entmod.
Eei modifica funcia de la e!erciiul +:.
Eei modifica listele asociate tuturor entit\ilor
Line.
Eei actuali#a `nregistrarea entit\ilor acestora.
'tape de lucru
Desc$ideti fi[ierul te!t sclinelsp.
Sal"ai te!tul `ntr-un fi[ier nou numit modlinelsp.
Sc$imbai numele funciei din c,scline `n c,modline.
9odificai funcia.
Dac\ entitatea este de tip Line& modificai-i punctul
de cap\t din "aloarea curent\ `n punctul 1.6&
1.6& 6.6.
Sal"ai fi[ierul.
Dntr-un desen nou& desenai c`te"a linii [i cercuri
`n diferite po#iii.
Dnc\rcai fi[ierul modlinelsp
Acti"ai comanda 98DLI<..
141246430.doc R.2.1 4/22/2013 179
AUTODESK, INC.
C,SCLI*'
(defun c:scline ()
(setq ename (entnext)) ;get first entity
(setq counter 1) ;initialize counter
(while
ename ;we have an entity?
(if ;if it's a Line...
(=
"LINE"
(cdr (assoc 0 (entget ename)))
)
(progn
(command "._SCALE" ename "" "0,0" "0.5");scale it and...
(prompt ;tell user which one
(strcat
"\nScaling entity "
(itoa counter)
".\n"
)
)
)
)
(setq counter (1+ counter)) ;increment the counter
(setq ename (entnext ename)) ;get the next entity
)
(prin1) ;quiet exit
)
C,3O&LI*'
(defun c:modline ()
(setq ename (entnext)) ;get first entity
(setq counter 1) ;initialize counter
(while
ename ;we have an entity?
(setq elist (entget ename)) ;get its assoc list
(if ;if it's a Line...
(= "LINE" (cdr (assoc 0 elist)))
(progn
(entmod ;change its end point
(subst '(11 5.0 5.0 0.0) (assoc 11 elist) elist)
)
(prompt ;tell user which one
(strcat
"\nModifying entity "
(itoa counter)
".\n"
)
)
)
)
(setq counter (1+ counter)) ;increment the counter
(setq ename (entnext ename)) ;get the next entity
180
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
)
(prin1) ;quiet exit
)
141246430.doc R.2.1 4/22/2013 181
AUTODESK, INC.
E+ERCITI,( 27- ACT,A(I<AREA T,T,R.R E8TITATI(.R H;I/E8)I.8D I8TR4,8 ;E)E8
Acesta este un e!erciiu opional.
Dn acest e!erciiu,
Eei aprofunda cuno[tinele despre modificarea
entit\ilor [i listele asociate.
Eei scrie o funcie care s\ modifice toate entitaile
de tip Dimmension din desen.
'tape de lucru
*. Desc$idei fi[ierul grafic moddimd/g `n directorul
student.
Figure (. Desenul moddim.dCg.
+. Dimensiunile din acest desen au fost amplasate pe
c`te"a ni"ele diferite. Sarcina d"s. este s\ scriei un
program AutoLISP care s\ caute toate entit\ile
Dimension din acest desen [i s\ le amplasai pe ni"elul
DI9.
%. 4i[ierul program AutpLISP moddimlsp din directorul
student conine sc$ia programului. Desc$idei acest
fi[ier cu editorul de te!t [i ad\ugai codul necesar pentru
a completa programul.
182
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Selectarea numelui unei entit\]i prin selec]ie
'ra(ic\ cu cursorul
-n program AutoLISP poate e!trage numele unei entit\i
cer`nd utili#atorului s\ selecte#e o entitate.
Obiective
Dn acest capitol "ei studia,
Cum s\ e!tragei numele unei entit\i interacti" cu
utili#atorul.
Cum s\ folosii funcia entsel.
Cum s\ deplasai centrul cercului selectat de
utili#ator.
/unc#ia entsel
4uncia entsel "\ cere s\ selectai un singur obiect. 4uncia
returnea#\ o list\ cu dou\ obiecte, numele entit\ii [i punctul
`n care a fost selectat? dac\ nu se selectea#\ nimic atunci
funcia returnea#\ nil.
Putei e!trage numele entit\ii din lista returnat\ de funcia
entsel cu ajutorul funciei car.
'emplu
Introducei e!presiile care urmea#\.
Dntr-un desen nou & desenai o linie [i un cerc.
Command: line
#$om %o&nt: 1,1
To %o&nt: 5,5
To %o&nt: Enter
Command: circle
"P0P0TTR04C'nt'$ %o&nt7: 5,5
D&am't'$04Rad&u,7: 1
Selectai cercul `n punctul 1&:&6 ca r\spuns la cererea
funciei entsel [i legai "aloarea returnat\ de "ariabila epic'.
Command: "set= e!ic: "entsel##
S'(')t o*+')t: !ic: circle at 5,6,0
(4Ent&t/ nam': >>>>>>>>7 (<.6 5.6 6.6!!
Command: $e!ic:
(4Ent&t/ nam': >>>>>>>>7 (<.6 5.6 6.6!!
141246430.doc R.2.1 4/22/2013 183
AUTODESK, INC.
.!tragei numele entit\ii din lista returnat\ de funcia entsel
[i p\strai-l `n "ariabila ename.
Command: "set= ena&e "car e!ic:##
4Ent&t/ nam': >>>>>>>>7
Command: $ena&e
4Ent&t/ nam': >>>>>>>>7
Wtergei entitatea Circle.
Command: "co&&and C.GeraseC ena&e CC#
)ecapitulare
4uncia entsel e!trage o list\ a propriet\ilor unui
obiect selectat de utili#ator, numele entit\ii [i
punctul `n care a fost selectat.
Partea car a unei liste selectate de entsel repre#int\
numele unei entit\#i%
184
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 28- )E(ECTAREA )I /.;IAICAREA ,8,I CERC
Dn acest e!erciiu,
Eei consolida cuno[tinele despre selecia
interacti"\ a entit\ilor.
Eei crea un program care cere utili#atorului s\
selecte#e o entitate Circle [i un nou punct de
centru care deplasea#\ centrul cercului
'tape de lucru
*. Dn editorul de te!te& desc$idei fi[ierul te!t numit
circenlsp din directorul student.
+. Ad\ugai codul care face urmatoarele,
Define[te funcia c,circen.
Cere utili#atorului o entitate cu funcia entsel.
Dac\ utili#atorul selectea#\ o entitate& codul trimite
lista asociat\ entit\ii ca argument la funcia
circenTmod.
%. Sal"ai fi[ierul.
2. Dnc\rcai programul `n AutoCAD.
1. Eerificai comanda CI)C.< `ntr-un desen care conine
cel puin un cerc.
(defun circen_mod (elist)
(if
(/= "CIRCLE" (cdr (assoc 0 elist))) ;is it a circle?
(prompt "\nNot a circle.") ;if not, exit
(progn
(setq old_cen (cdr (assoc 10 elist))) ;get current center
(initget 1) ;no null reponse...
;for getpoint

;get new center
(setq new_cen (getpoint old_cen "\nCenter point: "))

(entmod ;modify the circle
(subst (cons 10 new_cen) (assoc 10 elist) elist)
)
)
)
)
141246430.doc R.2.1 4/22/2013 185
AUTODESK, INC.
E+ERCITI,( 29- *R.6(E/E .*TI.8A(E ;E ACCE) (A E8TITATI
Acestea s`nt e!erciii opionale pe care le putei completa
`n clas\ sau `n afara clasei.
Scriei un set de definiii de funcii.
c,movelast
Deplasai ultima entitate `n ba#a de date.
Cerei operatorului punctul de ba#\ [i al doilea
punct al deplas\rii..
c,printent
Selectai fiecare entitate din desen& una dup\ alta.
(ip\rii fiecare tip [i la>er ale entit\ii `n #ona liniei
de comand\.
c,red
Cerei operatorului s\ selecte#e o entitate.
Sc$imbai culoarea entit\ii `n ).D ;repre#entat\
`ntr-o list\ asociat\ de codul de grup :+ [i
num\rul `ntreg *H.
8bser"ai c\ putei ad\uga o nou\ sublist\ la lista
asociat\ `n loc s\ `nlocui#i o list\ e!istent\
folosind funcia entmod. 8 sublist\ de grup :+ nu
este pre#ent\ `ntr-o list\ asociat\ unei entit\i
dac\ culoarea entit\ii este 7MLAM.).
c,c$gla2er
Cerei operatorului s\ selecte#e o entitate.
Cerei operatorului numele unui ni"el.
Sc$imbai ni"elul entit\ii.
186
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
"ratarea erorilor
AutoLISP dispune de o metod\ pentru tratarea erorilor de
program [i de utili#are.
Obiective
Dn acest capitol "ei studia,
Cum s\ folosii funciile e!it [i Ouit pentru a fora o
eroare AutoLISP.
Cum s\ `nlocuii rutina implicit\ AutoLISP de tratare
a erorilor.
Cum s\ utili#ai rutina de tratare a erorilor pentru
Ca [tergeC un program dup\ ce a fost abortat din
cau#a unei erori sau pentru c\ utili#atorul a
anulat programul.
Cum s\ folosii comanda -<D8 `n rutina de tratare
a erorilor.
/or#area unei erori
4unciile e!it [i Ouit reali#ea#\ aceea[i operaie& f\r\
argumente.
4unciile e!it [i Ouit forea#\ aplicaia curent\ s\ se termine
prin forarea unei erori AutoLISP. .le returnea#\ [irul
COuitJe!it abortC [i transfer\ [irul funciei de tratare a
erorilor KerrorK. Dup\ e!ecutarea funciei de tratare a
erorilor& AutoCAD-ul se `ntoarce la linia de comand\.
8 aplicaie poate folosi funciile e!it [i Ouit `n combinaie cu
o funcie de tratare a erorilor definit\ de utili#ator pentru a
opri propria-i e!ecuie& pentru a reface orice "alori necesare
`n AutoCAD [i pentru a pre#enta utili#atorului un mesaj
adec"at.
/unc#ia BerrorB
Putei fi siguri c\ po#iionarea unei "ariabile de sistem sau o
anumit\ condiie AutoCAD pot fi restabilite dup\ apariia
unei erori nea[teptate folosind funcia KerrorK. Dn cadrul
acestei funcii care poate fi definit\ de utili#ator putei
e"alua condiiile de eroare& putei returna un mesaj adec"at
utili#atorului [i puteti restabili setarea "ariabilelor AutoCAD.
Parcurgei aceste etape pentru a implementa o subrutin\ de
tratare a erorilor definit\ de utili#ator pentru o comand\.
Sal"ai definiia curent\ a funciei KerrorK.
141246430.doc R.2.1 4/22/2013 187
AUTODESK, INC.
Definii o nou\ funcie KerrorK pentru comand\ sau funcie.
)edefinii subrutina "ec$e de tratare a erorilor prin
comanda e!it sau prin e!it dintr-o nou\ subrutin\ de tratare a
erorilor.
)edefinirea rutinei de tratare a erorilor ar trebui f\cut\ `n
conte!tul unei comen#i sau a unei funcii? plasai codul
pentru a defini o rutin\ de tratare a erorilor `n cadrul
codului pentru comand\.
188
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
.!emplu
Acest cod implementea#\ comanda c,rectangle [i propria-i
rutin\ de tratare a erorilor.
(defun c:rectangle (/ pt1 pt2)
(setq old_error *error*) ;save default error handler
(defun *error* (msg) ;define new error handler
(setvar "CMDECHO" old_cmdecho) ;restore system variable
(if
(/= "Function cancelled" msg) ;no message if user cancels
(if
(= msg "quit / exit abort") ;no message if program
(princ) ;deliberately aborts
(princ (strcat "\nError: " msg));otherwise, print error for user
)
(princ)
)
(setq *error* old_error) ;restore default error handler
(princ) ;quiet exit
)
(setq old_cmdecho (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq pt1 (getpoint "\nFirst corner: "))
(setq pt3 (getpoint "\nOther corner: "))
(command "pline"
pt1
(list (car pt1) (car (cdr pt3)))
pt3
(list (car pt3) (car (cdr pt1)))
"c"
)
(setvar "CMDECHO" old_cmdecho)

(setq *error* old_error) ;restore default error handler
;if command is successful
(prin1)
)
Dup\ cum "edei& AutoLISP-ul "\ permite s\ definii o funcie
;adic\ s\ apelai funcia defunH `n timpul e!ecut\rii unei
comen#i sau funcii definite de utili#ator. Deci rutina de
tratare a erorilor pentru funcia c,rectangle este definit\ de
`ndat\ ce utili#atorul apelea#\ comanda ).C(A</L. dar nu
`nainte de asta. )utina AutoLISP& implicit\ de tratare a
erorilor este refacut\ `n toate ca#urile, c`nd comanda
ajunge s\ fie `ndeplinit\ cu succes sau la cap\tul rutinei de
tratare a erorilor cu comanda specific\.
Aceast\ te$nic\ "\ permite s\ adaptai rutina AutoLISP de
tratare a erorilor pentru orice situaie.
)utina noastr\ de tratare a erorilor cu comand\ specific\
reface po#iionarea original\ a "ariabilei de sistem C9D.CB8
141246430.doc R.2.1 4/22/2013 189
AUTODESK, INC.
`n ca#ul `n care Comanda ).C(A</L. `nt`lne[te o eroare `n
timpul e!ecuiei. Eariabila definit\ de utili#ator oldTemdec$o
a fost facut\ global a[a `nc`t "aloarea ei este accesibil\ noii
funcii KerrorK.
190
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 30- ;EAI8IREA )I ,TI(I<AREA ,8EI 8.I ),6R,TI8E ;E TRATARE A ER.RI(.R
Dn acest e!erciiu,
Eei aprofunda cuno[tinele despre modul cum se
folose[te o rutin\ de tratare a erorilor.
Eei modifica funcia de la e!erciiul +3.
'tape de lucru
*. Ad\ugai o rutin\ de tratare a erorilor pentru comanda
CI)C.< `n fi[ierul circenlsp
+. 4olosii e!emplul de la c,rectangle ca o ba#\ de la care s\
pornii.
%. Dnc\rcai programul `n AutoCAD.
2. Acti"ai comanda CI)C.< [i anulai-o cu Ctrl-C pentru a
"erifica rutina de tratare a erorilor.
141246430.doc R.2.1 4/22/2013 191
AUTODESK, INC.
.*&O [i tratarea erorilor
Pentru a permite utili#atorului s\ anule#e `ntr-o singur\
etap\ re#ultatul unei comen#i pe ba#\ de AutoLISP&
amplasai un -<D8 9A)Y la `nceputul rutinei.
Putei folosi rutina de tratare a erorilor pentru a anula
automat re#ultatele unei comen#i pe ba#\ de AutoLISP p`n\
la punctul unde a inter"enit eroarea& admiind faptul ca
-<D8 C8<()8L este setat pentru 8<. sau ALL.
Eariabilele de sistem -<D8C()L [i -<D89A)YS pot fi
e!aminate de un program AutoLISP pentru a determina ce
aciune de anulare& dac\ e!ist\ "reouna& este adec"at\
pentru sesiunea curent\ AutoCAD.
'emplu
Aceast\ definiie a comen#ii ).C(A</L. permite utili#atorului
s\ anule#e re#ultatele comen#ii `ntr-o singur\ etap\.
Instruciunea if testea#\ dac\ -<D8 este acti"at\. Dac\ da&
atunci d\ o comand\ -<D8 9A)Y la `nceputul rutinei.
Dup\ ce utili#atorul introduce o comand\ ).C(A</L.&
utili#atorul poate anula re#ultatul comen#ii cu comen#ile -
sau -<D8 7ACY.
(defun c:rectangle (/ pt1 pt2)
(setq old_cmdecho (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(if
(= 1 (logand 1 (getvar "UNDOCTL")))
(command "._UNDO" "_MARK")
)
(setq pt1 (getpoint "\nFirst corner: "))
(setq pt3 (getpoint "\nOther corner: "))
(command "._PLINE"
pt1
(list (car pt1) (car (cdr pt3)))
pt3
(list (car pt3) (car (cdr pt1)))
"_C"
)
(setvar "CMDECHO" old_cmdecho)

(prin1)
)
192
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
'emplu
.!tindem codul -<D8 pentru a include rutina de tratare a
erorilor. Dac\ rutina este anulat\ dintr-un moti" oarecare [i
-<D8 este disponibil& re#ultatul comen#ii p`n\ la punctul de
eroare este anulat automat. Se setea#\ o "ariabila de
condiie pentru a fi e!aminat\ `n rutina de tratare a
erorilor. -n -<D8 /)8-P este acti"at `n comand\ [i corelat
cu un -<D8 .<D.
<8(A 4i[ierul ai0utilslsp1 $ersiunea -. din directorul
support conine c`te"a rutine pentru folosirea codului -<D8
`ntr-un program AutoLISP.
continuare pe pagina urmatoare
141246430.doc R.2.1 4/22/2013 193
AUTODESK, INC.
(defun c:rectangle (/ pt1 pt2)
(setq old_cmdecho (getvar "CMDECHO")) ;store orignal command echo
(setvar "CMDECHO" 0) ;turn off command echo
(setq old_error *error*) ;save default error handler
(defun *error* (msg) ;define new error handler
(command) ;cancel any command `n progress
(if
rect_undo_flag ;if the undo flag is t...
(progn
(command "._UNDO" "_END") ;end the group...
(command "._U") ;undo the command...
(setq rect_undo_flag nil) ;and clear the flag
)
)
(setvar "CMDECHO" old_cmdecho) ;restore system variable
(if
(/= "Function cancelled" msg) ;no message if user cancels
(if
(= msg "quit / exit abort") ;no message if program
(princ) ;deliberately aborts
(princ (strcat "\nError: " msg));otherwise, print error for user
)
(princ)
)
(setq *error* old_error) ;restore default error handler
(princ) ;quiet exit
)
(if
(= 1 (logand 1 (getvar "UNDOCTL")));if UNDO is on...
(progn
(command "._UNDO" "_GROUP") ;start an UNDO GROUP...
(setq rect_undo_flag t) ;and set a flag
)
(setq rect_undo_flag nil) ;else, clear the flag
)
(setq pt1 (getpoint "\nFirst corner: "))
(setq pt3 (getpoint "\nOther corner: "))
(command "pline"
pt1
(list (car pt1) (car (cdr pt3)))
pt3
(list (car pt3) (car (cdr pt1)))
"c"
)
(if
rect_undo_flag ;if the flag is set...
(progn
(command "._UNDO" "_END") ;end the UNDO GROUP...
(setq rect_undo_flag nil) ;and clear the flag
)
)

194
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
(setvar "CMDECHO" old_cmdecho) ;reset original command echo

(setq *error* old_error) ;restore default error handler
;if command is successful
(prin1) ;quiet exit
)
141246430.doc R.2.1 4/22/2013 195
AUTODESK, INC.
-pera]ii cu (i[iere
AutoLISP poate citi [i scrie fi[iere te!t de tip ASCII.
Obiective
Dn acest capitol "ei studia,
Ce este un descriptor de fi[ier [i cum este
folosit.
Cum s\ desc$idei un fi[ier pentru operaii de citire
sau scriere.
Cum s\ scriei linii de te!t `ntr-un fi[ier desc$is.
Cum s\ citii linii de te!t dintr-un fi[ier desc$is.
Cum s\ descoperii sf`r[itul unui fi[ier te!t.
Cum s\ `nc$idei un fi[ier.
/unc#iile fi[ier ICO
8peraiile de citire [i scriere `ntr-un fi[ier sau operaii IJ8
`ntr-un fi[ier se reali#ea#\ cu ajutorul a dou\ funcii, read-line
[i Grite-line. Desc$iderea [i `nc$iderea fi[ierelor se reali#ea#\
de asemenea prin dou\ funcii, open [i close.
&esc$iderea unui fi[ier
4uncia open cere dou\ argumente, numele unui fi[ier ce
urmea#\ a fi desc$is [i modul de desc$idere a acestuia.
Ambele argumente trebuie s\ fie [iruri.
Dac\ funcia open reu[e[te& returnea#\ un descriptor de
fi[ier. Dac\ e[uea#\& returnea#\ nil.
Pro'ramul dvs. trebuie s\ p\streze descriptorul de
(i[ier `ntr-o variabil\/ Dac\ nu-l p\strai& nu "ei putea citi&
scrie sau `nc$ide fi[ierul.
Descriptorul de fi[ier este un argument obligatoriu pentru
funciile care scriu `n& citesc dinJsau `nc$id fi[ierul.
.!ist\ trei tipuri "alide de moduri de desc$idere a unui fi[ier.
4iecare trebuie s\ fie repre#entat de o liter\ mic\ desparit\
prin semne de punctuaie.
196
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
.!en &ode ;escriere
A$A D',)8&d'$'a -&,&'$u(u& %'nt$u )&t&$'.
A2A D',)8&d'$'a -&,&'$u(u& %'nt$u ,)$&'$'. da)a '>&,ta
un -&,&'$ )u a)'(a,& num' ,' Ka %$odu)' o
,u%$a,)$&'$'.
AaA D',)8&d'$'a -&,&'$u(u& %'nt$u adau.a$'. da)a '>&,ta
un -&,&'$ )u a)'(a,& num', Ka -& adau.at (a ,-&$,&tu(
a)',tu&a.
Tabelul /. ?oduri de a desc:ide un 1iEier.
De e!emplu& aceast\ e!presie desc$ide un fi[ier numit
testt,t. pentru o operaie de scriere.
Command: (,'tI -% (o%'n At',t.t>tA A2A!!
4#&(': F>>>>>7
Command: H-%
4#&(': F>>>>>7
Scrierea `ntr-un fi[ier
4uncia Grite-line "a scrie un [ir de te!t `ntr-un fi[ier desc$is.
Aceast\ funcie cere dou\ argumente, un [ir de tip te!t [i un
descriptor de fi[ier. Al doilea argument este opional? dac\
nu este introdus& funcia Grite-line "a scrie [irul pe displa>.
Presupunei c\ "ariabila fp este legat\ de un descriptor de
fi[ier "alid returnat prin desc$iderea unui fi[ier pentru o
operaie de scriere.
Aceste e!presii scriu dou\ linii de te!t `ntr-un fi[ier.
Command: (2$&t'3(&n' A#&$,t (&n'.A -%!
A#&$,t (&n'.A
Command: (2$&t'3(&n' AS')ond (&n'.A -%!
AS')ond (&n'.A
Dnc$iderea unui fi[ier
(rebuie s\ `nc$idei fi[ierul imediat dup\ operaii de scriere&
citire sau ad\ugare. Dac\ nu-l inc$idei& resursele sistemului
d"s. "or fi limitate& `n particular num\rul de $andlere de
fi[iere disponibil.
4uncia close "a `nc$ide un fi[ier desc$is. 4uncia cere un
argument, un descriptor de fi[ier "alid. 4uncia returnea#\
nil.
Aceast\ e!presie "a `nc$ide fi[ierul desc$is [i `n care s-a
scris `n cele dou\ e!emple anterioare.
Command: (,'tI -% ()(o,' -%!!
141246430.doc R.2.1 4/22/2013 197
AUTODESK, INC.
Deoarece descriptorul de fi[ier fp nu mai este "alid dup\ ce
fi[ierul la care se refer\ este `nc$is& de e!emplu dac\ se
setea#a fp la nil este ec$i"alent cu a `nc$ide fi[ierul. Se
eliberea#\ astfel memoria [i se obine asigurarea c\ fp nu
poate fi folosit `n afara conte!tului.
'emplu
Introducei e!presiile care urmea#\.
Desc$idei un fi[ier& scriei c`te"a linii de te!t `n fi[ier [i
`nc$idei fi[ierul. .!aminai fi[ierul cu editorul de te!t dup\
ce a fost `nc$is.
Desc$idei un fi[ier numit testt,t pentru o operaie de
scriere.
Command: "set= 9! "o!en Ctest.t'tC CPC##
4#&(': F>>>>>7
Command: $9!
4#&(': F>>>>>7
Scriei c`te"a linii de te!t `ntr-un fi[ier.
Command: "Prite4line CCodersC 9!#
ACod'$,A
Command: "Prite4line Co9 t?eC 9!#
Ao- t8'A
Command: "Prite4line C(ost )!ar:C 9!#
ALo,t S%a$NA
Dnc$idei fi[ierul.
Command: "set= 9! "close 9!##
n&(
Command: $9!
n&(
Desc$idei fi[ierul testt,t `n editorul te!t [i e!aminai-l. Ar
trebui s\ conin\ trei linii de te!t.
Coders
of the
Lost Spark
198
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
&esc$iderea unui fi[ier pentru o opera#ie de citire
C`nd desc$idei un fi[ier pentru o operaie de citire& putei
citi datele din fi[ier& linie cu linie. <u putei modifica sau
scrie `ntr-un fi[ier care a fost desc$is pentru o operaie de
citire. ;Dac\ "rei s\ introducei date `n fi[ier& `nc$idei-l [i
redesc$idei-l pentru o operaie de scriere.H
4uncia open apelat\ cu un argumenr CrC returnea#\ un
descriptor de fi[ier dac\ fi[ierul specificat e!ist\? dac\ nu&
returnea#\ nil.
4uncia read-line cite[te o linie de te!t dintr-un fi[ier. Cere un
argument opional, un descriptor de fi[ier "alid pentru un
fi[ier care a fost desc$is pentru o operaie de citire. Dac\
argumentul nu este ad\ugat& funcia read-line cite[te intrarea
de pe tastatur\.
4uncia read-line returnea#\ o linie de te!t pe care o cite[te
dintr-un fi[ier. 4uncia read-line returnea#\ nil dac\ ajunge la
cap\tul fi[ierului.
4uncia read-line `ncepe cu prima linie de te!t dintr-un fi[ier.
8 apelare ulterioar\ a funciei read-line "a face ca funcia s\
citeasc\ urm\toarea linie de te!t din fi[ier [i a[a mai departe.
141246430.doc R.2.1 4/22/2013 199
AUTODESK, INC.
'emplu
Introducei e!presiile care urmea#\.
Dn acest e!emplu se presupune c\ ai creat cu succes
fi[ierul te,tt,t din e!erciiul anterior.
Desc$idei fi[ierul testt,t pentru o operaie de citire.
Command: "set= 9! "o!en Ctest.t'tC CrC##
4#&(': FGGGG7
Command: $9!
4#&(': FGGGG7
Citii prima& a dou\ [i a treia linie din fi[ier.
Command, ;read-line fpH
RCodersS
Command: "read4line 9!#
Ao- t8'A
Command: "read4line 9!#
ALo,t S%a$NA
Dncercai s\ citii p`n\ la sf`r[itul fi[ierului. 4uncia read-line
"a returna nil.
Command: "read4line 9!#
n&(
Dnc$idei fi[ierul.
Command: "set= 9! "close 9!##
n&(
Command: $9!
n&(
200
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
)ecapitulare
-n descriptor de fi[ier este un pointer al unui
fi[ier returnat de funcia open.
-n program trebuie s\ p\stre(e un descriptor
de fi[ier pentru a a"ea acces la fi[ierul pe care
l-a desc$is.
4i[ierele pot fi desc$ise pentru operaii de citire&
scriere [i ad\ugare.
Argumentele pentru modul de desc$idere a
fi[ierelor la funcia open trebuie s\ fie litere mici.
-n fi[ier poate fi desc$is numai pentru o singur\
operaie.
4unciile "rite-line [i read-line scriu [i citesc din
fi[iere.
4uncia read-line returnea#\ nil c`nd ajunge la
cap\tul fi[ierului.
141246430.doc R.2.1 4/22/2013 201
AUTODESK, INC.
E+ERCITI,( 31- C.*IEREA ,8,I AI)IER TE+T
A"ei %6 de minute la dispo#iie s\ terminai acest e!erciiu?
este un program "ast. A"ei ne"oie de timp ca s\ re"i#uii [i
s\ `nelegeti codul [i de asemenea s\ introducei te!tul
surs\.
Dn acest e!erciiu,
Eei aprofunda cuno[tinele despre fi[iere IJ8 `n
AutoLISP.
Eei crea un program AutoLISP pentru citit fi[iere
te!t de tip ASCII [i pentru copiat fi[iere `ntr-un
fi[ier cu nume diferit.
Eei desc$ide fi[iere at`t pentru citit c`t [i pentru
scris.

Instruciuni
*. Introducei codul care urmea#\ `ntr-un document nou din
editorul te!t.
+. Sal"ai fi[ierul `n directorul student sub numele de
copyfilelsp
%. Aceast\ funcie folosete o rutin\ de tratare a erorilor cu
apelare asem\n\toare cu cea din e!erciiul precedent.
Earibilele legate de descriptoarele de fi[ier au fost
definite global a[a `nc`t rutina de tratare a erorilor le
poate `nc$ide dac\ este necesar.
2. Dnc\rcai copyfilelsp `n AutoCAD.
1. Acti"ai comanda C8PM4IL..
:. Dncercai s\ copiai dou\ fi[iere te!t.
0. Depanai programul dac\ este necesar.
continuare pe pagina urmatoare
202
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
(defun c:copyfile (/ r_fp_name w_fp_name r_fp_line)
; r_fp source file descriptor
; w_fp destination file descriptor
; r_fp_name source file name
; w_fp_name destination file name
; r_fp_line source file text line
(setq old_error *error*) ;save default error handler
(defun *error* (msg) ;define new error handler
(if ;close source file if open
r_fp
(setq r_fp (close r_fp))
)
(if ;close destination file if open
w_fp
(setq w_fp (close w_fp))
)
(if
(/= "Function cancelled" msg) ;no message if user cancels
(if
(= msg "quit / exit abort") ;no message if program
deliberately
(princ) ;aborts
(princ (strcat "\nError: " msg));otherwise, print error for user
)
(princ)
)
(setq *error* old_error) ;restore default error handler
(princ) ;quiet exit
)
;get source file from user with dialogue
(setq r_fp_name (getfiled "Select Source File" "" "txt" 0))

;if source file returned, get destination file from user
(if
r_fp_name
(setq w_fp_name (getfiled "Destination File" "" "txt" 1))
)
;check that we got good values for both file names
;exit if not
(if
(or
(not r_fp_name)
(not w_fp_name)
)
(progn
(prompt "\nMust specify both source and destination file.")
(exit)
)

141246430.doc R.2.1 4/22/2013 203
AUTODESK, INC.
)
continuare pe pagina urmatoare
204
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
;check that file names are different
;exit if not
(if
(= r_fp_name w_fp_name)
(progn
(prompt "\nSource same name as destination file.")
(exit)
)
)
;open source file for read
;exit if it fails
(if
(not (setq r_fp (open r_fp_name "r")))
(progn
(prompt "\nCould not open source file.")
(exit)
)
)
;open destination file for read
;close source file and exit if it fails
(if
(not (setq w_fp (open w_fp_name "w")))
(progn
(setq r_fp (close r_fp))
(prompt "\nCould not open destination file.")
(exit)
)
)
;get first line from source file
(setq r_fp_line (read-line r_fp))
;write source line to destination file and get next...
;source line until end of file is reached
(while
r_fp_line
(write-line r_fp_line w_fp)
(setq r_fp_line (read-line r_fp))
)
;close the source and destination files
(setq r_fp (close r_fp))
(setq w_fp (close w_fp))
;restore original error handler

141246430.doc R.2.1 4/22/2013 205
AUTODESK, INC.
(setq *error* old_error)
(prin1) ;quiet exit
)
206
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,(32- CITIREA ,8,I AI)IER TE+T )I CREAREA E8TITATII HTE+TD
Acesta este un eerci#iu op#ional%
Dac\ terminai cu comanda C8PM4IL. putei continua cu
acest e!erciiu opional.
4uncia c,iote!t "\ arat\ cum s\ citii un fi[ier te!t de pe disc [i
s\ scriei te!tul sub form\ de entitai te!t AutoCAD. Acesta
este un subset de facilit\i inclus `n ACAD ) *+ din cadrul
fi[ierului ascte,tlsp
'tape de lucru
*. Desc$idei un nou fi[ier `n editorul te!t.
+. Introducei codul care urmea#\ [i sal"ai-l `ntr-un fi[ier
numit iote,tlsp
%. Dnc\rcai fi[ierul `n AutoCAD.
2. Acti"ai comanda I8(.=(.
-n singur lucru trebuie s\ sc$imbai, cerei utili#atorului s\
pun\ spaii `ntre linii `n loc s\ scale#e mereu `n\limea
te!tului cu *.1.
continuare pe pagina urmatoare
141246430.doc R.2.1 4/22/2013 207
AUTODESK, INC.
; Iotext.lsp
;
; Command function IOTEXT prompts for the name of a text file.
; It reads each line of the file and draws the corresponding Text
; entities `n AutoCAD.
;
; It prompts for the height, rotation angle and insertion point
; of the text. Text is always drawn left-justified.
(defun dtr (d) ;convert degrees to radians
(/ (* d pi) 180.0)
)
(defun rtd (r) ;convert radians to degrees
(/ (* r 180.0) pi)
)
(defun C:IOTEXT()
(setq old_cmdecho (getvar "CMDECHO")) ;save old command echo
(setvar "CMDECHO" 0) ;turn off command echo

(setq old_error *error*) ;save default error handler

(defun *error* (msg) ;define new error handler
(if ;close source file if open
io_fp
(setq io_fp (close io_fp))
)
(setvar "CMDECHO" old_cmdecho) ;restore command echo
(if
(/= "Function cancelled" msg) ;no message if user cancels
(if
(= msg "quit / exit abort") ;no message if program
deliberately
(princ) ;aborts
(princ (strcat "\nError: " msg));otherwise, print error for user
)
(princ)
)
(setq *error* old_error) ;restore default error handler
(princ) ;quiet exit
)

(setq io_fp_name ;name of text file to read
(getfiled "Select Text File" "" "txt" 0)
)

(if ;if the file dialogue is
canceled
(= io_fp_name nil) ;then exit
(exit)
)
208
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
continuare pe pagina urmatoare

141246430.doc R.2.1 4/22/2013 209
AUTODESK, INC.
(if ;if we can't open file then exit
(not (setq io_fp (open io_fp_name "r")))
(progn
(prompt "\nCan't open file for input.")
(exit)
)
)

(initget 1) ;no null
(setq ;text insertion point
io_ins_pt (getpoint "\nInsertion point: ")
)

(initget (+ 1 2 4)) ;no null, zero, negative #
(setq ;text height
io_txt_ht (getdist io_ins_pt "\nHeight: ")
)

(setq io_txt_rot ;text rotation angle
(getangle io_ins_pt "\nRotation: ")
)

(if ;if null response to rotation
(not io_txt_rot) ;prompt, set it to 0.0
(setq io_txt_rot 0.0)
)

(setq ;set line spacing distance
io_line_spacing (* io_txt_ht 1.5)
)

(setq ;set line spacing angle
io_spacing_rot (- (dtr io_txt_rot) (/ pi 2))
)

(setq io_fp_line (read-line io_fp)) ;read line from file

;while we have a line of text from the file, draw a Text entity
;in AutoCAD. Set the next Text entity insertion point. Get the
;next line of text from the file.

(while
io_fp_line
(command "text" io_ins_pt io_txt_ht io_txt_rot io_fp_line)
(setq io_ins_pt (polar io_ins_pt io_spacing_rot io_line_spacing))
(setq io_fp_line (read-line io_fp))
)

(setq io_fp (close io_fp)) ;close file

(setvar "CMDECHO" old_cmdecho) ;restore command echo
(setq *error* old_error) ;restore default error handler
(prin1) ;quiet exit
)
210
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Seturi de selec]ie
AutoCAD-ul poate a[e#a grupuri de entit\i `n seturi de
selecie. Comen#ile AutoCAD [i funciile AutoLISP pot
aciona asupra unui set de selecie [i fac`nd aceasta& poate
aciona global asupra grupului de entit\i din setul de
selecie.
Obiective
Dn acest capitol "ei `n"\a,
Cum s\ creai un set de selec#ie.
Cum s\ folosii un set de selecie cu comen#i
AutoCAD.
Cum s\ creai un set de selecie interacti"& cu
fereastr\& cu filtru [i prin selectarea tuturor
componentelor dintr-un desen.
Cum s\ aflai lungimea num\rului de entit\i `ntr-un
set de selecie.
Cum s\ lucrai cu nume de entit\#i `ntr-un set de
selecie.

*ote `n leg\tur\ cu seturile de selec#ie


-n set de selecie `n AutoLISP repre#int\ un tip unic de date
numit PICYS.(& alc\tuit dintr-o colecie de nume de entit\i.
Setul de selecie nu este o list\.
AutoLISP poate p\stra ma!imum *+5 de seturi de selecie
desc$ise odat\ ;num\rul ar putea fi mai mic pentru un
sistem datH.
Legai `ntotdeauna o "ariabil\ de un set de selecie pe care
`l creai sau modificai? altfel nu a"ei acces la setul de
selecie [i nici o cale de a elibera resursele sistemului
consumate de setul de selecie p`n\ ce nu ie[iti din
AutoCAD.
C`nd ai terminat cu o "ariabil\ atribuit\ setului de selecie&
este bine s\ setai "ariabila pe nil pentru a elibera resursele
folosite de setul de selecie.
141246430.doc R.2.1 4/22/2013 211
AUTODESK, INC.
AutoLISP dispune de o "arietate de funcii pentru a crea [i
manipula seturile de selecie. Acest capitol descrie
funcionalitatea [i arat\ e!emple de funcii ssget& sslengt$ [i
ssname.
A%nctia .!eratia
,,.'t C$'aJa un ,'t d' ,'(')t&'
,,add Adau.a o 'nt&tat' (a un ,'t d' ,'(')t&'
,,d'( St'$.' o 'nt&tat' d&nt$3un ,'t d' ,'(')t&'
,,('n.t8 D't'$m&na numa$u( d' 'nt&tat& d&nt$3un ,'t d' ,'(')t&'
,,m'm* L'$&-&)a da)a -&')a$' 'nt&tat' ',t' %a$t' a ,'tu(u& d' ,'(')t&'
,,nam' E>t$a.' num'(' 'nt&tat&(o$ d&n ,'tu( d' ,'(')t&'
Tabelul 2. Functii pentru seturi de selectie
Crearea unui set de selec#ie
4uncia ssget include "irtual toate seturile de selecie
interacti"e& cuprin#`nd metode care s`nt disponibile `n
AutoCAD la mesajul Select objects,. Sinta!a complet\ [i
num\rul de aplicaii ale funciei s`nt prea complicate pentru
a fi descrise aici `n `ntregime. De aceea ne "om concentra
atenia asupra c`tor"a dintre formele de sinta!\ cele mai
folosite [i "om l\sa descrierea complet\ `n seama
manualului AutoLISP Programmer%s Reference Manual
)inta'a 9%nctiei .!eratia
(,,.'t! PS'(')t o*+')t, W,tanda$d:)'$'$'a
%'$m&t' ut&(&Jato$u(u& ,'(')V&a
&nt'$a)t&Ka A
(,,.'t AGA! S'(')t'aJa toat' 'nt&taV&(' d&n
d','n
(,,.'t ARA S(1.6 1.6 6.6! S(11.6 D.6 6.6!! S'(')t'aJa toat' 'nt&taV&(' d&n
-'$'a,t$a d' (a 1,1,6 (a 11,D,6
(,,.'t AGA S((6 . ALINEA!!! S'(')t'aJa toat' 'nt&taV&(' L&n'
d&n d','n
Tabelul "'.Sintaxa si operaFiile 1unctiei ssget.
'emple de lucru
Desc$idei desenul ssgetd/g `n directorul student. Eei
folosi acest desen pentru urm\toarele patru e!emple care
arat\ cum s\ folosii ssget.
212
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Selec#ia interactiv\
4uncia ssget apelat\ f\r\ argumente "a genera cererea
standard Cselect objects,C `n #ona liniei de comand\ [i "a
permite utili#atorului s\ selecte#e obiecte interacti". C`nd
utili#atorul termin\ procesul de selecie cu tasta )eturn sau
Space& funcia ssget returnea#\ "aloarea ei sub forma unui
nou set de selecie.
'emplu
C`nd "\ aflai `n desenul ssgetd/g& introducei e!presiile
care urmea#\.
4olosii ssget pentru a cere utili#atorului s\ selecte#e obiecte.
Command: "set= ss1 "ss2et##
S'(')t o*+')t,: !ic: se3eral o0Fects
S'(')t o*+')t,: Enter
4S'(')t&on ,'t: 17
Eerificai tipul de date ale "ariabilei ss*.
Command: $ss1
4S'(')t&on3,'t: 17
Command: "t!e ss1#
PICKSET
4olosii setul de selecie pentru care "ariabila ss* este legat\
`n cadrul comen#ii AutoCAD.
Command: erase
S'(')t o*+')t,: $ss1
S'(')t o*+')t,: Enter
)efacei obiectele [terse.
Command: oo!s
141246430.doc R.2.1 4/22/2013 213
AUTODESK, INC.
Selectarea componentelor dintr-un desen
4uncia ssget apelat\ cu un singur argument& [irul C=C& "a
returna un set de selecie compus din entit\ile
componente din desen. Aceast\ funcie include entit\ile
care nu s`nt afi[ate pe monitor [i entitaile de pe la>ere
care s`nt `ng$eate [iJsau `nc$ise.
'emplu
C`nd s`ntei `n desenul ssgetd/g& introducei e!presiile
care urmea#\.
4olosii funcia ssget pentru a crea un set de selecie format
din toate entit\ile din desen.
Command: "set= ss1 "ss2et C+C##
4S'(')t&on ,'t: 7
Wtergei toate obiectele din desen.
Command: "co&&and C.eraseC ss1 CC#
)efacei obiectele [terse.
Command: oo!s
Selectarea componentelor dintr- o fereastr\
Putei apela funcia ssget cu un argument de tip [ir care
corespunde oric\rei opiuni standard la cererea Cselect
objects,C& opiuni cum ar fi C@C pentru entit\ile incluse `n
fereastr\& CCC pentru entitaile care tra"ersea#\ sau s`nt
incluse `n fereastr\ [i C4C pentru entit\i care intersectea#\ o
polilinie de selecie.
'emplu
C`nd s`ntei `n desenul ssgetd/g& introducei e!presiile
care urmea#\.
Creai un set de selecie din entit\i care aparin unei
ferestre definit\ de punctele :&%&6 [i **&5&&6.
Command: "set= ss1 "ss2et CMC L"6 3 0# L"11 8 0###
4S'(')t&on ,'t: "7
Wtergei toate entit\ile care se afl\ `n interiorul ferestrei.
Command: "co&&and C.eraseC ss1 CC#
)efacei toate entit\ile [terse.
214
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Selectarea cu filtru
4uncia ssget "\ permite s\ selectai entit\ile prin filtru.
Putei filtra `n acord cu oricare dintre propriet\ile entit\ilor
care s`nt p\strate `n coduri de grup D=4 `n cadrul listelor
asociate entit\ilor.
8 list\ filtru este asem\n\toare cu o list\ asociat\ entit\ii.
Implicit& o entitate trebuie s\ corespund\ fiec\rei propriet\i
din filtru pentru a putea fi ad\ugat\ la setul de selecie.
.!ist\ [i alte metode de creare a listelor de tip filtru.
Comanda AutoCAD 4IL(.) definit\ de fi[ierele filterlsp [i
filterdcl este `n general o interfa\ ba#at\ pe dialog la
funcia ssget [i listele de tip filtru.
'emplu
C`nd "\ aflai `n desenul ssgetd/g& introducei e!presiile
care urmea#\.
Creai un set de selecie format din entit\ile de tip Line din
desen.
Command: "set= ss1 "ss2et C+C L""0 . C(I8EC####
4S'(')t&on ,'t: ;7
Wtergei toate entit\ile de tip Line din desen.
Command: "co&&and C.eraseC ss1 CC#
)efacei obiectele [terse.
Command: oo!s
Setai "ariabila ss* pe nil [i eliberai resursele folosite curent
de setul de selecie.
Command: "set= ss1 nil#
n&(
141246430.doc R.2.1 4/22/2013 215
AUTODESK, INC.
Lungimea unui set de selec#ie
4uncia sslengt$ cere un singur argument, un set de selecie
"alid. 4uncia returnea#\ num\rul de nume al entit\ilor din
setul de selecie.
'emplu
C`nd "\ aflai `n desenul ssgetd/g& introducei e!presiile
care urmea#\.
Creai un set de selecie din trei ;%H entit\i.
Command: "set= ss1 "ss2et##
S'(')t o*+')t,: !ic: t?ree o0Fects
S'(')t o*+')t,: Enter
4S'(')t&on ,'t: <7
4olosii funcia sslengt$ pentru a "erifica num\rul de entit\i
din setul de selecie.
Command: "sslen2t? ss1#
"
Setai "ariabila ss* pe nil [i eliberai resursele folosite curent
de setul de selecie.
Command: "set= ss1 nil#
n&(
216
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
*umele entit\#ilor dintr-un set de selec#ie
-n set de selecie este un grup format din nume de entit\i
AutoCAD. 4uncia ssname poate stabili numele oric\rei
entit\i dintr-un set de selecie.
4uncia ssname cere dou\ argumente, un set de selecie
"alid [i un num\r `ntreg. <um\rul `ntreg corespunde unui
inde! 6 al numelui entit\ii din setul de selecie.
'emplu
C`nd "\ aflai `n desenul ssgetd/g1 introducei e!presiile
care urmea#\.
Creai un set de selecie din trei entit\i.
Command: "set= ss1 "ss2et##
S'(')t o*+')t,: !ic: t?ree o0Fects
S'(')t o*+')t,: Enter
4S'(')t&on ,'t: 57
4olosii ssname pentru a returna numele fiec\rei entit\i din
setul de selecie.
4olosii entget pentru a returna lista asociat\ fiec\rei entit\i.
Command: "set= ena&e "ssna&e ss1 0##
4Ent&t/ nam': >>>>>>>>7
Command: "ent2et ena&e#
Command: "set= ena&e "ssna&e ss1 1##
4Ent&t/ nam': >>>>>>>>7
Command: "ent2et ena&e#
Command: "set= ena&e "ssna&e ss1 2##
4Ent&t/ nam': >>>>>>>>7
Command: "ent2et ena&e#
Setai "ariabila ss* pe nil [i eliberai resursele folosite curent
de setul de selecie.
Command: "set= ss1 nil#
n&(
141246430.doc R.2.1 4/22/2013 217
AUTODESK, INC.
)ecapitulare
/rupurile de entit\i pot fi plasate `n seturi de selec#ie.
-n set de selecie `n AutoLISP are un tip de date PICYS.(.
Setul de selecie nu este o list\.
AutoLISP poate menine *+5 de seturi de selecie
desc$ise `n acela[i timp.
Lega#i o variabil\ ori de c`te ori creai un set de
selecie.
'libera#i `ntotdeauna resursele folosite de un set de
selecie dup\ ce ai terminat de lucrat cu acesta.
4uncia ssget poate crea un set de selecie `n diferite
moduri.
4uncia sslengt$ returnea#\ num\rul de entit\i din setul
de selecie.
4uncia ssname returnea#\ numele entit\ii din setul de
selecie.
218
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,(33- CREAREA I8TERACTI1A A )ET,RI(.R ;E )E(ECTIE
Dn acest e!erciiu,
Eei aprofunda cuno[tinele despre seturile de selecie
din AutoLISP.
Eei folosi funcia ssget.
Eei obine un set de selecie interacti" de la utili#ator.
Eei accesa entit\ile dintr-un set de selecie.
'tape de lucru
*. Desc$idei fi[ierul grafic moddimd/g din directorul student.
+. Dn editorul de te!t desc$idei fi[ierul numit c2dimlsp din directorul
student.
%. Ad\ugai codul care reali#ea#\ urm\toarele,
Creai o funcie numit\ c,c$dim.
Cerei utili#atorului un set de selecie.
.!plorai fiecare entitate din setul de selecie.
(ransferai ficare list\ asociat\ entit\ii ca argument
la funcia c$dimTmod.
.liberai setul de selecie.
2. Sal"ai fi[ierul c2dimlsp.
1. Dnc\rcai fi[ierul `n AutoCAD [i `ncercai comanda CBDI9.
:. Ie[ii din desen moddim f\r\ a sal"a modific\rile.
0. Dac\ a"ei timp "\ putei modifica programul astfel,
Ad\ugai o rutin\ de tratare a erorilor.
Ad\ugai un dicionar de date.
(ransformai "ariabilele corespun#\toare mai
degrab\ `n "ariabile locale dec`t `n "ariabile
globale.
141246430.doc R.2.1 4/22/2013 219
AUTODESK, INC.
(defun chdim_mod (elist)
(if ;if entity is a dimension...
(= "DIMENSION" (cdr (assoc 0 elist)))
(entmod ;modify it based on...
(subst
(cons 8 "DIM") ;substituting layer DIM...
(assoc 8 elist) ;for its current layer.
elist
)
)
)
)
220
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 34- )ET,RI ;E )E(ECTIE C, AI(TR,
Acesta este un eerci#iu op#ional%
)e#ol"ai acest e!erciiu numai dac\ a"ei timp `n clas\.
Codul care urmea#\& implementea#\ o "ersiune a CBDI9 care
este din punct de "edere funcional ec$i"alent\ cu
"ersiunea anterioar\. Aceast\ "ersiune folose[te un filtru
pentru set de selecie `n combinaie cu o selecie interacti"\
de entit\i cu scopul de a amplasa numai entit\ile de tip
dimension `n setul de selecie.
'tape de lucru
*. Desc$idei fi[ierul grafic moddimd/g din directorul
student.
+. Creai un nou fi[ier `n editorul te!t numit c2dim.lsp.
%. Introducei codul care urmea#\.
Acest cod crea#\ funcia c,c$dim+. CBDI9+ "a cere
utili#atorului un set de selecie& "a filtra toate entit\ile cu
e!cepia entit\ilor de tip dimension [i "a sc$imba entit\ile
pe la>erul DI9.
(defun c:chdim2 ()
;get a selec]ion-set from user and filter out all but dimensions
(setq ss (ssget X((0 . "DIMENSION"))))

(if ;if no selec]ion-set, exit
(not ss)
(exit)
)

;change the layer
(command "._chprop" ss "" "LA" "DIM" "")

(setq ss nil) ;free selec]ion-set

(prin1) ;quiet exit
)
2. Sal"ai fi[ierul c2dim.lsp.
1. Dnc\rcai fi[ierul `n AutoCAD.
:. Acti"ai comanda CBDI9+.
0. P\r\sii desenul moddim f\r\ s\ facei modific\ri.
141246430.doc R.2.1 4/22/2013 221
AUTODESK, INC.
"abele [i nume de simboluri
(abelele p\stre#\ lista AutoCAD-ului cu nume de simboluri
cum ar fi , la>ere& definiii 7loc' [i tipuri de linii.
Obiective
Dn acest capitol "ei studia,
(ipuri diferite de tabele `ntr-un fi[ier grafic AutoCAD.
Cum s\ citii fiecare intrare `ntr-un tabel AutoCAD.
Cum s\ c\utai o intrare anume `ntr-un tabel AutoCAD.
6abele `ntr-un desen
AutoCAD are 5 tabele diferite care pot fi accesate de
AutoLISP.
7loc'
Dimst>le
La>er
Lt>pe
St>le
-CS
EieG
Eport
4iecare tabel\ poate fi citit\ direct din AutoLISP. 4iecare `n
parte poate fi accesat\ sec"enial sau accesat\ pentru un
nume de simbol dat.
4unciile AutoLISP care accesea#\ tabelele AutoCAD pot
e!trage datele asociate cu o tabel\ dar nu pot modifica o
tabel\ sau datele sale.
C\utarea secven#ial\ a tabelului la2er
4uncia tblne!t scanea#\ un tabel [i returnea#\ o list\ asociat\ care
conine datele unui obiect denumit din tabel sau returnea#\ nil
dac\ ultima instruciune din tabel a fost atins\.
4uncia tblne!t are o sinta!\ ciudat\. 4uncia cere un argument, un
[ir care corespunde unuia dintre numele de tabele AutoCAD. Dac\
se adaug\ al doilea argument opional [i acesta nu este nil& atunci
funcia tblne!t returnea#\ primul nume de simbol din tabel? dac\
nu se adaug\ argumentul& funcia returnea#\ simbolul cerut care
222
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
`l urmea#\ pe cel returnat prin apelarea anterioar\ a funciei
tblne!t.
'emplu
Aceast\ e!presie returnea#\ lista asociat\ pentru prima
intrare `n tabelul la>er.
Command: (t*(n'>t ALA:ERA t!
((6 . ALA:ERA! ( . A6A! (C6 . 6! (5 . C! (5 . ACONTINUOUSA!!
Lista asociat\ este o list\ cu perec$i cu punct& a c\rei cod
este reali#at `n acela[i mod `n care s`nt reali#ate codurile
pentru liste asociate entit\ilor. Deoarece nu lucr\m cu
entit\i indi"iduale& este clar c\ aceast\ list\ asociat\ nu are
un grup -* repre#ent`nd un nume de entitate.
Ee#i ane!a 7 din AutoLISP Programmer%s Reference Manual&
C7loc' and (able /roup CodesC& pentru o descriere complet\
a codurilor din lista asociat\ la>erelor.
'emplu
Dac\ un desen ar conine la>erele din tabelul de mai jos&
atunci s-e!presiile care urmea#\ ar returna listele asociate
ar\tate mai jos.
(aer )tare C%loare Ti!%l de linie
6 D'J.8'tat, On C ,au a(* )ont&nuu
DI@ D'J.8'tat, O-- ,au .a(*'n )ont&nuu
BIDDEN In.8'tat, O-- < ,au a(*a,t$u a,)un,
OBUECT D'J.8'tat, On 1 ,au $o,u )ont&nuu
Tabelul "1. Lista de la*ere si proprietati care ilustreaza -alorile returnate de
1unctia tblnext
Command: (t*(n'>t ALA:ERA t!
((6 . ALA:ERA! ( . A6A! (C6 . 6! (5 . C! (5 . ACONTINUOUSA!!
Command: (t*(n'>t ALA:ERA!
((6 . ALA:ERA! ( . ADI@A! (C6 . 6! (5 . 3! (5 . ACONTINUOUSA!!
Command: (t*(n'>t ALA:ERA!
((6 . ALA:ERA! ( . ABIDDENA! (C6 . 1! (5 . 3<! (5 . ABIDDENA!!
Command: (t*(n'>t ALA:ERA!
((6 . ALA:ERA! ( . AOBUECTA! (C6 . 6! (5 . 1! (5 . ACONTINUOUSA!!
Command: (t*(n'>t ALA:ERA!
n&(
141246430.doc R.2.1 4/22/2013 223
AUTODESK, INC.
8 bucl\ care returnea#\ listele asociate pentru toate
numele de simboluri dintr-un tabel este u[or de
implementat. Acest fragment de cod tip\re[te lista asociat\
pentru fiecare nume de simbol din tabelul la>er.
(setq tlist (tblnext "LAYER" t))
(while
tlist
(print tlist)
(setq tlist (tblnext "LAYER"))
)
224
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 35- CA,TAREA I8TR4. TA6E(A
Dn acest e!erciiu ,
Eei consolida cuno[tinele despre tabele.
Eei crea o nou\ funcie care scanea#\ fiecare intrare din
tabel.
Eei tip\ri numele fiec\rui simbol `n tabel.
'tape de lucru
*. Desc$idei desenul moddimd/g `n directorul student
+. Dntr-un fi[ier nou din editorul te!t& introducei codul care
urmea#\. Acesta implementea#\ funcia c,tlist.
(LIS( cere utili#atorului un cod care corespunde unuia dintre
tabelele AutoCAD iar apoi scanea#\ tabelul sec"enial
folosind funcia tblne!t [i tip\re[te numele fiec\rui simbol `n
tabel.
(defun c:tlist ()
;set up list of keywords for user prompt
(initget "Block Dimstyle LAyer LType Style Ucs View VPort")

(setq ttype ;get table type from user
(getkword "\nBlock/Dimstyle/LAyer/LType/Style/Ucs/View/VPort: ")
)

(if ;if user pressed return, exit
(not ttype)
(exit)
)

(setq tlist (tblnext ttype t)) ;get first entry `n table

(while ;while we have a valid entry...
tlist ;in the table...
(print (cdr (assoc 2 tlist))) ;print its name...
(setq tlist (tblnext ttype)) ;get the next entry...
)
(prin1) ;quiet exit
)

%. Sal"ai fi[ierul ca tlistlsp `n directorul student.
2. Dnc\rcai programul `n AutoCAD.
1. Acti"ai comanda (LIS(.
141246430.doc R.2.1 4/22/2013 225
AUTODESK, INC.
C\utarea unui nume de simbol
4uncia tblsearc$ "a c\uta un nume de simbol `ntr-un tabel.
4uncia cere dou\ argumente, un [ir care corespunde unui
tabel AutoCAD [i un [ir care corespunde numelui unui
simbol cerut.
Dac\ numele cerut nu e!ist\& funcia tblsearc$ returnea#\ nil.
'emplu
Aceast\ e!presie caut\ la>erul 6 [i-i returnea#\ lista asociat\.
Command: (t*(,'a$)8 ALA:ERA A6A!
((6 . ALA:ERA! ( . A6A! (C6 . 6! (5 . C! (5 . ACONTINUOUSA!!
)ecapitulare
AutoCAd p\strea#\ simbolurile cum ar fi la>er-ele [i 7loc'
Definitions `n tabele.
.!ist\ 5 tabele `n AutoCAD.
4uncia tblne!t poate scana fiecare simbol din tabel.
4uncia tblsearc$ poate c\uta un anume simbol `ntr-un
tabel.
(abelele nu pot fi modificate direct de AutoLISP.
226
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 36- CA,TAREA I8 TA6E(A ;E (AEER4E
Dn acest e!erciiu,
Eei folosi funcia tblsearc$.
Eei c\uta `n tabela La>er numele la>erului dat de
utili#ator.
Eei determina dac\ la>erul e!ist\ [i "ei informa
utili#atorul `n consecin\.
Instruc#iuni
*. Desc$idei desenul moddimd/g din directorul student.
+. Dntr-un fi[ier nou din editorul de te!t introducei codul
care urmea#\. Acesta implementea#\ funcia c,c$'la>er.
CBYLAM.) cere utili#atorului numele la>erului [i determin\
dac\ la>erul e!ist\ `n desenul respecti" iar apoi tip\re[te un
mesaj adec"at pentru utili#ator.
(defun c:chklayer ()
(setq lname ;get layer name from user
(getstring "\nName of layer: ")
)

(if
(tblsearch "LAYER" lname) ;layer exists?
(prompt (strcat "\nLayer " lname " exists. ")) ;yes
(prompt (strcat "\nLayer " lname " does not exist. ")) ;no
)

(prin1) ;quiet exit
)
%. Sal"ai fi[ierul te!t ca c2klayer:lsp `n directorul student.
2. Dnc\rcai programul `n AutoCAD.
1. Acti"ai comanda CBYLAM.).
141246430.doc R.2.1 4/22/2013 227
AUTODESK, INC.
E+ERCITI,( 37- E+ERCITII ),*(I/E8TARE C, TA6E(E
Acesta este un eerci#iu op#ional%
'tape de lucru
*. Desc$idei fi[ierul grafic moddim.d/g `n directorul
student.
+. Dntr-un fi[ier nou din directorul student scriei dou\
funcii, c,c$'table [i c,la>erset.
%. Sal"ai totul `ntr-un fi[ier. Dnc\rcai funciile `n AutoCAD
[i testai-le `n desenul moddim.
c,c$Etable
*. Dntreab\ utili#atorul ce tabel\ s\ caute.
+. Dntreab\ utili#atorul care este simbolul cautat.
%. Caut\ tabelul pentru simbolul c\utat.
2. Spune utili#atorului dac\ simbolul c\utat e!ist\.
c,la2erset
*. Dntreab\ utili#atorul care este numele la>erului.
+. Dac\ la>erul e!ist\& funcia spune operatorului tipul de
linie [i culoarea atribuite la>erului.
%. Dac\ la>erul e!ist\& legai o "ariabil\ global\ de un set de
selecie format din toate entitaile de pe la>erul
respecti".
228
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 14- ,8 E+ECITI, /AI C./*(E+ ;E CA,TARE I8 TA6E(E
Acesta este un eerci#iu op#ional
'tape de lucru
*. Desc$idei fi[ierul grafic moddimd/g din directorul
student.
+. Dntr-un fi[ier nou din editorul de te!t& introducei codul
care urmea#\. Acesta implementea#\ funcia c,tsearc$.
%. (S.A)CB caut\ simbolul `ntr-un tabel [i dac\ simbolul
e!ist\ tip\re[te fiecare cod de grup [i "aloare din lista
asociat\ simbolului.
141246430.doc R.2.1 4/22/2013 229
AUTODESK, INC.
(defun c:tsearch ()
;set up list of keywords for user prompt
(initget "Block Dimstyle LAyer LType Style Ucs View VPort")

(setq ttype ;get table type from user
(getkword "\nBlock/Dimstyle/LAyer/LType/Style/Ucs/View/VPort: ")
)

(if ;if user pressed return, exit
(not ttype)
(exit)
)

(setq ttarget ;get target search name
(getstring (strcat "\n" ttype " table entry: "))
)

(if ;if user pressed return, exit
(not ttarget)
(exit)
)

(setq tlist (tblsearch ttype ttarget));get list for target...
;from its table.

(if
(not tlist) ;if no list, then target...
(progn ;was not found, so exit.
(prompt "\nNo such entry.")
(exit)
)
)

(while
tlist ;while we still have a list...
(print (car (car tlist))) ;print first group code...
(print (cdr (car tlist))) ;and value from assoc list...
(setq tlist (cdr tlist)) ;then truncate assoc list.
)

(prin1) ;quiet exit
)
2. Sal"ai fi[ierul te!t ca tsearc2lsp `n directorul student.
1. Dnc\rcai programul `n AutoCAD [i testai comanda
(S.A)CB.
230
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
&i[iere script [i AutoLISP
Dac\ "rei s\ folosii un program AutoLISP pentru a procesa
c`te"a desene `n editor& pe r`nd& probabil "ei combina un
program AutoLISP cu un fi[ier script pentru o procesare
automat\.
AutoLISP se iniiali#ea#\ la fiecare nou\ sesiune de editare&
adic\ ori de c`te ori `ncepei un nou desen sau editai unul
deja e!istent. Iniiali#area eliberea#\ #ona de memorie
destinat\ AutoLISP-ului [terg`nd toate funciile definite de
utili#ator [i de aplicaii& [i "ariabilele din proces.
S\ presupunem c\ a"em o funcie AutoLISP definit\ dup\ cum
urmea#\. Ce se `nt`mpl\ c`nd aceast\ funcie este `n
aciuneP
Command: "de9%n c-&GneP "# "co&&and C.GnePC CC##
C:@:?NER
Command: &GneP
Command: .?n'2 #&(' nam':
Command: $c-&GneP
n&(
C,9MT<.@ apelea#\ comanda AutoCAD <.@ [i `ncepe un nou
desen. Dup\ ce editorul grafic a fost iniiali#at& "erific\m
setarea funiei C,9MT<.@... [i "edem c\ este nil. Acest lucru
se datorea#\ faptului c\ AutoLISP este `ntotdeauna iniiali#at
`mpreun\ cu editorul grafic.
Cu alte cu"inte& orice funcie AutoLISP care reciclea#\
editorul grafic se autodistruge.
Pentru a re#ol"a aceast\ problem\& putei folosi fi[iere script
`n combinaie cu programe AutoLISP pentru a procesa mai
multe desene cu acela[i cod AutoLISP. 4i[ierul script
re`ncarc\ [i apelea#\ programul AutoLISP la fiecare nou
desen. Codul AutoLISP scrie fi[ierul script& define[te funcia
pentru a fi apelat\ din fi[ierul script [i apelea#\ fi[ierul script.
Iat\ un e!emplu tipic.
Dorim s\ proces\m toate fi[ierele grafice din directorul
student3batc2d/g cu un program AutoLISP care tip\re[te un
raport ce cuprinde num\rul de 7loc' Definitions din desen [i
numele lor. ;Acest e!erciiu presupune c\ un astfel de
director cu fi[iere grafice e!ist\ deja `n computer.H
4i[ierul program runlsp define[te dou\ funcii AutoLISP,
C,)-< [i C,)-<T).P8)(.
141246430.doc R.2.1 4/22/2013 231
AUTODESK, INC.
C,)-< e!ecut\ urm\toarele acti"it\i `n ordine.
E\ asigur\ c\ aplicaia ADS =D8S este `nc\rcat\.
Cere un nume de director de la utili#ator.
Cere o list\ cu toate fi[ierele grafice din director.
Scrie un fi[ier script care desc$ide fiecare desen&
re`ncarc\ runlsp [i apelea#\ funcia C,)-<T).P8)(
pentru fiecare desen.
Apelea#\ fi[ierul script.
4uncia C,)-<T).P8)( scrie un fi[ier raport pentru fiecare
desen care conine 7loc' Definitions. 4i[ierul raport are
acela[i nume ca [i desenul cu o e!tensie .rpt [i se afl\ `n
acela[i director ca [i desenul. 4uncia listea#\ numele fiec\rui
7loc' `n desen [i de c`te ori 7loc' a fost inserat.
c,run folose[te funcia dosdir din fi[ierul ,dose,e& o aplicaie
ADS real mode pentru ACAD )*+ care se afl\ `n
CompuSer"e ACAD 4orum `n Librar> +. ,dos este `n
directorul student din computerul d"s. Instruciunile de
folosire a acestei funcii se afl\ `n fi[ierul ,dost,t
Dntr-un desen nou& folosii comanda definit\ `n runlsp.
-rmai instruciunile de mai jos.
Command: "load Cr%nC#
C:RUN?REPORT
Command: r%n
Dup\ ce ultimul desen a fost procesat& e!aminai coninutul
urm\toarelor trei fi[iere,
d:\student\run.scr
d:\student\batchdwg\block5.rpt
d:\student\batchdwg\block10.rpt
232
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
(defun C:RUN ()
(if
(not (member "DOSDIR" (atoms-family 1))) ;Check for dosdir
function.
(if ;If not there, attempt
to
(= "bad" (xload "XDOS.EXE" "bad")) ;load XDOS program; exit
(progn ;if attempt fails.
(prompt "\nCan't load XDOS.EXE.")
(exit)
)
)
)
(setq dwgdir (getstring "\nDirectory: ")) ;Get directory from
user.
(setq dwgnames ;Get list of drawings.
(dosdir (strcat dwgdir "\\" "*.dwg") 0)
)
(setq fp (open "run.scr" "w")) ;Open file run.scr for
;writing `n current dir.
;The script commands will open each drawing `n turn, load the
;file run.lsp and apply the run_report command to each file.

(foreach a dwgnames ;Write script file.
(progn
(princ "(if (= 0 (getvar \"DBMOD\")) (command \"._OPEN\")" fp)
(princ "(command \"._OPEN\" \"N\"))\n" fp)
(princ (strcat dwgdir "\\" a "\n") fp)
(princ "(load \"run.lsp\")\n" fp)
(princ "run_report\n" fp)
)
)

(setq fp (close fp)) ;Close run.scr file.
(command "._SCRIPT" "run") ;Call script as last
; expression.
)
(defun C:RUN_REPORT ()

(setq block_name_list nil) ;Initialize list of Block names.
(if
(setq block_table_list (tblnext "BLOCK" t)) ;We have a Block?
(progn
(prompt "\nFinding Block names.") ;Keep the customer happy.
(while ;Add its name to the list and
block_table_list ;get the next one.
(setq block_name (cdr (assoc 2 block_table_list)))
(setq block_name_list (cons block_name block_name_list))
(setq block_table_list (tblnext "BLOCK"))
)

;Sort the list of Block names.
(setq block_name_list (acad_strlsort block_name_list))

;Get the number of Insert entities for each Block.
;Create a list of dotted pairs. Each dotted pair consists
141246430.doc R.2.1 4/22/2013 233
AUTODESK, INC.
;of a Block name and the number of Insert entities.

(prompt "\nFinding INSERT entities.") ;Keep the customer
happy.
(setq report_list nil count 0) ;Initialize the list and
counter.
(repeat ;For all the Block names...
(length block_name_list) ;find how many INSERT entities.
(setq block_name (nth count block_name_list))
(setq s_set ;Returns selec]ion-set of all
(ssget "X" ;the INSERT entities of the
(list ;current block_name.
(cons 0 "INSERT")
(cons 2 block_name)
)
)
)
(setq ;Add a dotted pair of the form
report_list ;("BLOCK_NAME" . "NUMBER") to
(cons ;the report_list.
(cons
block_name
(if ;If, for example, the Block
"DOOR"
s_set ;is not inserted `n this
drawing,
(itoa (sslength s_set)) ;add the dotted pair ("DOOR" .
"0").
"0"
)
)
report_list
)
)
(setq count (1+ count)) ;Next Block name.
(princ ".") ;Keep the customer happy.
)

(setq report_list (reverse report_list)) ;Reverse report list.

(setq s_set nil) ;Free selec]ion-set.

;Print report to disk file dwgname.rpt.

(prompt "\nWriting report to disk.")
(setq fp (open (strcat (getvar "DWGNAME") ".rpt") "w"))
(write-line (strcat "Drawing " (getvar "DWGNAME") "\n") fp)
(write-line "Block names # of insertions"
fp)
(write-line "=========== ==============="
fp)
(setq count 0) ;First Block name.
(repeat
(length report_list) ;Get 'em all...
(setq block_name
(car (nth count report_list))
insert_number
(cdr (nth count report_list))
)
(setq spacer "") ;Calculate number of spaces to 36th
(repeat ;character from end of Block name.
(- 36 (strlen block_name))
234
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
(setq spacer (strcat " " spacer))
)
(write-line ;Write Block name, spaces to the
(strcat ;36th character, and the number of
block_name ;INSERT entities for that Block.
spacer
insert_number
)
fp
)
(setq count (1+ count)) ;Next block name.
)
(setq fp (close fp)) ;Close dwgname.rpt file.
)
)
(prin1) ;Quiet exit.
)
141246430.doc R.2.1 4/22/2013 235
AUTODESK, INC.
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
236
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Accesul la Polilinii
Poliliniile s`nt entit\i comple!e. .le s`nt formate dintr-o
entitate principal\ de tip CP8MLI<.C urmat\ de una sau mai
multe entit\i de tip CE.)(.=C terminate de o entitate de tip
CS.Z-.<DC. Aceast\ diagram\ ilustrea#\ lanul de entit\i [i
numele lor.
POL:LINE
LERTEG
SEXEND
@a&n 'nt&t/
N'>t 'nt&t/ nam':
LERTEG
Su* 'nt&t/
N'>t 'nt&t/ nam':
LERTEG
o$
SEXEND
Su* 'nt&t/
N'>t 'nt&t/ nam':
N'>t ma&n 'nt&t/
&n data*a,'
Figura +..Relatia dintre pol*line ca entitate principala si subentitati
Dn afara acces\rii entit\ilor principale ne[terse din ba#a de
date& funcia entne!t "a accesa subentit\ile unei Polilinii [i
atributele entit\ilor Insert. Acest capitol ilustrea#\ acest
principiu cu ajutorul unei funcii care,
Cere utili#atorului s\ selecte#e o polilinie.
Accesea#\ subentitaile unei polilinii.
Ei#uali#ea#\ un raport despre fiecare entitate pe displa>.
Iese atunci c`nd a ajuns la cap\tul poliliniei.
141246430.doc R.2.1 4/22/2013 237
AUTODESK, INC.
(defun c:polylist ()

(setq old_error *error*) ;save default error handler
(defun *error* (msg) ;define new error handler
(if
(/= "Function cancelled" msg) ;no message if user cancels
(if
(= msg "quit / exit abort") ;no message if program
deliberately
(princ) ;aborts
(princ (strcat "\nError: " msg));otherwise, print error for user
)
(princ)
)
(setq *error* old_error) ;restore default error handler
(princ) ;quiet exit
)

(setq epick (entsel "\nSelect polyline: "))
;select an entity
(if
(not epick) ;if no entity selected, exit
(exit)
)

(setq ename (car epick)) ;get entity name
(setq elist (entget ename)) ;get association list
(setq etype (cdr (assoc 0 elist))) ;store entity type

(if
(/= "POLYLINE" etype) ;if not a Polyline, exit
(progn
(prompt "\nNot a polyline.")
(exit)
)
)

(while ;while we have an entity name
(and ;and it's not the end of the
ename ;Polyline...
(/= "SEQEND" etype)
)
(princ "\nEntity type: ") ;print the entity type
(princ etype)

(if ;if it's a Vertex entity...
(= "VERTEX" etype) ;get its group 70 flags and
(progn ;location, and print location
(setq vflags (cdr (assoc 70 elist)))
(setq pt (cdr (assoc 10 elist)))
(princ "\nLocation: ")
(princ (car pt))
(princ " ")
(princ (car (cdr pt)))
(princ " ")
(princ (car (cdr (cdr pt))))
(if ;check each flag and print
(= 1 (logand 1 vflags)) ;each if true
(princ "\nVertex inserted by curve-fitting.")
)
(if
(= 2 (logand 2 vflags))
(princ "\nCurve-fit tangent defined for this vertex.")
238
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
)
(if
(= 8 (logand 8 vflags))
(princ "\nSpline vertex created by spline-fitting.")
)
(if
(= 16 (logand 16 vflags))
(princ "\nSpline frame control point.")
)
(if
(= 32 (logand 32 vflags))
(princ "\n3D Polyline vertex.")
)
(if
(= 64 (logand 64 vflags))
(princ "\n3D Polyline mesh vertex.")
)
(if
(= 128 (logand 128 vflags))
(princ "\nPolyface mesh vertex.")
)
)
)
;stop screen from scrolling
(getstring "\n\nPress RETURN to continue...")

(setq ename (entnext ename)) ;get next entity `n Polyline

(if ;if we have an entity name...
ename ;get its assocation list and
(progn ;entity type
(setq elist (entget ename))
(setq etype (cdr (assoc 0 elist)))
)
)

)
(setq *error* old_error) ;restore old error handler
(prin1) ;quiet exit
)

141246430.doc R.2.1 4/22/2013 239
AUTODESK, INC.
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
240
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Accesul la *loc0 !e(initions
7loc' Definitions s`nt entit\i comple!e. 8 entitate principal\
de tip C7L8CYC cu un nume unic este p\strat\ `n tabela
AutoCAD 7loc'. Aceast\ entitate este urmat\ de una sau mai
multe entit\i de orice tip& terminat\ cu o entitate de tip
C.<D7LYC. Aceast\ diagram\ ilustrea#\ lanul de entit\i [i
numele entit\ilor.
B(o)N Ta*('
N'>t ,u* 'nt&t/
ENDBLK
Nam'd o*+')t
N'>t 'nt&t/ nam':
An/ t/%'
An/ t/%'
N'>t 'nt&t/ nam':
An/ t/%'
Su* 'nt&t/
N'>t 'nt&t/ nam':
Non'
Figura +/. Relatia dintre intrarea in tabela AlocG si subentitatile acestuia.
4uncia entne!t accesea#\ subentit\ile din definiiile 7loc'.
Acest capitol ilustrea#\ acest principiu printr-o funcie care,
Cere utili#atorului s\ selecte#e o entitate Insert care se
refer\ la 7loc' Definition.
Accesea#\ 7loc' Definition `n cadrul tabelei 7loc'.
Accesea#\ subentit\ile din 7loc' Definition
(ip\re[te lista asociat\ fiec\rei subentit\i pe displa>.
Iese c`nd ajunge la cap\tul entit\ii 7loc' Definition.
141246430.doc R.2.1 4/22/2013 241
AUTODESK, INC.
(defun c:blklist (/ blist bname elist ename epick etype)
;blist Association list from Block table
;bname Name of Block Definition
;elist Entity association list
;ename Entity name
;epick List returned by entsel
;etype Entity type as string
;old_error Default error handler

(setq old_error *error*) ;save default error handler
(defun *error* (msg) ;define new error handler
(if
(/= "Function cancelled" msg) ;no message if user cancels
(if
(= msg "quit / exit abort") ;no message if program
deliberately
(princ) ;aborts
(princ (strcat "\nError: " msg));otherwise, print error for user
)
(princ)
)
(setq *error* old_error) ;restore default error handler
(princ) ;quiet exit
)

(setq epick (entsel "\nSelect block: "))
;select an entity
(if
(not epick) ;if no entity selected, exit
(exit)
)

(setq ename (car epick)) ;get entity name
(setq elist (entget ename)) ;get association list
(setq etype (cdr (assoc 0 elist))) ;store entity type

(if
(/= "INSERT" etype) ;if not an Insert, exit
(progn
(prompt "\nNot a block.")
(exit)
)
)

(setq bname (cdr (assoc 2 elist))) ;get name of Block Definition

(setq blist (tblsearch "BLOCK" bname));get its assoc list

(setq ename (cdr (assoc -2 blist))) ;get first entity `n Block
(setq elist (entget ename)) ;get its assoc list
(setq etype (cdr (assoc 0 elist))) ;store entity type

(while ;while we have an entity name
(and ;and it's not the end of the
ename ;Block Definition...
(/= "ENDBLK" etype)
)

(print elist) ;print entity's assoc list

;stop screen from scrolling
242
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
(getstring "\n\nPress RETURN to continue...")

(setq ename (entnext ename)) ;get next entity `n Block

(if ;if we have an entity name...
ename ;get its assocation list and
(progn ;entity type
(setq elist (entget ename))
(setq etype (cdr (assoc 0 elist)))
)
)

)
(setq *error* old_error) ;restore old error handler
(prin1) ;quiet exit
)

141246430.doc R.2.1 4/22/2013 243
AUTODESK, INC.
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
244
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
rearea entit\]ilor Line cu (unc]ia entma0e
4uncia entma'e crea#\ noi entit\i AutoCAD f\r\ s\ foloseasc\
comen#i AutoCAD de tip LI<.& A)C& CI)CL.. 4uncia entma'e
adaug\ entit\i noi direct `n ba#a de date.
4uncia entma'e cere un argument, o list\ asociat\ entit\ii.
4uncia returnea#\ lista asociat\ entit\ii `n `ntregime dac\
reu[e[te s\ cree#e o entitate& altfel returnea#\ nil.
Lista asociat\ folosit\ ca argument trebuie s\ conin\ toate
informaiile necesare pentru a defini entitatea. Definiii
opionale& cum ar fi la>erul implicit& s`nt omise din lista
asociat\.
De e!emplu& fiecare dintre aceste e!presii crea#\ o entitate
Line `n @CS pe La>erul 6 de la *&*&6 la 1&1&6.
'emplul ;
(entmake
'(
(0 . "LINE")
(8 . "0")
(10 1.0 1.0 0.0)
(11 5.0 5.0 0.0)
(210 0.0 0.0 1.0)
)
)
'emplul F
(entmake
(list
(cons 0 "LINE")
(cons 8 "0")
(list 10 1.0 1.0 0.0)
(list 11 5.0 5.0 0.0)
(list 210 0.0 0.0 1.0)
)
)
141246430.doc R.2.1 4/22/2013 245
AUTODESK, INC.
E+ERCITI,( 39- CREAREA ,8EI (I8II C, E8T/AQE
Creai o funcie numit\ c,!line `ntr-un fi[ier te!t numit
,linelsp `n directorul student
Comanda =LI<. ar trebui s\ fac\ urm\toarele,
S\ cear\ utili#atorului un punct de start.
S\ cear\ utili#atorului un punct de sf`r[it.
S\ cree#e o entitate de tip Line `n ba#a de date
prin apelarea funciei entma'e.
S\ desene#e linia `ntre cele dou\ puncte pe la>erul
curent.
246
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
rearea entit\]ilor Pol1lines si *loc0 !e(initions cu
(unc]ia entma0e
.ntit\i comple!e cum s`nt poliliniile& definiiile de 7loc' [i
entit\ile Insert atribute pot fi definite prin apelarea de
c`te"a ori a funciei entma'e care s\ le defineasc\
subentit\ile.
De `ndat\ ce AutoCAD "ede c\ funcia entma'e crea#\ o
entitate comple!\& acesta crea#\ un fi[ier temporar `n care
pastrea#\ toate datele definiiilor. Dup\ definirea entit\ii
prin apelarea funciei entma'eH& AutoCAD crea#\ [i adaug\ o
entitate de cap\t ;o entitate S.Z.<D pentru o polilinie sau o
entitate 7LY.<D pentru o definiie 7loc'H& desfiinea#\ fi[ierul
temporar [i& `n ca#ul definiiei 7loc'& returnea#\ numele
7loc'ului care a fost definit [i nu lista asociat\ entitaii
definite.
Pol2lines
.!presiile care urmea#\ crea#\ o entitate de tip polilinie pe
la>erul curent [i -CS cu o ele"aie 6 [i dou\ "erte!uri la
*&*&6 [i 1&1&6.
(entmake
(list
(cons 0 "POLYLINE")
(cons 66 1)
(list 10 0.0 0.0 0.0)
)
)
(entmake
(list
(cons 0 "VERTEX")
(list 10 1.0 1.0 0.0)
)
)
(entmake
(list
(cons 0 "VERTEX")
(list 10 5.0 5.0 0.0)
)
)
(entmake
(list
(cons 0 "SEQEND")
)
)
@locEs
.!presiile care urmea#\ crea#\ o definiie 7loc' numit\
m>bloc' `n tabelul 7loc'. Definiia are un punct de ba#\ de
1&1&6 [i este format\ din urm\toarele entit\i,
141246430.doc R.2.1 4/22/2013 247
AUTODESK, INC.
8 entitate de tip Line pe la>erul curent [i -CS de la 1&1&6
la *6&*&6.
8 entitate de tip Circle pe la>erul curent [i -CS la 1&1&6
cu o ra#\ de *.6.
(entmake
(list
(cons 0 "BLOCK")
(cons 2 "MYBLOCK")
(cons 70 0)
(list 10 0.0 0.0 0.0)
)
)
(entmake
(list
(cons 0 "LINE")
(list 10 5.0 5.0 0.0)
(list 11 10.0 1.0 0.0)
)
)
(entmake
(list
(cons 0 "CIRCLE")
(list 10 5.0 5.0 0.0)
(cons 40 1.0)
)
)
(entmake
(list
(cons 0 "ENDBLK")
)
)
248
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 40- CREAREA ,8EI *.(I(I8II C, A,8CTIA E8T/AQE
*. Creai o funcie numit\ c,pol>ma'e `ntr-un nou fi[ier te!t
numit polymakelsp `n directorul student.
4uncia trebuie s\ fac\ urm\toarele,
S\ fac\ o nou\ entitate de tip Pol>line cu funcia
entma'e.
S\ introduc\ o bucl\.
S\ cear\ utili#atorului un "erte!.
S\ apele#e funcia entma'e at`ta timp c`t utili#atorul
selectea#\ un punct.
S\ ias\ din bucla c`nd utili#atorul introduce o
"aloare nul\.
S\ termine de f\cut polilinia prin apelarea funciei
entma'e pentru inserarea entit\ii S.Z-.<D.
+. Sal"ai fi[ierul te!t.
%. Dnc\rcai programul `n AutoCAD [i `ncercai comanda
P8LM9AY..
141246430.doc R.2.1 4/22/2013 249
AUTODESK, INC.
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
250
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
"ratarea [irurilor
AutoLISP dispune de un set redus de funcii care reali#ea#\
operaii de ba#\ pe [iruri, lungimea [irului& modificarea
caracterelor& concatenarea [i anali#a.
Obiective
Dn acest capitol "ei studia,
Cum s\ determinai num\rul de caractere dintr-un
[ir.
Cum s\ modificai caracterele dintr-un [ir.
Cum s\ concatenai dou\ sau mai multe [iruri.
Cum s\ anali#ai un [ir& fiecare caracter pe r`nd.
/unc#ia strlen
Wirurile de tip te!t s`nt formate din 6 sau mai multe
caractere aflate `ntre semnele cit\rii duble ;RH. -n [ir cu nici
un caracter este repre#entat ca CC& sau cu null string.
4uncia strlen cere un singur [ir ca argument. 4uncia
returnea#\ lungimea unui [ir `n caractere ca un `ntreg.
-n spaiu "alorea#\ c`t un caracter& caracterul escape este
ec$i"alent cu CanC.
'emplu
Introducei e!presiile care urmea#\. Aflai lungimea c`tor"a
[iruri de te!t.
.Command: "strlen CC#
6
Command: "strlen C123456789C#
=
Command: "strlen C1 3 5 7 9C#
=
Command: "strlen COn*oint-C#
C
141246430.doc R.2.1 4/22/2013 251
AUTODESK, INC.
/unc#ia strcase
4uncia strcase cere un argument [i un argument opional.
Primul argument trebuie s\ fie un [ir de tip te!t. Dac\ al
doilea argument este omis sau este nil& [irul cu toate
caracterele transformate `n litere mari este returnat? sau
dac\ al doilea argument este t& adic\ nu este nil& atunci se
returnea#\ [irul cu caracterele transformate `n litere mici.
'emplu
Introducei e!presiile care urmea#\. (ransformai
caracterele celor trei [iruri de tip te!t.
Command: "strcase Cto %!!erC#
ATO UPPERA
Command: "strcase CTo ,!!erC#
ATO UPPERA
Command: "strcase Cto %!!erC nil#
ATO UPPERA
Command: "strcase CT. (.MERC t#
Ato (o2'$A
/unc#ia strcat
4uncia strcat cere unul sau mai multe argumente [i fiecare
dintre ele trebuie s\ fie un [ir de tip te!t. 4uncia returnea#\
un singur [ir te!t, re#ultatul concaten\rii argumentelor.
4uncia strcat& printre altele& este folositoare pentru a
formula cereri la utili#ator. De e!emplu& este posibil s\ fie
ne"oie s\ cerei utili#atorului ca a n-a instruciune dintr-un
grup de instruciuni s\ fie procesat\. Pentru aceasta trebuie
s\ luai num\rul n& sa-l transformai `ntr-un [ir& apoi s\-l
concatenai cu restul.
'emplu
Introducei e!presiile care urmea#\. Concatenai cele dou\
[iruri.
Command: "set= ' ConeC CtPoC#
At2oA
Command: "set= B "strcat ' ##
Aon' t2oA
252
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Command: "set= B "strcat ' ' B ##
Aon' on' on' t2o t2o t2oA
'emplu
Introducei e!presiile care urmea#\. 4ormulai o cerere
dintr-un [ir [i un num\r `ntreg.
Command: "set= inde' 1#
1
Command: "set= a C*rocessin2 o0Fect C 0 C...C#
A...A
Command: "strcat a "itoa 1# 0#
AP$o)',,&n. o*+')t 1...A
Anali(a [irurilor
Puine te!te `n Lisp acord\ subiectului despre anali#a
[irurilor importana cu"enit\. De[i pare ciudat& probabil "\
este mai comod s\ c\utai un te!t despre limbajul C cu
e!plicaii [i e!emple de anali#\ a [irului. 9anualele 42e C
Programming Language de 7rian Yernig$an [i Dennis
)itc$iei& Programming `n C de Step$en /. Yoc$an [i
Ad$anced 4urbo C de Berbert Sc$ildt s`nt manuale care
acord\ cel puin un capitol [irurilor [i anali#ei [irurilor.
Anali#a [irurilor simple& adic\ citirea pe r`nd a caracterelor
dintr-un [ir [i compararea acestora cu "alori& este discutat\
`n urm\torul capitol destinat funciei substr.
/unc#ia substr
4uncia substr cere trei argumente, un [ir de tip te!t& un
num\r `ntreg de inde!are a caracterelor din [ir de la st`nga
la dreapta& [i un pas de incrementare a num\rului de
caractere spre dreapta [i inclusi" a caracterului inde!at.
4uncia substr returnea#\ un [ir care `ncepe cu caracterul
inde!at din [ir [i se continu\ cu num\rul de caractere din
dreapta inde!ului indicat de al treilea argument.
Argumentul inde! `ncepe cu *? adic\ primul caracter din [ir
are inde!ul *.
De e!emplu aceast\ e!presie returnea#\ [irul C2C.
141246430.doc R.2.1 4/22/2013 253
AUTODESK, INC.
(substr .123456. 4 1)
Aceast\ e!presie returnea#\ [irul C21:C.
(substr .123456. 4 3)
/ormarea buclelor de program cu func#ia substr
Pentru a anali#a caracterele unui [ir pe r`nd& ar trebui s\
apelai funcia substr aflat\ `ntr-o bucl\.
-n inde! al unui caracter dintr-un [ir este iniiali#at cu *.
7ucla `ncepe [i se repet\ pentru fiecare caracter din [ir.
4iecare caracter este returnat [i tip\rit separat [i inde!ul
incrementat cu * `n bucl\.
(setq index 1)
(setq string "Hello, world.")
(repeat
(strlen string)
(print (substr string index 1))
(setq index (1+ index))
)
)ecapitulare
strlen returnea#\ lungimea unui [ir `n caractere.
4uncia strcase poate returna un [ir de tip te!t a
c\rui caractere s`nt transformate `n litere mari
sau mici.
4uncia strcat concatenea#\ dou\ sau mai multe
[iruri.
Anali#a [irului `n AutoLISP se face cu funcia substr.
254
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 41- )IR,RI )I A8A(I<A (.R
Dn acest e!erciiu,
Eei concatena [iruri pentru a crea cereri la
utili#ator.
Eei folosi lungimea [irului pentru a determina de
c`te ori trebuie repetat\ o bucl\.
Eei anali#a toate caracterele dintr-un [ir& pe r`nd&
[i "ei elimina toate spaiile din [ir.
'tape de lucru
Dn editorul de te!t creai un fi[ier nou numit nospacelsp `n
directorul student.Dn acest fi[ier creai o funcie numit\
nospace. Aceast\ funcie ar trebui s\ fac\ urmatoarele operaii
`n ordine.
*. S\ cear\ un argument, un [ir.
+. S\ sete#e o "ariabil\ de inde!are la *.
%. S\ sete#e o "ariabil\ de ie[ire la [irul nul CC.
2. S\ `nceap\ o bucl\ care s\ se repete conform num\rului de
caractere din [ir.
1. S\ e!trag\ un caracter din [ir de la po#iia curent\.
:. Dn ca#ul `n care caracterul este un spaiu& acesta se
ignor\? dac\ nu& adaug\ caracterul la "aloarea
concatenat\.
0. S\ incremente#e inde!ul cu *.
5. S\ returne#e "ariabila cu spaiile eliminate.
141246430.doc R.2.1 4/22/2013 255
AUTODESK, INC.
E+ERCITI,( 41- A8A(I<A )IR,RI(.R C, CARACTERE ;E ;E(I/ITARE
Putei re#ol"a acest e!erciiu dac\ LotusF *-+-%F [i
9icrosoftF .!cel s`nt instalate `n computerul d"s.
4eneralit\#i
Programele de calcul tabelar cum s`nt programele Lotus *-
+-% [i 9icrosoft .!cel pot scrie date `ntr-un fi[ier de tip te!t.
4iecare linie din calculul tabelar repre#int\ un singur r`nd de
te!t `n fi[ierul de ie[ire. Coloanele dintr-un [ir s`nt separate
unele de altele printr-un caracter delimitator. Delimitatorul
este selectabil de c\tre utili#ator [i de obicei lipsit de (A7
sau "irgul\.
Programul pre#entat mai jos implementea#\ o funcie
numit\ parse. 4uncia parse cite[te un singur r`nd de te!t
creat dup\ formatul descris mai sus. 4uncia returnea#\ o
lista de [iruri unde fiecare coloan\ dintr-un r`nd este tratat\
ca un [ir indi"idual.
4uncia parse cere trei argumente, [irul de anali#at&
caracterul folosit ca delimitator `n interiorul [irului [i un
indicator de condiie care dac\ nu este nil "a returna toate
po#iiile unde apare delimitatorul care separ\ [irul `n lista
returnat\.
Dmpreun\ cu funcia parse este definit\ [i funcia c,testTparse.
4uncia (.S(TPA)S. cite[te o list\ de [iruri& le anali#ea#\ pe
fiecare [i scrie re#ultatul `ntr-un fi[ier asociat numit
testpars.t!t `n directorul curent. 4iecare "aloare returnat\ de
parse este testat\? dac\ apare o eroare& se scrie un mesaj `n
fi[ierul asociat.
'tape de lucru
*. Lansai programul de calcul tabelar.
+. Dn acest program desc$idei fi[ierul testpars.!ls `n
directorul student.
%. 4olosii comanda SAE. AS pentru a sal"a datele ca un
format te!t `ntr-un fi[ier. Dn programul .!cel
comanda folose[te caracterul (A7 ca delimitator.
2. Dnc$idei programul de calcul tabelar.
1. Dn editorul de te!t& e!aminai formatul (e!t din fi[ier.
:. Dnc\rcai programul parselsp `n AutoCAD.
256
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
0. Acti"ai comanda PA)S.(.=( [i urm\rii cererile.
5. PA)S.(.=( "a anali#a fiecare [ir din fi[ierul te!t [i "a afi[a
pe displa> lista de [iruri returnat\ pentru fiecare r`nd de
c\tre funcia parse.
; PARSE.LSP
; Version 1.0 3/29/93
;
; (parse str str expr)
;
; Parse a delimited text string and return a list of strings. Adds a
; null string between two sequential delimiters.
;
; Arguments:
;
; str (required) Text string to parse.
; str (required) Character used to delimit the string.
; expr (required) If t, return delimiter as a separate string.
;
; Local variables:
;
; char STR Current character from string.
; index INT Current location of character from string.
; rl LIST Return list of strings.
; sstr STR Current string to add to return list.
; strl INT Length of string.
(defun parse (str delim rd / char index rl sstr strl)
(setq ;initialize...
sstr "" ;string to place `n list
rl nil ;list to return
index 1 ;character index `n string
strl (strlen str) ;length of string
)
continuare pe pagina urmatoare
141246430.doc R.2.1 4/22/2013 257
AUTODESK, INC.
(if ;if string length is zero
(zerop strl) ;return list with null string
'("")
(progn
(repeat ;repeat for the length of string
strl
(setq char (substr str index 1)) ;get a character
(cond
(
(= char delim) ;if it's a delimiter
(if ;and the string is null, it's
(= str "") ;line start or last was delim so
(setq rl (cons "" rl)) ;add null string to return list
(progn ;else
(setq rl (cons sstr rl)) ;add string to return list
(setq sstr "") ;then reinitialize string
)
)
(if ;if flag is true...
rd
(setq rl (cons char rl)) ;add delimiter to return list
)
(if ;if it's the last char `n string
(= index strl)
(setq rl (cons "" rl)) ;add null string to return list
)
)
(
t ;if we're here, just append the
(setq sstr (strcat sstr char)) ;current string to the char
(if
(= index strl) ;if it's the last char `n string
(progn
(setq rl (cons sstr rl)) ;add string to return list
)
)
)
);end cond

(setq index (1+ index)) ;increment the char index

);end repeat
(reverse rl) ;reverse the list to return so
the
;strings are `n original order
);end progn
);end if
)
continuare pe pagina urmatoare
258
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
; TEST_PARSE.LSP
; Version 1.0 3/30/93
;
; test_parse
;
; Test the function (parse). Use two lists of strings with different
; delimiter characters: "\t" and ",". Test for both nil and t delimiter
; flag. Write test results to the log file TESTPARS.TXT `n the current
; directory. Write an error message with index every time (parse) fails
; to match a value `n a result list.
;
;
; Local variables:
;
; fp FILE Pointer to log file
; string STR Current string argument to parse
; t1 LIST List of strings to test
; t2 LIST List of strings to test
; t1_r1 LIST List of t1 results for nil delim flag
; t1_r2 LIST List of t1 results for t delim flag
; t2_r1 LIST List of t2 results for nil delim flag
; t2_r2 LIST List of t2 results for t delim flag
(defun c:test_parse (/ fp string t1 t1_r1 t1_r2 t2 t2_r1 t2_r2)
(setq
t1
'("" "\t" "a" "ab" "a\t" "\ta" "a\tb" "a\tb\t" "\ta\t" "\t\t")
t1_r1
'(("") ("" "") ("a") ("ab") ("a" "") ("" "a") ("a" "b") ("a" "b" "")
("" "a" "") ("" "" "")
)
t1_r2
'(("") ("" "\t" "") ("a") ("ab") ("a" "\t" "") ("" "\t" "a")
("a" "\t" "b") ("a" "\t" "b" "\t" "") ("" "\t" "a" "\t" "")
("" "\t" "" "\t" "")
)
t2
'("" "," "a" "ab" "a," ",a" "a,b" "a,b," ",a," ",,")
t2_r1
'(("") ("" "") ("a") ("ab") ("a" "") ("" "a") ("a" "b") ("a" "b" "")
("" "a" "") ("" "" "")
)
t2_r2
'(("") ("" "," "") ("a") ("ab") ("a" "," "") ("" "," "a")
("a" "," "b") ("a" "," "b" "," "") ("" "," "a" "," "")
("" "," "" "," "")
)
)

(setq fp (open "testpars.txt" "w"))

continuare pe pagina urmatoare
141246430.doc R.2.1 4/22/2013 259
AUTODESK, INC.
(setq index 0)
(repeat
(length t1)
(setq string (nth index t1))
(print string fp)
(print (parse string "\t" nil) fp)
(print (parse string "\t" t) fp)
(if
(not
(equal
(setq x (parse string "\t" nil))
(setq y (nth index t1_r1))
)
)
(print
(strcat
"Test t1_r1 failed `n index " (itoa index) "."
)
fp
)
);end if
(if
(not
(equal
(parse string "\t" t)
(nth index t1_r2)
)
)
(print
(strcat
"Test t1_r2 failed `n index " (itoa index) "."
)
fp
)
);end if
(setq index (1+ index))
);end repeat
continuare pe pagina urmatoare
260
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
(setq index 0)
(repeat
(length t2)
(setq string (nth index t2))
(print string fp)
(print (parse string "," nil) fp)
(print (parse string "," t) fp)
(if
(not
(equal
(parse string "," nil)
(nth index t2_r1)
)
)
(print
(strcat
"Test t2_r1 failed `n index " (itoa index) "."
)
fp
)
);end if
(if
(not
(equal
(parse string "," t)
(nth index t2_r2)
)
)
(print
(strcat
"Test t2_r2 failed `n index " (itoa index) "."
)
fp
)
);end if
(setq index (1+ index))
);end repeat
(setq fp (close fp))
(prin1)
)
141246430.doc R.2.1 4/22/2013 261
AUTODESK, INC.
Aceast\ pagin\ a fost l\sat\ liber\ `n mod intenionat.
262
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Pointere de entit\]i
-n pointer de entitate este un identificator unic [i
permanent pentru o entitate dintr-un desen AutoCAD.
Aplicaiile pot folosi pointere de entit\i pentru a menine
leg\turi asociati"e `ntre entitai sau `ntre entit\i [i seturi
arbitrare de date `n timpul sesiunii de editare grafic\.
Obiective
Dn acest capitol "ei studia,
Cum s\ acti"ai sau s\ distrugei pointerele de
entit\i.
Cum s\ e!tragei un pointer dintr-o list\ asociat\
entit\ii.
Cum s\ g\sii o entitate cu ajutorul pointerului.
/ormatul unui pointer de entitate
Pointerele de entitai s`nt p\strate ca numere $e!adecimale
e!primate sub forma unui [ir. De e!emplu& primul pointer
atribuit entit\ii `ntr-un desen poate fi C*C iar pointerul
trei#eci [i unu poate fi C*4C.
Pointerul unei entit\i nu poate fi sc$imbat, poate fi numai
distrus. C`nd se [terge o entitate dintr-un desen& pointerul
ei este retras [i niciodat\ refolosit `n acel desen.
Lungimea ma!im\ a unui [ir este de *: caractere& ceea ce
`nseamn\ c\ num\rul ma!im de pointere pentru un singur
desen este +
:2
-*.
Pointerele s`nt p\strate `n codul de grup D=4 cimpul 1 al
unei liste asociat\ entit\ii.
Atribuirea de pointere entit\#ilor
Spunem c\ al %*-lea pointer atribuit entit\ii ar putea fi C*4C
deoarece atribuirea pointerelor nu este `ntotdeauna
sec"enial\& de[i `ntotdeauna progresea#\ de la mai mic la
mai mare. .ste imposibil de pre"\#ut `n toate ca#urile care
"a fi urm\toarea atribuire pe care o "a face AutoCAD-ul? de
aceea este necesar de stabilit `n mod e!plicit pointerul unei
entit\i din lista asociat\ entit\ii& dec`t s\ `ncerc\m s\ g$icim
ce pointer "a atribui AutoCAD-ul entit\ii.
141246430.doc R.2.1 4/22/2013 263
AUTODESK, INC.
Activarea si de(activarea pointerelor
Aciunea de atribuire a pointerelor este de#acti"at\ `n
momentul `n care pointerele lipsesc. Comanda BA<DL. 8<
"a acti"a pointerele permanent `n desenul curent.
Pointerele pot fi de#acti"ate. Deoarece prin aceasta se
poate de#acti"a orice legatur\ `ntre entit\ile AutoCAD [i de
ba#ele de date e!terne ;de e!emplu pointerele s`nt
folosite e!tensi" de c\tre AutoCAD SZL .!tensionH&
pointerele pot fi distruse printr-un act deliberat din partea
utili#atorului.
Comanda BA<DL.S D.S()8M UC8<4I)9A(I8<-S()I</V "a
de#acti"a toate acti"it\ile de atribuire a pointerelor `n
sesiunea curent\. UC8<4I)9A(I8<-S()I</V este unul din cele
[ase [iruri posibile pe care le poate introduce utili#atorul.
AutoCAD generea#\ unul dintre [iruri la `nt`mplare `n
timpul e!ecuiei comen#ii? de aceea este imposibil de pre#is
de care [ir este ne"oie ca s\ confirme comanda.
-erificarea atribuirii pointerelor
Eariabila de sistem BA<DL.S este setat\ la * c`nd pointerele
s`nt acti"ate `n sesiunea curent\.
4\sirea unei entit\#i cu a9utorul pointerului
4uncia $andent cere un argument de tip [ir, pointerul unei
entit\i. Dac\ unei entit\i din sesiunea curent\ i se atribuie
un pointer& funcia $andent "a returna numele entit\ii? dac\
nu& "a returna nil.
'emplu
Dntr-o nou\ sesiune& introducei comen#ile [i e!presiile care
urmea#\. .!tragei un pointer de entitate [i stabilii numele
entit\ii folosind pointerul.
Acti"ai pointerele `n sesiunea curent\.
Command: ?andles
Band(', a$' d&,a*('d.
ON0DESTRO:: on
Desenai c`te"a entit\i Line.
Command: line
't)...
.!tragei un pointer cu una din entit\ile Line.
Command: "set= elist "ent2et "car "entsel####
S'(')t o*+')t: !ic: a line
264
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Command: "set= e?and "cdr "assoc 5 elist###
Command: $e?and
A1BA (,au un E&$ ,&m&(a$!
141246430.doc R.2.1 4/22/2013 265
AUTODESK, INC.
.!tragei numele entit\ii folosindu-i pointerul.
Command: "set= ena&e "?andent e?and##
4Ent&t/ nam': >>>>>>>>7
)ecapitulare
Pointerele de entit\i s`nt p\strate ca numere
$e!a#ecimale e!primate sub form\ de [iruri.
Pointerul nu poate fi sc$imbat niciodat\. .l poate fi
numai distrus.
Pointerele s`nt p\strate `n coduri D=4 de grup 1
`ntr-o list\ asociat\ entit\ii.
Atribuirea de "alori nu este `ntotdeauna
sec"enial\.
Comanda BA<DL.S acti"ea#\ sau de#acti"ea#\
pointerele.
4uncia $andent "a returna numele entit\ii prin
pointerul entit\ii.
266
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
E+ERCITI,( 43- )A(1AREA )ET,RI(.R ;E )E(ECTIE
Dn acest e!erciiu,
Eei folosi un program pentru a citi pointerele
entit\ilor.
Eei p\stra pointerele `ntr-un fi[ier e!tern.
Eei citi fi[ierul e!tern [i "ei crea un set de selecie
din pointerele entit\ilor.
Programul sa$setlsp din directorul student implementea#\
dou\ comen#i pentru AutoCAD, SAE.S.( [i /.(S.(.
SAE.S.( p\strea#\ p`n\ la [ase seturi de selecie diferite
dintr-un desen [i permite ca acestea s\ fie folosite `n timpul
sesiunii de editare grafic\. SAE.S.( sal"ea#\ pointerele dintr-
un set de selecie `ntr-un fi[ier e!tern a c\rui nume este
Ud/gnameV.stUnV& unde Ud/gnameV este numele
desenului respecti" [i UnV este un num\r cuprins `ntre * [i
:.
/.(S.( cite[te pointerele entit\ilor dintr-un fi[ier creat de
SAE.S.( [i construie[te setul de selecie anterior din
entit\ile asociate cu pointerele.
'tape de lucru
P\strai seturile de selecie `n timpul sesiunii de editare prin
scrierea [i cititrea pointerelor `nJ[i din fi[ierul e!tern.
Desc$idei desenul ssgetlsp din directorul student.
Dnc\rcai programul sa$setlsp `n AutoCAD.
4olosii comanda SAE.S.( [i sal"ai dou\ sau mai
multe seturi de selecie.
Desc$idei o nou\ sesiune de editare grafic\ cu
ssget
Dnc\rcai programul sa$esetlsp.
4olosii comanda /.(S.( pentru a e!trage unul
dintre seturile de selecie p\strate.
4olosii comanda 98E. cu setul de selecie
anterior.
Desc$idei fi[ierul sa$setlsp `n editorul de te!t [i
e!aminai codul.
141246430.doc R.2.1 4/22/2013 267
AUTODESK, INC.
E+ECITI,( 44- ,8 /A8A5ER )I/*(, *E8TR, AI)IERE(E TI* ;M5
Acesta este un eerci#iu op#ional
4i[ierul dra/manlsp din directorul student implementea#\
un sistem de management pentru fi[iere tip d/g& foarte
simplu pentru a ilustra modul cum pot fi folosite pointerele.
Putei folosi comen#ile din acest fi[ier urm`nd aceste etape,
*. Dnc\rcai fi[ierul dra/manlsp `n AutoCAD.
+. 4olosii comanda L8/I<.
%. Desenai c`te"a entit\i.
2. 4olosii comanda L8/8-(.
1. 4olosii oricare dintre aceste comen#i pentru a afla
informaii despre entit\ile pe care le-ai desenat prin
leg\turi `ntre pointere [i atribute `ntr-un bloc inserat
aplicaiei.
4I</.)
)LIS(
S.L-S.)
S.L.C8
Aducei fi[ierul `n editorul de te!t [i studiai-l. Codul este
scurt& u[or de `neles [i bine comentat.
268

S-ar putea să vă placă și