Date post: | 14-Sep-2015 |
Category: |
Documents |
Upload: | ghitavali2000 |
View: | 229 times |
Download: | 8 times |
FUNDAMENTALS OF AUTOLISP
Autodesk, Inc.
Autodesk, Inc. Training
LECTII DE BAZA AUTOLISP
AutoLISP
Introducere
AutoLISP-ul este un limbaj de programare pentru AutoCAD. Acest curs ofer\ cursantului posibilitatea de a-[i `nsu[i cuno[tin]e practice de lucru `n AutoLISP prin cursuri [i texte care explic\ structura [i sintaxa limbajului [i rela]ia acestuia cu AutoCAD-ul. Prin exerci]ii aplicative la teoria de programare [i exemple concrete cursantul `[i completeaz\ aceste cuno[tin]e.
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 exerci]iile de proiectare se adaug\ lec]ii suplimentare [i discu]ii la obiect. Acest curs poate fi folosit individual atunci c`nd este `n combina]ie cu o dischet\ ce con]ine fi[ierele necesare pentru rezolvarea exerci]iilor.
Acest curs este bazat pe o versiune AutoLISP ce poate fi g\sit\ pe toate platformele pe care este implementat AutoCAD R12.
Obiective
La sf`r[itul acestui curs, cursantul va fi capabil s\ `n]eleag\ sintaxa AutoLISP, o varietate de func]ii standard [i procesul de evaluare Lisp. Cursantul va putea folosi AutoLISP-ul pentru:
Utilizarea comenzilor AutoCAD prin intermediul func]iilor de baz\ AutoLISP.
Crearea de noi func]ii AutoLISP.
Crearea de noi func]ii AutoCAD pe baza limbajului AutoLISP.
Corectarea [i modificarea entit\]ilor din baza de date a AutoCAD-ului.
Citirea [i scrierea `n fi[iere cu texte ASCII cu ajutorul limbajului AutoLISP.
Combinarea programelor de tip AutoLISP cu fi[ierele AutoCAD de tip script.Cuprins
Acest material cuprinde subiectele prezentate mai jos. Explicarea acestor subiecte reprezint\ con]inutul principal al capitolelor de mai jos.
Introducere1
Generalit\]i3
Expresii simbolice7
Atomi [i liste13
Evalu\ri 21
Expresii simbol AutoLISP far\ comenzi AutoCAD35
Tipuri de date numerice41
Puncte AutoCAD [i liste AutoLISP47
Prelucrare de liste57
Comenzi AutoCAD [i liste AutoLISP71
Selec]ie interactiv\ de puncte79
Func]ii87
Func]ii care ac]ioneaz\ ca [i comenzi AutoCAD97
Fi[iere de programare AutoLISP101
Func]ia C105
Teste logice [i condi]ionale113
Bucle de program123
Opera]ii cu [iruri131
Acces la entit\]i139
Liste asociate entit\]ilor147
Modificarea unei entit\]i155
Selectarea grafic\ a unei entit\]i165
Tratarea erorilor171
Opera]ii cu fi[iere175
Seturi de selec]ie193
Tabele [i nume de obiecte203
Fi[iere script [i AutoLISP211
Accesul la entit\]i simple [i la polilinii217
Accesul la entit\]i simple [i la blocuri221
Crearea entit\]ilor cu func]ia entmake225
Crearea poliliniilor [i a definitiilor de bloc cu func]ia entmake 227
Tratarea [irurilor231
Tratarea entit\]ilor243
Generalit\]i despre AutoLISP
Ce este AutoLISP-ul ?
AutoLISP-ul este un dialect al limbajului de programare Lisp utilizat pentru completarea posibilit\]ilor 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 aplica]iile 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 implement\ri ale limbajului Lisp dateaz\ din anii 60. Multe sublimbaje ale limbajului Lisp exist\ `n prezent, incluz`nd Common Lisp, Franz Lisp, Mu Lisp [i X Lisp.
Limbajul Lisp are multe caracteristici care se adreseaz\ at`t profesioni[tilor c`t [i amatorilor.
AutoLISP are o sintax\ simpl\, precis\. Procesul de evaluare [i sintaxa folosit\ pentru crearea expresiilor Lisp sunt u[or de `nv\]at.
Este un interpretor a[a `nc`t rezultatele ob]inute din calcule pot fi vizualizate interactiv `ntr-o sesiune AutoCAD.
AutoLISP interac]ioneaz\ direct cu AutoCAD f\r\ s\ necesite programe de sprijin extern, cum ar fi compilatorul.
Programele AutoLISP s`nt u[or de `n]eles [i modificat.
AutoLISP-ul este capabil de itera]ie [i recursivitate. Func]iile pot utiliza instruc]iuni condi]ionale [i de start standard [i pot fi definite `n a[a fel `nc`t o func]ie apeleaza la recursiune .
AutoLISP-ul `ncurajeaz\ programatorul s\ scrie func]ii simple,structurate [i s\ combine aceste func]ii cu scopul de a crea programe complexe dar u[or de `n]eles.
Pentru cei ce s`nt interesa]i s\ lucreze cu programe AutoLISP le recomand\m urm\toarele c\r]i:
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 aplica]ii, f\c`nd astfel AutoCAD-ul mai sensibil la modul de lucru. Multe dintre cele mai complicate aplica]ii proiectate pentru AutoCAD folosesc pe scar\ larg\ limbajul de programare AutoLISP.
AutoLISP poate crea subrutine [i macrouri puternice. Subrutinele AutoLISP pot fi alc\tuite din comenzi AutoCAD [i func]ii AutoLISP [i pot automatiza opera]ii complexe `n cadrul AutoCAD-ului.
Subrutinele AutoLISP pot crea noi func]ii AutoLISP [i noi comenzi AutoCAD care pot fi folosite `n linia de comand\ sau `n cadrul fi[ierelor script [i menu-urilor AutoLISP.
Cum `nc\rc\m AutoLISP-ul ?
AutoLISP-ul este o component\ standard a AutoCAD-ului, portabil\ pe toate ma[inile de calcul. Interpretorul AutoLISP se `ncarc\ automat la fiecare sesiune AutoCAD.
AutoLISP opereaz\ `n cadrul editorului grafic AutoCAD. Interpretorul st\ `n "umbr\" `n timpul unei sesiuni de interpretare grafic\ a[tept`nd 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 ?
Cuno[tinte temeinice de lucru cu AutoCAD.
Trebuie de asemenea s\ ave]i cuno[tin]e despre:
Fi[iere script.
Menu-uri utilizator.
~n unele cazuri este mai simplu [i mai u[or s\ optimiza]i o secvent\ de desenare cu un fi[ier script sau cu un menu de baz\ dec`t s\ folosi]i un program AutoLISP.
Ce editor de text ar trebui folosit ?
Este nevoie de un editor de text ASCII pentru a crea fi[iere program AutoLISP pe baza acestui manual.
Fi[ierele de text ASCII pot fi `nt`lnite sub denumirea de fi[iere "programmer", "non-document" sau "unformatted".
Versiunea MS-DOS 5.0 a ap\rut cu un editor de text simplu numit EDIT. Dac\ folosi]i versiunea DOS 386 a AutoCAD-ului din acest manual este posibil s\ dori]i s\ folosi]i acest editor.
Aplica]ia NOTEPAD din Microsoft WindowsTM este un editor de text ASCII a[a cum este aplica]ia 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 fi[iere program AutoLISP.
Hardware pentru AutoLISP [i necesarul de memorie
Computerul 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\ cerin]ele specifice fiec\rei platforme.
Lansarea `n execu]ie
Lansa]i editorul grafic AutoCAD `nainte de a lansa orice alt\ comanda. Va trebui s\ introduce]i s-expresiile AutoLISP din linia de comand\.
V\ suger\m s\ lansa]i sesiunea de editare grafic\ ori de c`te ori utiliza]i acest manual.
Expresii simbolice
Expresiile simbolice s`nt instruc]iuni de baz\ ale limbajului AutoLISP.
Obiective
~n acest capitol ve]i `nv\]a:
Cum s\ crea]i o expresie simbolic\
Cum recunoa[te AutoCAD-ul expresiile simbolice
Cum s\ folosi]i expresiile simbolice `n cadrul comenzilor AutoCAD
Cum s\ afla]i valoarea unei expresii simbolice
Instruc]iuni `n AutoLISP
~n 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 s`nt principalul mijloc de construire a expresiilor simbolice `n AutoLISP. O expresie simbolic\ din AutoLISP poate fi comparat\ cu o propozi]ie `n limba englez\.
O expresie simbolic\ sau o s-expresie are `ntotdeauna o anumit\ valoare. Func]ia principal\ a LISP-ului este s\ determine valoarea unei s-expresii. De fiecare dat\ c`nd lans\m o s-expresie interpretorului LISP (de obicei sub forma unei liste, el va evalua acea expresie [i ne va da rezultatul. Acest rezultat se nume[te valoarea expresiei.
O expresie simbolic\ sau o s-expresie reprezint\ pur [i simplu o instruc]iune `n LISP.
S-expresiile `n AutoLISP s`nt construite prin `ncadrarea unei secven]e valide de caractere `ntre paranteze. Caracterul parantez\ st`nga sau ( se nume[te parantez\ deschis\ [i caracterul parantez\ dreapta sau ) se nume[te parantez\ `nchis\. ~n mod obi[nuit aceste caractere s`nt denumite deschis [i `nchis.Parantezele dintr-o s-expresie trebuie s\ fie echilibrate. Oric\rei paranteze deschise trebuie sa-i corespund\ una `nchis\.
Obs. Cea mai frecvent\ gre[eal\ `n AutoLISP este ne`nchiderea parantezelor. Editoarele de text profesionale au aceast\ caracteristic\ de a g\si parantezele corespondente cu un minim de efort.
Cum recunoa[te AutoCAD-ul o s-expresie
AutoCAD-ul recunoa[te o s-expresie AutoLISP printr-o parantez\ deschis\. Dac\ g\se[te o astfel de parantez\, AutoCAD-ul transfer\ intrarea utilizatorului c\tre interpretorul AutoLISP [i a[teapt\ rezultatul. AutoCAD afi[eaz\ rezultatul s-expresiei.
Figura 1. Diagrama de comunicatie dintre AutoCAD si AutoLISP
Exemplu
Pe linia de comand\ a AutoCAD-ului `nscrie]i s-expresiile `n coloana din st`nga a tabelului care urmeaz\. Compara]i rezultatele date de AutoCAD cu rezultatele care se afl\ `n coloana din dreapta a tabelului.
Command:(+12)3Command:
S-expresiiRezultate
(+ 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 recunoa[te parantezele deschise, va transfera intrarea interpretorului AutoLISP [i va a[tepta rezultatul.
AutoCAD-ul tip\re[te rezultatul intr\rii s-expresiilor pe linia de comand\. AutoCAD-ul folose[te rezultatul unei s-expresii introduse, drept intrare la comanda curent\.
Figura 2. Cum AutoCAD-ul si AutoLISP-ul comunica intr-o comanda AutoCAD
Exemplu
~n comanda "polar array" care urmeaz\, `mp\r]ind 360 de grade la 15 se determin\ num\rul de obiecte de creat, de exemplu se creaz\ un obiect la fiecare 15 grade de rota]ie.
Introduce]i 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) :Enter Rotate objects as they are copied? Enter
Figura 3. Expresia (/360 15) genereaza un array de 24 linii
Caracterul semnul exclam\rii
AutoCAD-ul analizeaz\ intrarea utilizatorului `n linia de comand\ caut`nd 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 c\tre interpretorul AutoLISP [i a[teapt\ rezultatul.
Orice s-expresie valid\ poate urma dup\ semnul exclam\rii.
Command: !(+ 12)
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
Exemplu
pi este un simbol predefinit `n AutoLISP. Extrage]i valoarea simbolului pi pe linia de comand\ AutoCAD.
Command: !pi
3.14159
Command:
Recapitulare
S-expresiile s`nt expresii AutoLISP valide aflate `ntre paranteze.
AutoCAD-ul caut\ dou\ caractere speciale: parantezele deschise sau open [i semnul exclam\rii 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.
Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat.
Atomi [i liste
Exist\ dou\ mari categorii de tipuri de date `n AutoLISP: atomi [i liste. Atomii s`nt obiecte simple. Listele s`nt obiecte complexe. Acest capitol define[te atomii [i listele.
Obiective
~n acest capitol se va studia:
Diferen]a dintre atomi [i liste
Componentele unei liste
Cum s\ recunoa[tem un raport de erori AutoLISP
Natura obiectului AutoLISP nilAtomi
Un atom este cel mai simplu tip de date din Lisp. Un atom poate fi un num\r `ntreg
1
un num\r real
4587.993401
un [ir de caractere
A String Of Pearls o func]ie AutoLISP predefinit\
+
un simbol
XYZ
sau oricare alt tip de obiecte existente `n tabelul 3-1.
Tipuri de atomiExempleTip de data AutoLISP
simbolpi,x,mid_ptSYM
sir"Hello, world."STR
intreg1,32767,-32768INT
numar real1.0,45.678,-876543.21REAL
descriptor de fi[ierFILE
nume entitate AutoCADENAME
set de selectie AutoCADPICKSET
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, atunci este o list\.
Liste
Listele s`nt 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 func]ie.
Obiectele din cadrul listei trebuie separate prin cel pu]in un spa]iu.
Iat\ c`teva exemple de liste. Observa]i c\ fiecare obiect este separat printr-un spa]iu de celelalte obiecte din cadrul listei.
(+ 1 2 )
(- 4 2 )
(x y z )
(1.0 1.0 0.0 )
Despre evaluarea listelor vom vorbi pu]in mai t`rziu.
Elementele unei liste
Atomii [i listele pot fi combinate sub form\ de liste. ~n urm\toarele patru exemple am introdus trei atomi `ntr-o list\. Fiecare atom este un element al listei.
Exemplu
Aceast\ list\ are trei elemente: numerele reale 1.0, 1.0 [i 0.0
(1.0 1.0 0.0)
Aceast\ list\ are trei elemente: func]ia de adunare + (func]ie intern\), nr. `ntreg 1 [i nr. `ntreg 3.
(+ 1 3)
Aceast\ list\ are trei elemente: func]ia 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: func]ia 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.
Condi]ii de eroare
C`nd introduce]i s-expresii `n linia de comand\ AutoCAD, interpretorul AutoLISP v\ va spune dac\ a]i introdus o expresie neechilibrat\. O expresie neechilibrat\ are mai multe paranteze deschise dec`t `nchise.
Iat\ o expresie neechilibrat\. ~i lipse[te o parantez\ `nchis\.
Command: (+ 1 (+ 2 3)
1>
AutoLISP-ul semnalizeaz\ o expresie neechilibrat\ printr-un mesaj special.
n>
unde n este num\rul de paranteze `nchise care lipsesc.
S`nt dou\ modalit\]i de rezolvare `n cazul condi]iilor de eroare: completa]i num\rul corect de paranteze `nchise sau ap\sa]i Ctrl-C pentru a anula expresia [i a ne re`ntoarce `n linia de comand\.
Not\ Este de asemenea posibil s\ vede]i acest mesaj c`nd un [ir este neechilibrat. Un [ir neechilibrat are ghilimele duble la un cap\t [i simple la cel\lalt.
Particularit\]ile obiectului nil
Toate obiectele din AutoLISP s`nt atomi sau liste. Atomii [i listele se exclud mutual. Un atom nu este niciodat\ list\ [i o list\ nu este niciodat\ atom.
Excep]ia o face obiectul nil.Obiectul nil este "lista goal\". Prin conven]ie nil este [i atom [i list\. nil poate fi exprimat `n dou\ moduri: 0 sau nil;.
nil este echivalentul AutoLISP pentru fals. Multe func]ii `n AutoLISP testeaz\ dac\ o condi]ie este adevarat\ sau fals\, de exemplu dac\ valoarea unui num\r este mai mare dec`t 0. De c`te ori un test de condi]ie 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 condi]ie trebuie s\ corespund\ lui "adev\rat".
Recapitulare
Cele dou\ mari clase de obiecte din AutoLISP s`nt atomii [i listele. Exist\ c`teva tipuri diferite de atomi.
Atomii s`nt obiecte care nu s`nt `ncadrate `ntre paranteze.
Listele s`nt `ntodeauna `ncadrate `ntre paranteze
Obiectele con]inute `ntr-o list\ constituie elementele unei liste
Elementele unei liste pot fi atomi sau liste
Elementele unei liste s`nt separate `ntre ele de cel pu]in un spa]iu
AutoLISP detecteaz\ expresiile neechilibrate nil este [i atom [i list\
nil este lista goal\
nil este returnat de testele de condi]ie pentru a indica "fals"exercitiul 1: atomi si liste
~n acest exerci]iu ve]i:
Recapitula ce a]i `n]eles despre atomi [i liste
Determina dac\ un obiect este atom sau list\
Folosi AutoLISP pentru a afla valoarea diferitelor obiecte
Partea I
1. Determina]i dac\ obiectul este atom sau list\.
ObiecteAtomiListe
73.5
"0,0"
(1.0 2.0 3.0)
"String"
("String")
()
2. Completa]i rezultatul evalu\rii `n c\su]a corespunzatoare.
Tabelul 3. Determinarea naturii obiectului
Partea a II-a
1. Gasi]i valoarea acestui atom `n linia de comand\ AutoCAD
2. Tip\ri]i "!" urmat de un atom
3. Scrie]i r\spunsul `n coloana din dreapta:
Exemplu
Command: !4.5
AtomiValori
4.5
"text"
17
setq
xyz
nil
Tabelul 4. Determinarea valorii atomului
Partea a III-a
1. Determina]i num\rul de elemente con]inut de fiecare list\.
2. Scrie]i r\spunsul `n coloana din dreapta.
ListaNumar 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
Aceast\ pagin\ este l\sat\ liber\ `n mod inten]ionat
Evaluarea
Evaluarea 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.
Obiective
~n acest capitol ve]i studia:
Procesul evalu\rii
Cum returneaz\ AutoLISP-ul o valoare
Cum evalueaz\ AutoLISP-ul atomi [i liste
Cum se folosesc func]iile aritmetice de baz\ `n AutoLISP
Cum se anuleaz\ evaluarea unui obiect
Cum leag\ AutoLISP-ul o valoare de o variabil\
Returnarea valorii
C`nd transmite]i 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 tip\rit valoarea returnat\ `n zona liniei de comand\.
Command: !pi
3.14159