Lectii LISP Romana

download Lectii LISP Romana

of 256

Transcript of Lectii LISP Romana

AutoLISP

IntroducereAutoLISP-ul este un limbaj de programare pentru AutoCAD. Acest curs ofer cursantului posibilitatea de a-i nsui cunotine practice de lucru n AutoLISP prin cursuri i texte care explic structura i sintaxa limbajului i relaia 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 curs AutoLISP pe o perioada de 3 zile, oferit de Autodesk, Inc. Training Department. La exerciiile de proiectare se adaug lecii suplimentare i discuii la obiect. Acest curs poate fi folosit individual atunci cnd este n combinaie cu o dischet ce conine fiierele necesare pentru rezolvarea exerciiilor. Acest curs este bazat pe o versiune AutoLISP ce poate fi gsit pe toate platformele pe care este implementat AutoCAD R12.

ObiectiveLa sfritul acestui curs, cursantul va fi capabil s neleag sintaxa AutoLISP, 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 aAutoCAD-ului.

Citirea i scrierea n fiiere cu texte ASCII cu ajutorullimbajului AutoLISP.

Combinarea programelor de tip AutoLISP cu fiiereleAutoCAD de tip script.

97106266.doc R.2.1 5/16/2012 ATC. Iasi

1

AUTODESK, INC.

CuprinsAcest material cuprinde subiectele prezentate mai jos. Explicarea acestor subiecte reprezint coninutul principal al capitolelor de mai jos. Introducere.........................................................................................................1 Generaliti........................................................................................................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...............................................................47 Prelucrare 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........................................................217 Accesul la entiti simple i la blocuri..........................................................221 2

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

97106266.doc R.2.1 5/16/2012

3

AUTODESK, INC.

Generaliti despre AutoLISPCe 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, list programming. Este un limbaj de programare superior foarte cunoscut pentru aplicaiile lui n domeniul sistemelor specializate, inteligen artificial, programare pe baz de reguli i AutoCAD. Lisp este unul dintre limbajele de programare cele mai vechi. Ca i FORTRAN, primele implementri ale limbajului Lisp dateaz din anii 60. Multe sublimbaje ale limbajului Lisp exist n prezent, incluznd Common Lisp, Franz Lisp, Mu Lisp i X Lisp. Limbajul Lisp are multe caracteristici care se adreseaz att profesionitilor ct i amatorilor. AutoLISP are o sintax simpl, precis. Procesul de evaluare i sintaxa folosit pentru crearea expresiilor Lisp sunt uor de nvat. Este un interpretor aa nct rezultatele obinute din calcule pot fi vizualizate interactiv ntr-o sesiune AutoCAD. AutoLISP interacioneaz direct cu AutoCAD fr s necesite 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 start standard i pot fi definite n aa fel nct o funcie apeleaza la recursiune . AutoLISP-ul ncurajeaz programatorul s scrie funcii simple,structurate i s combine aceste funcii cu scopul de a crea programe complexe dar uor de neles.

Pentru cei ce snt interesai s lucreze cu programe AutoLISP le recomandm urmtoarele cri: Common LISP: A Gentle Introduction to Symbolic Computing de David S. Touretzky; LISP de Winston & Horn Looking at LISP de Tony Hasemer Common 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 adapta AutoCAD-ul la orice fel de aplicaii, fcnd astfel AutoCAD-ul mai sensibil la modul de lucru. Multe dintre cele mai complicate aplicaii proiectate pentru AutoCAD folosesc pe scar larg limbajul de programare AutoLISP.

4

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

AutoLISP poate crea subrutine i macrouri puternice. Subrutinele AutoLISP pot fi alctuite din comenzi AutoCAD i funcii AutoLISP i pot automatiza 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 fiierelor script i menu-urilor AutoLISP.

Cum ncrcm AutoLISP-ul ?AutoLISP-ul este o component standard a AutoCAD-ului, portabil pe toate mainile de calcul. Interpretorul AutoLISP se ncarc automat la fiecare sesiune AutoCAD. AutoLISP opereaz n cadrul editorului grafic AutoCAD. Interpretorul st n "umbr" n timpul unei sesiuni de interpretare grafic ateptnd s evalueze 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 de desenare 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 program AutoLISP 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 text ASCII aa cum este aplicaia Text Editor din Sun Mycrosystems SPARCTM 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 ACAD). Orice editor profesional de programare este o unealt bun cu care se pot scrie fiiere program AutoLISP.97106266.doc R.2.1 5/16/2012

5

AUTODESK, INC.

Hardware pentru AutoLISP i necesarul de memorieComputerul dumneavoastr trebuie s aib hardware-ul i memoria cerut de AutoCAD pentru a putea folosi AutoLISP-ul. Manualele AutoCAD Interface i Installation And Performance Guide prezint cerinele specifice fiecrei platforme.

