50793936.doc R.2.1 2/3/2011 ATC.

Iasi

AutoLISP

•1

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 fi[ierele AutoCAD de tip script. AutoLISP cu

50793936.doc R.2.1 2/3/2011 ATC. Iasi

•1

AUTODESK, INC.

Cuprins
Acest material cuprinde subiectele prezentate mai jos. Explicarea acestor subiecte reprezint\ con]inutul principal al capitolelor de mai jos. Introducere...........................................................................1 Generalit\]i............................................................................3 Expresii simbolice.................................................................7 Atomi [i liste........................................................................13 Evalu\ri ...............................................................................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 Selec]ie interactiv\ de puncte.............................................79 Func]ii.................................................................................87 Func]ii care ac]ioneaz\ ca [i comenzi AutoCAD...................97 Fi[iere de programare AutoLISP........................................101 Func]ia C...........................................................................105 Teste logice [i condi]ionale...............................................113 Bucle de program.............................................................123 Opera]ii cu [iruri................................................................131 Acces la entit\]i.................................................................139 Liste asociate entit\]ilor....................................................147 Modificarea unei entit\]i....................................................155 Selectarea grafic\ a unei entit\]i.......................................165 Tratarea erorilor...............................................................171 Opera]ii cu fi[iere..............................................................175 ................................................................................................ Seturi de selec]ie..............................................................193 Tabele [i nume de obiecte................................................203 Fi[iere script [i AutoLISP....................................................211

•2

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

Accesul la entit\]i simple [i la polilinii...............................217 Accesul la entit\]i simple [i la blocuri................................221 Crearea entit\]ilor cu func]ia entmake.............................225 Crearea poliliniilor [i a definitiilor de bloc cu func]ia entmake ...........................................................................227 Tratarea [irurilor...............................................................231 Tratarea entit\]ilor............................................................243

50793936.doc R.2.1 2/3/2011

•3

AUTODESK, INC.

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 modificat. s`nt u[or de `n]eles [i

• •

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 •4

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

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. •5

50793936.doc R.2.1 2/3/2011

Va trebui s\ introduce]i s-expresiile AutoLISP din linia de comand\.0 a ap\rut cu un editor de text simplu numit EDIT. INC. Fi[ierele de text ASCII pot fi `nt`lnite sub denumirea de fi[iere "programmer". 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.AUTODESK. V\ suger\m s\ lansa]i sesiunea de editare grafic\ ori de c`te ori utiliza]i acest manual. 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. •6 . Manualele AutoCAD Interface [i Installation And Performance Guide prezint\ cerin]ele specifice fiec\rei platforme. Dac\ folosi]i versiunea DOS 386 a AutoCAD-ului din acest manual este posibil s\ dori]i s\ folosi]i acest editor. Lansarea `n execu]ie Lansa]i editorul grafic AutoCAD `nainte de a lansa orice alt\ comanda. "non-document" sau "unformatted". Hardware pentru AutoLISP [i necesarul de memorie Computerul dumneavoastr\ trebuie s\ aib\ hardware-ul [i memoria cerut\ de AutoCAD pentru a putea folosi AutoLISPul. Versiunea MS-DOS® 5.

doc R. Obs. `n cadrul AutoCAD-ului. O expresie simbolic\ sau o s-expresie are `ntotdeauna o anumit\ valoare. ~n mod obi[nuit aceste caractere s`nt denumite deschis [i `nchis. Parantezele dintr-o s-expresie trebuie s\ fie echilibrate. 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. Acest rezultat se nume[te valoarea expresiei.2. De fiecare dat\ c`nd lans\m o s-expresie interpretorului LISP (de obicei sub forma unei liste.AUTODESK. TRAINING LECTII DE BAZA AUTOLISP Expresii simbolice Expresiile simbolice s`nt instruc]iuni de baz\ ale limbajului AutoLISP. Cea mai frecvent\ gre[eal\ `n AutoLISP este ne`nchiderea parantezelor. Editoarele de text profesionale 50793936. AutoLISP-ul proceseaz\ liste cunoscute ca expresii simbolice. O expresie simbolic\ din AutoLISP poate fi comparat\ cu o propozi]ie `n limba englez\. Func]ia principal\ a LISP-ului este s\ determine valoarea unei s-expresii. Listele s`nt principalul mijloc de construire a expresiilor simbolice `n AutoLISP. O expresie simbolic\ sau o s-expresie reprezint\ pur [i simplu o instruc]iune `n LISP. Oric\rei paranteze deschise trebuie sa-i corespund\ una `nchis\. el va evalua acea expresie [i ne va da rezultatul.1 2/3/2011 •7 . 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\. INC.

AUTODESK. AutoCAD afi[eaz\ rezultatul s-expresiei. Rezultatele expresiilor simbolice •8 . AutoCAD-ul transfer\ intrarea utilizatorului c\tre interpretorul AutoLISP [i a[teapt\ rezultatul. Dac\ g\se[te o astfel de parantez\. INC. g\si parantezele Cum recunoa[te AutoCAD-ul o s-expresie AutoCAD-ul recunoa[te o s-expresie AutoLISP printr-o parantez\ deschis\. Command: (+ 1 2) AutoC AD (+ 1 2) 3 AutoLISP 3 Command: Figura 1. Compara]i 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. 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\. au aceast\ caracteristic\ de a corespondente cu un minim de efort.

AutoCAD-ul va recunoa[te parantezele deschise.doc R.1 2/3/2011 •9 .5 (/ 360 15) AutoCAD (/ 360 15) 24 AutoLISP Command:array last polar 5. INC. Cum AutoCAD-ul si AutoLISP-ul comunica intr-o comanda AutoCAD 50793936. AutoCAD-ul folose[te rezultatul unei s-expresii introduse. drept intrare la comanda curent\. va transfera intrarea interpretorului AutoLISP [i va a[tepta rezultatul. AutoCAD-ul tip\re[te rezultatul intr\rii s-expresiilor pe linia de comand\.5 20 Figura 2. Command:array last polar 5.AUTODESK.2. TRAINING LECTII DE BAZA AUTOLISP S-expresiile [i comenzile AutoCAD S-expresiile pot fi introduse ca intrare la comenzi AutoCAD.

5 To point: 5. Introduce]i comenzile. `mp\r]ind 360 de grade la 15 se determin\ num\rul de obiecte de creat. -=cw) <360>:Enter Rotate objects as they are copied? <Y>Enter Figura 3.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. Orice s-expresie valid\ poate urma dup\ semnul exclam\rii. Command: !(+ 12) •10 .AUTODESK. INC. Command: line From point: 5. 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 !. Dac\ semnul exclamarii este primul caracter.5 Number of items: (/ 360 15) Angle to fill (+=ccw. Exemplu ~n comanda "polar array" care urmeaz\. Acest caracter este denumit `n mod frecvent bang. AutoCAD-ul transfer\ intrarea c\tre interpretorul AutoLISP [i a[teapt\ rezultatul. de exemplu se creaz\ un obiect la fiecare 15 grade de rota]ie.

~n acest caz. AutoCAD-ul caut\ dou\ caractere speciale: parantezele deschise sau open [i semnul exclam\rii sau bang. pi Command: !pi 3. • • • • 50793936. Caracterul bang poate precede S-expresiile sau simbolurile.14159 Command: Recapitulare • • S-expresiile s`nt expresii AutoLISP valide aflate `ntre paranteze.2. S-expresiile [i caracterul bang pot fi folosite `n linia de comand\ sau `n cadrul comenzilor AutoCAD.1 2/3/2011 •11 . TRAINING LECTII DE BAZA AUTOLISP Caracterul "bang" este deseori folosit pentru a cere AutoLISP-ului valoarea unui simbol. Bang indic\ AutoCAD-ului c\ urmeaz\ o s-expresie sau un simbol. Command: !pi Exemplu este un simbol predefinit `n AutoLISP.doc R. Extrage]i valoarea simbolului pi pe linia de comand\ AutoCAD. Open indic\ AutoCAD-ului c\ urmeaz\ o s-expresie. simbolul nu trebuie s\ se afle `ntre paranteze.AUTODESK. INC.

•12 . INC. Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat.AUTODESK.

Acest capitol define[te atomii [i listele. INC.1 2/3/2011 •13 . TRAINING LECTII DE BAZA AUTOLISP Atomi [i liste Exist\ dou\ mari categorii de tipuri de date `n AutoLISP: atomi [i liste. Un atom poate fi un num\r `ntreg • • • • • • • • • • 1 4587.doc R. 50793936.AUTODESK. Listele s`nt obiecte complexe.2.993401 “A String Of Pearls “ + XYZ un num\r real un [ir de caractere o func]ie AutoLISP predefinit\ un simbol sau oricare alt tip de obiecte existente `n tabelul 3-1. Atomii s`nt obiecte simple. 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 nil Atomi Un atom este cel mai simplu tip de date din Lisp.

0. Elementele unei liste Atomii [i listele pot fi combinate sub form\ de liste.x.expresii complexe formate din atomi [i/sau alte liste.678.0 0.32767. Liste Listele s`nt s. • Iat\ c`teva exemple de liste. Obiectele din cadrul listei trebuie separate prin cel pu]in un spa]iu.21 <File: #a82> <Entity name: 6000001a> <Selection set: 1> <Subr: #1e32> <Ext." 1. 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\. Fiecare atom este un element al listei. world. Tipuri de atomi simbol sir intreg numar real descriptor de fi[ier nume entitate AutoCAD set de selectie AutoCAD subr (functie interna) subr externa (Functia ADS) Exemple pi. atunci este o list\. •14 .mid_pt "Hello. Observa]i c\ fiecare obiect este separat printr-un spa]iu de celelalte obiecte din cadrul listei.45. Pentru orice list\ care poate fi evaluat\. Dac\ obiectul nu se afl\ `ntre paranteze atunci este un atom. primul termen din cadrul listei respective trebuie s\ fie o func]ie. INC. (+ 1 (. Subr: 1 #3a970498> SYM STR INT Tip de data AutoLISP REAL FILE ENAME PICKSET SUBR EXSUBR Tabelul 2.4 (x y (1. dac\ da. Listele necesit\ sintaxe simple dar riguroase.-32768 1.0 2 ) 2 ) z ) 1.0 ) Despre evaluarea listelor vom vorbi pu]in mai t`rziu. • • O list\ trebuie s\ se afle `ntre paranteze. ~n urm\toarele patru exemple am introdus trei atomi `ntr-o list\.-876543.AUTODESK.

doc R. Ceea ce este `ncadrat `ntre paranteze reprezint\ o list\. 50793936. nr.AUTODESK.2.0 0.0 1.0 (1. `ntreg 3.0.1 2/3/2011 •15 . Lista de trei elemente: doi atomi si o lista Exemplu Aceast\ list\ are trei elemente: func]ia de adunare +.0 [i 0. `ntreg 1 [i nr. INC. nr. 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. (+ 1 3) Aceast\ list\ are trei elemente: func]ia de adunare `ntreg 1 [i list\ (+ 2 3) (+ 1 (+ 2 3 )) +. lista (+ 1(+ 2 3)) [i lista (+ 4 5). (+ (+ 1 (+ 2 3)) (+ 4 5)) (+ (+ 1 (+ 2 3)) (+ 4 5)) F irst e le m e n t: + S e co n d e le m e n t: (+ 1 (+ 2 3 )) T h ird e le m e n t: (+ 4 5 ) Figura 5. (+ 1 (+ 2 3)) First elem ent: + S econd elem ent: 1 Third elem ent: (+ 2 3) Figura 4.0) Aceast\ list\ are trei elemente: func]ia de adunare + (func]ie intern\). 1. Lista de trei elemente: un atom si doua liste. TRAINING LECTII DE BAZA AUTOLISP Exemplu Aceast\ list\ are trei elemente: numerele reale 1.

Prin conven]ie nil este [i atom [i list\. Obiectul nil este "lista goal\". n> unde n este num\rul de paranteze `nchise care lipsesc. nil •16 . AutoLISP-ul va returna obiectul nil ca fiind valoarea testului. Un atom nu este niciodat\ list\ [i o list\ nu este niciodat\ atom.. interpretorul AutoLISP v\ va spune dac\ a]i introdus o expresie neechilibrat\. 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". Multe func]ii `n AutoLISP testeaz\ dac\ o condi]ie este adevarat\ sau fals\. este echivalentul AutoLISP pentru fals. Iat\ o expresie neechilibrat\. INC. Un [ir neechilibrat are ghilimele duble la un cap\t [i simple la cel\lalt. Command: (+ 1 (+ 2 3) 1> AutoLISP-ul semnalizeaz\ o expresie neechilibrat\ printr-un mesaj special. Not\ Este de asemenea posibil s\ vede]i acest mesaj c`nd un [ir este neechilibrat. Excep]ia o face obiectul nil. Atomii [i listele se exclud mutual. De c`te ori un test de condi]ie este fals. Condi]ii de eroare C`nd introduce]i s-expresii `n linia de comand\ AutoCAD.AUTODESK. Particularit\]ile obiectului nil Toate obiectele din AutoLISP s`nt atomi sau liste. de exemplu dac\ valoarea unui num\r este mai mare dec`t 0. ~i lipse[te o parantez\ `nchis\. 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\. O expresie neechilibrat\ are mai multe paranteze deschise dec`t `nchise. nil poate fi exprimat `n dou\ moduri: 0 sau nil.

TRAINING LECTII DE BAZA AUTOLISP Recapitulare • • • • • • • • • • • Cele dou\ mari clase de obiecte din AutoLISP s`nt atomii [i listele. Exist\ c`teva tipuri diferite de atomi.doc R. INC.AUTODESK.1 2/3/2011 •17 .2. Atomii s`nt obiecte care nu s`nt `ncadrate `ntre paranteze. Listele s`nt `ntodeauna `ncadrate `ntre paranteze Obiectele con]inute `ntr-o elementele unei liste list\ constituie 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 nil este lista goal\ este returnat de testele de condi]ie pentru a indica "fals" 50793936.

Obiecte 73. Completa]i rezultatul corespunzatoare. 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.0" (1.0) "String" ("String") () Tabelul 3.AUTODESK. Determinarea naturii obiectului Atomi evalu\rii `n c\su]a Liste •18 . INC.0 3.0 2. 2. Determina]i dac\ obiectul este atom sau list\.5 "0.

5 "text" 17 setq xyz nil Tabelul 4.0 2. Gasi]i valoarea acestui atom `n linia de comand\ AutoCAD 2. Determinarea valorii atomului Valori Partea a III-a 1. TRAINING LECTII DE BAZA AUTOLISP Partea a II-a 1.2.AUTODESK.0) (+ 1 2) (+ 1 (+ 2 3)) (+ 1 2 (+ 3 4) 5) (+ 1 (+ 2 (+ 3 4)) 5) () Tabelul 5. Determinarea numarului de elemente din lista Numar de elemente 50793936. INC. Determina]i num\rul de elemente con]inut de fiecare list\.1 2/3/2011 •19 . Scrie]i r\spunsul `n coloana din dreapta. Scrie]i r\spunsul `n coloana din dreapta: Exemplu Command: !4.5 Atomi 4. 2. Lista (1.doc R.0 3. Tip\ri]i "!" urmat de un atom 3.

INC.AUTODESK. Aceast\ pagin\ este l\sat\ liber\ `n mod inten]ionat •20 .

doc R. Evaluarea se aplic\ [i la atomi [i la liste. AutoLISP-ul determin\ valoarea acestuia. -=cw) <360>:Enter 50793936. Prin evaluarea unui obiect.2.valoare returnata ~ntr-un exemplu anterior folosind comanda ARRAY . AutoLISP-ul a evaluat lista (/ 360 15) [i a returnat valoarea 24 AutoCAD-ului. folosind caracterul "!". acesta `i determin\ valoarea [i o returneaz\. ~ntr-un exemplu anterior.5 Number of items: (/ 360 15) Angle to fill (+=ccw. TRAINING LECTII DE BAZA AUTOLISP Evaluarea Evaluarea este procesul prin care AutoLISP-ul determin\ valoarea unui obiect.14159 <--. INC. Fiecare obiect din AutoLISP are o valoare.1 2/3/2011 •21 . Center point of array: 5. AutoLISP-ul a evaluat obiectul pi [i a returnat valoarea AutoCAD-ului. 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. AutoCAD-ul a folosit valoarea returnat\ la intrare `n comanda ARRAY .AUTODESK. AutoCAD-ul a tip\rit valoarea returnat\ `n zona liniei de comand\. Command: !pi 3.

Evaluarea atomilor Atomii s`nt obiecte simple [i s`nt evalua]i folosind reguli simple potrivit tipului lor de date. Reguli de evaluare a atomilor Evaluarea listelor Evaluarea unei liste poate fi facut\ `ntr-unul din aceste dou\ moduri: se ia lista ca atare sau se evalueaz\. insusi Legarea curenta 1 4.5 "text" Ultima asignare Valoare Tabelul 6. insusi Valoarea este nr. •22 . metodele dau rezultate diferite. AutoLISP returneaza valoarea expresiei in linia de comanda AutoCAD. AutoCAD prompt Number of items: User enters (/ 360 15) AutoLISP receives (/ 360 15) returns 24 Figura 6. Majoritatea atomilor se autoevalueaz\. insusi Valoarea este nr. numerele reale. ~n func]ie de natura listei.de exemplu.AUTODESK. valori diferite. Numerele `ntregi. Modul `n care se evalueaz\ un simbol nu poate fi discutat dec`t dup\ ce `nv\]am cum se leag\ o list\. INC. Tip de atom Intreg Real Sir Simbol Exemplu 1 4.5 "text" x Regula de evaluare Valoarea este nr. se autoevalueaz\ la valoarea pe care o au. [irurile.

adic\ ele reprezint\ datele asupra c\rora func]ia opereaz\. (+ 1 2) Etapa I: Analiza primului element Primul element al unei liste pe care AutoLISP-ul o poate evalua trebuie s\ fie o func]ie. atunci trebuie respectat\ regula sintactic\. acesta va da na[tere unei erori.AUTODESK. Dac\ primul element al listei pe care AutoLISP-ul `ncearc\ s\ o evalueze nu este o func]ie.doc R. • Pentru orice list\ care poate fi evaluat\. Listele s`nt evaluate potrivit instruc]iunilor referitoare la primul element al listei.2.1 2/3/2011 . Etapa a II-a: Evaluarea func]iei AutoLISP evalueaz\ func]ia. AutoLISP-ul verific\ primul element al listei unde se a[teapt\ s\ g\seasc\ o func]ie. O func]ie evalueaz\ un set de instruc]iuni care sugereaz\ AutoCAD-ului cum s\ ac]ioneze mai departe. Aceasta este o list\ format\ din trei elemente: func]ia + numerele `ntregi 1 [i 2. INC. sau func]ii AutoLISP definite de utilizator. primul element din cadrul listei trebuie s\ fie o func]ie. Dac\ ar fi s\ exprim\m `n cuvinte aceste instruc]iuni. Cum evalueaz\ AutoLISP-ul o list\ Vom folosi o list\ simpl\ pentru a ilustra procesul de evaluare a unei liste. Acest lucru va fi mai clar dup\ explicarea func]iei quote mai t`rziu `n aceast\ lec]ie. Elementele care urmeaz\ dup\ o func]ie `n cadrul unei liste s`nt argumentele func]iei. Func]iile s`nt fie func]ii interne AutoLISP. Dac\ primul element este numele unei subrutine interne AutoLISP sau func]ii. TRAINING LECTII DE BAZA AUTOLISP Dac\ o list\ este luat\ ca atare. a[a cum s`nt cele prezentate `n capitolul 4 al manualului AutoLISP Programmer’s Reference Manual. Dac\ o list\ urmeaz\ a fi evaluat\ de AutoLISP. fie subrutine. atunci valoarea ei este lista `ns\[i. restul de elemente ale listei s`nt transferate func]iei ca argumente formale [i s`nt evaluate de c\tre func]ie. am •23 50793936. fie func]ii externe definite de utilizator sau exsubr definite de aplica]ii ADS. Func]ia + evalueaz\ un set de instruc]iuni pentru AutoLISP.

Care s`nt argumentele func]iei? Pune]i toate valorile la un loc [i returna]i rezultatul ca fiind valoarea `ntregii liste. •24 . putea spune: g\si]i valoarea fiec\rui element din aceast\ list\.AUTODESK. INC.

AutoLISP-ul verific\ dac\ mai s`nt [i alte elemente `n list\..2. (.. lucr`nd din interior `n exterior. AutoLISP-ul `[i termin\ instruc]iunile de la func]ia + prin ad\ugarea valorilor argumentelor 1 [i 2 [i prin returnarea num\rului `ntreg 3 ca fiind valoarea listei. Astfel AutoLISP-ul memoreaz\ valoarea 1 `n stiva programului. 1 .. AutoLISP-ul g\se[te valoarea urm\torului element din list\: num\rul `ntreg 1. Rezultatele s`nt de obicei acelea[i [i adesea este mai u[or pentru noi s\ citim coduri AutoLISP cu un grad de imbricare mai mare. AutoLISP-ul `i pastreaz\ valoarea `n stiv\. TRAINING LECTII DE BAZA AUTOLISP Etapa a III-a: Continuarea instruc]iunilor func]iei (. Etapa a IV-a: Returnarea valorii func]iei Nemaig\sind alte elemente `n list\. .1 2/3/2011 •25 . 2) Con]in`nd cu instruc]iunile de la func]ia +. Command: (+ 1 2) 3 Command: Un exemplu mai complex AutoLISP evalueaz\ elementele dintr-o list\ de la st`nga la dreapta. ~ntotdeauna lucreaz\ de la st`nga la dreapta. ~n multe cazuri ar fi convenabil pentru noi s\ urm\m procesul de evaluare din interior spre exterior dec`t de la dreapta spre st`nga.doc R. de exemplu argumente la func]ie. Numerele `ntregi se evalueaz\ pe sine.) Urm\rind instruc]iunile din func]ia +. INC. Mai exist\ un element: num\rul `ntreg 2.. de exemplu o introduce `ntr-o loca]ie de memorie temporar\.AUTODESK. Dar nu acesta este modul `n care AutoLISP-ul evalueaz\ o list\. Considera]i aceast\ list\ format\ din trei elemente: (+ 1 (+ 2 3)) • • • Func]ia + Atomul 1 Lista (+ 2 3) 50793936.

. (.. `ntreg 5.. Mai `nt`i evalueaz\ func]ia + [i `i prime[te instruc]iunile ( . .... . ... (. •26 . 1 . de ex. AutoLISP-ul caut\ primul element al listei a[tept`nd s\ g\seasc\ o func]ie [i apoi o evalueaz\.. Al treilea element este el `nsu[i o list\.... cum ar fi al doilea argument la func]ia +.. Cum afl\ AutoLISP-ul valoarea unei liste? Prin evaluare. Apoi `i memoreaz\ valoarea [i continu\. (. AutoLISP-ul afl\ valoarea celui de al doilea element al listei. Evaluarea unei liste complexe AutoLISP-ul evalueaz\ aceast\ list\ folosind exact aceea[i metod\ ca `n exemplul anterior. AutoLISP-ul g\se[te valoarea celui de al treilea element al listei.. Apoi g\se[te valoarea argumentelor 2 [i 3. (. Termin`ndu-i instruc]iunile de la func]ia + din cadrul listei (+ 2 3). (+ 1 (+ 2 3)) value is 1 value is 5 value is 6 Figura 7. . 3) . (+ 2 3) . (+ . Func]ia returneaz\ valoarea ei ca un set de instruc]iuni pentru AutoLISP. (. Cum evalueaz\ AutoLISPul o list\? (. (+ ..AUTODESK.. . Urm`nd instruc]iunile func]iei +. 2 . primul argument la func]ia +: atomul 1. INC... AutoLISPul adaug\ valorile [i returneaz\ rezultatul care `n acest caz este nr.

1 2/3/2011 •27 .AUTODESK. INC.func]ia de sc\dere * func]ia de `nmul]ire / func]ia de `mp\r]ire 50793936.doc R.2. TRAINING LECTII DE BAZA AUTOLISP Nemaig\sind alte elemente `n list\. Func]ii aritmetice AutoLISP-ul include func]ii interne pentru opera]ii aritmetice ca: adunarea. AutoLISP-ul termin\ instruc]iunile de la func]ia + `n lista principal\ prin ad\ugarea valorii celor dou\ elemente la un loc [i return`nd valoarea 6. `nmul]irea [i `mp\r]irea • • • • + func]ia de adunare . sc\derea.

. 8 Ordinea argumentelor in functia de scadere ~n cazul sc\derii.2 1) (* 2 4) (/ 4 2) Ordinea argumentelor `n func]iile de adunare [i de `nmul]ire nu are importan]\. •28 ... Exemple Expresii aritmetice 1+2 2-1 2*4 4/2 Tabelul 7. Este `ns\ important\ pentru sc\dere [i `mp\r]ire. Aritmetica AutoLISP S-expresii AutoLISP (+ 1 2) (. . (/ 4 2) Divide this. Fig.. Iat\ c`teva exemple complexe. Fig. by this.. from this.AUTODESK.2 1) Subtract this.. . valoarea celui de al doilea argument este sc\zut\ din valoarea primului argument [i rezultatul returnat este valoarea listei.. 9 Ordinea argumentelor in functia de impartire ~n cazul `mp\r]irii. (. INC. valoarea celui de al doilea argument este divizorul valorii primului argument..

Listele s`nt evaluate printr-un proces standard.3) (4 + 2) .doc R.2. INC.2 3)) (. Primul element al oricarei liste ce poate fi evaluat\ trebuie s\ fie o func]ie.1 4*4/2 4/2*3 S-expresii AutoLISP (+ 1 (. AutoLISP-ul returneaz\ valoarea fiec\rui obiect pe care il evalueaz\. Exemple complexe de expresii aritmetice Recapitulare • • • • • • AutoLISP-ul determin\ valoarea unui obiect prin evaluare. Simbolurile se evalueaz\ prin legare sau atribuire. • AutoLISP-ul are func]ii standard pentru opera]ii aritmetice.AUTODESK.1 2/3/2011 •29 . TRAINING LECTII DE BAZA AUTOLISP Exemple Expresii aritmetice 1 + (2 .(+ 4 2) 1) (/ (* 4 4) 2) (* 3 (/ 4 2)) Tabelul 8. Majoritatea atomilor se evalueaz\ pe sine. 50793936.

INC. 3. EXERCITIUL 2: LISTE SI ARITMETICA LISTELOR ~n acest exerci]iu ve]i: • • • • Consolida cuno[tin]ele evaluare ~ncepe scrierea listele Transforma AutoLISP despre procesul de expresiilor AutoLISP `n `n folosind expresii expresii expresiile aritmetice AutoLISP Transforma expresiile aritmetice Partea I 1. /. Transforma]i expresiile aritmetice `n expresii AutoLISP. Scrie]i r\spunsurile `n coloana din dreapta. [i *.AUTODESK. Folosi]i func]ia +.10 15 / 3 5 + (10 * 2) (5 + 10) * 2 S-expresii Tabelul 9. 2. -. Traducerea expresiilor aritmetice •30 . Exemplu Expresia `n nota]ia aritmetic\ standard: 1 + 2 Expresia `n AutoLISP: ( + 1 2 ) Expresii aritmetice 3 + 10 + 5 20 * 15 16 .

INC.5 (/ 6 (+ 1 2))) (+ (/ (* 2 3) (.(/ 6 2) 1)) (* 2 (/ (+ 2 4) 3)) (. Traducerea expresiilor AutoLISP expresii aritmerice 50793936.AUTODESK.4 2)) (. Scrie]i r\spunsurile `n coloana din dreapta Exemplu Expresia `n nota]ia aritmetic\ standard (2 * 5) / (7 .5 (+ 4 (.2) Expresia `n AutoLISP (/ (* 2 5) (.7 2)) s-expresii (+ 2 (+ 5 4) (. TRAINING LECTII DE BAZA AUTOLISP Partea a II-a 1.4 2)) 1) Tabelul 10. Transforma]i s-expresiile `n expresii aritmetice 2.doc R.3 2))) (/ 8 (.1 2/3/2011 •31 .2.

0 3.AUTODESK. Folosi]i quote ca fiind primul element `ntr-o list\ [i ad\uga]i un singur argument.0) neevaluat\.0 2. adic\ la valoarea ca list\.0 3. Valoarea listei va fi valoarea neevaluat\ a celui de al doilea element al listei.0 2. spunem c\ la un simbol sau la o variabil\ se leag\ o valoare.0 2. Func]ia AutoLISP quote este folosit\ pentru a returna o list\ sau un atom neevaluat. ~n AutoLISP. Exemplu Aceast\ expresie leag\ simbolul x de valoarea 4.0 3.0)) (1. Liste neevaluate Valoarea unei liste poate fi determinat\ `n unul din aceste dou\ moduri: se evalueaz\ lista sau se consider\ lista ca atare. Command: (quote (1.0) ? Opera]ia de legare a dou\ obiecte Legarea este procesul prin care o valoare este atribuit\ unui simbol definit de utilizator sau unei variabile.0) Ce s-ar `nt`mpla dac\ AutoLISP-ului i s-ar cere s\ evalueze lista? De ce? Command: (1.5. INC.0 2.0 3.5 •32 .5) 4. Exemplu Aceast\ expresie returneaz\ lista (1. Command: (setq x 4. Func]ia AutoLISP setq se folose[te pentru a lega un simbol sau o variabil\ de o valoare. adic\ argumentul la quote.5 Command: !x 4. Aceasta `nseamn\ `n limbajul BASIC c\ o valoare este egal\ de o variabil\ sau c\ o valoare este atribuit\ unei variabile.

Command: (setq x 4. INC. Nu-l evalua]i. Functia setq este folosit\ pentru a lega o variabil\ de o valoare. 50793936. Aceste instruc]iuni ar putea fi exprimate astfel: Lua]i primul argument ca atare. Lega]i primul argument de valoarea celui de al doilea argument.doc R.5 Cum func]ioneaz\ func]ia setq Valoarea func]iei setq este un set de instruc]iuni pentru AutoLISP.2.1 2/3/2011 •33 . TRAINING LECTII DE BAZA AUTOLISP ~n BASIC.5 Recapitulare • • • Func]ia quote suprim\ procesul de evaluare. G\si]i valoarea celui de al doilea argument. Legarea este procesul de atribuire a unei valori la o variabil\.AUTODESK. aceea[i opera]ie ar putea fi exprimat\ astfel: LET x = 4. Returna]i valoarea leg\rii ca fiind valoarea listei.5) 4. Exemplu Nota]i returnarea valorii acestei expresii. Valoarea listei este valoarea leg\turii stabilite pentru simbolul x de c\tre func]ia setq.

0)) (y (1 2)) Evaluari? Numai fata valorii? •34 .AUTODESK.0 2.0) (quote (1.0 2.0 3. Determina]i dac\ o list\ poate fi evaluat\ sau trebuie considerat\ ca atare. INC. Pune]i un semn `n coloana corespunz\toare Tabelul 11.0 3.5) (setq y (1. Determinarea situatiei in care o lista poate fi evaluata s-expresii (+ 1 2) (+ 1 (+ 2 3)) (1. adic\ ve]i atribui valori variabilelor Partea I 1.0 2. 2. EXERCITIUL 3: EVALUAREA LISTELOR SI LEGAREA VARIABILELOR ~n acest exerci]iu ve]i: • • • • Consolida cuno[tin]ele evaluare despre procesul de Determina dac\ o list\ poate fi evaluat\ f\r\ erori Consolida cuno[tin]ele despre procesul de legare Folosi func]ia setq pentru a lega variabile de valori.0 3.0)) (setq x 4.

TRAINING LECTII DE BAZA AUTOLISP Partea a II-a 1. Legarea lui x unor valori diferite 50793936.5 "text" (1.0) (+ 1 2 3) (1 (+ 2 3)) Tabelul 12.2.0 3. Folosi]i func]ia setq [i func]ia quote dac\ este necesar 3.doc R. Lega]i variabila x de valorile din tabel 2.AUTODESK.0 2. INC. Verifica]i valoarea variabilei folosind "bang" pentru a-i afla legarea curent\.1 2/3/2011 •35 . Exemplu Command: (setq x 1) 1 Command: !x 1 Command:(setq x (+ 1 2 3)) 6 Command: !x 6 Command: (setq x (quote (4 (+ 5 6))) (4 (+ 5 6)) Command:!x (4 (+ 5 6)) Valoare pentru x 1 4.

Aceast\ pagin\ este l\sat\ liber\ `n mod inten]ionat. INC.AUTODESK. •36 .

3 de 24. comanda ARRAY recep]ioneaz\ ca num\r de repeti]ii ale func]iei. Dac\ linia de comand\ este `n ac]iune. INC. vom folosi func]ia AutoLISP fix pentru a rotunji cel mai apropiat num\r `ntreg.0 unita]i. ~n acest exemplu.doc R.0) 0. atunci evaluarea unei expresii AutoLISP returneaz\ valoarea expresiei `n AutoCAD. rezultatul unei expresii AutoLISP pentru care 6.0. Command: (* (+ 2. cu alte cuvinte.AUTODESK. Command: (setq x (+ 4 6)) 10 Command: !x 10 Aceast\ expresie returneaz\ valoarea diviz\rii r\d\cinii p\trate num\rului 50 prin num\rul real 9.35.0 se divide la 0.35 la o distant\ de 6.1 2/3/2011 .5 cu 6.78567 Aceast\ expresie returneaz\ valoarea multiplic\rii rezultatului ob]inut prin adunarea lui 2. Valoarea devine r\spunsul la linia curent\ a comenzii AutoCAD. Command: (/ (sqrt 50. valoarea unei expresii este pur [i simplu tiparit\ `n zona liniei de comand\.3) 24. TRAINING LECTII DE BAZA AUTOLISP S-expresii AutoLISP `n cadrul comenzilor AutoCAD S-expresiile AutoLISP pot fi folosite `n cadrul comenzilor AutoCAD. •37 50793936.2. deci rug\m AutoLISP-ul s\ calculeze valoarea pentru noi [i s\ returneze r\spunsul AutoCAD-ului.0) 9.5 6. nu [tim dinainte c`te repeti]ii cuprinde unitatea 0.Deoarece comanda din ARRAY accept\ numai numere `ntregi [i nu numere reale.0) 211.2 Returnarea unei valori la o comand\ AutoCAD Dac\ o comand\ AutoCAD este `n ac]iune. Obiective ~n acest capitol ve]i studia: • • Cum s\ folosi]i AutoLISP-ul `n cadrul comenzilor AutoCAD Cum s\ returna]i o valoare din AutoLISP c\tre o comand\ AutoCAD Returnarea unei valori `n linia de comand\ Valoarea unei expresii AutoLISP este trecut\ din AutoLISP `n AutoCAD ca r\spuns la linia AutoCAD `n ac]iune.

AUTODESK.1429 Command: (fix 17.1 To point: 5.35) 17.0 0. `n mijlocul unei comenzi AutoCAD. INC. pentru a calcula o valoare (`n acest caz un num\r `ntreg) care ulterior este dat\ automat comenzii `n acel punct special la secven]a de cerere a comenzii.35)) 17 Command: line From point: 1. Exemplu ~ncepe]i un desen nou.1429) 17 Command: (fix (/ 6.35)) Distance between columns: 0.0 0.35 AutoCAD creaz\ 17 elemente `n array. Tip\ri]i comenzile [i expresiile care urmeaz\.0 0.5 To point: Enter Command: array Select objects: I Select objects: Enter Rectangular or Polar array (R/P): r Number of rows (-) <1>: 1 Number of columns (III) <1>: (fix (/ 6. •38 . Command: (/ 6. Trebuie avut `n vedere faptul c\ o expresie AutoLISP a fost folosit\ interactiv.

0>: (/ 28.0 12. AutoLISP-ul calculeaz\ m\rimea razei unei racord\ri.doc R.5) Command: fillet Polyline/Radius/<Select two lines>: pick first line Select second object: pick second line Figura 10.24.5 To point: Enter Command: line From point: 10.AUTODESK. Command: line From point: 1. Doua linii cu o racordare la o raza de (/28.1 To point: 5.1 2/3/2011 •39 . Tip\ri]i expresiile [i comenzile care urmeaz\.1 To point: 6. Exemplu ~ncepe]i un desen nou.0 12.5) sau 2. M\rimea razei unei racord\ri este stabilit\ la 2.24 Recapitulare • • S-expresiile pot fi folosite ca r\spunsuri la cererile de comand\ AutoCAD. • 50793936.5 To point: Enter Command: fillet Polyline/Radius/<Select two lines>: r Enter fillet radius <1. INC. AutoLISP returneaz\ valoarea unei s-expresii folosite `n cadrul unei comenzi AutoCAD la cererea comenzii. TRAINING LECTII DE BAZA AUTOLISP ~n exemplul urmator.2.

AUTODESK. 5. 2. 4. Command: arc Center/<Start point>: 5.5 Diameter/<Radius>: !x Command: circle 3P/2P/TTR/<Center point>: 5. Desena]i dou\ cercuri concentrice: unul cu o raz\ de dou\ treimi pi [i unul cu o raz\ la jum\tate din aceast\ valoare. 3. Fixa]i c`te o copie la fiecare 15 grade de rota]ie. Amplasa]i arcul `n jurul centrului cercurilor. INC.0))) 2.0 3. Desena]i un arc cu un unghi inclus de 1 radian.5 Angle/Length of chord/<End point>: a Included angle: (/ 180 pi) Command: (setq x (* pi (/ 2. EXERCITIUL 4: EXPRESII AUTOLISP IN CADRUL COMENZILOR AUTOCAD ~n acest exerci]iu ve]i: • • Folosi func]ii aritmetice [i func]ia setq pentru a crea valori [i leg\turi simbol Folosi valorile [i simbolurile ca cererile de comand\ AutoCAD r\spunsuri la Instruc]iuni 1. ~ncepe]i un desen nou.5 Diameter/<Radius>: (/ x 2) •40 .5 Center/End/<Second point>: c Center: 3.0944 Command: circle 3P/2P/TTR/<Center point>: 5.

