Sunteți pe pagina 1din 6

Dumitru Dragomir

1

TCCN – Sem. 1 – C3

Curs Nr. 3

1.19. Realizarea dialogului dintre AutoCAD şi AutoLISP Există un număr de funcţii care pot fi folosite pentru a construi un dialog între interpretorul de comenzi AutoCAD şi un program scris în AutoLISP. Prin utilizarea lor se pot cere sau introduce informaţii din/în baza de date a AutoCAD-ului, sau se pot transmite comenzi către interpretorul de comenzi AutoCAD.

1.19.1. (COMMAND arg1 arg2 … argn)

Această funcţie este cea mai folosită şi serveşte la transmiterea către interpretorul de comenzi din AutoCAD a unei succesiuni de cuvinte de comandă rezultate din evaluarea argumentelor arg1, … , argn. Setul de argumente transmis poate fi incomplet, urmând o succesiune de alte funcţii de naturi diferite, dar comanda, odată iniţiată, trebuie încheiată, folosind alte funcţii command ulterioare. La scrierea şirurilor de caractere ale argumentelor sintaxa comenzii AutoCAD trebuie respectată, după exact aceleaşi exigenţe ca şi în cazul scrierii ei de la tastatură. De exemplu:

(command “line” ‘(0 0) ‘(1 1) “”)

are acelaşi efect ca şi setul de comenzi AutoCAD următor:

command:LINE From point:0,0 To point:1,1 To point:<ENTER>

adică trasarea unei linii drepte de la punctul de coordonate 0,0 la punctul de coordonate 1,1. Observaţie: simbolul predefinit PAUSE poate fi folosit ca argument al funcţiei COMMAND pentru a realiza o pauză în succesiunea transmiterii de argumente către interpretorul de comenzi. La momentul pauzei utilizatorul poate interveni furnizând argumentul el însuşi. De exemplu:

(command “circle” “5,5” pause)

are ca efect desenarea unui cerc cu centrul în punctul de coordonate 5,5 şi raza furnizată de utilizator. Observaţie: funcţia COMMAND returnează întotdeauna rezultatul nil.

1.19.2. (ANGLE punct1 punct2)

Această funcţie returnează unghiul cu orizontala făcut de linia care trece prin punctele punct1 şi punct2, măsurat în radiani. De exemplu:

(angle ‘(0 0) ‘(1 1)) returnează valoarea 0.785398, adică π/4.

1.19.3. (DISTANCE punct1 punct2)

Această funcţie returnează distanţa dintre punctele punct1 şi punct2. De exemplu:

(setq p1 (list 0 0) p2 (list 1 1) d (distance p1 p2)) returnează 1.41421.

1.19.4. (GETANGLE [punct1] [mesaj])

Această funcţie poate apare în următoarele forme:

(getangle) aşteaptă plasarea cu cursorul grafic a două puncte în câmpul de lucru al AutoCAD şi returnează unghiul cu orizontala al liniei care uneşte punctele; (getangle punct1) aşteaptă plasarea celui de al doilea punct de către utilizator şi returnează unghiul cu orizontala al dreptei rezultante; (getangle “mesaj”) acelaşi efect ca şi la (getangle) dar în prealabil afişează şirul de caractere “mesaj”; (getangle punct1 “mesaj”) acelaşi efect ca şi la (getangle punct1) dar în prealabil afişează “mesaj”.

1.19.5. (GETDIST [punct1] [mesaj])

Această funcţie prezintă aceleaşi patru forme ca şi funcţia getangle, dar returnează distanţa dintre două puncte.

Dumitru Dragomir

2

TCCN – Sem. 1 – C3

1.19.6. (GETINT [“mesaj”])

Această funcţie preia de la utilizator o valoare întreagă şi o returnează ca rezultat. Dacă argumentul “mesaj” este specificat el este afişat ca mesaj de cerere. Dacă utilizatorul introduce altceva decât o valoare întreagă este afişat mesajul: Requires an inetger value. Try again:.

1.19.7. (GETREAL [“mesaj”])

Această funcţie preia de la utilizator o valoare reală şi o returnează ca rezultat. Dacă argumentul “mesaj” este specificat el este afişat ca mesaj de cerere. Dacă utilizatorul introduce altceva decât o valoare numerică este afişat mesajul: Requires a value. Try again:.

1.19.8. (GETORIENT [punct1] [“mesaj”])

Această funcţie se comportă la fel cu funcţia GETANGLE dar unghiul returnat este raportat la direcţia de referinţă stabilită prin comanda UNITS.

1.19.9. (GETPOINT [“mesaj”])

Această funcţie preia de la utilizator un punct şi returnează lista coordonatelor sale. Dacă argumentul “mesaj” este prezent el este afişat ca mesaj de cerere.

