8/2/2019 47398143 Lectii LISP Romana
1/259
AutoLISP
Introducere
AutoLISP-ul este un limbaj de programare pentru AutoCAD. Acest cursofer cursantului posibilitatea de a-i nsui cunotine practice de lucru nAutoLISP prin cursuri i texte care explic structura i sintaxa limbajului irelaia acestuia cu AutoCAD-ul. Prin exerciii aplicative la teoria de
programare i exemple concrete cursantul i completeaz aceste cunotine.
Acest curs reprezint o culegere de texte i un ghid pentru un cursAutoLISP pe o perioada de 3 zile, oferit de Autodesk, Inc. TrainingDepartment. La exerciiile de proiectare se adaug lecii suplimentare idiscuii la obiect. Acest curs poate fi folosit individual atunci cnd este ncombinaie cu o dischet ce conine fiierele necesare pentru rezolvareaexerciiilor.
Acest curs este bazat pe o versiune AutoLISP ce poate fi gsit pe toateplatformele pe care este implementat AutoCAD R12.
Obiective
La sfritul acestui curs, cursantul va fi capabil s neleag sintaxaAutoLISP, o varietate de funcii standard i procesul de evaluare Lisp.Cursantul va putea folosi AutoLISP-ul pentru:
Utilizarea comenzilor AutoCAD prin intermediul funciilorde baz AutoLISP.
Crearea de noi funcii AutoLISP.
Crearea de noi funcii AutoCAD pe baza limbajuluiAutoLISP.
Corectarea i modificarea entitilor din baza de date a
AutoCAD-ului. Citirea i scrierea n fiiere cu texte ASCII cu ajutorul
limbajului AutoLISP.
Combinarea programelor de tip AutoLISP cu fiiereleAutoCAD de tip script.
50099176.doc R.2.1 9/21/2011 ATC. Iasi 1
8/2/2019 47398143 Lectii LISP Romana
2/259
AUTODESK, INC.
Cuprins
Acest material cuprinde subiectele prezentate mai jos. Explicarea acestorsubiecte reprezint coninutul principal al capitolelor de mai jos.
Introducere.....................................................................................................1Generaliti.....................................................................................................3
Expresii simbolice..........................................................................................7
Atomi i liste................................................................................................13
Evaluri .......................................................................................................21
Expresii simbol AutoLISP far comenzi AutoCAD....................................35
Tipuri de date numerice...............................................................................41
Puncte AutoCAD i liste AutoLISP.............................................................47Prelucrare de liste.........................................................................................57
Comenzi AutoCAD i liste AutoLISP.........................................................71
Selecie interactiv de puncte.......................................................................79
Funcii..........................................................................................................87
Funcii care acioneaz ca i comenzi AutoCAD........................................97
Fiiere de programare AutoLISP...............................................................101
Funcia C....................................................................................................105
Teste logice i condiionale........................................................................113
Bucle de program.......................................................................................123
Operaii cu iruri........................................................................................131
Acces la entiti..........................................................................................139
Liste asociate entitilor.............................................................................147
Modificarea unei entiti............................................................................155
Selectarea grafic a unei entiti................................................................165
Tratarea erorilor.........................................................................................171
Operaii cu fiiere.......................................................................................175..........................................................................................................................
Seturi de selecie........................................................................................193
Tabele i nume de obiecte..........................................................................203
Fiiere script i AutoLISP..........................................................................211
Accesul la entiti simple i la polilinii......................................................217Accesul la entiti simple i la blocuri.......................................................221
2
8/2/2019 47398143 Lectii LISP Romana
3/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Crearea entitilor cu funcia entmake.......................................................225
Crearea poliliniilor i a definitiilor de bloc cu funcia entmake ...............227
Tratarea irurilor........................................................................................231
Tratarea entitilor......................................................................................243
50099176.doc R.2.1 9/21/2011 3
8/2/2019 47398143 Lectii LISP Romana
4/259
AUTODESK, INC.
Generaliti despre AutoLISP
Ce este AutoLISP-ul ?
AutoLISP-ul este un dialect al limbajului de programare Lisp utilizat
pentru completarea posibilitilor de proiectare n AutoCAD.Lisp este un acronim pentru list processing (in alte texte, listprogramming. Este un limbaj de programare superior foarte cunoscut
pentru aplicaiile lui n domeniul sistemelor specializate, inteligenartificial, programare pe baz de reguli i AutoCAD.
Lisp este unul dintre limbajele de programare cele mai vechi. Ca iFORTRAN, primele implementri ale limbajului Lisp dateaz din anii 60.Multe sublimbaje ale limbajului Lisp exist n prezent, incluznd CommonLisp, Franz Lisp, Mu Lisp i X Lisp.
Limbajul Lisp are multe caracteristici care se adreseaz att profesionitilorct i amatorilor.
AutoLISP are o sintax simpl, precis. Procesul de evaluarei sintaxa folosit pentru crearea expresiilor Lisp sunt uorde nvat.
Este un interpretor aa nct rezultatele obinute din calculepot fi vizualizate interactiv ntr-o sesiune AutoCAD.
AutoLISP interacioneaz direct cu AutoCAD fr snecesite programe de sprijin extern, cum ar fi compilatorul.
Programele AutoLISP snt uor de neles i modificat. AutoLISP-ul este capabil de iteraie i recursivitate.
Funciile pot utiliza instruciuni condiionale i de startstandard i pot fi definite n aa fel nct o funcie apeleaza larecursiune .
AutoLISP-ul ncurajeaz programatorul s scrie funciisimple,structurate i s combine aceste funcii cu scopul de acrea programe complexe dar uor de neles.
Pentru cei ce snt interesai s lucreze cu programe AutoLISP lerecomandm urmtoarele cri:
Common LISP:A Gentle Introduction to Symbolic Computingde David S.Touretzky; LISP de Winston & Horn Looking at LISPde Tony HasemerCommon LispCraft de Robert Wilensky AutoLISP Programmer's
Reference Manual.
Ce poate face AutoLISP-ul ?
AutoLISP-ul este o scul puternic. Poate fi folosit pentru a adaptaAutoCAD-ul la orice fel de aplicaii, fcnd astfel AutoCAD-ul mai sensibilla modul de lucru. Multe dintre cele mai complicate aplicaii proiectate
pentru AutoCAD folosesc pe scar larg limbajul de programare AutoLISP.
4
8/2/2019 47398143 Lectii LISP Romana
5/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
AutoLISP poate crea subrutine i macrouri puternice. SubrutineleAutoLISP pot fi alctuite din comenzi AutoCAD i funcii AutoLISP i potautomatiza operaii complexe n cadrul AutoCAD-ului.
Subrutinele AutoLISP pot crea noi funcii AutoLISP i noi comenzi
AutoCAD care pot fi folosite n linia de comand sau n cadrul fiierelorscript i menu-urilor AutoLISP.
Cum ncrcm AutoLISP-ul ?
AutoLISP-ul este o component standard a AutoCAD-ului, portabil petoate mainile de calcul. Interpretorul AutoLISP se ncarc automat lafiecare sesiune AutoCAD.
AutoLISP opereaz n cadrul editorului grafic AutoCAD. Interpretorul stn "umbr" n timpul unei sesiuni de interpretare grafic ateptnd sevalueze o expresie 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 ? Cunotinte temeinice de lucru cu AutoCAD.
Trebuie de asemenea s avei cunotine despre:
Fiiere script.
Menu-uri utilizator.n unele cazuri este mai simplu i mai uor s optimizai o secvent dedesenare cu un fiier script sau cu un menu de baz dect s folosii un
program AutoLISP.
Ce editor de text ar trebui folosit ?
Este nevoie de un editor de text ASCII pentru a crea fiiere programAutoLISP pe baza acestui manual.
Fiierele de text ASCII pot fi ntlnite sub denumirea de fiiere
"programmer", "non-document" sau "unformatted".
Versiunea MS-DOS 5.0 a aprut cu un editor de text simplu numit EDIT.Dac folosii versiunea DOS 386 a AutoCAD-ului din acest manual este
posibil s dorii s folosii acest editor.
Aplicaia NOTEPAD din Microsoft WindowsTM este un editor de textASCII aa cum este aplicaia Text Editor din Sun MycrosystemsSPARCTM din Open WindowsTM.
Exist o varietate de editoare de text gratuite i care circul liber pentru
AutoCAD i AutoLISP n cadrul Forumului CompuServe AutoCAD (GO
50099176.doc R.2.1 9/21/2011 5
8/2/2019 47398143 Lectii LISP Romana
6/259
AUTODESK, INC.
ACAD). Orice editor profesional de programare este o unealt bun cu carese pot scrie fiiere program AutoLISP.
Hardware pentru AutoLISP i necesarul de memorie
Computerul dumneavoastr trebuie s aib hardware-ul i memoria cerutde AutoCAD pentru a putea folosi AutoLISP-ul. Manualele AutoCADInterface iInstallation And Performance Guide prezint cerinele specificefiecrei platforme.
Lansarea n execuie
Lansai editorul grafic AutoCAD nainte de a lansa orice alt comanda. Vatrebui s introducei s-expresiile AutoLISP din linia de comand.
V sugerm s lansai sesiunea de editare grafic ori de cte ori utilizaiacest manual.
6
8/2/2019 47398143 Lectii LISP Romana
7/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Expresii simbolice
Expresiile simbolice snt instruciuni de baz ale limbajului AutoLISP.
Obiectiven acest capitol vei nva:
Cum s creai o expresie simbolic
Cum recunoate AutoCAD-ul expresiile simbolice
Cum s folosii expresiile simbolice n cadrul comenzilorAutoCAD
Cum s aflai valoarea unei expresii simbolice
Instruciuni n AutoLISP
n principal LISP-ul proceseaz listele: el proceseaz i evalueaz listelede obiecte. AutoLISP-ul proceseaz liste cunoscute ca expresii simbolice,n cadrul AutoCAD-ului.
Listele snt principalul mijloc de construire a expresiilor simbolice nAutoLISP. O expresie simbolic din AutoLISP poate fi comparat cu o
propoziie n limba englez.
O expresie simbolic sau o s-expresie are ntotdeauna o anumit valoare.
Funcia principal a LISP-ului este s determine valoarea unei s-expresii.De fiecare dat cnd lansm o s-expresie interpretorului LISP (de obicei subforma unei liste, el va evalua acea expresie i ne va da rezultatul. Acestrezultat se numete valoarea expresiei.
O expresie simbolic sau o s-expresie reprezint pur i simplu oinstruciune n LISP.
S-expresiile n AutoLISP snt construite prin ncadrarea unei secvenevalide de caractere ntre paranteze. Caracterul parantez stnga sau ( senumete parantez deschis i caracterul parantez dreapta sau ) se numete
parantez nchis. n mod obinuit aceste caractere snt denumite deschis inchis.
Parantezele dintr-o s-expresie trebuie s fie echilibrate. Oricrei parantezedeschise trebuie sa-i corespund una nchis.
Obs. Cea mai frecvent greeal n AutoLISP este nenchidereaparantezelor. Editoarele de text profesionale au aceast caracteristic de agsi parantezele corespondente cu un minim de efort.
50099176.doc R.2.1 9/21/2011 7
8/2/2019 47398143 Lectii LISP Romana
8/259
AUTODESK, INC.
Cum recunoate AutoCAD-ul o s-expresie
AutoCAD-ul recunoate o s-expresie AutoLISP printr-o parantez deschis.Dac gsete o astfel de parantez, AutoCAD-ul transfer intrareautilizatorului ctre interpretorul AutoLISP i ateapt rezultatul. AutoCADafieaz rezultatul s-expresiei.
Command: (+ 1 2)
3
Command:
AutoCAD AutoLISP(+ 1 2)
3
Figura 1. Diagrama de comunicatie dintre AutoCAD si AutoLISP
ExempluPe linia de comand a AutoCAD-ului nscriei s-expresiile n coloana dinstnga a tabelului care urmeaz. Comparai rezultatele date de AutoCAD curezultatele care se afl n coloana din dreapta a tabelului.
Command:(+12)3Command:
S-expresii Rezultate(+ 1 2) 3(- 2 1) 1(/ 4 2) 2(* 4 2) 8
Tabelul 1. Rezultatele expresiilor simbolice
S-expresiile i comenzile AutoCAD
S-expresiile pot fi introduse ca intrare la comenzi AutoCAD. AutoCAD-ul
va recunoate parantezele deschise, va transfera intrarea interpretoruluiAutoLISP i va atepta rezultatul.
8
8/2/2019 47398143 Lectii LISP Romana
9/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
AutoCAD-ul tiprete rezultatul intrrii s-expresiilor pe linia de comand.AutoCAD-ul folosete rezultatul unei s-expresii introduse, drept intrare lacomanda curent.
AutoCAD AutoLISP(/ 360 15)
24
Command:array
polar
last
5,5
(/ 360 15)
Command:array
polar
last
5,5
20
Figura 2. Cum AutoCAD-ul si AutoLISP-ul comunica intr-o comanda AutoCAD
50099176.doc R.2.1 9/21/2011 9
8/2/2019 47398143 Lectii LISP Romana
10/259
AUTODESK, INC.
Exemplu
n comanda "polar array" care urmeaz, mprind 360 de grade la 15 sedetermin numrul de obiecte de creat, de exemplu se creaz un obiect lafiecare 15 grade de rotaie.
Introducei comenzile.
Command: lineFrom point: 5,5To point: 5,8To point: Enter
Command: arraySelect objects: last1 foundSelect objects: EnterRectangular or Polar array (R/P): pCenter point of array: 5,5Number of items: (/ 360 15)Angle to fill (+=ccw, -=cw) :EnterRotate objects as they are copied? Enter
Figura 3. Expresia (/360 15) genereaza un array de 24 linii
Caracterul semnul exclamrii
AutoCAD-ul analizeaz intrarea utilizatorului n linia de comand cautndun alt caracter AutoLISP asociat: semnul exclamarii sau !. Acest caractereste denumit n mod frecvent bang. Dac semnul exclamarii este primulcaracter, AutoCAD-ul transfer intrarea ctre interpretorul AutoLISP iateapt rezultatul.
Orice s-expresie valid poate urma dup semnul exclamrii.
Command:!(+ 12)
10
8/2/2019 47398143 Lectii LISP Romana
11/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Caracterul "bang" este deseori folosit pentru a cere AutoLISP-ului valoareaunui simbol. n acest caz, simbolul nu trebuie s se afle ntre paranteze.
Command: !pi
Exemplu
pi este un simbol predefinit n AutoLISP. Extragei valoarea simbolului pipe linia de comand AutoCAD.
Command: !pi3.14159Command:
Recapitulare
S-expresiile snt expresii AutoLISP valide aflate ntre
paranteze. AutoCAD-ul caut dou caractere speciale: parantezele
deschise sau open i semnul exclamrii sau bang.
Open indic AutoCAD-ului c urmeaz o s-expresie.
Bang indic AutoCAD-ului c urmeaz o s-expresie sau unsimbol.
S-expresiile i caracterul bang pot fi folosite n linia decomand sau n cadrul comenzilor AutoCAD.
Caracterul bang poate precede S-expresiile sau simbolurile.
50099176.doc R.2.1 9/21/2011 11
8/2/2019 47398143 Lectii LISP Romana
12/259
AUTODESK, INC.
Aceast pagin a fost lsat liber n mod intenionat.
12
8/2/2019 47398143 Lectii LISP Romana
13/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Atomi i liste
Exist dou mari categorii de tipuri de date n AutoLISP: atomi i liste.Atomii snt obiecte simple. Listele snt obiecte complexe. Acest capitoldefinete atomii i listele.
Obiective
n acest capitol se va studia:
Diferena dintre atomi i liste
Componentele unei liste
Cum s recunoatem un raport de erori AutoLISP
Natura obiectului AutoLISP nil
Atomi
Un atom este cel mai simplu tip de date din Lisp. Un atom poate fi unnumr ntreg
1
un numr real
4587.993401
un ir de caractere
''A String Of Pearls''
o funcie AutoLISP predefinit
+
un simbol
XYZ
sau oricare alt tip de obiecte existente n tabelul 3-1.
50099176.doc R.2.1 9/21/2011 13
8/2/2019 47398143 Lectii LISP Romana
14/259
AUTODESK, INC.
Tipuri de atomi Exemple Tip de dataAutoLISP
simbol pi,x,mid_pt SYM
sir "Hello, world." STR
intreg 1,32767,-32768 INT
numar real 1.0,45.678,-876543.21 REAL
descriptor de fisier FILE
nume entitate AutoCAD ENAME
set de selectie AutoCAD PICKSET
subr (functie interna) SUBR
subr externa (Functia ADS) EXSUBR
Tabelul 2. Exemple de atomi din AutoLISP si tipul de date al acestora
Exist o regul simpl pentru a afla dac un obiect este un atom sau o list.Dac obiectul nu se afl ntre paranteze atunci este un atom; dac da, atuncieste o list.
Liste
Listele snt s- expresii complexe formate din atomi i/sau alte liste. Listelenecesit sintaxe simple dar riguroase.
O list trebuie s se afle ntre paranteze.
Pentru orice list care poate fi evaluat, primul termen dincadrul listei respective trebuie s fie o funcie.
Obiectele din cadrul listei trebuie separate prin cel puin unspaiu.
Iat cteva exemple de liste. Observai 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 vom vorbi puin mai trziu.
Elementele unei liste
Atomii i listele pot fi combinate sub form de liste. n urmtoarele patruexemple am introdus trei atomi ntr-o list. Fiecare atom este un element allistei.
Exemplu
Aceast list are trei elemente: numerele reale 1.0, 1.0 i 0.0
14
8/2/2019 47398143 Lectii LISP Romana
15/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
(1.0 1.0 0.0)
Aceast list are trei elemente: funcia de adunare + (funcie intern), nr.ntreg 1 i nr. ntreg 3.
(+ 1 3)
Aceast list are trei elemente: funcia de adunare +, nr. ntreg 1 i list(+ 2 3)
(+ 1 (+ 2 3 ))
Figura 4. Lista de trei elemente: doi atomi si o lista
Exemplu
Aceast list are trei elemente: funcia de adunare +, lista (+ 1(+ 2 3)) ilista (+ 4 5).
(+ (+ 1 (+ 2 3)) (+ 4 5))
Figura 5. Lista de trei elemente: un atom si doua liste.
Ceea ce este ncadrat ntre paranteze reprezint o list.
O list se compune dintr-o parantez de deschidere urmat de zero saude mai multe obiecte care pot fi atomi sau liste dup care urmeaz oparantez de nchidere.
50099176.doc R.2.1 9/21/2011 15
8/2/2019 47398143 Lectii LISP Romana
16/259
AUTODESK, INC.
Condiii de eroare
Cnd introducei s-expresii n linia de comand AutoCAD, interpretorulAutoLISP v va spune dac ai introdus o expresie neechilibrat. Oexpresie neechilibratare mai multe paranteze deschise dect nchise.
Iato expresie neechilibrat. i lipsete o parantez nchis.Command: (+ 1 (+ 2 3)1>
AutoLISP-ul semnalizeaz o expresie neechilibratprintr-un mesaj special.
n>
unde n este numrul de paranteze nchise care lipsesc.
Snt dou modaliti de rezolvare n cazul condiiilor de eroare: completainumrul corect de paranteze nchise sau apsai Ctrl-C pentru a anulaexpresia i a ne rentoarce n linia de comand.
Not Este de asemenea posibil s vedei acest mesaj cnd un ir esteneechilibrat. Un ir neechilibrat are ghilimele duble la un capt i simple lacellalt.
Particularitile obiectului nil
Toate obiectele din AutoLISP snt atomi sau liste. Atomii i listele seexclud mutual. Un atom nu este niciodat list i o list nu este niciodatatom.
Excepia o face obiectul nil.
Obiectul nil este "lista goal". Prin convenie nil este i atom i list. nilpoate fi exprimat n dou moduri: 0 sau nil;.
nil este echivalentul AutoLISP pentru fals. Multe funcii n AutoLISPtesteaz dac o condiie este adevarat sau fals, de exemplu dac valoareaunui numr este mai mare dect 0. De cte ori un test de condiie este fals,AutoLISP-ul va returna obiectul nil ca fiind valoarea testului.
nil este singurul obiect din AutoLISP corespunzator lui "fals"; de aceeaorice alt valoare returnat de un test de condiie trebuie s corespund lui"adevrat".
16
8/2/2019 47398143 Lectii LISP Romana
17/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Recapitulare Cele dou mari clase de obiecte din AutoLISP snt atomii i
listele.
Exist cteva tipuri diferite de atomi.
Atomii snt obiecte care nu snt ncadrate ntre paranteze.
Listele snt ntodeauna ncadrate ntre paranteze
Obiectele coninute ntr-o list constituie elementele uneiliste
Elementele unei liste pot fi atomi sau liste
Elementele unei liste snt separate ntre ele de cel puin unspaiu
AutoLISP detecteaz expresiile neechilibrate
nil este i atom i list nil este lista goal
nil este returnat de testele de condiie pentru a indica "fals"
50099176.doc R.2.1 9/21/2011 17
8/2/2019 47398143 Lectii LISP Romana
18/259
AUTODESK, INC.
EXERCITIUL 1: ATOMISILISTE
n acest exerciiu vei:
Recapitula ce ai neles despre atomi i liste
Determina dac un obiect este atom sau list Folosi AutoLISP pentru a afla valoarea diferitelor obiecte
Partea I1. Determinai dac obiectul este atom sau list.
2. Completai rezultatul evalurii n csua corespunzatoare.
Tabelul 3. Determinarea naturii obiectului
18
Obiecte Atomi Liste
73.5
"0,0"
(1.0 2.0 3.0)
"String"
("String")
()
8/2/2019 47398143 Lectii LISP Romana
19/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Partea a II-a1. Gsii valoarea acestui atom n linia de comand AutoCAD
2. Tiprii "!" urmat de un atom
3. Scriei rspunsul n coloana din dreapta:Exemplu
Command: !4.5
Tabelul 4. Determinarea valorii atomului
Partea a III-a1. Determinai numrul de elemente coninut de fiecare list.
2. Scriei rspunsul n coloana din dreapta.Lista Numar de elemente
(1.0 2.0 3.0)
(+ 1 2)
(+ 1 (+ 2 3))
(+ 1 2 (+ 3 4) 5)
(+ 1 (+ 2 (+ 3 4)) 5)
()
Tabelul 5. Determinarea numarului de elemente din lista
50099176.doc R.2.1 9/21/2011 19
Atomi Valori
4.5
"text"
17
setq
xyz
nil
8/2/2019 47398143 Lectii LISP Romana
20/259
AUTODESK, INC.
Aceast pagin este lsat liber n mod intenionat.
20
8/2/2019 47398143 Lectii LISP Romana
21/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Evaluarea
Evaluarea este procesul prin care AutoLISP-ul determin valoarea unuiobiect. Evaluarea se aplic i la atomi i la liste.
Fiecare obiect din AutoLISP are o valoare. Prin evaluarea unui obiect,AutoLISP-ul determin valoarea acestuia.
Obiective
n acest capitol vei studia:
Procesul evalurii
Cum returneaz AutoLISP-ul o valoare
Cum evalueaz AutoLISP-ul atomi i liste
Cum se folosesc funciile aritmetice de baz n AutoLISP Cum se anuleaz evaluarea unui obiect
Cum leag AutoLISP-ul o valoare de o variabil
Returnarea valorii
Cnd transmitei un obiect spre evaluare AutoLISP-ului, acesta i determinvaloarea i o returneaz. ntr-un exemplu anterior, folosind caracterul "!",AutoLISP-ul a evaluat obiectul pi i a returnat valoarea AutoCAD-ului.AutoCAD-ul a tiprit valoarea returnat n zona liniei de comand.
Command: !pi3.14159
8/2/2019 47398143 Lectii LISP Romana
22/259
AUTODESK, INC.
Figura 6. AutoLISP returneaza valoarea expresiei in linia de comanda AutoCAD.
Evaluarea atomilor
Atomii snt obiecte simple i snt evaluai folosind reguli simple potrivittipului lor de date. Majoritatea atomilor se autoevalueaz. Numerele ntregi,
numerele reale, irurile, se autoevalueaz la valoarea pe care o au. Modul ncare se evalueaz un simbol nu poate fi discutat dect dup ce nvam cumse leag o list.
Tip de atom Exemplu Regula deevaluare
Valoare
Intreg 1 Valoarea estenr. insusi
1
Real 4.5 Valoarea estenr. insusi
4.5
Sir "text" Valoarea estenr. insusi "text"
Simbol x Legarea curenta Ultima asignare
Tabelul 6. Reguli de evaluare a atomilor
Evaluarea listelor
Evaluarea unei liste poate fi facut ntr-unul din aceste dou moduri: se ialista ca atare sau se evalueaz. n funcie de natura listei, metodele daurezultate diferite,de exemplu, valori diferite.
22
8/2/2019 47398143 Lectii LISP Romana
23/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Dac o list este luat ca atare, atunci valoarea ei este lista nsi. Acestlucru va fi mai clar dup explicarea funciei quote mai trziu n aceastlecie.
Dac o list urmeaz a fi evaluat de AutoLISP, atunci trebuie respectat
regula sintactic. Pentru orice list care poate fi evaluat, primul element din
cadrul listei trebuie s fie o funcie.
Listele snt evaluate potrivit instruciunilor referitoare la primul element allistei. Dac primul element este numele unei subrutine interne AutoLISPsau funcii, restul de elemente ale listei snt transferate funciei caargumente formale i snt evaluate de ctre funcie.
Funciile snt fie funcii interne AutoLISP, fie subrutine, aa cum snt celeprezentate n capitolul 4 al manualului AutoLISP Programmers Reference
Manual, fie funcii externe definite de utilizator sau exsubr definite deaplicaii ADS, sau funcii AutoLISP definite de utilizator.
Cum evalueaz AutoLISP-ul o list
Vom folosi o list simpl pentru a ilustra procesul de evaluare a unei liste.
Aceasta este o list format din trei elemente: funcia + numerele ntregi 1i 2.
(+ 1 2)
Etapa I: Analiza primului element
Primul element al unei liste pe care AutoLISP-ul o poate evalua trebuies fie o funcie.
AutoLISP-ul verific primul element al listei unde se ateapt s gseasc ofuncie. Dac primul element al listei pe care AutoLISP-ul ncearc s oevalueze nu este o funcie, acesta va da natere unei erori.
Elementele care urmeaz dup o funcie n cadrul unei liste sntargumentele funciei; adic ele reprezint datele asupra crora funciaopereaz.
Etapa a II-a: Evaluarea funciei
AutoLISP evalueaz funcia. O funcie evalueaz un set de instruciuni caresugereaz AutoCAD-ului cum s acioneze mai departe.
Funcia + evalueaz un set de instruciuni pentru AutoLISP. Dac ar fi sexprimm n cuvinte aceste instruciuni, am putea spune: gsii valoarea
fiecrui element din aceast list. Care snt argumentele funciei? Puneitoate valorile la un loc i returnai rezultatul ca fiind valoarea ntregii liste.
50099176.doc R.2.1 9/21/2011 23
8/2/2019 47398143 Lectii LISP Romana
24/259
AUTODESK, INC.
Etapa a III-a: Continuarea instruciunilor funciei
(.. 1 ..)
Urmrind instruciunile din funcia +, AutoLISP-ul gsete valoarea
urmtorului element din list: numrul ntreg 1. Numerele ntregi seevalueaz pe sine. Astfel AutoLISP-ul memoreaz valoarea 1 n stivaprogramului, de exemplu o introduce ntr-o locaie de memorie temporar.
(.. .. 2)
Coninnd cu instruciunile de la funcia +, AutoLISP-ul verific dac maisnt i alte elemente n list. Mai exist un element: numrul ntreg 2.AutoLISP-ul i pastreaz valoarea n stiv.
Etapa a IV-a: Returnarea valorii funciei
Nemaigsind alte elemente n list, de exemplu argumente la funcie,AutoLISP-ul i termin instruciunile de la funcia + prin adugareavalorilor argumentelor 1 i 2 i prin returnarea numrului ntreg 3 ca fiindvaloarea listei.
Command: (+ 1 2)3Command:
Un exemplu mai complex
AutoLISP evalueaz elementele dintr-o listde la stnga la dreapta.
n multe cazuri ar fi convenabil pentru noi s urmm procesul de evaluaredin interior spre exterior dect de la dreapta spre stnga. Rezultatele snt deobicei aceleai i adesea este mai uor pentru noi s citim coduri AutoLISPcu un grad de imbricare mai mare, lucrnd din interior n exterior. Dar nuacesta este modul n care AutoLISP-ul evalueaz o list. ntotdeaunalucreaz de la stnga la dreapta.
Considerai aceast list format din trei elemente: (+ 1 (+ 2 3))
Funcia +
Atomul 1 Lista (+ 2 3)
24
8/2/2019 47398143 Lectii LISP Romana
25/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Figura 7. Evaluarea unei liste complexe
AutoLISP-ul evalueaz aceast list folosind exact aceeai metod ca nexemplul anterior.
(+ ..
AutoLISP-ul caut primul element al listei ateptnd s gseasc o funcie iapoi o evalueaz. Funcia returneaz valoarea ei ca un set de instruciuni
pentru AutoLISP.
(.. 1 ..
Urmnd instruciunile funciei +, AutoLISP-ul afl valoarea celui de al
doilea element al listei, de ex. primul argument la funcia +: atomul 1. Apoii memoreaz valoarea i continu.
(.. .. (+ 2 3) ..
AutoLISP-ul gsete valoarea celui de al treilea element al listei, cum ar fial doilea argument la funcia +.
Al treilea element este el nsui o list. Cum afl AutoLISP-ul valoareaunei liste? Prin evaluare. Cum evalueaz AutoLISP-ul o list?
(.. .. (+ ..
Mai nti evalueaz funcia + i i primete instruciunile
( .. .. (.. 2 ..
(.. .. (.. .. 3) ..
Apoi gsete valoarea argumentelor2 i 3. Terminndu-i instruciunile de lafuncia + din cadrul listei (+ 2 3), AutoLISP-ul adaug valorile i returneazrezultatul care n acest caz este nr. ntreg 5.
Nemaigsind alte elemente n list, AutoLISP-ul termin instruciunile de
la funcia + n lista principal prin adugarea valorii celor dou elemente laun loc i returnnd valoarea 6.
50099176.doc R.2.1 9/21/2011 25
8/2/2019 47398143 Lectii LISP Romana
26/259
AUTODESK, INC.
Funcii aritmetice
AutoLISP-ul include funcii interne pentru operaii aritmetice ca: adunarea,scderea, nmulirea i mprirea
+ funcia de adunare
- funcia de scdere * funcia de nmulire
/ funcia de mprire
26
8/2/2019 47398143 Lectii LISP Romana
27/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Exemple
Expresii aritmetice S-expresii AutoLISP
1 + 2 (+ 1 2)
2 - 1 (- 2 1)
2 * 4 (* 2 4)
4 / 2 (/ 4 2)
Tabelul 7. Aritmetica AutoLISP
Ordinea argumentelor n funciile de adunare i de nmulire nu areimportan. Este ns important pentru scdere i mprire.
Fig. 8 Ordinea argumentelor in functia de scadere
n cazul scderii, valoarea celui de al doilea argument este sczut dinvaloarea primului argument i rezultatul returnat este valoarea listei.
Fig. 9 Ordinea argumentelor in functia de impartire
n cazul mpririi, valoarea celui de al doilea argument este divizorulvalorii primului argument.
Iat cteva exemple complexe.
50099176.doc R.2.1 9/21/2011 27
8/2/2019 47398143 Lectii LISP Romana
28/259
AUTODESK, INC.
Exemple
Expresii aritmetice S-expresii AutoLISP
1 + (2 - 3) (+ 1 (- 2 3))
(4 + 2) - 1 (- (+ 4 2) 1)
4 * 4 / 2 (/ (* 4 4) 2)
4 / 2 * 3 (* 3 (/ 4 2))
Tabelul 8. Exemple complexe de expresii aritmetice
Recapitulare AutoLISP-ul determin valoarea unui obiect prin evaluare.
AutoLISP-ul returneaz valoarea fiecrui obiect pe care ilevalueaz.
Majoritatea atomilor se evalueaz pe sine.
Simbolurile se evalueaz prin legare sau atribuire.
Listele snt evaluate printr-un proces standard.
Primul element al oricarei liste ce poate fi evaluat trebuies fie o funcie.
AutoLISP-ul are funcii standard pentru operaii aritmetice.
28
8/2/2019 47398143 Lectii LISP Romana
29/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
EXERCITIUL 2: LISTESIARITMETICALISTELOR
n acest exerciiu vei:
Consolida cunotinele despre procesul de evaluare
ncepe scrierea expresiilor AutoLISP folosind listele
Transforma expresiile aritmetice n expresii AutoLISP
Transforma expresiile AutoLISP n expresii aritmetice
Partea I1. Folosii funcia +, -, /, i *.
2. Transformai expresiile aritmetice n expresii AutoLISP.
3. Scriei rspunsurile n coloana din dreapta.
ExempluExpresia n notaia aritmetic standard:
1 + 2
Expresia n AutoLISP:
( + 1 2 )
Expresii aritmetice S-expresii
3 + 10 + 5
20 * 15
16 - 10
15 / 3
5 + (10 * 2)
(5 + 10) * 2
Tabelul 9. Traducerea expresiilor aritmetice
50099176.doc R.2.1 9/21/2011 29
8/2/2019 47398143 Lectii LISP Romana
30/259
AUTODESK, INC.
Partea a II-a1. Transformai s-expresiile n expresii aritmetice
2. Scriei rspunsurile n coloana din dreapta
Exemplu
Expresia n notaia aritmetic standard
(2 * 5) / (7 - 2)
Expresia n AutoLISP
(/ (* 2 5) (- 7 2))
Tabelul 10. Traducerea expresiilor AutoLISP
30
s-expresii expresii aritmerice
(+ 2 (+ 5 4) (- 4 2))
(- 5 (+ 4 (- 3 2)))
(/ 8 (- (/ 6 2) 1))
(* 2 (/ (+ 2 4) 3))
(- 5 (/ 6 (+ 1 2)))
(+ (/ (* 2 3) (- 4 2)) 1)
8/2/2019 47398143 Lectii LISP Romana
31/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Liste neevaluate
Valoarea unei liste poate fi determinat n unul din aceste dou moduri: seevalueaz lista sau se consider lista ca atare.
Funcia AutoLISP quote este folosit pentru a returna o list sau un atomneevaluat, adic la valoarea ca list.
Folosii quote ca fiind primul element ntr-o list i adugai un singurargument. Valoarea listei va fi valoarea neevaluat a celui de al doileaelement al listei, adic argumentul la quote.
Exemplu
Aceast expresie returneaz lista (1.0 2.0 3.0) neevaluat.
Command: (quote (1.0 2.0 3.0))
(1.0 2.0 3.0)Ce s-ar ntmpla dac AutoLISP-ului i s-ar cere s evalueze lista?
De ce?
Command: (1.0 2.0 3.0)?
Operaia de legare a dou obiecte
Legarea este procesul prin care o valoare este atribuit unui simbol definitde utilizator sau unei variabile. n AutoLISP, spunem c la un simbol sau lao variabil se leag o valoare. Aceasta nseamn n limbajul BASIC c ovaloare este egal de o variabil sau c o valoare este atribuit uneivariabile.
Funcia AutoLISP setq se folosete pentru a lega un simbol sau o variabilde o valoare.
Exemplu
Aceast expresie leag simbolul x de valoarea 4.5.
Command: (setq x 4.5)
4.5Command: !x4.5
50099176.doc R.2.1 9/21/2011 31
8/2/2019 47398143 Lectii LISP Romana
32/259
AUTODESK, INC.
n BASIC, aceeai operaie ar putea fi exprimat astfel:
LET x = 4.5
Cum funcioneaz funcia setqValoarea funciei setq este un set de instruciuni pentru AutoLISP.
Aceste instruciuni ar putea fi exprimate astfel: Luai primul argument caatare. Nu-l evaluai. Gsii valoarea celui de al doilea argument. Legai
primul argument de valoarea celui de al doilea argument. Returnaivaloarea legrii ca fiind valoarea listei.
Exemplu
Notai returnarea valorii acestei expresii. Valoarea listei este valoarealegturii stabilite pentru simbolul x de ctre funcia setq.
Command: (setq x 4.5)4.5
Recapitulare Funcia quote suprim procesul de evaluare.
Legarea este procesul de atribuire a unei valori la ovariabil.
Functia setq este folosit pentru a lega o variabil de ovaloare.
32
8/2/2019 47398143 Lectii LISP Romana
33/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
EXERCITIUL 3: EVALUAREALISTELORSILEGAREAVARIABILELOR
n acest exerciiu vei:
Consolida cunotinele despre procesul de evaluare
Determina dac o list poate fi evaluat fr erori
Consolida cunotinele despre procesul de legare
Folosi funcia setq pentru a lega variabile de valori, adicvei atribui valori variabilelor
Partea I1. Determinai dac o list poate fi evaluat sau trebuie considerat
ca atare.
2. Punei un semn n coloana corespunztoare
Tabelul 11. Determinarea situatiei in care o lista poate fi evaluata
50099176.doc R.2.1 9/21/2011 33
s-expresii Evaluari? Numai fatavalorii?
(+ 1 2)
(+ 1 (+ 2 3))
(1.0 2.0 3.0)
(quote (1.0 2.03.0))
(setq x 4.5)
(setq y (1.0 2.03.0))
(y (1 2))
8/2/2019 47398143 Lectii LISP Romana
34/259
AUTODESK, INC.
Partea a II-a
1. Legai variabila x de valorile din tabel
2. Folosii funcia setq i funcia quote dac este necesar
3. Verificai valoarea variabilei folosind "bang" pentru a-i aflalegarea curent.
Exemplu
Command: (setq x 1)1Command: !x1
Command:(setq x (+ 1 2 3))6Command: !x6
Command: (setq x (quote (4 (+ 5 6)))(4 (+ 5 6))Command:!x(4 (+ 5 6))
Valoare pentrux
14.5
"text"
(1.0 2.0 3.0)
(+ 1 2 3)
(1 (+ 2 3))
Tabelul 12. Legarea lui x unor valori diferite
34
8/2/2019 47398143 Lectii LISP Romana
35/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Aceast pagin este lsat liber n mod intenionat.
50099176.doc R.2.1 9/21/2011 35
8/2/2019 47398143 Lectii LISP Romana
36/259
AUTODESK, INC.
S-expresii AutoLISP n cadrul comenzilor AutoCAD
S-expresiile AutoLISP pot fi folosite n cadrul comenzilor AutoCAD.
Obiectiven acest capitol vei studia:
Cum s folosii AutoLISP-ul n cadrul comenzilor AutoCAD
Cum s returnai o valoare din AutoLISP ctre o comandAutoCAD
Returnarea unei valori n linia de comand
Valoarea unei expresii AutoLISP este trecut din AutoLISP n AutoCADca rspuns la linia AutoCAD n aciune.
Dac linia de comand este n aciune, valoarea unei expresii este pur isimplu tiparit n zona liniei de comand.
Command: (setq x (+ 4 6))10Command: !x10
Aceast expresie returneaz valoarea divizrii rdcinii ptrate numrului50 prin numrul real 9.
Command: (/ (sqrt 50.0) 9.0)0.78567
Aceast expresie returneaz valoarea multiplicrii rezultatului obinut prinadunarea lui 2.5 cu 6.3 de 24.0.
Command: (* (+ 2.5 6.3) 24.0)211.2
Returnarea unei valori la o comand AutoCAD
Dac o comand AutoCAD este n aciune, atunci evaluarea unei expresiiAutoLISP returneaz valoarea expresiei n AutoCAD. Valoarea devinerspunsul la linia curent a comenzii AutoCAD.
n acest exemplu, comanda ARRAY recepioneaz ca numr de repetiii alefunciei, rezultatul unei expresii AutoLISP pentru care 6.0 se divide la 0.35;cu alte cuvinte, nu tim dinainte cte repetiii cuprinde unitatea 0.35 la odistant de 6.0 unitai, deci rugm AutoLISP-ul s calculeze valoarea
pentru noi i s returneze rspunsul AutoCAD-ului.Deoarece comanda dinARRAY accept numai numere ntregi i nu numere reale, vom folosifuncia AutoLISP fix pentru a rotunji cel mai apropiat numr ntreg.
36
8/2/2019 47398143 Lectii LISP Romana
37/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Exemplu
ncepei un desen nou.
Tiprii comenzile i expresiile care urmeaz.
Command: (/ 6.0 0.35)17.1429Command: (fix 17.1429)17Command: (fix (/ 6.0 0.35))17
Command: lineFrom point: 1,1To point: 5,5To point: Enter
Command: arraySelect objects: ISelect objects: EnterRectangular or Polar array (R/P): rNumber of rows (-) : 1Number of columns (III) : (fix (/ 6.0 0.35))Distance between columns: 0.35
AutoCAD creaz 17 elemente n array.
Trebuie avut n vedere faptul c o expresie AutoLISP a fost folositinteractiv, n mijlocul unei comenzi AutoCAD, pentru a calcula o valoare(n acest caz un numr ntreg) care ulterior este dat automat comenzii n
acel punct special la secvena de cerere a comenzii.
50099176.doc R.2.1 9/21/2011 37
8/2/2019 47398143 Lectii LISP Romana
38/259
AUTODESK, INC.
n exemplul urmator, AutoLISP-ul calculeaz mrimea razei unei racordri.
Exemplu
ncepei un desen nou.
Tiprii expresiile i comenzile care urmeaz.
Mrimea razei unei racordri este stabilit la 2.24.
Command: lineFrom point: 1,1To point: 5,5To point: Enter
Command: lineFrom point: 10,1To point: 6,5To point: Enter
Command: filletPolyline/Radius/: rEnter fillet radius : (/ 28.0 12.5)
Command: filletPolyline/Radius/: pick first lineSelect second object: pick second line
Figura 10. Doua linii cu o racordare la o raza de (/28.0 12.5) sau 2.24
Recapitulare S-expresiile pot fi folosite ca rspunsuri la cererile de
comand AutoCAD.
AutoLISP returneaz valoarea unei s-expresii folosite ncadrul unei comenzi AutoCAD la cererea comenzii.
38
8/2/2019 47398143 Lectii LISP Romana
39/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
EXERCITIUL 4: EXPRESIIAUTOLISPINCADRULCOMENZILORAUTOCAD
n acest exerciiu vei:
Folosi funcii aritmetice i funcia setq pentru a crea valori i
legturi simbol Folosi valorile i simbolurile ca rspunsuri la cererile de
comand AutoCAD
Instruciuni1. ncepei un desen nou.
2. Desenai un arc cu un unghi inclus de 1 radian.
3. Desenai dou cercuri concentrice: unul cu o raz de dou treimipii unul cu o raz la jumtate din aceast valoare.
4. Amplasai arcul n jurul centrului cercurilor.5. Fixai cte o copie la fiecare 15 grade de rotaie.
Command: arcCenter/: 5,5Center/End/: cCenter: 3,5Angle/Length of chord/: aIncluded angle: (/ 180 pi)Command: (setq x (* pi (/ 2.0 3.0)))2.0944
Command: circle
3P/2P/TTR/: 5,5Diameter/: !x
Command: circle3P/2P/TTR/: 5,5Diameter/: (/ x 2)
50099176.doc R.2.1 9/21/2011 39
8/2/2019 47398143 Lectii LISP Romana
40/259
AUTODESK, INC.
Command: (setq x (/ 360 15))24
Command: arraySelect objects: pick the arc1 found
Select objects: EnterRectangular or Polar array (R/P): pCenter point of array: 5,5Number of items: !xAngle to fill (+=ccw, -=cw) :EnterRotate objects as they are copied? Enter
Figura 11. Array completat
40
8/2/2019 47398143 Lectii LISP Romana
41/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Aceast pagin este lsat liber n mod intenionat.
50099176.doc R.2.1 9/21/2011 41
8/2/2019 47398143 Lectii LISP Romana
42/259
AUTODESK, INC.
Tipuri de date numerice
AutoLISP-ul are dou tipuri de date numerice: numere ntregi i numerereale. Funcia type returneaz tipurile de date ale unui obiect.
Obiectiven acest capitol vei studia:
Diferenele dintre cele dou tipuri de date numerice
Cum s determinai tipul de date al unui obiect
Determinarea tipului de date ale unui obiect
Funcia AutoLISP type se folosete pentru a determina tipul de date al unuiobiect. type cere un argument i returneaz un simbol care indic tipul dedate al argumentului.
De exemplu, aceast expresie returneaz tipul de date al numrului real 1.0
Command: (type 1.0)REAL
Numere reale
AutoLISP-ul reprezint numerele reale n virgul mobil, dubl precizie cucel puin 14 zecimale. Nu exist tipuri de date care s reprezinte numerecu simpl precizie n AutoLISP. Toate numerele reale snt cu dubl preciziei ele snt reprezentate n AutoLISP n aceeai manier ca n AutoCAD.
Numerele reale snt numere introduse cu punct zecimal, de exemplu 4.5 sau123.456.
Command: (setq x 4.5)4.5
Pentru valori cuprinse ntre 1.0 i -1.0 , zero trebuie s precead punctulzecimal, de exemplu, 0.45 sau 0.123 sau -0.876.
Command: (setq x 0.123)0.123
Precizia afirii si precizia intern
Precizia implicit a afirii unui numr real n AutoLISP este de 5zecimale. Reprezentarea intern este ntotdeauna meninut cu cel puin 14zecimale semnificative de precizie.
42
8/2/2019 47398143 Lectii LISP Romana
43/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Dac este necesar afiarea sau tiprirea valorii unui numr real cu oprecizie mai mare dect precizia de afiare a AutoLISP-ului, numrul realpoate fi transformat ntr-un ir cu ajutorul funciei AutoLISP rtos i apoiafiat sau tiprit cu precizia de afiare dorit.
rtos cere pn la 3 argumente: un numr real, un numr ntreg carereprezint unul dintre sistemele de unitai AutoCAD i numrul de zecimale
pentru irul care va fi returnat.
Exemplu
Introducei expresiile care urmeaz.
Legai simbolul x de numrul real 4.5
Command: (setq x 4.5)4.5
Verificai-i valoarea i tipul de dateCommand: !x4.5Command: (type x)
Folosii funcia rtos pentru a vizualiza valoarea lui x ca numr zecimal cu oprecizie de 8 zecimale.
Command: (rtos x 2 8)"4.50000000"
Numere ntregi
Numerele ntregi snt numere introduse fr punct zecimal. Numerelentregi n AutoLISP snt numere ntregi cu semn pe 32 bii cuprinse ntre2.147.483.648 i +2.147.483.647. Dei AutoLISP-ul folosete valori de 32
bii, cele transferate ntre AutoLISP i AutoCAD snt limitate la valori de16 bii, de exemplu nu se poate transfera o valoare mai mic de -32.768 saumai mare de +32.767 n AutoCAD. Dac folosii o valoare care depesteaceste limite, putei folosi funcia float pentru a o transforma ntr-un numrreal nainte de a o transfera n AutoCAD.
50099176.doc R.2.1 9/21/2011 43
8/2/2019 47398143 Lectii LISP Romana
44/259
AUTODESK, INC.
Exemplu
Introducei expresiile care urmeaz.
Legai simbolul x de un numr ntreg cu valoarea de 65535.
Command: (setq x 64435)65535
Verificai-i valoarea i tipul de date.
Command: !x65535Command: (float x)65535.0Command: (fix (float x))65535Command: (type x)INT
Folosii funciile float i fix pentru a returna valoarea lui x cu tipuri de datediferite i folosii funcia rtos pentru a imprima valoarea cu un format dezece zecimale.
Command: (type (float x))REALCommand: (type (fix (float x)))INTCommand: (rtos (float x) 2 10)"65535.0000000000"
Conversia automat a numerelor ntregiAutoLISP-ul va converti numerele ntregi n numere reale ori de cte ori vantlni ambele tipuri de date ca argumente la funcie.
Dac dou numere ntregi snt folosite ca argumente la funcia de adunare+, valoarea returnat a expresiei este un numr ntreg; totui, dacargumentele snt un numr real i un numr ntreg, valoarea returnat esteexprimat printr-un numr real.
Exemplu
Aceast expresie returneaz un numr ntreg.
44
8/2/2019 47398143 Lectii LISP Romana
45/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Command: (+ 1 2)3Command: (type (+ 1 2))INT
Aceast expresie returneaz un numr real.
Command: (+ 1.0 2)3.0Command: (type (+ 1.0 2)REAL
Recapitulare
AutoLISP-ul are dou tipuri de date numerice: numerentregi i numere reale.
Numerele ntregi au valori de 32 bii n AutoLISP.
Numai numerele ntregi cu valori de 16 bii pot fi transferatentre AutoLISP i AutoCAD.
Numerele reale snt numere zecimale cu dubl precizie.
Numerele reale snt reinute cu cel puin 14 zecimale deprecizie.
AutoLISP-ul va converti un numr ntreg ntr-un numr realcnd le ntlnete pe amndou n cadrul aceleiai expresii.
Un numr real trebuie ntotdeauna s aib o cifr careprecede punctul zecimal.
Funcia type returneaz tipul de date al unui obiect. Funcia fix transform un numr real ntr-un numr ntreg.
Funcia float transform un numr ntreg ntr-un numr real.
50099176.doc R.2.1 9/21/2011 45
8/2/2019 47398143 Lectii LISP Romana
46/259
AUTODESK, INC.
EXERCITIUL 5: FOLOSIREANUMERELORINTREGISIREALE
n acest exerciiu vei:
Consolida cunotinele despre tipurile de date ale numerelor
ntregi i reale. Folosi funcia setq pentru a lega variabile de valori cu tipuri
de date numerice diferite.
Determina valoarea returnat i tipul de date numerice aleunei expresii AutoLISP
Partea I1.Legai simbolurile de valori diferite.
2.Introducei s-expresia corespunzatoare n linia de comand AutoCAD.
simbol valoare
a 1
b 2
c 3
x 1.0
y 2.0
z 4.5
Tabelul 13. Legarea variabilelor de valori numerice.
46
8/2/2019 47398143 Lectii LISP Romana
47/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Partea aII-a1.Determinai valoarea returnat i tipul de date pentru fiecare expresie.
2.Scriei rspunsurile n coloanele corespunzatoare
3.Trebuie mai nti s efectuai prima parte a acestui exerciiu.
expresia-s returnarea valorii tip de data pentruvaloarea returnata
(+ 1 2)
(+ 1 2.0)
(+ 1.0 2.0)
(+ a b)
(+ a y)
(+ y z)
(fix x)
(float a)
(fix z)
(float (fix z))
(fix (+ (float a) (float b)))
(/ x y)
(fix (/ x y))
(float (fix (/ x y)))
(+ (fix (/ a y)) (fix (float a)))
Tabelul 14. Valorile returnate si tipurile de date numerice ale expresiilor.
50099176.doc R.2.1 9/21/2011 47
8/2/2019 47398143 Lectii LISP Romana
48/259
AUTODESK, INC.
Puncte AutoCAD i liste AutoLISP
AutoCAD-ul folosete coordonatele carteziene pentru a descrie punctele2- i 3-dimensionale. AutoLISP-ul reprezint un punct sub forma unei listede numere reale.
Obiective
n acest capitol vei studia:
Cum reprezint AutoLISP-ul puncte
Cum s construii o list care reprezint un punct folosindatt constante ct i variabile.
Puncte AutoCAD
Un punct 3-dimensional este format din trei numere, fiecare avnd o valoare
independent care corespunde unei distane de la originea sistemului decoordonate de-a lungul axelor X, Y i Z. Imaginai-v punctul 3-D subforma a trei cutii, fiecare coninnd un numr real.
Figura 12. Punct 3-d reprezentat prin trei coordonate
Luai, de exemplu, punctul 3-D 1,2,3. AutoCAD-ul are o gam larg deoperatori pentru a descrie acest punct: Introducerea n coordonate absolute,relative i polare, agarea de obiecte, filtre de coordonate etc. Darreprezentarea intern a punctului se reduce la o asociere ntre trei numerereale.
Figura 13. Valori de-a lungul axelor de coordonate.
48
8/2/2019 47398143 Lectii LISP Romana
49/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
AutoLISP-ul reprezint un punct AutoCAD 3-D sub forma unei listeformate din trei numere reale, unde primul element este valoareacoordonatei X, al doilea valoarea Y i al treilea valoarea Z.
Punctul 1,2,3 exprimat sub forma unui obiect AutoLISP este (1.0 2.0 3.0)
Figura 14. Lsta AutoLISP sub forma unui punct AutoCAD
Construirea listelor de coordonate ale punctelorRezultatul unei ncercri de a crea un obiect AutoLISP, recunoscut deAutoCAD ca punct 3-D, este clar: o list format din trei numere reale.Cum se poate construi o astfel de list?
Exist dou funcii pentru construirea acestor obiecte: quote i list.
Construirea punctelor cu funcia quote
Aa cum ai observat mai devreme, funcia quote impiedic procesul deevaluare pentru singurul ei argument i returneaz acest argument
neevaluat.Construirea unei liste format din trei numere reale este un proces simplucu ajutorul funciei quote. De exemplu, expresia (quote (1.0 2.0 3.0)returneaz valoarea (1.0 2.0 3.0), o reprezentare AutoLISP valid a unui
punct AutoCAD.
50099176.doc R.2.1 9/21/2011 49
8/2/2019 47398143 Lectii LISP Romana
50/259
AUTODESK, INC.
Exemplu
Introducei expresiile care urmeaz. Creai dou liste formate din cte treinumere reale i folosii listele n linia de comand AutoCAD.
Command: (setq pt1 (quote (1.0 1.0 1.0)))
(1.0 1.0 0.0)Command: !pt1(1.0 1.0 0.0)Command: (setq pt2 (quote (5.0 5.0 0.0)))(5.0 5.0 0.0)Command: !pt2(5.0 5.0 0.0)Command: lineFrom point: !pt1To point: !pt2To point: Enter
pt1 (1.0 1.0 0.0)
pt2 (5.0 5.0 0.0)
Figura 15. Linie de la pt1 la pt2
Construirea punctelor cu funcia list
Valoarea returnat a funciei list este o list format din valorileargumentelor funciei. Funcia poate primi oricte argumente dorii.
list evalueaz fiecare argument, unul dup altul i le memoreaz valoareatemporar. Cnd funcia list i epuizeaz argumentele i compune valorileargumentelor din elemente n cadrul unei liste i returneaz lista.
50
8/2/2019 47398143 Lectii LISP Romana
51/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Exemplu
Introducei expresiile care urmeaz.
n timp ce lucrai, nu uitai c numerele reale se evalueaz pe sine, de
exemplu, Command: !4.5 returneaz 4.5.Folosii funcia list pentru a returna o list format din trei numere reale.
Command: (list 1.0 2.0 3.0)(1.0 2.0 3.0)
Folosii funcia setq pentru a lega simbolul pt la o list cu trei numere reale.
Command: (setq pt (list 1.0 2.0 3.0))(1.0 2.0 3.0)Command: !pt(1.0 2.0 3.0)
Folosii simbolul pt ca intrare la comanda AutoCAD ID i verificai dacAutoCAD-ul recunoate valoarea simbolului ca punct valid 3-D.
Command: idPoint: !ptX=1.0000 Y=2.0000 Z=3.0000Command:
Figura 16. Valoare returnata de functia list
50099176.doc R.2.1 9/21/2011 51
8/2/2019 47398143 Lectii LISP Romana
52/259
AUTODESK, INC.
Construirea punctelor din variabile cu funcia list
Deoarece funcia list i evalueaz argumentele, putei folosi simboluri sauvariabile ca argumente ale funciei list pe/sau n loc de numere reale.
S admitem c avei trei variabile x, y i z care snt legate de numerele reale1.0, 2.0 i 3.0.
Figura 17.Legarea variabilelor de numere reale cu functia setq
Atunci expresia (list x y z) va returna aceeai valoare ca i expresia (list1.0 2.0 3.0)
Figura 18. Valoare returnata de functia list
52
8/2/2019 47398143 Lectii LISP Romana
53/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Exemplu
Introducei expresiile care urmeaz.
Legai simbolurile x, y i z de trei numere reale
Command: (setq x 1.0)1.0Command !x:1.0Command: (setq y 2.0)2.0Command: !y2.0Command: (setq z 3.0)3.0Command: !z3.0
Folosii variabilele ca argumente la funcialist
.Command: (list x y z)(1.0 2.0 3.0)
Memorai lista ntr-o variabil numit pt i folosii-o n cadrul comenziiAutoCAD.
Command: (setq pt (list x y z))(1.0 2.0 3.0)
Command: !pt(1.0 2.0 3.0)
Command: idPoint: !ptX=1.0000 Y=2.0000 Z=3.0000Command:
50099176.doc R.2.1 9/21/2011 53
8/2/2019 47398143 Lectii LISP Romana
54/259
AUTODESK, INC.
Recapitulare AutoCAD-ul folosete sistemul de coordonate carteziene 3-
D pentru a specifica punctele.
Un punct AutoCAD este reprezentat n AutoLISP sub formaunei liste de numere reale.
AutoLISP-ul reprezint un punct AutoCAD 2-D sub formaunei liste format din dou numere reale.
Un punct AutoCAD 3-D este reprezentat sub forma uneiliste cu trei numere reale.
Funcia quote poate construi o list de numere din constante.
Funcia list poate construi o list de numere din constantesau din variabile.
54
8/2/2019 47398143 Lectii LISP Romana
55/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
EXERCITIUL 6: UTILIZAREALISTELORDE NUMERECAPUNCTEAUTOCAD
n acest exerciiu vei:
Consolida cunotinele despre relaia dintre listele
AutoLISP formate din dou sau trei numere reale i puncteleAutoCAD.
Lega variabile pentru a reprezenta coordonatele unui punct.
Crea liste ale variabilelor coordonatelor pentru a reprezentapuncte.
Folosi liste ca rspunsuri la cererile de comand AutoCAD.
Partea I1. Introducei expresiile n coloana din stnga.
2. Scriei valoarea returnat a fiecarei expresii n coloana din mijloc.3. Dac o legatur simbol apare n cadrul expresiei, scriei-i valoarea
n coloana din dreapta.
Tabelul 15. Crearea punctelor din liste de numere
50099176.doc R.2.1 9/21/2011 55
Expresia Valoarea expresiei Simbol de atribuire
(setq x 1.0) 1.0 x = 1.0
(setq y 2.0)
(setq z 0.0)
(list 1.0 2.0 0.0)
(list x y z)
(setq pt1 (list x y z))
!pt1
(quote (5.0 6.0 0.0))
(setq pt2 (quote (5.0 6.0 0.0)))
!pt2
(quote (x y z))
(setq notapoint (quote (x y z)))
!notapoint
8/2/2019 47398143 Lectii LISP Romana
56/259
AUTODESK, INC.
Partea a II-a1. n acelai desen din partea I introducei expresiile care urmeaz.
2. Creai o Linie i un Cerc folosind variabilele legate de listeformate din numere reale aa cum snt punctele pentru comenzileAutoCAD.
3. Legaturile simbol se bazeaz pe partea I a acestui exerciiu.Command: lineFrom point: !pt1To point: !pt2To point: Enter
Command: circle3P/2P/TTR/: 2pFirst point on diameter: !pt1
Second point on diameter: !pt2
5,6,0
1,2,0
Figura 19. Linie si cerc folosind variabilele pt1 si pt2
56
8/2/2019 47398143 Lectii LISP Romana
57/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Aceast pagin este lsat liber n mod intenionat.
50099176.doc R.2.1 9/21/2011 57
8/2/2019 47398143 Lectii LISP Romana
58/259
AUTODESK, INC.
Separarea listelor
Avnd instruciuni pentru construirea listelor - funciile list i quote - ne-ar fide folos s avem i cteva instruciuni pentru separarea listelor.
Dac am avea un set instruciuni pentru extragerea fiecrui element dintr-olist, atunci am putea realiza mult mai uor programe AutoLISP.
Desenai un dreptunghi cunoscnd numai coordonatelecolurilor opuse.
Gsii punctul de mijloc dintre oricare ar fi dou puncte ( nunumai punctele finale ) ale unei linii sau ale unui cerc.
Determinai dac un punct se afl ntr-o anumit regiune 2-Dsau 3-D a unui sistem de coordonate carteziane.
De vreme ce acest lucru necesit mai mult dect abilitatea de a separa liste,separarea listelor este o cerin fundamental n aceast operaie.
Obiective
n acest capitol vei studia:
Cum snt reprezentate listele n memoria computerului subforma unui arbore binar.
Cum snt listele reprezentate grafic.
Cum s folosii funciile car i edr pentru separarea listelor.
Cum s separai liste care reprezint puncte n AutoCAD icum s specificai puncte prin crearea unor liste noi bazatepe punctele existente.
Structura intern a unei liste
O list AutoLISP este reprezentat n memoria computerului sub formaunui arbore binar. Orice punct de pe arborele binar unde poate aprea oramificaie se numete nod. Nodul este una din unitile fundamentale
pentru stocarea memoriei n AutoLISP.
Primul nod de sus al unui arbore binar se numete nodul radacin.
58
8/2/2019 47398143 Lectii LISP Romana
59/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Structura unei liste AutoLISP este desfcut nod cu nod, ncepnd de lanodul rdcin. Fiecare nod se desface n dou ramificaii reprezentnddiferite pri ale listei: primul element al listei i lista cu primul elementndeprtat.
Figura 20. Nodul radacina si primul set de ramificatii pentru o lista.
De exemplu prima ramificaie a listei (1.0 2.0 3.0) ar putea fi reprezentatastfel.
(1.0 2.0 3.0)
1.0 (2.0 3.0)
Figura 21. Nodul radacina si primul set de ramificatii pentru lista (1.0 2.0 3.0)
50099176.doc R.2.1 9/21/2011 59
8/2/2019 47398143 Lectii LISP Romana
60/259
AUTODESK, INC.
Subdivizarea de-a lungul ramificaiei arborelui continu pn ce parteadreapt a ramificaiei se termin cu lista goal sau nil.
(1.0 2.0 3.0)
1.0 (2.0 3.0)
2.0 (3.0)
3.0 ()
Figura 22. Arbore binar complet pentru lista (1.0 2.0 3.0)
AutoLISP-ul are apelative speciale pentru cele dou pari ale ramificaieilistei. Primul element al listei se numete car-ul listei. Lista fr primul eielement se numete cdr-ul listei. Ramificaia stng este partea car a listeiiar ramificaia dreapt este parteacdr.
Figura 23. Partile car si cdr de la nodul radacina al listei.
60
8/2/2019 47398143 Lectii LISP Romana
61/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Reprezentarea unei liste cu trei elemente atomice prin car i cdr, creia ieste atribuit simbolul x, ar arta dup cum urmeaz. Dac o list formatdin unul sau mai multe elemente se afl la oricare din nodurile arborelui,este urmat de o ramificaie. Partea stng a ramificaiei este car-ul listei lacare se refer nodul iar partea dreapt este cdr-ul listei la care se refernodul.
Figura 24. Reprezentarea completa a unei liste cu trei atomi ca elemente cu carsi cdr.
S combinm graficul care reprezint arborele binar pentru valorile
simbolului pt, care este legat de lista (1.0 2.0 3.0) cu ramificaiile car i cdrale arborelui.
Figura 25. Grafic combinat pentru simbolul pt, legat de lista (1.0 2.0 3.0).
50099176.doc R.2.1 9/21/2011 61
8/2/2019 47398143 Lectii LISP Romana
62/259
AUTODESK, INC.
Recapitulare Listele snt reprezentate n memorie sub forma unui arbore
binar.
Primul element al listei este car-ul listei.
Lista dup ce primul element este ndeprtat reprezint cdr-ul listei.
Funciile car i cdr formeaz ramificaiile cari cdrale listei.
O ramificaie cdr a unui arbore binar se termin n nil saulista goal.
62
8/2/2019 47398143 Lectii LISP Romana
63/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
EXERCITIUL 7: GRAFULVALORILORINTR-UNARBOREBINAR
n acest exerciiu vei:
Consolida cunotinele despre reprezentarea listelor n
memorie. Completa un grafic a valorilor unei liste, reprezentat sub
forma unui arbore binar.
Instruciuni1. Terminai graful complet al unui arbore binar pentru variabila
alst.
2. alst este legat de lista (8.0 3.0 0.0).
3. Artai valoarea fiecarui nod din grafic.
(8.0 3.0 0.0)
8.0 ?
? ?
? ?
Figura 26. Completarea grafului binar
50099176.doc R.2.1 9/21/2011 63
8/2/2019 47398143 Lectii LISP Romana
64/259
AUTODESK, INC.
EXERCITIUL 8: GRAFULEXPRESIILORINTR-UNARBOREBINAR
n acest exerciiu vei:
Consolida cunotinele despre separarea listelor i
restabilirea elementelor lor individuale. Completa un grafic al expresiilor care restabilesc elementele
unei liste, grafic reprezentat sub forma unui arbore binar.
Instruciuni1. Terminai graficul complet al unui arbore binar pentru variabila
xlst.
2. xlst este legat de lista (1.0 (2.0 3.0) 4.0).
3. Artai valoarea fiecrui nod din grafic
4. Artai expresia care restabilete fiecare valoare din grafic.5. Marcai ramificaiile cari cdrale unui arbore.
6. Observai c elementele acestei liste snt formate din doi atomi i olist.
(1.0 (2.0 3.0) 4.0)
1.0 ((2.0 3.0) 4.0)
(2.0 3.0) ?
? ?
(car xlst) (cdr xlst)
(car (cdr xlst))
(car (car (cdr xlst)))
(cdr (cdr xlst))
xlst
? ?
? ? ?
? ?
? ?
Figura 27. Completarea graficul binar
64
8/2/2019 47398143 Lectii LISP Romana
65/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Funciile car si cdr
Funciile car i cdr snt funcii non-destructive. Nici una dintre ele nu
afecteaz legarea argumentului ei ceea ce este un mod curios de a spunedespre (car x) c poate returna o valoare diferit de x dar nu va schimbavaloarea lui x.
car
Funcia car returneaz primul element al listei. Singurul argument alfunciei car trebuie s fie o list, iar lista trebuie s aib unul sau mai multeelemente.
Exemplu
Introducei expresia care urmeaz. Legai variabila pt la o list cu treinumere reale. Folosii funcia car pentru a returna coordonata x n list(primul element) i legai variabila x de acea valoare.
Command: (setq pt (list 1.0 2.0 0.0))(1.0 2.0 0.0)Command: !pt(1.0 2.0 0.0)
Command: (car pt)1.0
Command: (setq x (car pt))1.0Command: !x1.0
Command: !pt(1.0 2.0 0.0)
cdr
Funcia cdrreturneaz o list i elementele ei cu excepia primului element;
cu alte cuvinte ndeprteaz primul element al listei n afara valorii luireturnate.
50099176.doc R.2.1 9/21/2011 65
8/2/2019 47398143 Lectii LISP Romana
66/259
AUTODESK, INC.
Exemplu
Introducei expresiile care urmeaz.
Legai variabila pt de o list cu trei numere reale.
Command: (setq pt (list 1.0 2.0 0.0))(1.0 2.0 0.0)
Command: !pt(1.0 2.0 0.0)
Folosii funcia cdr pentru a returna o list fr primul element i legaivariabila yzlst de acea valoare.
Command: (cdr pt)(2.0 0.0)
Command: (setq yzlst (cdr pt))(2.0 0.0)
Command: !lyzlst(2.0 0.0)
Command: !pt(1.0 2.0 0.0)
Construirea unui dreptunghi cunoscnd colurile opuse
n figurile care urmeaz cunoatem dou puncte din colurile unuidreptunghi. Celelalte dou puncte se calculeaz prin combinarea
cordonatelor X i Y ale punctelor cunoscute n diverse moduri pentru aforma noi perechi de coordonate.
Figura 28. Valorile X si Y pentru colturile unui dreptunghi.
66
8/2/2019 47398143 Lectii LISP Romana
67/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Aceast pagin este lsat liber n mod intenionat
50099176.doc R.2.1 9/21/2011 67
8/2/2019 47398143 Lectii LISP Romana
68/259
AUTODESK, INC.
Figura care urmeaz reprezint coordonatele punctelor n funcie de variabilele X i Y.
X1,Y1
X1,Y2
X2,Y1
X2,Y2
0,0
Figura 29. Valorile X,Y pentru colturile dreptunghiului
Considerai c dou variabile snt legate de cele dou liste formate dinnumere 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 valorilor X, Y i Z dinfiecare punct.
coordinate pt1 pt2
X (car pt1) (car pt2)
Y (car (cdr pt1)) (car (cdr pt2))
Z (car (cdr (cdr pt1))) (car (cdr (cdr pt2)))
Tabelul 16. Expresiile folosite pentru returnarea coordonatelor X, Y si Z.
68
8/2/2019 47398143 Lectii LISP Romana
69/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Figura urmtoare exprim punctele de coordonate sub forma de expresiiAutopLISP, bazate pe cunoaterea a dou puncte pt1 i pt2. Pentru asimplifica lucrurile, acestea snt tratate ca puncte 2-dimensionale.
pt1
(list (car pt1) (car (cdr pt2)))
(list (car pt2) (car (cdr pt1)))
pt2
0,0
Figura 30. Calcularea colturilor unui dreptunghi
50099176.doc R.2.1 9/21/2011 69
8/2/2019 47398143 Lectii LISP Romana
70/259
AUTODESK, INC.
Exemplu
Introducei expresiile care urmeaz.
Folosii funcia list pentru a le combina n alte dou puncte ale
dreptunghiului.Command: (setq pt1 (list 1.0 5.0))(1.0 5.0)
Command: !pt1(1.0 5.0)
Command: (setq pt3 (list 10.0 1.0))(10.0 1.0)
Command: !pt3(10.0 1.0)
Folosii funciile car i cdr pentru a extrage valorile X i Y ale punctelorcunoscute.
Command: (car pt1)1.0
Command: (car (cdr pt3))1.0
Command: (list (car pt1) (car (cdr pt3)))(1.0 1.0)
Command: (setq pt2 (list (car pt1) (car (cdr pt3))))(1.0 1.0)
Command: !pt2(1.0 1.0)
Command: (car pt3)10.0
Command: (car (cdr pt1))5.0
Command: (list (car pt3) (car (cdr pt1)))(10.0 5.0)
70
8/2/2019 47398143 Lectii LISP Romana
71/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Command: (setq pt4 (list (car pt3) (car (cdr pt1))))(10.0 5.0)
Command: !pt4(10.0 5.0)
Desenai dreptunghiul folosind linia de comand AutoCAD.
Punctele snt 2-dimensionale. Linia de comand AutoCAD va completaautomat valoarea Z a punctului bazat pe valoarea curent a inlimii(elevation).
Command: lineFrom point: !pt1To point: !pt2To point: !pt3To point: !pt4To point: close
1,5
1,1
10,5
10,1
0,0
pt1
pt2 pt3
pt4
Figura 31. Localizarea colturilor unui dreptunghi
Recapitulare Funcia car returneaz primul element al unei listei.
Funcia cdr returneaz o list cu excepia primului element.
Exist funcii standard la care se face apel pentru stabilireacomponentelor X, Y i Z ale unui punct reprezentat printr-olist.
50099176.doc R.2.1 9/21/2011 71
8/2/2019 47398143 Lectii LISP Romana
72/259
AUTODESK, INC.
EXERCITIUL 9: LUCRULCULISTEDEPUNCTE
n acest exerciiu vei:
Consolida cunotinele despre funcii care separ liste i
funcii care creaz liste. Crea puncte formate din liste i le vei lega de variabile.
Crea puncte formate din liste bazate pe valorile X i Y dinalte puncte formate din liste.
Matematica problemei
Dou puncte 2-dimensionale i punctul care se afl la mijlocul distaneidintre ele pot fi exprimate logic n funcie de X i Y dup cum urmeaz.
pt1 = pt1x, pt1ypt2 = pt2x, pt2ymidpt = mptx, mpty
Valorile X i Y ale lui mpt pot fi exprimate aritmetic dup cum urmeaz.
mptx = (pt1x + pt2x)/2mpty = (pt1y + pt2y)/2
Instruciuni
Scriei un set de expresii AutoLISP care execut urmatoarele comenzi nordine
1. Legai o variabilpt1 de lista format din dou numere reale 1.5i 8.9.
2. Legai o variabil pt2 de o list format din dou numere reale7.8 i 3.2.
3. Scriei un set de expresii care leag variabila midpt de punctulcare se afl la mijlocul distanei dintre punctelept1 ipt2.
Dup ce ai verificat expresiile n editorul AutoCAD scriei-le mai jos.
72
8/2/2019 47398143 Lectii LISP Romana
73/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Comenzi AutoCAD si AutoLISP
Comenzile AutoCAD pot fi chemate direct din AutoLISP, s-expresiileAutoLISP pot fi folosite ca rspunsuri la cererile de comand.
Obiectiven acest capitol vei studia:
Cum s chemai o comand AutoCAD direct din AutoLISP.
Cum s folosii irul AutoLISP, s-expresiile constante ivariabile ca rspunsuri la cererile de comand.
Sintaxa funciei AutoLISP command.
Cum s evitai lucrul cnd traducei un program folosindcomenzile n limba englez indiferent de versiuneaAutoCAD.
Funcia command
Funcia command apeleaz funciile AutoCAD din AutoLISP. Funciacommand accept un argument de tip ir care trebuie s fie numele uneicomenzi AutoCAD i oricare alte argumente opionale care ar fi n modnormal introduse n linia de comand.
n cazurile n care este nevoie de un return ca rspuns la o comand, irul ""este folosit ca argument. Aceasta este reprezentarea AutoLISP a iruluinul pe care AutoCAD-ul o interpreteaz ca un return n cadrul funciei
apelative command.Funcia command accept iruri i variabile AutoLISP ca argumente. Deexemplu aceste trei seturi de expresii traseaz aceeai entitate Line.
Folosirea argumentelor de tip ir
Command:(command "line" "1,1" "5,5" "")nil
Folosirea argumentelor constante
Command:(command "line (quote (1.0 1.0)) (quote (5.0 5.0)) "")nil
Folosirea argumentelor variabile
Command: (setq pt1 (list 1.0 1.0) pt2 (list 5.0 5.0))(5.0 5.0)
Command: (command "line" pt1 pt2"")nil
50099176.doc R.2.1 9/21/2011 73
8/2/2019 47398143 Lectii LISP Romana
74/259
AUTODESK, INC.
Efecte secundare
Funcia command returneaz ntotdeauna nil. Efectul secundar al uneiexpresii command este mult mai interesant dect valoarea returnat. Un efectsecundar al unei expresii AutoLISP reprezint o schimbare n stareaprogramului care se produce datorit unei funcii de apelare. Efectulsecundar al apelrii unei funcii setq este pentru a crea un nou simbol delegatur sau pentru a atribui o valoare la o variabil. Efectul secundar alapelrii unei funcii command este de a realiza o comand AutoCAD caremodific fiierul grafic ntr-un anume fel.
Exemplu
ncepei un desen nou.
Introducei expresiile care urmeaz.
Legai dou variabile de dou puncte 2-dimensionale.Command: (setq pt1 (list 1.0 1.0))(1.0 1.0)
Command: (setq pt2 (list 5.0 5.0))(5.0 5.0)
Apelai la comanda LINE i folosii variabilele ca argumente.
Command: (command "line" pt1 pt2 "")nil
1,1
5,5
Figura 32. Linie de la 1.1 la 5.5
74
8/2/2019 47398143 Lectii LISP Romana
75/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Exemplu
Introducei expresiile care urmeaz.
Folosii variabilele pt1 i pt2 de la exerciiul anterior ca puncte reprezentnd
centrele a dou cercuri i ca puncte finale ale diametrului unui cerc.Command: circle3P/2P/TTR/: !pt1Diameter/: 0.5Command: (command "circle" pt2 0.5)Command: (command "circle" "2p" pt1 pt2)
Figura 33. Cercuri definite de pt1 si pt2
50099176.doc R.2.1 9/21/2011 75
8/2/2019 47398143 Lectii LISP Romana
76/259
AUTODESK, INC.
Exemplu
Folosii valorile lui pt1 ipt2 de la exerciiul anterior.
Introducei expresiile care urmeaz.
Desenai dou arce folosindpt1 ipt2 ca puncte finale i o valoare a razei de3.5.
Command: arcCenter/: !pt1Center/End/: eEnd point: !pt2Angle/Direction/Radius/: rRadius: 3.5
Command:(comandarc pt2 e pt1 r 3.5)
Figura 34. Arce definite de pt1 si pt2
76
8/2/2019 47398143 Lectii LISP Romana
77/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Globalizarea comenzilor
Toate versiunile AutoCAD-ului vor accepta comenzile i opiunile dinlimbajul american i englezesc indiferent de versiunea limbii surs. Acestlucru permite utilizatorului s scrie o aplicaie AutoLISP care poate fifolosit n toate versiunile de limbaj ale AutoCAD-ului fr a traducefunciile command n limba surs.
Fiecare versiune AutoCAD tradus ntr-o anumit limb pastreaz un menude opiuni i comenzi din limba surs. De exemplu versiunea germanAutoCAD pastreaz un menu de opiuni i comenzi n limba german astfelncit cei care o folosesc i pot introduce comenzile n german. Toateversiunile AutoCAD indiferent de limba surs pstrez un menu de opiunii comenzi n engleza american mpreun cu un menu n limba surs.
Pentru a folosi versiunea englezeasc a comenzilor i opiunilor AutoCAD,
prefaati irul cu un caracter subliniere sau cu "_". De exemplu acestaeste modul n care se apeleaz la linia de comand n toate versiunileAutoCAD.
Command:(command "_line" "1.1" "5.1" "1.5" "_c")
Recapitulare
Functia command permite apelarea comenzilor AutoCAD dinAutoLISP.
irul nul sau "" este tratat ca un return de ctre funcia command.
Expresiile AutoLISP snt acceptate ca rspunsuri la cererile decomand AutoCAD n cadrul funciei command.
Argumentele funciei command snt numele comenzii AutoCADurmate de rspunsurile la cererile de comand.
Caracterul subliniere poate fi prefaat n cadrul unei instruciunide tip command n engleza american i va funciona n toate versiunile delimbaj ale AutoCAD-ului.
50099176.doc R.2.1 9/21/2011 77
8/2/2019 47398143 Lectii LISP Romana
78/259
AUTODESK, INC.
EXERCITIUL 10: TRANSFORMAREACOMENZILORINAUTOLISP
n acest exerciiu vei:
Transforma comenzile AutoCAD script n expresii
AutoLISP. Scrie expresiile.
Testa expresiile n editorul AutoCAD.
Instruciuni1. ncepei un desen nou.
2. Transformai comenzile i cererile AutoCAD n expresii alefunciei command. Scriei rspunsurile n coloana din dreapta.
3. Testai expresiile n editorul AutoCAD.
Comenzi si cereri
Command: lineFrom point: 1,1To point: 5,5To point: ENTER
Command: circle
3P/2P/TTR/: 3,3Diameter/: 0.5
Command: circle3P/2P/TTR/: 2pFirst point on diameter: 1,1Second point on diameter: 5,5
Command: arcCenter/: 2,1Center/End/: cCenter: 1,1Angle/Length of chord/: lLength of chord: 1.414
Expresii AutoLISP
(command "line" "1,1" "5,5" "")
or
(command "line" '(1.0 1.0) '(5.0 5.0) "")
Tabelul 17. Traducerea comenzilor in AutoLISP
78
8/2/2019 47398143 Lectii LISP Romana
79/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
EXERCITIUL 11: APELULCOMENZIIPOLYLINEDINAUTOLISP
n acest exerciiu:
Vei folosi AutoLISP-ul pentru a executa o comand
AutoCAD i pentru a desena o nou entitate. Vei apela comanda AutoCAD PLINE din AutoLISP.
Vei scrie un set de expresii AutoLISP pentru a desena opolilinie rectangular.
Instruciuni1. ncepei un desen nou.
2. Creai urmatoarele legaturi de variabile n AutoCAD:
(setq pt1 (list 1.0 1.0 0.0))
(setq pt3 (list 11.0 8.0 0.0))
3. Folosii variabilelept1 ipt3.
4. Scriei un set de expresii ce vor desena un dreptunghi, folosindcomanda "Polyline" opiunea 2-D nchis de la punctul 1,1 la 11,1la 11,8 la 1,8, folosind variabilele pt1 ipt3.
5. Folosii funciile car, cdr, list i command dac este nevoie.
6. Testai expresiile n AutoCAD.
7. Scriei-le mai jos.
50099176.doc R.2.1 9/21/2011 79
8/2/2019 47398143 Lectii LISP Romana
80/259
AUTODESK, INC.
Aceast pagin a fost lsat liber n mod intenionat.
80
8/2/2019 47398143 Lectii LISP Romana
81/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Selecia interactiv a punctelor
AutoLISP-ul dispune de funcii care opresc evaluarea unei expresii i permit utilizatorului s stocheze puncte i distane folosind metodelestandard AutoCAD de specificare a acestor valori. Punctul sau distana
devine valoarea returnat a expresiei.
Obiective
n acest capitol vei studia:
Cum s cerei informaii utilizatorului n cadrul unuiprogram AutoLISP.
Cum s cerei coordonatele unui punct utilizatorului.
Cum s cerei o distan utilizatorului.
Cum s cerei utilizatorului valoarea pe care o dorii.
Cum s folosii puncte i distane de la utilizator n cadrulfunciilor AutoLISP command i comenzilor AutoCAD.
Puncte si distane
Funcia getpoint permite utilizatorului s selecteze un punct folosind oricemetode standard AutoCAD de selectare a punctelor: selectare grafic,coordonate absolute, relative sau relative polare, agarea obiectelor, filtrede coordonate sau accesarea ultimului punct.
Funcia getdist permite utilizatorului s specifice o distant prin introducerea
valorii sau seleciond dou puncte. Este acelai mecanism folosit de fiecarecomand AutoCAD care cere utilizatorului o distan.
getpoint
Funcia getpoint folosete serviciile AutoCAD pentru a permite utilizatoruluis introduc un punct. Punctul selectat de utilizator reprezint valoareareturnat a expresiei. AutoLISP-ul returneaz punctul sub forma unei listeformat din trei numere reale: valorile coordonatelor X, Y i Z.
Command:(getpoint)1,1,0(1.01.00.0)
Funcia getpoint este folosit pentru a obine un punct de la utilizator ncadrul unei expresii AutoLISP. De exemplu ar putea fi nevoie s cereiutilizatorului din cadrul unui program AutoLISP, puncte care vor fi folositeapoi ca puncte finale ale unei linii.
50099176.doc R.2.1 9/21/2011 81
8/2/2019 47398143 Lectii LISP Romana
82/259
AUTODESK, INC.
Command:(setq pt1 (getpoint))1,1(1.0 1.0 0.0)
Command:(setq pt2 (getpoint))5,5
(5.0 5.0 0.0)Command:(command line pt1 pt2 )
Deoarece toate serviciile AutoCAD de specificare a punctelor sntdisponibile n timpul apelrii funciei getpoint, nu sntei constrns sintroducei coordonatele exacte ale punctului.
Command:(setq pt1 (getpoint))
Command:(setq pt2 (getpoint))
Command:(command line pt1 pt2 )
Exemplu
Introducei expresiile care urmeaz. Legai variabilele pt1 i pt2 de punctepe care le selectai cu mouse-ul n cadrul unei funcii de apelare getpoint ifolosii variabilele ntr-o comanda LINE.
Command: ( setq pt1 (getpoint))pick a point
Command: (setq pt2 (getpoint))pick a point
Command:(command line pt1 pt2)
Exemplu
Introducei expresiile care urmeaz. Legai variabilapt1 de un punct pe carel selectai cu mouse-ul i variabila pt2 de un punct descris de coordonatelepolare relative. Folosii variabilele n linia de comand.
Command:(setq pt1 (getpoint ))pick a point
Command:(setq pt2 (getpoint))@2
8/2/2019 47398143 Lectii LISP Romana
83/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Command: (command line pt1 pt2 )
Exemplu
Introducei expresiile care urmeaz. Legai variabilapt1 de un punct pe care
l selectai cu mouse-ul n cadrul unei funcii de apelare getpoint i folosiivariabila ntr-o comand CIRCLE.
Command:(setq pt1 (getpoint))pick a point
Command:(command circle pt1 0.5)
getdist
Funcia getdist cere utilizatorului dou puncte. Valoarea returnat este unnumr real: distana 3-D ntre dou puncte.
Command:(setq dst1 (getdist))Second point: 2,21.41421Command: !dst11. 41421
Funcia getdist primete un argument opional, punctul de baz de la carese msoar distana. n acest caz funcia cere utilizatorului un singur punct.
Command: (setq pt1 (list 1.0 1.0 0.0))(1.0 1.0 0.0)Command: (setq dst1 (getdist pt1))2,21.41421Command: !dst11.41421
50099176.doc R.2.1 9/21/2011 83
8/2/2019 47398143 Lectii LISP Romana
84/259
AUTODESK, INC.
Figura 35. Functia getdist drag din punctul initial 1,1,0
ExempluIntroducei expresiile care urmeaz. Legai variabila pt1 de un punctfolosind coordonatele absolute i variabila rad de distana dintre dou
puncte pe care o selectai cu mouse-ul. Folosii variabila n comandaCIRCLE.
Command: (setq pt1 (getpoint))5,5(5.0 5.0 0.0)Command: (setq rad (getdist))pick two points
Command: (command circle pt1 rad)
Exemplu
Introducei expresiile care urmeaz. Legai variabila cen de un punct pe carel selectai cu mouse-ul. Legai variabila rad de distana dintre cen i un
punct pe care l selectai cu mouse-ul. Folosii variabilele n comandaCIRCLE.
Command: (setq cen (getpoint))pick a point
Command: (setq rad (getdist cen))pick a point
Command: (command circle cen rad)
84
8/2/2019 47398143 Lectii LISP Romana
85/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Dialog cu utilizatorul
Funciile getpoint i getdist primesc i argumente opionale: un ir de textcare este afiat n zona liniei de comand ca o cerere pentru utilizator.
Command: (getpoint Point:)Point: 1,1(1.0 1.0 0.0)
Dac getdist cere dou puncte, se cere automat al doilea punct "Secondpoint:".
Command: (getdist From point:)From poin: 1,1(1.0 1.0 0.0)Second point: 2,21.41421
Deoarece getdist primete dou cereri opionale, ordinea i tipul de date nacest caz snt importante. Dac primul argument al funciei getdist este unir, acesta reprezint o cerere. Dac primul argument este un punct, atuncise poate proceda la cererea celui de-al doilea argument.
Command: (getdist (quote (1.0 1.0 0.0)) To point:)To point: 2,21.41421
Recapitulare
Funcia getpoint returneaz un punct de la utilizator.
Funcia getdist returneaz o distan dat sub forma unui
numr real de la utilizator. Ambele funcii primesc argumente opionale pentru
utilizator.
Utilizatorul poate aplica oricare dintre metodele AutoCADde specificare a punctelor i distanelor la o cerere AutoLISP
pentru un punct sau o distan.
50099176.doc R.2.1 9/21/2011 85
8/2/2019 47398143 Lectii LISP Romana
86/259
AUTODESK, INC.
EXERCITIUL 12: CEREREASIFOLOSIREAPUNCTELORDELAUTILIZATOR
n acest exerciiu vei:
Scrie expresiile care cer utilizatorului puncte i distane.
Scrie comenzile de desenare n AutoCAD.
Partea I
Instruciuni
Scriei un set de expresii. Testai-le n editorul AutoCAD apoi scriei-le maijos.
1. Cerei utilizatorului patru puncte.
2. Atribuii-le variabilelorpt1 prinpt4.
3. Trasai o polilinie 2-D nchis ntre cele patru puncte.
Partea a II-a
Instruciuni
Scriei un set de expresii. Testai-le n editorul AutoCAD apoi scriei-le maijos.
1. Cerei utilizatorului un punct centru i atribuii valoarea uneivariabile numite cen.
2. Cerei utilizatorului distana de la variabila cen i atribuii valoareaunei variabile numite rad.
3. Desenai un cerc cu centrul cen i raza rad.
86
8/2/2019 47398143 Lectii LISP Romana
87/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Partea a III-a
Instruciuni
Scriei un set de expresii. Testai-le n editorul AutoCAD apoi scriei-le maijos.
1. Cerei utilizatorului dou puncte.
2. Atribuii-le variabilelorpt1 ipt2.
3. Desenai o polilinie 2-D nchis.
4. Folosiipt1 ipt2 pentru colurile opuse ale poliliniei.
5. Calculai celelalte dou puncte din pt1 i pt2 folosind funciile car,cdri list.
50099176.doc R.2.1 9/21/2011 87
8/2/2019 47398143 Lectii LISP Romana
88/259
AUTODESK, INC.
Aceast pagin a fost lsat liber n mod intenionat.
88
8/2/2019 47398143 Lectii LISP Romana
89/259
AUTODESK, INC. TRAINING LECTII DE BAZA AUTOLISP
Funcii
Pe lng funciile interne, AutoLISP-ul permite crearea funciilor definitede utilizator, adic funcii ale caror seturi de instruciuni i nume au fostdefinite.
Obiective
n acest capitol vei studia:
Definiia funciei AutoLISP.
Cum s creai propriile funcii AutoLISP.
Sintaxa funciei defun.
Cum s trimitei argumente unei funcii.
Cum returneaz funcia o valoare.
Funciile si evaluarea listelor
Considerai procesul de evaluare al unei expresii tipice care folosete ofuncie intern AutoLISP.
(setq x 10)
AutoLISP-ul evalueaz primul element unde se ateapt s gasesc ofuncie. Aici gsete subprogramul setq i reface legtura. Legarea lui setqreprezint un set de instruciuni care arat cum trebuie facut procesarea.AutoLISP-ul evalueaz argumentele lui setq n ordine i termin prinaplicarea instruciunilor de procesare la valoarea argumentelor.
Rezultatul n acest caz este o valoare returnat, 10, pentru expresie i unefect secundar al variabilei x care este legat de 10.
setq este un subprogram i instruciunile lui au fost predefinite n AutoLISP.Utilizatorul nu le poate schimba. Totui este posibil crearea unor noifuncii care s execute orice instruciuni de procesare dorite de utilizator.
Legturi noi se creaz prin folosirea subprogramului defun care este funciade definire.
50099176.doc R.2.1 9/21/2011 89
8/2/2019 47398143 Lectii LISP Romana
90/259
AUTODESK, INC.
Sintaxa funciei defun
Sintaxa funciei defun este puin diferit de cea a celorlalte funcii folositepn acum.
(defun ( / ) ...)
defun cere obligatoriu dou argumente i un numr variabil de argumentecare urmeaz dup primele dou.
Argumentele funciei defun
Primul argument al funciei este numele noii funcii de definit. Folosii unnume nou pe care l-ai creat, de preferin unul care descrie aciunile
funciei.
ATEN}IE Nu folosii niciodat numele unei funcii sau a unui simbolconstruite intern deoarece acesta se va suprapune peste definiia original il va face inaccesibil pn lansai AutoLISP-ul n cadrul unei noi sesiuniAutoCAD.
n acest exemplu, primul argument al funciei defun este numele simbolmyfun care devine numele funciei definite de utilizator.
(defun myfun ( / ) ...)
Al doilea argument cerut de defun este o list de argumente cerute ivariabile locale. Cel
Top Related