5 Number of items: !x Angle to fill (+=ccw. TRAINING Command: (setq x (/ 360 15)) 24 LECTII DE BAZA AUTOLISP Command: array Select objects: pick the arc 1 found Select objects: Enter Rectangular or Polar array (R/P): p Center point of array: 5.doc R. Array completat 50793936.2. -=cw) <360>:Enter Rotate objects as they are copied? <Y>Enter Figura 11.1 2/3/2011 •41 . INC.AUTODESK.

INC. Aceast\ pagin\ este l\sat\ liber\ `n mod inten]ionat.AUTODESK. •42 .

5) 4. Func]ia type returneaz\ tipurile de date ale unui obiect.123 Precizia afi[\rii si precizia intern\ Precizia implicit\ a afi[\rii unui num\r real `n AutoLISP este de 5 zecimale. de exemplu.1 2/3/2011 •43 .0.5 Pentru valori cuprinse `ntre 1. 50793936. de exemplu 4. De exemplu.5 sau 123.doc R. Nu exist\ tipuri de date care s\ reprezinte numere cu simpl\ precizie `n AutoLISP.45 sau 0. dubl\ precizie cu cel pu]in 14 zecimale. INC.AUTODESK. Toate numerele reale s`nt cu dubl\ precizie [i ele s`nt reprezentate `n AutoLISP `n aceea[i manier\ ca `n AutoCAD. TRAINING LECTII DE BAZA AUTOLISP Tipuri de date numerice AutoLISP-ul are dou\ tipuri de date numerice: numere `ntregi [i numere reale.0 [i -1.876.2. 0. aceast\ expresie returneaz\ num\rului real 1.123 sau -0. Command: (setq x 0. zero trebuie s\ precead\ punctul zecimal.0) REAL tipul de date al Numere reale AutoLISP-ul reprezint\ numerele reale `n virgul\ mobil\. Numerele reale s`nt numere introduse cu punct zecimal. Obiective ~n acest capitol ve]i studia: • • Diferen]ele dintre numerice cele dou\ tipuri de date Cum s\ determina]i tipul de date al unui obiect Determinarea tipului de date ale unui obiect Func]ia AutoLISP type se folose[te pentru a determina tipul de date al unui obiect.0 Command: (type 1.456. type cere un argument [i returneaz\ un simbol care indic\ tipul de date al argumentului. Command: (setq x 4.123) 0. Reprezentarea intern\ este `ntotdeauna men]inut\ cu cel pu]in 14 zecimale semnificative de precizie.

cere p`n\ la 3 argumente: un num\r real.647.5 Verifica]i-i valoarea [i tipul de date Command: !x 4.5 Command: (type x) Folosi]i func]ia rtos pentru a vizualiza valoarea lui x ca num\r zecimal cu o precizie de 8 zecimale. Numerele `ntregi `n AutoLISP s`nt numere `ntregi cu semn pe 32 bi]i cuprinse `ntre 2.50000000" Numere `ntregi Numerele `ntregi s`nt numere introduse f\r\ punct zecimal.147.483. cele transferate `ntre AutoLISP [i AutoCAD s`nt limitate la valori de 16 bi]i. Lega]i simbolul x de num\rul real 4.147.648 [i +2. un num\r `ntreg care reprezint\ unul dintre sistemele de unita]i AutoCAD [i num\rul de zecimale pentru [irul care va fi returnat.5) 4.5 Command: (setq x 4. Dac\ este necesar\ afi[area sau tip\rirea valorii unui num\r real cu o precizie mai mare dec`t precizia de afi[are a AutoLISP-ului. rtos Exemplu Introduce]i expresiile care urmeaz\. De[i AutoLISP-ul folose[te valori de 32 bi]i. de exemplu nu se poate transfera o valoare mai mic\ de -32. num\rul real poate fi transformat `ntr-un [ir cu ajutorul func]iei AutoLISP rtos [i apoi afi[at sau tip\rit cu precizia de afi[are dorit\. •44 .483. INC. pute]i folosi func]ia float pentru a o transforma `ntr-un num\r real `nainte de a o transfera `n AutoCAD. Dac\ folosi]i o valoare care dep\[este aceste limite.AUTODESK. Command: (rtos x 2 8) "4.767 `n AutoCAD.768 sau mai mare de +32.

50793936.2.AUTODESK.doc R. Command: !x 65535 Command: (float x) 65535.0000000000" Conversia automat\ a numerelor `ntregi AutoLISP-ul va converti numerele `ntregi `n numere reale ori de c`te ori va `nt`lni ambele tipuri de date ca argumente la func]ie. Dac\ dou\ numere `ntregi s`nt folosite ca argumente la func]ia de adunare +. Command: (type (float x)) REAL Command: (type (fix (float x))) INT Command: (rtos (float x) 2 10) "65535. Exemplu Aceast\ expresie returneaz\ un num\r `ntreg. TRAINING LECTII DE BAZA AUTOLISP Exemplu Introduce]i expresiile care urmeaz\. de un num\r `ntreg cu valoarea de Command: (setq x 64435) 65535 Verifica]i-i valoarea [i tipul de date. valoarea returnat\ a expresiei este un num\r `ntreg. Lega]i simbolul x 65535.1 2/3/2011 •45 . valoarea returnat\ este exprimat\ printr-un num\r real. INC.0 Command: (fix (float x)) 65535 Command: (type x) INT Folosi]i func]iile float [i fix pentru a returna valoarea lui x cu tipuri de date diferite [i folosi]i func]ia rtos pentru a imprima valoarea cu un format de zece zecimale. dac\ argumentele s`nt un num\r real [i un num\r `ntreg. totu[i.

•46 .0 2) REAL Recapitulare • • • • • • AutoLISP-ul are dou\ tipuri de date numerice: numere `ntregi [i numere reale.0 Command: (type (+ 1. Func]ia type returneaz\ obiect. Numerele `ntregi au valori de 32 bi]i `n AutoLISP. Numerele reale s`nt re]inute cu cel pu]in 14 zecimale de precizie. Numerele reale s`nt numere zecimale cu dubl\ precizie. Numai numerele `ntregi cu valori de 16 bi]i pot fi transferate `ntre AutoLISP [i AutoCAD. tipul de date al unui • • • • Func]ia fix transform\ un num\r real `ntr-un num\r `ntreg. Command: (+ 1 2) 3 Command: (type (+ 1 2)) INT Aceast\ expresie returneaz\ un num\r real. AutoLISP-ul va converti un num\r `ntreg `ntr-un num\r real c`nd le `nt`lne[te pe am`ndou\ `n cadrul aceleia[i expresii.AUTODESK. INC. Un num\r real trebuie `ntotdeauna s\ aib\ o cifr\ care precede punctul zecimal. Func]ia float transform\ un num\r `ntreg `ntr-un num\r real. Command: (+ 1.0 2) 3.

50793936.5 Tabelul 13. Legarea variabilelor de valori numerice. Determina valoarea returnat\ [i tipul de date numerice ale unei expresii AutoLISP Partea I 1. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 5: FOLOSIREA NUMERELOR INTREGI SI REALE ~n acest exerci]iu ve]i: • • • Consolida cuno[tin]ele despre tipurile de date ale numerelor `ntregi [i reale.0 2.2. 2.1 2/3/2011 •47 .0 4. corespunzatoare `n linia de simbol a b c x y z valoare 1 2 3 1.AUTODESK.doc R. Folosi func]ia setq pentru a lega variabile de valori cu tipuri de date numerice diferite.Introduce]i s-expresia comand\ AutoCAD.Lega]i simbolurile de valori diferite. INC.

Scrie]i r\spunsurile `n coloanele corespunzatoare 3.Determina]i valoarea returnat\ [i tipul de date pentru fiecare expresie.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. Partea aII-a 1. expresia-s (+ 1 2) (+ 1 2.0) (+ 1. returnarea valorii tip de data pentru valoarea returnata •48 . INC.AUTODESK. 2.Trebuie mai `nt`i s\ efectua]i prima parte a acestui exerci]iu. Valorile returnate si tipurile de date numerice ale expresiilor.

Punct 3-d reprezentat prin trei coordonate Lua]i.2.[i 3-dimensionale. fiecare con]in`nd un num\r real.doc R. unde primul 50793936. X axis Y axis Z axis Distance from origin Figura 12. X = 1. Y [i Z.1 2/3/2011 •49 . Obiective ~n acest capitol ve]i studia: • • Cum reprezint\ AutoLISP-ul puncte Cum s\ construi]i o list\ care reprezint\ un punct folosind at`t constante c`t [i variabile. relative [i polare. Valori de-a lungul axelor de coordonate. AutoLISP-ul reprezint\ un punct AutoCAD 3-D sub forma unei liste formate din trei numere reale. Puncte AutoCAD Un punct 3-dimensional este format din trei numere.AUTODESK.2. Imagina]i-v\ punctul 3-D sub forma a trei cutii. fiecare av`nd o valoare independent\ care corespunde unei distan]e de la originea sistemului de coordonate de-a lungul axelor X.2.3.0 3-dimensional point 1. AutoLISP-ul reprezint\ un punct sub forma unei liste de numere reale. punctul 3-D 1. Dar reprezentarea intern\ a punctului se reduce la o asociere `ntre trei numere reale.0 Y = 2. TRAINING LECTII DE BAZA AUTOLISP Puncte AutoCAD [i liste AutoLISP AutoCAD-ul folose[te coordonatele carteziene pentru a descrie punctele 2. filtre de coordonate etc. AutoCAD-ul are o gam\ larg\ de operatori pentru a descrie acest punct: Introducerea `n coordonate absolute.0 Z = 3. de exemplu. INC. ag\]area de obiecte.3 Figura 13.

3 exprimat sub forma unui obiect AutoLISP este (1. Construirea unei liste format\ din trei numere reale este un proces simplu cu ajutorul func]iei quote.0 2.AUTODESK. Cum se poate construi o astfel de list\? Exist\ dou\ func]ii pentru construirea acestor obiecte: quote [i list.0 2. recunoscut de AutoCAD ca punct 3-D. este clar: o list\ format\ din trei numere reale.2.0) 3-d im ension al poin t 1 .0). Lsta AutoLISP sub forma unui punct AutoCAD Construirea listelor de coordonate ale punctelor Rezultatul unei `ncerc\ri de a crea un obiect AutoLISP. INC. •50 .2. Punctul 1.0 3.0 2. Construirea punctelor cu func]ia quote A[a cum a]i observat mai devreme.0) returneaz\ valoarea (1.0) (1.0 3.0 3. De exemplu.3 as an A utoLISP object Figura 14. o reprezentare AutoLISP valid\ a unui punct AutoCAD. element este valoarea coordonatei X. al doilea valoarea Y [i al treilea valoarea Z.0 3. func]ia quote impiedic\ procesul de evaluare pentru singurul ei argument [i returneaz\ acest argument neevaluat.0 2. expresia (quote (1.

list 50793936. Command: (setq pt1 (quote (1.0 5.0 1. TRAINING LECTII DE BAZA AUTOLISP Exemplu Introduce]i expresiile care urmeaz\. unul dup\ altul [i le memoreaz\ valoarea temporar.0 0.0) Command: (setq pt2 (quote (5.0 1. Crea]i dou\ liste formate din c`te trei numere reale [i folosi]i listele `n linia de comand\ AutoCAD.AUTODESK.0 0. INC.0 5.0 0.0) Command: !pt1 (1.0 5.0 5.0 1. Linie de la pt1 la pt2 Construirea punctelor cu func]ia list Valoarea returnat\ a func]iei list este o list\ format\ din valorile argumentelor func]iei.1 2/3/2011 •51 .0) Command: !pt2 (5.0))) (1.0))) (5.2. evalueaz\ fiecare argument.0) Command: line From point: !pt1 To point: !pt2 To point: Enter pt2 (5.doc R. C`nd func]ia list `[i epuizeaz\ argumentele `[i compune valorile argumentelor din elemente `n cadrul unei liste [i returneaz\ lista.0) Figura 15.0) pt1 (1.0 0. Func]ia poate primi oric`te argumente dori]i.0 0.0 1.0 0.0 0.0 1.

0) Command: !pt (1. Valoare returnata de functia list •52 .0 2.0)) (1.0) return value (list 1.0 2.0 3.0 3. Command: (list 1.0 3. Command: (setq pt (list 1. Command: id Point: !pt X=1.0000 Command: (1. de exemplu. ~n timp ce lucra]i.0 3. Folosi]i func]ia list pentru a returna o list\ format\ din trei numere reale.0) (1.AUTODESK. Command: !4.0 3. nu uita]i c\ numerele reale se evalueaz\ pe sine.0 2.0 2.0 2.0 evaluates to 2.0 3.0000 Y=2. INC.0 2.0000 Z=3.0 2.5.0 evaluates to 3.0) Folosi]i simbolul pt ca intrare la comanda AutoCAD ID [i verifica]i dac\ AutoCAD-ul recunoa[te valoarea simbolului ca punct valid 3-D.0 Figura 16.5 returneaz\ 4.0) Folosi]i func]ia setq pentru a lega simbolul pt la o list\ cu trei numere reale.0 3.0) evaluate all arguments and return a list of values evaluates to 1. Exemplu Introduce]i expresiile care urmeaz\.

0 3. or z = 3.1 2/3/2011 •53 .0.0 Figura 17.0) Value of y is 2. TRAINING LECTII DE BAZA AUTOLISP Construirea punctelor din variabile cu func]ia list Deoarece func]ia list `[i evalueaz\ argumentele.0 2.0 [i 3. or y = 2. INC. Valoare returnata de functia list 50793936.0. Bind x to 1.0) Value of z is 3.doc R.0 evaluates to 2. S\ admitem c\ ave]i trei variabile x.0 z care s`nt legate de (setq x 1. pute]i folosi simboluri sau variabile ca argumente ale func]iei list pe/sau `n loc de numere reale.0 (setq z 3.0 (setq y 2.0) Value of x is 1.0.0) (1.0 Bind z to 3.0 3.Legarea variabilelor de numere reale cu functia setq Atunci expresia (list x y z) va returna aceea[i valoare ca [i expresia (list 1.0 x y z ) Figura 18.AUTODESK.0 Bind y to 2. y [i numerele reale 1.0 2. or x = 1.0. 2.0.0 evaluates to 3.2.0) return value (list evaluate all arguments and return a list of values evaluates to 1.

0000 Command: •54 .0) 3.0000 Y=2.0) 1.0 Folosi]i variabilele ca argumente la func]ia list.0) Command: id Point: !pt X=1.0 2.0 Command: !y 2.0 Command: (setq y 2. Command: (list x y z) (1. Exemplu Introduce]i expresiile care urmeaz\.0 2. y [i z de trei numere reale Command: (setq x 1.0000 Z=3.0 Command !x: 1.0) 2.0 Command: (setq z 3. Command: (setq pt (list x y z)) (1.0 3.0 3. INC.AUTODESK. Lega]i simbolurile x.0) Command: !pt (1.0 3.0) Memora]i lista `ntr-o variabil\ numit\ pt [i folosi]i-o `n cadrul comenzii AutoCAD.0 Command: !z 3.0 2.

TRAINING LECTII DE BAZA AUTOLISP Recapitulare • • • • • • AutoCAD-ul folose[te sistemul de coordonate carteziene 3-D pentru a specifica punctele.doc R. AutoLISP-ul reprezint\ un punct AutoCAD 2-D sub forma unei liste format\ din dou\ numere reale. Un punct AutoCAD 3-D este reprezentat sub forma unei liste cu trei numere reale.2. 50793936. Func]ia list poate construi o list\ de numere din constante sau din variabile. Un punct AutoCAD este reprezentat `n AutoLISP sub forma unei liste de numere reale.1 2/3/2011 •55 . Func]ia quote poate construi o list\ de numere din constante. INC.AUTODESK.

Expresia (setq x 1.0)) (setq pt2 (quote (5. INC. Folosi liste ca r\spunsuri la cererile de comand\ AutoCAD.0) (list 1.0 Tabelul 15. 2. Dac\ o legatur\ simbol apare `n cadrul expresiei.0))) !pt2 (quote (x y z)) (setq notapoint (quote (x y z))) !notapoint 1. Introduce]i expresiile `n coloana din st`nga.AUTODESK. scrie]ii valoarea `n coloana din dreapta.0 2.0 0. EXERCITIUL 6: UTILIZAREA LISTELOR DE NUMERE CA PUNCTE AUTOCAD ~n acest exerci]iu ve]i: • Consolida cuno[tin]ele despre rela]ia dintre listele AutoLISP formate din dou\ sau trei numere reale [i punctele AutoCAD. Crearea punctelor din liste de numere •56 .0 6. Crea liste ale variabilelor coordonatelor pentru a reprezenta puncte. 3.0 0.0 0.0) (setq z 0.0) (list x y z) (setq pt1 (list x y z)) !pt1 (quote (5.0) (setq y 2.0 6.0 Valoarea expresiei Simbol de atribuire x = 1. Lega variabile pentru a reprezenta coordonatele unui punct. Scrie]i valoarea returnat\ a fiecarei expresii `n coloana din mijloc. • • • Partea I 1.

doc R. INC.2.1 2/3/2011 •57 . Legaturile simbol se bazeaz\ pe partea I a acestui exerci]iu. TRAINING LECTII DE BAZA AUTOLISP Partea a II-a 1. Linie si cerc folosind variabilele pt1 si pt2 50793936.6.AUTODESK. Crea]i o Linie [i un Cerc folosind variabilele legate de liste formate din numere reale a[a cum s`nt punctele pentru comenzile AutoCAD. 2. ~n acela[i desen din partea I introduce]i expresiile care urmeaz\.0 Figura 19.2. 3. Command: line From point: !pt1 To point: !pt2 To point: Enter Command: circle 3P/2P/TTR/<center point>: 2p First point on diameter: !pt1 Second point on diameter: !pt2 5.0 1.

•58 . INC.AUTODESK. Aceast\ pagin\ este l\sat\ liber\ `n mod inten]ionat.

separarea listelor este o cerin]\ fundamental\ `n aceast\ opera]ie. Cum s\ folosi]i func]iile car [i edr pentru separarea listelor. Determina]i dac\ un punct se afl\ `ntr-o anumit\ regiune 2-D sau 3-D a unui sistem de coordonate carteziane. Structura intern\ a unei liste O list\ AutoLISP este reprezentat\ `n memoria computerului sub forma unui arbore binar. Dac\ am avea un set instruc]iuni pentru extragerea fiec\rui element dintr-o list\. numai G\si]i punctul de mijloc dintre oricare ar fi dou\ puncte ( nu numai punctele finale ) ale unei linii sau ale unui cerc. atunci am putea realiza mult mai u[or programe AutoLISP. Primul nod de sus al unui arbore binar se nume[te nodul radacin\. Nodul este una din unit\]ile fundamentale pentru stocarea memoriei `n AutoLISP.2. TRAINING LECTII DE BAZA AUTOLISP Separarea listelor Av`nd instruc]iuni pentru construirea listelor . Cum s\ separa]i liste care reprezint\ puncte `n AutoCAD [i cum s\ specifica]i puncte prin crearea unor liste noi bazate pe punctele existente. INC. Orice punct de pe arborele binar unde poate ap\rea o ramifica]ie se nume[te nod. 50793936. • De vreme ce acest lucru necesit\ mai mult dec`t abilitatea de a separa liste. • • Desena]i un dreptunghi cunosc`nd coordonatele col]urilor opuse.doc R. Obiective ~n acest capitol ve]i studia: • • • • Cum s`nt reprezentate listele `n memoria computerului sub forma unui arbore binar.func]iile list [i quote .AUTODESK. Cum s`nt listele reprezentate grafic.ne-ar fi de folos s\ avem [i c`teva instruc]iuni pentru separarea listelor.1 2/3/2011 •59 .

Nodul radacina si primul set de ramificatii pentru o lista.0 2.0 2.0 (2.0 3. `ncep`nd de la nodul r\d\cin\. De exemplu prima ramifica]ie a listei (1.0 3.0 3.0 2. Fiecare nod se desface `n dou\ ramifica]ii reprezent`nd diferite p\r]i ale listei: primul element al listei [i lista cu primul element `ndep\rtat. INC.0 3. Nodul radacina si primul set de ramificatii pentru lista (1.AUTODESK.0) Figura 21. (1.0) •60 . Structura unei liste AutoLISP este desf\cut\ nod cu nod.0) 1. root of list first element list without first element Figura 20.0) ar putea fi reprezentat\ astfel.

Primul element al listei se nume[te car-ul listei.0 3.1 2/3/2011 •61 .0 (2. root of list car cdr Figura 23. Lista f\r\ primul ei element se nume[te cdr-ul listei. (1.0 (3.0 () Figura 22.0 3.0) 2.0 2.AUTODESK.2. 50793936.0) AutoLISP-ul are apelative speciale pentru cele dou\ par]i ale ramifica]iei listei. Partile car si cdr de la nodul radacina al listei. INC.0 2.doc R.0 3. TRAINING LECTII DE BAZA AUTOLISP Subdivizarea de-a lungul ramifica]iei arborelui continu\ p`n\ ce partea dreapt\ a ramifica]iei se termin\ cu lista goal\ sau nil.0) 3. Arbore binar complet pentru lista (1. Ramifica]ia st`ng\ este partea car a listei iar ramifica]ia dreapt\ este partea cdr.0) 1.

AUTODESK, INC.

Reprezentarea unei liste cu trei elemente atomice prin car [i cdr, c\reia `i este atribuit simbolul x, ar ar\ta dup\ cum urmeaz\. Dac\ o list\ format\ din unul sau mai multe elemente se afl\ la oricare din nodurile arborelui, este urmat\ de o ramifica]ie. Partea st`ng\ a ramifica]iei este carul listei la care se refer\ nodul iar partea dreapt\ este cdr-ul listei la care se refer\ nodul.
root of x

(car x)

(cdr x)

(car (cdr x)) (cdr (cdr x))

(car (cdr (cdr x)))

(cdr (cdr (cdr x))) or ()

Figura 24. Reprezentarea completa a unei liste cu trei atomi ca elemente cu car si cdr.

S\ combin\m graficul care reprezint\ arborele binar pentru valorile simbolului pt, care este legat de lista (1.0 2.0 3.0) cu ramifica]iile car [i cdr ale arborelui.
root of list

pt (1.0 2.0 3.0)

(car of list)

(cdr of list)

(car pt) 1.0

(cdr pt) (2.0 3.0)

(car (cdr of list))

(cdr (cdr of list))

(car (cdr pt)) 2.0

(cdr (cdr pt)) (3.0)

(car (cdr (cdr of list)))

(cdr (cdr (cdr of list)))

(car (cdr (cdr pt))) 3.0

(cdr (cdr (cdr pt))) ()

Figura 25. Grafic combinat pentru simbolul pt, legat de lista (1.0 2.0 3.0).

•62

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

Recapitulare
• • • • • Listele s`nt reprezentate `n memorie sub forma unui arbore binar. Primul element al listei este car-ul listei. Lista dup\ ce primul element este `ndep\rtat reprezint\ cdr-ul listei. Func]iile car [i cdr formeaz\ ramifica]iile car [i cdr ale listei. O ramifica]ie cdr a unui arbore binar se termin\ `n nil sau lista goal\.

50793936.doc R.2.1 2/3/2011

•63

AUTODESK, INC.

EXERCITIUL

7: GRAFUL VALORILOR INTR-UN ARBORE BINAR ~n acest exerci]iu ve]i: • • Consolida cuno[tin]ele listelor `n memorie. despre reprezentarea

Completa un grafic a valorilor unei liste, reprezentat sub forma unui arbore binar.

Instruc]iuni
1. Termina]i graful complet al unui arbore binar pentru variabila alst. 2. alst este legat\ de lista (8.0 3.0 0.0). 3. Ar\ta]i valoarea fiecarui nod din grafic.
(8.0 3.0 0.0)

8.0

?

?

?

? Figura 26. Completarea grafului binar

?

•64

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

EXERCITIUL

8: GRAFUL EXPRESIILOR INTR-UN ARBORE BINAR ~n acest exerci]iu ve]i: • • Consolida cuno[tin]ele 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.

Instruc]iuni
1. Termina]i graficul complet al unui arbore binar pentru variabila xlst. 2. xlst este legat\ de lista (1.0 (2.0 3.0) 4.0). 3. Ar\ta]i valoarea fiec\rui nod din grafic 4. Ar\ta]i expresia care restabile[te fiecare valoare din grafic. 5. Marca]i ramifica]iile car [i cdr ale unui arbore. 6. Observa]i c\ elementele acestei liste s`nt formate din doi atomi [i o list\.

50793936.doc R.2.1 2/3/2011

•65

AUTODESK, INC.
xlst (1.0 (2.0 3.0) 4.0)

1.0 (car xlst)

((2.0 3.0) 4.0) (cdr xlst)

(2.0 3.0) (car (cdr xlst))

? (cdr (cdr xlst))

? (car (car (cdr xlst)))

? ?

? ?

? ?

? ?

? ?

Figura 27. Completarea graficul binar

•66

0 Command: !x 1.2.0 2.0) cdr Func]ia cdr returneaz\ o list\ [i elementele ei cu excep]ia primului element. Nici una dintre ele nu afecteaz\ legarea argumentului ei ceea ce este un mod curios de a spune despre (car x) c\ poate returna o valoare diferit\ de x dar nu va schimba valoarea lui x.0 0.AUTODESK. Singurul argument al func]iei car trebuie s\ fie o list\. 50793936. Command: (setq pt (list 1.0 2.0 0. TRAINING LECTII DE BAZA AUTOLISP Func]iile car si cdr Func]iile car [i cdr s`nt func]ii non-destructive. INC. Exemplu Introduce]i expresia care urmeaz\. cu alte cuvinte `ndep\rteaz\ primul element al listei `n afara valorii lui returnate. iar lista trebuie s\ aib\ unul sau mai multe elemente. Folosi]i func]ia car pentru a returna coordonata x `n list\ (primul element) [i lega]i variabila x de acea valoare.0)) (1. Lega]i variabila pt la o list\ cu trei numere reale.0 Command: (setq x (car pt)) 1.0) Command: (car pt) 1. car Func]ia car returneaz\ primul element al listei.0 2.0 2.doc R.0) Command: !pt (1.0 Command: !pt (1.0 0.1 2/3/2011 •67 .0 0.

known point puncte puncte [i Y a forma din se ale noi calculated point calculated point known point Figura 28.0 2. •68 . Celelalte dou\ calculeaz\ prin combinarea cordonatelor X punctelor cunoscute `n diverse moduri pentru perechi de coordonate.0 0.0 2. Valorile X si Y pentru colturile unui dreptunghi.0 0. INC.0 2.0) Command: !lyzlst (2. Command: (cdr pt) (2. Lega]i variabila pt de o list\ cu trei numere reale.0 0.0 0.0 0.AUTODESK.0) Command: !pt (1. Command: (setq pt (list 1.0 0.0) Command: (setq yzlst (cdr pt)) (2. Exemplu Introduce]i expresiile care urmeaz\.0 2.0)) (1.0) Command: !pt (1.0 0.0) Folosi]i func]ia cdr pentru a returna o list\ f\r\ primul element [i lega]i variabila yzlst de acea valoare.0) Construirea unui dreptunghi cunosc`nd col]urile opuse ~n figurile care urmeaz\ cunoa[tem dou\ col]urile unui dreptunghi.

doc R.1 2/3/2011 •69 .2. INC.AUTODESK. TRAINING LECTII DE BAZA AUTOLISP Aceast\ pagin\ este l\sat\ liber\ `n mod inten]ionat 50793936.

Expresiile folosite pentru returnarea coordonatelor X.AUTODESK. coordinate X Y Z pt1 (car pt1) (car (cdr pt1)) (car (cdr (cdr pt1))) pt2 (car pt2) (car (cdr pt2)) (car (cdr (cdr pt2))) Tabelul 16.0 5.Y pentru colturile dreptunghiului Considera]i c\ dou\ variabile s`nt legate de cele dou\ liste formate din numere reale.Y1 X2. Figura care urmeaz\ reprezint\ coordonatele punctelor `n func]ie de variabilele X [i Y. X1.Y1 X1. •70 .0 X2.0 0.0 1. Y si Z.Y2 0.0)) (setq pt2 (list 10.0)) Acest tabel arat\ func]iile necesare pentru returnarea valorilor X. Valorile X. INC. (setq pt1 (list 1. Y [i Z din fiecare punct.0 0.Y2 Figura 29.

1 2/3/2011 •71 . TRAINING LECTII DE BAZA AUTOLISP Figura urm\toare exprim\ punctele de coordonate sub forma de expresii AutopLISP.0 pt2 Figura 30.doc R. INC. pt1 (list (car pt2) (car (cdr pt1))) (list (car pt1) (car (cdr pt2))) 0. bazate pe cunoa[terea a dou\ puncte pt1 [i pt2. acestea s`nt tratate ca puncte 2-dimensionale. Calcularea colturilor unui dreptunghi 50793936. Pentru a simplifica lucrurile.2.AUTODESK.

0 Command: (list (car pt1) (car (cdr pt3))) (1.0 1. Folosi]i func]ia list pentru a le combina `n alte dou\ puncte ale dreptunghiului. Command: (setq pt1 (list 1.0)) (10.0) Command: (setq pt3 (list 10.0)) (1. Exemplu Introduce]i expresiile care urmeaz\.0 1.0 5.0 1.0 Command: (list (car pt3) (car (cdr pt1))) (10.0 1.0 5.0) Folosi]i func]iile car [i cdr pentru a extrage valorile X [i Y ale punctelor cunoscute.0 Command: (car (cdr pt3)) 1.0 5.0) •72 .0 Command: (car (cdr pt1)) 5.0) Command: !pt3 (10.0) Command: !pt1 (1.AUTODESK.0 5.0) Command: (setq pt2 (list (car pt1) (car (cdr pt3)))) (1. Command: (car pt1) 1.0) Command: !pt2 (1.0 1.0) Command: (car pt3) 10.0 1. INC.

doc R.0 5.2.0 5.5 pt2 1. Exist\ func]ii standard la care se face apel pentru stabilirea componentelor X. Linia de comand\ AutoCAD va completa automat valoarea Z a punctului bazat\ pe valoarea curent\ a in\l]imii (elevation). Punctele s`nt 2-dimensionale. TRAINING LECTII DE BAZA AUTOLISP Command: (setq pt4 (list (car pt3) (car (cdr pt1)))) (10.0) Desena]i dreptunghiul folosind linia de comand\ AutoCAD.0) Command: !pt4 (10.1 0. Command: line From point: !pt1 To point: !pt2 To point: !pt3 To point: !pt4 To point: close pt1 1.5 pt4 10. Localizarea colturilor unui dreptunghi Recapitulare • • • Func]ia car returneaz\ listei.0 pt3 10. Y [i Z ale unui punct reprezentat printr-o list\.1 2/3/2011 •73 . primul element al unei Func]ia cdr returneaz\ o list\ cu excep]ia primului element.AUTODESK.1 Figura 31. INC. 50793936.

8 [i 3.AUTODESK. Lega]i o variabil\ pt2 de o list\ format\ din dou\ numere reale 7. Crea puncte formate din liste [i le ve]i lega de variabile. INC. pt1 = pt1x.2. mpty Valorile X [i Y ale lui mpt pot fi exprimate aritmetic dup\ cum urmeaz\. Crea puncte formate din liste bazate pe valorile X [i Y din alte puncte formate din liste. Scrie]i un set de expresii care leag\ variabila midpt de punctul care se afl\ la mijlocul distan]ei dintre punctele pt1 [i pt2. Lega]i o variabil\ pt1 de lista format\ din dou\ numere reale 1. Matematica problemei Dou\ puncte 2-dimensionale [i punctul care se afl\ la mijlocul distan]ei dintre ele pot fi exprimate logic `n func]ie de X [i Y dup\ cum urmeaz\. •74 . Dupa ce a]i verificat expresiile `n editorul AutoCAD scrie]ile mai jos. EXERCITIUL 9: LUCRUL CU LISTE DE PUNCTE ~n acest exerci]iu ve]i: • • • Consolida cuno[tin]ele despre func]ii care separ\ liste [i func]ii care creaz\ liste. mptx = (pt1x + pt2x)/2 mpty = (pt1y + pt2y)/2 Instruc]iuni Scrie]i un set de expresii AutoLISP care execut\ urmatoarele comenzi `n ordine 1.5 [i 8. pt2y midpt = mptx. 3.9. pt1y pt2 = pt2x. 2.

doc R.1 2/3/2011 •75 .0 1.AUTODESK.0)) (quote (5. Obiective ~n acest capitol ve]i studia: • • • • Cum s\ chema]i o comand\ AutoCAD direct din AutoLISP.0)) "") nil Folosirea argumentelor variabile Command: (setq pt1 (list 1. [irul "" este folosit ca argument.2.1" "5. Func]ia command Func]ia command apeleaz\ func]iile AutoCAD din AutoLISP. TRAINING LECTII DE BAZA AUTOLISP Comenzi AutoCAD si AutoLISP Comenzile AutoCAD pot fi chemate direct din AutoLISP. s-expresiile constante [i variabile ca r\spunsuri la cererile de comand\. Cum s\ evita]i lucrul c`nd traduce]i un program folosind comenzile `n limba englez\ indiferent de versiunea AutoCAD. Aceasta este reprezentarea AutoLISP a [irului nul pe care AutoCAD-ul o interpreteaz\ ca un return `n cadrul func]iei apelative command . De exemplu aceste trei seturi de expresii traseaz\ aceea[i entitate Line.0 5. Func]ia command accept\ un argument de tip [ir care trebuie s\ fie numele unei comenzi AutoCAD [i oricare alte argumente op]ionale care ar fi `n mod normal introduse `n linia de comand\. Sintaxa func]iei AutoLISP command .0) pt2 (list 5.0 5.5" "") nil Folosirea argumentelor constante Command: (command "line” (quote (1. Cum s\ folosi]i [irul AutoLISP.0)) (5.0 1.0) 50793936. Folosirea argumentelor de tip [ir Command: (command "line" "1. INC. sexpresiile AutoLISP pot fi folosite ca r\spunsuri la cererile de comand\.0 5. ~n cazurile `n care este nevoie de un return ca r\spuns la o comand\. Func]ia command accept\ [iruri [i variabile AutoLISP ca argumente.

Efectul secundar al unei expresii command este mult mai interesant dec`t valoarea returnat\.0) Command: (setq pt2 (list 5. Command: (setq pt1 (list 1.1 la 5.AUTODESK. Efectul secundar al apel\rii unei func]ii setq este pentru a crea un nou simbol de legatur\ sau pentru a atribui o valoare la o variabil\.0) Apela]i la comanda LINE [i folosi]i variabilele ca argumente.0 1.0 1. Command: (command "line" pt1 pt2"") nil Efecte secundare Func]ia command returneaz\ `ntotdeauna nil.1 Figura 32.5 •76 .0 5. Linie de la 1. Lega]i dou\ variabile de dou\ puncte 2-dimensionale. Efectul secundar al apel\rii unei func]ii command este de a realiza o comand\ AutoCAD care modific\ fi[ierul grafic `ntr-un anume fel. Introduce]i expresiile care urmeaz\.5 1.0 5. Un efect secundar al unei expresii AutoLISP reprezint\ o schimbare `n starea programului care se produce datorit\ unei func]ii de apelare. Command: (command "line" pt1 pt2 "") nil 5. INC.0)) (1. Exemplu ~ncepe]i un desen nou.0)) (5.

2.5) Command: (command "circle" "2p" pt1 pt2) Figura 33. Command: circle 3P/2P/TTR/<center point>: !pt1 Diameter/<Radius>: 0.doc R. Folosi]i variabilele pt1 [i pt2 de la exerci]iul anterior ca puncte reprezent`nd centrele a dou\ cercuri [i ca puncte finale ale diametrului unui cerc.AUTODESK. Cercuri definite de pt1 si pt2 50793936. INC.1 2/3/2011 •77 .5 Command: (command "circle" pt2 0. TRAINING LECTII DE BAZA AUTOLISP Exemplu Introduce]i expresiile care urmeaz\.

5) Figura 34. Exemplu Folosi]i valorile lui pt1 [i pt2 de la exerci]iul anterior.5 Command:(comand”arc” pt2 ”e” pt1 ”r” 3.AUTODESK.5. Desena]i dou\ arce folosind pt1 [i pt2 ca puncte finale [i o valoare a razei de 3. INC. Introduce]i expresiile care urmeaz\. Command: arc Center/<Start point>: !pt1 Center/End/<Second point>: e End point: !pt2 Angle/Direction/Radius/<Center point>: r Radius: 3. Arce definite de pt1 si pt2 •78 .

Toate versiunile AutoCAD indiferent de limba surs\ p\strez\ un menu de op]iuni [i comenzi `n engleza american\ `mpreun\ cu un menu `n limba surs\. • {irul nul sau "" este tratat ca un return de c\tre func]ia command. prefa]ati [irul cu un caracter “subliniere” sau cu "_". INC.AUTODESK.doc R.5" "_c") Recapitulare • Functia command permite apelarea comenzilor AutoCAD din AutoLISP. Fiecare versiune AutoCAD tradus\ `ntr-o anumit\ limb\ pastreaz\ un menu de op]iuni [i comenzi din limba surs\.1 2/3/2011 •79 . Command: (command "_line" "1. De exemplu versiunea german\ AutoCAD pastreaz\ un menu de op]iuni [i comenzi `n limba german\ astfel `ncit cei care o folosesc `[i pot introduce comenzile `n german\. TRAINING LECTII DE BAZA AUTOLISP Globalizarea comenzilor Toate versiunile AutoCAD-ului vor accepta comenzile [i op]iunile din limbajul american [i englezesc indiferent de versiunea limbii surs\. • Argumentele func]iei command s`nt numele comenzii AutoCAD urmate de r\spunsurile la cererile de comand\.1" "1. De exemplu acesta este modul `n care se apeleaz\ la linia de comand\ `n toate versiunile AutoCAD.1" "5. Pentru a folosi versiunea englezeasc\ a comenzilor [i op]iunilor AutoCAD. 50793936.2. Acest lucru permite utilizatorului s\ scrie o aplica]ie AutoLISP care poate fi folosit\ `n toate versiunile de limbaj ale AutoCAD-ului f\r\ a traduce func]iile command `n limba surs\. • Expresiile AutoLISP s`nt acceptate ca r\spunsuri la cererile de comand\ AutoCAD `n cadrul func]iei command . • Caracterul subliniere poate fi prefa]at `n cadrul unei instruc]iuni de tip command `n engleza american\ [i va func]iona `n toate versiunile de limbaj ale AutoCAD-ului.