1.19.10. (GETSTRING [caz] [“mesaj”])

Această funcţie preia de la utilizator un şir de caractere şi îl returnează ca rezultat. Dacă argumentul caz este prezent şi diferit de nil, şirul de caractere poate conţine şi spaţii. Dacă argumentul “mesaj” este prezent el este afişat ca mesaj de cerere.

1.19.11. (GETVAR “nume_variabilă”)

O largă serie de comenzi din AutoCAD funcţionează în concordanţă cu o gamă de parametri de lucru stabiliţi de aşa-numitele variabile de sistem AutoCAD identificate prin nume_variabilă. Marea lor majoritate sunt de tip read-write, altele fiind doar de tip read-only. Aceste variabile de sistem pot fi citite din AutoLISP cu funcţia GETVAR, iar cele care nu sunt de tip read-only pot fi şi modificate cu funcţia SETVAR.

1.19.12. (SETVAR “nume_variabilă” valoare)

Această funcţie permite modificarea valorii unei variabile specificate prin nume_variabilă, dacă aceasta este de tip read-write.

1.19.13. (GRAPHSCR)

Această funcţie comută regimul de lucru în fereastra grafică AutoCAD. Returnează nil.

1.19.14. (TEXTSCR)

Această funcţie deschide fereastra text AutoCAD. Returnează nil.

1.19.15. (REDRAW [nume_de_entitate [mod]])

Această funcţie poate avea ca unul dintre argumente un aşa-numit nume de entitate, returnat de una din funcţiile speciale de acces la baza de date a entităţilor grafice din AutoCAD, funcţii despre care vom discuta mai târziu. Argumentul mod determină modul de redesenare a entităţii de nume specificat, astfel:

1 – redesenarea pe ecran a entităţii;

2 – ascunderea de pe ecran a entităţii;

3 – evidenţierea entităţii;

4 – dezactivarea evidenţierii entităţii.

Dacă mod nu se specifică are loc redesenarea entităţii. Dacă nume_de_entitate şi mod nu se

specifică este redesenat portul de vedere curent. Funcţia returnează întotdeauna nil.

1.19.16. (INITGET [opţiune] [listă_de_cuvinte_cheie])

Această funcţie iniţializează modul de acţiune pentru următorul apel al unei funcţii de forma

GETXXXX, mai puţin GETSTRING şi GETVAR, şi returnează nil. Argumentul opţiune poate avea valorile:

Dumitru Dragomir

3

TCCN – Sem. 1 – C3

1

– interzicerea răspunsului nul (binar 00000001);

2

– interzicerea valorilor numerice nule (binar 00000010);

4

– interzicerea valorilor numerice negative (binar 00000100);

8

– ignoră încadrarea în limitele desenului chiar dacă variabila LIMCHECK este ON (binar

00001000);

etc, până la 128 cu semnificaţii diferite (a se vedea manualul de utilizare). Prin însumarea valorilor de mai sus se pot obţine combinaţii pentru valoarea opţiunii. Astfel 5=1+4 (00000101) poate fi folosită pentru a specifica simultan opţiunile corespunzătoare (nu este permisă introducerea ca răspuns a caracterului ENTER şi nici valoare negativă). După iniţializarea cu INITGET, dacă râspunsul utilizatorului la o cerere a o funcţie GETXXXX este neconformă ce cerinţele este afişat un mesaj de eroare şi este repetată cererea. Argumentul listă_de_cuvinte_cheie este un şir de caractere sau set de şiruri de caractere separate prin spaţii şi care constituie posibile răspunsuri. De exemplu:

(initget “CENtru RAZa”) (getkword “Metoda?:)

permite un răspuns prin centru, raza, cen sau raz. Aşadar majusculele specifică prescurtările prin care se poate furniza răspunsul. Funcţia INITGET returnează nil, iar efectul ei încetează după primul apel al unei funcţii GETXXXX.

1.19.17. (GETKWORD “mesaj”) Această funcţie testează introducerea de către utilizator a unui cuvânt cheie autorizat de către funcţia INITGET folosită anterior şi repetă acţiunea până la obţinerea răspunsului corect pe care îl returnează ca rezultat.

1.20. Accesul la baza de date a entităţilor AutoCAD Utilizatorul poate accesa baza de date pentru entităţi AutoCAD folosind următoarele categorii de funcţii.

1.20.1. Funcţii de manipulare a entităţilor grafice

1.20.1.1. (ENTSEL [“mesaj”])

Această funcţie permite selectarea manuală de către utilizator a unei entităţi grafice de pe ecran. Rezultatul returnat este o listă de forma: (nume_de_entitate punct_de_selectare) Argumentul “mesaj” este opţional şi este afişat ca mesaj de cerere. De exemplu:

Command:LINE From point:1,1 To point:6,6 To point:<ENTER> Command:(setq ent (entsel “\nAlegeti o entitate:”)) Alegeti o entitate:3,3 (<Entity name: 3180520> (3.0 3.0 0.0))

Numele de entitate va putea fi folosit ulterior la operaţii de indicare a entităţii. De exemplu:

(setq nument (car ent))

returnează

<Entity name: 3180520>

Observaţie: Numele de entitate este un indicator de poziţie în baza de date a fişierului

temporar cu care lucrează AutoCAD. El diferă de la o sesiune de lucru la alta.

1.20.1.2. (ENTGET nume_de_entitate)

Această funcţie foloseşte argumentul nume_de_entitate obţinut anterior cu funcţia ENTSEL, ENTLAST, ENTNEXT sau SSNAME, şi returnează o listă compusă din subliste care definesc entitatea. De exemplu, pentru entitatea selectată la exemplul anterior:

(setq elist (entget nument)) returnează lista următoare (listă de entitate):

Dumitru Dragomir

4

TCCN – Sem. 1 – C3

((-1 . <Entity name: 3180520>)

numele entităţii

(0 . "LINE")

tipul entităţii

(8 . "0")

stratul entităţii

(62 . 1)

culoarea entităţii

(10 1.0 1.0 0.0)

punctul iniţial al entităţii

(11 6.0 6.0 0.0)

punctul final al entităţii

)

1.20.1.3. (ENTLAST)

Această funcţie returnează numele ultimei entităţi introdusă în baza de date. Dacă, în exemplul anterior, linia 1,1-6,6 ar fi fost ultima generată, se putea folosi cu acelaşi rezultat:

(entget (entlast))

1.20.1.4. (ENTNEXT [nume_de_entitate])

Această funcţie are ca efecte:

- dacă nume_de_entitate lipseşte este returnat numele primei entităţi din baza de date;

- dacă nume_de_entitate este specificat se returnează numele entităţii următoare din baza de

date;

- când nume_de_entitate reprezintă ultima entitate din baza de date funcţia returnează nil.

1.20.1.5. (ENTDEL nume_de_entitate)

Această funcţie şterge din baza de date entitatea de nume specificat. Dacă entitatea a fost deja ştearsă ea va fi restaurată.

1.20.1.6. (ENTMOD listă_de_entitate)

Acestei funcţii i se transmite ca argument o listă de entitate în care au fost operate modificări prin intermediul funcţiilor prelucrătoare de liste (în special folosind SUBST), dar fără a se opera asupra asociaţiei cu –1 (cea care conţine numele de entitate – a se vedea exemplul de mai sus). Funcţia modifică entitatea conform modificării operate în listă. De exemplu, pentru linia de mai sus:

(setq oldcul (assoc 62 elist)) returnează perechea cu punct (62 . 1) conţinând vechea culoare a entităţii (setq elist (subst (cons 62 5) oldcul elist)) returnează o listă nouă de entitate in care perechea cu punct (62 .1) este înlocuită cu perechea (62 . 5) (entmod elist) modifică entitatea conform noii componenţe a listei elist Observaţie: în cazul entităţilor simple modificarea operată de ENTMOD este imediat vizibilă pe ecran. În cazul entităţilor complexe modificarea va fi vizibilă abia după folosirea funcţiei ENTUPD.

1.20.1.7. (ENTUPD nume_de_entitate)

Această funcţie actualizează entitatea de nume specificat prin redesenarea ei conform ultimelor modificări operate asupra ei în baza de date.

1.20.2. Funcţii de acces la tabela de simboluri Obiectele predefinite şi având denumiri atribuite, cum ar fi straturile, tipurile de linii, stilurile de text şi blocurile de entităţi grafice, se reflectă într-o tabelă de simboluri la care se poate avea acces numai pentru citire, prin intermediul funcţiilor TBLNEXT şi TBLSEARCH.

1.20.2.1. (TBLNEXT tip_de_obiect [redeschidere])

Această funcţie caută în tabela de simboluri prima înregistrare care urmează ultimei înregistrări returnate de un apel anterior de căutare pentru obiectul de tipul specificat. Dacă o

Dumitru Dragomir

5

TCCN – Sem. 1 – C3

asemenea înregistrare există este returnată o listă de definiţie, altfel se returnează nil. Dacă argumentul redeschidere există şi este diferit de nil, rezultatul este returnarea primei înregistrări de tipul specificat existentă în baza de date. De exemplu:

(tblnext “BLOCK”) ((0 . “BLOCK”) (2 . “CUTIE”) (70 . 0) (10 9.0 2.0 0.0) (-2 . <Entity name : 3180552>)

)

ar putea returna următoarea listă:

numele tipului de obiect căutat numele obiectului indicator de stare punct de inserare numele primei entităţi conţinută în bloc