Lansarea n execuieLansai editorul grafic AutoCAD nainte de a lansa orice alt comanda. Va trebui s introducei s-expresiile AutoLISP din linia de comand. V sugerm s lansai sesiunea de editare grafic ori de cte ori utilizai acest manual.

6

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

Expresii simboliceExpresiile 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 comenzilor AutoCAD Cum s aflai valoarea unei expresii simbolice

Instruciuni n AutoLISPn principal LISP-ul proceseaz listele: el proceseaz i evalueaz listele de obiecte. AutoLISP-ul proceseaz liste cunoscute ca expresii simbolice, n cadrul AutoCAD-ului. Listele snt principalul mijloc de construire a expresiilor simbolice n AutoLISP. 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 sub forma unei liste, el va evalua acea expresie i ne va da rezultatul. Acest rezultat se numete valoarea expresiei. O expresie simbolic sau o s-expresie reprezint pur i simplu o instruciune n LISP. S-expresiile n AutoLISP snt construite prin ncadrarea unei secvene valide de caractere ntre paranteze. Caracterul parantez stnga sau ( se numete parantez deschis i caracterul parantez dreapta sau ) se numete parantez nchis. n mod obinuit aceste caractere snt denumite deschis i nchis. Parantezele dintr-o s-expresie trebuie s fie echilibrate. Oricrei paranteze deschise trebuie sa-i corespund una nchis. Obs. Cea mai frecvent greeal n AutoLISP este nenchiderea parantezelor. Editoarele de text profesionale au aceast caracteristic de a gsi parantezele corespondente cu un minim de efort.

97106266.doc R.2.1 5/16/2012

7

AUTODESK, INC.

Cum recunoate AutoCAD-ul o s-expresieAutoCAD-ul recunoate o s-expresie AutoLISP printr-o parantez deschis. Dac gsete o astfel de parantez, AutoCAD-ul transfer intrarea utilizatorului ctre interpretorul AutoLISP i ateapt rezultatul. AutoCAD afieaz rezultatul s-expresiei.

Command: (+ 1 2)

AutoCAD

(+ 1 2) 3

AutoLISP

3 Command:Figura 1. Diagrama de comunicatie dintre AutoCAD si AutoLISP

ExempluPe linia de comand a AutoCAD-ului nscriei s-expresiile n coloana din stnga a tabelului care urmeaz. Comparai rezultatele date de AutoCAD cu rezultatele care se afl n coloana din dreapta a tabelului.Command:(+12) 3 Command:

S-expresii (+ 1 2) (- 2 1) (/ 4 2) (* 4 2)

Rezultate 3 1 2 8

Tabelul 1. Rezultatele expresiilor simbolice

S-expresiile i comenzile AutoCADS-expresiile pot fi introduse ca intrare la comenzi AutoCAD. AutoCAD-ul va recunoate parantezele deschise, va transfera intrarea interpretorului AutoLISP i va atepta rezultatul. 8

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 la comanda curent.

Figura 2. Cum AutoCAD-ul si AutoLISP-ul comunica intr-o comanda AutoCAD

97106266.doc R.2.1 5/16/2012

9

AUTODESK, INC.

Exemplun comanda "polar array" care urmeaz, mprind 360 de grade la 15 se determin numrul de obiecte de creat, de exemplu se creaz un obiect la fiecare 15 grade de rotaie. Introducei comenzile.Command: line From point: 5,5 To point: 5,8 To point: Enter Command: array Select objects: last 1 found Select objects: Enter Rectangular or Polar array (R/P): p Center point of array: 5,5 Number of items: (/ 360 15) Angle to fill (+=ccw, -=cw) :Enter Rotate objects as they are copied? Enter

Figura 3. Expresia (/360 15) genereaza un array de 24 linii

Caracterul semnul exclamriiAutoCAD-ul analizeaz intrarea utilizatorului n linia de comand cautnd un alt caracter AutoLISP asociat: semnul exclamarii sau !. Acest caracter este denumit n mod frecvent bang. Dac semnul exclamarii este primul caracter, AutoCAD-ul transfer intrarea ctre interpretorul AutoLISP i ateapt rezultatul. Orice s-expresie valid poate urma dup semnul exclamrii.Command: !(+ 12)

10

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

Caracterul "bang" este deseori folosit pentru a cere AutoLISP-ului valoarea unui simbol. n acest caz, simbolul nu trebuie s se afle ntre paranteze.Command: !pi

Exemplueste un simbol predefinit n AutoLISP. Extragei valoarea simbolului pi pe linia de comand AutoCAD.pi Command: !pi 3.14159 Command:

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 un simbol. S-expresiile i caracterul bang pot fi folosite n linia de comand sau n cadrul comenzilor AutoCAD. Caracterul bang poate precede S-expresiile sau simbolurile.

97106266.doc R.2.1 5/16/2012

11

AUTODESK, INC.

Aceast pagin a fost lsat liber n mod intenionat.

12

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

Atomi i listeExist dou mari categorii de tipuri de date n AutoLISP: atomi i liste. Atomii snt obiecte simple. Listele snt obiecte complexe. Acest capitol definete atomii i listele.