AUTODESK, INC.

EXERCITIUL

10: TRANSFORMAREA COMENZILOR IN AUTOLISP ~n acest exerci]iu ve]i: • • • Transforma comenzile AutoCAD script `n expresii AutoLISP. Scrie expresiile. Testa expresiile `n editorul AutoCAD.

Instruc]iuni
1. ~ncepe]i un desen nou. 2. Transforma]i comenzile [i cererile AutoCAD `n expresii ale func]iei command. Scrie]i r\spunsurile `n coloana din dreapta. 3. Testa]i expresiile `n editorul AutoCAD.

Comenzi si cereri
Command: line From point: 1,1 To point: 5,5 To point: ENTER

Expresii AutoLISP
(command "line" "1,1" "5,5" "") or (command "line" '(1.0 1.0) '(5.0 5.0) "")

Command: circle 3P/2P/TTR/<Center point>: 3,3 Diameter/<Radius>: 0.5

Command: circle 3P/2P/TTR/<Center point>: 2p First point on diameter: 1,1 Second point on diameter: 5,5

Command: arc Center/<Start point>: 2,1 Center/End/<Second point>: c Center: 1,1 Angle/Length of chord/<End point>: l Length of chord: 1.414 Tabelul 17. Traducerea comenzilor in AutoLISP

•80

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

EXERCITIUL

11: APELUL COMENZII POLYLINE DIN AUTOLISP ~n acest exerci]iu: • • • Ve]i folosi AutoLISP-ul pentru a executa o comand\ AutoCAD [i pentru a desena o nou\ entitate. Ve]i apela comanda AutoCAD PLINE din AutoLISP. Ve]i scrie un set de expresii AutoLISP pentru a desena o polilinie rectangular\.

Instruc]iuni
1. ~ncepe]i un desen nou. 2. Crea]i 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. Folosi]i variabilele pt1 [i pt3. 4. Scrie]i un set de expresii ce vor desena un dreptunghi, folosind comanda "Polyline" op]iunea 2-D `nchis\ de la punctul 1,1 la 11,1 la 11,8 la 1,8, folosind variabilele pt1 [i pt3. 5. Folosi]i func]iile car, cdr, list [i command dac\ este nevoie. 6. Testa]i expresiile `n AutoCAD. 7. Scrie]i-le mai jos.

50793936.doc R.2.1 2/3/2011

•81

AUTODESK, INC.

Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat.

•82

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

Selec]ia interactiv\ a punctelor
AutoLISP-ul dispune de func]ii care opresc evaluarea unei expresii [i permit utilizatorului s\ stocheze puncte [i distan]e folosind metodele standard AutoCAD de specificare a acestor valori. Punctul sau distan]a devine valoarea returnat\ a expresiei.

Obiective
~n acest capitol ve]i studia: • • • • • Cum s\ cere]i informa]ii utilizatorului `n cadrul unui program AutoLISP. Cum s\ cere]i utilizatorului. coordonatele unui punct

Cum s\ cere]i o distan]\ utilizatorului. Cum s\ cere]i utilizatorului valoarea pe care o dori]i. Cum s\ folosi]i puncte [i distan]e de la utilizator `n cadrul func]iilor AutoLISP command [i comenzilor AutoCAD.

Puncte si distan]e
Func]ia getpoint permite utilizatorului s\ selecteze un punct folosind orice metode standard AutoCAD de selectare a punctelor: selectare grafic\, coordonate absolute, relative sau relative polare, ag\]area obiectelor, filtre de coordonate sau accesarea ultimului punct. Func]ia getdist permite utilizatorului s\ specifice o distant\ prin introducerea valorii sau selec]iond dou\ puncte. Este acela[i mecanism folosit de fiecare comand\ AutoCAD care cere utilizatorului o distan]\.

getpoint
Func]ia getpoint folose[te serviciile AutoCAD pentru a permite utilizatorului s\ introduc\ un punct. Punctul selectat de utilizator reprezint\ valoarea returnat\ a expresiei. AutoLISP-ul returneaz\ punctul sub forma unei liste format\ din trei numere reale: valorile coordonatelor X, Y [i Z.
Command:(getpoint) 1,1,0 (1.01.00.0)

Func]ia getpoint este folosit\ pentru a ob]ine un punct de la utilizator `n cadrul unei expresii AutoLISP. De exemplu ar putea fi nevoie s\ cere]i utilizatorului din cadrul unui

50793936.doc R.2.1 2/3/2011

•83

AUTODESK, INC.

program AutoLISP, puncte care vor fi folosite apoi ca puncte finale ale unei linii.

•84

Command: ( setq pt1 (getpoint)) pick a point Command: (setq pt2 (getpoint)) pick a point Command: (command “line” pt1 pt2””) Exemplu Introduce]i expresiile care urmeaz\. TRAINING Command: (setq pt1 (getpoint)) 1.5 (5.doc R.0 0.0 5.2.1 2/3/2011 •85 . nu s`nte]i constr`ns s\ introduce]i coordonatele exacte ale punctului.AUTODESK.0 1. Command: (setq pt1 (getpoint )) pick a point Command: (setq pt2 (getpoint)) @2<45 50793936.0) Command: (command ”line” pt1 pt2 “”) LECTII DE BAZA AUTOLISP Deoarece toate serviciile AutoCAD de specificare a punctelor s`nt disponibile `n timpul apel\rii func]iei getpoint. INC.0 0. Lega]i variabilele pt1 [i pt2 de puncte pe care le selecta]i cu mouse-ul `n cadrul unei func]ii de apelare getpoint [i folosi]i variabilele `ntr-o comanda LINE. Command: (setq pt1 (getpoint)) <pick a point with the mouse> <list of three reals returned> Command: (setq pt2 (getpoint)) <pick a point with the mouse> <list of three reals returned> Command: (command “line “ pt1 pt2 “”) Exemplu Introduce]i expresiile care urmeaz\. Lega]i variabila pt1 de un punct pe care `l selecta]i cu mouse-ul [i variabila pt2 de un punct descris de coordonatele polare relative.1 (1.0) Command: (setq pt2 (getpoint)) 5. Folosi]i variabilele `n linia de comand\.

41421 Func]ia getdist prime[te un argument op]ional.0)) (1.2 1. Command: (command “line” pt1 pt2” “) Exemplu Introduce]i expresiile care urmeaz\. Valoarea returnat\ este un num\r real: distan]a 3-D `ntre dou\ puncte. ~n acest caz func]ia cere utilizatorului un singur punct. Command: (setq pt1 (getpoint)) pick a point Command: (command “circle” pt1 0. Lega]i variabila pt1 de un punct pe care `l selecta]i cu mouse-ul `n cadrul unei func]ii de apelare getpoint [i folosi]i variabila `ntr-o comand\ CIRCLE. Command: (setq pt1 (list 1.0 1. punctul de baz\ de la care se m\soar\ distan]a.41421 •86 .5) getdist Func]ia getdist cere utilizatorului dou\ puncte.0 0. INC.41421 Command: !dst1 1. Command: (setq dst1 (getdist)) Second point: 2.0) Command: (setq dst1 (getdist pt1)) 2.0 0.41421 Command: !dst1 1.AUTODESK.0 1.2 1.

0 5. Command: (setq cen (getpoint)) pick a point Command: (setq rad (getdist cen)) pick a point Command: (command “circle” cen rad) 50793936.AUTODESK.5 (5. Command: (setq pt1 (getpoint)) 5. Lega]i variabila cen de un punct pe care `l selecta]i cu mouse-ul.0) Command: (setq rad (getdist)) pick two points Command: (command “circle” pt1 rad) Exemplu Introduce]i expresiile care urmeaz\. TRAINING LECTII DE BAZA AUTOLISP Figura 35.0 Exemplu Introduce]i expresiile care urmeaz\.doc R. Functia getdist “drag” din punctul initial 1. INC.0 0. Lega]i variabila pt1 de un punct folosind coordonatele absolute [i variabila rad de distan]a dintre dou\ puncte pe care o selecta]i cu mouse-ul.2.1. Folosi]i variabila `n comanda CIRCLE.1 2/3/2011 •87 . Folosi]i variabilele `n comanda CIRCLE. Lega]i variabila rad de distan]a dintre cen [i un punct pe care `l selecta]i cu mouse-ul.

41421 Recapitulare • • • • • Func]ia getpoint returneaz\ utilizator.0 1.2 1. Command: (getpoint “Point:”) Point: 1. Ambele func]ii primesc pentru utilizator. argumente op]ionale Utilizatorul poate aplica oricare dintre metodele AutoCAD de specificare a punctelor [i distan]elor la o cerere AutoLISP pentru un punct sau o distan]\.1 (1.0 0. se cere automat punct "Second point:". Dialog cu utilizatorul Func]iile getpoint [i getdist primesc [i argumente op]ionale: un [ir de text care este afi[at `n zona liniei de comand\ ca o cerere pentru utilizator. acesta reprezint\ o cerere.0) Second point: 2.0)) “To point:”) To point: 2.2 1.0 1. •88 . Command: (getdist (quote (1.0 0. al doilea Command: (getdist “From point:”) From poin: 1. atunci se poate proceda la cererea celui de-al doilea argument.41421 Deoarece getdist prime[te dou\ cereri op]ionale.1 (1.0 1.AUTODESK.0) Dac\ getdist cere dou\ puncte. Dac\ primul argument al func]iei getdist este un [ir. Dac\ primul argument este un punct. INC. un punct de la Func]ia getdist returneaz\ o distan]\ dat\ sub forma unui num\r real de la utilizator.0 0. ordinea [i tipul de date `n acest caz s`nt importante.

TRAINING LECTII DE BAZA AUTOLISP 50793936.2.doc R.1 2/3/2011 •89 . INC.AUTODESK.

Testa]i-le `n editorul AutoCAD apoi scrie]i-le mai jos. EXERCITIUL 12: CEREREA SI FOLOSIREA PUNCTELOR DE LA UTILIZATOR ~n acest exerci]iu ve]i: • • Scrie expresiile care cer utilizatorului puncte [i distan]e. •90 . Testa]i-le `n editorul AutoCAD apoi scrie]i-le mai jos. 2. Cere]i utilizatorului un punct centru [i atribui]i valoarea unei variabile numite cen. Scrie comenzile de desenare `n AutoCAD. Partea a II-a Instruc]iuni Scrie]i un set de expresii. 1.AUTODESK. 1. 3. Cere]i utilizatorului patru puncte. Desena]i un cerc cu centrul cen [i raza rad. Cere]i utilizatorului distan]a de la variabila cen [i atribui]i valoarea unei variabile numite rad. INC. Atribui]i-le variabilelor pt1 prin pt4. Trasa]i o polilinie 2-D `nchis\ `ntre cele patru puncte. 3. 2. Partea I Instruc]iuni Scrie]i un set de expresii.

3. 50793936. TRAINING LECTII DE BAZA AUTOLISP Partea a III-a Instruc]iuni Scrie]i un set de expresii.doc R. 4.1 2/3/2011 •91 . cdr [i list. Atribui]i-le variabilelor pt1 [i pt2.AUTODESK. INC. Folosi]i pt1 [i pt2 pentru col]urile opuse ale poliliniei. Desena]i o polilinie 2-D `nchis\. Cere]i utilizatorului dou\ puncte. Calcula]i celelalte dou\ puncte din pt1 [i pt2 folosind func]iile car. 5. 2.2. 1. Testa]i-le `n editorul AutoCAD apoi scrie]i-le mai jos.

•92 . INC.AUTODESK. Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat.

Aici g\se[te subprogramul setq [i reface leg\tura. Utilizatorul nu le poate schimba. TRAINING LECTII DE BAZA AUTOLISP Func]ii Pe l`ng\ func]iile interne. Totu[i este posibil\ crearea unor noi func]ii care s\ execute orice instruc]iuni de procesare dorite de utilizator.doc R.AUTODESK. 50793936. este un subprogram [i instruc]iunile lui au fost predefinite `n AutoLISP. INC.1 2/3/2011 •93 . 10. Obiective ~n acest capitol ve]i studia: • • • • • Defini]ia func]iei AutoLISP. Cum s\ trimite]i argumente unei func]ii. (setq x 10) AutoLISP-ul evalueaz\ primul element unde se a[teapt\ s\ gasesc\ o func]ie. Sintaxa func]iei defun. Rezultatul `n acest caz este o valoare returnat\. AutoLISP-ul permite crearea func]iilor definite de utilizator. adic\ func]ii ale caror seturi de instruc]iuni [i nume au fost definite. Cum returneaz\ func]ia o valoare. setq Leg\turi noi se creaz\ prin folosirea subprogramului defun care este func]ia de definire. Legarea lui setq reprezint\ un set de instruc]iuni care arat\ cum trebuie facut\ procesarea. Func]iile si evaluarea listelor Considera]i procesul de evaluare al unei expresii tipice care folose[te o func]ie intern\ AutoLISP.2. Cum s\ crea]i propriile func]ii AutoLISP. AutoLISP-ul evalueaz\ argumentele lui setq `n ordine [i termin\ prin aplicarea instruc]iunilor de procesare la valoarea argumentelor. pentru expresie [i un efect secundar al variabilei x care este legat\ de 10.

Cele dou\ tipuri de argumente s`nt separate de o linie.. Returnarea valorii unei func]ii Valoarea returnat\ a func]iei definite de utilizator este valoarea ultimei expresii din corpul defini]iei func]iei. ) Argumentele care urmeaz\ dup\ argumentele cerute s`nt expresii de evaluat c`nd se execut\ func]ia definit\ de utilizator.. (defun myfun (<arg list> / <local var>) <expr> . ~n acest exemplu. INC. (defun MYFUN ( ) <expr> ... ATEN}IE Nu folosi]i niciodat\ numele unei func]ii sau a unui simbol construite intern deoarece acesta se va suprapune peste defini]ia original\ [i `l va face inaccesibil p`n\ lansa]i AutoLISP-ul `n cadrul unei noi sesiuni AutoCAD. de preferin]\ unul care descrie ac]iunile func]iei.) Al doilea argument cerut de defun este o list\ de argumente cerute [i variabile locale. primul argument al func]iei defun este numele simbol myfun care devine numele func]iei definite de utilizator.AUTODESK. Exemplul este extins pentru a include lista argumentelor cerute [i a variabilelor locale.) cere obligatoriu dou\ argumente [i un num\r variabil de argumente care urmeaz\ dup\ primele dou\. defun Argumentele func]iei defun Primul argument al func]iei este numele noii func]ii de definit. (defun <sym name> (<arg list> / <local var>) <expr> . Folosi]i un nume nou pe care l-a]i creat. •94 ... Ele reprezint\ instruc]iunile de procesare care vor fi executate c`nd func]ia va fi apelat\. Sintaxa func]iei defun Sintaxa func]iei defun este pu]in diferit\ de cea a celorlalte func]ii folosite p`n\ acum. Acum este suficient s\ folosi]i o list\ goal\.

INC.2. Command: (defun myfun () (fix (sqrt 624. Defini]i func]ia myfun apoi apela]i-o. ~n acest exemplu myfun adaug\ dou\ numere [i returneaz\ r\spunsul. Command: (defun myfun () (+1 2 )) MYFUN Command: (myfun) 3 Exemplu Introduce]i expresiile care urmeaz\. Defini]i func]ia myfun apoi apela]i-o. myfun va returna radacina patrat\ a lui 624. (defun myfun (+ 1 2 ) ) ( ) Exemplu Introduce]i expresiile care urmeaz\. TRAINING LECTII DE BAZA AUTOLISP ~n urm\toarele exemple. Defini]i func]ia myfun apoi apela]i-o. Command: (defun myfun () (getdist “From point: “)) MYFUN Command: (myfun) From point: pick a point Second point: pick a point 50793936.0)) MYFUN Command: (myfun) 24 Exemplu Introduce]i expresiile care urmeaz\.1 2/3/2011 •95 . expresiile vor fi ad\ugate corpului func]iei myfun .doc R. myfun va returna distan]a dintre dou\ puncte alese de utilizator. Seturi diferite de expresii vor da `n]elesuri diferite func]iei myfun precum [i valori returnate diferite. rotunjit\ p`na la cel mai apropiat num\r `ntreg.AUTODESK.

INC.Corp de expresii pentru o definitie a functiei Expresii multiple pot fi introduse `n corpul defini]iei func]iei. Valoarea returnat\ a func]iei este valoarea returnat\ a ultimei expresii din corpul defini]iei. valoarea returnat\ a func]iei myfun este valoarea returnat\ a ultimei expresii din corpul defini]iei. function name (defun myfun () (+ 1 2) ) list of required arguments and local variables body of definition Figura 36.AUTODESK. ~n cele trei exemple pe care le-a]i parcurs.Ultima expresie din corp este valoarea returnata a functiei. ~n acest exemplu valoarea returnat\ a func]iei myfun este valoarea expresiei (+3 4) Command: (defun myfun () (+1 2) (+3 4)) MYFUN Command: (myfun) 7 function name (defun myfun () (+ 1 2) return value of function list of required arguments and local variables body of definition (+ 3 4) ) Figura 37. •96 .

. Orice valoare se utilizeaz\ ca argument la myfun. x este folosit `n cadrul expresiei din corpul defini]iei func]iei myfun : (* x 10).2. INC..doc R. ) Lista argumentelor cerute dintr-o expresie defun v\ permite s\ ad\uga]i argumente la func]iile de apelare. ~n acest exemplu func]ia myfun este definit\ cu un singur argument solicitat: simbolul x. Command: (defun myfun (x) (* x 10)) MYFUN 10 Command: (myfun 1) 20 Command: (myfun 2) Command: (myfun 1) (defun myfun (x) (* x 10) ) (defun myfun (1) user calls myfun with argument of 1 1 is mapped into argument x (* x 10) ) value of x becomes 1 in body of expressions Figura 38. aceasta va deveni automat valoarea lui x din corpul expresiei (* x 10). 50793936. Valoarea argumentului se afla in corpul de expresii al functiei.1 2/3/2011 •97 .AUTODESK. TRAINING LECTII DE BAZA AUTOLISP Argumentele unei func]ii (defun myfun (<arg list> / <local var>) <expr>.

Crea]i o func]ie numit\ dtr care cere un argument exprimat `n grade [i returneaz\ valoarea transformat\ `n radiani. Folosi]i func]ia cu trei valori diferite. Folosi]i func]ia cu dou\ seturi de valori diferite.28319 Command: 1.AUTODESK. Exemplu Introduce]i expresiile care urmeaz\. Crea]i o func]ie care se nume[te add-two care cere dou\ argumente.0))) (dtr 180) (dtr 360) (dtr 90) Exemplu Introduce]i expresiile care urmeaz\. Command: (defun add-two (x y) (+x y)) ADD-TWO Command: (add-two 1 2) 3 Command: (add-two 4 5) 9 •98 . adaug\ valorile lor [i returneaz\. Formula aritmetic\ pentru transformarea gradelor `n radiani pentru valoarea d este: (d / 180) * pi Command: DTR Command: 3. Folosi]i func]ia cu dou\ valori diferite .5708 (defun dtr (d) (* pi (/ d 180. Crea]i o func]ie numit\ add-one care solicit\ un argument. INC. Ad\uga]i unu la valoarea lui [i returna]i. Command: (defun add-one (x) (+ x 1)) ADD-ONE Command: (add-one 1) 2 Command: (add-one 4) 5 Exemplu Introduce]i expresiile care urmeaz\.14159 Command: 6.

50793936. Func]iile s`nt definite f\r\ argumente sau cu un num\r fix de argumente solicitate. INC. TRAINING LECTII DE BAZA AUTOLISP Recapitulare • • • • • • • Noile func]ii externe s`nt create cu ajutorul func]iei defun.AUTODESK. Toate func]iile returneaz\ o valoare.doc R.2.1 2/3/2011 •99 . Argumentele unei func]ii s`nt evaluate oriunde sar afla `n corpul defini]iei func]iei.

Se vor face referiri la aceast\ parte `n exerci]iile care urmeaz\. EXERCITIUL 13: DEFINREA UNOR NOI FUNCTII Trebuie s\ completa]i partea a III-a a acestui exerci]iu. 4. Partea a II-a Instruc]iuni 1. Scrie]i-o mai jos. Crea]i o func]ie numit\ rtd. INC. Testa]i-o `n AutoCAD. Crea]i o func]ie numit\ times-two. 5.AUTODESK. 3. Scrie]i-o mai jos. 3. Scrie func]ii cu argumente solicitate. Func]ia transform\ valoarea argumentului din radiani `n grade [i returneaz\ valoarea. 2. 5. Scrie o func]ie care apeleaz\ o comand\ AutoCAD. Func]ia multiplic\ cele dou\ argumente [i returneaz\ valoarea. ~n acest exerci]iu ve]i: • • • Consolida cuno[tin]ele despre cum s`nt create func]iile definite de utilizator. Partea I Instruc]iuni 1. Func]ia solicit\ dou\ argumente. 2. Func]ia solicit\ un argument. 4. Testa]i-o `n AutoCAD. Formula aritmetic\ de transformare din radiani `n grade pentru valoarea r este: (r / pi) * 180 •100 .

doc R. Scrie]i-o mai jos. Cere]i utilizatorului dou\ puncte [i memora]i-le sub form\ de variabile. 2. Crea]i o func]ie numit\ rectangle. 3. 4. 7.1 2/3/2011 •101 . 5.2. Trasa]i o polilinie 2-D `nchisa folosind punctele pentru col]urile opuse.AUTODESK. Testa]i-o `n AutoCAD. Func]ia nu cere argumente. TRAINING LECTII DE BAZA AUTOLISP Partea a III-a Instruc]iuni 1. Calcula]i celelalte dou\ puncte cu ajutorul func]iilor car. 6. 50793936. cdr [i list. INC.

INC. Aceast\ pagin\ a fost l\sat\ liber\ inten]ionat.AUTODESK. •102 .

Cum s\ folosi]i simbolul pause `n cadrul func]iilor de tip command .. INC. Apelarea ei apare utilizatorului sub forma unei comenzi AutoCAD.doc R. O noua comand\ ZOOM Pentru a ilustra unele puncte sensibile ale definirii func]iilor [i comenzilor AutoCAD vom crea o func]ie simpl\ [i util\ care combin\ comanda ZOOM cu op]iunea Center. Command: zoom All/Center/Dynamic/Extens/Left/Previous/Vmax/Window/<Scale(X/XP>: Center point: Magnification or Heigh<current>: Avem nevoie de dou\ valori pentru aceast\ func]ie: noul punct centru [i factorul curent de afi[are multiplicat cu 2.1 2/3/2011 •103 . Vom ob]ine cele dou\ puncte de la utilizator prin suspendarea evolu]iei func]iei [i vom ob]ine factorul de afi[are prin setarea variabilei de sistem VIEWSIZE. Simbolul "pause" Putem ob]ine un punct de la utilizator prin legarea unei variabile cu setq [i getpoint [i transferarea variabilei c\tre comanda ZOOM. o comand\ ce poate fi apelat\ f\r\ ca aceasta s\ se afle `ntre paranteze.AUTODESK. schimb`nd factorul de afi[are cu 2.) “)) Putem suspenda cererile de comand\ care vin din AutoCAD pentru a permite utilizatorului s\ r\spund\ direct.2. TRAINING LECTII DE BAZA AUTOLISP Func]ii care ac]ioneaz\ sub form\ de comenzi AutoCAD O func]ie definit\ de utilizator poate apela o func]ie AutoLISP command `n cadrul corpului defini]iei ei. 50793936. Cum s\ ob]ine]i valoarea unei variabile de sistem `n AutoLISP. Considera]i cererile pentru o opera]ie ZOOM CENTER. (setq pt (getpoint “Center point: (command “zoom” “c” pt . Obiective ~n acest capitol ve]i studia: • • • Cum s\ transforma]i o func]ie AutoLISP definit\ de utilizator `ntr-o nou\ comand\ AutoCAD..

adic\ `ntre ghilimele.5.000000000 Command: nil Command: Func]ia C:ZPLUS O sintax\ special\ pentru numele func]iei definite de utilizator ne permite s\ apel\m func]ia sub o form\ prescurtat\ f\r\ s\ folosim paranteze. INC. pause suspend\ evaluarea expresiei [i permite utilizatorului s\ raspund\ `n linia de comand\ unde este introdus (`n cazul ilustrat mai sus. Command: (getvar “viewsize”) getvar returneaz\ valoarea Func]ia ZPLUS Avem toate instruc]iunile necesare pentru definirea func]iei noastre. • O modalitate de a suspenda comanda ZOOM [i de a permite utilizatorului s\ selecteze un nou punct de centru. zplus va afi[a noul punct de centru pe care `l selecta]i cu factorul 2. O modalitate de a ob]ine factorul de afi[are curent zoom. Variabile de sistem AutoCAD Func]ia AutoLISP getvar are un singur argument: numele unei variabile de sistem exprimat\ sub forma unui [ir. Crea]i o nou\ func]ie numit\ zplus [i folosi]i-o.) Simbolul special AutoLISP pause este folosit ca argument pentru func]iile tip command . Func]ia returneaz\ valoarea variabilei de sistem. • Exemplu Introduce]i expresiile care urmeaz\. Magnification or Heigh<9. (command “zoom” “c” pause .5 (getvar “viewsize”))) 1> (command “zoom” “c” pause zplus-height)) ZPLUS Command: (zplus) All/Center/Dynamic/Extens/Left/Previous/Vmax/Windows/<Scale(X/XP)>: Center point: pick a point 4. cererea pentru un nou punct de centru pentru afi[are)..AUTODESK.. ~n acest exemplu func]ia variabilei de sistem VIEWSIZE.0000>:4. defun zp Command: (defun zplus() ) 1> (setq zplus-height (*0. Aceast\ func]ie apare mai cur`nd sub forma unei comenzi AutoCAD dec`t sub forma unei func]ii. •104 .

5000000000 Command:nil Command: Recapitulare • • Simbolul pause permite utilizatorului s\ r\spund\ la o cerere dintr-o comand\ AutoCAD apelat\ de func]ia AutoLISP de tip command. INC. Defini]i func]ia c:zplus [i apela]i-o `n ambele moduri. fie ca o comand\.doc R.5 (getvar "viewsize"))) 1> (command "zoom" "c" pause zplus-height)) C:ZPLUS Command: (c:zplus) All/Center/Dynamic/Extents/Left/Previous/Vmax/Window/<Scale(X/XP)>:c Center point: pick a point Magnification or Height <2. Exemplu Introduce]i expresiile care urmeaz\.2.AUTODESK. atunci func]ia poate fi apelat\ fie sub forma unei func]ii sau sub forma unei comenzi.0000>: 4. ca o func]ie [i ca o comand\. Command: (defunc: zplus () 1> (setq zplus-height (* 0. TRAINING LECTII DE BAZA AUTOLISP Dac\ numele unei func]ii `ncepe cu litera C:.250000>: 1125000000000 Command: nil Command:zplus All/Center/Dynamic/Extents/Left/Previous/Vmax/Window/<S cale(X/XP)>:c Center point: pick a point Magnification or Height <9. ~n acest exemplu. Func]ia getvar stabile[te valoarea variabilei de sistem. Prefa]`nd numele unei func]ii definit\ de utilizator cu C: se creaz\ o nou\ comand\ AutoCAD • • • 50793936.1 2/3/2011 •105 . Dac\ numele unei func]ii `ncepe cu caracterul C:. func]ia c:zplus este apelat\ ca o func]ie [i ca o comand\. func]ia poate fi apelat\ pe linia de comand\ fie ca o func]ie.