1.20.2.2. (TBLSEARCH tip_de_obiect nume_atribuit [corelare])

Această funcţie caută în tabela de simboluri o înregistrare pentru un obiect de tip specificat şi având numele atribuit specificat. Dacă argumentul corelare este prezent şi este diferit de nil, atunci următoarea evaluare a funcţiei TBLNEXT va returna înregistrarea care urmează după cea returnată de apelul curent al funcţiei TBLSEARCH, altfel cele două funcţii lucrează independent.

Ca exemplu, rezultatul obţinut anterior de funcţia TBLNEXT putea fi obţinut direct prin funcţia:

(TBLSEARCH “BLOCK” “CUTIE”)

1.20.3. Funcţii pentru manipularea seturilor de selecţie. Un set de selecţie în AutoLISP este o colecţie de nume de entităţi. El constituie o bază de date temporară care permite manipularea entităţilor folosind următoarele funcţii:

1.20.3.1. (SSGET [“mod”] [punct1 [punct2]] [lista_de_puncte] [lista_de_filtrare])

Această funcţie selectează o colecţie (set) de entităţi. Argumentul opţional “mod”, de tip şir de caractere, poate fi unul dintre şirurile de caracterele acceptate la selecţia de entităţi sub AutoCAD, adică:

W – metoda Window (numai entităţile complet incluse într-o fereastră dreptunghiulară);

WP – metoda WPolygon (numai entităţile complet incluse într-o fereastră poligonală);

C – metoda Crossing (toate entităţile care traversează o fereastră dreptunghiulară);

CP – metoda CPolygon (toate entităţile care traversează o fereastră poligonală);

L

– ultima entitate generată (Last);

P

– setul de selecţie selectat anterior

(Previous);

F

– metoda Fence (toate entităţile care traversează un traseu poligonal neînchis;

X

– toate entităţile din baza de date.

Argumentele punct1 şi punct2 sunt liste de coordonate de puncte folosite pentru definirea colţurilor diagonal opuse ale unor ferestre la metodele W şi C. Dacă argumentul punct2 lipseşte AutoCAD aşteaptă introducerea lui de către utilizator. Argumentul listă_de_puncte este o listă de liste de coordonate de puncte şi este folosită la metodele WP, CP şi F. Dacă SSGET este folosită fără argumente, AutoCAD invită la selectarea manuală obişnuită, încheiată prin ENTER. Argumentul lista_de_filtrare este o listă de asociaţii (perechi cu punct) care descriu proprietăţi ale entităţilor de selectat. Din totalitatea entităţilor încadrabile în aria descrisă de argumentul mod vor fi reţinute în set numai cele care se potrivesc cu cerinţele listei de filtrare. De exemplu:

(setq cercuri_rosii (ssget “X” (list (cons 0 “CIRCLE”) (cons 62 1))))

va reţine din toată baza de date numai entităţile de tip cerc de culoare roşie.

Numărul maxim de seturi de selecţie este de 128, orice încercare de a crea un set în plus se va solda cu returnarea rezultatului nil. Pentru a desfiinţa un set de selecţie devenit inutil acesta trebuie asociat cu nil, de exemplu:

(setq cercuri_rosii nil) (gc)

Dumitru Dragomir

6

TCCN – Sem. 1 – C3

Funcţia GC (Garbage collection – colectare de gunoaie) restituie sistemului memoria ocupată de entităţile AutoLISP desfiinţate.

1.20.3.2. (SSLENGTH set_de_selecţie)

Această funcţie returnează numărul de entităţi din setul de selecţie. Valoarea returnată este de

tip întreg dacă este de până la 32767 de entităţi şi de tip real pentru un număr mai mare.

1.20.3.3. (SSNAME set_de_selecţie indice)

Această funcţie returnează numele de entitate conţinută într-un set de selecţie, al cărei indice

de ordine (începând de la 0) este specificat de argumentul indice.

1.20.3.4. (SSADD [nume_de_entitate [set_de_selectie]])

Această funcţie are variantele următoare:

(ssadd) construieşte un nou set de selecţie vid;

construieşte un nou set de selecţie conţinând entitatea de

nume specificat; (ssadd nume_de_entitate set_de_selectie) adaugă entitatea de nume specificat la setul de selecţie specificat.

1.20.3.5. (SSDEL nume_de_entitate set_de_selectie)

Această funcţie elimină entitatea de nume specificat din setul de selecţie specificat. Dacă entitatea nu face parte din set este returnat nil.

1.20.3.6. (SSMEMB nume_de_entitate set_de_selectie)

Această funcţie testează apartenenţa entităţii de nume specificat la setul de selecţie specificat şi returnează T sau nil, după caz.

(ssadd nume_de_entitate)