Obiectiven 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

AtomiUn atom este cel mai simplu tip de date din Lisp. Un atom poate fi un numr 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.

97106266.doc R.2.1 5/16/2012

13

AUTODESK, INC.

Tipuri de atomi simbol sir intreg numar real descriptor de fisier nume entitate AutoCAD set de selectie AutoCAD subr (functie interna) subr externa (Functia ADS)

Exemple pi,x,mid_pt "Hello, world." 1,32767,-32768 1.0,45.678,-876543.21

Tip de data AutoLISP SYM STR INT REAL FILE ENAME PICKSET SUBR 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, atunci este o list.

ListeListele snt s- expresii complexe formate din atomi i/sau alte liste. Listele necesit sintaxe simple dar riguroase. O list trebuie s se afle ntre paranteze. Pentru orice list care poate fi evaluat, primul termen din cadrul listei respective trebuie s fie o funcie. Obiectele din cadrul listei trebuie separate prin cel puin un spaiu.

Iat cteva exemple de liste. Observai c fiecare obiect este separat printrun 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 listeAtomii i listele pot fi combinate sub form de liste. n urmtoarele patru exemple am introdus trei atomi ntr-o list. Fiecare atom este un element al listei.

ExempluAceast list are trei elemente: numerele reale 1.0, 1.0 i 0.0

14

AUTODESK, INC. TRAINING(1.0 1.0 0.0)

LECTII DE BAZA AUTOLISP

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

ExempluAceast list are trei elemente: funcia de adunare +, lista (+ 1(+ 2 3)) i lista (+ 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 sau de mai multe obiecte care pot fi atomi sau liste dup care urmeaz o parantez de nchidere.

97106266.doc R.2.1 5/16/2012

15

AUTODESK, INC.

Condiii de eroareCnd introducei s-expresii n linia de comand AutoCAD, interpretorul AutoLISP v va spune dac ai introdus o expresie neechilibrat. O expresie neechilibrat are mai multe paranteze deschise dect nchise. Iat o expresie neechilibrat. i lipsete o parantez nchis.Command: (+ 1 (+ 2 3) 1>

AutoLISP-ul semnalizeaz o expresie neechilibrat printr-un mesaj special.n>

unde n este numrul de paranteze nchise care lipsesc. Snt dou modaliti de rezolvare n cazul condiiilor de eroare: completai numrul corect de paranteze nchise sau apsai Ctrl-C pentru a anula expresia i a ne rentoarce n linia de comand. Not Este de asemenea posibil s vedei acest mesaj cnd un ir este neechilibrat. Un ir neechilibrat are ghilimele duble la un capt i simple la cellalt.

Particularitile obiectului nilToate obiectele din AutoLISP snt atomi sau liste. Atomii i listele se exclud mutual. Un atom nu este niciodat list i o list nu este niciodat atom. Excepia o face obiectul nil. Obiectul nil este "lista goal". Prin convenie nil este i atom i list. nil poate fi exprimat n dou moduri: 0 sau nil;. este echivalentul AutoLISP pentru fals. Multe funcii n AutoLISP testeaz dac o condiie este adevarat sau fals, de exemplu dac valoarea unui 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 aceea orice alt valoare returnat de un test de condiie trebuie s corespund lui "adevrat".nil

16

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 unei liste Elementele unei liste pot fi atomi sau liste Elementele unei liste snt separate ntre ele de cel puin un spaiu AutoLISP detecteaz expresiile neechilibrate nil este i atom i listnil nil

este lista goal este returnat de testele de condiie pentru a indica "fals"

97106266.doc R.2.1 5/16/2012

17

AUTODESK, INC.

EXERCITIUL

1: ATOMI SI LISTE 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. 2. Determinai dac obiectul este atom sau list. Completai rezultatul evalurii n csua corespunzatoare.

Tabelul 3. Determinarea naturii obiectului Obiecte 73.5 "0,0" (1.0 2.0 3.0) "String" ("String") () Atomi Liste

18

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

Partea a II-a1. 2. 3. Gsii valoarea acestui atom n linia de comand AutoCAD Tiprii "!" urmat de un atom Scriei rspunsul n coloana din dreapta:Command: !4.5 Atomi 4.5 "text" 17 setq xyz nil Tabelul 4. Determinarea valorii atomului Valori

Exemplu

Partea a III-a1. 2. Determinai numrul de elemente coninut de fiecare list. Scriei rspunsul n coloana din dreapta.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

Lista

97106266.doc R.2.1 5/16/2012

19

AUTODESK, INC.

Aceast pagin este lsat liber n mod intenionat.

20

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

EvaluareaEvaluarea este procesul prin care AutoLISP-ul determin valoarea unui obiect. 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.

Obiectiven 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 valoriiCnd transmitei un obiect spre evaluare AutoLISP-ului, acesta i determin valoarea 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: !pi 3.14159