~n acest exerci]iu ve]i: • • Crea comenzi noi `n AutoCAD din func]ii AutoLISP. Defini]i o func]ie numit\ c:zminus. Defini]i func]ia ca c:rectangle. 2. deoarece se vor face referiri la aceast\ parte [i `n alte exerci]ii. 4. 4. Modifica]i func]ia rectangle din partea a III-a a exerci]iului 11-1. 3. Testa]i-o `n AutoCAD. Scrie]i func]ia mai jos. INC. Modifica o func]ie existent\ dintr-un exerci]iu anterior [i o ve]i transforma `ntr-o comand\. Partea I 1. Testa]i-o `n AutoCAD. Scrie]i func]ia mai jos. EXERCITIUL 14: CREAREA DE NOI COMENZI AUTOCAD Trebuie s\ completa]i partea I a acestui exerci]iu. Aceasta trebuie s\ fac\ acelea[i lucruri ca [i func]ia c:zplus.AUTODESK. 2. •106 . dar schimba]i factorul de afi[are de la 2 la 1/2. Partea a II-a 1. 3.

doc R. Valoarea returnat\ de func]ia load este valoarea ultimei expresii care a fost evaluat\.lsp de `nc\rcat. (load “filename”). Func]ia load cere un singur argument de tip [ir: numele fi[ierului . Cum s\ recunoa[te]i cele mai frecvente mesaje de erori `n timpul inc\rc\rii. Cum s\ `ncarca]i fi[ierele program AutoLISP `n editorul grafic AutoCAD. TRAINING LECTII DE BAZA AUTOLISP Fi[ierele program AutoLISP Pute]i crea func]ii definite de utilizator introduc`nd codul corespunz\tor `n linia de comand\. INC. Obiective ~n acest capitol ve]i studia: • • • • • Cum s\ scrieti fi[iere text care con]in programe AutoLISP. 50793936.AUTODESK. Cum lucreaz\ func]ia AutoLISP load. Dac\ ad\uga]i codul pentru func]ia c:rectangle la numele unui fi[ier rectang. Evaluarea la `nc\rcarea fi[ierului Func]ia load cite[te pe r`nd expresiile dintr-un fi[ier [i evalueaz\ fiecare expresie `n parte.lsp pute]i `nc\rca fi[ierul `ntr-o sesiune de editare grafic\ f\r\ s\ reintroduce]i `ntreaga defini]ie a func]iei NOT| • Func]ia AutoLISP load este diferit\ de comanda AutoCAD LOAD.1 2/3/2011 •107 . Pentru definirea func]iilor [i pentru succesiuni complexe de s-expresii este adesea mult mai eficient s\ folosi]i un editor de text [i s\ scrie]i func]iile sau expresiile `ntr-un fi[ier de tip text cu o extensie . Codul din fi[ier poate fi `nc\rcat `n editorul grafic cu ajutorul func]iei AutoLISP load.2.lsp.

Dac\ g\se[te fi[ierul. INC. Pentru lista de directoare aflate `n specificarea de cale a bibliotecii AutoCAD consulta]i descrierea func]iei findfile `n capitolul 4 din AutoLISP Programmer's Reference Manual..lsp `n directorul curent `mpreun\ cu alte directoare men]ionate `n specificarea de cale a bibliotecii AutoCAD-ului. C\utarea fi[ierului AutoLISP-ul va c\uta fi[ierul rectang. O list\ succint\ a erorilor pe care este posibil s\ le `nt`lni]i la `nc\rcare este dat\ mai jos. Lista erorilor AutoLISP [i a cauzelor acestora se afl\ `n Appendix D din AutoLISP Programmer's Reference Manual. Mesaje de eroare la `nc\rcare Dac\ AutoLISP-ul afi[eaz\ un mesaj de eroare la `nc\rcarea fi[ierului. trebuie s\ edita]i fi[ierul [i s\ corecta]i eroarea. `l va `nc\rca `n editor.AUTODESK. Majoritatea mesajelor indic\ erori tipice de programare AutoLISP cum ar fi: • • • • Ortografierea gre[it\ a func]iilor sau a numelor simbol Tipuri gre[ite de argumente la func]ie Paranteze ne`mperecheate Ghilimele ne`mperecheate •108 .

O lista citita dintr-un fisier s-a terminat prematur. S-a detectat una sau mai multe paranteze dreapta in plus.LOAD failed Explicatii Fisierul numit in Functia load nu poate fi gasit. AutoLISP-ul v\ atrage aten]ia printr-un mesaj de eroare dac\ are o problem\ la `nc\rcarea fi[ierului. INC.1 2/3/2011 •109 . 50793936. Nu exista spatiu suficient pentru a aranja sirul text specificat. Mesaje de eroare la incarcare Recapitulare • • • • Programele AutoLISP pot fi stocate `n fi[iere text externe.2. extra right paren insufficient string space malformed list Tabelul 18. Fi[ierele AutoLISP au extensia . de obicei datorita ghilimelelor neimperecheate.lsp. TRAINING LECTII DE BAZA AUTOLISP Mesaje de eroare can't open file for input -.. Func]ia load `ncarc\ un program AutoLISP `n AutoCAD.AUTODESK.. Cea mai frecventa cauza este imperecherea gresita a parantezelor sau a ghilimeleor.doc R. sau utilizatorul nu are acces sa citeasca fisierul.

lsp.pline" pt1 (list (car pt1) (car (cdr pt3))) pt3 (list (car pt3) (car (cdr pt1))) "c" ) ) Command: (load "rectang") C:RECTANGLE Command: rectangle First corner: •110 . Crea]i un fi[ier de text numit rectang. (defun c:rectangle () (setq pt1 (getpoint "\nFirst corner: ")) (setq pt3 (getpoint "\nOther corner: ")) (command "_. Folosi]i comanda RECTANGLE. Folosi]i editorul text pe sta]ia dvs. 3. ~nc\rca]i fi[ierul `n editorul grafic. de lucru. 2. INC. EXERCITIUL 15: INCARCAREA UNUI FISIER SURSA ~n acest exerci]iu ve]i: • • • AUTOLISP Crea un fi[ier program AutoLISP. 4. Folosi comanda definit\ de fi[ier. 5. ~nc\rca fi[ierul `n editorul grafic . Instruc]iuni 1.AUTODESK. Salva]i fi[ierul `n directorul de lucru. Ruga]i instructorul s\ v\ ajute s\ configura]i editorul de text `n sistemul dvs.

Acest lucru este evident deoarece o func]ie de apelare de tip command este ultima expresie din corpul defini]iei func]iei c:rectangle [i func]ia de tip command returneaz\ `ntotdeauna nil. Diferen]a dintre variabilele locale [i globale. TRAINING LECTII DE BAZA AUTOLISP Sugestii de programare optim\ a func]iilor C: Acest capitol trateaz\ o serie de aspecte referitoare la interfa]a [i opera]iile interne ale func]iilor C:. Cred c\ a]i observat c\ func]ia c:rectangle returneaz\ nil. • • • Returnarea [irului vid de la o func]ie C: Valoarea ultimei expresii din corpul de expresii care urmeaz\ dup\ argumentele cerute [i variabilele locale din defini]ia unei func]ii este `ntotdeauna returnat\ ca valoarea func]iei.2.1 2/3/2011 •111 . Cum s\ anula]i afi[area cererilor de comand\ AutoCAD `n timpul execut\rii unei comenzi AutoLISP. aceast\ versiune modificat\ a comenzii RECTANGLE nu vizualizeaz\ nil la cererea de comand\ dup\ ce aceasta a fost executat\.AUTODESK. Cum s\ declara]i [i s\ folosi]i variabilele locale `n cadrul defini]iei func]iei. INC.doc R. De exemplu. Conceptul de alocare [i de variabile locale [i globale. dar aceste rezultate pot fi aplicate la orice defini]ie a unei func]ii nu numai la cele a c\ror nume `ncepe cu C:. Obiective ~n acest capitol ve]i studia: • • Cum se `ntrerupe execu]ia unei func]ii definite de utilizator. 50793936. Func]ia AutoLISP prin1 va vizualiza un [ir vid pe ecran dac\ prin1 este ultima expresie din defini]ia func]iei.

Alocarea unei variabile este determinat\ `n timpul func]ion\rii de ordinea apel\rii func]iei [i de declara]iile de variabil\. ~n CMDECHO CMDECHO poate suprima aceast\ aceast\ versiune modificat\ a func]iei c:rectangle. INC. Variabilele globale pot fi vizualizate sub forma de liste pe ecran folosind func]ia de apelare (familia de atomi 0). •112 . (defun c:rectangle () (setq old_cmdecho (getvar "CMDECHO")) (setvar "CMDECHO" 0) (setq pt1 (getpoint "\nFirst corner: ")) (setq pt3 (getpoint "\nOther corner: ")) (command "pline" pt1 (list (car pt1) (car (cdr pt3))) pt3 (list (car pt3) (car (cdr pt1))) "c" ) (setvar "CMDECHO" old_cmdecho) (prin1) ) Alocarea: Moduri de legare a unei variabile AutoLISP-ul folose[te o schem\ dinamic\ de alocare. Variabilele s`nt legate `n dou\ moduri: global [i local O variabil\ global\ este o variabil\ a c\rei legare (sau atribuire a unei valori) a fost f\cut\ cu ajutorul func]iilor set [i setq [i nedeclarat\ local\ `n func]ie. incluzind [i pe cele emise de un program AutoLISP. ( defun c:rectangle () (setq pt1 (getpoint "\nFirst corner: ")) (setq pt3 (getpoint "\nOther corner: ")) (command "_.AUTODESK. Variabila de sistem "comand\ dubl\". este setat\ pe off la startul rutinei iar la ie[ire este setat\ pe on.pline" pt1 (list (car pt1) (car (cdr pt3))) pt3 (list (car pt3) (car (cdr pt1))) "c" ) (prin1) ) Anularea afi[\rii cererilor de comand\ AutoCAD Implicit AutoCAD-ul dubleaz\ toate comenzile [i op]iunile `n zona liniei de comand\.

Legarea lui x se poate schimba local `n cadrul aloc\rii func]iei local_var [i legarea global\ va fi restabilit\ la ie[irea func]iei local_var.AUTODESK. Variabilele locale `[i men]in leg\tura numai `n contextul unei func]ii `n care au fost declarate ca fiind locale. INC.2. Ele `[i pierd leg\tura odat\ cu ie[irea func]iei. Command: (defun local_var (/ x) (setq x 3) (print x)) LOCAL_VAR Command: (local_var) 50793936. Legarea unei variabile globale se poate schimba `n cazul aloc\rii unei func]ii `n care o variabil\ cu acela[i nume a fost declarat\ local. Un set de s-expresii ilustreaz\ aceste concepte.Variabilele globale s`nt adesea folosite pentru "comunicare" `ntre programele AutoLISP. variabila este legat\ din nou de valoarea global\ original\. Exemplu Citi]i explica]iile [i introduce]i s-expresiile adecvate.1 2/3/2011 •113 . Legarea lui x se poate schimba local `n cadrul aloc\rii func]iei local_arg [i legarea global\ va fi restabilit\ la ie[irea func]iei local_arg . TRAINING LECTII DE BAZA AUTOLISP Variabilele globale s`nt accesibile tuturor func]iilor definite de utilizator at`t pentru citire c`t [i pentru scriere.doc R. Mai `nt`i ve]i lega global variabila x de valoarea 1. De exemplu Programul 1 va seta o condi]ie `ntr-o variabil\ global\ pe care Programul o va verifica `nainte de a ac]iona. Command: (defun local_arg (x) (print x) (* x x)) LOCAL_ARG Command: (local_arg 2) 2 4 Command: !x 1 Apoi ve]i defini o func]ie local_var care `l declar\ pe x ca variabil\ local\. La ie[irea func]iei. O variabil\ local\ este o variabil\ a c\rei legare a fost facut\ cu ajutorul func]iilor set [i setq `n cadrul unei func]ii a c\rei variabil\ a fost declarat\ local\ sau cu ajutorul declara]iei sub forma unui argument cerut la o func]ie. Command: (setq x 1) 1 Command: !x 1 Apoi ve]i defini o func]ie local_arg care `l declar\ pe x ca argument.

(defun c:rectangle (/ old_cmdecho pt1 pt3) (setq old_cmdecho (getvar "CMDECHO")) (setvar "CMDECHO" 0) (setq pt1 (getpoint "\nFirst corner: ")) (setq pt2 (getpoint "\nOther corner: ")) (command "pline" pt1 (list (car pt1) (car (cdr pt3))) pt3 (list (car pt3) (car (cdr pt1))) "c" ) (setvar "CMDECHO" old_cmdecho) (prin1) ) Declara]ia variabilelor locale se face de obicei dup\ un program care a fost verificat [i pus la punct `ntruc`t declara]ia face dificil\ sau chiar imposibil\ examinarea valorilor lor `n cazul `n care func]ia aborteaz\ sau face ceva nea[teptat din cauza unei erori `n cod. deci ele nu pot intra `n conflict cu variabilele globale care au acela[i nume [i nici cu variabilele cu acela[i nume care pot fi g\site `n cadrul altor func]ii. variabilele old_emdecho. Globalizarea variabilelor de sistem Variabilele de sistem apelate de func]ia AutoLISP setvar nu se traduc niciodat\ din limba englez\ `n limba utilizatorului. ~n acest exemplu. `n afara alocarii func]iei global_var. Command: (defun global_var () (setq x 4) (print x)) GLOBAL_VAR Command: (global_var) 4 Command: !x 4 Folosirea variabilelor locale Func]ia c:rectangle a fost pe deplin clarificat\. 3 Command: !x 1 Ve]i defini apoi o func]ie global_var unde variabila x nu a fost definit\ nici ca argument nici ca variabil\ local\. de aceea schimbarea `n interiorul leg\turii se va face global. Cererile de apelare a func]iei setvar func]ioneaz\ `n toate versiunile AutoCAD-ului f\r\ s\ necesite traducerea numelui variabilei de sistem din limba englez\ `n limba utilizatorului. pt1 [i pt2 s`nt declarate ca fiind locale la func]ie.AUTODESK. •114 . INC.

Este bine s\ prefa]a]i numele unei comenzi apelate de func]ia AutoLISP de tip command printr-un punct (. S`nt dou\ etape de parcurs pentru `nlocuirea comenzii AutoCAD cu o comand\ AutoLISP care are acela[i nume. Anihila]i comanda AutoCAD LINE. Command: undefine Command name: line ~nlocui]i-o cu o comand\ AutoLISP cu acela[i nume care deseneaz\ o linie segment. . • Pute]i redefini o comand\ AutoCAD folosind comanda REDEFINE. Command: (defun c: line () (command “. Exemplu Introduce]i expresiile care urmeaz\. • Folosi]i comanda UNDEFINE pentru a anihila o comand\ AutoCAD pentru sesiunea de editare curent\. INC. de exemplu._ line “ pause pause “”)) C: LINE Apela]i comanda LINE. TRAINING LECTII DE BAZA AUTOLISP Variabilele de dimensiune se traduc numai `n linia de comand\ pentru dimensionare. indiferent dac\ comanda a fost nedefinit\. Utilizatorul poate apela o comand\ AutoCAD prin prefa]area numelui comenzii prin caracterul punct (.) sau prin subliniere (pentru a v\ asigura c\ func]ioneaza `n toate limbile). Apela]i versiunea englezeasc\ a comenzii AutoCAD LINE din cadrul func]iei AutoLISP.doc R.1 2/3/2011 •115 .).AUTODESK. Crea]i o func]ie AutoLISP care are acela[i nume ca [i comanda AutoCAD [i prefa]a]i-o cu c:. 50793936.2.LINE. Redefinirea comenzii Pute]i `nlocui comenzile AutoCAD existente cu comenzi AutoLISP care au acela[i nume.

Command: line . Command: redefine Command name: line •116 . INC..line From point: pick a point To point pick a point To point: Command: nil Redefini]i comanda AutoCAD.AUTODESK.

2. folosind comanda UNDEFINE.AUTODESK. Comenzile AutoCAD pot fi `nlocuite cu comenzi AutoLISP care au acela[i nume. schem\ dinamic\ de • • • • • Variabilele globale s`nt accesibile pentru toate func]iile. INC.) sau prin caracterul subliniere ( _ ) `n cazul func]iei de tip command . Prefa]a]i `ntotdeauna numele unei comenzi cu un punct (. TRAINING LECTII DE BAZA AUTOLISP Recapitulare • Pute]i ie[i dintr-o func]ie apel`nd prin1 sau princ care reprezint\ ultima expresie `n corpul definitiei func]iei.LINE. Variabila de sistem CMDECHO poate suprima afi[area cererilor de comand\ AutoCAD. indiferent dac\ comanda a fost anihilat\. Variabilele de sistem apelate de func]ia setvar nu se traduc niciodat\ din englez\.1 2/3/2011 •117 . de exemplu . Prefa]a]i `ntotdeauna op]iunea de comand\ prin caracterul subliniere ( _ ) `n cazul func]iei de tip command .doc R. • • • • • 50793936. Variabilele locale s`nt accesibile numai `n contextul func]iilor `n care au fost declarate. Pute]i folosi variabile locale `n cadrul func]iilor pentru a evita posibilitatea unor conflicte `ntre variabile cu acelea[i nume din alte func]ii. AutoLISP-ul utilizeaz\ o alocare. Comanda AutoCAD va fi `ntotdeauna apelat\ c`nd numele comenzii este prefa]at printr-un punct.

Folosi]i func]ia getpoint pentru a ob]ine noul punct de centru a ecranului. Ve]i crea un nou fi[ier text cu o func]ie modificat\. demara]i [i testa]i programul dup\ ce a]i f\cut modific\rile.lsp pentru a introduce noi concepte din acest capitol. incluz`nd ie[irea func]iilor. de exemplu. Declara]i toate variabilele local. ~nc\rca]i.lsp. Anula]i ecoul cererii de comand\. (command "line" (getpoint)) nu este permis\. •118 . Introduce]i func]ia de ie[ire. dublarea cererii de comand\ [i declara]ia variabilei locale. Declara]i variabilele corespunz\toare ca variabile locale. 5. • • Partea I Etape de lucru 1. Ad\uga]i func]ia de ie[ire imediat\. ~nc\rca]i. 4. Ve]i modifica fi[ierul rectang. NOTA • Func]iile GETxxx nu pot fi folosite `n cadrul expresiilor func]iilor command. Anula]i ecoul din op]iunile [i cererile de comand\ ZOOM. INC.lsp 2. Modifica]i fi[ierul rectang. lansa]i [i testa]i programul dup\ ce a]i f\cut modific\rile. Partea a II-a Etape de lucru • • • • • • Rescrie]i func]ia c:zplus de la sf`r[itul capitolul 12 `ntr-un fi[ier numit zplus.AUTODESK. 3. EXERCITIUL 16: FUNCTIA DE PROGRAMARE OPTIMA ~n acest exerci]iu: • Ve]i consolida cuno[tin]ele cu privire la ordonarea func]iilor C:.

50793936.AUTODESK. TRAINING LECTII DE BAZA AUTOLISP Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat.doc R.2. INC.1 2/3/2011 •119 .

Set value of x x = "Hello. Teste logice [i de egalitate Programele AutoLISP pot face un salt pe baza valorii unei expresii test. se va ramifica `n expresia z [i va continua. dac\ nu .AUTODESK. Func]iile care realizeaz\ testele condi]ionale s`nt folosite pentru ramifica]ii `n interiorul programelor AutoLISP. Ramificarea programului bazata pe testul de conditie ~n aceast\ diagram\. world". atunci programul se va ramifica `n expresia y [i va continua. Ramificarea programului Aceasta diagrama simpl\ ilustreaz\ principiul ramific\rii programului. Cum s\ folosi]i testele de egalitate [i testele logice ca expresii test. Cum s\ determina]i tipul de date al unui obiect. Diferen]a dintre simbolul t [i simbolul nil. Cele dou\ func]ii de baz\ pentru testele condi]ionale s`nt: • • if cond •120 . INC."? t or true Branch to function (y) nil or false Branch to function (z) Figura 2. dac\ valoarea variabilei x este egal\ cu [irul de tip text "Hello. world. Obiective ~n acest capitol ve]i studia: • • • • Cum se poate schimba controlul desf\[urarii unui program pe baza unei expresii test.

TRAINING LECTII DE BAZA AUTOLISP Unele valori sau seturi de valori s`nt testate cu if sau cond iar programul se ramific\ conform rezultatelor testului. atunci expresia este t sau adev\rat\. AutoLISP-ul dispune de o varietate de func]ii care testeaz\ valorile pe baza anumitor criterii sau unele valori pe baza celorlalte. atunci expresia este nil sau fals\. Dac\ o expresie t este folosit\ `ntr-un test condi]ional. atunci nu poate fi nil. • =. ~n acest capitol ne concentr\m aten]ia asupra unora dintre cele mai utilizate func]ii de acest tip. >. simbolul t este echivalentul pentru "adev\rat" `n orice test condi]ional. < • • • • • equal and or not logand t si nil ~n AutoLISP. atunci va fi executat\ o ramifica]ie pentru o condi]ie fals\. Dac\ o expresie este t. [i nil se exclud mutual.doc R.1 2/3/2011 •121 . Dac\ o expresie AutoLISP nu se evalueaz\. Dac\ o expresie AutoLISP evalueaz\ orice altceva dec`t nil. Dac\ o expresie nil este folosit\ `ntr-un test condi]ional. Simbolul nil este echivalentul lui "fals".2. INC. Dac\ o expresie este nil.AUTODESK. atunci nu poate fi t. atunci va fi executat\ ramifica]ia pentru o condi]ie adevarat\. t 50793936.

~ntr-un desen nou. Determina]i dac\ expresiile s`nt t sau nil. desena]i o entitate de tip linie.1 1) () (command "erase" "last" "") (command "u") Tabelul 19. Instruc]iuni 1. Expresie (setq ename (entnext)) !ename (setq ename (entnext ename)) !ename (+ 1 2) (. EXERCITIUL NR 17: OBIECTELE SI EXPRESIILE POT FI T SAU NIL ~n acest exerci]iu: • Ve]i `nv\]a s\ determina]i dac\ valoarea returnat\ a unei func]ii este t sau nil.AUTODESK. 4. Expresiile pot fi t sau nil t nil •122 . 2. Verifica]i c\su]a adecvat\ din tabel. INC. 3. Introduce]i expresiile `n coloana din st`nga a tabelului.

1 2/3/2011 •123 . func]ia returneaz\ t. TRAINING LECTII DE BAZA AUTOLISP Func]ii care testeaz\ egalitatea Func]ia = are dou\ sau mai multe argumente cu orice tip de date.5) 1.0 (+ 2.AUTODESK. Command: (> x y) nil 50793936. Command: (< x y) T Verifica]i dac\ x este mai mare dec`t y. De exemplu.2.doc R.0) s`nt echivalente Command: (= 4. Dac\ da.0)) nil Func]ia < verific\ dac\ primul ei argument este numeric mai mic dec`t al doilea argument. Aceast\ func]ie verific\ dac\ toate argumentele au valori echivalente.5 2. Folosi]i variabilele ca argumente la c`teva func]ii [i verifica]i rezultatele.0 2. dac\ nu. Exerci]iu Introduce]i expresiile care urmeaz\.0 este echivalent cu expresia (+ 1.5 2. Command: (setq x 1) 1 Command: (setq y 1.0 2.5 Verifica]i dac\ x este mai mic dec`t y.0 [i expresia (+ 2. aceast\ expresie verific\ dac\ valorile num\rului real 4.0 (+ 1. returneaz\ nil.0) Command: (= 4. Lega]i dou\ variabile de valori numerice.0)) T Aceast\ expresie verific\ dac\ 4. Command: (< 45 50) T Func]ia equal este `n esen]\ aceea[i cu func]ia =. INC.

5.AUTODESK. Functie = /= < <= > >= minusp zerop equal eq Egal cu Nu este egal cu Mai mic decit Mai mic sau egal cu Mai mare decit Mai mare sau egal cu Mai mic decit zero Egal cu zero Egal cu Au aceeasi legatura Test care verific\ egalitatea `n Tabelul 20. Verifica]i dac\ y este mai mare sau egal cu 1. Command: (<= x y) T Verifica]i dac\ x nu este egal cu y. Command: (/= x y) T Acest tabel arat\ func]iile AutoLISP. Command: (>= y 1.5) T Verifica]i dac\ x este mai mic sau egal cu y. INC. Functii de egalitate •124 .

Command: (setq x 'abc) ABC Command: (setq y 1. Functii care testeaza tipul de date Exemplu Introduce]i expresiile care urmeaz\. S`nt aceste variabile atomi? Command: (atom x) T Command: (atom y) T Command: (atom z) nil S`nt aceste variabile liste? Command: (listp x) nil Command: (listp y) nil 50793936.AUTODESK. TRAINING LECTII DE BAZA AUTOLISP Func]ii care verific\ tipul de date AutoLISP-ul dispune de c`teva func]ii care verific\ tipul de date ale unui simbol sau expresii. Lega]i trei variabile de trei tipuri de date diferite: un simbol. Examina]i rezultatele func]iilor. Functie ATOM LISTP BOUNDP NULL NUMBERP Test Este argumentul un atom? Este argumentul o lista? Este argumentul legat de o valoare? Este argumentul nil? Este argumentul un num\r? Tabelul 21. un num\r real [i o list\. INC.1 2/3/2011 •125 .doc R.2.0) 1.0 Command: (setq z '(1 2 3)) (1 2 3) Folosi]i variabilele ca argumente la func]ii care testeaz\ tipul de date.

5) 1. Command: (listp z) T Combinarea func]iilor type cu func]iile "=" Pute]i verifica tipul de date al unui obiect `n AutoLISP folosind fie func]ia =.5 Folosi]i func]iile type [i = pentru a verifica tipul lor de date. Command: (setq x 1) 1 Command: (setq y 1. Exemplu Introduce]i expresiile care urmeaz\. Lega]i dou\ variabile cu tipuri de date diferite: un num\r `ntreg [i un num\r real. Command: (= (type x) 'INT) T Command: (equal (type x) 'REAL) nil Command: (equal (type y) 'REAL) T •126 . INC. fie func]ia equal cu func]ia type.AUTODESK.

or [i logand . atunci expresia returneaz\ t. De exemplu. Exemplu Command: (not nil) T Command: (not t) nil Func]ia and Func]ia and solicit\ unul sau mai multe argumente. Func]ia not Func]ia not solicit\ un argument. Dac\ unul dintre argumente este t. Dac\ toate argumentele s`nt t . Dac\ unul dintre argumente este nil. dac\ nu. TRAINING LECTII DE BAZA AUTOLISP Func]ii logice Exist\ c`teva func]ii de test logic `n AutoLISP.2. and.AUTODESK. Unele programe s`nt scrise `n conformitate cu 50793936. Dac\ argumentul este nil. ~n acest capitol vom studia patru dintre cele mai importante func]ii: not. aceasta returneaz\ nil. Exemplu Command: (and 1 2 3) T Command: (and 1 2 nil) nil Func]ia or Func]ia or solicit\ unul sau mai multe argumente. INC. Da]i-i nil [i va returna t. Dac\ toate argumentele s`nt nil. atunci returneaz\ t. Da]i-i t [i va returna nil.doc R.1 2/3/2011 •127 . ea returneaz\ nil. Func]ia or opre[te procesarea de `ndat\ ce g\se[te un argument t. pute]i fi siguri c\ programul nu va g\si o instruc]iune `ntr-o list\ de argumente ale func]iei and dac\ nici unul dintre argumentele anterioare nu este nil. Func]ia and opre[te procesarea de `ndat\ ce g\se[te un argument nil. Unele programe s`nt scrise `n acord cu acest comportament. Func]ia not este o func]ie a c\rei valoare returnat\ este opusul argumentului ei. atunci func]ia returneaz\ nil. func]ia returneaz\ t.

Aceast\ expresie va returna un num\r `ntreg `n care to]i bi]ii care s`nt seta]i la valoarea "adev\rat" `n toate cele trei argumente vor fi seta]i la valoarea "adev\rat”. Func]ia returneaz\ un num\r `ntreg. Exemplu Command: (or 1 2 3) T Command: (or 1 2 nil) T Command: (or nil nil nil) nil Func]ia logand Func]ia logand are dou\ sau mai multe argumente care ar trebui s\ fie numere `ntregi. Intreg 7 3 15 1 bit X X X 2 bit X X X X X 4 bit X 8 bit 16 bit Tabelul 22. deoarece s`nt singurii bi]i seta]i "adev\rat" `n toate cele trei argumente. De exemplu. pute]i fi siguri c\ programul nu va g\si o instruc]iune `ntr-o list\ de argumente ale func]iei or dac\ nici unul dintre argumentele anterioare nu este t. Func]ia logand realizeaz\ o compara]ie AND bit cu bit a bi]ilor din argumentele care s`nt numere `ntregi. INC. ~n acest caz. Biti setati la valoarea "adevarat" in trei numere intregi. bi]ii pentru valorile 1 [i 2 vor fi returna]i ca "adev\rat" de c\tre expresie. 3 [i 15 s`nt reprezentate `n bi]i `n tabelul de mai jos.AUTODESK. Numerele `ntregi 7. Dac\ un bit este setat la valoarea "adev\rat" `n toate argumentele func]iei logand. Command: (logand 7 15 3) 3 •128 . atunci acel bit este setat la valoarea "adev\rat" [i `n valoarea returnat\. acest comportament.

INC.1 2/3/2011 •129 .2. 50793936. `n special cu valorile binare cum ar fi codurile grupului 70 DXF pentru Polylines [i Block Definitions .AUTODESK.doc R. TRAINING LECTII DE BAZA AUTOLISP Func]ia logand va fi de folos atunci c`nd va fi folosit\ `mpreun\ cu func]iile "entity access" mai t`rziu `n acest curs.

Func]iile logice not. Func]ia logand realizeaz\ o compara]ie AND bit cu bit a unei liste de numere. Pute]i testa tipul exact de date al unui obiect combin`nd func]iile type [i =. Toate obiectele [i expresiile din AutoLISP s`nt t sau nil. aceasta func]ie va fi de ajutor `n combina]ie cu func]iile de tip entity access mai t`rziu. •130 . and [i or verific\ dac\ una sau mai multe expresii s`nt t sau nil. Recapitulare • • • • • • Ramificarea unui program depinde de valoarea unui test condi]ional. INC.AUTODESK. AutoLISP dispune de o varietate de func]ii care testeaz\ tipul de egalitate [i tipul de date ale obiectelor [i expresiilor.

Folosim expresiile test pentru a verifica dac\ o anumit\ condi]ie exist\. TRAINING LECTII DE BAZA AUTOLISP Expresii test [i expresii condi]ionale • Func]iile de egalitate [i func]iile logice s`nt folosite `n expresii test.1 2/3/2011 •131 . fie altceva. NOT| • Orice atom. • Cum s\ folosi]i func]ia progn pentru a executa multiple sexpresii `n cadrul func]iei if. Dac\ exist\ cel de-al treilea argument op]ional. 50793936.2.AUTODESK. Func]ia if Func]ia if are dou\ argumente obligatorii [i un al treilea argument care este op]ional. Cele mai folosite expresii condi]ionale `n AutoLISP s`nt func]iile if [i cond. AutoLISP-ul sare peste al doilea argument. Expresiile test s`nt folosite `n expresii condi]ionale [i iterative formate din func]ii ca if [i while. Dac\ valoarea primului argument este nil. Expresia condi]ional\ poate opta pentru execu]ia programului `n oricare din cele c`teva direc]ii posibile. Ele verific\ dac\ exist\ o anumit\ condi]ie [i arat\ AutoLISP-ului ce func]ie s\ execute care depinde de condi]ie. Obiective ~n acest capitol ve]i studia: • Cum s\ folosi]i expresiile condi]ionale pentru a face salt la diferite seturi de expresii `n cadrul programului AutoLISP • Sintaxa func]iilor if [i cond. Fiecare direc]ie va avea un set de expresii de evaluat `n AutoLISP. INC. simbol sau expresie poate fi folosit\ ca expresie test deoarece orice obiect `n LISP are o valoare: fie nil. Dac\ valoarea primului argument este t. AutoLISP-ul il evalueaz\. sau de rezultatul testului. iar rezultatul expresiei test este folosit pentru a comuta expresia condi]ional\. AutoLISP-ul evalueaz\ al doilea argument. adic\ oricare `n afar\ de nil. Expresii condi]ionale Expresiile condi]ionale controleaz\ desf\[urarea unui program AutoLISP.doc R.

Command: (setq x 0) 0 Command: (if (= x 1) (setq y 1) (setq y 0)) 0 Command: !y 0 •132 . Simplific`nd pu]in lucrurile.AUTODESK. func]ia if ar ar\ta cam a[a: (if (I_return_true) (do_this) (else_do_this) ) Exemplu Introduce]i expresiile care urmeaz\: Lega]i variabila x de o valoare a lui 1. INC. Command: (setq x 1) 1 Command: (if (= x 1) (setq y 1) (setq y 0)) 1 Command: !y 1 Lega]i variabila x de o valoare a lui 0. Lega]i variabila y bazat\ pe valoarea x. Lega]i valoarea lui y bazat\ pe valoarea lui x.

2. . NOT| • ~ncerca]i s\ apela]i SNAPTOG `n cadrul unei comenzi LINE sau CIRCLE. .quiet exit 4.otherwise. 50793936. 3.if it's on. Ve]i scrie o func]ie pentru a comuta SNAP pe on sau off `n func]ie de setarea curent\.turn it off. INC. Func]ia ar trebui s\ comute modul SNAP `n func]ie de valoarea curent\. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 18: RAMIFICAREA PROGRAMULUI FOLOSIND FUNCTIA IF ~n acest exerci]iu : • • Ve]i folosi func]ia if..1 2/3/2011 •133 . (defun c:snaptog (/ snapval) (setq snapval (getvar "SNAPMODE")) (if (= 1 snapval) (setvar "SNAPMODE" 0) (setvar "SNAPMODE" 1) ) (prin1) ) .AUTODESK.doc R. Folosi]i SNAPTOG pentru a comuta SNAP pe on sau off c`nd desena]i entit\]ile. 2.. 7. folosi]i editorul de text pentru a crea o func]ie numit\ c:snaptog. 5. Introduce]i codul de mai jos. Salva]i func]ia `ntr-un fi[ier numit snaptog. turn it on .lsp din directorul student.. Etape de lucru 1.get current SNAPMODE . 6. Desena]i c`teva entit\]i tip Line [i Circle. ~nc\rca]i fi[ierul `n AutoCAD.. ~ntr-un fi[ier nou.

AUTODESK. Pute]i face ca expresii multiple s\ apar\ ca o singur\ expresie la func]ia if prin amplasarea acestora `n cadrul expresiei progn . Exemplu Command: (setq x 1) 1 Command: (if (= x 1) (progn (setq y 2) (setq z 3)) (setq y 0)) 3 Command: !y 2 Command: !z 3 •134 . INC. ~n acest exemplu. Asignarea este realizat\ de dou\ s-expresii. pe r`nd [i returneaz\ valoarea ultimului argument. Func]ia progn evalueaz\ pe fiecare dintre argumentele sale. Expresii multiple `n cadrul func]iei if. Func]ia if permite execu]ia unei singure expresii dup\ ce a fost evaluat\ expresia test. dac\ variabila x este egala cu 1. Expresii multiple aflate `n cadrul func]iei progn apar sub forma unei simple expresii la o func]ie de apelare. atunci valorile vor fi atribuite ambelor variabile y [i z.

ad\uga]i codul care comut\ SNAPMODE [i GRIDMODE pe baza valorii curente a lui SNAPMODE. • • Ve]i folosi func]ia progn .lsp. 50793936. Testa]i comanda MODETOG .AUTODESK.2. 2. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 19: EXPRESII MULTIPLE IN CADRUL FUNCTIEI IF ~n acest exerci]iu: • Ve]i modifica func]ia existent\ de la exerci]iul 18. ~nc\rca]i programul modificat `n AutoCAD. Cu ajutorul func]iei progn .1 2/3/2011 •135 . deschide]i fi[ierul snaptog. 5. 4. Redenumi]i func]ia c:modetog. INC. Ve]i executa s-expresii multiple prin apelarea unei func]ii if. 6. Salva]i fi[ierul pe disc ca modetog.doc R. ~n editorul de text.lsp din directorul student. 3. Etape de lucru 1.

(defun testx (x) (cond ( (= x 0) (prompt "\nX equals 0. pe r`nd. p`n\ ce o expresie evalueaz\ "adev\rat". `n func]ie de valoarea numeric\ a variabilei x.") ) ( (> x 0) (prompt "\nX is greater than 0. Fi]i aten]i `n mod special la modul `n care pot fi construite argumentele la func]ia cond . Prima expresie dintr-un argument este expresia test [i expresiile care urmeaz\ dup\ test vor fi evaluate dac\ argumentul test este adev\rat. Func]ia cond opre[te testarea argumentelor de `ndat\ ce g\se[te un argument a c\rui expresie test este adevarat\. adic\ mai mult de dou\ ramific\ri `n orice punct din program. Atunci func]ia cond evalueaz\ expresiile care urmeaz\ primei expresii din cadrul argumentului [i returneaz\. Exemplu Aceast\ defini]ie a func]iei va introduce valori diferite `n zona liniei de comand\. Func]ia cond evalueaz\ prima expresie `n fiecare din listele de argumente. Func]ia cond Func]ia cond cere un argument obligatoriu [i un num\r oarecare de argumente op]ionale.") ) ( (< x 0) (prompt "\nX is less than 0. Fiecare argument al func]iei cond poate fi un set de expresii incluse `ntr-o list\ extern\.") ) ) (prin1) ) Recapitulare Func]ia if testeaz\ o expresie [i se ramific\ spre oricare dintre cele dou\ s-expresii. Func]ia cond este de preferat func]iei if ori de c`te ori exist\ mai mult de dou\ cazuri de testat. adic\ nu este nil. •136 .AUTODESK. INC.

50793936.2. TRAINING LECTII DE BAZA AUTOLISP Func]ia progn este folosit\ pentru a executa s-expresii multiple `n cadrul func]iei if.doc R.AUTODESK. INC.1 2/3/2011 •137 .

INC. •138 . Func]ia cond poate testa mai multe expresii [i poate executa orice num\r de s-expresii `ntr-o ramifica]ie dat\.AUTODESK.

8. Numi]i aceast\ func]ie testx. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 20: UTILIZAREA FUNCTIEI COND PENTRU RAMIFICAREA PROGRAMULUI ~n acest exerci]iu: • • • Ve]i folosi func]ia cond `n cadrul unei func]ii noi.doc R. Folosi]i func]ia testx cu valorile argumentelor 0. mai mic\ sau mai mare dec`t 0. ~nc\rca]i fi[ierul `n AutoCAD. INC. 7. Func]ia cere un argument obligatoriu.1 2/3/2011 •139 . Dac\ este satisfacut un test de egalitate. Salva]i fi[ierul ca testx. Ve]i executa toate trei ramifica]iile expresiei cond.lsp `n directorul student. 1 [i -1. Ve]i testa o variabil\ pentru egalitate numeric\.AUTODESK. Etape de lucru 1. 5. (prompt "\nX equals 0. folosi]i func]ia prompt pentru a semnaliza utilizatorul. ~ntr-o instruc]iune cond.") 6.2. 4. Crea]i o nou\ func]ie `ntr-un nou fi[ier cu ajutorul editorului de text. folosi]i testele de egalitate pentru a vedea dac\ valoarea argumentului este egal\. 2. 50793936. 3.

AUTODESK. Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat. INC. •140 .

Obiective ~n acest capitol ve]i studia: • Cum s\ folosi]i buclele pentru a repeta un set de expresii. atunci executa]i un set de instruc]iuni ale programului. Ca exemplu (si nu unul str\lucit) vom construi o func]ie simpl\ de num\rare folosind func]ia repeat. executa]i toate instruc]iunile programului apoi testa]i din nou expresia la infini. A[a lucreaz\ func]ia while.doc R. Buclele permit instruc]iunilor programului s\ fie executate de nenum\rate ori pe baza valorii unei espresii test. pe r`nd. Ca exemplu s\ presupunem c\ avem un set de expresii pe care vrem s\-l execut\m de 5 ori.AUTODESK. Dac\ expresia este adev\rat\. • Sintaxa func]iilor repeat [i while. Explicarea modului de func]ionare a buclelor O bucl\ se explic\ astfel: " Testa]i o expresie. Func]ia repeat execut\ un set de expresii de un num\r de ori prestabilit.2.1 2/3/2011 •141 . 50793936. Dac\ este tot adev\rat\. Func]ia va ad\uga num\rul `ntreg 1 la valoarea unei variabile ori de c`te ori func]ia este apelat\ [i apoi va tip\ri valoarea variabilei `n zona liniei de comand\. Este mai `n]elept s\ scrie]i setul de expresii o singur\ dat\ `n program [i s\ folosi]i unele func]ii care s\ cear\ AutoLISP-ului s\ repete expresiile de 5 ori dec`t s\ scrie]i setul de expresii de 5 ori. apoi testa]i expresia din nou. TRAINING LECTII DE BAZA AUTOLISP Bucle de program Buclele de program reprezint\ un concept important pentru orice limbaj de programare. INC.

INC. valoarea lui num este vizualizat\ pe monitor [i incrementat\ cu 1 p`n\ la un total de 10 ori. Primul argument trebuie s\ fie un num\r `ntreg (sau evaluat `ntr-un num\r `ntreg). Exemplu Command: (repeat 3 (prompt "\nHello")) Hello Hello Hellonil nil de la sf`r[it este valoarea returnat\ de func]ia repeat. Exemplu Introduce]i expresiile care urmeaz\. Expresiile definesc func]ia count. ~n func]ia count.AUTODESK. Aceasta va introduce numerele de la 0 la 9 `n zona liniei de comand\. Command: (count) 0 1 2 3 4 5 6 7 8 9 •142 . Func]ia repeat Func]ia repeat cere dou\ argumente [i un num\r oarecare de argumente op]ionale. Acesta spune func]iei repeat de c`te ori s\ execute al doilea argument p`n\ la al n -lea argument. dup\ ce variabila num este legat\ de 0. Command: (defun count () 1> (setq num 0) 1> (repeat 10 (print num) (setq num (1+ num))) 1> (prin1)) COUNT Folosi]i func]ia count.

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

O versiune ceva mai interesant\ a func]iei count va {TERGE ultimele trei entita]i desenate [i care s`nt vizibile pe monitor.

Exemplu
~ntr-un desen nou, desena]i cel pu]in trei (3) entit\]i de orice fel. Introduce]i expresiile care urmeaz\.
Command: (defun count () (repeat 3 (command "erase" "l" ""))) COUNT

Folosi]i func]ia count pentru a [terge ultimele entit\]i din desen.
Command: (count)

Mai multe despre intr\rile utilizatorului
Func]ia initget poate reface valorile permise pentru intrarea utilizatorului `n timpul oric\rei apel\ri a func]iilor de tip GETXXX , de exemplu func]iile getpoint [i getdist. Apela]i initget care are un num\r `ntreg ca argument [i/sau o list\ de cuvinte cheie acceptabile, imediat dup\ apelarea unei func]ii GETXXX. Acest exemplu admite numai numere `ntregi cu excep]ia lui 0, ca r\spuns la getint.
(initget (+ 1 2 4)) (setq response (getint "\nEnter an integer: "))

Func]ia getkword reface un cuv`nt cheie de la utilizator bazat pe un [ir de cuvinte cheie stabilite de func]ia initget. Acest exemplu permite utilizatorului s\ raspund\ cu YES sau NO la cererea de comand\. Un r\spuns nul sau un return nu s`nt admise.
(initget 1 "Yes No") (getkword "\nContinue? Yes/No: ")

50793936.doc R.2.1 2/3/2011

•143

AUTODESK, INC.

EXERCITIUL

21: BUCLARE

IN PROGRAM

~n acest exerci]iu: • • • • • Ve]i consolida program. cuno[tin]ele despre bucle de

Ve]i consolida cuno[tin]ele despre func]ia cond. Ve]i folosi func]ia repeat pentru a executa un set de s-expresii de un num\r stabilit de ori. Ve]i scrie o func]ie care cere utilizatorului num\rul de bucl\ri de program. Ve]i folosi instruc]iunea cond `n cadrul buclei.

Etape de lucru
1. ~ncepe]i un desen nou `n AutoCAD. 2. Desena]i un Cerc cu centrul `n punctul 5,5 [I o raz\ de o unitate. 3. ~n editorul text, deschide]i fi[ierul numit displace.lsp din directorul student. 4. Crea]i func]ia c:displace. Folosi]i codul `n displace.lsp ca baz\ pentru func]ie. 5. DISPLACE ar trebui s\ execute urm\toarele: • • • • S\ cear\ utilizatorului o incrementare a deplas\rii. S\ cear\ utilizatorului de c`te ori s\ execute deplasarea. S\ cear\ utilizatorului direc]ia de deplasare. S\ repete codul care restabile[te ultima entitate desenat\ [i care este vizualizat\ pe monitor [i s\ o deplaseze cu un increment adecvat de un num\r de ori.

continuare pe pagina urmatoare

•144

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

;No null, zero or negative response allowed (initget (+ 1 2 4)) (setq increment (getdist "\nIncrement for movement: ")) ;No null, zero or negative response allowed (initget (+ 1 2 4)) (setq number_of_times (getint "\nNumber of times to displace: ")) ;No null response allowed, setup keywords for response (initget 1 "Up Down Right Left") (setq direction (getkword "\nUp/Down/Left/Right: ")) (repeat number of times (command “MOVE” (entlast)”” (list 0.0 0.0 0.0) (cond ;match direction of movement... ((= direction "Up") ;based on keyword supplied by user (command (list 0.0 increment)) ) ((= direction "Down") (command (list 0.0 (- 0.0 increment))) ) ((= direction "Right") (command (list increment 0.0)) ) ((= direction "Left") (command (list (- 0.0 increment) 0.0)) ) ) (command "") ;second point of displacement... ;for MOVE command prompt

6. Salva]i fi[ierul text. 7. ~nc\rcati fi[ierul `n AutoCAD. 8. Activa]i comanda DISPLACE.

50793936.doc R.2.1 2/3/2011

•145

AUTODESK, INC.

Func]ia while
Func]ia repeat este cea mai simpl\ func]ie de buclare util\ dac\ [ti]i exact de c`te ori trebuie s\ repeta]i evaluarea grupului de expresii anterioare intr\rii buclei. Totu[i ve]i `nt`lni ocazii c`nd ve]i dori s\ repeta]i ceva de un num\r nedefinit de ori; adic\ num\rul de repeti]ii nu poate fi determinat `naintea intr\rii `n bucl\. ~ntr-un astfel de caz, func]ia while v\ d\ posibilitatea s\ repeta]i un set de expresii de c`te ori este necesar p`n\ ce valoarea unei expresii test se schimb\.

Exemplu
(setq x 0) (while (< x 10) (print x) (setq x (+ 1 x)) ) ;set initial value for test

;while x is less than 10... ;print value of x... ;add 1 to x and then... ;go back to test expression

(setq x 10)

initialize x

(while (< x 10)

x is less than 10?

NO

YES

(print x)

print the value of x

(setq x (+ 1 x))

add 1 to x

)

go back to test

Figuae 3. Diagrama buclei functiei while

•146

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

Pentru a ie[i dintr-o bucl\ while, valoarea expresiei test trebuie s\ fie egal\ cu nil. De aceea, dac\ expresia test este ini]ial t, valoarea expresiei test trebuie s\ se schimbe ca rezultat al unei atribuiri din cadrul corpului buclei.

Recapitulare
• • • • Buclele repet\ un set de expresii. Buclele pot repeta de un num\r de ori prestabilit sau p`n\ ce valoarea expresiei test este nil. Func]ia repeat repet\ un set de expresii de un num\r de ori stabilit. Func]ia while repet\ un set de s-expresii p`n\ ce expresia test este egal\ cu nil.

50793936.doc R.2.1 2/3/2011

•147

6. Plasa]i corpul codului care cere col]urile [i deseneaz\ polilinia `n cadrul unei func]ii while. 10. Modifica]i func]ia c:rectangle pentru a cere utilizatorului s\ deseneze dreptunghiuri multiple `n timpul unei singure secven]e de func]ionare. ~nc\rca]i fi[ierul `n AutoCAD. 7. Etape de lucru 1. Ve]i crea un program care deseneaz\ dreptunghiuri multiple. •148 . 9. 5. INC. Un r\spuns nul. `nc\rca]i fi[ierul rectangle. Salva]i fi[ierul. 3.lsp `n directorul student. 4. Salva]i fi[ierul ca mrectang. 8. Ve]i folosi func]ia while.AUTODESK. Face]i modific\ri `n fi[ier. ~n editorul de text. Numi]i noua func]ie c:mrectangle pentru "dreptunghiuri multiple". Ve]i modifica o func]ie existent\ de la exerci]iul anterior.lsp. 2. adic\ un return la cererea "first corner" va termina func]ia.Activa]i comanda MRECTANGLE. EXERCITIUL 21: UTILIZAREA FUNCTIEI WHILE PENTRU BUCLARE IN PROGAM ~n acest exerci]iu: • • • • Ve]i consolida cuno[tin]ele despre buclele de program din AutoLISP.

Cum s\ lua]i [iruri text de la utilizator. Obiective ~n acest capitol ve]i studia: • • • • • • Despre [irurile text [i valorile lor Cum s\ folosi]i caracterele de control `n [irurile text. Caracterul care urmeaz\ imediat are o semnifica]ie special\. {irul poate include caractere speciale cum ar fi *. .1 2/3/2011 •149 . TRAINING LECTII DE BAZA AUTOLISP {iruri [i tip\rirea lor ~n AutoLISP. Cum s\ folosi]i comanda AutoCAD TEXT cu variabile AutoLISP-ul legate la [iruri text." Caractere de control Caracterul "\" precede un caracter de control `n cadrul unui [ir text. 50793936.AUTODESK. orice serie de caractere alfanumerice aflate `ntre ghilimele duble reprezint\ un [ir text." Command: (setq x "This is a string. INC.") "This is a string. &. % [i . adic\ valoarea unui [ir text este [irul `n sine." Command: !x "This is a string. Valorile [irurilor text {irurile text se evalueaz\ pe sine. ~n urm\torul tabel g\si]i caracterele de control cunoscute de asemenea [i ca "escape codes" care s`nt recunoscute `n cadrul [irurilor AutoLISP. Diferen]ele dintre cele [ase func]ii de tip\rire `n AutoLISP.2.doc R. Cum s\ folosi]i func]iile de tip\rire. Command: !"This is a string" "This is a string.

Dac\ primul argument op]ional este furnizat [i acesta nu este nil. primul spa]iu din [ir este tratat ca "return". Command: (setq txt (getstring "\nEnter text: ")) Enter text: single "single" Command: !txt "single" Lega]i variabila txt de [irul text `n care s-au introdus spa]ii. Exemplu Introduce]i expresiile care urmeaz\. Lega]i variabila txt de [irul text "single". Caractere de control `n [iruri Func]ia getstring Func]ia getstring a[teapt\ ca utilizatorul s\ introduc\ un [ir text. Command: (setq txt (getstring T "\nEnter text: ")) Enter text: embedded spaces "embedded spaces" Command: !txt "embedded spaces" •150 .AUTODESK. INC. atunci este posibil ca [irul s\ con]in\ spa]ii. Cod \\ \" \e \n \r \t \nnn \ caracter " caracter Semnificatie caracter escape caracter newline caracter return caracter tab Caracter al carui cod octal este nnn Tabelul 2. Are dou\ argumente op]ionale: suprim\ caracterul spa]iu ca [i return [i un [ir de la utilizator.

pute]i r\spunde la o cerere de comand\ TEXT sau DTEXT cu o variabil\ AutoLISP [i comanda va tip\ri valoarea asignat\ variabilei. dac\ nu. Comanda DTEXT nu poate fi apelat\ de func]ia AutoLISP de tip command.doc R. 50793936. Comanda TEXT va tip\ri `ntotdeauna valoarea unei variabile [ir atunci c`nd este apelat\ `n cadrul unei func]ii AutoLISP de tip command indiferent de setarea TEXTVAL.1 2/3/2011 •151 . comanda va tip\ri semnul exclamarii [i numele variabilei. TRAINING LECTII DE BAZA AUTOLISP Variabila de sistem TEXTEVAL Dac\ variabila de sistem TEXTEVAL este mai mare dec`t 0. INC.2.AUTODESK.

Exemplu ~ntr-un desen nou introduce]i expresiile care urmeaz\. Vezi figura 18-1.5 Rotation: 0 Text: !txt1 Command: (setvar "texteval" 1) 1 Command: text Justify/Style/<Start point>: Enter Text: !txt2 Figura 41. Prima comand\ TEXT va tip\ri !txt1.AUTODESK. Command: (setq txt1 "First line. entitati tip text •152 . INC.") "First line.5 Height: 0.") "Second line." Command: text Justify/Style/<Start point>: 1. A dou\ comand\ TEXT va tip\ri Second line." Command: (setq txt2 "Second line.

Expandeaza caracterele de control. Nu expandeaza caracterele de control La fel ca prin1. Func]iile prompt [i write-line accept\ numai argumente de tip [ir. Tipareste msg pe display si returneaza nil. INC. Asemanator cu princ. Func]iile prin1.1 2/3/2011 •153 . pe afi[aj. Func]ia print tip\re[te expresii `ntr-o manier\ compatibil\ cu func]ia load. Functii de tiparire Intrarea [i ie[irea `n/[i dintr-un fi[ier incluz`nd [i tip\rirea `ntr-un fi[ier vor fi discutate mai t`rziu `n acest curs. Tipareste string f\r\ quotes si returneaz\ string cu quotes. 50793936.2. Func]ia prompt este folosit\ pentru tip\rirea mesajelor destinate utilizatorului. Func]ia pentru caractere [i patru dintre func]iile de tip [ir pot tip\ri nu numai `ntr-un fi[ier dar [i pe un monitor. Cinci dintre ele tip\resc [iruri text iar una tip\re[te caractere text.doc R. `n timp ce func]ia princ le tip\re[te `ntr-o manier\ compatibil\ cu func]ia read-line. si in plus tipareste un newline inainte de expr si un spatiu dupa expr.AUTODESK. princ [i print accept\ orice expresie ca argument [i `i va tip\ri valoarea. Tipareste un caracter ASCII conform cu argumentul num pentru codul zecimal ASCII si returneaza num\rul. Ve]i studia func]ia read-line `n capitolul destinat intr\rii [i ie[irii `ntr-un fi[ier mai t`rziu `n acest curs. write-line string [file-desc] Table 3. TRAINING LECTII DE BAZA AUTOLISP Func]iile de tip\rire Exist\ [ase func]ii de tip\rire `n AutoLISP. Trei dintre aceste func]ii tip\resc orice fel de expresii indiferent dac\ acestea s`nt de tipul [ir text. Functia prin1 princ print prompt write-char Argumente [expr [file-desc]] [expr [file-desc]] [expr [file-desc]] [msg] num [file-desc] Descriere Tipareste expr si returneaza expr. Tipareste expr si returneaza expr.

AutoLISP-ul dispune de o varietate de func]ii de tip\rire pentru diferite `ntrebuin]\ri. Func]ia getstring primeste [iruri interactiv de la utilizator. Variabila de sistem TEXTEVAL demonstreaz\ cum comanda AutoCAD TEXT va tip\ri o variabil\ AutoLISP. Recapitulare • • • • {irurile text s`nt caractere alfanumerice aflate `ntre ghilimele duble.AUTODESK. • •154 . INC. Caracterele de control din cadrul unui [ir de tip text `ncep cu un caracter "a".

0 1. Variabile si functii de tiparire prin1 princ print prompt 50793936. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 22: SIRURI DE TEXT SI FUNCTII DE TIPARIRE ~n acest exerci]iu: • • • Ve]i consolida cuno[tin]ele despre [iruri de tip text [i func]ii de tip\rire.doc R. Etape de lucru 1. Variabila a b c d Tabelul 25. Ve]i ob]ine dou\ utilizator. list\. Command: (setq a 1) Command:(setq b '(1. INC.0)) Command: (setq c (getstring "\nString: ")) String: xyz "xyz" Command: (setq d (getstring "\nFile name: ")) File name: \student\x.1 2/3/2011 •155 . [iruri text interactiv de la Ve]i folosi [irurile de tip text cu patru dintre func]iile de tip\rire. 4.dwg" 3. 2. Scrie]i valorile `n casu]ele corespunzatoare din tabelul care urmeaz\.2. Lega]i cinci variabile de la a la d de diferite tipuri de date: num\r `ntreg. [ir [i [ir care con]ine caractere de control. Folosi]i variabilele ca argumente la diferite func]ii de tip\rire.dwg "\\student\\x.AUTODESK.0 0. Intoduce]i expresiile care urmeaz\.

•156 . Aceast\ pagin\ a fost l\sat\ liber\ in mod inten]ionat.AUTODESK. INC.

Examina]i propriet\]ile unei entit\]i. Obiective ~n acest capitol ve]i studia: • Cum s\ folosi]i numele de entit\]i pentru a stabili [i modifica entit\]ile individuale. • Cum s\ afla]i numele primei entit\]i ad\ugate la desen.2. Modifica]i propriet\]ile unei entit\]i. INC.AUTODESK. • Cum s\ afla]i numele ultimei entit\]i ad\ugate la desen. dar fiecare nume de entitate este unic determinat\ `n timpul unei sesiuni de editare. Numele unei entit\]i se poate schimba de la o sesiune de editare la alta.Functii de acces a entitatilor 50793936. Descriere returneaza numele ultimei entita]i adaugata in baza de date returneaza lista formata din numele entita]ii si punctul in care a fost selectata entitatea returneaza prima entitate din baza de date returneaza numele entita]ii in baza de date dupa argumentul ename Functii de acces la entitati entlast entsel entnext entnext ename Tabelul 26. • • • • Afla]i o entitate sau un grup de entit\]i. Func]ii de acces la entit\]i Numele de entit\]i pot fi stabilite de AutoLISP [i entit\]ile la care se refer\ pot fi modificate de AutoLISP. ~n acest capitol ve]i folosi func]iile de acces la entit\]i din AutoLISP pentru a lucra cu entit\]i [i grupuri de entit\]i. Numele unei entit\]i este un identificator unic al fiec\rei entit\]i dintr-un desen.doc R. TRAINING LECTII DE BAZA AUTOLISP Accesul la entit\]i Fiec\rei entit\]i dintr-o sesiune de editare `i este atribuit un nume de entitate de c\tre AutoCAD. • Cum s\ crea]i noi comenzi AutoCAD care ac]ioneaz\ asupra numelor de entit\]i. • Cum se pot trece `n revist\ numele entit\]ilor din desen. Activa]i o entitate cu o comand\ AutoCAD.1 2/3/2011 •157 .

~n acest exemplu. INC. Expresia AutoLISP va [terge entitatea Line. Command: (command "erase" ename "") nil •158 . Command: (entlast) <Entity name: 60000022> Func]ia entlast stabile[te numele ultimei entit\]i principale ne[tears\ din desen. Verifica]i legarea lui ename . Command: (command "erase" ename "") Exemplu Introduce]i expresiile [i comenzile care urmeaz\. ~ntr-un desen nou crea]i o entitate Line. Cum se afl\ numele ultimei entit\]i Introduce]i comenzile [i expresiile care urmeaz\.5 To point: Enter Folosi]i func]ia entlast pentru a stabili numele ultimei entit\]i ad\ugate la desen.1 To point: 5. adic\ entitatea Line.AUTODESK.Aceasta expresie va [terge entitatea Line. numele entit\]ii Line este furnizat ca argument la comanda AutoCAD ERASE . Comanda U o va restabili. (Num\rul din numele entit\]ii poate fi diferit pe computerul dumneavoastra). Command: line From point: 1. Command: (setq ename (entlast)) <Entity name: 60000022> Command: !ename <Entity name: 60000022> Folosirea numelui unei entit\]i intr-o comand\ AutoCAD Numele entit\]ilor pot fi folosite ca argumente la func]ia de tip command ori de c`te ori o comand\ AutoCAD cere un set de selec]ie. Lega]i variabla numit\ ename de valoarea returnat\ de func]ia entlast.

crea]i o entitate Circle.). 50793936. Folosi]i func]ia entnext pentru a extrage numele primei entit\]i din baza de date. (Num\rul din numele entita]ii poate fi diferit pe computerul dvs.AUTODESK.doc R.1 2/3/2011 •159 . `n acest caz entitatea Circle. adic\. ~n acela]i desen. Command: (entlast) <Entity name: 60000028> Func]ia entlast stabile[te ultima entitate principal\ ne[tears\ din desen.2. TRAINING Command: U GROUP LECTII DE BAZA AUTOLISP Aflarea numelui primei entit\]i Exemplu Citi]i instruc]iunile [i tip\ri]i expresiile cu caractere aldine. entitatea Circle.1 Figura 42.5 1. entitatea Line. Command: circle 3P/2P/TTR/<Center point>: 5.5 Diameter/<Radius>: 1 5.Entitati tip linie si cerc Folosi]i func]ia entlast pentru a stabili numele ultimei entit\]i ad\ugat\ la desen. cu ajutorul entit\]ii Line. INC.

INC. Command: (setq ename (entlast)) <Entity name: 60000028> Command: (command "move" ename "" "1.0" "") nil •160 .AUTODESK. Command: (setq ename (entnext)) <Entity name: 60000022> Command: (command "erase" ename "") nil Command: U ERASE Afla]i numele ultimei entit\]i din desen: entitatea Circle. Restabili]i-o cu comanda U. Deplasa]i-o cu o unitate `n directia X pozitiv\ din pozi]ia ini]ial\. Sterge]i-o. Verifica]i legarea lui ename . Afla]i numele primei entit\]i din desen. entitatea Linie. Lega]i o variabil\ numit\ entname de valoarea returnat\ de entnext. Command: (setq ename (entnext)) <Entity name: 60000022> Command: !ename <Entity name: 60000022> Exemplu Introduce]i expresiile care urmeaz\.

TRAINING LECTII DE BAZA AUTOLISP 5.doc R. Command: (entnext (entnext)) <Entity name: 60000028> sau Command: (setq ename1 (entnext)) <Entity name: 60000022> Command: (setq ename2 (entnext ename1)) <Entity name: 60000028> 50793936.1 Figura 43. Command: U MOVE Baleierea bazei de date entitate cu entitate Func]ia entlast stabile[te numele ultimei entit\]i din baza de date.2. entnext returneaz\ nil. INC. Func]ia entnext stabile[te numele primei entit\]i din baza de date.1 2/3/2011 •161 .AUTODESK.5 1. ~n acest caz func]ia entnext returneaz\ numele entit\]ii care urmeaz\ dup\ argument `n baza de date. De exemplu acest set de expresii vor returna numele celei de a doua entit\]i din baza de date. Dac\ nu exist\ nici o entitate care se urmeze dup\ cea din numele argumentului entita]ii. Situatia dupa miscarea cercului cu o unitate in directia X pozitiva Aduce]i cercul `n pozi]ia ini]ial\. Func]ia entnext are un argument op]ional: numele unei entit\]i.

dar se pot schimba pe parcursul sesiunilor de editare grafic\. pot fi folosite cu comenzi • • •162 . numele ultimei entit\]i Func]ia entnext returneaz\ numele primei entit\]i ad\ugat\ la desen sau numele entit\]ii care urmeaz\ dup\ argumentul op]ional. Command: (command "erase" ename2 "") Ar fi bine s\ se poat\ stabili numele tuturor entit\]ilor din baza de date. pe r`nd. Recapitulare • • Fiecare entitate dintr-un desen are un nume unic de entitate. Pute]i folosi entnext [i o bucl\ while pentru a accesa fiecare entitate din desen. Numele entit\]ilor nu se schimb\ niciodat\ `n timpul unei sesiuni de editare grafic\. pentru a le procesa una c`te una. Func]ia entnext poate face acest lucru c`nd este plasat\ `ntr-o bucl\ while `mpreun\ cu instruc]iunile de procesare pentru entit\]i. AutoLISP dispune numele entit\]ii. Numele entit\]ilor AutoCAD. Expresia care urmeaz\ ar [terge atunci a doua entitate din baza de date. INC. de func]ii care returneaz\ • • • Func]ia entlast returneaz\ ad\ugat\ la desen.AUTODESK.

lsp. Urm\ri]i deplasarea entit\]ilor. 5. Ve]i folosi numele entit\]ilor [i comanda AutoCAD MOVE. 3._MOVE" ename "" "1.0" "") (setq ename (entnext ename)) ) (prin1) ) . 4.doc R.move it . pe r`nd.get the next entity . INC. Activa]i comanda MOVEALL. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 23: ACCESAREA NUMELOR DE ENTITATI ~n acest exerci]iu: • • Ve]i aprofunda cuno[tin]ele numelor de entit\]i. • • Etape de lucru 1.AUTODESK.we have an entity? . despre accesarea Ve]i crea o comanda MOVEALL care afl\ numele fiec\rei entit\]i din baza de date. (defun c:moveall () (setq ename (entnext)) (while ename (command ". Desena]i c`teva entit\]i `n desenul dvs. Command: (load "moveall") C:MOVEALL Command: moveall 50793936.lsp.quiet exit 2.2. c`te una pe r`nd. ~nc\rca]i fi[ierul moveall. Folosi]i editorul de texte pentru a salva urm\torul cod `n fi[ierul numit moveall. [i deplaseaz\ fiecare entitate cu o unitate `n X pozitiv. Ve]i folosi func]iile entnext [i while.get first entity .1 2/3/2011 •163 .

")) Etape de lucru 1. • Scala]i fiecare entitate cu un factor (0.lsp. (setq counter 1) (prompt (strcat "\nScaling entity " (itoa counter) ". EXERCITIUL 24: SCALAREA TUTUROR ENTITATILOR ACCESATE PRIN NUME ~n acest exerci]iu: • • • • • Ve]i aprofunda cuno[tin]ele numelor de entit\]i. Modifica]i c:moveall.5) relativ fa]\ de punctul origine 0. Ve]i folosi func]iile entnext [i while.lsp.” `n zona Aceste expresii vor tip\ri [irul liniei de comand\. Salva]i textul `ntr-un nou fi[ier numit scaleall. 5. • Numi]i noua func]ie c:scaleall. Scaling entity 3. INC. Folosi]i codul din func]ia c:moveall. 4. Activa]i comanda SCALEALL. ~nc\rca]i fi[ierul scaleall.AUTODESK. Scaling entity 2. Ve]i crea o comand\ care scaleaz\ fiecare entitate din desen.0.lsp. Deschide]i fi[ierul text moveall. Command: scaleall Scaling entity 1.lsp. •164 . 6. 2. “Scaling entity 1. 3. Ve]i tip\ri num\rul de entita]i scalate folosind un contor `n cadrul unei bucle. • Ad\uga]i codul care tip\re[te `n zona liniei de comand\ num\rul de entit\]i modificate. despre accesarea Ve]i modifica func]ia de la exerci]iul 24.

"LINE") Ilustra]ia care urmeaz\ prezint\ arborii binari pentru dou\ obiecte similare: o list\ [i o pereche cu punct. Formatul unei liste asociate. INC. At`t listele obi[nuite c`t [i perechile cu punct s`nt folosite `n listele asociate entit\]ilor pentru a reprezenta grupul de coduri DXF [i valorile asociate acestora. 50793936.1 2/3/2011 •165 . Perechile cu punct con]in `ntotdeauna dou\ elemente.2.AUTODESK. Cum s\ extrage]i o list\ asociat\ unei entit\]i. O pereche cu punct este o list\ format\ din dou\ elemente a c\rei parte cdr din arborele binar se termin\ cu ultimul element al listei [i nu cu nil. Listele asociate cuprind subliste ale listelor obi[nuite sau perechi cu punct.doc R. Perechi cu punct O pereche cu punct este o form\ special\ a unei liste. ~n AutoLISP un astfel de document este reprezentat print-o list\ asociat\. ambele con]in`nd acelea[i elemente. Al doilea element al perechii cu punct poate fi stabilit direct cu func]ia cdr [i acest lucru difer\ de modul `n care se stabile[te al doilea element dintr-o list\ obi[nuit\. Primul element al unei perechi cu punct poate fi stabilit la fel ca [i primul element al unei liste obi[nuite: cu func]ia car. Cum s\ determina]i tipul entit\]ii din lista asociat\. (0 . Obiective ~n acest capitol ve]i studia: • • • • • Formatul unei perechi cu punct sau cum s\ crea]i o astfel de pereche. Exemplu Perechea cu punct care con]ine cele dou\ elemente 0 [i "Line" arat\ astfel. Cum s\ examina]i o lista asociat\. TRAINING LECTII DE BAZA AUTOLISP Liste asociate entit\]ilor Pute]i folosi numele unei entit\]i pentru a extrage toate elementele unei entit\]i.

atunci func]ia cons returneaz\ o pereche cu punct a celor dou\ elemente. "LINE") Extrage]i primul element din list\ [i din perechea punct cu car. Forma]i o list\ obi[nuit\ din elementele 0 [i "Line".AUTODESK. INC. (0 "LINE") car cdr car (0 . "LINE") cdr 0 car ("LINE") cdr 0 "LINE" "LINE" () Figura 44. atunci func]ia cons returneaz\ lista cu primul argument ad\ugat `n capul listei. Command: (car xlist) 0 •166 . Dac\ valoarea la care se adaug\ este o lista. Command: (setq xlist (list 0 "LINE")) (0 "LINE") Forma]i o pereche cu punct din elementele 0 [i "Line". Dac\ valoarea care se adaug\ este un atom. Command: (setq xdot (cons 0 "LINE")) (0 . Arbori binari pentru lista obisnuita si pereche cu punct avind elemente identice. Func]ia cons Func]ia cons cere dou\ argumente obligatorii: o valoare care se adaug\ [i o valoare la care se adaug\. Exemplu Introduce]i expresiile care urmeaz\.

0 1. O list\ asociat\ este o list\ de liste.10 [i 11 si datele lor s`nt u[or de imaginat ce reprezint\. Data asociat\ este numele entit\]ii. "0") (10 1.0 0.0 1. ( (-1 . Memorarea si extragerea formatelor Prin conven]ie.1 la 5.1 2/3/2011 •167 . Semnifica]ia codurilor 8. "LINE") (8 .0) ) Entitatea `nregistrat\ `n baza de date este p\strat\ sub forma unei liste asociate. Datele codului 210 s`nt reprezentate de sensul pozitiv al axei Z din sistemul de coordonate care con]ine entitatea. <Entity name: xxxxxxxx>) (0 . Pentru aceasta. INC. 50793936. Celelalte elemente reprezint\ datele asociate cu codul.0 0. codul din prima sublist\ este num\rul `ntreg -1. Primul element al fiec\rei subliste este tipul acelei liste.0 0. AutoLISP-ul folose[te perechi cu punct `n cazul sublistelor cu dou\ elemente [i forme normale de liste `n cazul sublistelor cu mai mult de dou\ elemente. datele dintr-o list\ asociat\ entit\]ii pot fi extrase prin scoaterea cdr-ului unei subliste. Command: (cdr xdot) "LINE" Entit\]i `nregistrate `n baza de date [i liste asociate Modul `n care AutoLISP-ul reprezint\ o entitate `nregistrat\ `n baza de date pentru o entitate desenat\ de tip Line de la 1.5 pe Layerul 0 este prezentat `n continuare.0) (210 0. Command: (car (cdr xlist)) "LINE" Extrage]i cel de-al doilea element din list\ [i din perechea punct cu car.0) (11 5.doc R. De exemplu. Codul din a dou\ sublist\ este num\rul `ntreg 0.AUTODESK. o entitate Line. TRAINING LECTII DE BAZA AUTOLISP Command: (car xdot) 0 Extrage]i cel de-al doilea element din lista normal\ cu car [i cdr.2.0 5. `n acest caz. Data asociat\ este tipul entit\]ii.

Circle. aceste expresii returneaz\ Line [i punctul de start.0 1. Coduri de grup DXF si proprietatile entita]ilor •168 . Layerul entit\]ii Command: (cdr '(8 . Arc. etc. Appendix B. Exist\ mici diferen]e `ntre codurile de grup dintr-un fi[ier DXF [i codurile de grup returnate `ntr-o list\ asociat\ unei entit\]i. De exemplu.0) Coduri de Grup DXF Codul fiec\rei subliste dintr-o list\ asociat\ unei entit\]i corespunde unui cod de grup DXF. Acestea s`nt codurile listelor asociate entit\]ilor (sau coduri de grup DXF) pentru entitatea Line.0 0.AUTODESK. Documenta]ia despre aceste coduri exist\ `n AutoCAD Release 12 AutoLISP Programmer’s Reference Manual.0)) (1. Cod de group -1 0 8 10 11 210 Semnificatie Numele entitatii Tipul (Line. ~n anexa din AutoLISP Programmer’s Reference Manual g\si]i lista corect\ a codurilor de grup pentru liste asociate entit\]ilor.) Layer Punct de start Punct final Directia pozitiva a axei Z de extruziune Tabelul 27. "0")) "0" Command: (cdr '(10 1. INC.0 0.0 1.

"0") (10 1. TRAINING LECTII DE BAZA AUTOLISP Extragerea unei entit\]i din baza de date cu func]ia entget Func]ia entget cere un singur argument: numele unei entit\]i.AUTODESK. Presupune]i c\ variabila elist este legat\ de lista asociat\ `n cazul entit\]ii Line.0) (11 5.0)) Command: !elist ( (-1 . "LINE") (8 .0)) Aceast\ expresie va returna sublista care descrie layerul entit\]ii.0 1.0) (210 0.0 0.0 0.0) (210 0.2.0 0. "0") (10 1. Command: (setq elist (entget (entnext))) ( (-1 . "0") (10 1. "0") (10 1.0 1.0 0. apel\m cdr care returneaz\ entit\]ii.0 0.0 1. Command: (setq ename (entnext)) <Entity name: xxxxxxxx> Command: (setq elist (entget ename)) ( (-1 .0 0.0) (210 0. tip\ri]i expresiile care urmeaz\.0 0.0 0.0 0.0 1.1 la 5.0 5.0 1.5.0 5. <Entity name: xxxxxxxx>) (0 .0 5. <Entity name: xxxxxxxx>) (0 . "LINE") (8 . <Entity name: xxxxxxxx>) (0 .0 1.0 1. Exemplu ~ncepe]i un desen nou [i desena]i o linie de la 1.0) (210 0.1 2/3/2011 •169 . returneaz\ nil.0)) Extragerea datelor dintr-o list\ asociat\ Func]ia assoc cere dou\ argumente: valoarea unui cod [i o list\ asociat\. Command: (cdr (assoc 8 elist)) "0" layerul 50793936.doc R. Func]ia va returna `nregistrarea entit\]ii sub forma unei liste asociate.0 1.0) (11 5. Command: (assoc 8 elist) (8 . "LINE") (8 .0 5.0) (11 5.0)) Command: !elist ( (-1 .0) (11 5. atunci returneaz\ sublista corespunzatoare.0 0.0 0. <Entity name: xxxxxxxx>) (0 . Dac\ func]ia g\se[te o pereche pentru cod `n lista asociat\.0 0. "0") ~n aceast\ expresie. "LINE") (8 . INC. dac\ nu.

0)) Extrage]i tipul entit\]ii. Exemplu Introduce]i expresiile care urmeaz\.0) (210 0.0 0.0) •170 .0 0.AUTODESK. <Entity name: xxxxxxxx>) (0 .0) Apela]i cdr pentru a extrage tipul entit\]ii. Command: (setq ename (entnext)) <Entity name: xxxxxxxx> Command: !ename <Entity name: xxxxxxxx> Command: (setq elist (entget ename)) ( (-1 .0 1.0 0.0 1.0 0.0 1.0 1. <Entity name: xxxxxxxx>) (0 . "0") (10 1. Command: (assoc 0 elist) (0 .0) (11 5.0 0.0 0.0 1.0 5.0 0.0) (210 0. Layerul [i punctul de start din subliste. Command: (cdr (assoc 0 elist)) "LINE" Command: (cdr (assoc 8 elist)) "0" Command: (cdr (assoc 10 elist)) (1. INC. Layerul [i punctul de start al sublistei din lista asociat\. "0") (10 1.0 5.0) (11 5. "LINE") (8 .0 1. "LINE") Command: (assoc 8 elist) (8 . Asigura]i-v\ c\ variabila elist este legat\ de lista asociat\ `n cazul entit\]ii Line.0)) Command: !elist ( (-1 . "0") Command: (assoc 10 elist) (10 1.0 0. "LINE") (8 .

Fiecare sublist\ dintr-o list\ asociat\ are dou\ p\r]i: car [i cdr.AUTODESK. Func]ia assoc returneaz\ unui cod. TRAINING LECTII DE BAZA AUTOLISP Recapitulare • • • • Perechile cu punct au dou\ elemente [i s`nt forme speciale de liste.2. o sublista prin c\utarea • • • • • 50793936.doc R.1 2/3/2011 •171 . Al doilea element al perechii cu punct este returnat de cdr. Partea car a unei liste asociate entit\]ii este un cod de grup DXF care desemneaz\ o proprietate a entit\]ii car este de asemenea denumit codul sublistei. O lista asociat\ este o list\ de liste. Perechile cu punct s`nt folosite ca liste obi[nuite `n listele asociate entit\]ilor. Entit\]ile `nregistrate `n baza de date s`nt reprezentate `n AutoLISP sub forma de liste asociate. INC. Partea cdr a unei liste asociate entit\]ii reprezint\ valoarea codului de grup DXF.

Numai entit\]ile de tip Line vor fi scalate cu aceasta comand\. 6. Salva]i fi[ierul. 2. Desena]i c`teva tipuri de entit\]i `n desen:. Schimba]i numele func]iei din c:scaleall `n c:scline. Ve]i crea o func]ie care scaleaz\ numai entit\]ile de tip Line din desen. EXERCITIUL 25: UTILIZAREA LISTELOR ASOCIATE ENTITATLOR ~n acest exerci]iu : • • • • Ve]i consolida cuno[tin]ele despre listele asociate entit\]ilor. Ve]i modifica func]ia de la exerci]iul 25. Modifica]i func]ia ca s\ scaleze numai entit\]ile de tip Line din desen. 3. Circles and Arcs.lsp. 4. 5.lsp. Deschide]i fi[ierul text scaleall.AUTODESK. Ve]i folosi func]ia entget. 7. Salva]i textul `ntr-un nou fi[ier scline. Inc\rca]i fi[ierul scline. INC. Etape de lucru 1.Lines. •172 .lsp [i activa]i comanda SCLINE.

.increment the counter (setq ename (entnext ename)) .get the next entity ) (prin1) .tell user which one (strcat "\nScaling entity " (itoa counter) ". (prompt .initialize counter (while ename .. (= "LINE" (cdr (assoc 0 (entget ename))) ) (progn (command ". TRAINING LECTII DE BAZA AUTOLISP C:SCALEALL (defun c:scaleall () (setq ename (entnext)) ..get first entity (setq counter 1) .if it's a Line.scale it (prompt .initialize counter (while ename . INC.5").quiet exit ) 50793936..AUTODESK.quiet exit ) C:SCLINE (defun c:scline () (setq ename (entnext)) .get first entity (setq counter 1) .we have an entity? (command ".we have an entity? (if .scale it and.increment the counter (setq ename (entnext ename)) .\n" ) ) (setq counter (1+ counter)) .doc R.2._SCALE" ename "" "0._SCALE" ename "" "0.tell user which one (strcat "\nScaling entity " (itoa counter) ".0" "0.\n" ) ) ) ) (setq counter (1+ counter)) .0" "0.5").1 2/3/2011 •173 .get the next entity ) (prin1) .

Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat. •174 .AUTODESK. INC.

1 2/3/2011 •175 .AUTODESK.doc R. TRAINING LECTII DE BAZA AUTOLISP Modificarea unei entit\]i Modificarea unei entit\]i cu AutoLISP-ul are loc `n dou\ etape. Pute]i folosi func]ia subst pentru a `nlocui o valoare `ntr-o list\ asociat\ unei entit\]i. • • Modifica]i lista asociat\ unei entit\]i cu func]ia subst. Vom `nlocui num\rul 15 cu num\rul 16 `n lista noastr\ de p\trate de numere `ntregi. valoarea de substituit `ntr-o list\ [i o list\ care con]ine valoarea de substituit. Actualiza]i entitatea prin aplicarea func]iei entmod la noua list\ asociat\. ea nu va afecta legarea variabilei mylist. Iat\ un exemplu care ilustreaz\ modul cum func]ioneaz\ func]ia subst. Command: (setq mylist (subst 16 15 mylist)) (4 9 16) Command: !mylist (4 9 16) 50793936. Substituirea valorilor intr-o list\ asociat\ Func]ia subst `nlocuie[te un element dintr-o list\. Command: (setq mylist (list 4 9 15)) (4 9 15) Command: !mylist (4 9 15) Command: (subst 16 15 mylist) (4 9 16) Command: !mylist (4 9 15) Deoarece func]ia subst este non-destructiv\. ~n acest exemplu func]ia setq este ad\ugat\ expresiei pentru a schimba legarea. Obiective ~n acest capitol ve]i studia: • • Cum s\ modifica]i o list\ asociat\ unei entit\]i. Func]ia cere trei argumente: valoarea de substituire. Cum s\ actualiza]i `nregistrarea unei entit\]i `ntrun desen pe baza schimb\rilor din lista asociat\. INC.2.

5.0 0.0) (11 5. Command: line From point: 1. INC. "LINE") (8 .1 To point: 5.5.0) ~nlocui]i vechiul punct de start cu unul nou de 7.5 0. Extrage]i sublista pentru punctul de start [i p\stra]i-o sub forma unei variabile. ~ntr-un desen nou.0 0.0 1. Exemplu Introduce]i comenzile [i expresiile care urmeaz\.5 2.0 1. <Entity name: xxxxxxxx>) (0 .0 1.2. desena]i o entitate Line de la 1. Command: (setq new_start (list 10 7. "0") (10 1.5 0.0 0.5.0 0.5 2.0)) (10 7.0) •176 . Command: (setq ename (entnext)) <Entity name: xxxxxxxx>) Command: (setq elist (entget ename)) ( (-1 .5 2.5 0.AUTODESK.1 la 5.0) (11 5.0 [i schimba]i legarea variabilei elist.5 To point: Enter Folosi]i func]ia subst pentru a schimba punctul de start al listei asociate entit\]ii Line.5 2.0 1.0) Command: (setq elist (subst new_start old_start elist)) ( (-1 .0 0.0) (210 0. <Entity name: xxxxxxxx>) (0 . "LINE") (8 .0) (210 0.0)) Command: (assoc 10 elist) (10 7.5 0.0)) Command: (setq old_start (assoc 10 elist)) (10 1.0 5.0 5. "0") (10 7.0 0.

5 0.0 5. Command: !elist ((-1 .0. Func]ia entmod va actualiza `nregistrarea unei entit\]i `n baza de date pe baza modific\rilor din lista asociat\.0 0.5. 0. 0. "LINE") (8 .0 1. TRAINING LECTII DE BAZA AUTOLISP Actualizarea unei entit\]i Func]ia entmod modific\ propriet\]ile unei entit\]i cer`nd AutoCAD-ului s\ actualizeze entitatea pe baza modific\rilor f\cute `n lista asociat\ entit\]ii.2. 5. 1.0 Figura 45.0 7.0) (210 0.0)) Punctul de start al entit\]ii Line ar trebui s\ se deplaseze de la 1.AUTODESK.0. 2. "LINE") (8 .1 2/3/2011 •177 .5 2. 50793936.5 0.0 0. Func]ia entmod solicit\ un singur argument : o list\ valabil\ asociat\ entit\]ii. Linie inainte si dupa apelarea functiei entmod.1.5. Exemplu Folosi]i func]ia entmod pentru a aplica modific\rile la entitatea Line pe baza modific\rilor f\cute `n copia listei asociate. "0") (10 7.0 5. Recapitulare • • O sublist\ dintr-o list\ asociat\ poate fi `nlocuit\ cu func]ia subst.0 1.0 la 7. <Entity name: xxxxxxxx>) (0 . Introduce]i expresiile care urmeaz\. <Entity name: xxxxxxxx>) (0 .5.0) (210 0.0) (11 5.2.0)) Command: (entmod elist) ((-1 .0 1.5.0 0.5.0) (11 5.5 2.0 5. "0") (10 7.0 0.doc R.0.5. INC.

Dac\ entitatea este de tip Line.lsp.lsp.0. Ve]i actualiza `nregistrarea entit\]ilor acestora. desena]i c`teva linii [i cercuri `n diferite pozi]ii.0. Salva]i fi[ierul. Modifica]i func]ia.0. ~nc\rca]i fi[ierul modline. Ve]i folosi func]ia entmod. Ve]i modifica listele asociate tuturor entit\]ilor Line.lsp. INC. 5.AUTODESK. • • • • •178 . Etape de lucru • • • • • Deschideti fi[ierul text scline. Ve]i modifica func]ia de la exerci]iul 26. Salva]i textul `ntr-un fi[ier nou numit modline. modifica]i-i punctul de cap\t din valoarea curent\ `n punctul 5. Schimba]i numele func]iei din c:scline `n c:modline. Activa]i comanda MODLINE. EXERCITIUL 26: ACTUALIZAREA INREGISTRARII UNEI ENTITATI ~n acest exerci]iu: • • • • • Ve]i aprofunda cuno[tin]ele despre modificarea entita]ilor [i despre listele asociate. ~ntr-un desen nou. 0.

.\n" ) ) ) ) (setq counter (1+ counter)) . (= "LINE" (cdr (assoc 0 (entget ename))) ) (progn (command "..increment the counter 50793936.0" "0.1 2/3/2011 •179 .0 0.get its assoc list (if .increment the counter (setq ename (entnext ename)) .we have an entity? (if .change its end point (subst '(11 5..we have an entity? (setq elist (entget ename)) .0) (assoc 11 elist) elist) ) (prompt .AUTODESK.initialize counter (while ename .get the next entity ) (prin1) .quiet exit ) C:MODLINE (defun c:modline () (setq ename (entnext)) .if it's a Line.tell user which one (strcat "\nScaling entity " (itoa counter) "..tell user which one (strcat "\nModifying entity " (itoa counter) ".5"). (= "LINE" (cdr (assoc 0 elist))) (progn (entmod .get first entity (setq counter 1) .. (prompt .scale it and.\n" ) ) ) ) (setq counter (1+ counter)) . INC.0 5.if it's a Line.get first entity (setq counter 1) . TRAINING LECTII DE BAZA AUTOLISP C:SCLINE (defun c:scline () (setq ename (entnext)) .doc R.initialize counter (while ename ._SCALE" ename "" "0..2.

quiet exit •180 .get the next entity .AUTODESK. (setq ename (entnext ename)) ) (prin1) ) . INC.

Figure 5. Deschide]i fi[ierul grafic moddim. Sarcina dvs. Fi[ierul program AutpLISP moddim. Ve]i scrie o func]ie care s\ modifice toate entita]ile de tip Dimmension din desen.dwg. Deschide]i acest fi[ier cu editorul de text [i ad\uga]i codul necesar pentru a completa programul.AUTODESK. 2.1 2/3/2011 •181 . Dimensiunile din acest desen au fost amplasate pe c`teva nivele diferite. 3. Etape de lucru 1. ~n acest exerci]iu: • • Ve]i aprofunda cuno[tin]ele despre modificarea entit\]ilor [i listele asociate.dwg `n directorul student.lsp din directorul student con]ine schi]a programului. Desenul moddim. 50793936. este s\ scrie]i un program AutoLISP care s\ caute toate entit\]ile Dimension din acest desen [i s\ le amplasa]i pe nivelul DIM.doc R. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 27: ACTUALIZAREA TUTUROR ENTITATILOR “DIMENSION” INTR-UN DESEN Acesta este un exerci]iu op]ional. INC.2.

Func]ia entsel Func]ia entsel v\ cere s\ selecta]i un singur obiect. desena]i o linie [i un cerc.6. Cum s\ folosi]i func]ia entsel. Cum s\ deplasa]i centrul cercului selectat de utilizator.6. Obiective ~n acest capitol ve]i studia: • • • Cum s\ extrage]i numele unei entit\]i interactiv cu utilizatorul.1 To point: 5. Exemplu Introduce]i expresiile care urmeaz\.0 0.0 (<Entity name: xxxxxxxx> (5.0 0. Selectarea numelui unei entit\]i prin selec]ie grafic\ cu cursorul Un program AutoLISP poate extrage numele unei entit\]i cer`nd utilizatorului s\ selecteze o entitate.0 6. Pute]i extrage numele entit\]ii din lista returnat\ de func]ia entsel cu ajutorul func]iei car. Func]ia returneaz\ o list\ cu dou\ obiecte: numele entit\]ii [i punctul `n care a fost selectat. Command: (setq epick (entsel)) Select object: pick circle at 5.0 ca r\spuns la cererea func]iei entsel [i lega]i valoarea returnat\ de variabila epick.0)) •182 . INC.5 To point: Enter Command: circle 3P/2P/TTR/<Center point>: 5. Command: line From point: 1. ~ntr-un desen nou .5 Diameter/<Radius>: 1 Selecta]i cercul `n punctul 5. dac\ nu se selecteaz\ nimic atunci func]ia returneaz\ nil.AUTODESK.0 6.0)) Command: !epick (<Entity name: xxxxxxxx> (5.

_erase" ename "") Recapitulare • Func]ia entsel extrage o list\ a propriet\]ilor unui obiect selectat de utilizator: numele entit\]ii [i punctul `n care a fost selectat. TRAINING LECTII DE BAZA AUTOLISP Extrage]i numele entit\]ii din lista returnat\ de func]ia entsel [i p\stra]i-l `n variabila ename.2.doc R. • 50793936. INC. Command: (setq ename (car epick)) <Entity name: xxxxxxxx> Command: !ename <Entity name: xxxxxxxx> {terge]i entitatea Circle.AUTODESK. Partea car a unei liste selectate de entsel reprezint\ numele unei entit\]i.1 2/3/2011 •183 . Command: (command ".

. deschide]i fi[ierul text numit circen.is it a circle? . Salva]i fi[ierul. Ad\uga]i codul care face urmatoarele: • • • Define[te func]ia c:circen. ~nc\rca]i programul `n AutoCAD. Dac\ utilizatorul selecteaz\ o entitate.get current center . codul trimite lista asociat\ entit\]ii ca argument la func]ia circen_mod . EXERCITIUL 28: SELECTAREA SI MODIFICAREA UNUI CERC ~n acest exerci]iu: • • Ve]i consolida cuno[tin]ele interactiv\ a entit\]ilor. 3.for getpoint . (defun circen_mod (elist) (if (/= "CIRCLE" (cdr (assoc 0 elist))) (prompt "\nNot a circle.AUTODESK.modify the circle (subst (cons 10 new_cen) (assoc 10 elist) elist) ) ) ) ) •184 . Verifica]i comanda CIRCEN `ntr-un desen care con]ine cel pu]in un cerc. 2. Cere utilizatorului o entitate cu func]ia entsel.. . exit .no null reponse. despre selec]ia Ve]i crea un program care cere utilizatorului s\ selecteze o entitate Circle [i un nou punct de centru care deplaseaz\ centrul cercului Etape de lucru 1.if not.get new center (setq new_cen (getpoint old_cen "\nCenter point: ")) (entmod . INC. ~n editorul de texte. 4.") (progn (setq old_cen (cdr (assoc 10 elist))) (initget 1) . 5.lsp din directorul student.

1 2/3/2011 •185 . Cere]i operatorului punctul de baz\ [i al doilea punct al deplas\rii. INC. c:printent • • c:red • • • c:chglayer • • • 50793936. Schimba]i culoarea entit\]ii `n RED (reprezentat\ `ntr-o list\ asociat\ de codul de grup 62 [i num\rul `ntreg 1). Cere]i operatorului numele unui nivel. Cere]i operatorului s\ selecteze o entitate. c:movelast • • Deplasa]i ultima entitate `n baza de date. Selecta]i fiecare entitate din desen. Observa]i c\ pute]i ad\uga o nou\ sublist\ la lista asociat\ `n loc s\ `nlocui]i o list\ existent\ folosind func]ia entmod . Cere]i operatorului s\ selecteze o entitate.. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 29: PROBLEME OPTIONALE DE ACCES LA ENTITATI Acestea s`nt exerci]ii op]ionale pe care le pute]i completa `n clas\ sau `n afara clasei.doc R. O sublist\ de grup 62 nu este prezent\ `ntr-o list\ asociat\ unei entit\]i dac\ culoarea entit\]ii este BYLAYER.2. una dup\ alta.AUTODESK. Tip\ri]i fiecare tip [i layer ale entit\]ii `n zona liniei de comand\. Scrie]i un set de defini]ii de func]ii. Schimba]i nivelul entit\]ii.

AutoCAD-ul se `ntoarce la linia de comand\. Tratarea erorilor AutoLISP dispune de o metod\ pentru tratarea erorilor de program [i de utilizare. Obiective ~n acest capitol ve]i studia: • • • Cum s\ folosi]i func]iile exit [i quit pentru a for]a o eroare AutoLISP. O aplica]ie poate folosi func]iile exit [i quit `n combina]ie cu o func]ie de tratare a erorilor definit\ de utilizator pentru a opri propria-i execu]ie. Func]ia *error* Pute]i fi siguri c\ pozi]ionarea unei variabile de sistem sau o anumit\ condi]ie AutoCAD pot fi restabilite dup\ apari]ia unei erori nea[teptate folosind func]ia *error*. Ele returneaz\ [irul "quit/exit abort" [i transfer\ [irul func]iei de tratare a erorilor *error*. • Salva]i defini]ia curent\ a func]iei *error*. Cum s\ `nlocui]i rutina implicit\ AutoLISP de tratare a erorilor. pute]i returna un mesaj adecvat utilizatorului [i puteti restabili setarea variabilelor AutoCAD. f\r\ Func]iile exit [i quit for]eaz\ aplica]ia curent\ s\ se termine prin for]area unei erori AutoLISP. ~n cadrul acestei func]ii care poate fi definit\ de utilizator pute]i evalua condi]iile de eroare. [i quit realizeaz\ aceea[i opera]ie.AUTODESK. Dup\ executarea func]iei de tratare a erorilor. Parcurge]i aceste etape pentru a implementa o subrutin\ de tratare a erorilor definit\ de utilizator pentru o comand\. • For]area unei erori Func]iile exit argumente. pentru a reface orice valori necesare `n AutoCAD [i pentru a prezenta utilizatorului un mesaj adecvat. •186 . Cum s\ folosi]i comanda UNDO `n rutina de tratare a erorilor. INC. Cum s\ utiliza]i rutina de tratare a erorilor pentru "a [terge" un program dup\ ce a fost abortat din cauza unei erori sau pentru c\ utilizatorul a anulat programul.

INC. Redefini]i subrutina veche de tratare a erorilor prin comanda exit sau prin exit dintr-o nou\ subrutin\ de tratare a erorilor.doc R. 50793936.2. plasa]i codul pentru a defini o rutin\ de tratare a erorilor `n cadrul codului pentru comand\.AUTODESK.1 2/3/2011 •187 . TRAINING LECTII DE BAZA AUTOLISP Defini]i o nou\ func]ie *error* pentru comand\ sau func]ie. Redefinirea rutinei de tratare a erorilor ar trebui f\cut\ `n contextul unei comenzi sau a unei func]ii.

define new error handler (setvar "CMDECHO" old_cmdecho) . Deci rutina de tratare a erorilor pentru func]ia c:rectangle este definit\ de `ndat\ ce utilizatorul apeleaz\ comanda RECTANGLE dar nu `nainte de asta.save default error handler (defun *error* (msg) . Exemplu Acest cod implementeaz\ comanda c:rectangle [i propria-i rutin\ de tratare a erorilor.restore system variable (if (/= "Function cancelled" msg) .if command is successful Dup\ cum vede]i.deliberately aborts (princ (strcat "\nError: " msg)).no message if user cancels (if (= msg "quit / exit abort") .no message if program (princ) . •188 . AutoLISP-ul v\ permite s\ defini]i o func]ie (adic\ s\ apela]i func]ia defun ) `n timpul execut\rii unei comenzi sau func]ii definite de utilizator.restore default error handler (princ) .AUTODESK. implicit\ de tratare a erorilor este refacut\ `n toate cazurile: c`nd comanda ajunge s\ fie `ndeplinit\ cu succes sau la cap\tul rutinei de tratare a erorilor cu comanda specific\.otherwise. print error for user ) (princ) ) (setq *error* old_error) .quiet exit ) (setq old_cmdecho (getvar "CMDECHO")) (setvar "CMDECHO" 0) (setq pt1 (getpoint "\nFirst corner: ")) (setq pt3 (getpoint "\nOther corner: ")) (command "pline" pt1 (list (car pt1) (car (cdr pt3))) pt3 (list (car pt3) (car (cdr pt1))) "c" ) (setvar "CMDECHO" old_cmdecho) (setq *error* old_error) (prin1) ) . Rutina AutoLISP. Aceast\ tehnic\ v\ permite s\ adapta]i rutina AutoLISP de tratare a erorilor pentru orice situa]ie.restore default error handler . (defun c:rectangle (/ pt1 pt2) (setq old_error *error*) . INC.

doc R.2. TRAINING LECTII DE BAZA AUTOLISP Rutina noastr\ de tratare a erorilor cu comand\ specific\ reface pozi]ionarea original\ a variabilei de sistem CMDECHO `n cazul `n care Comanda RECTANGLE `nt`lne[te o eroare `n timpul execu]iei.AUTODESK. Variabila definit\ de utilizator old_emdecho a fost facut\ global a[a `nc`t valoarea ei este accesibil\ noii func]ii *error*. INC. 50793936.1 2/3/2011 •189 .

INC. 4. 3. ~nc\rca]i programul `n AutoCAD. EXERCITIUL 30: DEFINIREA SI UTILIZAREA UNEI NOI SUBRUTINE DE TRATARE A ERORILOR ~n acest exerci]iu: • • Ve]i aprofunda cuno[tin]ele despre modul cum se folose[te o rutin\ de tratare a erorilor. Activa]i comanda CIRCEN [i anula]i-o cu Ctrl-C pentru a verifica rutina de tratare a erorilor. •190 . Etape de lucru 1.lsp. Ad\uga]i o rutin\ de tratare a erorilor pentru comanda CIRCEN `n fi[ierul circen. Folosi]i exemplul de la c:rectangle ca o baz\ de la care s\ porni]i. 2.AUTODESK. Ve]i modifica func]ia de la exerci]iul 29.

_PLINE" pt1 (list (car pt1) (car (cdr pt3))) pt3 (list (car pt3) (car (cdr pt1))) "_C" ) (setvar "CMDECHO" old_cmdecho) (prin1) ) 50793936. (defun c:rectangle (/ pt1 pt2) (setq old_cmdecho (getvar "CMDECHO")) (setvar "CMDECHO" 0) (if (= 1 (logand 1 (getvar "UNDOCTL"))) (command ". Pute]i folosi rutina de tratare a erorilor pentru a anula automat rezultatele unei comenzi pe baz\ de AutoLISP p`n\ la punctul unde a intervenit eroarea.1 2/3/2011 •191 . amplasa]i un UNDO MARK la `nceputul rutinei. este adecvat\ pentru sesiunea curent\ AutoCAD.doc R. TRAINING LECTII DE BAZA AUTOLISP UNDO [i tratarea erorilor Pentru a permite utilizatorului s\ anuleze `ntr-o singur\ etap\ rezultatul unei comenzi pe baz\ de AutoLISP. Instruc]iunea if testeaz\ dac\ UNDO este activat\. INC. Variabilele de sistem UNDOCTRL [i UNDOMARKS pot fi examinate de un program AutoLISP pentru a determina ce ac]iune de anulare. dac\ exist\ vreouna.2. utilizatorul poate anula rezultatul comenzii cu comenzile U sau UNDO BACK. atunci d\ o comand\ UNDO MARK la `nceputul rutinei. Dac\ da._UNDO" "_MARK") ) (setq pt1 (getpoint "\nFirst corner: ")) (setq pt3 (getpoint "\nOther corner: ")) (command ". admi]ind faptul ca UNDO CONTROL este setat pentru ONE sau ALL. Exemplu Aceast\ defini]ie a comenzii RECTANGLE permite utilizatorului s\ anuleze rezultatele comenzii `ntr-o singur\ etap\.AUTODESK. Dup\ ce utilizatorul introduce o comand\ RECTANGLE.

AUTODESK, INC.

Exemplu
Extindem codul UNDO pentru a include rutina de tratare a erorilor. Dac\ rutina este anulat\ dintr-un motiv oarecare [i UNDO este disponibil, rezultatul comenzii p`n\ la punctul de eroare este anulat automat. Se seteaz\ o variabila de condi]ie pentru a fi examinat\ `n rutina de tratare a erorilor. Un UNDO GROUP este activat `n comand\ [i corelat cu un UNDO END. NOTA • Fi[ierul ai_utils.lsp, versiunea 12 din directorul support con]ine c`teva rutine pentru folosirea codului UNDO `ntr-un program AutoLISP. continuare pe pagina urmatoare

•192

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

(defun c:rectangle (/ pt1 pt2)

(setq old_cmdecho (getvar "CMDECHO")) ;store orignal command echo (setvar "CMDECHO" 0) ;turn off command echo (setq old_error *error*) (defun *error* (msg) (command) ;save default error handler ;define new error handler ;cancel any command `n progress

(if rect_undo_flag ;if the undo flag is t... (progn (command "._UNDO" "_END") ;end the group... (command "._U") ;undo the command... (setq rect_undo_flag nil) ;and clear the flag ) ) (setvar "CMDECHO" old_cmdecho) ;restore system variable (if (/= "Function cancelled" msg) ;no message if user cancels (if (= msg "quit / exit abort") ;no message if program (princ) ;deliberately aborts (princ (strcat "\nError: " msg));otherwise, print error for user ) (princ) ) (setq *error* old_error) ;restore default error handler (princ) ;quiet exit ) (if (= 1 (logand 1 (getvar "UNDOCTL")));if UNDO is on... (progn (command "._UNDO" "_GROUP") ;start an UNDO GROUP... (setq rect_undo_flag t) ;and set a flag ) (setq rect_undo_flag nil) ;else, clear the flag ) (setq pt1 (getpoint "\nFirst corner: ")) (setq pt3 (getpoint "\nOther corner: ")) (command "pline" pt1 (list (car pt1) (car (cdr pt3))) pt3 (list (car pt3) (car (cdr pt1))) "c" ) (if rect_undo_flag ;if the flag is set... (progn (command "._UNDO" "_END") ;end the UNDO GROUP... (setq rect_undo_flag nil) ;and clear the flag ) )

50793936.doc R.2.1 2/3/2011

•193

AUTODESK, INC.

(setvar "CMDECHO" old_cmdecho) (setq *error* old_error) (prin1) )

;reset original command echo ;restore default error handler ;if command is successful ;quiet exit

•194

AUTODESK, INC. TRAINING

LECTII DE BAZA AUTOLISP

Opera]ii cu fi[iere
AutoLISP poate citi [i scrie fi[iere text de tip ASCII.

Obiective
~n acest capitol ve]i studia: • • • • • • Ce este un descriptor de fi[ier [i cum este folosit. Cum s\ deschide]i un fi[ier pentru opera]ii de citire sau scriere. Cum s\ scrie]i linii de text `ntr-un fi[ier deschis. Cum s\ citi]i linii de text dintr-un fi[ier deschis. Cum s\ descoperi]i sf`r[itul unui fi[ier text. Cum s\ `nchide]i un fi[ier.

Func]iile fi[ier I/O
Opera]iile de citire [i scriere `ntr-un fi[ier sau opera]ii I/O `ntr-un fi[ier se realizeaz\ cu ajutorul a dou\ func]ii: read-line [i write-line. Deschiderea [i `nchiderea fi[ierelor se realizeaz\ de asemenea prin dou\ func]ii: open [i close.

Deschiderea unui fi[ier
Func]ia open cere dou\ argumente: numele unui fi[ier ce urmeaz\ a fi deschis [i modul de deschidere a acestuia. Ambele argumente trebuie s\ fie [iruri. Dac\ func]ia open reu[e[te, returneaz\ un descriptor de fi[ier. Dac\ e[ueaz\, returneaz\ nil. Programul dvs. trebuie s\ p\streze descriptorul de fi[ier `ntr-o variabil\! Dac\ nu-l p\stra]i, nu ve]i putea citi, scrie sau `nchide fi[ierul. Descriptorul de fi[ier este un argument obligatoriu pentru func]iile care scriu `n, citesc din/sau `nchid fi[ierul. Exist\ trei tipuri valide de moduri de deschidere a unui fi[ier. Fiecare trebuie s\ fie reprezentat de o liter\ mic\ despar]it\ prin semne de punctua]ie.

50793936.doc R.2.1 2/3/2011

•195

AUTODESK, INC.

Open mode "r" "w"

Descriere Deschiderea fisierului pentru citire. Deschiderea fisierului pentru scriere. daca exista un fisier cu acelasi nume se va produce o suprascriere. Deschiderea fisierului pentru adaugare. daca exista un fisier cu acelasi nume, va fi adaugat la sfirsitul acestuia.

"a"

Tabelul 28. Moduri de a deschide un fi[ier.

De exemplu, aceast\ expresie deschide un fi[ier numit test.txt. pentru o opera]ie de scriere.
Command: (setq fp (open "test.txt" "w")) <File: #xxxxx> Command: !fp <File: #xxxxx>

Scrierea `ntr-un fi[ier
Func]ia write-line va scrie un [ir de text `ntr-un fi[ier deschis. Aceast\ func]ie cere dou\ argumente: un [ir de tip text [i un descriptor de fi[ier. Al doilea argument este op]ional; dac\ nu este introdus, func]ia write-line va scrie [irul pe display. Presupune]i c\ variabila fp este legat\ de un descriptor de fi[ier valid returnat prin deschiderea unui fi[ier pentru o opera]ie de scriere. Aceste expresii scriu dou\ linii de text `ntr-un fi[ier.
Command: (write-line "First line." fp) "First line." Command: (write-line "Second line." fp) "Second line."

~nchiderea unui fi[ier
Trebuie s\ `nchide]i fi[ierul imediat dup\ opera]ii de scriere, citire sau ad\ugare. Dac\ nu-l inchide]i, resursele sistemului dvs. vor fi limitate, `n particular num\rul de handlere de fi[iere disponibil. Func]ia close va `nchide un fi[ier deschis. Func]ia cere un argument: un descriptor de fi[ier valid. Func]ia returneaz\ nil . Aceast\ expresie va `nchide fi[ierul deschis [i `n care s-a scris `n cele dou\ exemple anterioare.
Command: (setq fp (close fp))

•196

Deschide]i un fi[ier. Ar trebui s\ con]in\ trei linii de text. TRAINING LECTII DE BAZA AUTOLISP Deoarece descriptorul de fi[ier fp nu mai este valid dup\ ce fi[ierul la care se refer\ este `nchis. INC.AUTODESK.2. Command: (setq fp (close fp)) nil Command: !fp nil Deschide]i fi[ierul test. Deschide]i un fi[ier numit test.1 2/3/2011 •197 .doc R. Command: (setq fp (open "test.txt" "w")) <File: #xxxxx> Command: !fp <File: #xxxxx> Scrie]i c`teva linii de text `ntr-un fi[ier. Se elibereaz\ astfel memoria [i se ob]ine asigurarea c\ fp nu poate fi folosit `n afara contextului. Command: (write-line "Coders" fp) "Coders" Command: (write-line "of the" fp) "of the" Command: (write-line "Lost Spark" fp) "Lost Spark" ~nchide]i fi[ierul.txt `n editorul text [i examina]i-l.txt pentru o opera]ie de scriere. Exemplu Introduce]i expresiile care urmeaz\. Examina]i fi[ierul cu editorul de text dup\ ce a fost `nchis. de exemplu dac\ se seteaza fp la nil este echivalent cu a `nchide fi[ierul. Coders of the Lost Spark 50793936. scrie]i c`teva linii de text `n fi[ier [i `nchide]i fi[ierul.

Nu pute]i modifica sau scrie `ntr-un fi[ier care a fost deschis pentru o opera]ie de citire.) Func]ia open apelat\ cu un argumenr "r" returneaz\ un descriptor de fi[ier dac\ fi[ierul specificat exist\. linie cu linie. Deschiderea unui fi[ier pentru o opera]ie de citire C`nd deschide]i un fi[ier pentru o opera]ie de citire. Func]ia read-line cite[te o linie de text dintr-un fi[ier. INC. Cere un argument op]ional: un descriptor de fi[ier valid pentru un fi[ier care a fost deschis pentru o opera]ie de citire. Dac\ argumentul nu este ad\ugat. Func]ia read-line returneaz\ o linie de text pe care o cite[te dintr-un fi[ier. •198 . dac\ nu. `nchide]i-l [i redeschide]i-l pentru o opera]ie de scriere.AUTODESK. O apelare ulterioar\ a func]iei read-line va face ca func]ia s\ citeasc\ urm\toarea linie de text din fi[ier [i a[a mai departe. func]ia read-line cite[te intrarea de pe tastatur\. Func]ia read-line `ncepe cu prima linie de text dintr-un fi[ier. Func]ia read-line returneaz\ nil dac\ ajunge la cap\tul fi[ierului. pute]i citi datele din fi[ier. (Dac\ vre]i s\ introduce]i date `n fi[ier. returneaz\ nil.

Deschide]i fi[ierul test. Command: (setq fp (close fp)) nil Command: !fp nil 50793936.txt" "r")) <File: #XXXX> Command: !fp <File: #XXXX> Citi]i prima. Command: (read-line fp) “Coders” Command: (read-line fp) "of the" Command: (read-line fp) "Lost Spark" ~ncerca]i s\ citi]i p`n\ la sf`r[itul fi[ierului. TRAINING LECTII DE BAZA AUTOLISP Exemplu Introduce]i expresiile care urmeaz\. Command: (setq fp (open "test.doc R.1 2/3/2011 •199 .2. Command: (read-line fp) nil ~nchide]i fi[ierul.txt pentru o opera]ie de citire. Func]ia read-line va returna nil. a dou\ [i a treia linie din fi[ier.AUTODESK. ~n acest exemplu se presupune c\ a]i creat cu succes fi[ierul text. INC.txt din exerci]iul anterior.

Func]iile write-line [i read-line scriu [i citesc din fi[iere. Un fi[ier poate fi deschis numai pentru o singur\ opera]ie. Recapitulare • • Un descriptor de fi[ier este un pointer al unui fi[ier returnat de func]ia open . Un program trebuie s\ p\streze un descriptor de fi[ier pentru a avea acces la fi[ierul pe care l-a deschis. INC. scriere [i ad\ugare. Fi[ierele pot fi deschise pentru opera]ii de citire. • • • • • •200 .AUTODESK. Argumentele pentru modul de deschidere a fi[ierelor la func]ia open trebuie s\ fie litere mici. Func]ia read-line returneaz\ nil c`nd ajunge la cap\tul fi[ierului.

• Ve]i crea un program AutoLISP pentru citit fi[iere text de tip ASCII [i pentru copiat fi[iere `ntr-un fi[ier cu nume diferit.1 2/3/2011 •201 . Salva]i fi[ierul `n directorul student sub numele de copyfile.lsp `n AutoCAD. Varibilele legate de descriptoarele de fi[ier au fost definite global a[a `nc`t rutina de tratare a erorilor le poate `nchide dac\ este necesar. 7.AUTODESK.2. • • Instruc]iuni 1.doc R. 5. Introduce]i codul care urmeaz\ `ntr-un document nou din editorul text. ~nc\rca]i copyfile. Aceast\ func]ie folose]te o rutin\ de tratare a erorilor cu apelare asem\n\toare cu cea din exerci]iul precedent. Depana]i programul dac\ este necesar. ~ncerca]i s\ copia]i dou\ fi[iere text. 2. Ve]i deschide fi[iere at`t pentru citit c`t [i pentru scris. 6. Ave]i nevoie de timp ca s\ revizui]i [i s\ `n]elegeti codul [i de asemenea s\ introduce]i textul surs\.lsp. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 31: COPIEREA UNUI FISIER TEXT Ave]i 30 de minute la dispozi]ie s\ termina]i acest exerci]iu. continuare pe pagina urmatoare 50793936. 4. ~n acest exerci]iu: • Ve]i aprofunda cuno[tin]ele despre fi[iere I/O `n AutoLISP. este un program vast. Activa]i comanda COPYFILE. 3. INC.

check that we got good values for both file names .aborts (princ (strcat "\nError: " msg)). (defun c:copyfile (/ r_fp_name w_fp_name r_fp_line) . .otherwise.save default error handler (setq old_error *error*) (defun *error* (msg) .define new error handler (if .if source file returned. .close source file if open r_fp (setq r_fp (close r_fp)) ) (if . INC. r_fp w_fp r_fp_name w_fp_name r_fp_line source file destination source file destination source file descriptor file descriptor name file name text line . .restore default error handler (princ) . . print error for user ) (princ) ) (setq *error* old_error) .no message if user cancels (if (= msg "quit / exit abort") .quiet exit ) .") (exit) ) •202 .AUTODESK.get source file from user with dialogue (setq r_fp_name (getfiled "Select Source File" "" "txt" 0)) . get destination file from user (if r_fp_name (setq w_fp_name (getfiled "Destination File" "" "txt" 1)) ) .exit if not (if (or (not r_fp_name) (not w_fp_name) ) (progn (prompt "\nMust specify both source and destination file.no message if program deliberately (princ) .close destination file if open w_fp (setq w_fp (close w_fp)) ) (if (/= "Function cancelled" msg) .

TRAINING ) LECTII DE BAZA AUTOLISP continuare pe pagina urmatoare 50793936.2.AUTODESK.doc R.1 2/3/2011 •203 . INC.

close the source and destination files (setq r_fp (close r_fp)) (setq w_fp (close w_fp)) .check that file names are different .exit if it fails (if (not (setq r_fp (open r_fp_name "r"))) (progn (prompt "\nCould not open source file.source line until end of file is reached (while r_fp_line (write-line r_fp_line w_fp) (setq r_fp_line (read-line r_fp)) ) . .. .get first line from source file (setq r_fp_line (read-line r_fp)) .") (exit) ) ) .") (exit) ) ) .exit if not (if (= r_fp_name w_fp_name) (progn (prompt "\nSource same name as destination file.AUTODESK. INC.write source line to destination file and get next.restore original error handler •204 .close source file and exit if it fails (if (not (setq w_fp (open w_fp_name "w"))) (progn (setq r_fp (close r_fp)) (prompt "\nCould not open destination file..open source file for read .open destination file for read .") (exit) ) ) .

1 2/3/2011 •205 . INC.quiet exit LECTII DE BAZA AUTOLISP 50793936.AUTODESK.2. TRAINING (setq *error* old_error) (prin1) ) .doc R.

AUTODESK. Activa]i comanda IOTEXT. EXERCITIUL32: CITIREA UNUI FISIER TEXT SI CREAREA ENTITATII “TEXT” Acesta este un exerci]iu op]ional.lsp. 4. Acesta este un subset de facilit\]i inclus `n ACAD R 12 din cadrul fi[ierului asctext. INC. Introduce]i codul care urmeaz\ [i salva]i-l `ntr-un fi[ier numit iotext. Un singur lucru trebuie s\ schimba]i: cere]i utilizatorului s\ pun\ spa]ii `ntre linii `n loc s\ scaleze mereu `n\l]imea textului cu 1. continuare pe pagina urmatoare •206 .5. Etape de lucru 1. Func]ia c:iotext v\ arat\ cum s\ citi]i un fi[ier text de pe disc [i s\ scrie]i textul sub form\ de entita]i text AutoCAD. 2. 3. Dac\ termina]i cu comanda COPYFILE pute]i continua cu acest exerci]iu op]ional. ~nc\rca]i fi[ierul `n AutoCAD. Deschide]i un nou fi[ier `n editorul text.lsp.

. It prompts for the height. .convert radians to degrees (setq old_cmdecho (getvar "CMDECHO")) .1 2/3/2011 •207 .lsp LECTII DE BAZA AUTOLISP Command function IOTEXT prompts for the name of a text file.no message if program deliberately (princ) . Text is always drawn left-justified. It reads each line of the file and draws the corresponding Text entities `n AutoCAD.0) ) (defun rtd (r) (/ (* r 180. . print error for user ) (princ) ) (setq *error* old_error) . . .save default error handler (defun *error* (msg) .0) pi) ) (defun C:IOTEXT() . .quiet exit ) (setq io_fp_name . TRAINING .2.aborts (princ (strcat "\nError: " msg)).close source file if open io_fp (setq io_fp (close io_fp)) ) (setvar "CMDECHO" old_cmdecho) . Iotext.restore default error handler (princ) .AUTODESK.turn off command echo (setq old_error *error*) .convert degrees to radians (defun dtr (d) (/ (* d pi) 180.restore command echo (if (/= "Function cancelled" msg) .no message if user cancels (if (= msg "quit / exit abort") .then exit 50793936. . .otherwise.doc R. INC.if the file dialogue is .define new error handler (if .save old command echo (setvar "CMDECHO" 0) .name of text file to read (getfiled "Select Text File" "" "txt" 0) ) (if canceled (= io_fp_name nil) (exit) ) . rotation angle and insertion point of the text.

continuare pe pagina urmatoare •208 . INC.AUTODESK.

if null response to rotation . TRAINING (if LECTII DE BAZA AUTOLISP .(dtr io_txt_rot) (/ pi 2)) ) (setq io_fp_line (read-line io_fp)) .2.doc R.no null.in AutoCAD.no null (setq .1 2/3/2011 •209 . Set the next Text entity insertion point. negative # (setq .") (exit) ) ) (initget 1) .text height io_txt_ht (getdist io_ins_pt "\nHeight: ") ) (setq io_txt_rot .restore default error handler .restore command echo .text rotation angle (getangle io_ins_pt "\nRotation: ") ) (if (not io_txt_rot) (setq io_txt_rot 0. draw a Text entity .AUTODESK. INC.0) ) (setq io_line_spacing (* io_txt_ht 1.next line of text from the file.set line spacing distance (setq .close file . set it to 0.prompt.0 .while we have a line of text from the file.if we can't open file then exit (not (setq io_fp (open io_fp_name "r"))) (progn (prompt "\nCan't open file for input. (while io_fp_line (command "text" io_ins_pt io_txt_ht io_txt_rot io_fp_line) (setq io_ins_pt (polar io_ins_pt io_spacing_rot io_line_spacing)) (setq io_fp_line (read-line io_fp)) ) (setq io_fp (close io_fp)) (setvar "CMDECHO" old_cmdecho) (setq *error* old_error) (prin1) ) . Get the .5) ) .quiet exit 50793936. zero.text insertion point io_ins_pt (getpoint "\nInsertion point: ") ) (initget (+ 1 2 4)) .set line spacing angle io_spacing_rot (.read line from file .

Seturi de selec]ie AutoCAD-ul poate a[eza grupuri de entit\]i `n seturi de selec]ie. •210 . Cum s\ folosi]i un set de selec]ie cu comenzi AutoCAD. cu fereastr\. cu filtru [i prin selectarea tuturor componentelor dintr-un desen. alc\tuit dintr-o colec]ie de nume de entit\]i.AUTODESK. AutoLISP poate p\stra maximum 128 de seturi de selec]ie deschise odat\ (num\rul ar putea fi mai mic pentru un sistem dat). Cum s\ lucra]i cu nume de entit\]i `ntr-un set de selec]ie. este bine s\ seta]i variabila pe nil pentru a elibera resursele folosite de setul de selec]ie. • • • • Note `n leg\tur\ cu seturile de selec]ie Un set de selec]ie `n AutoLISP reprezint\ un tip unic de date numit PICKSET. poate ac]iona global asupra grupului de entit\]i din setul de selec]ie. Cum s\ afla]i lungimea num\rului de entit\]i `ntr-un set de selec]ie. INC. Comenzile AutoCAD [i func]iile AutoLISP pot ac]iona asupra unui set de selec]ie [i fac`nd aceasta. C`nd a]i terminat cu o variabil\ atribuit\ setului de selec]ie. Cum s\ crea]i un set de selec]ie interactiv. altfel nu ave]i acces la setul de selec]ie [i nici o cale de a elibera resursele sistemului consumate de setul de selec]ie p`n\ ce nu ie[iti din AutoCAD. Obiective ~n acest capitol ve]i `nv\]a: • • • Cum s\ crea]i un set de selec]ie. Lega]i `ntotdeauna o variabil\ de un set de selec]ie pe care `l crea]i sau modifica]i. Setul de selec]ie nu este o list\.

De aceea ne vom concentra aten]ia asupra c`torva dintre formele de sintax\ cele mai folosite [i vom l\sa descrierea complet\ `n seama manualului AutoLISP Programmer’s Reference Manual. Exemple de lucru Deschide]i desenul ssget. "LINE"))) Tabelul 30.0 Selecteaza toate entita]ile Line din desen (ssget "X") (ssget "W" '(1. Sintaxa complet\ [i num\rul de aplica]ii ale func]iei s`nt prea complicate pentru a fi descrise aici `n `ntregime.doc R. Functia ssget ssadd ssdel sslength ssmemb ssname Creaza un set de selectie Adauga o entitate la un set de selectie Sterge o entitate dintr-un set de selectie Determina numarul de entitati dintr-un set de selectie Verifica daca fiecare entitate este parte a setului de selectie Extrage numele entitatilor din setul de selectie Operatia Tabelul 29. TRAINING LECTII DE BAZA AUTOLISP AutoLISP dispune de o varietate de func]ii pentru a crea [i manipula seturile de selec]ie.8. Acest capitol descrie func]ionalitatea [i arat\ exemple de func]ii ssget. cuprinz`nd metode care s`nt disponibile `n AutoCAD la mesajul “Select objects:”.0 0.Sintaxa si opera]iile functiei ssget.0) '(11.1. Functii pentru seturi de selectie Crearea unui set de selec]ie Func]ia ssget include virtual toate seturile de selec]ie interactive. INC.0 1. Ve]i folosi acest desen pentru urm\toarele patru exemple care arat\ cum s\ folosi]i ssget.0 0.0 8. Sintaxa functiei (ssget) Operatia “Select objects ´standard:cererea permite utilizatorului selec]ia interactiva " Selecteaza toate entita]ile din desen Selecteaza toate entita]ile din fereastra de la 1.0)) (ssget "X" '((0 . sslength [i ssname . 50793936.2.AUTODESK.1 2/3/2011 •211 .0 la 11.dwg `n directorul student.

Command: (setq ss1 (ssget)) Select objects: pick several objects Select objects: Enter <Selection set: 1> Verifica]i tipul de date ale variabilei ss1.AUTODESK. Command: erase Select objects: !ss1 Select objects: Enter Reface]i obiectele [terse. Command: oops •212 .dwg. Folosi]i ssget pentru a cere utilizatorului s\ selecteze obiecte. C`nd utilizatorul termin\ procesul de selec]ie cu tasta Return sau Space. Command: !ss1 <Selection-set: 1> Command: (type ss1) PICKSET Folosi]i setul de selec]ie pentru care variabila ss1 este legat\ `n cadrul comenzii AutoCAD. Selec]ia interactiv\ Func]ia ssget apelat\ f\r\ argumente va genera cererea standard "select objects:" `n zona liniei de comand\ [i va permite utilizatorului s\ selecteze obiecte interactiv. func]ia ssget returneaz\ valoarea ei sub forma unui nou set de selec]ie. INC. Exemplu C`nd v\ afla]i `n desenul ssget. introduce]i expresiile care urmeaz\.

Command: (command ". va returna un set de selec]ie compus din entit\]ile componente din desen. Crea]i un set de selec]ie din entit\]i care apar]in unei ferestre definit\ de punctele 6. op]iuni cum ar fi "W" pentru entit\]ile incluse `n fereastr\. [irul "X". introduce]i expresiile care urmeaz\.erase" ss1 "") Reface]i toate entit\]ile [terse.8. Aceast\ func]ie include entit\]ile care nu s`nt afi[ate pe monitor [i entita]ile de pe layere care s`nt `nghe]ate [i/sau `nchise. introduce]i expresiile care urmeaz\.1 2/3/2011 •213 . Folosi]i func]ia ssget pentru a crea un set de selec]ie format din toate entit\]ile din desen. "C" pentru entita]ile care traverseaz\ sau s`nt incluse `n fereastr\ [i "F" pentru entit\]i care intersecteaz\ o polilinie de selec]ie. TRAINING LECTII DE BAZA AUTOLISP Selectarea componentelor dintr-un desen Func]ia ssget apelat\ cu un singur argument. Command: (command ".erase" ss1 "") Reface]i obiectele [terse.0. INC.o fereastr\ Pute]i apela func]ia ssget cu un argument de tip [ir care corespunde oric\rei op]iuni standard la cererea "select objects:".doc R.AUTODESK.0 [i 11.dwg. Exemplu C`nd s`nte]i `n desenul ssget. Command: oops Selectarea componentelor dintr.dwg.3. Exemplu C`nd s`nte]i `n desenul ssget.2. Command: (setq ss1 (ssget "X")) <Selection set: 2> {terge]i toate obiectele din desen. Command: (setq ss1 (ssget "W" '(6 3 0) '(11 8 0))) <Selection set: 3> {terge]i toate entit\]ile care se afl\ `n interiorul ferestrei.. 50793936.

Command: (setq ss1 nil) nil •214 . Command: (setq ss1 (ssget "X" '((0 . o entitate trebuie s\ corespund\ fiec\rei propriet\]i din filtru pentru a putea fi ad\ugat\ la setul de selec]ie.AUTODESK.dcl este `n general o interfa]\ bazat\ pe dialog la func]ia ssget [i listele de tip filtru.erase" ss1 "") Reface]i obiectele [terse. Selectarea cu filtru Func]ia ssget v\ permite s\ selecta]i entit\]ile prin filtru.dwg. INC. Comanda AutoCAD FILTER definit\ de fi[ierele filter. Exist\ [i alte metode de creare a listelor de tip filtru. Implicit. Command: (command ". Command: oops Seta]i variabila ss1 pe nil [i elibera]i resursele folosite curent de setul de selec]ie. Crea]i un set de selec]ie format din entit\]ile de tip Line din desen. "LINE")))) <Selection set: 4> {terge]i toate entit\]ile de tip Line din desen. O list\ filtru este asem\n\toare cu o list\ asociat\ entit\]ii.lsp [i filter. introduce]i expresiile care urmeaz\. Exemplu C`nd v\ afla]i `n desenul ssget. Pute]i filtra `n acord cu oricare dintre propriet\]ile entit\]ilor care s`nt p\strate `n coduri de grup DXF `n cadrul listelor asociate entit\]ilor.

Command: (sslength ss1) 3 Seta]i variabila ss1 pe nil [i elibera]i resursele folosite curent de setul de selec]ie.AUTODESK. Command: (setq ss1 nil) nil 50793936.2.1 2/3/2011 •215 . Exemplu C`nd v\ afla]i `n desenul ssget. Command: (setq ss1 (ssget)) Select objects: pick three objects Select objects: Enter <Selection set: 5> Folosi]i func]ia sslength pentru a verifica num\rul de entit\]i din setul de selec]ie. INC. Crea]i un set de selec]ie din trei (3) entit\]i. Func]ia returneaz\ num\rul de nume al entit\]ilor din setul de selec]ie.dwg.doc R. introduce]i expresiile care urmeaz\. TRAINING LECTII DE BAZA AUTOLISP Lungimea unui set de selec]ie Func]ia sslength cere un singur argument: un set de selec]ie valid.

Folosi]i entget pentru a returna lista asociat\ fiec\rei entit\]i.dwg. INC. Crea]i un set de selec]ie din trei entit\]i. Num\rul `ntreg corespunde unui index 0 al numelui entit\]ii din setul de selec]ie. Numele entit\]ilor dintr-un set de selec]ie Un set de selec]ie este un grup format din nume de entit\]i AutoCAD. Func]ia ssname poate stabili numele oric\rei entit\]i dintr-un set de selec]ie. Func]ia ssname cere dou\ argumente: un set de selec]ie valid [i un num\r `ntreg. introduce]i expresiile care urmeaz\. Command: (setq ss1 nil) nil •216 . Command: (setq ename (ssname ss1 0)) <Entity name: xxxxxxxx> Command: (entget ename) Command: (setq ename (ssname ss1 1)) <Entity name: xxxxxxxx> Command: (entget ename) Command: (setq ename (ssname ss1 2)) <Entity name: xxxxxxxx> Command: (entget ename) Seta]i variabila ss1 pe nil [i elibera]i resursele folosite curent de setul de selec]ie. Command: (setq ss1 (ssget)) Select objects: pick three objects Select objects: Enter <Selection set: 6> Folosi]i ssname pentru a returna numele fiec\rei entit\]i din setul de selec]ie.AUTODESK. Exemplu C`nd v\ afla]i `n desenul ssget.

50793936. Setul de selec]ie nu este o list\. Func]ia ssname returneaz\ numele entit\]ii din setul de selec]ie. Un set de selec]ie `n AutoLISP are un tip de date PICKSET.1 2/3/2011 •217 . Func]ia ssget poate crea un set de selec]ie `n diferite moduri. Func]ia sslength returneaz\ num\rul de entit\]i din setul de selec]ie.AUTODESK. Elibera]i `ntotdeauna resursele folosite de un set de selec]ie dup\ ce a]i terminat de lucrat cu acesta.doc R. AutoLISP poate men]ine 128 de seturi de selec]ie deschise `n acela[i timp.2. TRAINING LECTII DE BAZA AUTOLISP Recapitulare • • • • • • • • Grupurile de entit\]i pot fi plasate `n seturi de selec]ie. INC. Lega]i o variabil\ ori de c`te ori crea]i un set de selec]ie.

Etape de lucru 1. ~nc\rca]i fi[ierul `n AutoCAD [i `ncerca]i comanda CHDIM. • Elibera]i setul de selec]ie. 7. Transfera]i ficare list\ asociat\ entit\]ii ca argument la func]ia chdim_mod. 6. • • • Cere]i utilizatorului un set de selec]ie. Ad\uga]i codul care realizeaz\ urm\toarele: • Crea]i o func]ie numit\ c:chdim. 3. Ve]i ob]ine un set de selec]ie interactiv de la utilizator. 5. Explora]i fiecare entitate din setul de selec]ie.lsp.lsp din directorul student. Ve]i accesa entit\]ile dintr-un set de selec]ie. ~n editorul de text deschide]i fi[ierul numit chdim. Dac\ ave]i timp v\ pute]i modifica programul astfel: • Ad\uga]i o rutin\ de tratare a erorilor. Ie[i]i din desen moddim f\r\ a salva modific\rile. 2.dwg din directorul student. Ve]i folosi func]ia ssget. INC. Deschide]i fi[ierul grafic moddim. Transforma]i variabilele corespunz\toare mai degrab\ `n variabile locale dec`t `n variabile globale. 4. •218 . • • Ad\uga]i un dic]ionar de date. EXERCITIUL33: CREAREA INTERACTIVA A SETURILOR DE SELECTIE ~n acest exerci]iu: • • • • Ve]i aprofunda cuno[tin]ele despre seturile de selec]ie din AutoLISP. Salva]i fi[ierul chdim.AUTODESK.

TRAINING LECTII DE BAZA AUTOLISP (defun chdim_mod (elist) (if .2.modify it based on.. (= "DIMENSION" (cdr (assoc 0 elist))) (entmod .AUTODESK.....substituting layer DIM.if entity is a dimension. elist ) ) ) ) 50793936.doc R. (assoc 8 elist) . INC.1 2/3/2011 •219 .for its current layer. (subst (cons 8 "DIM") ..

quiet exit 4. Deschide]i fi[ierul grafic moddim. va filtra toate entit\]ile cu excep]ia entit\]ilor de tip dimension [i va schimba entit\]ile pe layerul DIM.lsp. Introduce]i codul care urmeaz\. Activa]i comanda CHDIM2. Salva]i fi[ierul chdim2. Rezolva]i acest exerci]iu numai dac\ ave]i timp `n clas\._chprop" ss "" "LA" "DIM" "") (setq ss nil) (prin1) ) . exit . Crea]i un nou fi[ier `n editorul text numit chdim2.dwg din directorul student. Etape de lucru 1. 6. 2. implementeaz\ o versiune a CHDIM care este din punct de vedere func]ional echivalent\ cu versiunea anterioar\. 7.if no selec]ion-set.change the layer (command ". 3.get a selec]ion-set from user and filter out all but dimensions (setq ss (ssget “X”((0 .AUTODESK. INC.free selec]ion-set . ~nc\rca]i fi[ierul `n AutoCAD. 5.lsp. Codul care urmeaz\. P\r\si]i desenul moddim f\r\ s\ face]i modific\ri. "DIMENSION")))) (if (not ss) (exit) ) . (defun c:chdim2 () . •220 . Acest cod creaz\ func]ia c:chdim2. Aceast\ versiune folose[te un filtru pentru set de selec]ie `n combina]ie cu o selec]ie interactiv\ de entit\]i cu scopul de a amplasa numai entit\]ile de tip dimension `n setul de selec]ie. CHDIM2 va cere utilizatorului un set de selec]ie. EXERCITIUL 34: SETURI DE SELECTIE CU FILTRU Acesta este un exerci]iu op]ional.

doc R.AUTODESK. INC.2. TRAINING LECTII DE BAZA AUTOLISP 50793936.1 2/3/2011 •221 .

Cum s\ citi]i fiecare intrare `ntr-un tabel AutoCAD. Tabele `ntr-un desen AutoCAD are 8 tabele diferite care pot fi accesate de AutoLISP. •222 . Fiecare `n parte poate fi accesat\ secven]ial sau accesat\ pentru un nume de simbol dat. Cum s\ c\uta]i o intrare anume `ntr-un tabel AutoCAD. Tabele [i nume de simboluri Tabelele p\strez\ lista AutoCAD-ului cu nume de simboluri cum ar fi : layere. Dac\ se adaug\ al doilea argument op]ional [i acesta nu este nil. atunci func]ia tblnext returneaz\ primul nume de simbol din tabel. C\utarea secven]ial\ a tabelului layer Func]ia tblnext scaneaz\ un tabel [i returneaz\ o list\ asociat\ care con]ine datele unui obiect denumit din tabel sau returneaz\ nil dac\ ultima instruc]iune din tabel a fost atins\. Func]ia tblnext are o sintax\ ciudat\. Func]ia cere un argument: un [ir care corespunde unuia dintre numele de tabele AutoCAD. defini]ii Block [i tipuri de linii. Func]iile AutoLISP care acceseaz\ tabelele AutoCAD pot extrage datele asociate cu o tabel\ dar nu pot modifica o tabel\ sau datele sale. INC. func]ia returneaz\ simbolul cerut care `l urmeaz\ pe cel returnat prin apelarea anterioar\ a func]iei tblnext. dac\ nu se adaug\ argumentul. Obiective ~n acest capitol ve]i studia: • • • Tipuri diferite de tabele `ntr-un fi[ier grafic AutoCAD.AUTODESK. • • • • • • • • • • • • • • • • Block Dimstyle Layer Ltype Style UCS View Vport Fiecare tabel\ poate fi citit\ direct din AutoLISP.

1 2/3/2011 •223 . lista asociat\ pentru prima Command: (tblnext "LAYER" t) ((0 . pentru o descriere complet\ a codurilor din lista asociat\ layerelor. -5) (6 .AUTODESK. Lista de layere si proprietati care ilustreaza valorile returnate de functia tblnext Command: (tblnext "LAYER" t) ((0 . 0) (62 . 0) (62 . 7) (6 . Deoarece nu lucr\m cu entit\]i individuale. a c\rei cod este realizat `n acela[i mod `n care s`nt realizate codurile pentru liste asociate entit\]ilor. "0") (70 . "CONTINUOUS")) Command: (tblnext "LAYER") nil 50793936. "OBJECT") (70 . "LAYER") (2 . este clar c\ aceast\ list\ asociat\ nu are un grup -1 reprezent`nd un nume de entitate. "CONTINUOUS")) Command: (tblnext "LAYER") ((0 . Off Dezghetat. Exemplu Dac\ un desen ar con]ine layerele din tabelul de mai jos. 7) (6 . "HIDDEN") (70 . INC. Vezi anexa B din AutoLISP Programmer’s Reference Manual.doc R.2. "LAYER") (2 . "0") (70 . Off Inghetat. Layer 0 DIM HIDDEN OBJECT Stare Dezghetat. "DIM") (70 . On Culoare 7 sau alb 2 sau galben 5 sau albastru 1 sau rosu Tipul de linie continuu continuu ascuns continuu Tabelul 31. "CONTINUOUS")) Lista asociat\ este o list\ cu perechi cu punct. 0) (62 . "LAYER") (2 . 0) (62 . "CONTINUOUS")) Command: (tblnext "LAYER") ((0 . atunci s-expresiile care urmeaz\ ar returna listele asociate ar\tate mai jos. TRAINING LECTII DE BAZA AUTOLISP Exemplu Aceast\ expresie returneaz\ intrare `n tabelul layer. 1) (6 . 1) (62 . On Dezghetat. "HIDDEN")) Command: (tblnext "LAYER") ((0 . "Block and Table Group Codes". "LAYER") (2 . -2) (6 . "LAYER") (2 .

O bucl\ care returneaz\ listele asociate pentru toate numele de simboluri dintr-un tabel este u[or de implementat. INC.AUTODESK. Acest fragment de cod tip\re[te lista asociat\ pentru fiecare nume de simbol din tabelul layer. (setq tlist (tblnext "LAYER" t)) (while tlist (print tlist) (setq tlist (tblnext "LAYER")) ) •224 .

doc R. introduce]i codul care urmeaz\. 4.get the next entry.. .dwg `n directorul student..set up list of keywords for user prompt (initget "Block Dimstyle LAyer LType Style Ucs View VPort") (setq ttype ... . 3..2. Etape de lucru 1. 5. ~nc\rca]i programul `n AutoCAD..AUTODESK. Ve]i crea o nou\ func]ie care scaneaz\ fiecare intrare din tabel. Ve]i tip\ri numele fiec\rui simbol `n tabel. exit . TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 35: CAUTAREA INTR-O TABELA ~n acest exerci]iu : • • • Ve]i consolida cuno[tin]ele despre tabele.get first entry `n table .. ~ntr-un fi[ier nou din editorul text. Acesta implementeaz\ func]ia c:tlist.1 2/3/2011 •225 . 2. INC.quiet exit . Salva]i fi[ierul ca tlist.while we have a valid entry.if user pressed return.in the table. Deschide]i desenul moddim. TLIST (defun c:tlist () .lsp `n directorul student. Activa]i comanda TLIST.print its name. 50793936. cere utilizatorului un cod care corespunde unuia dintre tabelele AutoCAD iar apoi scaneaz\ tabelul secven]ial folosind func]ia tblnext [i tip\re[te numele fiec\rui simbol `n tabel.get table type from user (getkword "\nBlock/Dimstyle/LAyer/LType/Style/Ucs/View/VPort: ") ) (if (not ttype) (exit) ) (setq tlist (tblnext ttype t)) (while tlist (print (cdr (assoc 2 tlist))) (setq tlist (tblnext ttype)) ) (prin1) ) . ..

Exist\ 8 tabele `n AutoCAD. Func]ia cere dou\ argumente: un [ir care corespunde unui tabel AutoCAD [i un [ir care corespunde numelui unui simbol cerut. Command: (tblsearch "LAYER" "0") ((0 . "CONTINUOUS")) Recapitulare • • • • • AutoCAd p\streaz\ simbolurile cum ar fi layer-ele [i Block Definitions `n tabele. 0) (62 .AUTODESK. INC. func]ia tblsearch returneaz\ nil. "0") (70 . •226 . Func]ia tblsearch poate c\uta un anume simbol `ntr-un tabel. "LAYER") (2 . 7) (6 . Tabelele nu pot fi modificate direct de AutoLISP. Dac\ numele cerut nu exist\. Exemplu Aceast\ expresie caut\ layerul 0 [i-i returneaz\ lista asociat\. C\utarea unui nume de simbol Func]ia tblsearch va c\uta un nume de simbol `ntr-un tabel. Func]ia tblnext poate scana fiecare simbol din tabel.

CHKLAYER (defun c:chklayer () (setq lname .no 3. Acesta implementeaz\ func]ia c:chklayer.layer exists? (prompt (strcat "\nLayer " lname " exists. cere utilizatorului numele layerului [i determin\ dac\ layerul exist\ `n desenul respectiv iar apoi tip\re[te un mesaj adecvat pentru utilizator.get layer name from user (getstring "\nName of layer: ") ) (if (tblsearch "LAYER" lname) . 5.AUTODESK. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 36: CAUTAREA IN TABELA DE LAYER-E ~n acest exerci]iu: • • • Ve]i folosi func]ia tblsearch. 50793936.1 2/3/2011 •227 .2.dwg din directorul student. 4. INC. Ve]i determina dac\ layerul utilizatorul `n consecin]\. 2. ~ntr-un fi[ier nou din editorul de text introduce]i codul care urmeaz\. Activa]i comanda CHKLAYER. ")) (prompt (strcat "\nLayer " lname " does not exist. ~nc\rca]i programul `n AutoCAD. Deschide]i desenul moddim.quiet exit . Ve]i c\uta `n tabela Layer numele layerului dat de utilizator.yes .doc R. Salva]i fi[ierul text ca chklayer:lsp `n directorul student. ")) ) (prin1) ) . exist\ [i ve]i informa Instruc]iuni 1.

AUTODESK. Dac\ layerul exist\. ~ntreab\ utilizatorul care este numele layerului. Spune utilizatorului dac\ simbolul c\utat exist\. Etape de lucru 1. INC. func]ia spune operatorului tipul de linie [i culoarea atribuite layerului. 4. Caut\ tabelul pentru simbolul c\utat. EXERCITIUL 37: EXERCITII SUPLIMENTARE CU TABELE Acesta este un exerci]iu op]ional. ~ntreab\ utilizatorul ce tabel\ s\ caute. ~nc\rca]i func]iile `n AutoCAD [i testa]i-le `n desenul moddim. 2. c:chktable 1. •228 . ~ntreab\ utilizatorul care este simbolul cautat. Dac\ layerul exist\. 2. ~ntr-un fi[ier nou din directorul student scrie]i dou\ func]ii: c:chktable [i c:layerset. Salva]i totul `ntr-un fi[ier. grafic moddim.dwg `n directorul 2. 3. c:layerset 1. lega]i o variabil\ global\ de un set de selec]ie format din toate entita]ile de pe layerul respectiv. 3. 3. Deschide]i fi[ierul student.

3. 2. introduce]i codul care urmeaz\.1 2/3/2011 •229 . INC. ~ntr-un fi[ier nou din editorul de text.doc R. 50793936.2.AUTODESK.dwg din directorul student. Acesta implementeaz\ func]ia c:tsearch. Deschide]i fi[ierul grafic moddim. TSEARCH caut\ simbolul `ntr-un tabel [i dac\ simbolul exist\ tip\re[te fiecare cod de grup [i valoare din lista asociat\ simbolului. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 14: UN EXECITIU MAI COMPLEX DE CAUTARE IN TABELE Acesta este un exerci]iu op]ional Etape de lucru 1.

print first group code. . exit (setq ttarget .quiet exit 4. (if (not tlist) (progn (prompt "\nNo such entry.then truncate assoc list.if no list.get list for target. 5..") (exit) ) ) (while tlist (print (car (car tlist))) (print (cdr (car tlist))) (setq tlist (cdr tlist)) ) (prin1) ) ..if user pressed return.and value from assoc list.get table type from user (getkword "\nBlock/Dimstyle/LAyer/LType/Style/Ucs/View/VPort: ") ) (if (not ttype) (exit) ) .if user pressed return. .. •230 .. ~nc\rca]i programul `n AutoCAD [i testa]i comanda TSEARCH ..AUTODESK. so exit. exit (setq tlist (tblsearch ttype ttarget)). ...set up list of keywords for user prompt (initget "Block Dimstyle LAyer LType Style Ucs View VPort") (setq ttype . . Salva]i fi[ierul text ca tsearch. (defun c:tsearch () .while we still have a list.lsp `n directorul student. . INC.. ..get target search name (getstring (strcat "\n" ttype " table entry: ")) ) (if (not ttarget) (exit) ) . then target.was not found.. .from its table.

Ini]ializarea elibereaz\ zona de memorie destinat\ AutoLISP-ului [terg`nd toate func]iile definite de utilizator [i de aplica]ii._new File name: Command: !c:my_new nil apeleaz\ comanda AutoCAD NEW [i `ncepe un nou desen. Pentru a rezolva aceast\ problem\. Codul AutoLISP scrie fi[ierul script. C:MY_NEW Cu alte cuvinte..) Fi[ierul program run. [i vedem c\ este nil. [i variabilele din proces.lsp define[te dou\ func]ii AutoLISP: C:RUN [i C:RUN_REPORT.1 2/3/2011 •231 . probabil ve]i combina un program AutoLISP cu un fi[ier script pentru o procesare automat\. Acest lucru se datoreaz\ faptului c\ AutoLISP este `ntotdeauna ini]ializat `mpreun\ cu editorul grafic. Dorim s\ proces\m toate fi[ierele grafice din directorul student/batchdwg cu un program AutoLISP care tip\re[te un raport ce cuprinde num\rul de Block Definitions din desen [i numele lor.doc R. Ce se `nt`mpl\ c`nd aceast\ func]ie este `n ac]iune? Command: (defun c:my_new () (command ".2. INC._new" "")) C:MY_NEW Command: my_new Command: . Iat\ un exemplu tipic. (Acest exerci]iu presupune c\ un astfel de director cu fi[iere grafice exist\ deja `n computer. 50793936. define[te func]ia pentru a fi apelat\ din fi[ierul script [i apeleaz\ fi[ierul script. verific\m setarea fun]iei C:MY_NEW. Fi[ierul script re`ncarc\ [i apeleaz\ programul AutoLISP la fiecare nou desen. pute]i folosi fi[iere script `n combina]ie cu programe AutoLISP pentru a procesa mai multe desene cu acela[i cod AutoLISP. Dup\ ce editorul grafic a fost ini]ializat.AUTODESK. AutoLISP se ini]ializeaz\ la fiecare nou\ sesiune de editare. orice func]ie AutoLISP care recicleaz\ editorul grafic se autodistruge. adic\ ori de c`te ori `ncepe]i un nou desen sau edita]i unul deja existent. TRAINING LECTII DE BAZA AUTOLISP Fi[iere script [i AutoLISP Dac\ vre]i s\ folosi]i un program AutoLISP pentru a procesa c`teva desene `n editor.. pe r`nd. S\ presupunem c\ avem o func]ie AutoLISP definit\ dup\ cum urmeaz\.

c:run ADS ~ntr-un desen nou.scr d:\student\batchdwg\block5.txt. o aplica]ie real mode pentru ACAD R12 care se afl\ `n CompuServe ACAD Forum `n Library 2.AUTODESK. Command: (load "run") C:RUN_REPORT Command: run Dup\ ce ultimul desen a fost procesat. Func]ia listeaz\ numele fiec\rui Block `n desen [i de c`te ori Block a fost inserat. Urma]i instruc]iunile de mai jos.lsp [i apeleaz\ func]ia C:RUN_REPORT pentru fiecare desen. Scrie un fi[ier script care deschide fiecare desen. • • • • V\ asigur\ c\ aplica]ia ADS XDOS este `nc\rcat\. re`ncarc\ run. folose[te func]ia dosdir din fi[ierul xdos.rpt d:\student\batchdwg\block10. folosi]i comanda definit\ `n run.rpt [i se afl\ `n acela[i director ca [i desenul.lsp. examina]i con]inutul urm\toarelor trei fi[iere: • • • • • • d:\student\run.rpt •232 . INC. • Func]ia C:RUN_REPORT scrie un fi[ier raport pentru fiecare desen care con]ine Block Definitions. Cere un nume de director de la utilizator.exe. C:RUN execut\ urm\toarele activit\]i `n ordine. Cere o list\ cu toate fi[ierele grafice din director. Instruc]iunile de folosire a acestei func]ii se afl\ `n fi[ierul xdos. xdos este `n directorul student din computerul dvs. Fi[ierul raport are acela[i nume ca [i desenul cu o extensie . Apeleaz\ fi[ierul script.

attempt . expression.") .Sort the list of Block names.doc R. .If not there. . (setq block_name_list (acad_strlsort block_name_list)) ._OPEN\")" fp) "(command \".Get directory from . (foreach a (progn (princ (princ (princ (princ (princ ) ) dwgnames ._SCRIPT" "run") ) (defun C:RUN_REPORT () (setq block_name_list nil) . 50793936.Initialize list of Block names.Close run.lsp and apply the run_report command to each file.scr" "w")) LECTII DE BAZA AUTOLISP . (setq dwgnames (dosdir (strcat dwgdir "\\" "*.AUTODESK.Add its name to the list and block_table_list . INC.EXE" "bad")) (progn (prompt "\nCan't load XDOS.Open file run.") (exit) ) ) ) (setq dwgdir (getstring "\nDirectory: ")) user._OPEN\" \"N\"))\n" fp) (strcat dwgdir "\\" a "\n") fp) "(load \"run. .Call script as last . . (while .Check for dosdir .Get list of drawings. TRAINING (defun C:RUN () (if (not (member "DOSDIR" (atoms-family 1))) function.Get the number of Insert entities for each Block.load XDOS program.scr file.The script commands will open each drawing `n turn.scr for .Write script file. "(if (= 0 (getvar \"DBMOD\")) (command \".EXE.get the next one.2. load the . (if to (= "bad" (xload "XDOS.Keep the customer happy.dwg") 0) ) (setq fp (open "run. . (if (setq block_table_list (tblnext "BLOCK" t)) .if attempt fails.writing `n current dir.1 2/3/2011 •233 . exit . (setq block_name (cdr (assoc 2 block_table_list))) (setq block_name_list (cons block_name block_name_list)) (setq block_table_list (tblnext "BLOCK")) ) .file run.We have a Block? (progn (prompt "\nFinding Block names.lsp\")\n" fp) "run_report\n" fp) (setq fp (close fp)) (command ".

Print report to disk file dwgname. (cons block_name (if .. (repeat . ) (setq report_list (reverse report_list)) (setq s_set nil) . (setq report_list nil count 0) . "0" ) ) report_list ) ) (setq count (1+ count)) .find how many INSERT entities.Free selec]ion-set.add the dotted pair ("DOOR" ..First Block name.Add a dotted pair of the form report_list . (length block_name_list) .") (setq fp (open (strcat (getvar "DWGNAME") ".Get 'em all.("BLOCK_NAME" . (cons 0 "INSERT") (cons 2 block_name) ) ) ) (setq .") happy. (itoa (sslength s_set)) . . (prompt "\nFinding INSERT entities.Calculate number of spaces to 36th ===============" •234 ..Keep the customer . "0"). . "NUMBER") to (cons .the INSERT entities of the (list . the Block "DOOR" s_set .If. (repeat (length report_list) .Reverse report list. (setq block_name (nth count block_name_list)) (setq s_set . INC. (prompt "\nWriting report to disk.of a Block name and the number of Insert entities.AUTODESK.For all the Block names.Keep the customer happy. (princ ".rpt.the report_list.Next Block name.Returns selec]ion-set of all (ssget "X" . .Create a list of dotted pairs. for example..rpt") "w")) (write-line (strcat "Drawing " (getvar "DWGNAME") "\n") fp) (write-line "Block names # of insertions" fp) (write-line "=========== fp) (setq count 0) .") . (setq block_name (car (nth count report_list)) insert_number (cdr (nth count report_list)) ) (setq spacer "") .is not inserted `n this drawing. Each dotted pair consists .current block_name.Initialize the list and counter.

2.Write Block name.Quiet exit. and the number of block_name .rpt file.36 (strlen block_name)) (setq spacer (strcat " " spacer)) ) (write-line .AUTODESK. 50793936.Next block name. ) (setq fp (close fp)) ) ) (prin1) ) . (. spacer insert_number ) fp ) (setq count (1+ count)) .Close dwgname. spaces to the (strcat .1 2/3/2011 •235 . INC.INSERT entities for that Block. TRAINING LECTII DE BAZA AUTOLISP (repeat .character from end of Block name.36th character. .doc R.

AUTODESK. •236 . INC. Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat.

Aceast\ diagram\ ilustreaz\ lan]ul de entit\]i [i numele lor. TRAINING LECTII DE BAZA AUTOLISP Accesul la Polilinii Poliliniile s`nt entit\]i complexe. Acest capitol ilustreaz\ acest principiu cu ajutorul unei func]ii care: • • • • Cere utilizatorului s\ selecteze o polilinie. 50793936.1 2/3/2011 •237 . INC.AUTODESK.doc R. func]ia entnext va accesa subentit\]ile unei Polilinii [i atributele entit\]ilor Insert. Ele s`nt formate dintr-o entitate principal\ de tip "POYLINE" urmat\ de una sau mai multe entit\]i de tip "VERTEX " terminate de o entitate de tip "SEQUEND".Relatia dintre polyline ca entitate principala si subentitati ~n afara acces\rii entit\]ilor principale ne[terse din baza de date.2. POLYLINE Main entity Next entity name: VERTEX SEQEND Sub entity Next entity name: Next main entity in database VERTEX Sub entity Next entity name: VERTEX or SEQEND Figura 47. Vizualizeaz\ un raport despre fiecare entitate pe display. Iese atunci c`nd a ajuns la cap\tul poliliniei. Acceseaz\ subentita]ile unei polilinii.

(defun c:polylist () (setq old_error *error*) .otherwise.location.get its group 70 flags and (progn . exit .no message if program deliberately (princ) .and it's not the end of the .aborts (princ (strcat "\nError: " msg)).save default error handler (defun *error* (msg) .while we have an entity name . exit (exit) ) (setq ename (car epick)) (setq elist (entget ename)) (setq etype (cdr (assoc 0 elist))) (if (/= "POLYLINE" etype) (progn (prompt "\nNot a polyline.get entity name .AUTODESK.define new error handler (if (/= "Function cancelled" msg) . .store entity type .quiet exit ) (setq epick (entsel "\nSelect polyline: ")) .get association list .if it's a Vertex entity. (= "VERTEX" etype) .") ) (if (= 2 (logand 2 vflags)) •238 .no message if user cancels (if (= msg "quit / exit abort") .Polyline..check each flag and print (= 1 (logand 1 vflags)) .") (exit) ) ) (while (and ename (/= "SEQEND" etype) ) (princ "\nEntity type: ") (princ etype) . print error for user ) (princ) ) (setq *error* old_error) ..print the entity type (if . INC... and print location (setq vflags (cdr (assoc 70 elist))) (setq pt (cdr (assoc 10 elist))) (princ "\nLocation: ") (princ (car pt)) (princ " ") (princ (car (cdr pt))) (princ " ") (princ (car (cdr (cdr pt)))) (if .each if true (princ "\nVertex inserted by curve-fitting.restore default error handler (princ) .if no entity selected.select an entity (if (not epick) .if not a Polyline.

get next entity `n Polyline (if ...") ) (if (= 64 (logand 64 vflags)) (princ "\n3D Polyline mesh vertex.") ) (if (= 8 (logand 8 vflags)) (princ "\nSpline vertex created by spline-fitting.") ) ) ) .get its assocation list and (progn .1 2/3/2011 •239 . TRAINING LECTII DE BAZA AUTOLISP (princ "\nCurve-fit tangent defined for this vertex.if we have an entity name..doc R.quiet exit 50793936. INC.AUTODESK.stop screen from scrolling (getstring "\n\nPress RETURN to continue.") ) (if (= 32 (logand 32 vflags)) (princ "\n3D Polyline vertex.") ) (if (= 16 (logand 16 vflags)) (princ "\nSpline frame control point. ename ..restore old error handler .entity type (setq elist (entget ename)) (setq etype (cdr (assoc 0 elist))) ) ) ) (setq *error* old_error) (prin1) ) .") ) (if (= 128 (logand 128 vflags)) (princ "\nPolyface mesh vertex.2.") (setq ename (entnext ename)) .

•240 . Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat.AUTODESK. INC.

Block Table Named object Next entity name: Any type ENDBLK Sub entity Next entity name: None Next sub entity Any type Next entity name: Any type Figura 48.1 2/3/2011 •241 . Iese c`nd ajunge la cap\tul entit\]ii Block Definition.doc R. Acest capitol ilustreaz\ acest principiu printr-o func]ie care: • • • • • Cere utilizatorului s\ selecteze o entitate Insert care se refer\ la Block Definition. TRAINING LECTII DE BAZA AUTOLISP Accesul la Block Definitions Block Definitions s`nt entit\]i complexe. O entitate principal\ de tip "BLOCK" cu un nume unic este p\strat\ `n tabela AutoCAD Block.2. Relatia dintre intrarea in tabela Block si subentitatile acestuia. Func]ia entnext acceseaz\ subentit\]ile din defini]iile Block. Aceast\ diagram\ ilustreaz\ lan]ul de entit\]i [i numele entit\]ilor. Acceseaz\ subentit\]ile din Block Definition Tip\re[te lista asociat\ fiec\rei subentit\]i pe display. 50793936. Aceast\ entitate este urmat\ de una sau mai multe entit\]i de orice tip. INC.AUTODESK. Acceseaz\ Block Definition `n cadrul tabelei Block. terminat\ cu o entitate de tip "ENDBLK".

. INC.") (exit) ) ) (setq bname (cdr (assoc 2 elist))) .store entity type .store entity type ..no message if user cancels (if (= msg "quit / exit abort") .Block Definition.aborts (princ (strcat "\nError: " msg)).blist .if not an Insert.etype .bname . (defun c:blklist (/ blist bname elist ename epick etype) .get its assoc list (setq ename (cdr (assoc -2 blist))) (setq elist (entget ename)) (setq etype (cdr (assoc 0 elist))) (while (and ename (/= "ENDBLK" etype) ) (print elist) .get association list ..epick .if no entity selected.define new error handler (if (/= "Function cancelled" msg) .get name of Block Definition (setq blist (tblsearch "BLOCK" bname)).save default error handler (setq old_error *error*) (defun *error* (msg) .print entity's assoc list •242 .old_error Association list from Block table Name of Block Definition Entity association list Entity name List returned by entsel Entity type as string Default error handler .while we have an entity name .get entity name .ename .AUTODESK.otherwise. exit . exit (exit) ) (setq ename (car epick)) (setq elist (entget ename)) (setq etype (cdr (assoc 0 elist))) (if (/= "INSERT" etype) (progn (prompt "\nNot a block.select an entity (if (not epick) .no message if program deliberately (princ) .get its assoc list .get first entity `n Block . print error for user ) (princ) ) (setq *error* old_error) .quiet exit ) (setq epick (entsel "\nSelect block: ")) .elist .restore default error handler (princ) .and it's not the end of the .

..get next entity `n Block (if .1 2/3/2011 •243 .restore old error handler . TRAINING LECTII DE BAZA AUTOLISP .") (setq ename (entnext ename)) .AUTODESK...doc R.get its assocation list and (progn .stop screen from scrolling (getstring "\n\nPress RETURN to continue.quiet exit 50793936.entity type (setq elist (entget ename)) (setq etype (cdr (assoc 0 elist))) ) ) ) (setq *error* old_error) (prin1) ) .2.if we have an entity name. INC. ename .

Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat.AUTODESK. •244 . INC.

Func]ia returneaz\ lista asociat\ entit\]ii `n `ntregime dac\ reu[e[te s\ creeze o entitate.0) (11 5. cum ar fi layerul implicit. De exemplu. Func]ia entmake cere un argument: o list\ asociat\ entit\]ii. altfel returneaz\ nil.0) ) ) Exemplul 2 (entmake (list (cons (cons (list (list (list ) ) 0 "LINE") 8 "0") 10 1.0 1.0) 11 5.0) 50793936. INC.2.0 0. ARC.5.1 2/3/2011 •245 . TRAINING LECTII DE BAZA AUTOLISP Crearea entit\]ilor Line cu func]ia entmake Func]ia entmake creaz\ noi entit\]i AutoCAD f\r\ s\ foloseasc\ comenzi AutoCAD de tip LINE.1. Func]ia entmake adaug\ entit\]i noi direct `n baza de date.0 5. CIRCLE. "LINE") (8 .0 0.0 0.0.0 0.AUTODESK.0 1.0 1. Defini]ii op]ionale. Exemplul 1 (entmake '( (0 .0 5. fiecare dintre aceste expresii creaz\ o entitate Line `n WCS pe Layerul 0 de la 1.0 1. Lista asociat\ folosit\ ca argument trebuie s\ con]in\ toate informa]iile necesare pentru a defini entitatea.0 0. "0") (10 1.0 la 5. s`nt omise din lista asociat\.doc R.0) 210 0.0) (210 0.0 0.

EXERCITIUL 39: CREAREA UNEI LINII CU ENTMAKE Crea]i o func]ie numit\ c:xline `ntr-un fi[ier text numit xline.lsp `n directorul student Comanda • • • • XLINE ar trebui s\ fac\ urm\toarele: S\ cear\ utilizatorului un punct de start.AUTODESK. S\ cear\ utilizatorului un punct de sf`r[it. S\ deseneze linia `ntre cele dou\ puncte pe layerul curent. S\ creeze o entitate de tip Line `n baza de date prin apelarea func]iei entmake. •246 . INC.

desfiin]eaz\ fi[ierul temporar [i. `n cazul defini]iei Block. acesta creaz\ un fi[ier temporar `n care pastreaz\ toate datele defini]iilor.0 0.0 5.2.0 1. Defini]ia are un punct de baz\ de 5.1 2/3/2011 . INC.0) ) ) (entmake (list (cons 0 "VERTEX") (list 10 5. returneaz\ numele Blockului care a fost definit [i nu lista asociat\ entita]ii definite.0 [i 5. Dup\ definirea entit\]ii prin apelarea func]iei entmake).AUTODESK. (entmake (list (cons 0 "POLYLINE") (cons 66 1) (list 10 0.0 0.5. Polylines Expresiile care urmeaz\ creaz\ o entitate de tip polilinie pe layerul curent [i UCS cu o eleva]ie 0 [i dou\ vertexuri la 1.0) ) ) (entmake (list (cons 0 "VERTEX") (list 10 1.0.doc R.0) ) ) (entmake (list (cons 0 "SEQEND") ) ) Blocks Expresiile care urmeaz\ creaz\ o defini]ie Block numit\ myblock `n tabelul Block.0 0.0 [i este format\ din urm\toarele entit\]i: •247 50793936. AutoCAD creaz\ [i adaug\ o entitate de cap\t (o entitate SEQEND pentru o polilinie sau o entitate BLKEND pentru o defini]ie Block).5.1. defini]iile de Block [i entit\]ile Insert atribute pot fi definite prin apelarea de c`teva ori a func]iei entmake care s\ le defineasc\ subentit\]ile. De `ndat\ ce AutoCAD vede c\ func]ia entmake creaz\ o entitate complex\.0 0. TRAINING LECTII DE BAZA AUTOLISP Crearea entit\]ilor Polylines si Block Definitions cu func]ia entmake Entit\]i complexe cum s`nt poliliniile.

0 0.0) (list 11 10.5.0) (cons 40 1.0 cu o raz\ de 1.0 0.0 5.0) ) ) (entmake (list (cons 0 "CIRCLE") (list 10 5. • • O entitate de tip Line pe layerul curent [i UCS de la 5.0.0 la 10.0 1.0) ) ) (entmake (list (cons 0 "ENDBLK") ) ) •248 .0 0. 0 "BLOCK") 2 "MYBLOCK") 70 0) 10 0.0 5.0 0. O entitate de tip Circle pe layerul curent [i UCS la 5. INC.5.0.AUTODESK.0 0.0) (entmake (list (cons (cons (cons (list ) ) (entmake (list (cons 0 "LINE") (list 10 5.1.

TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 40: CREAREA UNEI POLILINII CU FUNCTIA ENTMAKE 1.1 2/3/2011 •249 . S\ apeleze func]ia entmake at`ta timp c`t utilizatorul selecteaz\ un punct.lsp `n directorul student. Salva]i fi[ierul text. S\ ias\ din bucla c`nd utilizatorul introduce o valoare nul\.2. 2. 3. INC. Crea]i o func]ie numit\ c:polymake `ntr-un nou fi[ier text numit polymake. S\ cear\ utilizatorului un vertex.doc R. ~nc\rca]i programul `n AutoCAD [i `ncerca]i comanda POLYMAKE .AUTODESK. S\ termine de f\cut polilinia prin apelarea func]iei entmake pentru inserarea entit\]ii SEQUEND. Func]ia trebuie s\ fac\ urm\toarele: • • • • • • S\ fac\ o nou\ entitate de tip Polyline cu func]ia entmake. 50793936. S\ introduc\ o bucl\.

AUTODESK. Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat. INC. •250 .

sau cu null string. TRAINING LECTII DE BAZA AUTOLISP Tratarea [irurilor AutoLISP dispune de un set redus de func]ii care realizeaz\ opera]ii de baz\ pe [iruri: lungimea [irului. Cum s\ modifica]i caracterele dintr-un [ir.2. Un spa]iu valoreaz\ c`t un caracter.Command: (strlen "") 0 Command: (strlen "123456789") 9 Command: (strlen "1 3 5 7 9") 9 Command: (strlen "\nPoint:") 7 50793936. . Func]ia strlen cere un singur [ir ca argument. INC. caracterul escape este echivalent cu "an".doc R.1 2/3/2011 •251 . Afla]i lungimea c`torva [iruri de text. Exemplu Introduce]i expresiile care urmeaz\. fiecare caracter pe r`nd. Cum s\ concatena]i dou\ sau mai multe [iruri. Obiective ~n acest capitol ve]i studia: • • • • Cum s\ determina]i num\rul de caractere dintr-un [ir. Cum s\ analiza]i un [ir. concatenarea [i analiza. modificarea caracterelor. Func]ia strlen {irurile de tip text s`nt formate din 0 sau mai multe caractere aflate `ntre semnele cit\rii duble (“). Func]ia returneaz\ lungimea unui [ir `n caractere ca un `ntreg.AUTODESK. Un [ir cu nici un caracter este reprezentat ca "".

Func]ia strcat. Func]ia strcase Func]ia strcase cere un argument [i un argument op]ional. sau dac\ al doilea argument este t. Command: (setq x "one" y "two") "two" Command: (setq z (strcat x y)) "one two" •252 . Pentru aceasta trebuie s\ lua]i num\rul n. Exemplu Introduce]i expresiile care urmeaz\. Concatena]i cele dou\ [iruri. printre altele. Primul argument trebuie s\ fie un [ir de tip text. sa-l transforma]i `ntr-un [ir. De exemplu. este posibil s\ fie nevoie s\ cere]i utilizatorului ca a n-a instruc]iune dintr-un grup de instruc]iuni s\ fie procesat\. este folositoare pentru a formula cereri la utilizator. apoi s\-l concatena]i cu restul. caracterele celor trei [iruri de tip text. [irul cu toate caracterele transformate `n litere mari este returnat. Func]ia returneaz\ un singur [ir text: rezultatul concaten\rii argumentelor. Command: (strcase "to upper") "TO UPPER" Transforma]i Command: (strcase "To Upper") "TO UPPER" Command: (strcase "to upper" nil) "TO UPPER" Command: (strcase "TO LOWER" t) "to lower" Func]ia strcat Func]ia strcat cere unul sau mai multe argumente [i fiecare dintre ele trebuie s\ fie un [ir de tip text. Dac\ al doilea argument este omis sau este nil.AUTODESK. Exemplu Introduce]i expresiile care urmeaz\. adic\ nu este nil. INC. atunci se returneaz\ [irul cu caracterele transformate `n litere mici.

Manualele The C Programming Language de Brian Kernighan [i Dennis Ritchiei. un num\r `ntreg de indexare a caracterelor din [ir de la st`nga la dreapta. adic\ citirea pe r`nd a caracterelor dintr-un [ir [i compararea acestora cu valori. adic\ primul caracter din [ir are indexul 1.. probabil v\ este mai comod s\ c\uta]i un text despre limbajul C cu explica]ii [i exemple de analiz\ a [irului. Formula]i o cerere dintr-un [ir [i un num\r `ntreg. Kochan [i Advanced Turbo C de Herbert Schildt s`nt manuale care acord\ cel pu]in un capitol [irurilor [i analizei [irurilor. Func]ia substr returneaz\ un [ir care `ncepe cu caracterul indexat din [ir [i se continu\ cu num\rul de caractere din dreapta indexului indicat de al treilea argument. 50793936.AUTODESK. este discutat\ `n urm\torul capitol destinat func]iei substr. [i un pas de incrementare a num\rului de caractere spre dreapta [i inclusiv a caracterului indexat...2.. De exemplu aceast\ expresie returneaz\ [irul "4".") ".doc R. Func]ia substr Func]ia substr cere trei argumente: un [ir de tip text.." Command: (strcat a (itoa 1) b) "Processing object 1." Analiza [irurilor Pu]ine texte `n Lisp acord\ subiectului despre analiza [irurilor importan]a cuvenit\. Programming `n C de Stephen G.1 2/3/2011 •253 . De[i pare ciudat. TRAINING Command: (setq z (strcat x x z y y)) "one one one two two two" LECTII DE BAZA AUTOLISP Exemplu Introduce]i expresiile care urmeaz\. Command: (setq index 1) 1 Command: (setq a "Processing object " b ". Analiza [irurilor simple.. INC. Argumentul index `ncepe cu 1.

Func]ia strcat concateneaz\ dou\ sau mai multe [iruri. ar trebui s\ apela]i func]ia substr aflat\ `ntr-o bucl\. Un index al unui caracter dintr-un [ir este ini]ializat cu 1.AUTODESK. world. (substr "123456" 4 1) Aceast\ expresie returneaz\ [irul "456". (setq index 1) (setq string "Hello. INC. (substr "123456" 4 3) Formarea buclelor de program cu func]ia substr Pentru a analiza caracterele unui [ir pe r`nd. Func]ia strcase poate returna un [ir de tip text a c\rui caractere s`nt transformate `n litere mari sau mici. Fiecare caracter este returnat [i tip\rit separat [i indexul incrementat cu 1 `n bucl\. Analiza [irului `n AutoLISP se face cu func]ia substr. Bucla `ncepe [i se repet\ pentru fiecare caracter din [ir.") (repeat (strlen string) (print (substr string index 1)) (setq index (1+ index)) ) Recapitulare • • strlen returneaz\ lungimea unui [ir `n caractere. • • •254 .

4. 8.~n acest fi[ier crea]i o func]ie numit\ nospace .doc R. S\ `nceap\ o bucl\ care s\ se repete conform num\rului de caractere din [ir. adaug\ caracterul la valoarea concatenat\. Etape de lucru ~n editorul de text crea]i un fi[ier nou numit nospace. 3. [i ve]i elimina toate spa]iile din [ir.AUTODESK. INC. dac\ nu. 5. S\ incrementeze indexul cu 1. 6. ~n cazul `n care caracterul este un spa]iu. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 41: SIRURI SI ANALIZA LOR ~n acest exerci]iu: • • • Ve]i concatena [iruri pentru a crea cereri la utilizator. 50793936. Ve]i analiza toate caracterele dintr-un [ir. Ve]i folosi lungimea [irului pentru a determina de c`te ori trebuie repetat\ o bucl\. Aceast\ func]ie ar trebui s\ fac\ urmatoarele opera]ii `n ordine. S\ cear\ un argument: un [ir. 7. S\ seteze o variabil\ de ie[ire la [irul nul "". 1. pe r`nd.2. S\ extrag\ un caracter din [ir de la pozi]ia curent\. acesta se ignor\. S\ seteze o variabil\ de indexare la 1.1 2/3/2011 •255 . S\ returneze variabila cu spa]iile eliminate. 2.lsp `n directorul student.

3. 6. ~n acest program deschide]i fi[ierul testpars.txt `n directorul curent. Lansa]i programul de calcul tabelar.xls `n directorul student. INC. Func]ia parse cite[te un singur r`nd de text creat dup\ formatul descris mai sus. Etape de lucru 1. Fiecare linie din calculul tabelar reprezint\ un singur r`nd de text `n fi[ierul de ie[ire. ~n programul Excel comanda folose[te caracterul TAB ca delimitator. examina]i formatul Text din fi[ier. Folosi]i comanda SAVE AS pentru a salva datele ca un format text `ntr-un fi[ier. ~n editorul de text. ~nc\rca]i programul parse. Fiecare valoare returnat\ de parse este testat\. Delimitatorul este selectabil de c\tre utilizator [i de obicei lipsit de TAB sau virgul\. 4. 5.AUTODESK. ~nchide]i programul de calcul tabelar. Coloanele dintr-un [ir s`nt separate unele de altele printr-un caracter delimitator. •256 . 2. delimitator `n interiorul [irului [i un care dac\ nu este nil va returna toate delimitatorul care separ\ [irul `n lista ~mpreun\ cu func]ia parse este definit\ [i func]ia c:test_parse. Generalit\]i Programele de calcul tabelar cum s`nt programele Lotus 12-3 [i Microsoft Excel pot scrie date `ntr-un fi[ier de tip text. le analizeaz\ pe fiecare [i scrie rezultatul `ntr-un fi[ier asociat numit testpars. Func]ia returneaz\ o lista de [iruri unde fiecare coloan\ dintr-un r`nd este tratat\ ca un [ir individual. Func]ia parse cere caracterul folosit ca indicator de condi]ie pozi]iile unde apare returnat\. se scrie un mesaj `n fi[ierul asociat. trei argumente: [irul de analizat. Programul prezentat mai jos implementeaz\ o func]ie numit\ parse. dac\ apare o eroare. Func]ia TEST_PARSE cite[te o list\ de [iruri.lsp `n AutoCAD. EXERCITIUL 41: ANALIZA SIRURILOR CU CARACTERE DE DELIMITARE Pute]i rezolva acest exerci]iu dac\ Lotus® 1-2-3® [i Microsoft® Excel s`nt instalate `n computerul dvs.

character index `n string .initialize.1 2/3/2011 •257 .2. PARSETEXT va analiza fiecare [ir din fi[ierul text [i va afi[a pe display lista de [iruri returnat\ pentru fiecare r`nd de c\tre func]ia parse.string to place `n list . return delimiter as a separate string. . Length of string. . . .AUTODESK. .0 3/29/93 (parse str str expr) Parse a delimited text string and return a list of strings. . . . . . Character used to delimit the string. . . Activa]i comanda PARSETEXT [i urm\ri]i cererile.list to return . Adds a (defun parse (str delim rd / char index rl sstr strl) (setq sstr rl index strl ) .. . If t. . null string between two sequential delimiters. Text string to parse. .LSP Version 1. . Current string to add to return list. INC. . Current location of character from string. . Arguments: str (required) str (required) expr (required) Local variables: char index rl sstr strl STR INT LIST STR INT Current character from string. PARSE.. TRAINING LECTII DE BAZA AUTOLISP 7. . .doc R. . Return list of strings. .length of string "" nil 1 (strlen str) continuare pe pagina urmatoare 50793936. 8.

if it's the last char `n string (= index strl) (setq rl (cons "" rl)) ..add string to return list ) ) ) ).reverse the list to return so . just append the (setq sstr (strcat sstr char)) .AUTODESK. (if .increment the char index continuare pe pagina urmatoare •258 .add string to return list (setq sstr "") .end cond (setq index (1+ index)) ).if it's the last char `n string (progn (setq rl (cons sstr rl)) . it's (= str "") .else (setq rl (cons sstr rl)) .. INC.if flag is true.get a character (cond ( (= char delim) .then reinitialize string ) ) (if .line start or last was delim so (setq rl (cons "" rl)) .add null string to return list ) ) ( t .and the string is null.if string length is zero (zerop strl) .if we're here. rd (setq rl (cons char rl)) .strings are `n original order ).end progn ).end if ) .repeat for the length of string strl (setq char (substr str index 1)) .current string to the char (if (= index strl) .end repeat (reverse rl) the .if it's a delimiter (if .return list with null string '("") (progn (repeat .add null string to return list (progn .add delimiter to return list ) (if .

" "." "") ) ) (setq fp (open "testpars. . ." "") ("" ". .." "a" "." "a" "ab" "a. . . Write an error message with index every time (parse) fails to match a value `n a result list.a. ." "") ("" ". . . ." ".a" "a.b. Use two lists of strings with different delimiter characters: "\t" and ". . ."." "b") ("a" ". TRAINING ." "") ("" ". . Test for both nil and t delimiter flag. Local variables: fp string t1 t2 t1_r1 t1_r2 t2_r1 t2_r2 FILE STR LIST LIST LIST LIST LIST LIST Pointer Current List of List of List of List of List of List of to log file string argument to parse strings to test strings to test t1 results for nil delim flag t1 results for t delim flag t2 results for nil delim flag t2 results for t delim flag (defun c:test_parse (/ fp string t1 t1_r1 t1_r2 t2 t2_r1 t2_r2) (setq t1 '("" "\t" "a" "ab" "a\t" "\ta" "a\tb" "a\tb\t" "\ta\t" "\t\t") t1_r1 '(("") ("" "") ("a") ("ab") ("a" "") ("" "a") ("a" "b") ("a" "b" "") ("" "a" "") ("" "" "") ) t1_r2 '(("") ("" "\t" "") ("a") ("ab") ("a" "\t" "") ("" "\t" "a") ("a" "\t" "b") ("a" "\t" "b" "\t" "") ("" "\t" "a" "\t" "") ("" "\t" "" "\t" "") ) t2 '("" ".b" "a." ". Write test results to the log file TESTPARS. . .txt" "w")) continuare pe pagina urmatoare 50793936. . .TXT `n the current directory.doc R.0 3/30/93 test_parse LECTII DE BAZA AUTOLISP Test the function (parse). TEST_PARSE.LSP Version 1." "" ". .AUTODESK.") t2_r1 '(("") ("" "") ("a") ("ab") ("a" "") ("" "a") ("a" "b") ("a" "b" "") ("" "a" "") ("" "" "") ) t2_r2 '(("") ("" ". ." "") ("a") ("ab") ("a" ". INC.2.1 2/3/2011 •259 . ." "b" "." "a") ("a" ". . .

end if (if (not (equal (parse string "\t" t) (nth index t1_r2) ) ) (print (strcat "Test t1_r2 failed `n index " (itoa index) ".end if (setq index (1+ index)) )." ) fp ) ).end repeat continuare pe pagina urmatoare •260 . (setq index 0) (repeat (length t1) (setq string (nth index t1)) (print string fp) (print (parse string "\t" nil) fp) (print (parse string "\t" t) fp) (if (not (equal (setq x (parse string "\t" nil)) (setq y (nth index t1_r1)) ) ) (print (strcat "Test t1_r1 failed `n index " (itoa index) "." ) fp ) ). INC.AUTODESK.

" t) fp) (if (not (equal (parse string ".doc R.end if (if (not (equal (parse string "." nil) (nth index t2_r1) ) ) (print (strcat "Test t2_r1 failed `n index " (itoa index) ". INC.AUTODESK.1 2/3/2011 •261 ." nil) fp) (print (parse string ".end repeat (setq fp (close fp)) (prin1) ) 50793936." ) fp ) ). TRAINING LECTII DE BAZA AUTOLISP (setq index 0) (repeat (length t2) (setq string (nth index t2)) (print string fp) (print (parse string "." ) fp ) )." t) (nth index t2_r2) ) ) (print (strcat "Test t2_r2 failed `n index " (itoa index) ".2.end if (setq index (1+ index)) ).

Aceast\ pagin\ a fost l\sat\ liber\ `n mod inten]ionat.AUTODESK. INC. •262 .

TRAINING LECTII DE BAZA AUTOLISP Pointere de entit\]i Un pointer de entitate este un identificator unic [i permanent pentru o entitate dintr-un desen AutoCAD. ceea ce `nseamn\ c\ num\rul maxim de pointere pentru un singur desen este 264-1. Cum s\ extrage]i un pointer dintr-o list\ asociat\ entit\]ii. De exemplu.2. Lungimea maxim\ a unui [ir este de 16 caractere. INC.1 2/3/2011 •263 . de[i `ntotdeauna progreseaz\ de la mai mic la mai mare.AUTODESK. Pointerul unei entit\]i nu poate fi schimbat: poate fi numai distrus. Pointerele s`nt p\strate `n codul de grup DXF cimpul 5 al unei liste asociat\ entit\]ii. pointerul ei este retras [i niciodat\ refolosit `n acel desen. dec`t s\ `ncerc\m s\ ghicim ce pointer va atribui AutoCAD-ul entit\]ii. Atribuirea de pointere entit\]ilor Spunem c\ al 31-lea pointer atribuit entit\]ii ar putea fi "1F" deoarece atribuirea pointerelor nu este `ntotdeauna secven]ial\. primul pointer atribuit entit\]ii `ntr-un desen poate fi "1" iar pointerul treizeci [i unu poate fi "1F". Aplica]iile pot folosi pointere de entit\]i pentru a men]ine leg\turi asociative `ntre entita]i sau `ntre entit\]i [i seturi arbitrare de date `n timpul sesiunii de editare grafic\. Formatul unui pointer de entitate Pointerele de entita]i s`nt p\strate ca numere hexadecimale exprimate sub forma unui [ir.doc R. Obiective ~n acest capitol ve]i studia: • • • Cum s\ activa]i sau s\ distruge]i pointerele de entit\]i. Este imposibil de prev\zut `n toate cazurile care va fi urm\toarea atribuire pe care o va face AutoCAD-ul. 50793936. de aceea este necesar de stabilit `n mod explicit pointerul unei entit\]i din lista asociat\ entit\]ii. C`nd se [terge o entitate dintr-un desen. Cum s\ g\si]i o entitate cu ajutorul pointerului.

Activa]i pointerele `n sesiunea curent\. INC.. Activarea si dezactivarea pointerelor Ac]iunea de atribuire a pointerelor este dezactivat\ `n momentul `n care pointerele lipsesc. Comanda HANDLES DESTROY <CONFIRMATION-STRING> va dezactiva toate activit\]ile de atribuire a pointerelor `n sesiunea curent\. Extrage]i un pointer cu una din entit\]ile Line. Dac\ unei entit\]i din sesiunea curent\ i se atribuie un pointer. Pointerele pot fi dezactivate. ON/DESTROY: on Desena]i c`teva entit\]i Line. Verificarea atribuirii pointerelor Variabila de sistem HANDLES este setat\ la 1 c`nd pointerele s`nt activate `n sesiunea curent\. <CONFIRMATION-STRING> este unul din cele [ase [iruri posibile pe care le poate introduce utilizatorul. Command: line etc. func]ia handent va returna numele entit\]ii. introduce]i comenzile [i expresiile care urmeaz\. Command: (setq elist (entget (car (entsel)))) Select object: pick a line •264 . de aceea este imposibil de prezis de care [ir este nevoie ca s\ confirme comanda. va returna nil.AUTODESK. Exemplu ~ntr-o nou\ sesiune. Deoarece prin aceasta se poate dezactiva orice legatur\ `ntre entit\]ile AutoCAD [i de bazele de date externe (de exemplu pointerele s`nt folosite extensiv de c\tre AutoCAD SQL Extension). Extrage]i un pointer de entitate [i stabili]i numele entit\]ii folosind pointerul. AutoCAD genereaz\ unul dintre [iruri la `nt`mplare `n timpul execu]iei comenzii. G\sirea unei entit\]i cu ajutorul pointerului Func]ia handent cere un argument de tip [ir: pointerul unei entit\]i. Comanda HANDLE ON va activa pointerele permanent `n desenul curent.. pointerele pot fi distruse printr-un act deliberat din partea utilizatorului. Command: handles Handles are disabled. dac\ nu.

2. TRAINING LECTII DE BAZA AUTOLISP Command: (setq ehand (cdr (assoc 5 elist))) Command: !ehand "1B" (sau un [ir similar) 50793936.AUTODESK.1 2/3/2011 •265 .doc R. INC.

AUTODESK. Atribuirea de secven]ial\. Pointerele s`nt p\strate `n coduri DXF de grup 5 `ntr-o list\ asociat\ entit\]ii. Pointerul nu poate fi schimbat niciodat\. valori nu este sau `ntotdeauna dezactiveaz\ Comanda HANDLES pointerele. INC. El poate fi numai distrus. activeaz\ Func]ia handent va returna numele entit\]ii prin pointerul entit\]ii. Extrage]i numele entit\]ii folosindu-i pointerul. •266 . Command: (setq ename (handent ehand)) <Entity name: xxxxxxxx> Recapitulare • • • • • • Pointerele de entit\]i s`nt p\strate ca numere hexazecimale exprimate sub form\ de [iruri.

lsp. Ve]i p\stra pointerele `ntr-un fi[ier extern. TRAINING LECTII DE BAZA AUTOLISP EXERCITIUL 43: SALVAREA SETURILOR DE SELECTIE ~n acest exerci]iu: • • • Ve]i folosi un program pentru a citi pointerele entit\]ilor. Folosi]i comanda SAVESET [i salva]i dou\ sau mai multe seturi de selec]ie. Deschide]i o nou\ sesiune de editare grafic\ cu ssget. INC.lsp `n AutoCAD.1 2/3/2011 •267 . MOVE cu setul de selec]ie Deschide]i fi[ierul savset.lsp din directorul student implementeaz\ dou\ comenzi pentru AutoCAD: SAVESET [i GETSET . SAVESET salveaz\ pointerele dintrun set de selec]ie `ntr-un fi[ier extern a c\rui nume este <dwgname>. ~nc\rca]i programul saveset. p\streaz\ p`n\ la [ase seturi de selec]ie diferite dintr-un desen [i permite ca acestea s\ fie folosite `n timpul sesiunii de editare grafic\. • • • • • • • • Deschide]i desenul ssget. SAVESET GETSET cite[te pointerele SAVESET [i construie[te entit\]ilor dintr-un fi[ier creat de setul de selec]ie anterior din entit\]ile asociate cu pointerele. Folosi]i comanda GETSET pentru a extrage unul dintre seturile de selec]ie p\strate. ~nc\rca]i programul savset. Programul savset.2. unde <dwgname> este numele desenului respectiv [i <n> este un num\r cuprins `ntre 1 [i 6.st<n>. Folosi]i comanda anterior. Ve]i citi fi[ierul extern [i ve]i crea un set de selec]ie din pointerele entit\]ilor.lsp `n editorul de text [i examina]i codul. Etape de lucru P\stra]i seturile de selec]ie `n timpul sesiunii de editare prin scrierea [i cititrea pointerelor `n/[i din fi[ierul extern. 50793936.lsp din directorul student.doc R.AUTODESK.

Folosi]i oricare dintre aceste comenzi pentru a afla informa]ii despre entit\]ile pe care le-a]i desenat prin leg\turi `ntre pointere [i atribute `ntr-un bloc inserat aplica]iei. 3. 2. EXECITIUL 44: UN MANAGER SIMPLU PENTRU FISIERELE TIP DWG Acesta este un exerci]iu op]ional Fi[ierul drawman.AUTODESK. INC.lsp din directorul student implementeaz\ un sistem de management pentru fi[iere tip dwg. •268 . 4. Codul este scurt. Desena]i c`teva entit\]i. Pute]i folosi comenzile din acest fi[ier urm`nd aceste etape: 1. 5. u[or de `n]eles [i bine comentat. ~nc\rca]i fi[ierul drawman. Folosi]i comanda LOGOUT. FINGER RLIST SELUSER SELECO Aduce]i fi[ierul `n editorul de text [i studia]i-l.lsp `n AutoCAD. Folosi]i comanda LOGIN. foarte simplu pentru a ilustra modul cum pot fi folosite pointerele.

Sign up to vote on this title
UsefulNot useful