Sunteți pe pagina 1din 360

CUPRINS

1.  CAD-CAM – AutoCAD _________________________________________________ 6 


2.  Introducere în limbajul de programare AutoLISP _______________________________ 9 
2.1.  LISP este “interpretor” _______________________________________________ 9 
2.2.  Filosofia limbajului AutoLISP ________________________________________ 11 
2.3.  Invocarea AutoLISP ________________________________________________ 13 
2.4.  Volatilitatea ______________________________________________________ 14 
3.  Editorul Visual LISP ____________________________________________________ 16 
3.1.  Introducere în Visual LISP ___________________________________________ 16 
3.1.1.  Deschiderea Visual LISP ________________________________________ 17 
3.1.2.  Deschiderea şi încărcarea unui fişier cu ajutorul Visual LISP ___________ 17 
3.1.3.  Încărcarea unui fişier AutoLISP în AutoCAD ________________________ 17 
3.1.4.  Folosirea unei rutine AutoLISP în AutoCAD ________________________ 19 
3.1.5.  Examinarea unei rutine AutoLISP _________________________________ 19 
3.1.6.  Folosirea interfeţei Visual LISP ___________________________________ 21 
3.1.7.  Închiderea unui fişier Visual LISP _________________________________ 22 
3.2.  Folosirea Help-ului în Visual LISP ____________________________________ 23 
3.3.  Lucrul cu expresii AutoLISP _________________________________________ 24 
3.3.1.  Înţelegerea sintaxei AutoLISP ____________________________________ 25 
3.3.2.  Lucrul cu numere şi text _________________________________________ 25 
3.4.  Folosirea AutoLISP din linia de comandă a AutoCAD _____________________ 26 
3.5.  Crearea fişierelor AutoLISP __________________________________________ 27 
4.  Programarea simplă în AutoLISP __________________________________________ 30 
4.1.  Elemente de limbaj AutoLISP ________________________________________ 30 
4.2.  Expresii AutoLISP _________________________________________________ 33 
4.2.1.  Expresii matematice ____________________________________________ 34 
4.2.2.  Funcţii şir ____________________________________________________ 37 
4.2.3.  Expresii condiţionale. ___________________________________________ 37 
4.3.  Definirea funcţiilor _________________________________________________ 39 
4.4.  Un exemplu ______________________________________________________ 40 
5.  Explorarea AutoLISP ___________________________________________________ 44 
5.1.  Crearea variabilelor ________________________________________________ 44 

1
PROIECTARE ASISTATĂ DE COMPUTER
5.2.  Lucrul cu comenzi AutoCAD _________________________________________ 45 
5.2.1.  Invocarea comenzilor AutoCAD __________________________________ 45 
5.2.2.  Crearea funcţiilor ______________________________________________ 45 
5.2.3.  Crearea de funcţii ce utilizează argumente ___________________________ 48 
5.2.4.  Utilizarea variabilelor sistem _____________________________________ 50 
5.3.  Programarea cu ajutorul listelor _______________________________________ 51 
5.3.1.  Utilizarea listelor pentru coordonate _______________________________ 51 
5.3.2.  Crearea de perechi cu punct ______________________________________ 52 
5.4.  Condiţii de setare __________________________________________________ 53 
5.4.1.  Structuri condiţionale ___________________________________________ 53 
5.4.2.  Structura buclelor ______________________________________________ 54 
5.5.  Utilizarea obiectelor din desen ________________________________________ 57 
5.5.1.  Obţinerea de informaţii referitoare la un obiect _______________________ 57 
5.5.2.  Modificarea obiectelor __________________________________________ 60 
5.5.3.  Crearea mulţimilor de selecţie ____________________________________ 60 
5.6.  Introducerea datelor de către utilizator __________________________________ 62 
5.7.  Ultimele precizări __________________________________________________ 64 
5.8.  Folosirea AutoLISP pentru controlul proprietăţilor ________________________ 66 
6.  Elemente de programare avansată __________________________________________ 68 
6.1.  Descrierea variabilelor locale şi globale _________________________________ 68 
6.2.  Utilizarea funcţiilor Visual LISP ActiveX _______________________________ 69 
6.2.1.  Remedierea şi modificarea în AutoLISP ____________________________ 70 
6.3.  Utilizarea ActiveX cu Visual LISP ____________________________________ 74 
6.3.1.  Regăsirea şi modificarea proprietăţilor obiectelor cu ActiveX ___________ 74 
6.3.2.  Crearea obiectelor folosind ActiveX _______________________________ 76 
6.4.  Depanarea codului _________________________________________________ 77 
6.4.1.  Folosirea ferestrei Error trace ____________________________________ 78 
6.4.2.  Lucrul cu puncte de oprire Break Points ____________________________ 78 
6.4.3.  Folosirea fereastrei WATCH _____________________________________ 81 
7.  funcţii – AutoLISP ____________________________________________________ 83 
7.1.  Funcţii de Bază ____________________________________________________ 84 
7.1.1.  Manipularea aplicaţiilor _________________________________________ 84 
7.1.2.  Aritmetice ____________________________________________________ 93 
7.1.3.  De egalitate şi condiţionale______________________________________ 107 
7.1.4.  Manipularea erorilor ___________________________________________ 118 
7.1.5.  Manipularea funcţiilor _________________________________________ 122 

2
CUPRINS
7.1.6.  Manipularea listelor ___________________________________________ 130 
7.1.7.  Manipularea şirurilor __________________________________________ 152 
7.1.8.  Manipularea funcţiilor simbol ___________________________________ 166 
7.2.  Utilitare _________________________________________________________ 175 
7.2.1.  Funcţii de conversie ___________________________________________ 176 
7.2.2.  Accesul la dispozitive __________________________________________ 186 
7.2.3.  Controlul afişării ______________________________________________ 189 
7.2.4.  Manipularea fişierelor__________________________________________ 199 
7.2.5.  Geometrice __________________________________________________ 213 
7.2.6.  Interogare şi Funcţii ___________________________________________ 217 
7.2.7.  Introducere a datelor ___________________________________________ 232 
7.3.  Mulţimi de selecţie, Obiecte, şi Tabela de simboluri ______________________ 248 
7.3.1.  Manipularea Datelor – Funcţii extinse _____________________________ 248 
7.3.2.  Manipularea Obiectelor ________________________________________ 251 
7.3.3.  Manipularea Mulţimilor de Selecţie _______________________________ 265 
7.3.4.  Manipularea Tabelelor de simboluri şi a Dicţionarelor ________________ 277 
7.4.  Managementul Memoriei ___________________________________________ 292 
7.5.  Extensii Visual LISP la AutoLISP ____________________________________ 295 
7.5.1.  Manipularea Colecţiilor ActiveX _________________________________ 295 
7.5.2.  Conversia datelor tip ActiveX ___________________________________ 295 
7.5.3.  Invocarea Metodelor ActiveX ___________________________________ 297 
7.5.4.  Manipularea Obiectelor ActiveX _________________________________ 297 
7.5.5.  Manipularea Proprietăţilor ActiveX _______________________________ 297 
7.5.6.  Măsurarea Curbelor ___________________________________________ 298 
7.5.7.  Dicţionar ____________________________________________________ 299 
7.5.8.  Manipularea Obiectelor desenate _________________________________ 299 
7.6.  Reactor _________________________________________________________ 300 
7.7.  Spaţiul de Nume VLX _____________________________________________ 303 
7.8.  Spaţiul de Nume pentru Comunicaţii: _________________________________ 304 
7.9.  Manipularea Regiştrilor Windows ____________________________________ 304 
8.  Comparare Versiuni AutoCAD ___________________________________________ 305 
8.1.  Istoric AutoCAD _________________________________________________ 305 
8.2.  Sistemul AutoCAD ________________________________________________ 305 
8.3.  Calităţi ale sistemului AutoCAD _____________________________________ 305 
8.4.  Comparare AutoCAD 2000, 2002, 2004, 2005 __________________________ 306 
8.4.1.  Tabele ______________________________________________________ 307 

3
PROIECTARE ASISTATĂ DE COMPUTER
8.4.2.  Câmpuri ____________________________________________________ 307 
8.4.3.  Vederi ale foii şi Viewport-uri ___________________________________ 307 
8.4.4.  Straturi de desenare ___________________________________________ 308 
8.4.5.  Administrarea seturilor de foi ____________________________________ 309 
8.4.6.  Arhivarea seturilor de foi _______________________________________ 309 
8.4.7.  Publicare şi colaborare DWF ____________________________________ 310 
8.4.8.  Instrumente de învăţare şi migrare către ultima versiune _______________ 310 
8.4.9.  Instrumente de transfer către o versiune nouă AutoCAD _______________ 311 
8.5.  Diferenţe AutoCAD 2006 ___________________________________________ 311 
8.5.1.  Blocuri Dinamice _____________________________________________ 312 
8.5.2.  Manipularea Blocurilor Dinamice ________________________________ 312 
8.5.3.  Variante ale blocurilor similare __________________________________ 312 
8.5.4.  Crearea Blocurilor Dinamice ____________________________________ 313 
8.5.5.  Crearea tabelelor pornind de la blocuri ____________________________ 313 
8.5.6.  Manager Setări Foi ____________________________________________ 314 
8.5.7.  Crearea adnotărilor şi desenelor __________________________________ 315 
8.5.8.  Mtext mai bun________________________________________________ 315 
8.5.9.  Tabele îmbunătăţite ___________________________________________ 315 
8.5.10.  Haşuri îmbunătăţite____________________________________________ 316 
8.5.11.  Interfaţa cu utilizatorul îmbunătăţita ______________________________ 316 
8.5.12.  Introducere de date Dynamică ___________________________________ 317 
8.5.13.  Calculatorul grafic ____________________________________________ 317 
8.5.14.  Palete de unelte îmbunătăţite ____________________________________ 318 
8.6.  Diferenţe AutoCAD 2007 ___________________________________________ 318 
8.6.1.  Crearea modificarea şi modelarea de obiecte _______________________ 318 
8.6.2.  Modificarea solidelor şi suprafeţelor 3D ___________________________ 321 
8.6.3.  Crearea secţiunilor pentru modele 3D _____________________________ 323 
8.6.4.  Asistenţă în modelarea 3D ______________________________________ 325 
8.6.5.  Management _________________________________________________ 326 
8.6.6.  Interfaţa utilizator _____________________________________________ 327 
8.6.7.  Efecte ______________________________________________________ 329 
8.6.8.  Stiluri vizuale ________________________________________________ 330 
8.6.9.  Îmbunătăţirea Navigaţiei _______________________________________ 333 
8.6.10.  Resurse comune ______________________________________________ 336 
8.6.11.  Suportul DWF _______________________________________________ 337 
8.6.12.  PDF ________________________________________________________ 338 

4
CUPRINS
8.7.  Diferenţe AutoCAD 2008 ___________________________________________ 338 
8.7.1.  Scale Annotations _____________________________________________ 338 
8.7.2.  Dimensions and Leaders ________________________________________ 341 
8.7.3.  Tables ______________________________________________________ 343 
8.7.4.  Layers ______________________________________________________ 346 
8.7.5.  Visualization _________________________________________________ 346 
8.7.6.  User Interface ________________________________________________ 349 
8.7.7.  Customization ________________________________________________ 350 
8.7.8.  Drafting Productivity __________________________________________ 351 
9.  Bibliografie __________________________________________________________ 352 
INDEX FUNCŢII AUTOLISP __________________________________________________ 354 
ANEXĂ - CODURI DE EROARE AUTOLISP ______________________________________ 359 

5
1. CAD
D-CAM – AUTO
OCAD

CAD este un acronim pentru Com mputer-Aide ed Design sau Compu uter-Aided Drafting.
AutoCAD este un program utilizaat pentru prroiectare/desenare de precizie asiistată de
calculator. Desenarea asistată de d calculatoor folosind programul AutoCAD prezintă
următoarelee avantaje:
- pre ecizie mare de desena are – preciziia de desenaare este de 32 zecimale, putând fi
exeecutat orice desen
d la scaraa reală cu preecizie de 100
0%;
- pro oductivitate foarte mare e pentru op peraţiile repetitive – elem mente sau porţiuni de
desen care se reepetă pot fi coopiate sau multiplicate
m cuu uşurinţă;
- mo odificarea fa acilă a unui desen;
d
- con nlucrarea cu c alte pro ograme – desenele
d AutoCAD pot fi importatte în alte
programe (editooare de texte,, programe de d simulare, animaţie,
a etcc.);
- auttomatizarea a unor ope eraţii utilizâând limbajele de programare acceeptate de
AuttoCAD.
Desenarea asistată de calculator folosind
fo proggramul Auto oCAD poatee fi realizatăă în mod
semiautomaat folosind limbajele de programare
p i
incluse/accepptate de acessta. Folosind limbajele
de program
mare acceptatte pot fi creaate module program
p caree să genereze automat blocuri 2D
sau 3D. Accestea pot fi utilizate în orice desen şi pot fi inccluse la rânddul lor în altte module
program. Liimbajele de programare
p a
acceptate de AutoCAD 20082 sunt:
o AutoLISP
A – este un limbbaj de prograamare derivatt din LISP (L LISt Processsing).
ƒ Este priincipalul şi primul
p limbaj de prograamare adoptaat de AutoC CAD fiind
special conceput penntru lucrul cuu liste de dim mensiuni varriabile, care ssunt exact

6
CAD-CAM – AUTOCAD
tipul de informaţii vehiculate de AutoCAD.
ƒ Este un INTERPRETOR, orice linie program introdusă la prompter-ul
Command având efect imediat, deci are avantajul posibilităţii verificării
liniilor de cod fără compilarea1 întregului program;
ƒ Începând cu versiunea AutoCAD 2000 este inclus în program un editor
AutoLISP denumit Visual LISP;
ƒ Principalul dezavantaj îl constituie viteza mică de execuţie2. Odată cu
introducerea Visual LISP-ului se permite şi lucrul cu obiecte, lucru imposibil
în versiunile anterioare.
o ARX (AutoCAD Runtime Extension) - este un limbaj de programare derivat din
limbajul de programare C++, bazat pe programe compilate;
ƒ Este o versiune îmbunătăţită a limbajului ADS (AutoCAD Development
System) care este derivat din limbajul de programare C. Dezavantajul
acestuia este dependenţa de platforma hardware cu care se lucra şi faptul ca
modulele trebuiau rulate tot sub AutoLISP. Mediul de dezvoltare ARX
suportă şi biblioteca ADS;
ƒ Avantajul acestuia constă în viteza mare de execuţie, deoarece programul este
compilat şi încărcat sub formă executabilă;
ƒ Dezavantajul constă în faptul că limbajul de programare C++ este un
COMPILATOR, deci înainte de a putea fi rulat (testat) trebuie compilat tot
programul. O aplicaţie ARX nu poate fi citită deoarece nu este disponibilă în
formă de program sursă;
ƒ Încărcarea unei aplicaţii ARX se face cu funcţia arxload.
o DCL (Dialog Control Language) – un limbaj independent de platforma hardware
creat pentru definirea şi controlul casetelor de dialog;
ƒ Un fişier care descrie casete de dialog are extensia .DCL şi este încărcat din
AutoLISP prin funcţia load_dialog;
o Visual BASIC şi ActiveX – pun la dispoziţia programatorului tehnologia
obiectelor ActiveX;
ƒ Visual Basic este un limbaj de programare puternic dezvoltat de Microsoft
integrat în pachetul de programe MsOffice, deci va fi simplu de integrat
desenele AutoCAD în aceste aplicaţii;
ƒ Visual Basic lucrează foarte bine cu obiectele Windows3, putându-se
construi relativ uşor o interfaţă Windows4;
ƒ Tehnologia ActiveX poate integra desenele AutoCAD în toate programele
care utilizează această tehnologie (şi viceversa), conform figurii;
ƒ Împreună cu limbajul de programare AutoLISP sunt singurele care rulează
direct de sub interfaţa AutoCAD.
Avantajul utilizării unui limbaj de programare rezidă în posibilitatea creării unei biblioteci de
comenzi proprii care să genereze blocuri 2D sau 3D. Spre deosebire de o bibliotecă de blocuri
create cu comanda WBlock blocurile generate prin rularea unui program pot fi dimensionate
în funcţie de parametrii introduşi (de exemplu la şurub lungimea filetului).
De asemenea comenzile din AutoCAD care pot fi modificate sau completate sau pot fi create
altele noi. Pot fi făcute selecţii sau generate modele de haşurare, etc. Deci poate fi automatizat
orice proces repetitiv şi pot fi modificate/create comenzi AutoCAD.

1
generarea
2
fiind interpretor asamblarea programului se face în timpul execuţiei
3
ferestre, butoane, casete de dialog, etc
4
comună de altfel tuturor programelor care lucrează sub windows

7
PROIECTARE ASISTATĂ DE COMPUTER
AutoLISP este un limbaj de programare ce permite crearea rapidă a comenzilor şi rutinelor de
care este nevoie. Visual LISP adaugă o interfaţă uşor de folosit la programarea AutoLISP.
VBA Visual Basic for Applications este un limbaj de programare care este suportat de multe
aplicaţii Windows. Cu VBA se pot crea programe şi ferestre de dialog pentru AutoCAD.
Folosind ActiveX, care permite accesarea altor aplicaţii Windows, se pot concepe programe
care integrează AutoCAD cu alte aplicaţii.
AutoLISP este un limbaj de programare care poate mări substanţial productivitatea prin
utilizarea automată a unor sarcini des folosite sau repetate. AutoLISP furnizează un control
asupra activităţilor interne ale AutoCAD şi poate fi un pas excelent pentru a învăţa mai multe
metode avansate cum ar fi: ObjectARX şi VBA.
Expresiile AutoLISP pot fi introduse în linia de comandă ca răspuns la cererea „command”
sau pot fi salvate în fişiere pentru a fi încărcate şi folosite la nevoie. AutoLISP oferă
nenumărate posibilităţi pentru scurtături şi poate fi setat la orice nivel de complexitate.
Numărul rutinelor AutoLISP disponibile este foarte mare. Aproape toţi utilizatorii AutoCAD
ceva mai experimentaţi au creat cel puţin o rutină AutoLISP. Multe dintre comenzile folosite
deja în AutoCAD, incluzând 3DARRAY, MVSETUP, AL_BOX şi altele, provin din rutinele
AutoLISP.
Sigla LISP provine de la LISt Processing ceea ce subliniază faptul că lucrul cu liste este
cheia utilizării AutoLISP.
Majoritatea rutinelor AutoLISP definesc un nume de comandă care se introduce apoi la linia
de comandă pentru a accesa rutina. Unele rutine includ o fereastră de dialog care ne ajută să
alegem opţiunile şi specificările.
Posibilităţile AutoLISP cresc şi se diversifică în versiunile recente AutoCAD. De asemenea
editorul Visual LISP integrat a fost substanţial îmbunătăţit, oferind multe din facilităţile unor
editoare de programare clasice.

8
2. INTRODUCERE ÎN LIMBAJUL DE PROGRAMARE
AUTOLISP

1. Prezentarea limbajului LISP

Limbajul de programare integrat în AutoCAD, respectiv AutoLISP, este o variantă


particularizată a limbajului de programare LISP. Acesta face parte din categoria limbajelor de
programare de nivel înalt pentru inteligenţă artificială.
Creatorii AutoCAD-ului asociat acest limbaj cu sistemul de proiectare asistată propus de ei,
după analiza mulţimii de limbaje existente şi au constatat că se potriveşte cel mai bine
necesităţilor unui astfel de sistem. Ceea ce se doreşte de la limbaj într-un astfel de caz este să
permită crearea şi manipularea omogenă a unor entităţi eterogene. Dorim să tratăm unitar
atât numere, cât şi şiruri de caractere, entităţi geometrice sau mulţimi formate cu acestea.
Acestea pot fi cuprinse în liste, deci ajungi la concluzia că toate pot fi cuprinse în LISTE,
asupra cărora doreşti să faci diverse prelucrări, deci LISt Processing …). Limbajul de
programare LISP este dedicat prin excelenţă lucrului cu liste.
Dacă adăugăm la asta uşurinţa de implementare a limbajului LISP, recunoscută de toată
lumea, constaţi că, într-adevăr, este un limbaj potrivit pentru proiectarea asistată.
Dezavantajul major este că e un limbaj puţin folosit şi cunoscut de publicul larg. Sunt foarte
populare limbajele de programare C++, BASIC, FORTRAN, PASCAL, Visual C++, Visual
Basic, Delphi şi mai nou Java sau C#, dar LISP mai puţin. Abia versiunea 11 a AutoCAD-
ului introduce o versiune a limbajul C în sistemul de proiectare asistată AutoCAD.
Versiunea prezentă a AutoCAD permite conlucrarea cu mult mai multe limbaje de
programare, conlucrarea acestuia cu alte aplicaţii fiind tot mai mare de la o versiune la alta.
Majoritatea mediilor de programare, şi nu numai, care conlucrează cu AutoCAD au fost
prezentate în capitolul precedent.

2.1. LISP ESTE “INTERPRETOR”


Orice interacţiune cu calculatorul a unui utilizator se face prin intermediul unui program.
Un program este o înşiruire de linii de text care conţine numai cuvinte speciale, interpretabile
de limbajul de programare în care este creat programul. Spunem că ansamblul acţiunilor
exprimate prin cuvinte din vocabularul limbajului, asupra cărora se aplică regulile
gramaticale proprii, se numeşte program.
O linie de program este un şir de cuvinte separate prin spaţii şi încheiate cu un semn special1,
numit terminator de linie.
Ca în orice editor de text linia program se încheie apăsând tasta Enter. Efectul vizibil este că
s-a trecut la linia următoare. Dacă acceptăm denumirile consacrate pentru acest terminator, ca

1
invizibil

9
PROIECTARE ASISTATĂ DE COMPUTER
ENTER, sau RETURN, sau CARRIAGE RETURN1 şi-l notăm <CR> , atunci liniile de
program pot arăta astfel:
acesta este<CR>
un text neutru<CR>
pentru exemplu de program<CR>2
O linie program este scrisă, în general, numai pe un singur rând de text, dar în majoritatea
limbajelor de programare poate continua pe rândurile următoare. Această regulă se aplică şi în
AutoLISP, dar bineînţeles întreruperea unei linii de program trebuie să se facă între cuvinte,
adică separatorul spaţiu poate fi oricând înlocuit cu <CR>. Programatorul hotărăşte unde s-o
facă, legat numai de necesităţile de lizibilitate ale programului.
Unele limbaje fac diferenţă între literă majusculă şi minusculă, de exemplu aA este diferit de
Aa sau aa.3 Limbajul de programare AutoLISP, respectiv LISP, nu este sensibil la mărimea
literei.
Toate limbajele de programare, inclusiv limbajul Asambler, constituie o interfaţă de limbaj
între programator şi calculator. Programatorul scrie programul, folosind sintaxa limbajului
folosit, şi acesta este transformat în limbaj maşină prin intermediul limbajului de programare.
În timp ce programul scris de programator constă într-o succesiune de cuvinte cheie,
interpretarea acestuia constă dintr-o succesiune de numere în binar. Conversia programului în
cod maşină poate fi făcută în două moduri: prin interpretare sau prin compilare, fapt ce înparte
limbajele de programare în două grupuri: Interpretoare şi Compilatoare. Compilatorul traduce
întregul program, ca ansamblu, într-un ansamblu de coduri pe care le înţelege calculatorul.
Interpretorul traduce liniile pe rând, pe măsură ce i se fac cunoscute.
În mod tipic limbaje ca PASCAL, C sunt implementate prin compilatoare, iar BASIC prin
interpretor. De asemenea, AutoLISP este implementat printr-un interpretor.
Un Interpretor interpretează programul linie cu linie4, deci fiecare linie de program poate fi
considerată un progrămel deoarece are finalitate ca execuţie. Această interpretare constituie un
avantaj deoarece efectele executării programului se pot vedea imediat şi eventualele erori de
concepţie sunt uşor de observat şi corectat. Prin contrast un Compilator converteşte
programul ca bloc5 în cod maşină şi numai după conversia completă a tuturor liniilor program
acesta este transmis calculatorului6 spre execuţie. Dezavantajul imediat apare în cazul unei
erori de sintaxă sau concepţie, deaoarece recomplilarea trebuie aplicată tuturor liniilor de
program. Avantajul acestei metode constă în viteza de execuţie, deoarece compilarea se face
înaintea rulării şi nu în timpul ei ca la interpretoare. De asemenea compilarea programului se
face o singură dată, rulându-se numai versiunea compilată. Pentru interpretoare conversia se
face în timpul şi la fiecare rulare, ceea ce măreşte timpul de execuţie.
Dacă totuşi, programul este scris separat, într-un fişier, acesta poate fi încărcat în AutoCAD
ca ansamblu7, dar tratarea codului va fi aceeaşi: citind liniile succesiv, interpretorul îşi
întrerupe activitatea atunci când întâlneşte o eroare, dând evident informaţii despre aceasta8.
Un compilator care ar face acelaşi lucru, ar continua să traducă şi celelalte linii, informând

1
adică “întoarcerea carului” de tipărire
2
programul poate conţine zeci sau mii de linii, fiecare linie program conţinând numai cuvinte cheie
acceptate de limbajul respectiv
3
limbajul C este “case sensitive”, dar limbajul LISP nu este
4
deci converteşte fiecare linie program în con maşină şi o transmite calculatorului spre execuţie
5
ca un întreg nu linie cu linie.
6
microprocesorului
7
folosind funcţia “load”, sau editorul VisualLISP integrat
8
“mesaj de eroare”

10
INTRODUCERE ÎN LIMBAJUL DE PROGRAMARE AUTOLISP
asupra erorilor abia în final, cu referire la fiecare linie eronată. Şi, ca să extindem explicaţia,
după ce a trecut o dată prin program, sesizând erorile locale, compilatorul trece a două oară,
sesizând erorile globale. În prima fază compilatorul corectează sintaxa iar în faza a două
stabileşte dacă salturile în program1 sunt corecte. Astfel de trimiteri se fac pe baza unor
instrucţiuni de genul go to către locaţii marcate prin etichete2. Un interpretor nu are o a doua
fază şi AutoLISP, spre deosebire de alte interpretoare, nu foloseşte trimiteri şi etichete. În
AutoLISP execuţia se execută secvenţial de la începutul spre sfârşitul programului.

2.2. FILOSOFIA LIMBAJULUI AUTOLISP


Aşa cum am amintit LISP înseamnă procesare de listă. O listă este un şir de cuvinte separate
prin spaţii sau ENTER-uri3 şi incluse între paranteze rotunde4. Un exemplu de listă este
prezentat în continuare:
(funcţie param1 param2 param3)
sau
(funcţie param1
param2 param3)
Fiecare parametru poate fi la rândul lui un element sau o listă5; includerea listelor una în alta
se numeşte imbricare. Nivelul6 de imbricare nu este limitat decât de memoria calculatorului.
Iată un exemplu real de listă:
(+ 3 2.2)
Este o listă formată din trei articole7: un plus, numărul întreg 3 şi numărul real 2.2. Primul
articol exprimă un nume de funcţie – funcţia adunare, iar următoarele două, argumentele
acesteia. Întotdeauna primul element8 dintr-o lista este o funcţie AutoLISP, următoarele
elemente constituind parametrii transmişi funcţiei. Numărul parametrilor variază dependent de
funcţia aplicată. AutoLISP evaluează fiecare listă. Practic, inima AutoLISP-ului este
evaluatorul. Ca efect al evaluării listei, se execută funcţia din listă, deci primul element,
având ca parametri elementele următoare din listă, deci se returnează valoarea evaluării ei.
În exemplul prezentat, evaluarea conduce la adunarea lui 3 cu 2.2 şi returnarea rezultatului
5.2. După evaluarea listei este exact ca şi când în loc de (+ 3 2.2) am scrie (5.2).
Dacă evaluarea nu conduce la o mărime semnificativă, pentru simetria limbajului ceva tot
trebuie să se returneze: se returnează nil, care reprezintă o variabilă cu valoare nulă, adică
nimic. De exemplu o funcţie AutoLISP este textscr9 care comută ecranul din mod grafic în
mod text. Dacă într-o linie AutoLISP punem (textscr), atunci are loc comutarea cu pricina, iar
evaluarea listei returnează nil.
1
trimiterile dintr-o zonă a programului în alta
2
labels
3
tasta Enter
4
practic un vector având ca separator spaţiul
5
puteţi să vă gândiţi la o lista ca la un vector cu elemente. Fiecare element poate fi la rândul lui un
vector
6
sau adâncimea
7
sau atomi
8
primul atom
9
comună multor limbaje de programare

11
PROIECTARE ASISTATĂ DE COMPUTER
Listele pot fi imbricate în alte liste. Mai clar o listă poate conţine alte liste ca elemente, în timp
ce ea poate constitui un element al unei liste superioare.

Funcţia Primul argument Al doilea

Proces de

Rezultat returnat

Evaluarea se aplică de la lista cea mai adânc imbricată, deci de la cea mai interioară, spre
exterior. Se evaluează listele aflate la cel mai adânc nivel şi se înlocuiesc cu rezultatele
evaluării. Se evaluează listele de la nivelul imediat superior folosindu-se rezultatele evaluării
precedente. se continuă până la evaluarea listei exterioare şi se returnează rezultatul evaluării.
Prezentăm un exemplu cu o imbricare de nivel 1:
(- 11 (+ 3 2.2) (* 2 2))
Se evaluează mai întâi listele interioare, deci:
(+ 3 2.2) din evaluare rezultă 5.2
(+ 2 2) din evaluare rezultă 4
şi rezultă:
(- 11 5.2 4)
se evaluează această listă şi rezultă
1.8
Deci s-a aplicat funcţia – asupra elementelor 11, (+ 3 2.2) şi (* 2 2). După prima evaluare
listele interioare au fost înlocuite cu rezultatul evaluării. Adică s-a aplicat funcţia de adunare
asupra numerelor 3 şi 2.2 obţinându-se rezultatul 5.2, respectiv funcţia de înmulţire asupra
numerelor 2 şi 2 obţinându-se rezultatul 4. La următoarea evaluare se aplică funcţia de scădere
– asupra numerelor 11, 5.2 şi 4. Practic din primul număr se scad pe rând următoarele,
rezultatul evaluării fiind 1.8.

12
INTRODUCERE ÎN LIMBAJUL DE PROGRAMARE AUTOLISP
2.3. INVOCAREA AUTOLISP
Putem invoca AutoLISP în două moduri. De la prompterul AutoCAD, sau folosind editorul
Visual LISP integrat. Pe parcurs vom exemplifica ambele metode diferenţa dintre ele constând
doar în interfaţă, codul program este identic.
În zona de dialog AutoCAD se află prompterul: Command:
Dacă acum, în loc de a da o comandă AutoCAD1, punem o paranteză deschisă, deja am
invocat interpretorul de AutoLISP. Acest lucru este suficient pentru a comuta din AutoCAD în
AutoLISP. Putem verifica folosind exemplul de mai sus:
Command:(+ 3 2.2)
Se observă că după + există un spaţiu. În AutoCAD orice spaţiu încheie linia, ca şi când ar fi
fost apăsat Enter. Ei bine, uitaţi-vă că am putut să continui linia, scriind 3, etc. Deci nu
AutoCAD a preluat informaţiile din linie, ci chiar interpretorul de AutoLISP. La orice
comandă introdusă AutoCAD face ceva. În acest caz AutoLISP a preluat controlul şi afişează
rezultatul folosind elementele AutoCAD. Efectul evaluării acestei linii apare după ce apăsăm
Enter în urma parantezei închise; pe linia următoare apare:
5.2
adică rezultatul evaluării listei. Deşi AutoLISP este integrat în AutoCAD el este prioritar în
execuţie putând întrerupe, modifica sau termina o comandă AutoCAD. Poate de asemenea
opera modificări direct în baza de date AutoCAD fără ajutorul acestuia.
Întotdeauna o paranteză rotundă deschide o sesiune AutoLISP şi o paranteză rotundă închisă
închide acea sesiune. Putem verifica pe codul de mai sus fără să punem paranteza închisă şi
apăsam Enter, atunci pe linia următoare apare:
1>
Mesajul transmis este: vezi că ai o paranteză deschisă pe care nu ai închis-o; nu-i nimic, poţi
să scrii alte linii în continuare, dar la final trebuie să închizi paranteza.
Pentru un program cu mai mult de o linie de cod putem scrie:
Command: (- 11
1> (+ 3
2> 2.2)
1> (* 2 2)
1>)
1.8
Command:
Se observă că suntem informaţi permanent asupra numărului de paranteze rămase neînchise.
În final primim rezultatul evaluării listei externe.
Deci putem introduce linii de program AutoLISP direct din AutoCAD la prompterul
Command:. Când închidem şi ultima paranteză - perechea primei paranteze deschise – codul
inrodus este interpretat prin evaluarea dinspre interior a fiecărei paranteze conform tehnicii de
lucru AutoLISP, returnându-se rezultatul. Dacă s-a strecurat o eroare, evaluarea AutoLISP nu
mai continuă, transmiţându-se un mesaj de eroare în ferastra AutoCAD. Iată un exemplu cu
eroare:
Command: (- 11
1> (+3

1
cum ar fi LINE

13
PROIECTARE ASISTATĂ DE COMPUTER
2> 2.2)
1> (* 2 2)
1>)
error: null function
(+3 2.2)
(- 11 (+3 2.2) (* 2 2))
Command:
Se observă că am eliminat spaţiul după funcţia +. Cum în AutoLISP spaţiul este considerat
delimitator funcţia care o primeşte acesta este +3. Putea la fel de bine să fie orice înşiruire de
caractere. În primă fază AutoLISP verifică doar terminarea introducerii codului program. Până
nu se termină introducerea codului, deci închiderea primei paranteze rotunde deschise,
AutoLISP nu verifică codul propriuzis. Nu putem solicita un corector de sintaxă direct în
fereastra AutoCAD. Totuşi suntem informaţi asupra erorii apărute şi asupra localizării
acesteia. Dacă programul este editat prin intermediul editorului integrat Visual LISP opţiunile
sunt substanţial îmbunătăţite. Deci AutoLISP citeşte textul până la primul delimitator1 întâlnit.
Mesajul de eroare returnat are întotdeauna forma:
error: mesaj
unde mesaj este un text descriptiv pentru eroarea sesizată de AutoLISP. Ansamblul acestor
mesaje şi cauzele lor se prezintă în anexă. Este foarte util să aveţi în faţă aceste informaţii
când lucraţi în AutoLISP. Fiecare mesaj de eroare identifică problema apărută, în cazul de
faţă, primim mesajul null function, adică funcţia nulă. Deoarece funcţia respectivă nu a fost
definită de utilizator şi nu este una din funcţiile AutoLISP aceasta nu este recunoscută de
sistem.
Observaţi că pe linia următoare AutoLISP pune lista în care s-a găsit eroarea, respectiv (+3
2.2). Dacă numele funcţiei ar fi fost format din caractere alfanumerice numele funcţiei ar fi
apărut scris cu litere mari. Deci AutoLISP transformă mai întâi toate numele de funcţii2 în
litere majuscule şi abia după aceea le interpretează. AutoLISP-ul nefiind case-sensitive
caracterele sunt transformate fie în majuscule fie în minuscule. Nu este practic să compari
toate combinaţiile de carectere majuscule/minuscule din numele unei funcţii cu funcţiile din
baza de date AutoCAD.
În continuare este pusă lista (- 11 (+3 2.2) (* 2 2)) care include lista cu eroarea. Trebuie să
reţineţi că acest lucru se continuă: dacă şi această listă este inclusă în alta, se prezintă şi
aceasta, etc. Dacă imbricarea este profundă, veţi primi multe linii care conţin liste peste liste,
din ce în ce mai largi.
Este clar că cel mai interesant este mesajul de eroare, apoi lista “cea mai interioară”, iar restul,
nu face decât să localizeze problema în ansamblu. Pentru a vedea complet descrierea erorii, în
cazul în care aceasta a fost derulată în fereastra de text, se poate comuta în fereastra de text
prin apăsarea tastei F2. Pentru maxim o imbricare profundă sunt prezentate maxim 100 de
liste.

2.4. VOLATILITATEA
Puteţi scrie linii de cod direct în fereastra de comenzi în AutoCAD apelând interpretorul
AutoLISP cum s-a explicat mai sus. Însă acest mod de abordare nu se justifică decât pentru

1
spaţiu
2
dar şi alte nume

14
INTRODUCERE ÎN LIMBAJUL DE PROGRAMARE AUTOLISP
verificarea unor linii de cod sau pentru crearea unor filtre de selecţie, deci pentru module care
conţin câteva linii de cod.
Acest mod de abordare prezintă dezavantajele: nu pot fi scrise programe complexe, codul nu
poate fi corectat, deoarece odata introdus nu se mai poate reveni asupra lui, şi nu poate fi
folosit decat în sesiunea curentă.
Putem scrie programul nostru sub forma unui fişier în afara AutoCAD-ului. Pentru aceasta va
fi necesar să folosim un editor de texte1. Odată creat acest fişier, el trebuie transmis
AutoLISP-ului.
Să presupunem că am creat fişierul text functie.lsp cu conţinutul:
(- 11
(* 3 2.2)
(* 2 2)
)
Acum lansăm AutoCAD-ul şi primim prompterul obişnuit, pe care vom da comanda :
Command: (load “functie”)
1.8
Command:
Se observă că programul a fost încărcat şi s-au evaluat toate listele implicate, returnându-se
rezultatul, după care apare iar prompterul obişnuit. Puteţi acum să îmbunătăţiţi programul, să-l
extindeţi, etc. Totuşi, este incomod să părăsim AutoCAD-ul pentru a edita fişierul şi a reveni
iar în AutoCAD pentru a vedea efectele. Se poate lucra şi din interiorul AutoCAD-ului
folosind editorul integrat Visual LISP2.
După ce reveniţi în AutoCAD, dacă aţi făcut modificări în fişier veţi da iar comanda (load
“functie”), reîncărcând programul AutoLISP şi observând efectele. Se economiseşte astfel
enorm de mult timp.

1
se recomanda folosirea editorului VisualLISP integrat in AutoCAD, introdus cu versiunea 2002
2
la versiunile mai noi de AutoCAD

15
3. EDIT
TORUL VISUAL
L LISP

3.1. INTRODU N VISUAL


UCERE ÎN L LISP

Visual LISP P1 este un mediu


m integraat de dezvolttare2 care utilizează o innterfaţă uşor de folosit
ş generarea programelorr de test.
pentru a ajuuta la creareaa codului, dettectarea eroriilor din cod şi
Câteva din funcţiile
f utile incluse în Visual LISP P sunt:
ƒ verificaarea de sinttaxă - synta ax checker - şi semnallizarea care a ajuta la ccorectarea
erorilorr sintaxei;
Bara cu instrrumente  Bara cu instrum
B mente 
STANDA ARD  SEARCH Ba
ara de meniuri

Bare cu insstrumente  Bara cu instrum
B mente 
DEBBUG  Bara cu instrumente  TOOLS 
VIEWW 

Fereastră principală 
de lu
ucru 

Feereastra de com
menzi 
CONSOLE

Fereastra de ccomenzi 
TRACEE 

1
VLISP
2
IDE

16
EDITORUL VISUAL LISP
ƒ compilarea fişierelor pentru securitate şi executare mai rapidă;
ƒ detector de erori – debugger - care permite execuţia pas cu pas a codului sursă pentru a
găsi erorile;
ƒ Helpful Inspect şi fereastra Watch pentru a vizualiza o valoare sau a examina o
variabilă în timpul execuţiei;
ƒ asistenţă – help - adaptată contextului în care este solicitată;
ƒ gestionarea de aplicaţii multiple dintr-o fereastră de tip proiect;
ƒ compilarea unor proiecte multiple, la fel ca şi a altor fişiere, folosind aplicaţia wizard;
ƒ istoricul consolei, ce oferă posibilitatea reapelării unei informaţii utilizate anterior.

3.1.1. Deschiderea Visual LISP

Pentru a porni editorul Visual LISP, se introduce comanda Vlide la linia de comandă
AutoCAD, sau se alege din meniul Tools/AutoLISP opţiunea Visual LISP Editor.
La deschiderea editorului acesta se prezintă, în mod implicit, conform figurii. Sunt deschise
ferestrele TRACE şi CONSOLE, precum şi barele cu instrumente STANDARD, SEARCH,
DEBUG, VIEW şi TOOLS.
În acest moment editorul este pregătit pentru începerea editării unui program nou, precum şi
pentru continuarea editării unui program existent. Mediul de editare conţine mai multe unelte
de editare, decât cele active în mod implicit, şi care pot fi apelate din, meniul editorului,
funcţie de necesităţi.

3.1.2. Deschiderea şi încărcarea unui fişier cu ajutorul Visual LISP

Din momentul deschiderii mediului Visual LISP, se poate crea un nou fişier Visual LISP sau
se poate deschide un fişier existent1.
Pentru a edita sau vizualiza un fişier Visual LISP2 în modul text se parcurg următorii paşi:
Se alege din meniul File opţiunea Open File.
1. Pe ecran apare o fereastră de dialog Open file to Edit/View în care se introduce numele
fişierului care vrem să-l deschidem, după care se execută clic butonul Open din cadrul
acestei fereste.
2. Fişierul se deschide în propria fereastră în editorul Visual LISP3.

3.1.3. Încărcarea unui fişier AutoLISP în AutoCAD

Pentru a folosi un program AutoLISP în AutoCAD acesta trebuie încărcat din AutoCAD,
operaţie care se poate face indirect şi din Visual LISP.
Dacă fişierul este deja deschis în Visual LISP, se alege din meniul Tools opţiunea Load Text
în Editor sau se alege Load Active Edit Window din bara de instrumente Tools. Se mai
poate folosi combinaţia de taste CTRL+Alt+E.
În AutoCAD, fişierele AutoLISP pot fi încărcate în două moduri. Unul dintre ele este
reprezentat de utilizarea liniei de comandă. Pentru a încărca 3DARRAY, de exemplu, se
introduce (load “3darray”) în linia de comandă

1
la deschiderea VisualLISP acestea nu sunt deschise implicit
2 practic un fişier AutoLISP, deci cu extensie .lsp
3
se pot deschide oricâte fişiere dorim

17
PROIECTARE ASISTATĂ DE COMPUTER
O

Parantezele sunt necessare deoarecce indică faaptul că se intră într-o expresie A AutoLISP.
AutoLISP cere
c ghilimeelele deoarece se speciffică un num me de fişier.. AutoCAD răspunde
comenzii cuu 3DARRAY Y loaded.
Când se inntroduce com manda pentruu a încărca 3DARRAY Y, AutoCAD D caută în tooate căile
1
cunoscute unu fişier num mit 3darray..lsp. La instaalarea AutoC
CAD-ului se configurează automat
calea către fişierul suport al moduurilor de căuutare pentru a include caalea către /A AutoCAD
2008/Supo ort2.
Dacă fişieruul nu este înntr-unul dintrre directoareele AutoCAD
D indicate înn fişierul de suport al
modului dee căutare, atuunci trebuie specificată calea
c compleetă către fişiier. Pentru a specifica
calea complletă către ruttină se introdduce:
(load “c:
:/Program Files/Aut
toCAD 2008
8/Support/
/3darray”)
) .
sau
(load “c:
:\\Program
m Files\\A
AutoCAD 20
008\\Suppo
ort\\3darr
ray”) .
Caracterul backslash
b ( \ ) are un
u înţeles sppecial în Au
utoLISP şi dee aceea estee necesară

1
presetate
2
calea exemmplificată variaază funcţie de versiune

18
EDITORUL VISUAL LISP
utilizarea a două de asstfel de caraactere (\\) câând se speciffică o cale. Caracterul „„\” indică
mediului Liisp să interprreteze următoorul caracter în mod literrar.
De asemeneea un fişier AutoLISP
A pooate fi încărccat cu comannda appload d introdusă lla linia de
comandă AutoCAD
A d meniul Tools
sauu selectată din T / Load
d Applicatio ons. Pe ecraan apare o
fereastră dee dialog – Lo
oad / Unload d Applicatio ons. Fereastraa de dialog poate
p fi folossită pentru
încărcarea fişierelor
f cu extensia .fass – Fast-loa aded AutoL LISP Forma at, .vlx – Vissual LISP
1
Executable es şi .lsp – AutoLISP
A F
Files .

3.1.4. Folosirrea unei rutine AutoL


LISP în AuttoCAD

Din momenntul încărcăriii unei rutinee AutoLISP, aceasta poatte fi utilizatăă. Modul în ccare poate
fi utilizată o rutină deepinde de aceasta.
a Daccă programu ul creează o comandă2, se poate
introduce numele funcţiiei în linia de
d comandă ca orice altăă comandă AutoCAD.
A M
Majoritatea
rutinelor conţin prompteere pentru a fi or3.
f mai uşoarăă folosirea lo

¾ Pas cu pas
p încărcarrea şi folosirrea unei ruttine AutoLIS SP:
4.
1. Se descchide o sesiuune de lucru AutoCAD
A
2. Din meniul Tools se alege oppţiunea Auto oLISP/Visua al LISP Ediitor pentru a deschide
fereastrra Visual LISP IDE.
m există fiişiere AutoL
3. Dacă mai ncipală5, se închid făcânnd clic pe
LISP afişate în zona prin
6
butonuul Close din fereastra de dialog .

4. Se alegge opţiunea Open File din meniul File F sau buto onul Open file diin bara de
instrummente standaard. În fereeastra de dialog apărutăă pe ecran se navigheează către
directoorul sursă şii se executăă dublu clicc pe fisierul nume.lsp7 pe care dooriţi să îl
deschiddeţi. Acesta va apărea înn fereastra Viisual LISP.

5. Se exeecuta clic pee butonul Lo oad Active Edit Windo ow dinn bara de instrumente
Visuall LISP.
6. Se exeecută clic pee butonul Active
A AutoC CAD din baara de instruumente Visu ual LISP.
Fereasttra Visual LIISP Consolle confirmă că c fişierul nume.lsp a foost încărcat.
7. Acum, când fişieruul nume.lsp a fost încărccat se scrie, în AutoCAD D, la linia dee comandă
numelee funcţiei priincipale din fişierul
f încărrcat.
8. Rezultaatele rulării funcţiei, sauu funcţiilor, din fişier sunt vizibile înn sesiunea A
AutoCAD.
Funcţiiile sau com menzile încăărcate rămânn active pee toată periioada rulăriii sesiunii
AutoCA AD.

3.1.5. Examinarea uneii rutine AuttoLISP

Pentru a exxamina conţiinutul unui fişier


f AutoL
LISP, se creeează rutina circle3, prezzentată în
1
de asemeneea, tot cu aceaasta comandă,, pot fi încărcaate şi fişiere .arx – ObjectA ARX Files, .ddvb – VBA
Files şi .dbx – Object DB BX Files
2
în definireaa acestei funcţii numele estee precedat de prefixul
p c:
3
cererea de parametri
p cătrre utilizator esste precedată de
d afişarea uno
or mesaje textt
4
prin creareaa unui desen nou
n sau deschiiderea unuia existent
e
5
rămase de lal o sesiune prrecedentă
6
orice fereaastră deschisăă sub Visual LISP este o fereastră claasică windowss dispunând elementele
comune ale unor
u asemena ferestre, deci poate fi închiisă de exemplu u prin apăsareea pictogramei Close X.
7
nume.lsp esste un nume generic
g de fişieer AutoLISP

19
PROIECTARE ASISTATĂ DE COMPUTER
continuare, într-un fişier nou.
(defun c:circle (/ pt) ;creează un cerc de rază 3
(princ ”Alegeţi un punct: ”)
(setq pt (getpoint))
(command ”_circle” pt ”3”)
)
Această rutină ilustrează câteva caracteristici generale ale limbajului AutoLISP, precum şi a
editorului Visual LISP:
ƒ Ca în multe limbaje de programare, identarea este folosită în AutoLISP pentru a face
codul mai uşor de citit. Nu are efect asupra operaţiei executate de rutină1.
ƒ Alineatele, de asemenea, fac codul mai uşor de citit şi de înţeles. Toate cele 5 rânduri pot
fi plasate pe un singur rând şi programul va funcţiona în acelaşi fel.
ƒ Toate funcţiile AutoLISP sunt plasate în paranteze. De aceea de fiecare dată când
deschidem o paranteză aceasta trebuie închisă. Fiecare rutină AutoLISP trebuie să aibă
acelaşi număr de paranteze stânga şi dreapta, deschise şi închise. Localizarea unei
paranteze dreapta nu este relevantă – poate fi plasată pe un nou rând sau poziţionată la
câteva spaţii mai departe de paranteza din stânga. În ambele cazuri perechea este
interpretată în acelaşi mod.
ƒ AutoLISP interpretează prima dată perechea de paranteze rotunde cu cea mai mare
adâncime, cea mai interioară. Pe rândul 3 al codului, de exemplu, (getpoint) este
interpretată prima dată, apoi rezultatul este folosit pentru expresia (setq pt (getpoint).
Este similar calculului matematic, ca în cazul expresiei (3 + (5 * 4)), unde 5 * 4 este
calculat mai întâi şi rezultatul va fi adunat la 3.
ƒ La sfârşitul primului rând este un comentariu: Creează un cerc de rază 3. Programul
ignoră orice text precedat de punct şi virgulă. Această tehnică se foloseşte pentru a da
explicaţii şi pentru a ajuta la înţelegerea a ceea ce face rutina.
În continuare se va explica rutina linie cu linie.
ƒ În rutină linia 1 începe cu o paranteză deschisă care va fi închisă pe linia 5. Această
pereche de paranteze descrie corpul funcţiei. Linia începe cu „defun”, care înseamnă
DEFine FUNction, şi funcţia se numeşte circle3. Dacă funcţia este prefixată cu „c:”,
aceasta se poate folosi în AutoCAD asemenea oricărei comenzi AutoCAD, introducând
circle3 la linia de comandă2. Ultima declaraţie de pe prima linie este „(/ pt)”, unde pt
este o variabilă locală care este folosită numai în propria rutină şi nu este reţinută pentru
folosirea în alte rutine. Dacă se înlocuieşte „(pt)” cu „( )” , variabila pt va fi disponibilă şi
pentru alte rutine AutoLISP.
ƒ Linia 2 afişează mesajul „Alegeţi un punct” în cadrul liniei de comandă. Orice se află
scris între ghilimelele deschise după „princ” va fi afişat în cadrul liniei de comandă. În
acest caz propoziţia este folosită ca o sugestie pentru a-i spune celui care o foloseşte să
aleagă un punct.
ƒ Linia 3 este o rutină tipică AutoLisp, în care parantezele îl pot deruta pe cititor. Trebuie
citit începând cu ultima paranteză inclusă în celelalte. Vom avea „(getpoint)”. Aceasta
înseamnă pur şi simplu a obţine coordonatele unui punct prin oricare din metodele de
intrare AutoCAD care vor înregistra coordonate pentru un punct3. Citind în afara
parantezei, vom avea (setq pt (getpoint)) - setq înseamnă că variabila „pt” memorează

1
este o simplă aranjare a codului pentru simplificarea urmăririi conţinutului şi depanării acestuia
2
notă: „c:” provine de la „comandă” (command) şi nu are nici o legătură cu hard disk-ul, care este
denumit deobicei c:
3
făcând clic într-o regiune a ecranului, introducând coordonatele punctului sau folosind moduri de
prindere Object Snap

20
EDITORUL VISUAL LISP
orice informaţie caare este obţiinută de „ge etpoint”. Deci, dacă intrroducem cooordonatele
2,2 de la linia de coomandă sau le selectăm pe p ecran, valloarea variabbilei „pt” va fi 2,2.
ƒ Linia 4 citeşte comanda (co ommand “_ _circle” pt ”3”). Funcţţia „comma and” din
AutoLIISP este unaa dintre celee mai uşor de d înţeles fu uncţii. Ea exxecută orice comandă
AutoCA AD specificcată între ghhilimele ce o urmează, folosind tooate argumenntele care
urmeazză. Când com manda CIRC CLE este invoocată în Auto oCAD, ea ceere punctul ceentral mai
întâi şii apoi raza1. Linia 4 iniţializează com
manda CIRC CLE, foloseştte pentru cooordonatele
punctuului central vaaloarea asignnată variabileei „pt” şi stab
bileşte raza laa 3 unităţi.

3.1.6. Folosirrea interfeţţei Visual LISP


L

Fereastra Visual
V LISP conţine
c un număr
n de insttrumente carre înlesnesc editarea şi vverificarea
programelorr. Acest set de instrumeente reprezinntă diferenţa dintre vechhiul mod de scriere al
codului AuutoLISP - creând fişieree text într-uun editor dee text - şi noul mod vizual cu
instrumentee care ajută la aranjareaa şi compleetarea codulu ui. Unele dintre cele mai utile
instrumentee sunt:

ƒ Forma at Edit Wind dow : se alege Foormat Edit Window


W dinn bara de instrumente
Tools, sau Tools/F Format Cod de în Editorr, pentru iden
ntarea codullui, şi a com
mentariilor,
astfel încât
î acesta să fie mai uşor de citiit. Identarea codului ajuută la înţeleggerea mai
uşoară a parantezelor, codul puutând fi idenntat şi manuaal, dar identaarea automattă este un
avantajj pentru toţi programatorrii AutoLISP P. Aceasta păstrează
p un format stanndard uşor
de recuunoscut de orricine citeştee codul.

ƒ Forma at Selection : se seelectează coddul dorit penttru identare, apoi se alegge Format
Selecttion din barra de instrum mente Toolss pentru a identa
i numaai codul seleectat. Are
acelaşii efect cu Forrmat Edit Window,
W nummai că acţioneează numai asupra
a unei sselecţii.

ƒ Checkk Edit Wind dow : see utilizează Check


C Edit Window dinn bara de instrumente
Tools, sau Tools/C Check Textt din Editor, pentru
p a realliza o evaluaare preliminaară înainte
de a înncărca fişieruul. Această evaluare verrifică dacă în n cod existăă paranteze ccare nu au
fost înnchise, definniţii incorectte de funcţii şi multe alte a erori. Visual
V LISP deschide
fereastrra Build Output Window w pentru a arrăta rezultateele2.

ƒ Checkk Selection : se seelectează coddul dorit penntru verificaare şi se alegge Check


Selecttion din barra de instruumente Toolls, sau Too ols/Check Selection
S diin Editor,
pentru a realiza o verificare preliminarăă a codului selectat. Visual Vi LISP deschide
fereastrra Build Output pentru a arăta rezulttatele.
ƒ Parentheses Mattching: închiderea incorectă a paran ntezelor este cea mai dess întâlnită
eroare la un prograamator Auto oLISP. Visua al LISP perm mite deplasaarea între perrechile de
paranteeze şi verifiicarea rapidăă a niveluluui unde s-a produs eroaarea pe măsuură ce se
programmează aplicaţia. Deşi această opţiune o se poate alegge din meeniu, sau
Edit/P
Parenthesess Matching/M /Match Forw ward şi Mattch Backwa ard, se va oobserva că
alegereea opţiunii prrin intermeddiul tastaturii va distrage mai puţin attenţia de la ccodul care
se verifică. Pentru a găsi parantteza din dreaapta care se potriveşte
p se utilizează coombinaţia
de taste „Ctrl + ]”, iar pentru a găsi paranteeza stângă se utilizează combinaţia „„Ctrl + [”.
1
dacă se foloosesc opţiunilee implicite
2
nu este unn instrument foarte
f puterniic, semnaleazză doar existeenţa erorilor fără
f indica pooziţionarea
erorilor în cood

21
PROIECTARE ASISTATĂ DE COMPUTER
O
Puteţi selecta tot codul
c dintre o pereche dee paranteze. Pentru o selecţi stânga - dreapta,
plasaţi cursorul în faţa unei parranteze stângga şi tastaţi „Ctrl
„ + Shift
ft + ]” sau, m
mai simplu
daţi duublu clic. Penntru o selecţi dreapta - stâânga, plasaţi cursorul duppă o parantezză dreapta
şi tastaaţi „Ctrl + Sh
hift + [” sau, mai
m simplu daţi
d dublu cliic.

ƒ Load Active
A Winddow : Pentru
P a încăărca codul diin fereastra de
d editare see foloseşte
Load Active
A Winddow din barra de instrum
mente sau se alege din meniul
m Toolss opţiunea
Load Selection.
S

ƒ Load Selection
S : Pentru a încărca coodul selectatt se foloseştee Load Seleection din
1
bara dee instrumentee sau se alege din meniull Tools opţiu
unea Load Selection
S .

ƒ Comm ment Block : în fig


f 1.5 este prezentat
p unn exemplu de d comentariiu. Visual
LISP suportă câteeva stiluri dee comentarii, ce vor fi expuse maii pe larg în capitolul
următoor. Pentru a adăuga
a un coomentariu, see selectează textul
t ce se doreşte
d a fi coomentariu
şi se faace clic pe Comment Blo ock din baraa de instrumeente.

ƒ Uncom mment Block : pentru a înlătura


î un comentariu se executăă clic pe
Uncom mment Blocck din bara dee instrumente.
ƒ l Visual LISP
O altă trăsătură a lui L este ferreastra Conssole, care see găseşte dee obicei la
sfârşituul ferestrei Visual LISPP. Această fereastră estte similară cu linia de comandă
AutoCA AD în caree se pot intrroduce exprresiile AutoL LISP. Fiecarre rând din fereastra
Conso ole foloseştee un prompteer _$. O caaracteristică interesantă a acestei ferrestre este
faptul că
c se poate recupera
r tot ce p tasta Tab pentru
c s-a introduus apăsând pe p a afişa o istorie
mai detaliată sau Shift+Tab
S pentru a revedeea lista.

3.1.7. Închiderea unui fişier


f Visuaal LISP

Pentru a încchide un fişiier fără a încchide şi Visu


ual LISP, se execută clicc pe butonull Close al
fişierului respectiv sau se
s foloseşte combinaţia
c d taste Ctrl+
de +F4. Pentru a ieşi din Vissual LISP
se execută clic pe butoonul Close sau se folosseşte combin naţia de tastte ALT+F4. Ca şi în
AutoCAD, la închidere Visual LISP P avertizeazăă despre salv
varea schimbăărilor.

¾ Pas cu pas p utilizareea interfeţeii Visual LISP:


1. Din AuutoCAD foloosiţi Tools/A AutoLISP/Vi Visual LISP Editor penttru a deschidde Visual
LISP.
2. Alegeţi Open File din bara de instrumente
i standard şii deschideţi fişierul
f editaat anterior.
Salvaţi fişieerul cu un nuume nou în diirectorul dorrit.
3. Alegeţi Format Ed dit Windoww din bara de d instrumen nte Tools. AutoCAD
A foormatează
automat coddul.
4. Selectaţţi linia de cod (command ”circle” ptt ”3”).
5. Alegeţi Comment Block. B AutooCAD plaseaază automat 3 caractere „ ; ” înaintea ttextului şi
le umbreşte. Alegeţi Un ncomment Block.
B AutoC CAD reface starea
s anteriooară a textuluui.
6. Alegeţi Check Editt Window diin bara de innstrumente. AutoCAD A deeschide fereaastra Build
Output şi dăd mesajul Chheck done.
7. Daţi cliic oriunde în fereastra de d editare pentru
p a o activa.
a Alegeeţi Load Acctive Edit
Window dinn bara de insstrumente. AutoCAD
A încarcă rutina.

1
opţiune fortte utilă pentruu verificarea annumitor zone din cod

22
EDITORUL VISUAL LISP
8. În fereeastra Visua al LISP Console tastaţţi (c:circle) şi Enter. Visual V LISP P întoarce
controlul la AutoCAD şi ş startează prrogramul. Alegeţi un pun nct. Când aţii terminat, coontrolul se
întoarce la fereastra
f Vissual LISP.
d text şi aleggeţi Save Fiile. Daţi clic pe butonul C
9. Daţi clic în fereastraa editorului de Close din
colţul din drreapta sus al ferestrei de editare a texxtului pentru a închide ruttina.
10. Daţi clic pe butonuul Close din colţul din drreapta sus al ecranului peentru a închide Visual
LISP.

3.2. FOLOSIR
REA HELP
P-ULUI ÎN
N VISUAL
L LISP

Visual LISP P oferă două posibilităţi de


d obţinere a ajutorului înn timpul scrierii codului:
ƒ Ajutor în funcţie dee context, peentru orice terrmen selectaat,
ƒ Ajutor general, desspre întregul sistem.
Pentru a obţine ajutor reeferitor la orrice funcţie AutoLISP
A diin cod, selecctaţi funcţia1 şi folosiţi
combinaţia de taste Ctrl rl-F1. Figura următoare exemplifică
e ce
c este afişatt pe ecran attunci când
etq” şi apelaţi help-ul contextual. În
selectaţi „se Î fereastra de Ajutor deschisă
d estee descrisă
acţiunea funncţiei respecctive, fiind exxemplificate toate, sau cele
c mai reprrezentative, m moduri de
folosire a acesteia. Apeelurile funcţieei, sau codull în care estee inclus, poaate fi copiat şi rulat în
Visual LISP P sau AutoC CAD.

1
indiferent dacă
d se află în
î fereastra dee editare sau în fereastra consolei,
c selecctând funcţia, sau fiind
suficientă pooziţionarea currsorului în inteeriorul cuvânttului

23
PROIECTARE ASISTATĂ DE COMPUTER
O
Fereastra dee Ajutor penttru AutoLIS SP – Autoca ad 2008 Help: Develop per Docume entation –
se deschide din/sub edittorul Visual LISP şi estee diferită de fereastra de Ajutor din A
AutoCAD,
care se descchide într-o fereastră
f sepaarată – Autocad 2008 Help.
H
În general această ferreastră de ajutor
aj este dedicată
d dezzvoltatorilor1 şi nu dessenatorilor
AutoCAD.
Pentru a desschide ajutoorul pentru toot programul Visual LISP P şi ActiveXX, alegeţi He
elp/Visual
LISP Help p Topics dinn meniul Viisual LISP sau apăsaţi tasta F1. Visual V LISPP va afişa
fereastra dinn figura urmăătoare.

Aceste feresstre par compplicate, dar pentru


p AutoLLisp şi Visuaal LISP existtă trei posibiilităţi:
ƒ AutoLiisp Reference: Acest ghid este echivalent cu Comma and Refere ence din
AutoCA AD. Aceastaa conţine o liistă cu toate funcţiile
f AuttoLisp ordonnate alfabeticc.
ƒ Visuall LISP Deve eloper’s Gu uide: Acest ghid este ecchivalent cu manualul dee utilizare
AutoC CAD User’s Guide. El coonţine toate datele
d necesaare programăării în Visua
al LISP.
ƒ Visuall LISP Tuto orial: Dacă nee amintim exxemplul cu aleea
a de cărăămizi din Au utoLISP2,
vom reecunoaşte aceest tutorial, rescris
r acum pentru Visual LISP.

3.3. LUCRUL CU EXPR


RESII AUT
TOLISP3

Ca orice limbaj de proogramare, AutoLISP-ul


A are propriille lui funcţiii şi sintaxe.. În acest
capitol se explică moduul în care se poate scrie codul
c în AuttoLISP. Un mare
m avantajj oferit de
AutoLISP este acela căă se poate teesta codul im mediat, spre deosebire de limbajele compilate
pentru care este nevoie de paşi supliimentari. Penntru limbajelle compilate, la fiecare m
modificare

1
deci prograamatorilor
2
care este cuunoscut de maai mulţi ani
3
deşi anumite fucţii sau expresii
e au fost explicate anterior,
a se rev
vine asupra loor din punct dde vedere a
editorului Viisual LISP, sauu pentru exemmplificarea altoor funcţii

24
EDITORUL VISUAL LISP
a codului, acesta trebuie să fie recompilat înainte de a se vedea modificările în AutoCAD. De
exemplu, cazul ObjectARX.

3.3.1. Înţelegerea sintaxei AutoLISP

Toate limbajele de programare au propria sintaxă - cum ar fi gramatica şi sintaxa fiecărui


limbaj. În AutoLISP, primul element este un operator sau funcţie, urmat de un număr de
operanzi. Un operator poate fi ales să îndeplinească o anumită funcţie, iar operanzii sunt
elementele cu care lucrează funcţia. Între componente, separatorul este spaţiu1.
Un alt mod de descriere a sintaxei AutoLISP este acela că între fiecare set de paranteze,
primul element este o funcţie, iar ceea ce urmează sunt parametrii sau argumentele funcţiei.

3.3.2. Lucrul cu numere şi text

Se pot folosi aceste funcţii pentru orice valori. De exemplu, dacă se creează o variabilă cu
valoarea 2, aceasta poate fi folosită cu funcţiile aritmetice. Toţi operatorii se pot găsi în
Anexa Funcţii AutoLISP din Manualul Visual LISP, în Funcţii de Bază/Funcţii
Aritmetice.
Dacă se tastează în linia de comandă a AutoCAD (+ 2 3), AutoLISP2 răspunde cu valoarea 5.
Această sintaxă care are un operator, semnul +, poziţionat înaintea operanzilor (2 şi 3) este
diferită de alte limbaje, dar este foarte utilă pentru înţelegerea AutoLISP.
Următoarea expresie, adaugă încă un set de paranteze care include expresia anterioară. De
exemplu, la tastarea în linia de comandă a AutoCAD a expresiei (* 5 (+ 2 3)), AutoLISP
răspunde cu valoarea 25.
Expresia este evaluată de la interior către exterior. Prima operaţie făcută este suma dintre 2 şi
3, apoi suma este înmulţită cu 5.
Lucrul cu numere reale este la fel de simplu ca şi lucrul cu numere întregi3. Dacă se tastează
în linia de comandă a AutoCAD expresia (/ 7.3 5.84), AutoLISP-ul răspunde cu valoarea
1.25.
Lucrul cu text este la fel de simplu ca şi lucrul cu numere, dar operaţiile ca +, -, *, /, nu au
sens în acest caz. În AutoLISP, şirul este un simplu text.
Sunt prezentate două exemple:
(strcat “Astazi este “ “o zi frumoasa” “.”)
“Astăzi este o zi frumoasă.”
(substr “Astazi este o zi frumoasa.” 12 4)
“ o z”
ƒ STRCAT provine de la STRing conCATenate4 şi alătură două sau mai multe şiruri.
Pot urma oricâte şiruri după funcţia STRCAT5.
ƒ SUBSTR provine de la SUBSTRing şi în exemplul anterior, returnează 4 caractere,
începând de la poziţia 126.

1
reamintim ca lipsa saul multiplicarea caracterului spaţiu constituie o greşeală de sintaxă
2
AutoCAD-ul la întâlnirea unei paranteze rotunde deschise tratează textul următor ca şi expresii/funcţii
AutoLISP, apelând la limbajul integrat AutoLISP, pentru interpretarea codului
3
dacă se folosesc numere subunitare, trebuie introdus întâi 0, ca în exemplul următor: (+ 2.5 0.5)
4
concatenarea şirurilor
5
în exemplul anterior sunt trei şiruri incluse între ghilimele
6
primul caracter al şirului pentru SUBSTR este 1. Există unele funcţii, cum ar fi NTH şi SSNAME,
care consideră primul element ca fiind 0

25
PROIECTARE ASISTATĂ DE COMPUTER

Apelul funcţiilor, care nu au efect direct asupra unui desen, este recomandat să fie testate în
fereastra Console, ceea ce evită încărcarea şi rularea programului în AutoCAD.

3.4. FOLOSIREA AUTOLISP DIN LINIA DE COMANDĂ A


AUTOCAD
AutoLISP poate fi folosit din linia de comandă a AutoCAD, deoarece este un interpretor. Prin
scrierea unei expresii în linia de comandă, se obţine imediat un rezultat. Un limbaj interpretor
este acela în care o singură declaraţie este transmisă limbajului maşină, executată şi apoi
fiecare declaraţie ulterioară este tratată în acelaşi mod. Acest lucru permite introducerea
interactivă a codului AutoLISP în AutoCAD.
Rezultatul unei expresii AutoLISP poate fi folosit ca răspuns la o comandă AutoCAD. De
exemplu, dacă se tastează (+ 1 7) la prompterul comenzii circle din AutoCAD,
Diameter/<Radius>: rezultatul este un cerc cu raza de 8 unităţi.
AutoCAD permite editarea în linia de comandă, lucru util atunci când se lucrează cu expresii
AutoLISP. Se pot folosi tastele cu săgeţi, Delete şi Backspace. Se poate deschide
fereastra de text1, se pot selecta liniile anterioare şi se poate alege opţiunea Paste din linia de
comandă. Acest lucru permite copierea unei linii din linia de comandă curentă, care poate fi
apoi executată sau editată.
Dacă se încheie comanda fără închiderea parantezelor, AutoCAD returnează (_>. Acest lucru
înseamnă că o paranteză nu a fost închisă. Dacă două paranteze nu au fost închise, AutoCAD
răspunde cu ((_>. Trebuie tastat numărul corect de paranteze închise în linia de comandă.
AutoCAD acceptă expresia.

¾ Pas cu pas lucrul cu numere şi text în linia de comandă:

1. Se deschide un nou desen.


2. Se tastează circle. Se urmăresc mesajele:
Specify center point for circle or [3P/2P/Ttr (tan tan radius)]: se
alege un punct.
Specify radius or circle or [diameter]: (- 5 3)
AutoCAD-ul desenează un cerc cu raza egală cu 2.
3. Se tastează (strcat “Acesta este un exemplu de “ “text obişnuit.”). Nu uitaţi de spaţiul
dintre „de” şi „ ” “. Când cele două fraze sunt alăturate aceasta va crea un spaţiu între ele2.
AutoCAD-ul returnează: “Acesta este un exemplu de text obişnuit.”
4. La apăsarea tastei up-arrow3, AutoCAD repetă ultima linie. Se şterge din linia de
comandă cuvântul „obişnuit”, şi se tastează cuvântul „italic”. AutoCAD returnează noul şir
concatenat.
5. Se salvează desenul cu extensia .dwg.

Observaţie: Când se creează expresii AutoLISP în linia de comandă, acestea nu sunt salvate
împreună cu desenul. Ele au acelaşi statut cu orice expresie dată în linia de comandă.

1
tasta F2
2
între „de” şi „text”
3
săgeată sus – din cursorul de pe tastatură

26
EDITORUL VISUAL LISP
3.5. CREAREA ELOR AUTO
A FIŞIERE U LISP

Dacă se dooreşte folosirrea repetată a expresiiloor AutoLISP P, acestea trrebuie salvaate într-un
fişier. Se creeează o rutinnă în Visual LISP şi se allege opţiunea Save File.
O practică desd întâlnită este salvareea tuturor ruttinelor AutoLISP într-unn folder1, dee exemplu
numit LISP P, unde suunt păstrate fişierele create.
c Se alege
a fişieruul dorit dinn meniul
Tools/Optio ons, se extinnde Supporrt File Searrch Path din n meniul File e şi se alegee opţiunea
Add. Se addaugă calea prin tastareea direct în căsuţa de editare e sau prin
p apăsareaa opţiunii
Browse.
Deoarece AutoCAD
A poate deschidee mai multe desene2, treb buie organizaate rutinele A
AutoLISP
în funcţie dee apelarea unnui desen sauu apelarea tuuturor deseneelor.
AutoCAD oferăo 2 fişierre .lsp, care se
s pot folosi pentru rutinele AutoLIS SP:
ƒ Acad.llsp: acest fiişier se folosseşte pentru rutinele de iniţializare
i a AutoCAD. Acad.lsp
este înncărcat pentrru fiecare deesen consecuutiv. De exeemplu, dacă se doreşte îîncărcarea
unui meniu
m special numai pentrru un desen, se poate plassa rutina în Acad.lsp.
A
ƒ Acadd doc.lsp: accest fişier se s foloseşte pentru rutinele care iniţializează
i desenele
individduale. Acest fişier este înncărcat la fiiecare deschiidere a desenului. Dacă există un
meniu care conţine macroinstrrucţiuni AuttoLISP care au variabile care se dooresc a fi
folositee în toate desenele, atunnci se pot plasa
p rutinelee AutoLISP P folosite dee menu în
fişierull Acaddoc.lssp.

1
dosar
2
numit şi MD
DI – Multiple Drawing Inteerface

27
PROIECTARE ASISTATĂ DE COMPUTER
Datorită interfeţei multiple AutoCAD-MDI, fiecare desen conţine propriul său mediu
AutoLISP. Fişierele AutoLISP încărcate într-un desen – împreună cu variabilele lor - nu sunt
accesibile altui desen. Pentru împărţirea1 funcţiilor, se foloseşte (v1-load-all “filename”) în
locul (load “filename”), unde filename este numele fişierului AutoLISP, pentru popularea
fiecărui desen curent, precum şi a desenelor ce vor fi create. Funcţia v1-load-all este
echivalentă cu plasarea rutinei AutoLISP în acaddoc.lsp.
Pentru crearea unui nou fişier Visual LISP, se deschide editorul Visual LISP
(Tools/AutoLISP/Visual LISP Editor) şi se alege din meniul File/New File sau se alege
New File din bara de instrumente standard. Visual LISP deschide un nou document, aşa cum
este prezentat în figura anterioară.
Se poate începe acum editarea codului în noul document, care diferă de codul scris într-un
editor text prin culoare. Visual LISP are posibilitatea de a distinge anumite caracteristici ale
codului şi a-l colora corespunzător. Tabelul 1 conţine culorile şi semnificaţiile acestora.

Tabelul 1
Sistemul de culori al editorului Visual LISP
Culoarea Elementul de sintaxă AutoLISP
Albastru Funcţii de construcţie şi simboluri de protecţie
Magenta Şir text
Verde Numere întregi
Albastru verzui Numere reale
Purpuriu pe fond gri Comentarii
Roşu Paranteze
Elemente necunoscute cum ar fi variabilele
Negru
create

Se pot alege aceste culori din meniul Visual LISP, Tools/Windows Attributes/Configure
Current. Şi din caseta de dialog Windows Attribute se poate alege o culoare. Se pot schimba,
de asemenea, din aceeaşi casetă de dialog, marginea din stânga şi lăţimea unui tab.

¾ Pas cu pas crearea unui nou fişier AutoLISP:


1. Se începe un nou desen; nu trebuie să existe un alt desen deschis.
2. Se alege editorul Visual LISP, din meniul Tools/AutoLISP/Visual LISP Editor.
3. Se alege opţiunea New File din bara de instrumente Standard Visual LISP .
4. Se tastează următoarele linii de program:
;deseneaza o linie orizontala cu lungimea de 3 unitati
(defun c:line3 (/ pt)
(princ “Alegeti un punct va rog”)
(setq pt (getpoint))
(command “_line” pt “@3,0” “”)
)
5. Se selectează prima linie din text şi se alege opţiunea Comment Block din bara de
instrumente Tools.
6. Se alege Format Edit Windows din bara de instrumente Tools pentru formatarea
codului.
1
share

28
EDITORUL VISUAL LISP
7. Se alege Check Edit Window şi se vizualizează rezultatele în fereastra Built Output.
8. Se invocă din nou editorul Visual LISP.
9. Se alege Load Active Edit Window pentru încărcarea rutinei.
10. Se alege opţiunea Activate AutoCAD din bara de instrumente View.
11. În linia de comandă se tastează line 3.
12. La prompterul Alegeti un punct va rog: se poate folosi orice metodă pentru specificarea
unui punct. AutoCAD desenează o linie orizontală cu lungimea de 3 unităţi.
13. Se revine în fereastra Visual LISP.
14. Se invocă editorul Visual LISP. Se salvează fişierul cu opţiunea Save File din bara de
instrumente Standard Visual LISP. Se salvează rutina cu numele linie.lsp.
15. Se închide fereastra Visual LISP prin apăsarea butonului Close. Nu se salvează desenul.

29
4. PROGRAMAREA SIMPLĂ ÎN AUTOLISP

În momentul în care începeţi învăţarea limbajului AutoLISP se presupune că aveţi cel puţin
cunoştinţe medii de AutoCAD. Necesitatea învăţării acestui limbaj de programare apare după
descoperirea limitelor desenării în AutoCAD. Prin desenarea în AutoCAD realizaţi desenare
asistată, adică folosiţi calculatorul ca pe o planşetă de desenare1. Folosind AutoLISP realizaţi
proiectarea asistată. Proiectarea asistată depăşeşte cadrul desenării asistate, exploatând forţa
calculatorului sub aspecte multiple: generare de desene2, calcule geometrice, de rezistenţă, etc.
Dacă dorim să facem calcule, să generăm desene parametrizate3, să scăpăm de desenarea
respectivă etc. putem introduce într-un program AutoLISP toate acţiunile dorite.

4.1. ELEMENTE DE LIMBAJ AUTOLISP


Aşa cum am spus AutoLISP se reduce la lucrul cu liste. În general expresiile AutoLISP au
sintaxa:
(nume-funcţie [argumente] …)
Separaţia între numele funcţiei şi argumente, ca şi între argumente este un spaţiu4. Orice
argument poate fi la rândul lui o expresie. Parantezele drepte [] indică faptul că ceea ce se află
cuprins între ele este opţional; deci pot fi şi funcţii fără argumente.
În exemplul prezentat în capitolul anterior, unde apărea lista (+ 3 2.2), spunem că semnul “+”
reprezintă numele funcţiei adunare, iar 3 şi 2.2 sunt argumentele acestei funcţii. Practic,
aceasta este o expresie.
În acest exemplu argumentele adunate sunt două numere; unul este un număr întreg iar celălalt
este un număr real5. Deci argumentele sunt constante. În loc de constante, însă, se poate lucra
cu variabile. Acestea, ca şi în algebră, sunt apelate literal. Practic, vă puteţi gândi la variabile
ca la nişte sertare: pe sertar este pusă o etichetă - numele variabilei, iar în sertar se află
valoarea ei.
Tipurile posibile de variabile în AutoLISP sunt 46:
ÎNTREG – numere întregi cu semn;
REAL – numere cu partea întreagă şi zecimală, cu semn;
PUNCT – listă de două sau de trei variabile reale reprezentând coordonatele unui punct
geometric;

1
cu facilităţi suplimentare notabile
2
prin program
3
în care diverse dimensiuni sunt cerute utilizatorului
4
blanc - spaţiul reprezintă un separator, asemănător cu virgula de separaţie din alte limbaje, deci atât
lipsa cât şi multiplicarea spaţiilor constituie o eroare de sintaxă
5
deci indiferent de câte ori executăm linia program obţinem acelaşi rezultat, respectiv înmulţim
numerele 3 şi 2.2
6
într-o primă aproximare

30
PROGRAMAREA SIMPLĂ ÎN AUTOLISP
ŞIR – secvenţă de caractere cuprinse între ghilimele.
În AutoLISP tipul variabilei nu trebuie declarat. Acesta este asociat automat cu variabila,
potrivit valorii care i se atribuie. Dacă ulterior i se atribuie altă valoare, de alt tip, se va
schimba şi tipul variabilei. Nu sunt restricţii în alegerea numelui variabilei, singurele restricţii
sunt legate de necesitatea ca primul caracter să fie o literă şi de faptul că, întotdeauna, este
predefinită variabila π1, cu valoarea cunoscută: 3.141593.
Crearea şi inţializarea unei variabile în AutoLISP se face cu funcţia SETQ. Ea este similară
cu “LET” din BASIC, “=” din FORTRAN, “:=” din PASCAL, sau “=” din C. Sintaxa:
(setq nume-var1 valoare1 (nume-var2 valoare2)…)
unde:
nume-vaxr – numele ales de dumneavoastră pentru variabilă
valoarex – valoarea pe care doriţi să o atribuiţi variabilei; tipul ei va conferi un tip similar
variabilei definite cu această ocazie.
Se observă că se pot defini mai multe variabile succesiv.
Exemple:
(setq a 3)
(setq t341 2.2)
(setq sirdecaractere “exemplu de sir de caractere”)
(setq intreg 3 real 4.5 sir “flansa”)
Variabila a va fi de tip întreg şi va avea valoarea 32. Variabila t341 va fi de tip real şi va avea
valoarea 2.2, iar variabila sirdecaracctere va fi de tip şir de caractere, cu valoarea “
exemplu de sir de caractere”3.
În ultima atribuire s-au definit simultan variabilele denumite intreg, real şi sir.
La variabilele reale trebuie reţinut că nu se acceptă valori de tipul .78 sau 67. . Valorile
acceptate ar fi 0.87 şi 67.04.
Variabilele, o dată declarate şi iniţializate, îşi păstrează valoarea pe toată sesiunea AutoCAD
curentă. De asemenea chiar dacă li se atribuie valoarea nil nu sunt şterse decât prin specificare
explicită5.
Puteţi atribui unei variabile, ca valoare, o altă variabilă.
(setq sirdecaractere t341)
veţi schimba tipul variabilei sirdecaractere din şir de caractere în real şi-i veţi atribui
valoarea pe care o are variabila reală t3416. Ca să continuăm exemplul cu sertarele, este ca şi
când aţi pune sertarul pers deasupra lui t341 şi i-aţi scoate fundul; când căutaţi ceva în
sirdecaractere, găsiţi ceea ce se află în t341.
Totul într-un desen AutoCAD se reduce la puncte şi la reprezentarea acestora. Ştim că un
punct este definit de trei coordonate X, Y, Z. Practic un punct din AutoCAD este definit de o
listă cu trei elemente7. O linie este reprezentată o listă cu două elemente, fiecare
element fiind, deasemenea, o listă cu trei elementele.
Variabilele de tip punct geometric conţin coordonatele X, Y şi, opţional, Z1. Practic, e vorba
de liste de două sau trei variabile reale cuprinse între paranteze, ca în:

1
notată cu pi sau PI
2
deci printr-o singură operaţie se creează o variabilă şi i se atribuie o valoare. Tipul variabilei va fi
dictat de valoarea acesteia
3
de reţinut că ghilimelele nu fac parte din şir
4
deşi uneori funcţionează, nu contaţi pe asta
5
folosind funcţia dedicată
6
se face referire la exemplele precedente
7
coordonatele punctului

31
PROIECTARE ASISTATĂ DE COMPUTER
(10.0 300.2)
(10.0 300.2 5.7)
Valorile corespund în ordine coordonatelor X, Y, Z. Dacă Z lipseşte, valoarea sa se ia potrivit
contextului2. Pentru a forma o listă recunoscută de AutoLISP, trebuie folosită funcţia LIST,
sub forma:
(list 10.0 300.2), sau
(list 10.0 300.2 5.7)
Putem crea o variabilă de tip punct astfel:
(setq pct1 (list 10.0 300.2))
(setq pct2 (list 22.5 real 12.34))
(setq pct3 (list a t341 real))3
Ca alternativă, se poate folosi prefixul apostrof, care face ca ceea ce urmează să fie luat ca
atare, fără a fi evaluat. Astfel, puteţi pune:
(setq pct1 ‘(10.0 300.2))
definind identic punctul pct1 ca mai sus.
Practic listele precedate de apostrof nu sunt evaluate. Dacă n-ar fi apostroful, s-ar evalua lista
internă4 şi apoi cea externă. Dacă e pus apostroful, lista internă rămâne neevaluată şi se trece
la evaluarea celei externe, care va atribui numelui pct1 o listă şi nu o simplă valoare5. Acest
tip de liste pot fi folosite în Consola AutoLISP sau într-un program scris în fişier. Dacă
introduceţi linii pe promterul “Command:”, apostroful nu e acceptat cu acest sens, ci cu
sensul de comandă “transparentă”6.
Deoarece lista nu este evaluată este de evident că în listă nu pot să apară decât valori
constante. Funcţia apostrof este sinonimă funcţiei QUOTE.
Dacă obţinem o listă punct putem să extragem coordonatele punctului; x, y sau z, folosind
funcţiile CAR, CDR sau combinaţii ale lor, de exemplu CADDR.
(car pct1) returnează coordonata X a punctului pct1 respectiv 10.0
(cadr pct2) returnează coordonata Y a punctului pct2, respectiv 4.5
(caddr pct3) returnează coordonata Z a punctului pct3, respectiv 4.5
Dacă doriţi să definiţi un punct pcta care să aibă X-ul lui pct1 şi Y-ul lui pct2, veţi pune:
(setq pcta (list (car pct1) (cadr pct2)))
În acest fel pcta va avea coordonatele (10.0 4.5).
Practic funcţia CAR aplicată unei liste returnează primul element din listă, în timp ce CDR
aplicat unei liste returnează lista fără primul element.
Deoarece am explicat câteva principii să le folosim în AutoCAD. Oricare din variabilele
definite poate fi apelată la prompterul AutoCAD Command folosind sintaxa:
!NumeVariabilă
De exemplu !real returnează 4.5.

1
coordonatele unui punct din AutoCAD
2
se foloseşte ELEVaţia curentă a planului de desenare
3
s-a folosit drept coordonată X variabila x1 definită anterior
4
care n-ar duce la nimic bun, deoarece nu conţine nici o funcţie AutoLISP
5
scalară, aş zice
6
înainte de a defini numele de variabile şi funcţii trebuie verificat ca acestea să nu se suprapună peste
cele predefinite din AutoLISP şi AutoCAD

32
PROGRAMAREA SIMPLĂ ÎN AUTOLISP
Scrieţi la prompterul AutoCAD:
(setq pct1 (list 10.0 300.2))
Practic se invocă AutoLISP, se crează variabila pct1 căreia i se atribuie lista (10.0 300.2).
Deci avem un punct pct1.
AutoCAD returnează (10.0 300.2), deci valoarea finală a expresie.
Putem să desenăm o linie începând din punctul pct1:
Command: line
From point: !p1
Specify next point or [Undo]: se indică un punct cu mouse-ul
Specify next point or [Undo]: se apasă Enter sau spaţiu pentru
terminarea liniei
Sau putem să desenăm un cerc:
Command: circle
Specify center point for circle or [3P/2P/Ttr (tan tan
radius)]: !pct1
Specify radius of circle or [Diameter]: (car pct1)
Deci am desenat un cerc cu centrul în punctul de coordonate 10.0,300.2 şi cu raza 10.0.
Astfel am creat o variabilă definită cu numele simbolic pct1. Chiar de la deschiderea
AutoCAD-ului există o listaă cu nume simbolice predefinite numită atomlist. Dacă doriţi să-i
vedeţi conţinutul, introduceţi direct !atomlist ca răspuns la prompterul “Command:” al
AutoCAD-ului; mai întâi apăsaţi tasta <F2> pentru a trece în mod text, deoarece ecranul se va
umple pe trei sferturi cu nume de simboluri. Iată cam cum va apărea această listă:
ACET-SS-REMOVE-DUPS-GENERALIZE-ENT AUTOARXACEDLOAD ACET-GEOM-PIXEL-
UNIT
IMPORT3DS ACET-LIST-PUT-NTH defun-q-list-ref ACET-GEOM-INSERT-
POINT-LIST ~
CDAAAR C:AI_CUSTOM_SAFE ACET-GEOM-ARBITRARY-X C:OVERKILL
ACET-ELIST-FILTER-OR-MECI
.....
OBSERVAŢIE: Numele simbolic atomlist depinde de versiunea (Release)1.
Odată cu introducerea numelui atoms-family variabila s-a transformat într-o funcţie, astfel că
acum trebuie introdus:
(atoms-family 0)
pentru a obţine efectul pe care îl dădea !atomlist.

4.2. EXPRESII AUTOLISP


Anterior au fost tratate câteva funcţii AutoLISP: setq, list, car, cadr, caddr. Acestea sunt
folosite pentru a forma expresii AutoLISP, potrivit sintaxei de acum cunoscute:
(nume-funct (argument1)…)
Expresiile AutoLISP pot fi:
1
de exemplu Release-10, -11 = atomlist, Release-12, -13 = atoms-family, etc.

33
PROIECTARE ASISTATĂ DE COMPUTER
− matematice;
− şir;
− condiţionale.

Proces de

Proces de

Rezultat returnat

Ele sunt descrise în continuare.

4.2.1. Expresii matematice

Expresiile matematice folosesc funcţii ale căror argumente pot fi cel mai des numere reale sau
numere întregi; dacă măcar unul e real, atunci toţi întregii vor fi avansaţi la real şi rezultatul va
fi real.
O primă categorie de funcţii ce intră în compunerea expresiilor matematice este:

Nume
Descriere Exemplu
funcţie
(+ x y)
+ (+ 2 4 7) returnează 13
returnează suma argumentelor
(- x y)
- returnează diferenţa dintre primul argument (- 7 2 4.0) returnează 1.0
şi sumă următoarelor argumente
(* x y)
* (* 2.0 3 6) returnează 36.0
returnează produsul argumentelor
(/ x y)
returnează rezultatul împărţirii primului
/ (/ 8 2 2) returnează 2
argument la produsul următoarelor
argumente
max (max x y) (max 100 60 112 1.2)

34
PROGRAMAREA SIMPLĂ ÎN AUTOLISP
returnează argumentul cu cea mai mare returnează 112.0
valoare
(min x y)
min returnează argumentul cu cea mai mică (min 3 6 4 9) returnează 3
valoare

Observaţi de fiecare dată că imediat după fiecare paranteză1 urmează numele funcţiei, apoi
spaţiu şi argumentele; după ultimul argument urmează paranteza închisă. Să aveţi grijă să
respectaţi aceste reguli, pentru ca programele dvs. să pară mereu ordonate.
Observaţi că rezultatul operaţiei max este real deoarece, chiar dacă maximul nu este real,
comparaţia dintre argumente a dus la transformarea celor întregi la reale datorită lui 1.2. Este
demn de reţinut ce se întâmplă la calculul amestecat cu întregi şi reale. De exemplu, ştiind că
trecerea de la grade la radiani se face prin coeficientul π/180, dacă veţi converti 60 de grade la
radiani prin expresia:
(* (/ 60 180) pi)2
gândind că se împarte întâi 60 la 180 iar apoi rezultatul3 se înmulţeşte cu π, veţi constata cu
surprindere că rezultatul este zero! De ce? E simplu: pentru că împărţirea lui 60 la 180 face,
într-adevăr 0.33333 dar ambele argumente fiind ÎNTREGI, atunci şi rezultatul se converteşte
la întreg, dar nu prin rotunjire ci prin TRUNCHIERE. Chiar dacă împărţiţi 179 la 180 obţineţi
tot zero! Ce e de făcut? Puteţi pune unul din argumente ca real4 sau puteţi să ordonaţi
socotelile astfel:
(* (/ pi 180) 60)
Alte funcţii matematice cer argumente mai puţine. Iată-le, împreună cu numărul exact de
argumente necesare şi cu valorile returnate:

Nume
Descriere Exemplu
funcţie
(abs x)
abs (abs -2.7) returnează 2.7
valoarea absolută a lui x
(sqrt x)
sqrt (sqrt 2) returnează 1.4142
radical din x
(expt x p) (expt 3.0 2.0) returnează
expt
x la puterea p 9.0
(exp 1.0) returnează
(exp p) 2.71828
exp
e la puterea p (exp 2.2) returnează
9.02501
(log x) (log 4.5) returnează
log
ln x (sau logaritm în baza e a lui x) 1.50408
(float x)
float (float 3) returnează 3.0
valoarea întregului x convertit la real

1
fără vreun spaţiu
2
la expresiile imbricate evaluarea se face din interior spre exterior, în acest caz se evaluează prima dată
(/ 60 180) al cărei rezultat este înmulţit cu pi
3
care ar fi 0.3333
4
de exemplu 60.0 în loc de 60

35
PROIECTARE ASISTATĂ DE COMPUTER
(fix x)
fix (fix -2.6) returnează -2
valoarea realului x trunchiată la întreg;
(sin alfa)
sin (sin (/ pi 2)) returnează 1.0
sinus de alfa (dat în radiani)
(cos alfa) (cos (/ pi 2)) returnează
cos
cos de alfa (dat în radiani) 0.0
(atan x) (atan pi) returnează
atan
arctangent (în radiani) de x 1.26263
(1+ x)
1+ (1+ 4) returnează 5
x mărit cu 1; echivalent cu (+ x 1)
(1- x)
1- (1- 4) returnează 3
x redus cu 1; echivalent cu (- x 1)
(angle p1 p2)
(angle '(1.0 1.0) '(1.0 4.0))
unghiul în radiani al segmentului p1-p2
returnează 1.5708
angle măsurat potrivit sensului şi originei
(angle '(5.0 1.33) '(2.4
unghiurilor curent stabilite cu comanda
1.33)) returnează 3.14159
UNITS (de obicei trigonometric)
(distance '(1.0 2.5 3.0)
'(7.7 2.5 3.0)) returnează
(distance p1 p2) 6.7
distance
distanţa dintre punctele p1 şi p2 (distance '(1.0 2.0 0.5)
'(3.0 4.0 0.5)) returnează
2.82843
pentru punct 3D
(polar '(1 1 3.5) 0.785398
1.414214) returnează (2.0
(polar p1 alfa dist)
2.0 3.5)
polar punctul aflat la distanta “dist” şi unghiul
pentru punct 2D
“alfa”(în radiani) faţă de punctul dat p1
(polar '(1 1) 0.785398
1.414214) returnează (2.0
2.0)
pentru
(setq a 123 r 3.45 s
"Hello!" x '(a b c))
(setq f (open "name" "r"))
obţinem
(type 'a) returnează SYM
(type a)
(type a) returnează INT
type tipul variabilei a (integer=întreg, real=real,
(type f) returnează FILE
list=listă, string=şir)
(type r) returnează REAL
(type s) returnează STR
(type x) returnează LIST
(type +) returnează
SUBR
(type nil) returnează nil

36
PROGRAMAREA SIMPLĂ ÎN AUTOLISP
Se observă că nici una dintre funcţiile prezentate nu schimbă valoarea variabilei pe care se
aplică; ele calculează, pur şi simplu, o valoare şi o returnează. De exemplu, (sin x) află care
este valoarea variabilei x, aplică pe aceea valoare funcţia sinus1 şi returnează rezultatul.
Valoarea lui x nu s-a schimbat. Dacă doriţi dvs. să înlocuiţi pe x cu sinusul său, puteţi să
faceţi o atribuire de genul (setq x (sin x)).

4.2.2. Funcţii şir

Prezentăm funcţiile cu efect asupra şirurilor:


Nume
Descriere Exemplu
funcţie
(itoa 123) returnează şirul
(itoa int)
itoa “123”, deci în loc de un
conversia valorii variabilei int în şir ASCII
întreg găsim un şir
(atoi s) (atoi “123”) returnează
atoi
conversia întreagă a şirului s întregul 123
(ascii c) (ascii “A”) returnează 65,
ascii
codul ASCII (întreg) al caracterului c codul ASCII al lui A
(chr int)
chr (chr 65) returnează A
caracterul ASCII corespunzător codului int
(strcat “retea” “-apa”)
(strcat s1 s2) returnează şirul “retea-
strcat
şirul s1 concatenat cu s2 apa”;

(strlen “retea-apa”)
(strlen s)
strlen returnează lungimea 9 a
lungimea şirului s
şirului anterior
(terpri)
terpri
începe o nouă linie pe ecran

4.2.3. Expresii condiţionale.

Ca orice limbaj de programare şi AutoLISP are funcţii condiţionale din care exemplul clasic
este if - “dacă”. Ea prezintă o ramificaţie în program de forma:
“Dacă expr-cond atunci execută1 altfel execută2”
unde expr-cond este o expresie condiţională, ale cărei valori pot fi true2 sau false3. În
AutoLISP vom conveni să notăm adevărat prin T, iar fals prin nil. Ca efect, dacă expr-
cond este T, se execută acţiunea execută1, iar dacă e nil, se execută acţiunea
execută2. Acţiunile exprimate de execută2 pot să lipsească, astfel încât, ori se produc
acţiunile execută1 ori nimic. Ca urmare, funcţia if poate avea una din formele:
(if expr-cond execută1)

1
considerând-o ca unghi dat în radiani
2
adevărat
3
fals

37
PROIECTARE ASISTATĂ DE COMPUTER

Expresie
condiţională

Opţional

Execută 1 Execută 2

(if expr-cond execută1 execută2)

Se observă că acţiunile din execută2 pot fi pur şi simplu adăugate, dacă se doreşte acest
lucru, fără a exista un separator gen atunci. Dacă ţinem cont că acţiunile în AutoLISP sunt
date prin expresii conţinute în liste ce pot fi oricând imbricate oricât de profund unele în
altele, ne dăm seama că ceea ce apare mai sus sub numele execută1, de exemplu, este de fapt
o listă. Ne concentrăm acum pe expr-cond. Am spus că valoarea acestei expresii poate fi T
sau nil.
Pentru a o construi, putem folosi una sau mai multe dintre următoarele funcţii:

Nume
Descriere Exemplu
funcţie
(minusp num) (minusp -2.7) returnează
minusp
T dacă num e negativ, nil altfel T
(zerop num)
zerop (zerop 2) returnează nil
T dacă num e zero, nil altfel
(numberp x)
(numberp 3.0 2.0)
numberp T dacă x e număr (real sau întreg), nil
returnează T
altfel
pentru
(setq a 123 b "string" c
nil)
(not a b …) obţinem
not
NU logic aplicat pe a,b,… (not a) returnează nil
(not b) returnează nil
(not c) returnează T
(not '()) returnează T
(or nil 45 '()) returnează
(or a b …)
or T
SAU logic aplicat pe a,b,…
(or nil '()) returnează nil
pentru
(and a b…)
and (setq a 103 b nil c
ŞI logic aplicat pe a,b,…
"string")

38
PROGRAMAREA SIMPLĂ ÎN AUTOLISP
obţinem
(and 1.4 a c) returnează T
(and 1.4 a b c) returnează
nil
(= a b )
= (=-2.6) returnează -2
T dacă a este egal cu b, nil altfel
(/= a b)
/= (/= (/ pi 2)) returnează 1.0
T dacă a este neegal cu b, nil altfel
(> a b )
> (> (/ pi 2)) returnează 0.0
T dacă a este mai mare ca b, nil altfel
(>= a b)
>= T dacă a este mai mare sau egal cu b, nil (>=pi) returnează 1.26263
altfel
(< a b)
< (< 4) returnează 5
T dacă a este mai mic ca b, nil altfel
(<= a b)
<= T dacă a este mai mic sau egal cu b, nil (<=- 4) returnează 3
altfel
(listp a) (listp '(1.0 1.0) '(1.0 4.0))
listp
T dacă a este o listă, nil altfel returnează 1.5708
(null a) (null '(1.0 2.5 3.0) '(7.7
null
T dacă a este nil, nil altfel 2.5 3.0)) returnează 6.7

4.3. DEFINIREA FUNCŢIILOR


Crearea de funcţii este unul din principalele atribute ale acestui limbaj. Pentru a crea funcţii se
foloseşte tot o funcţie defun.
(defun <simb>([<lista_arg>]) <expr>…)
unde:
<simb> = numele funcţiei
<lista_arg> = argumentele funcţiei, date ca listă
<expr> = una sau mai multe expresii care formează “corpul” funcţiei
Numele funcţiei este liber ales şi nu trebuie să fie pus între ghilimele. Acest nume nu trebuie
să se suprapună peste vreun nume de funcţie internă. Ca să vă asiguraţi, daţi un !atomlist (sau
(atoms-family 0)), aşa cum s-a arătat anterior, mai sus, pentru a vedea ce funcţii sunt deja
definite.
Să facem o funcţie care trasează dreptunghiuri. Să o numim DRPT. Iat-o:
(defun drpt ( )
(setq a (getpoint “Primul colt: “))
(setq b (getcorner a “Coltul opus: “))
(command “pline” a (list (car a) (cadr b))
b (list (car b) (cadr a)) “c”)
)

39
PROIECTARE ASISTATĂ DE COMPUTER
Este vorba de o simplă listă, începută cu paranteza de dinaintea lui defun şi încheiată cu
ultima paranteză. Aici spaţiile nu mai contează decât atunci când sunt intercalate în şirurile
text cuprinse între ghilimele, ca şi sfârşiturile de linie. Totul se aranjează ca să fie cât mai
lizibil. Scrieţi această funcţie ca fişier text, sub numele “DRPT1.LSP”, de exemplu. Intraţi în
AutoCAD şi, pe prompterul Command: “daţi comanda:”
Command : ( load “drpt1” )
DRPT
Command :
După cum vedeţi, vi se returnează numele funcţiei definită în cadrul fişierului. Acum daţi:
Command : ( drpt )
Vor apărea cererile succesive :
Primul colţ :
Colţul opus :
După ce aţi răspuns indicând cele două colţuri diagonal opuse ale dreptunghiului1, acesta va fi
trasat pe ecran sub forma unei polilinii. Veţi vedea că se dau şi opţiunile comenzii PLINE.
Dacă daţi comanda SETVAR şi setaţi pe zero variabila CMDECHO, aceste opţiuni nu vor
mai apărea, aşa cum s-a spus.

4.4. UN EXEMPLU
Să scriem un program AutoLISP pentru reprezentarea grafică prin cerculeţe a funcţiilor
matematice de o variabilă. Pentru asta, facem un program principal şi o funcţie AutoLISP.
Programul principal fixează spaţiul de lucru şi declanşează un ciclu în care desenează în mod
repetat un cerc centrat în punctele graficului. Fişierul cu pricina poarta numele GRAF.LSP.
Conţinutul lui este următorul:
(defun fct (x)
(sin x); functia de reprezentat…
) ;…ce poate fi schimbata direct

(defun C:GRAFIC ( )
(setvar “CMDECHO” 0)
(setvar “BLIPMODE” 0)
(setq n 30) ;nr. puncte reprezentate
(setq domx (* pi 2)) ;domeniu x
(setq colt1 (list -1 -2)) ;colt zoom
(setq colt2 (list (+ domx 1) 2)) ;colt zoom
(command “zoom” “w” colt1 colt2) ;zoom window
(command “line” (list 0 0) (list domx 0) “”) ;axa x
(setq i 0) ;initializare contor
(while (<= i n) ;debut ciclu
(setq x (* i (/ domx n))) ;x curent
(command “circle” (list x (fct x)) 0.1) ;cerc crt
(setq i (+ i 1)) ;incrementare contor
)
(princ “ OK grafic!”) ;mesaj final

1
colţul al doilea vi se cere trasându-se dinamic fereastra elastică datorită lui GETCORNER

40
PROGRAMA N AUTOLISP
AREA SIMPLĂ ÎN
(p
princ)
)
Observaţi cuum se introdduc comentarriile: se punee un ”;” dupăă care în liniee putem scriee ce vrem,
deoarece AutoLISP nuu se ocupă de restul linieei. Funcţia de d reprezentaat se numeştte FCT şi
este banala funcţie sin,, iar comandda care o apeelează e imp p funcţia G
plementată prin GRAFIC.
Încărcarea şi
ş execuţia suunt ilustrate de
d dialogul:
Command: (load “gr
raf”)
C:GRAFIC
Command: GRAFIC
OK grafic
c!
Command:
Ceea ce se desenează
d pee ecran este reprezentat
r înn figură:

Programul principal esste nucleul acţiunii;


a din el sunt apeelate eventuualele subruttine. Aici,
programul principal estte funcţia-coomandă GR RAFIC. Prim ma dată sunt setate variaabilele de
sistem CMD DECHO şi BLIPMODE E astfel înccât comenzilee şi subcom menzile să nuu apară în
zona de dialog, pe de-o parte, şi nicii să nu aparăă cruciuliţelee (blips) în zoona grafică, pe de altă
parte. Apoii, se fixează variabila N pe valoareaa 30; aceastaa va precizaa câte cerculleţe să fie
desenate, diivizând domeeniul X al funcţiei de repprezentat. Do omeniul pe X este fixat prrin setarea
variabilei DOMX
D pe vaaloarea 2 PI, aşa cum se vede. Se deefinesc în conntinuare colţţurile unei
ferestre carre să delimiiteze zona afişată
a şi se dă efectiv comanda ZOOM Z W ppe această
fereastră. See trasează appoi axa X pe lungimea DOMX, folosiind comandaa LINE din A AutoCAD.
Se observă şirul vid “ “ care încheiee “To point:”-urile acesteei comenzi, fiindf echivallent cu un
Enter.
Urmează seetarea unui contor, exprimat de vaariabila i. Acest A lucru este
e necesar pentru a
controla unn ciclu care să execute repetitiv
r deseenarea de ceercuri. În Au utoLISP cicclarea este
implementaată prin funcţţia WHILE. În Î engleză “wwhile” înseam mnă “atâta tiimp cât”.
Iată sintaxa lui WHILE:
(while <e
expr_test>
> <expr>..
..)
unde:
<expr_testt> = expressie condiţionnală
<expr>... = expresii oarecare puse
p una dupăă alta
Practic, desschiderea parrantezei din faţa numeluii “while” facce ca AutoLIISP să explooreze lista
de expresii care urmeaază. El se aşşteaptă ca prrima expresiie să fie conndiţională; ffuncţie de
rezultatul evvaluării acessteia se trece mai departee sau nu. Daccă rezultatul NU este nil,, atunci se
vor evalua şiş expresiile care urmeazză, până la înntâlnirea paraantezei perecche a celei m
menţionate
dacă rezultatul este nill, atunci exppresiile caree urmează nu n mai sunt evaluate, aadică sunt
“sărite”, treecându-se laa evaluarea celor
c DE DU UPĂ acea paaranteză pereeche. Veţi ciiti o astfel
de construccţie la modull: “atâta tim mp cât expre esia test nu
u este nil, evaluează
e e
expresiile
următoare;; când exp presia test a devenit nil, n ieşi”. Sp punem că exxpresiile de după cea

41
PROIECTARE ASISTATĂ DE COMPUTER
condiţională nu este nil. Prin asta se creează un ciclu, nu-i aşa, reluat atâta timp cât expresia
test nu e nil.
Trebuie să observaţi că în expresia test trebuie să se schimbe ceva de la o reluare la alta,
fiindcă altfel ciclarea nu se termină niciodată, adică se ajunge într-o buclă infinită. Verificaţi
dacă în această expresie apare o variabilă a cărei valoare este modificată în corpul lui while.
Să vedem un exeplu:
Command: (setq a 1)
1
Command: (while(<= a 10)
(setq c a)
(setq a (+ a 1))
)
11
Command:
S-a înţeles că am introdus direct din AutoCAD liniile de mai sus. Se observă că primim “1>”
până ce încheiem paranteza deschisă în faţa lui “while”.
Să recunoaştem mai întâi componentele:
(<= a 10) este expresia test, fiind prima expresie de după cuvântul “while”; ea conţine testul
“este mai mic sau egal cu 10?”.
corpul lui while este format din expresiile (setq c a) şi (setq a (+ a 1)); prima atribuie lui c
valoarea momentană a lui a, iar a două modifică valoarea lui a.
Când închidem paranteza, expresia întreagă este evaluată. Ni se returnează 11 deoarece s-a
reluat corpul, majorându-se succesiv valoarea lui a, până ce s-a ajuns la valoarea 11. În acel
moment testul a dat nil şi s-a ieşit din while. Dacă daţi acum un !c, veţi primi 10, deoarece
atribuirea ultimei valori (11) lui a a dus la ieşirea, fară a se mai schimba valoarea lui c. Să
continuăm.
Expresia condiţională este (<= i n), adică dacă i <= n, atunci evaluarea dă TRUE, iar dacă
i>n, evaluarea dă nil. Iniţiaţi i = 0 iar n = 30, deci i < n. Ca urmare, conform definiţiei
funcţiei while, se trece la evaluarea expresiilor din lista while. Astfel se atribuie variabilei X
valoarea rezultată din expresia (* i (/ domx n)). Observaţi că mai întâi se va evalua paranteza
internă, efectuându-se împărţirea variabilei DOMX la N. Rezultatul va înlocui această
paranteză. Trecând la paranteza externă, evaluatorul va înmulţi pe i cu acest rezultat. Cum
iniţial i = 0, întreaga paranteză va da 0. Cu această valoare a lui X se va trece mai departe.
În continuare se dă comanda CIRCLE. Aceasta după cum ştiţi cere centrul şi raza cercului. I
se furnizează centrul dat de paranteza (list x (fct x)), adică un punct geometric cu coordonata
X obţinută mai sus, şi Y-ul obţinut prin aplicarea funcţiei FCT pe variabila X. În termeni
AutoLISP, ar trebui spus că se va evalua expresia (fct x) în care primul atom spune ce funcţie
se are în vedere, iar al doilea este argumentul funcţiei. Într-adevăr, dacă ne uităm mai sus, la
definiţia funcţiei FCT, vedem că se va transmite X-ul şi se va aplica pe el funcţia SIN.
Evaluarea acestei expresii se face pe baza funcţiei interne SIN. Ca efect, paranteza va fi
înlocuită cu rezultatul evaluării lui sin(0). Acesta având valoarea 0 este returnată funcţiei
GRAFIC apelante. Ea va reprezenta valoarea Y necesară pentru definirea centrului cercului.
Următorul parametru este raza cercului; acesta are o valoare constantă: 0.1. Dispunând de
centru şi rază, AutoCAD va trasa cercul cu pricina.
Mai departe, în spiritul celor spuse mai sus, se face modificarea contorului i. El este majorat1
cu 1 prin expresia (setq i (+ i 1). Observaţi că practic, i este înlocuit cu propria sa valoare
mărită cu 1.

1
incrementat

42
PROGRAMAREA SIMPLĂ ÎN AUTOLISP
Observaţi că modificarea lui i se face în sensul aproprierii ei de valoarea lui N, pentru ca încet,
încet, s-o întreacă şi să se termine ciclul. Acum i are valoarea 1. Cu asta, prima trecere, sau
iteraţie, prin ciclu s-a încheiat. Deci acum se închide paranteza pereche a celei din faţa lui
while.
În continuare se reevaluează expresia condiţională. Acum i = 1, iar pe N nu l-a modificat
nimeni, deci este tot 30. Atunci, cum i < N, se vor executa iarăşi cele trei expresii care
compun "corpul" ciclului: X capătă valoarea i*(DOMX / N)
Se trasează cercul cu centrul în punctul cu acest X şi cu Y-ul dat de FCT(X), raza fiind tot 0.1.
Se incrementează contorul i, devenind 2
Din nou i < N, deci ciclul se reia. Când i ajunge la valoarea 30 prin acest mecanism, avem i =
N şi ciclul se execută pentru ultima dată. Se vede că ultimul cerc este centrat pe capătul liniei
orizontale ce exprimă DOMX-ul. În continuare, i se incrementează cu 1, devenind 31. Acum
se iese, într-adevăr, deoarece i > 30.
(princ <expr>)
Această funcţie afişează în zona de dialog mesajul dat prin expresia <expr>. Totodată, din
cauză că şi ea este evaluată, va returna valoarea acelei expresii. De exemplu:
Command: (princ "Mesaj")
Mesaj "Mesaj"
Command:
Iată că s-a întâmplat ceea ce am spus: s-a evaluat expresia, afişându-se texul Mesaj, iar
evaluarea a returnat şi expresia, sub forma „Mesaj” cu tot cu ghilimele. De asta l-am dublat,
fără a-i adăuga însă argument.

43
5. EXPLORAREA AUTOLISP

Un termen foarte util în majoritatea limbajelor de programare este acela de variabilă. O


variabilă este un nume simbolic, care poate fi folosită într-un program. Un rol important în
utilizarea variabilelor îl constituie atribuirea valorilor.

5.1. CREAREA VARIABILELOR


Următorul exemplu atribuie valoarea 3 variabilei numită raza.
(setq raza 3)
3
Se poate tasta acest exemplu în Visual LISP, în fereastra Console1. Dacă se doreşte folosirea
acestei variabile în linia de comandă a AutoCAD, aceasta trebuie precedată de semnul
exclamării. De exemplu,
Commmand: !raza
3
Semnul exclamării ataşat înaintea variabilei, evaluează valoarea variabilei şi o returnează în
linia de comandă. Când se foloseşte o variabilă deja setată în fereastra Console, nu mai este
nevoie de semnul exclamării. Orice este scris în fereastra Console, se consideră expresie
AutoLISP.
Alocarea de şiruri unei variabile este la fel de simplă ca şi alocarea unei valori numerice.
(setq name “Robin”)
“Robin”
Se pot include de asemenea, expresii AutoLISP:
(setq radius (+ 2 1))
3
Aşa cum s-a explicat în capitolul anterior, AutoLISP evaluează expresii LISP, de la interior
către exterior. AutoLISP evaluează în primul rând parantezele (+ 2 1) şi apoi atribuie
rezultatul variabilei radius.

¾ Pas cu pas folosirea variabilelor AutoLISP din AutoCAD:


1. Se deschide un desen nou.
2. Se tastează (setq radius (+ 2 1)). AutoLISP2 returnează valoarea 3.

1
fereastra consolă corespunde ferestrei linie comandă din AutoCAD, deci tot ce introduceţi la consolă
în Visual LISP poate fi folosit în AutoCAD: variabile, funcţii, etc
2
ne referim la AutoLISP ca la o componentă AutoCAD, nu ca la un limbaj de programare distinct,
independent de AutoCAD; putem spune de fapt că AutoCAD returnează valoarea 3, folosind
interpretorul AutoLISP integrat

44
EXPLORAREA AUTOLISP
3. Se invocă comanda circle. Se specifică un punct pentru centrul cercului. La prompterul
Specify radius of circle or (diameter): se tastează !radius. AutoCAD-ul desenează un cerc
cu raza de 3 unităţi.
4. Se tastează (setq color “green”). AutoLISP-ul returnează“green”.
5. Se tastează color. La prompterul Enter default object color <BYLAYER> se tastează
!color.
6. Se desenează un cerc. Acesta este de culoare verde, deoarece aceasta este culoarea
curentă.

5.2. LUCRUL CU COMENZI AUTOCAD


Invocarea comenzilor AutoCAD din AutoLISP poate fi considerat un mod de automatizare a
funcţiilor uzuale folosite. Prin combinarea accesului la comenzi din AutoLISP cu variabile,
aşa cum s-a prezentat în capitolul anterior, se obţine un mare grad de flexibilitate.

5.2.1. Invocarea comenzilor AutoCAD

În capitolul anterior, la prezentarea unei rutine AutoLISP, s-a folosit funcţia COMMAND.
Această funcţie se foloseşte în AutoLISP pentru execuţia comenzilor AutoCAD. Funcţia
COMMAND consideră toţi operanzii următori ca şi cum aceştia ar fi tastaţi interactiv în linia
de comandă. De exemplu, pentru desenarea unei linii, se urmăresc paşii prezentaţi în tabelul
următor. A două coloană a tabelului, arată modul de realizare a aceleiaşi acţiuni, într-o rutină
AutoLISP.

AutoCAD AutoLISP
Se tastează LINE în linia de “line” (sau “_line”)1
comandă
Se specifică un punct de start pentru Se poate folosi o variabilă sau
linie coordonatele curente
Se specifică punctul final Se poate folosi o variabilă sau
coordonatele curente
Se apasă tasta Enter pentru Se poate folosi un set de ghilimele, care
terminarea comenzii LINE reprezintă apăsarea tastei Enter, în
interiorul unei comenzi sau pentru
terminarea acesteia

De exemplu, dacă se folosesc variabilele startpt sau endpt, corespunzătoare definirii


punctelor de start şi final ale liniei2, invocarea comenzii LINE dintr-o expresie AutoLISP se
face prin:

(command “_line” startpt endpt “”)

5.2.2. Crearea funcţiilor


1
se consideră că suntem sub funcţia Command în AutoLISP
2
definite anterior în program

45
PROIECTARE ASISTATĂ DE COMPUTER
Funcţiile încep întotdeauna cu operatorul DEFUN. Se pot defini trei tipuri principale de
funcţii:
ƒ Tipul folosit până acum precedă numele comenzii definit prin DEFUN cu C:, lucru
interpretat de AutoCAD ca o comandă şi permite folosirea funcţiei1 din linia de comandă
a AutoCAD.
ƒ Se pot crea de asemenea, definiţii de funcţii fără precedarea numelui cu C:. acest tip este
util atunci când este apelat de alte operaţii AutoLISP. Dacă se doreşte executarea de la
linia de comandă a AutoCAD, este nevoie de includerea numelui funcţiei între paranteze.
În mod asemănător, se pot executa funcţii precedate de C: ca expresii AutoLISP, prin
includerea funcţiilor între paranteze, de exemplu (c:circle3).
ƒ Al treilea tip este S::STARTUP. Prin definirea unei funcţii2 cu numele S::STARTUP,
fiecare funcţie AutoLISP din rutină se va executa automat după ce desenul a fost complet
iniţializat. Rolul funcţiei S::STARTUP este de a ne asigura că rutinele AutoLISP care
folosesc funcţia COMMAND rulează numai după ce AutoCAD iniţializează
componentele care execută comenzile.
Când se creează o funcţie S::STARTUP, trebuie stabilit locul în care trebuie salvată. În
capitolul anterior se explică pe scurt diferenţa dintre acad.lsp şi acaddoc.lsp. Necesitatea
existenţei celor două fişiere apare datorită faptului că AutoCAD include interfaţa multiplă
MDI, care permite deschiderea mai multor desene în acelaşi timp. Funcţia S::STARTUP este
utilă pentru sporirea productivităţii. În acest mod se pot realiza automat operaţii generale de
setare, care erau făcute de obicei la începutul fiecărei sesiuni de desenare, sau pentru fiecare
desen deschis.
AutoCAD încarcă automat patru fişiere AutoLISP. Două dintre ele, acad2008.lsp şi
acad2008doc.lsp, sunt specifice AutoCAD 2008. Este recomandată reţinerea utilizării
acestor fişiere pentru Autodesk. Fişierul Acad2008.lsp este încărcat numai o singură dată, la
prima încărcare a AutoCAD, în timp ce Acad2008doc.lsp este încărcat în sesiunea iniţială şi
apoi la fiecare deschidere a unui desen.
Celelalte două fişiere AutoLISP încărcate automat sunt rezervate utilizatorului. Aceste fişiere
sunt acad.lsp, care este încărcat o singură dată la deschiderea sesiunii AutoCAD şi
acaddoc.lsp care este încărcat la fiecare deschidere a unui desen. Aceasta înseamnă că se pot
plasa diverse rutine de iniţializare în fiecare fişier - una pentru iniţializarea AutoCAD –
acad.lsp şi alta pentru desenul iniţial, dar şi pentru desenele următoare.
Se poate pune o funcţie S::STARTUP în ambele fişiere acad.lsp şi acaddoc.lsp. Trebuie
ţinut cont de faptul că plasarea diferitor funcţii S::STARTUP în ambele fişiere, în fapt
dezactivează funcţia S::STARTUP definită în acad.lsp. Trebuie create ambele fişiere
acad.lsp şi acaddoc.lsp. Totuşi, când se creează orice rutină AutoLISP şi se salvează sub alt
nume, se pot adăuga şi alte rutine în acelaşi fişier. AutoCAD ştie să încarce automat aceste
fişiere când ele există.
Ordinea de încărcare a fişierelor este următoarea:
1. Acad200x.lsp: încărcat de AutoCAD 200x.
2. Acad.lsp: fişierul de iniţializare definit de utilizator, încărcat o dată la fiecare încărcare a
AutoCAD200x.
3. Acad200xdoc.lsp: fişierul de iniţializare la nivel de document, încărcat de
AutoCAD200x;
4. Acaddoc.lsp: fişierul de iniţializare la nivel de document, definit de utilizator.
Exemplu de rutină AutoLISP care foloseşte atât funcţiile DEFUN cât şi COMMAND:

1
apelare prin tastarea numelui ca orice comandă AutoCAD, şi nu prin tastarea numelui între paranteze
rotunde ca orice funcţie AutoLISP
2
de obicei în acaddoc.lsp, care este încărcat în fiecare desen

46
EXPLORAREA AUTOLISP
(defun c: linierosie (/ startpt endpt)
(terpri)
(setq satrtpt (getpoint “Selectează punctul de start al
liniei roşii:”))
(terpri)
(setq endpt (getpoint “Selecteaza punctul de sfârşit al
liniei roşii:”))
(command “_line” startpt endpt “”)
(command “_chprop” “_last” “” “_color” “red” “”)
)
ƒ Prima linie a rutinei defineşte o funcţie numită linierosie. Pentru că este precedată de C:,
se poate tasta redline în linia de comandă a AutoCAD. Expresia (/ startpt endpt)
semnifică faptul că funcţia are două variabile locale, disponibile numai acestei rutine.
Aceste variabile sunt folosite numai în următoarele două linii.
ƒ Noua instrucţiune terpri, din liniile 2-4 indică AutoCAD să tipărească o linie albă în linia
de comandă. Se poate folosi pentru a îmbunătăţi capacitatea de citire a mesajelor.
Altminteri, două sau mai multe mesaje vor apărea împreună pe o singură linie.
ƒ Citind linia a treia, din parantezele cele mai interioare, AutoCAD obţine punctul de start
al liniei roşii de la utilizator cu mesajul „Selecteaza punctul de start al liniei roşii: ” şi
setează variabila startpt la valoarea punctului de start. Similar linia a cincea obţine
punctul de sfârşit al liniei roşii şi setează variabila endpt la aceeaşi valoare.
ƒ Linia 6 foloseşte funcţia „COMMAND” a AutoLisp. Execută comanda LINE, specifică
punctele de început şi sfârşit şi foloseşte o pereche de ghilimele pentru a simula apăsarea
tastei Enter, semnificând terminarea comenzii Line
ƒ Linia 7, prin analogie, foloseşte aceeaşi sintaxă pentru comanda CHPROP. Emite
comanda CHPROP, selectează linia care tocmai a fost folosită prin folosirea opţiunii
„Last selection”, termină obiectul selecţiei prin folosirea ghilimelelor, specifică
opţiunea Color şi setează culoarea ca fiind roşie. O altă serie de ghilimele va încheia
comanda.
ƒ Linia 8 închide procedura linierosie cu paranteze închise.

¾ Pentru a folosi această procedură veţi urma paşii:


1. Deschideţi Visual LISP şi deschideţi un nou fişier.
2. Scrieţi procedura.
3. Salvaţi procedura ca linierosie.lsp şi plasaţi-o în folderul Support al AutoCAD sau orice
alt folder pe care l-aţi creat pentru procedurile AutoLisp şi l-aţi adăugat căii de căutare
Support pentru AutoCAD.
4. Încărcaţi procedura.
5. Întorceţi-vă în AutoCAD.
6. La prompterul de comandă scrieţi linierosie şi apăsaţi Enter.
7. Drept răspuns la mesajele pentru punctele de început şi final ale linierosie alegeţi oricare
2 puncte de pe ecran. AutoCAD va desena o linie roşie între cele două puncte selectate .

Cu cunoştinţele despre procedura circle discutată în capitolul anterior, veţi putea crea un cerc
roşu.
În continuare se află un alt exemplu al procedurii AutoLisp ce creează o funcţie
S::STARTUP. Foloseşte o serie de caracteristici ce au fost ilustrate în acest capitol.
(defun s::startup ( )
(command “_rectang” “_width” “0.1” “0,0” “10,10”)
(command “_text” “8,1” “0,2” “0” “name”)

47
PROIECTARE ASISTATĂ DE COMPUTER
O
(comma
and “_text
t” “8,0.7”
” “0,2” “0
0” “date”)
)
(comma
and “_text
t” “8,0.4”
” “0,2” “0
0” “revisi
ion”)
(comma
and “_zoom
m” “_exten
nts”)
)
Această proocedură creeează un simpplu bloc de tip t titlu şi trrasează un chenar
c de fieecare dată
când veţi deeschide un noou desen, duupă cum aratăă figura urmăătoare.
Pentru a foolosi aceastăă procedură1 adăugaţi-o la finalul acaddoc.lsp
a p. AutoCAD D2008 nu
conţine acesst fişier, astfe
fel încât prim olosiţi, trebuiie să-l creaţi..
ma oară când doriţi să îl fo

Precauţii: înainte de folosirea


fo funccţiei S::STAARTUP, asig guraţi-vă că funcţia nu eexistă deja
întru-un fişiier. Alte apliicaţii pe caree le-aţi cumppărat sau desscărcat de pee internet s-aar putea să
conţină un fişier
f S::STA ARTUP. Addăugând o a două d funcţie S::STARTU UP s-ar putea să apară
o interferennţă a operaţieei cu acele applicaţii. În Notepad,
N aleege opţiunea Search/Fin nd şi scrie
S::STARTU UP în casetaa Find. Faceeţi clic pe FindF Next2. Dacă o proccedură S::STARTUP
există deja, atunci adăăugaţi corpuul funcţiei S::STARTU UP creată de d dumneavooastră3 la
sfârşitul proocedurii S::S
STARTUP ce există dejaa şi salvaţi fişşierul.

5.2.3. Creareea de funcţiii ce utilizează argum


mente

Se pot creaa funcţii caree acceptă arggumente, numite


n uneorri parametrii. Un argumeent este o
valoare ce trebuie furnnizată împreeună cu funncţia. Funcţiia foloseşte apoi valoarrea acelui
argument înn operaţia prooprie.
La începutuul acestui caapitol s-a expplicat că varriabilele locaale sunt plasate în parannteze după
bară (slashh /). Argumeentele sunt introduse
i în acelaşi set de parantezee dar înaintee de bară.
Dacă nu exxistă variabille locale, nuu este nevoiee de bară. În n continuaree, un exempllu al unei
funcţii cu unn argument:
(defun sc
chimbarosu
u (selecte
ed_object)
)

)

1
sau una prooprie
2
click găseştte următorul
3
mai puţin prima
p linie, carre deja există

48
EXPLORAREA AUTOLISP
Pentru a folosi într-adevăr această procedură în AutoCAD sau prin altă procedură AutoLisp,
se foloseşte formatul (schimbarosu selected_object). Argumentul este trimis procedurii
schimbarosu prin adăugarea argumentului după numele funcţiei, totul închis în paranteze.
Oricând se foloseşte funcţia schimbarosu printr-o procedură, trebuie urmată de argumentul
său. Argumentul se poate obţine prin folosirea unei variabile a cărei valoare este stabilită în
procedură, prin obţinerea unei valori de intrare de la utilizator sau prin tastarea unei valori
specifice când se utilizează această funcţie.
Următorul exerciţiu foloseşte o funcţie ce este apelată prin intermediul procedurii.

¾ Pas cu pas folosirea funcţiilor şi comenzilor AutoLISP:


1. Începeţi un nou desen.
2. Creaţi cu ajutorul unui editor de text1 un fişier pe care îl salvaţi cu numele schirosu în
folderul Support al AutoCAD-ului sau orice alt folder pe care l-aţi creat pentru procedurile
AutoLISP şi l-aţi adăugat în calea de căutare Support al AutoCAD. Conţinutul acestui fişier
este următorul:
(defun schimbarosu (selected_object)
(command “_chprop” selected_object “” “_color” “red” “”)
)
(defun c:schimbaculoarea (selected)
(terpri)
(setg selected (entsel “Selectează un obiect pentru a-l
transforma în roşu:”))
(schimbarosu selected)
)
3. Alegeţi Tools/AutoLISP/Visual LISP Editor. În Visual LISP, deschide schirosu.
Procedura va apărea în fereastra Edit.
4. Alegeţi Load Active Edit Window.
5. Alegeţi Activate AutoCAD.
6. Desenaţi orice obiect.
7. În linia de comandă scrieţi schimbaculoarea şi apoi apăsaţi Enter.
8. La mesajul „Selectează un obiect pentru a-l transforma în roşu:” selectează obiectul
pe care l-aţi desenat la pasul 6. Veţi observa cum i se schimbă culoarea în roşu.
În continuare este redat modul de funcţionare al procedurii:
ƒ Procedura defineşte o funcţie, schimbarosu, care nu e precedată de c:. Are un argument,
selected_object.
ƒ Ceea ce va rula AutoLISP de fapt, când veţi scrie schimbaculoarea în pasul 7, este
funcţia c:schimbaculoarea în linia 4 a procedurii. În ultima declaraţie AutoLISP a
acelei funcţii (schimbarosu selected) variabila selected derivă din pasul anterior drept
rezultat al operaţiunii entsel - ENTity SELect.
ƒ Variabila selectată este argumentul transmis funcţiei schimbarosu. Funcţia
schimbarosu va şti acum asupra cărui obiect să opereze.
ƒ Funcţia schimbarosu foloseşte apoi comanda CHPROP pentru a schimba culoarea
obiectului în roşu.
Observaţie: Pentru a apela această funcţie în linia de comandă e necesar să scrieţi
(schimbarosu arg), unde arg este un argument2. Numele de entităţi sunt discutate mai târziu
în acest capitol.

1
sau cu ajutorul editorului Visual LISP
2
în acest caz trebuie să fie un nume de entitate

49
PROIECTARE ASISTATĂ DE COMPUTER
5.2.4. Utilizarea variabilelor sistem

AutoCAD are o largă varietate de variabile sistem pentru a controla mediul de desenare. Din
fericire, cei care au creat AutoLISP au oferit programatorului AutoLISP posibilitatea de a seta
şi a obţine automat variabilele sistem ale AutoCAD. A nu se confunda termenii variabilă şi
variabilă sistem. O variabilă este acea valoare memorată pentru a fi folosită într-o procedură.
O variabilă sistem este o setare a AutoCAD ce schimbă felul în care AutoCAD funcţionează.
Pentru a seta sau obţine variabilele sistem ale AutoCAD, se vor folosi 2 operatori, SETVAR
şi GETVAR, ce pot fi folosiţi pentru oricare din variabilele sistem ale AutoCAD.
Operatorii funcţionează astfel:
ƒ Numele SETVAR provine de la SET VARiable. SETVAR este utilizat pentru a schimba
o variabilă sistem. Se pune variabila sistem în ghilimele, urmată de noua valoare ca în
(setvar “cmdecho” 0).
ƒ GETVAR înseamnă GET VARiable. Pemite obţinerea valorii oricărei variabile sistem.
Odată obţinută valoarea, aceasta poate fi atribuită unei variabile. Acest lucru este adesea
realizat pentru întoarcerea la valoarea anterioară a variabilei sistem dacă aceasta a fost
schimbată în timpul unei proceduri. Se pune variabila sistem în ghilimele după folosirea
GETVAR, ca în (getvar “cmdecho” )
ƒ În timp ce puteţi folosi SETVAR şi GETVAR la orice variabilă sistem, în continuare
apar 2 variabile sistem ce adesea sunt schimbate într-o procedură AutoLISP.
ƒ În toate procedurile AutoLISP create până acum, răspunsurile comenzilor AutoCAD pot
fi văzute în fereastra liniei de comandă. Variabila sistem CMDECHO determină cum să
vezi mesaje şi intrări în timpul funcţionării funcţiei COMMAND în AutoLISP. În mod
standard, această variabilă are valoarea 1, fiind sunt afişate mesajele şi intrările. Dacă o
setaţi la 0 nu veţi vedea mesajele şi intrările, iar procedurile de funcţionare ale AutoLISP
par mai curate şi se derulează rapid.
ƒ Variabila sistem FILEDIA permite sau nu afişarea căsuţelor de dialog ce vă permit să
alegeţi fişiere. Anulând-o, această variabilă sistem vă permite să lucraţi cu fişiere prin
intermediul liniei de comandă a procedurilor AutoLISP.

¾ Pas cu pas folosirea lucrului cu variabile sistem AutoLISP:


1. Dacă aţi făcut exerciţiul anterior şi aţi creat fişierul schirosu în folder-ul Support al
AutoCAD-ului1, deschideţi-l din acel folder. În cazul în care nu aţi efectuat exerciţiul anterior,
creaţi fişierul schirosu, a cărui conţinut este prezentat mai sus, în folderul Support sau în
orice alt folder cu cale de căutare în fişierul suport al AutoCAD.
2. Deschideţi un nou document pentru desen. Alegeţi Tools/AutoLISP/Visual LISP Editor
pentru a deschide Visual LISP. Clic Open şi deschideţi schirosu. Editaţi-l după cum
urmează:
(defun schimbarosu (selected_object)
(command “_chprop” selected_object “” “_color” “red” “”)
)
(defun c:schimbaculoarea (/ selected old_cmdecho)
(setq old_cmdecho (getvar “cmdecho”))
(setvar “cmdecho” 0)
(terpri)
(setq selected (entsel “Selectează un obiect pentru a-l
schimba în roşu:”))

1
sau orice alt folder creat pentru procedurile AutoLISP şi adăugate fişierului suport cu cale de căutare
al AutoCAD

50
EXPLORAREA AUTOLISP
(schimbarosu selected)
(setvar “cmdecho” old_cmdecho)
)
3. Salvează fişierul ca ab2-1.lsp în aceeaşi locaţie.
4. Alege Load Active Edit Window pentru a încărca procedura.
5. Desenează orice obiect.
6. În linia de comandă scrie schimbaculoarea şi apoi apasă Enter.
7. La mesajul „Selectează un obiect pentru a-l schimba în roşu”, selectează obiectul pe
care l-aţi desenat la pasul 5. Nu veţi mai vedea mesajele derulându-se. Obiectul pe care l-ai
selectat se va schimba în roşu, iar AutoCAD va afişa imediat comanda.
În continuare este descris modul în care lucrează procedura. Ceea ce urmează aţi asimilat deja
prin citirea procedurii anterioare, care este foarte asemănătoare.
ƒ În primul rând adăugaţi o nouă variabilă, old_cmdecho, funcţiei schimbaculoarea.
ƒ În următoarea linie, setaţi această variabilă la valoarea curentă a variabilei sistem
CMDECHO. Veţi obţine această valoare curentă folosind GETVAR.
ƒ După aceea veţi folosi SETVAR pentru a seta variabila sistem CMDECHO la zero.
ƒ S-ar putea să fie necesar, din motive de desenare, să vedeţi comenzile afişate, deci cea
mai bună soluţie este setarea CMDECHO la valoarea avută înainte de rularea procedurii.
Astfel, în ultima linie veţi folosi SETVAR din nou pentru a reseta CMDECHO la
variabila old_echo, care a salvat valoarea originală a CMDECHO.
ƒ Ca rezultat al acestor schimbări, programul schimbaculoarea va seta întotdeauna
variabila sistem CMDECHO la valoarea pe care o avea înainte de derulare.

5.3. PROGRAMAREA CU AJUTORUL LISTELOR


Listele sunt structurile primare cu care aţi lucrat în timpul programării în AutoLISP. După ce
veţi lucra cu acest capitol veţi începe să înţelegeţi necesitatea listelor pentru modificarea
obiectelor în baza de date AutoCAD şi într-o varietate de alte contexte cu AutoLISP.
AutoCAD reprezintă toate datele obiect dintr-o listă ce conţine mai multe liste mai mici, dar
listele sunt uşor de folosit şi manipulat.

5.3.1. Utilizarea listelor pentru coordonate

O listă este întotdeauna închisă în paranteze cu spaţii între elementele listei. O utilizare
comună al listelor este aceea pentru coordonate, după cum apare în următorul exemplu:
( 1.0 3.5 2.0 )
Această listă reprezintă coordonatele X,Y, Z: 1.0, 3.5, 2.0. Uneori, e necesară extragerea
unuia sau mai multor elemente din listă.
Tabelul următor arată funcţiile unei extracţii de listă obişnuită folosind ca exemplu lista (1.0
3.5 2.0).
Funcţiile de bază pentru extragerea componentele unei liste
Funcţie Pronunţie Ieşirea Descriere
exemplului
CAR car 1.0 întoarcere primul element dintr-o listă
CDR could-er (3.5 2.0) înlătură primul element dintr-o listă

51
PROIECTARE ASISTATĂ DE COMPUTER
CADR cad-er 3.5 întoarce al doilea element din listă
CADDR ca-did-der 2.0 întoarce al treilea element într-o listă

Pentru mai multă flexibilitate, puteţi folosi funcţia NTH. Folosiţi funcţia NTH pentru a avea
acces la orice element într-o listă prin transmiterea a 2 argumente care să specifice numărul
elementului1 şi lista pe care o doriţi. Numele listei este de obicei o variabilă stabilită cu
SETQ:
(setq corner (list 1.0 3.5 2.0) )
În acest exemplu, (nth 0 corner) întoarce 1.0 deoarece 1.0 este primul articol în lista corner.
Funcţia LIST creează o listă. Dacă toate articolele dintr-o listă sunt valori constante2, puteţi
folosi funcţia QUOTE pentru a crea o listă. Poţi folosi apostrof3 ca metodă simplificată pentru
funcţia QUOTE.
Următorele două funcţii sunt echivalente:
(setq corner (list 1.0 3.5 2.0 ))
(setq corner ‘(1.0 3.5 2.0))
Mai multe dintre funcţiile de extracţie din liste sunt detaliate în AutoLISP Fuction Synopsis
Appendix din Visual LISP Developer’s Guide. Urmăriţi Basic Functions, apoi List
Manipulation Functions. Puteţi parcurge mai mult pe baza celor amintite aici.

5.3.2. Crearea de perechi cu punct

O pereche cu punct este un tip special de listă ce conţine doar 2 elemente. Unele funcţii ale
AutoLISP nu acceptă perechi cu punct ca argument, dar sunt folosite pentru a reprezenta
obiecte din baza de date AutoCAD. Pentru a construi o pereche cu punct, se foloseşte funcţia
CONS.
(cons 2.1 4.5)
Acest exemplu returnează valoarea (2.1 . 4.5). Acest tip de listă este cunoscut ca pereche cu
punct4 deoarece conţine exact 2 elemente, iar elementele sunt separate prin punct.

¾ Pas cu pas utilizarea listelor AutoLISP:


1. Începeţi un nou desen.
2. Alegeţi Tools/AutoLISP/Visual LISP Editor pentru a deschide Visual LISP.
3. În fereastra Console a Visual LISP, scrieţi (setq endpt ‘(3.5 2.0 1.4)) şi apoi tastaţi
Enter. AutoLISP afişează (3.5 2.0 1.4) .
4. Continuaţi în Console din Visual LISP. Scrieţi (car endpt) şi apoi tastaţi Enter.
AutoLISP afişează 3.5 .
5. Scrieţi (cadr endpt) şi apoi tastaţi Enter. AutoLISP afişează 2.0 .
6. Scrieţi (cdr endpt) şi apoi tastaţi Enter. AutoLISP afişează (2.0 1.4) .
7. Scrieţi (nth 1 endpt) şi apoi tastaţi Enter. AutoLISP afişează 2.0 .

1
articolele sunt numerotate începând cu 0
2
nu variabile
3
aceeaşi ca apostroful de pe tastatură
4
dotted pair

52
EXPLORAREA AUTOLISP
5.4. CONDIŢII DE SETARE
Adesea vreţi să executaţi o procedură bazată pe o anumită condiţie. O cale de a face acest
lucru este prin procedura IF, care face un lucru atunci când condiţia este adevărată, respectiv
alt lucru atunci când condiţia este falsă. Cu alte cuvinte operaţiunea este condiţionată de
adevărul unei anumite expresii.
Buclele reprezintă o parte importantă a programării. Frecvent doreşti să execuţi o procedură,
iar şi iar până când procedura termină de operat pe toate obiectele şi articolele ţintă.
O buclă stabileşte condiţia care determină când operaţia începe, numărul de obiecte asupra
cărora operează procedura şi când operaţia ia sfârşit.

5.4.1. Structuri condiţionale

Structurile condiţionale permit ca desfăşurarea unui program să fie determinată de o decizie


dată din exterior. Aceste decizii vor rezulta în returnarea ori a valorii de adevăr T (true),
însemnând adevărat, ori nil însemnând fals. Pentru a încerca următoarele declaraţii, scrieţi-le
în fereastra Console a Visual LISP.
De exemplu, pentru enunţul:
(< 3 5)
T
AutoLISP afişează T pentru adevărat, determinând că 3 este mai mic decât 5.
Pentru enunţul:
(> 3 5)
nil
AutoLISP afişează nil pentru fals, determinând că 3 nu este mai mare decât 5.
Pentru enunţul:
(= 3 5)
nil
AutoLISP afişează nil. Aici s-a determinat că 3 nu este egal cu 5.
Deoarece aceste enunţuri afişează fie T fie nil, puteţi folosi enunţul IF. Sintaxa generală a
enunţului IF este (if condiţie_test if_true if_false).
Să presupunem că vreţi să găsiţi cercuri a căror rază este mai mică decât 0,25. În continuare
este o mostră a unui enunţ IF. În acest exemplu, radius este o variabilă ce a fost dinainte
setată.
(if (< radius .25)
(princ “Raza este mai mică decât .25”)
(princ “Raza nu este mai mică decât .25”)
)
Condiţia_test este (< radius .25). Enunţul if_true (dacă_adevărat) este (princ „Raza este
mai mică decât .25”). Enunţul if_false (dacă_fals) este (princ „Raza nu este mai mică
decât .25”). Acest enunţ IF este echivalent cu a spune „Dacă raza este mai mică decât
.25, afişează Raza este mai mică decât .25, dacă nu, afişează Raza nu este mai
mică decât .25”.
Putem omite enunţul if_false. Atunci AutoLISP execută enunţul if_true dacă condiţia_test
este adevărată şi nu face nimic dacă este falsă şi continuă cu restul programului. În exerciţiul
următor, veţi vedea ambele variante ale enunţului IF, incluse unul în altul.

53
PROIECTARE ASISTATĂ DE COMPUTER

¾ Pas cu pas utilizarea declaraţiei IF:


1. Începeţi un nou desen.
2. Deschideţi Visual LISP, începeţi un nou fişier şi scrieţi următoarele:
(defun c:comparacu3 (/ entered_num)
(setq entered_num (getint “\nIntroduceţi un întreg: “))
(if (< entered_num 3)
(princ “\nNumărul introdus este mai mic decât 3.”)
(if (= entered_num 3)
(princ “\nNumărul introdus este egal cu 3.”)
(princ “\nNumărul introdus este mai mare decât 3.”)
)
)
(princ)
)
Funcţia GETINT primeşte un întreg de la utilizator şi este discutată mai târziu în acest capitol.
Grupul de caractere „\n” înaintea lui „Introduceţi un întreg” determină ca acest mesaj să fie
afişat pe un rând nou, de la capăt; este similar cu folosirea (terpi). Folosirea lui (princ) la
finalul unei proceduri este de asemenea discutat mai târziu în acest capitol.
3. Alegeţi Check Edit Window. Dacă vedeţi vreun mesaj de eroare în fereastra Build
Output, verificaţi cum aţi scris codul apoi faceţi corecturile necesare şi încărcaţi din nou.
4. Salvaţi fişierul ca ab2-2.lsp într-un folder ce se află pe calea de căutare Support sau în
AutoCAD\Support\.
5. Alegeţi Load Active Edit Window şi alegeţi Activate AutoCAD.
6. Pentru a încărca enunţul IF, scrieţi comparacu3 şi apoi tastaţi Enter. La mesajul
“Introduceţi un întreg:”, scrieţi 5 şi apoi tastaţi Enter. AutoCAD afişează “Numărul
introdus este mai mare decât 3.”.
7. Repetaţi comanda comparacu3. La mesajul “Introduceţi un întreg:”, scrieţi 3 şi apoi
tastaţi Enter. AutoCAD afişează “Numărul introdus este egal cu 3.
8. Repetaţi comanda comparacu3. La mesajul “Introduceţi un întreg:”, scrieţi 2 şi apoi
tastaţi Enter. AutoCAD afişează “Numărul introdus este mai mic decât 3.

5.4.2. Structura buclelor

Buclele oferă posibilitatea executării unui pas sau a unui număr de paşi de un număr de ori,
dat de testarea unei condiţii pe care aţi introdus-o în aplicaţie. O modalitate de a face acest
lucru este prin funcţia WHILE.
Formatul funcţiei WHILE este:
(while condiţia_test if_true
then_perform_the_following_code_until_the condition_is false)
adică
(atâta_timp_cât condiţia_de_test este_adevărată
atunci_execută_următorul_cod_până_când_condiţia_devine_falsă)
O metodă ce poate fi folositoare cu condiţia_test_if_true a lui while este aceea de a include
un counter1 pentru expresia while. Un numărător va număra de câte ori este executată o
operaţiune. Puteţi finaliza o operaţiune când numărătorul ajunge la un anumit număr. Pentru a

1
numărător

54
EXPLORAREA AUTOLISP
crea un numărător, setaţi o variabilă1 la numărul de la care vreţi să porniţi. Apoi scrieţi codul
pentru un pas din operaţie, ce urmează a fi repetat. Apoi setaţi numărătorul la următorul
număr mai mare, folosind o expresie ca aceea care urmează:
(setq counter (+ 1 counter) )
Procedura va reveni asupra pasului operaţiei, incrementând de fiecare dată numărătorul, până
când acesta ajunge la valoarea limită pe care aţi setat-o. În continuare este prezentat un
exemplu:
(defun c:process (/ counter)
(setq counter 1)
(while (< counter 6)
(princ “Se procesează numărul: “)
(princ counter)
(terpri)
(setq counter (+ 1 counter))
)
)
În acest exemplu procesul începe prin fixarea variabilei counter la 1. Apoi începeţi declaraţia
while şi specificaţi că numărătorul trebuie să fie mai mic decât 6. În timpul declaraţiei while,
afişaţi textul “Se procesează numărul” şi apoi valoarea variabilei counter. Folosiţi (terpri)
deci fiecare text va fi afişat pe un rând nou. Apoi fixaţi numărătorul la un număr mai mare. De
fiecare dată pe parcursul buclei while, valoarea numărătorului creşte cu 1. În lipsa declaraţiei
de incrementare2, linia 3 va fi întotdeauna evaluată ca fiind adevărată şi bucla while nu s-ar
termina niciodată deoarece numărătorul va avea mereu valoarea 13.
Dacă din întâmplare veţi programa o astfel de buclă infinită, puteţi opri executarea procedurii
AutoLISP prin apăsarea tastelor Esc, Ctrl+Break, sau din meniul Visual LISP,
Debug/Abort Evaluation.
În exemplul următor, bucla while continuă atâta timp cât numărătorul este mai mic decât 6. În
momentul în care numărătorul ajunge la 6, procedura se opreşte. Declaraţia while returnează
ultima valoare a procedurii, astfel AutoCAD afişează cifra 6 pe ultima linie. Textul următor
arată rezultatul.
Command: process
Se procesează numărul: 1
Se procesează numărul: 2
Se procesează numărul: 3
Se procesează numărul: 4
Se procesează numărul: 5
6
Atunci când folosiţi while, s-ar putea să doriţi să combinaţi câteva operaţii condiţionale în
interiorul condiţiei. Funcţia IF în mod normal evaluează o singură expresie then dacă expresia
test este adevărată. Să presupunem că doriţi o funcţie IF care să proceseze o serie de sarcini,
mai multe instrucţiuni, dacă testul condiţional este adevărat. O funcţie IF, după cum a fost
menţionat, procesează o expresie4 do_if_true şi una do_if_false. Astfel pentru a procesa mai
mult decât o expresie do_if_true, trebuie să separaţi procesul do_if_true de procesul

1
numită probabil counter
2
de creştere cu 1 a valorii numărătorului de fiecare dată când este parcursă bucla
3
buclă infinită
4
numai o expresie pentru fiecare valoare adevărat sau fals, deci numai o linie

55
PROIECTARE ASISTATĂ DE COMPUTER
do_if_false. Pentru a realiza acest lucru, folosiţi PROGN1 (PROGram Nest) pentru a
include toate instrucţiunile pe care le doriţi executate dacă testul este adevărat. În general,
PROGN evaluează toate declaraţiile din paranteze şi returnează ultima evaluare ca şi când ar
fi fost un singur enunţ, după cum demonstrează exemplul următor.
În exemplul următor, veţi vedea aceleaşi declaraţii IF folosite într-un exemplu anterior.
Oricum, după a două declaraţie IF, vreţi ca procedura să afişeze două linii dacă numărul
introdus este egal cu 3. Puteţi face acest lucru incluzând cele 2 linii ale codului (plus un terpri)
într-un enunţ PROGN:
(defun c:compare2three (/ entered_num)
(setq entered_num (getint “\nIntroduceţi un întreg: “))
(if (< entered_num 3)
(princ “\nNumărul introdus este mai mic decît 3.”)
(if (= entered_num 3)
(progn
(princ “\nNumărul introdus este egal cu 3.”)
(terpri)
(princ “\nAcesta este numărul pe care îl căutăm.”)
)
(princ “\nNumărul introdus este mai mare decât 3.”)
)
)
(princ)
)
¾ Pas cu pas utilizarea WHILE, IF şi a numărătorului:
1. Deschideţi AutoCAD cu orice desen nou.
2. Deschideţi Visual LISP.
3. Clic pe New File din bara de instrumente standard a Visual LISP şi creaţi un fişier nou.
4. Salvaţi fişierul într-un folder de pe calea declarată pentru Support. Introduceţi în fişier
următorul cod:
(defun c:print0to10 (/counter halfway)
(setq counter 0 ; valoarea iniţială a numărătorului
halfway 5 ; valoarea iniţială a „jumătăţii
; drumului”
)
(terpri)
(while (< counter 11); atâta timp cât numărătorul este mai
; mic decât 11
(if (= counter halfway)
(progn ; se execută această secţiune dacă variabila
; halfway este 5
(princ “Jumătatea drumului este:”)
(princ halfway)
(terpri)
)
(progn ; altfel se afişează valoarea curentă a
; numărătorului
(princ “Valoarea numărătorului este:”)
(princ counter)
(terpri)
)

1
această instrucţiune declară un bloc de instrucţiuni, care sunt tratate ca o singură instrucţiune

56
EXPLORAREA AUTOLISP
)
(setq counter (+ counter 1) ; se incrementează valoarea
; numărătorului
)
5. Încarcă programul şi întoarce-te în AutoCAD
6. Scrie ”print0to10” urmat de Enter. Tastează F2 pentru a deschide AutoCAD Text
Window şi vezi rezultatul, arătat şi în figură.
Command: print0to10
Valoarea numărătorului este: 0
Valoarea numărătorului este: 1
Valoarea numărătorului este: 2
Valoarea numărătorului este: 3
Valoarea numărătorului este: 4
Jumătatea drumului este: 5
Valoarea numărătorului este: 6
Valoarea numărătorului este: 7
Valoarea numărătorului este: 8
Valoarea numărătorului este: 9
Valoarea numărătorului este: 10
11

5.5. UTILIZAREA OBIECTELOR DIN DESEN


Adevărata putere a AutoLISP constă în manipularea obiectelor din desen. Această secţiune
ilustrează cât de mare este numărul rutinelor AutoLISP.

5.5.1. Obţinerea de informaţii referitoare la un obiect

Orice obiect din baza de date a AutoCAD are asociat un nume de entitate. Acest nume dă
posibilitatea referirii la acel obiect oriunde în aplicaţia AutoLISP. Pentru a vedea un exemplu
de nume de entitate, scrieţi următoarele după ce aţi început un nou desen:
(command “_line” “3,3” “5,5” “”)1
(entlast)
AutoLISP va răspunde cu un nume de entitate de forma <Entity name: 2ed0520>.
Numerele vor diferi, probabil, pe sistemul vostru, dar utilizarea informaţiei furnizată de
ENTLAST vă oferă posibilitatea, prin intermediul programării, să obţineţi sau să setaţi o
varietate de opţiuni ale unui obiect dat prin referirea la numele de entitate propriu acestuia.
Funcţia ENTGET (ENTity GET) este cheia pentru modificarea bazei de date care este
desenul. Funcţia ENTGET consideră un nume de entitate ca singur argument. După desenarea
liniei ca în paşii precedenţi, se tastează următoarele:
(setq myline (entget (entlast)))
AutoLISP răspunde cu:
((-1 .<Entity name:15ac558>)(0 .“LINE ”)(330 .<Entity
name:15ac4f8>)(5 .“2B ”)(100 .“AcDbEntity ”)(67 . 0)
(410 .“Model ”)(8 .“0 ”)(100 .“AcDbLine ”)(10 3.0 3.0 0.0)
(11 5.0 5.0 0.0)(210 0.0 0.0 1.0))
1
puteţi desena de asemenea ceva direct în AutoCAD, ne interesează ultima entitate desenată

57
PROIECTARE ASISTATĂ DE COMPUTER
Aceasta este o reprezentare a modului cum linia1 este stocată în baza de date desen AutoCAD.
AutoLISP returnează o lista lungă care conţine 122 liste mai mici. Fiecare dintre listele mici se
referă asemenea unui grup indexat după primul element. Numele entitate este în grupa –1.
Fiecare din numerele iniţiale din listele mici reprezintă o proprietate diferită a liniei. Aceste
numere sunt numite coduri de grupe de obiecte.
Cele mai folosite coduri de grupuri de obiecte grup sunt listate în tabelul următor:
Coduri de grupuri de obiecte folosite în mod obişnuit de AutoCAD
Cod grup Descriere
-1 Nume entitate
0 Tip entitate
1 Valoare text
8 Strat
10 Punct de start (sau centru)
11 Punct sfârşit (sau punct aliniament)
38 Elevaţie
39 Grosime
40 Rază (sau înălţime text)
62 Culoare

Observaţie: Aşa cum se observă din codurile 10, 11 si 40, înţelesul codurilor de grup se
poate schimba în funcţie de tipul de obiect pentru care e folosit.
Se poate folosi de asemenea Visual LISP pentru a examina un obiect AutoCAD. Se începe
prin selectarea View/Browse Drawing Database/Browse Selection3. În acest punct,
Visual LISP va afişa un colimator de selecţie4 în desen astfel încât să poată fi selectat un
obiect. Odată încheiată selecţia unui obiect5, se face întoarcerea în Visual LISP unde se vede
Dialog Inspector Box. Se selectează numele entităţii şi, în timp ce cursorul este peste textul
selectat, se face clic dreapta6. Se alege Inspect pentru a vedea informaţii despre obiect. Figura
anterioară arată informaţii despre un arc.

1
entitatea linie
2
numărul de liste diferă funcţie de versiunea AutoCAD, de asemenea pot varia şi codurile DXF
descriptive
3
anumite meniuri diferă ca denumire sau locaţie de la o versiune la alta
4
pickbox, cursorul are forma unui pătrat mic
5
prin apăsarea tastei Enter
6
sau se face dublu click pe numele entităţii

58
EXPLORAREA
A AUTOLISP

Nu toate acceste coduri grup sunt prrezente în deescrierea liniiei care a fost desenată. De pildă,
grup 62 (ccolor) este absent
a în lissta returnatăă de AutoLISP. Nu de fiecare datăă când se
desenează o linie, trebuiie şi setată exxplicit culoaarea. Ca rezu ultat, se pune valoarea im mplicită. În
acelaşi fel, AutoLISP
A n setează exxplicit fiecaree atribut la fiecare
nu f grup. În acest caz, culoarea
este ByLayyer şi stratul curent este 0. 0 AutoLISP P a returnat (8.“0”)
( în listta precedentăă pentru a
semnifica căă linia este înn stratul 0.
Sunt multe alte coduri de d grup decâât cele listatee în Tabel, şiş ele pot fi găsite
g în Vissual LISP
Help. Din Visual
V LISP P, se alege Help/Visual
H L
LISP Help Topics.
T Din Contents, ddaţi dublu
clic pe DX XF Referencce1. Dublu clic pe secţiiunea ENTITIES. Apoi se pot alegge oricare
Common GroupG Code es pentru En ntities sau see alege o entitate specificcă. În multe ccazuri, un
cod de grupp poate avea diferite înţellesuri depinzzând de entitaatea în care apare.
a De exxemplu, în
lista reprezeentând linia care a fost desenată,
d 1 este repreezentat de (10 3.0 3.0
coddul de grup 10
0.0), care înnseamnă punnctul de starrt al liniei la X=3.0, Y=3 3.0, Z=0.0. Dacă grupull 0 era un
cerc, coordoonatele grupuului 10 ar fi specificat ceentrul cerculu ui.
Pentru a maanipula un attribut dat penntru un obiecct, exista dou uă funcţii: ASSSOC şi SU UBST:
ƒ ASSO OC oferă o lista în care see găsesc intrrările asociatte cu un articcol din lista. Are două
argumeente, elemenntul din listăă şi lista înssăşi. De exem mplu, dacă se specifică codul de
grup ca prim argument, see returneazăă valoarea codului3. Dacă
2
D o lista numită
obiecttele_mele coonţine trei grrupuri, de exemplu:
((0 .“gro
oup 0”) (1 1.0 2.
.0) (3 4.
.2 1.56.75
5)),
atunci (assoc 1 ob biectele_meele)
va returna:
r (1 1.0 2.0)4.
ƒ SUBS ST substituie o valoare pentru
p d lista. Funncţia SUBST are trei
fiecarre apariţie din
argumeente. Pentru a face substiituţia, primull argument sp pecifică cu ce
c trebuie subbstituit, al
doilea argument sppecifică pentrru ce se facee substituţia şi ş al treilea argument
a speecifică din
ce listaa se face operraţia.
Pentru a manipula punctul
p de sttart al liniei, mai întâi aleege punctul de
d start:
(setq sta
artpt (ass
soc 10 myl
line))

1
deoarece coodurile grup suunt de asemennea folosite peentru fişiere DXF,
D ele se găăsesc în DXF R
Reference
2
cum ar fi 100
3
care ar fi puunctul de startt al liniei
4
deci practicc returnează lista grupului aparţinător
a

59
PROIECTARE ASISTATĂ DE COMPUTER
AutoLISP răspunde: (10 3.0 3.0 0.0)
Pentru a modifica punctul de start al liniei, se foloseşte:
(setq new_startpt ‘(10 6.5 1.0 0.0))
(setq myline (subst new_startpt startpt myline))
AutoLISP răspunde:
((-1 .<Entity name:15ac558>)(0 .“LINE ”)(330 .<Entity
name:15ac4f8>)(5 .“2B ”)(100 .“AcDbEntity ”)(67 .0)
(410 .“Model ”)(8 .“0 ”)(100 .“AcDbLine ”)(10 6.5 1.0 0.0)
(11 5.0 5.0 0.0)(210 0.0 0.0 1.0))
În acest caz, new_startpt îl substituie pe startpt existent în obiectul myline. Nici o
modificare la linie nu este vizibilă pe ecran. Pentru a face modificări, este nevoie de
funcţia ENTMOD.

5.5.2. Modificarea obiectelor

Cheia pentru modificarea obiectelor este funcţia ENTMOD (ENTity MODify). Lista dată de
AutoLISP poate fi modificată şi apoi trecută la ENTMOD ca argument pentru actualizarea
bazei de date AutoCAD. Continuând cu exemplul, dacă se introduce:
(entmod myline)
AutoLISP răspunde:
((-1 .<Entity name:15ac558>)(0 .“LINE ”)(330 .<Entity
name:15ac4f8>)(5 .”2B ”)(100 .“AcDbEntity ”)(67 .0)
(410 .“Model ”)(8 .“0 ”)(100.”AcDbLine ”)(10 6.5 1.0 0.0)
(11 5.0 5.0 0.0)(210 0.0 0.0 1.0))
Baza de date AutoCAD se modifică şi ea, şi punctul de start al liniei este acum la:
X=6.5, Y=1.0, Z=0.0.

5.5.3. Crearea mulţimilor de selecţie

O mulţime de selecţie este creată cu funcţia SSGET (Selection Set GET). Aceasta afişează
obişnuitul prompter Select objects:. Tabelul următor prezintă cele mai folosite funcţii de
selecţie.
Funcţiile pentru mulţimi de selecţie, cele mai folosite în AutoCAD
Funcţie Descriere
SSGET Obţine o mulţime de selecţie de la utilizator
SSLENGTH Întoarce numărul obiectelor din mulţimea de selecţie. Are un
argument, mulţimea de selecţie
SSNAME Întoarce numele entităţii unui obiect dat din mulţimea de
selecţie1. Are două argumente: mulţimea de selecţie şi numărul
obiectului din setul de selecţie.

Se pot folosi maximum 256 mulţimi de selecţie la un moment dat. Pentru a elibera o mulţime
de selecţie astfel încât AutoLISP să o poată folosi din nou, se setează mulţimea de selecţie la

1
numele asociat unei variabile poate fi folosit ulterior în program

60
EXPLORAREA AUTOLISP
nil – de exemplu, (setq ss nil). De exemplu, se pot introduce următoarele într-un desen nou:
(command “circle ” “3,3 ” “2 ”)
nil
(command “circle ” “4,4 ” “3 ”)
nil
(command “line ” “7,2 ” “6,6 ” “3,4 ” “5,5 ” “”)
nil
(setq mysset (ssget))
Select objects:all
5 found
Select objects:
<Selection set 1>
Acum mysset este o mulţime de selecţie stabilită de all, care include cele trei segmente şi
cele două cercuri. Pentru a vedea ce este în mulţimea de selecţie, se tastează următoarele în
linia de comandă a consolei Visual LISP:
(sslength mysset)
5
Se află că avem cinci obiecte în mulţime de selecţie. Primul obiect este numărul 0, iar al
cincilea obiect este numărul 41. Pentru a vedea care este primul obiect, se introduc
următoarele:
(ssname mysset 0)
<Entity name:3fe0550>
Pentru a obţine datele obiectului din baza de date, se introduc:
(entget (ssname mysset 0))
Visual LISP răspunde:
((-1 .<Entity name:1601580>)(0 .“LINE ”)(330 .<Entity
name:16014f8>)(5 .“30 ”)(100 .“AcDbEntity ”)(67 .0)(410 .
“Model ”)(8 .“0 ”)(100 .“AcDbLine ”)(10 3.0 4.0 0.0)
(11 5.0 5.0 0.0)(210 0.0 0.0 1.0))
Folosind fiecare nume de entitate returnată de SSNAME, de la 0 la 4, se poate manipula
fiecare din obiectele din mulţimea de selecţie.

¾ Pas cu pas crearea mulţimilor de selecţie:


1. Se începe un desen nou şi se tastează următoarele într-un nou fişier în fereastra de editare
Visual LISP. Se editează şi salvează următorul fişier:
(defun c:listsset (/ mysset counter)
(setq mysset (ssget))
(setq counter 0)
(while (< counter (sslength mysset))
(terpri)
(princ (cdr (assoc 0 (entget (ssname mysset counter)))))
(setq counter (+ counter 1))
)
(princ)
)

1
0 – 4, deci 5 obiecte

61
PROIECTARE ASISTATĂ DE COMPUTER
2. Se încarcă fişierul.
3. Se activează AutoCAD şi se desenează oricâte obiecte pe ecran - cel puţin două tipuri
diferite de obiecte.
4. Se tastează listsset. AutoCAD invită la selectarea obiectelor1.
5. Se selectează toate obiectele din desen. Rutina tipăreşte tipul fiecărui obiect selectat2.
Rezultatul este prezentat în continuare. Desigur, rezultatul vostru va fi diferit, deoarece
probabil aţi desenat tipuri de obiecte diferite.
Command: lisstset
Select objects: all
5 found
Select objects:
LWPOLYLINE
CIRCLE
TEXT
LINE
LINE
Modul cum lucrează rutina este următorul:
ƒ Linia 1 creează o funcţie şi declară două variabile, mysset si counter.
ƒ Linia 2 pune variabila mysset egală cu mulţimea de selecţie pe care o oferă utilizatorul
folosind SSGET
ƒ Linia 3 setează variabila counter la zero.
ƒ Linia 4 începe o bucla WHILE. La început, lucrând cu parantezele cele mai interioare, se
obţine numărul obiectelor din mulţimea de selecţie mysset, folosind SSLENGTH. Apoi
se specifică că bucla WHILE va continua atât timp cât numărătorul counter este mai mic
decât numărul de obiecte din mulţimea de selecţie mysset. Cu alte cuvinte, când rutina a
trecut prin toate obiectele din mulţimea de selecţie, se opreşte.
ƒ Linia 5 foloseşte TERPRI pentru a începe o noua linie înaintea tipăririi listei de obiecte.
ƒ Linia 6 tipăreşte lista. La început, lucrând cu parantezele cele mai interioare, rutina obţine
numele obiectelor în setul de selecţie mysset, al cărui număr este egal cu variabila
counter. Apoi rutina găseşte numele obiectului folosind ASSOC cu codul de grup 0.
Rezultatul este o lista cu punct al cărui al doilea articol este numele obiectului. Funcţia
CDR elimina primul element din lista, lăsând doar numele obiectului, care este ceea ce se
doreşte. Rutina tipăreşte apoi rezultatul.
ƒ Linia 7 incrementează counter pentru a repeta bucla WHILE pentru obiectul următor.
ƒ Linia 8 închide bucla WHILE.
ƒ Linia 9 părăseşte rutina în linişte3.
ƒ Linia 10 închide întreaga funcţie.

5.6. INTRODUCEREA DATELOR DE CĂTRE UTILIZATOR


Execuţia unei rutine AutoLISP poate depinde deseori de datele introduse de către utilizator.
Pentru a satisface aceasta cerinţă, AutoCAD are o familie de funcţii precedate de cuvântul

1
din cauza funcţiei ssget
2
se apasă F2 pentru a deschide fereastra text AutoCAD pentru a vedea întregul rezultat
3
vom discuta despre ce înseamnă “părăsire în linişte” mai târziu în acest capitol

62
EXPLORAREA AUTOLISP
GET1. S-a văzut GETVAR pentru obţinerea informaţiilor despre variabilele sistem. Tabelul
următor arată câteva dintre funcţiile GET folositoare.
Funcţii de introducere de date de către utilizator
Funcţie Descriere
GETDIST Întoarce distanţa dintre două puncte
GETINT Întoarce un întreg
GETREAL Întoarce un număr real (care poate fi un non-întreg, negativ,
etc.
GETSTRING Întoarce un şir text

În interiorul funcţiei COMMAND, se poate folosi funcţia PAUSE, pentru a opri execuţia
rutinei şi activa introducerea de date de către utilizator, cum ar fi alegerea unui punct sau
tastarea unei valori. De exemplu, expresia (command “circle” pause “3” ) determina o pauză
pentru a lasă utilizatorul să specifice un centru şi apoi sa creeze un cerc cu raza de 3.
Observaţi noua funcţie ENTSEL din următorul exerciţiu. Acesta este o alternativă pentru
SSGET. Se foloseşte când se doreşte ca utilizatorul să selecteze un singur obiect. ENTSEL
întoarce o listă cu punct care conţine un nume de entitate şi coordonatele punctului ales. De
altfel, se poate folosi CAR înaintea lui ENTSEL pentru a obţine numele pentru ENTGET.
Exista de asemenea un nou argument pentru getstring, T. Dacă se foloseşte acest argument şi
nu este nil, utilizatorii pot plasa spaţii la introducerea şirurilor. Folosind acest argument se
permite utilizatorilor să tasteze un text care include mai mult de un cuvânt.
¾ Pas cu pas introducerea de date de la utilizator:
1. Se începe un nou desen.
2. Se porneşte Visual LISP , se deschide un nou fişier şi se introduce următoarea rutină.
(defun c:schimbatext (/ src_object new_ht new_str)
(setq src_object (entget (car (entsel))))
(setq new_ht (getreal “\nCare este noua inaltime?“))
(setq new_str (getstring T “\nCare este noua valoare a
textului?“))
(setq src_object
(subst (cons 40 new_ht)(assoc 40 src_object ) src_object))
(setq src_object
(subst (cons 1 new_str)(assoc 1 src_object) src_object))
(entmod src_object)
(princ)
)
Se salvează ca schtxt.lsp
Se alege Format Edit Windows din bara de instrumente Table şi astfel se formatează
automat codul introdus.
3. Se încarcă schtxt.lsp în AutoCAD.
Se creează un text folosind una dintre comenzile DTEXT sau TEXT şi se execută
schimbatext. AutoCAD schimbă înălţimea obiectelor text şi conţinutul textului la valorile
introduse ca răspuns la interogarea determinată prin afişarea mesajului (prompt).
Nu trebuie salvat desenul.
Aici se vede cum lucrează rutina:

1
toate funcţiile precedate de get solicită date de la utilizator la prompter-ul AutoCAD sau prin
specificare cu mouse-ul

63
PROIECTARE ASISTATĂ DE COMPUTER
ƒ Linia 1 defineşte funcţia şi declară cele trei variabile.
ƒ Linia 2 foloseşte ENTSEL pentru a lăsa utilizatorul să selecteze un obiect. Cum s-a mai
explicat, CAR permite regăsirea chiar a numelui de entitate. ENTGET întoarce numele
entităţii astfel încât să poată fi modificată. În final, aceasta linie setează numele entităţii
rezultante egală cu variabila src_object.
ƒ Linia 3 invita utilizatorul să aleagă o noua înălţime pentru text şi setează numărul
introdus egal cu variabila new_ht.
ƒ Linia 4 invita utilizatorul să aleagă o nouă valoare pentru text (un nou şir) şi setează
textul introdus egal cu variabila new_str.
ƒ Linia 5 începe procesul substituirii noilor variabile în vechile variabile. Aici rutina începe
setarea noii variabile pentru src_object.
ƒ Linia 6 foloseşte SUBST pentru a substitui vechea înălţime a textului cu noua înălţime a
textului pentru obiectul src_object; codul grup 40 reprezintă înălţime text
ƒ Linia 7 închide funcţia SETQ.
ƒ Linia 8 este la fel ca linia 5. Se repetă procesul liniilor 5 până la 7 pentru valoarea nouă a
textului (sir).
ƒ Linia 9 foloseşte SUBST pentru a substitui valoarea veche a textului pentru valoarea
nouă a textului; codul grup 1 reprezintă valoarea textului
ƒ Linia 10 închide funcţia SETQ.
ƒ Linia 11 foloseşte ENTMOD cu src_object pentru a face modificări în baza de date.
ƒ Linia 12 iese liniştit.
ƒ Linia 13 închide întreaga funcţie.

5.7. ULTIMELE PRECIZĂRI


Exista un număr de retuşuri care trebuie făcute unei rutine înainte de a fi completă.
Trebuie observată prezenţa funcţiei PRINC la sfârşitul unor rutine. PRINC asigură că nu vor
fi returnate alte valori pe linia de comandă. Folosirea funcţiei PRINC în acest fel este numit
ieşire curată sau liniştită.
Majoritatea aplicaţiilor AutoLISP nu includ prea multe în sensul manevrării erorilor. O nouă
funcţie numita EQUAL este folosită în linia 4 a rutinei finale din următorul exerciţiu. EQUAL
este diferită în raport cu egalitatea = în sensul în care EQUAL întoarce adevărat numai dacă
două expresii sunt egale1. O regulă simplă este să se folosească EQUAL pentru comparări de
liste şi = pentru comparări numerice.
În rutina din exerciţiul următor, dacă se selectează un obiect care nu este un obiect text,
programul sare la linia 18 şi tipăreşte mesajul eroare:

You must select a text object.


Un tip similar de tratare a erorilor este să se includă selecţia obiectelor într-o funcţie IF.
Prezenţa condiţiei de test a funcţiei IF este necesară pentru ca aceasta să funcţioneze. Altfel,
dacă utilizatorul nu selectează un obiect, testul este evaluat ca fals. Se poate plasa un mesaj de
eroare ca parte falsă a lui IF pentru a semnala acest tip de eroare. Acest tip de tratare a erorilor
este critic pentru a face programele AutoLISP să funcţioneze corect.
O altă ajustare necesară este adăugarea comentariilor. Se începe cu un comentariu care arată
scopul şi funcţiile rutinei. Aceasta îi ajută pe alţii să înţeleagă ce face rutina şi ne poate ajuta şi
pe noi atunci când se foloseşte rutina după câteva luni!. Comentariile încep cu ; punct şi
1
fiecare din cele două obiecte testate pentru egalitate sunt evaluate înaintea verificării egalităţii

64
EXPLORAREA
A AUTOLISP
virgulă.
Apoi se conntinuă să se facă comenttarii în cod. Un comentaariu prost pooate face cel mai uşor
cod de neeînţeles. Majjoritatea proogramatoriloor profesion nişti comentează pe larrg scopul
funcţiilor şii comportareaa acestora pllasând comenntarii în interriorul coduluui.
Visual LISP suportă cââteva stiluri de comentarre. Când se face clic pe fereastra Foormat Edit
din Tools, Visual
V LISPP foloseşte acceste stiluri pentru
p formaatate automattă a codului. Lucrează
astfel:
ƒ ;;; - Trriplu punct şi ş virgulă: Când
C se plaseează un commentariu cu trriplu punct şşi virgulă,
Visuall LISP plaseează comentaariul la margginea din stân nga. Un astfeel de comentaariu e bun
pentru începutul ruutinei, pentru descrierea scopului
s geneeral si a ceeaa ce face rutinna.
ƒ ;; - Du ublu punct şi virgulă: Visual LIS SP începe un u comentariiu cu punct şi virgulă
dublă lal nivelul cuurent. Se folooseşte acest tip
t de comen ntariu pentruu a explica urrmătoarea
linie dee cod.
ƒ ; - Pun nct şi virgulă simplu: Visual
V LISPP începe, im mplicit, un coomentariu cuu punct şi
virgulăă simplu prin p 40 sppaţii. Se poatep alegee opţiunea Tools/Envvironment

Option ns/Visual LISP Forma at Options pentru


p a deeschide căsuţţa de dialogg Format
Option n prezentată în figură, şii se schimbăă această valo oare dacă see doreşte. See foloseşte
acest tip
t de comeentariu pentrru a plasa comentarii laa dreapta coodului. Deoaarece sunt
aliniatee (intended) ele stau în affară corpuluii codului.
ƒ ;| |; - Comentariu
C în interiorul liniilor: plasează un commentariu în interiorul
i oriicărei linii
de codd, astfel înccât va existta comentarriu înainte şi ş după codd. ;| Acestaa este un

65
PROIECTARE ASISTATĂ DE COMPUTER
comentariu|; În acest fel se poate întinde un comentariu pe mai multe linii fără a mai
folosi ;.

5.8. FOLOSIREA AUTOLISP PENTRU CONTROLUL


PROPRIETĂŢILOR

Această rutină modifică stratul unui obiect pentru a-l potrivi cu stratul unui alt obiect. Această
rutină a stat la îndemâna multor utilizatori AutoCAD înainte să fie introdusă în AutoCAD R14
comanda MATCHPROP. Metoda generală folosită aici pentru controlul straturilor poate fi
folosită pentru modificarea oricăror proprietăţi din AutoCAD.
;;;Potrivirea straturilor unui obiect sursa selectat cu orice numar
de obiecte destinatie1
(defun c:matchlayer (/ src_object mysset counter cur_ent_ent_layer)
(princ "\n**Alegeti obiectul sursa a carui strat vreti sa-l
potriviti**"
) ;invita utilizatorul
(if (setq src_object (car (entsel))) ;selecteaza obiectul
(progn
(setq src_layer (assoc 8 (entget src_object)))
;primeste stratul obiect
;;invita utilizatorul
(princ "\n***Selecteaza obiectele destinatie***")
;;selecteaza câteva obiecte folosind ssget
(if (setq mysset (ssget)) ;verifica daca utilizatorul a
selectat ceva
(progn ;daca a selectat ceva face urmatoarele
(setq counter 0)
(while (< counter (sslength mysset))
(setq cur_ent (entget (ssname mysset counter)))
(setq ent_layer (assoc 8 cur_ent))
(entmod (subst src_layer ent_layer cur_ent))
(setq counter (+ counter 1))
)
)
(princ "\nNu ati selectat nici un obiect ")
;avertizeaza utilizatorul
) ;sfârsitul verificarii
) ;sfarsitul progn pentru selectia obiectului
;;avertizeaza utilizatorul ca nu a selectat nici un obiect
(princ "\nDin pacate nu ati selectat nici un obiect ")
) ;sfârsitul lui if
(princ)
) ;sfârsitul functiei
c:matchlayer
Această rutină obţine mai întâi numele obiectului selectat cu funcţia (car (entsel)). Determină
stratul prin utilizarea ENTGET asupra numelui obiectului şi utilizând ASSOC cu codul de
grup 8. Apoi obţine o mulţime de selecţie cu obiectele destinaţie. Creează o buclă care

1
comentariile sunt marcate „italic” pentru a fi observate mai usor

66
EXPLORAREA AUTOLISP
parcurge aceste obiecte, obţine straturile lor1, şi utilizează ENTMOD şi SUBST pentru a
schimba stratul curent al obiectului cu stratul destinaţie.
Fiecare selectare a obiectelor2 sunt incluse într-o funcţie IF care, dacă are condiţia
neîndeplinită, afişează un mesaj de eroare prin care se transmite utilizatorului că nu a selectat
nici un obiect(e).

¾ Pas cu pas ultimele retuşuri:


1. Încărcaţi aplicaţia executată în exerciţiul anterior. Dacă nu aţi efectuat exerciţiul
precedent, introduceţi codul acelui exerciţiu în fereastra de editare Visual LISP şi salvaţi-l cu
numele schtxt.lsp. Apoi încărcaţi-l împreună cu orice desen deschis în AutoCAD doriţi.
2. Acum rulaţi schimbatext şi alegeţi un obiect care nu este un text3 ca răspuns la promptul
„Select object”. Răspundeţi promptului pentru a introduce o nouă valoare a înălţimii şi un
nou text. Dacă aţi efectuat acestea asupra unui cerc, veţi observa că raza sa s-a schimbat
pentru a se potrivi noii valori indicate pentru a fi noua înălţime a textului. Sigur aceasta nu
este ceea ce v-aţi dorit în momentul în care aţi scris programul.
3. Modificaţi programul după cum este arătat mai jos şi salvaţi-l ca schtxt1.lsp:
;;;modifică înălţimea textului şi conţinutul acestuia
(defun c:schimbatext (/ src_object new_ht new_str)
(terpri)
(setq src_object (entget (car (entsel))))
(if (equal (assoc 0 src_object) ‘(0 . “TEXT”))
(progn
(princ “Care este noua înălţime pentru text?“)
(setq new_ht (getreal))
(princ “Care este noul text? “)
(setq new_str (getstring))
(setq src_object
(subst (cons 40 new_ht) (assoc 40 src_object) src_object)
)
(setq src_object
(subst (cons 1 new_str) (assoc 1 src_object)src_object)
)
(entmod src_object)
)
(princ “Trebuie să selectaţi un obiect-text.”)
)
(princ)
)
4. Încărcaţi schtxt1.lsp. Porniţi schimbatext şi încercaţi rutina din nou cu un cerc sau cu un
alt obiect, diferit de un obiect text.

1
prin variabila ent_layer
2
obiectul sursă şi obiectele destinaţie
3
ca de exemplu un cerc

67
6. ELEMENTE DE PROGRAMARE AVANSATĂ

Acest capitol prezintă câteva elemente avansate de programare AutoLISP, incluzând noţiuni
despre variabile locale şi globale, ActiveX, depanarea codului.

6.1. DESCRIEREA VARIABILELOR LOCALE ŞI GLOBALE


În această secţiune se va descrie cum sunt accesate variabilele globale şi generale într-o
funcţie ca şi unele elemente de sintaxă. Se va ilustra ce se întâmplă atunci când variabilele
globale nu sunt documentate corect.
Într-un capitol anterior s-a explicat că o variabilă este un nume simbolic asupra căruia se poate
opera într-un program dat. O parte importantă a utilizării variabilelor este aceea că li se pot
atribui valori. Există două tipuri de variabile: globale şi locale.
O variabilă globală este expusă sau disponibilă tuturor funcţiilor AutoLISP pe care le-aţi
încărcat în desenul vostru. O variabilă globală îşi păstrează valoarea după ce programul care a
definit-o se termină. Folosiţi o variabilă globală când vreţi ca valoarea ei sa fie disponibilă pe
parcursul unui întreg proiect faţă de o funcţie dintr-un proiect, pentru a obţine o valoare fixă
care poate fi utilizată şi asignată de diferite funcţii sau pentru depanare. Orice variabilă pe
care nu o definiţi specific ca şi variabilă locală este o variabilă globală.
Unei variabile locale i se atribuie temporar o valoare în timpul execuţiei unei funcţii. O dată
cu încheierea execuţiei funcţiei, valoarea variabilei locale este ştearsă. AutoLISP poate
utiliza acum memoria care a fost utilizată de acea variabilă locală. Utilizaţi o variabilă locală
atunci când vreţi să fiţi sigur că variabila nu este suprascrisă de alte funcţii. Variabilele locale
sunt de asemenea mai uşor de depanat deoarece ele afectează doar codul din interiorul funcţiei
în care au fost definite. În general cele mai multe dintre variabile ar trebui să fie locale. Puteţi
crea o variabilă locală şi o declaraţi cu funcţia defun ca în exemplul următor:
(defun list-objects ( / counter sset)...
Atenţie:Variabilele globale pot fi înşelătoare. Ele pot cauza uşor erori. Valorile lor pot
persista şi pot fi greu de depanat pentru că valorile lor sunt greu de găsit. O sintaxă comună
pentru variabilele globale este de a încadra variabila între două steluţe: *aGlobal*. În acest
mod puteţi identifica cu uşurinţă variabilele globale în cod. Utilizaţi un număr minim de
variabile globale şi fiţi atenţi la cele pe care le utilizaţi. Nerespectarea acestor reguli simple ar
putea avea rezultate nedorite şi erori greu de depistat.

¾ Pas cu pas utilizarea variabilelor globale şi locale


1. Începeţi un nou desen.
2. Deschideţi Visual LISP Editor.
3. În fereastra Console, tipăriţi rândul următor şi apoi apăsaţi Ctrl+Enter. Utilizaţi
Ctrl+Enter în fereastra Console pentru a introduce în cod mai mult de o linie. Această linie
declară o variabilă locală:

68
ELEMENTE DE PROGRAMARE AVANSATĂ
(defun local-variable (/ var1)
4. Scrieţi a două linie a codului în fereastra consolei după cum urmează:
(setq var1 “Sunt variabilă locală”))
Aceasta setează variabila locală la şirul pe care l-aţi introdus. Consola întoarce numele
funcţiei.
LOCAL-VARIABLE
5. Înainte de a testa această funcţie, puteţi verifica valoarea curentă a variabilei locale: var1.
Scrieţi următoarele în Consola Visual LISP :
var1
Consola returnează: nil
După cum observaţi, valoarea este nil.
6. Testaţi funcţia variabilă locală pentru a verifica valoarea pe care aceasta o atribuie
variabilei var1. În consolă, scrieţi (local-variable). Consola returnează:
“Sunt variabilă locală”
Acum ştiţi că funcţia variabila locală atribuie valoarea lui “Sunt variabilă locală” variabilei
var1.
7. Pentru a crea o variabilă globală, scrieţi următoarele în consolă:
(setq var1 “Sunt variabilă globală”)
Consola returnează “Sunt variabilă globală” astfel încât ştiţi că valoarea var1 este acum
“Sunt variabilă globală” .
8. Testaţi din nou variabila locală scriind (local-variable) în consolă. Consola returnează:
“Sunt variabilă locală” pentru că execută funcţia local-variable.
9. Testaţi variabila var1 pentru a vedea care este valoarea ei acum. În consolă, scrieţi var1.
Consola întoarce “Sunt variabilă globală”. Variabila locală nu a fost păstrată când funcţia a
utilizat variabila deoarece variabila a fost locală pentru funcţie. Totuşi, valoarea variabilei
globale s-a păstrat.

6.2. UTILIZAREA FUNCŢIILOR VISUAL LISP ACTIVEX


ActiveX este o interfaţă care oferă obiecte utilizatorului, programatorului, sau unei aplicaţi.
AutoLISP susţine ActiveX oferindu-ne mai multe informaţii şi flexibilitate în utilizarea
desenelor. Puteţi de asemenea să utilizaţi ActiveX pentru a lucra cu obiecte în alte aplicaţii
din Windows care au suport ActiveX. ActiveX este o interfaţă de programare care este
susţinut de un limbaj de programare. De exemplu puteţi utiliza ActiveX cu Visual Basic for
Applications şi C++.
Dacă nu cunoaşteţi tehnologia ActiveX o explicare simplă ar putea fi aceasta: prin tehnologia
ActiveX se manipulează obiecte, care de fapt sunt programe compilate complete,
„încapsulate”. Prin această tehnologie se pot folosi resursele obiectului – proprietăţi, metode,
etc. Un exemplu de obiect ar putea fi de exemplu o sferă completă/complexă desenată în
AutoCAD. Proprietăţile acesteia ar putea fi: diametrul, culoarea, textura suprafeţei, rezoluţia
de desenare, etc. Metodele ar putea fi: scalare, mutare, rotire, recolorare, etc.
În ActiveX obiectele sunt structurate într-o ierarhie. Trebuie să înţelegeţi această structurare
înainte de a lucra cu ActiveX.

69
PROIECTARE ASISTATĂ DE COMPUTER
ActiveX ne dă posibilitatea să obţinem informaţii despre obiecte1 şi să le modificaţi2.
Următoarea secţiune se referă integral la cum puteţi crea aceste 2 funcţii în AutoLISP.

6.2.1. Remedierea şi modificarea în AutoLISP

În această secţiune se va prezenta un mic program scris în AutoLISP care simulează


proprietăţile şi metodele3 ActiveX. Acest lucru vă va ajuta să comparaţi cum lucrează
AutoLISP faţă de ActiveX.
Pentru a înţelege caracteristicile ActiveX al Visual LISP, trebuie să ştiţi cum oferă AutoCAD
proprietăţile unui obiect în AutoLISP. Următoarele exemple lucrează cu o linie lungă de 10
unităţi, creată utilizând următoarele funcţii AutoLISP :
;;; Această funcţie creează o linie utilizând funcţia de comandă
;;; AutoLISP şi returnează nil..
(defun make-aLine ()
(command “_line” “5,5” “15,5” “”)
După ce o încărcaţi puteţi folosi această funcţie (desenarea unei linii) scriind ceea ce urmează
în Visual LISP:
(make-aLine)
Aşa cum s-a explicat anterior, pentru a regăsi ultimul obiect creat, respectiv linia, folosiţi
ENTLAST aşa cum se arată în următorul fragment de cod. Următoarea expresie plasează
valoarea ultimei entităţi create, ca şi nume de entitate, variabilei LineEntity. Pentru a încerca
acest lucru scrieţi următorul cod în consolă.
(setq LineEntity (entlast))
Visual LISP răspunde cu numele entităţii. Odată ce primiţi numele entităţii puteţi folosi
ENTGET pentru a regăsi lista cu datele de descriere a obiectului aflată la adresa dată de
numele entităţii. Următorul fragment de cod plasează lista cu datele de descriere4 în variabila
LinePropertyList. Dacă scrieţi ceea ce urmează în linia de comandă şi apăsaţi Enter, Visual
LISP răspunde cu lista de proprietăţi.
(setq LinePropertyList (entget LineEntity))
Iată un exemplu ce ilustrează o listă de proprietăţi.
((-1 . <Entity name: 1456d60>)
(0 . “LINE”)
(330 . <Entity name: 1456cf8>)
(5 . “2C”)
(100 . “AcDbEntity”)
(67 . 0)
(410 . “Model”)
(8 . “0”)
(100 . “AcDbLine”)
(10 5.0 5.0 0.0)
(11 15.0 5.0 0.0)
(210 0.0 0.0 1.0))

1
se numeşte “get functions”
2
se numeşte “put functions”
3
dacă nu sunteţi familiarizaţi nici cu obiectele
4
lista de proprietăţi

70
ELEMENTE DE PROGRAMARE AVANSATĂ
După cum vedeţi ENTGET întoarce proprietăţile entităţii ca pe o colecţie de liste, fiecare
dintre ele având un număr distinct pe prima lor poziţie.
Aceste coduri de grup1 au fost descrise anterior. Trebuie să vă amintiţi că codul grupului 10
este asociat cu punctul de început al unei linii. Având lista proprietăţilor entităţii şi ştiind ce
valori să regăsiţi puteţi folosi funcţia AutoLISP ASSOC care întoarce elementul dorit dintr-o
listă. Pentru a regăsi punctul de start al unei linii veţi folosi următorul cod care îl veţi
introduce în consolă:
(setq StartofLineList (assoc 10 LinePropertyList))
Linia de comandă redă lista asociată cu grupul 10, inclusiv codul grupului coordonatele:
(10 5.0 5.0 0.0)
Pentru că singura valoare de care aveţi nevoie este punctul de start al obiectului linie, utilizaţi
funcţia CDR pentru a scoate primul element al listei, aşa cum se arată în codul următor:
(setq StartofLine (cdr (assoc 10 LinePropertyList)))
Acest cod redă numai coordonata punctului de start:
(5.0 5.0 0.0)
Acum, recapitulând cum se modifică o valoare a unei obiect în AutoCAD, puteţi vedea că
regăsirea unei informaţii dintr-o listă asociată este oarecum simplă.
Dar ce-ar fi să se modifice mai mult decât o proprietate la un moment dat? După cum vedeţi
din exemplul precedent, este posibil să repetaţi acelaşi fragment de cod de mai multe ori
pentru a modifica orice informaţie. Cunoscând acest lucru, aţi putea scrie o funcţie simplă de
interfaţă, punând la un loc toţi paşii pe care i-am explicat anterior, pentru a regăsi orice cod de
grup, nu doar codul de grup 10 al unui obiect.
Notă. O funcţie de interfaţă este o funcţie care ascunde utilizatorului o comportare complexă.
Utilizatorul trebuie să furnizeze numai o informaţie de bază, dar funcţia utilizează informaţia
în mai mulţi paşi pentru a obţine rezultatul dorit.
Un exemplu de o funcţie de interfaţă este următorul cod:
;;; returnează orice valoare a unui cod de grup dacă acesta este
prezent în entitate
;;; parametrii necesari sunt un nume de entitate şi un cod de grup
(defun Get-A-Group-Code (EntityName GroupCode)
(cdr (assoc GroupCode (entget EntityName)))
)
După ce creaţi această funcţie şi o rulaţi, o puteţi testa în consolă după cum urmează, folosind
variabila LineEntity definită anterior:
(Get-A-Group-Code LineEntity 10)
(5.0 5.0 0.0)
După cum vedeţi funcţia redă numai valoarea corespunzătoare codului de grup 10. Puteţi
rafina această mică interfaţă definind o funcţie separată pentru codul de grup 10, după cum
urmează. Singurul parametru necesar este un nume de entitate. Codul grupului este inclus în
apelul Get-A-Group-Code. Aţi fi putut face acest lucru şi pentru un cod de grup 11.
(defun Get-Group-10-Code (anEntityName)
(Get-A-Group-Code anEntityName 10)
)

1
cunoscute de obicei ca domenii DXF deoarece le puteţi găsi şi în fişiere DXF

71
PROIECTARE ASISTATĂ DE COMPUTER
După ce o încărcaţi, testaţi funcţia, după cum urmează:
(Get-Group-10-Code LineEntity)
Visual LISP întoarce punctul de start al liniei:
(5.0 5.0 0.0)
Aceste exemple rezumă modul cum puteţi crea o funcţie simplă pentru a obţine punctul de
start al unei linii folosind AutoLISP. Dar dacă trebuie să schimbaţi proprietatea unui obiect?
Puteţi face acest lucru utilizând funcţiile CONS, SUBST şi ENTMOD, care au fost descrise
într-un capitol anterior.
CONS construieşte o listă. Utilizaţi-o când vreţi să daţi valori noi corespunzătoare unui cod
de grup dintr-o listă de proprietăţi a unei entităţi, ca în exemplul următor pe care îl puteţi
introduce în fereastra Console:
(setq NewStartPoint (cons 10 ‘( 0 0 0 )))
Visual LISP returnează următoarele:
(10 0 0 0)
Utilizând variabilele New Start Point şi Line Property List puteţi acum să substituiţi lista
corespunzătoare codului de grup 10 nou creată. Faceţi acest lucru utilizând funcţia SUBST
explicată într-un capitol anterior. Următoarea secvenţă substituie lista veche corespunzătoare
codului de grup 10 cu lista nouă corespunzătoare codului de grup 10, reprezentată de variabila
New Start Point, în lista de proprietăţi AcadLinePropertyList.
(Setq LinePropertyList (subst NewStartPoint (assoc 10
LinePropertyList) AcadLinePropertyList)
)
Pentru a testa acest lucru, introduceţi secvenţa de cod precedentă în fereastra consolei. Pentru
a vedea noul punct de start, trebuie să vă deplasaţi spre dreapta. Lista cere acum o nouă
valoare pentru lista corespunzătoare codului de grup 101 arătat în a treia linie numărat de la
sfârşit spre începutul programului:
((-1 . <Entity name: 1456d60>)
(0 . “LINE”)
(330 . <Entity name: 1456cf8>)
(5 . “2C”)
(100 . “AcDbEntity”)
(67 . 0)
(410 . “Model”)
(8 . “0”)
(100 . “AcDbLine”)
(10 0 0 0)
(11 15.0 5.0 0.0)
(210 0.0 0.0 1.0))
Pentru a reflecta modificarea acestei linii în AutoCAD aşa cum s-a explicat într-un capitol
anterior, puteţi folosi funcţia ENTMOD după cum urmează, prin scrierea ei în linia de
comandă. Acest cod schimbă de fapt punctul de start al liniei2.
(entmod LinePropertyList)

1
punctul de start
2
puteţi să vă întoarceţi în AutoCAD pentru a o verifica

72
ELEMENTE DE PROGRAMARE AVANSATĂ
După cum puteţi vedea din acest exemplu obţinerea proprietăţilor obiectului şi modificarea lor
poate fi un proces plictisitor şi consumator de timp. Pentru exemplul următor, scrieţi o funcţie
de interfaţă care modifică orice cod de grup conţinut în orice obiect.
(defun put-group-code-value (Entityname Groupcode Value /
PropertyList)
(setq PropertyList (entget EntityName))
(setq PropertyList
(subst
(cons GroupCode Value)
(assoc GroupCode PropertyList)
PropertyList
)
)
(entmod PropertyList)
)
Această funcţie combină toţi paşii precedenţi într-o funcţie. Iată cum funcţionează:
ƒ Linia 1 defineşte funcţia cu 3 argumente, numele entităţii, un cod de grup şi o nouă
valoare pentru valoarea din lista corespunzătoare codului de grup. De asemenea ea
declară o variabilă locală, PropertyList, care este lista de proprietăţi a obiectului.
ƒ Linia 2 stabileşte lista de proprietăţi egală cu lista returnată de ENTGET pentru numele
entităţii.
ƒ Linia 3 iniţiază procesul de setare a aceleiaşi liste de proprietăţi la o nouă valoare.
ƒ Liniile 4-7 execută substituţia. Ele substituie valoarea curentă a listei corespunzătoare
codului de grup, regăsită cu funcţia ASSOC, cu noua listă creată prin (cons
GroupCode Value), în lista de proprietăţi numită PropertyList.
ƒ Linia 8 închide funcţia SUBST.
ƒ Linia 9 închide funcţia SETQ.
ƒ Linia 10 modifică baza de date a desenului utilizând ENTMOD.
ƒ Linia 11 închide funcţia DEFUN.
Utilizând funcţia precedentă aveţi acum o interfaţă mult mai simplă pentru a modifica orice
cod de grup. În continuare utilizaţi funcţia Put-Group-Code-Value pentru a modifica codul
de grup 10 al liniei obiectului. După ce introduceţi şi încărcaţi funcţia precedentă puteţi testa
funcţia introducând următoarele în Visual LISP:
(Put-Group-Code-Value LineEntity 10 ‘(5 5 0))
Această funcţie schimbă punctul de start al liniei în 5, 5, 0. Utilizând aceeaşi logică de la
scrierea funcţiilor de obţinere a datelor (get functions) puteţi defini acum o funcţie separată
de modificarea a listei cu codul de grup 10 (modifier function). Puteţi face acelaşi lucru
pentru orice cod de grup.
(defun Put-Group-10-Code (EntityName Value)
(Put-Group-Code-Value EntityName 10 Value)
După ce introduceţi şi încărcaţi această funcţie scrieţi următoarele în consolă pentru a schimba
punctul de start al liniei în 15, -5, 0.
(Put-Group-10-Code LineEntity ‘( 15 -5 0 ))
Activaţi AutoCAD pentru a verifica dacă linia a fost modificată.

73
PROIECTARE ASISTATĂ DE COMPUTER
6.3. UTILIZAREA ACTIVEX CU VISUAL LISP
Tocmai aţi văzut cum să regăsiţi şi să modificaţi informaţiile corespunzătoare unui obiect prin
scrierea unor mici funcţii de interfaţă, get şi put, utilizând AutoLISP. ActivX furnizează o cale
similară pentru a reface şi modifica obiecte, dar necesită anumite pregătiri. În următoarea
secţiune se va detalia utilizarea anumitor funcţii ActiveX pentru a crea, reface şi modifica un
obiect.

6.3.1. Regăsirea şi modificarea proprietăţilor obiectelor cu ActiveX

Visual LISP dă posibilitatea să regăsiţi şi să modificaţi orice obiect AutoCAD utilizând


interfaţa ActiveX a AutoCAD. Adică AutoCAD oferă toate obiectele sale aplicaţiilor în care
tehnica ActiveX este disponibilă. Acesta include Visual LISP ca obiecte ActiveX, toate
oferindu-şi proprietăţile, inclusiv funcţiile put (modificare) şi get (regăsire).
Utilizarea Visual Lisp pentru a comunica cu AutoCAD este foarte directă. Mai întâi trebuie să
încărcaţi toate funcţiile ActiveX din Visual LISP utilizând funcţia VL-LOAD-COM. Acesta
oferă toate funcţiile interfeţei ActiveX . Trebuie să încărcaţi funcţia VL-LOAD-COM doar o
dată atunci când deschideţi AutoCAD deoarece VL-LOAD-COM încarcă funcţiile ActiveX
pentru întreaga sesiune de desen1.
(vl-load-com)
Odată ce interfaţa ActiveX este încărcată puteţi interoga linia pe care aţi creat-o anterior, dar
mai întâi trebuie să convertiţi numele entităţii într-un obiect vla. Un obiect vla nu este diferit
de un nume al entităţii cu excepţia faptului că obiectul ActiveX oferă anumite proprietăţi pe
care corespondentul său din AutoLISP nu le oferă. Pentru a converti numele entităţii între un
obiect vla, utilizaţi funcţia VLAX-ENAME -> VLA-OBJECT, aşa cum este exemplificat în
continuare:
(setq vla-line (vlax-ename->vla-object (entlast)))
Visual LISP întoarce următoarele:
#<VLA-OBJECT IAcadLine 03612b14>
Aşa cum vedeţi din valoarea întoarsă a vlax-ename -> vla-object, valoarea variabilei vla-
line conţine un obiect VLA-OBJECT. Acum puteţi inspecta vizual variabila selectând-o şi
alegând View/Inspect. Deci vedeţi proprietatea liniei într-o fereastră de dialog, puteţi de
asemenea “arunca” proprietatea sa şi valorile în consolă utilizând funcţia VLAX-DUMP-
OBJECT a Visual LISP după cum urmează:
(vlax-dump-object vla-line)
Acest lucru determină Visual LISP să afişeze următoarele:
; IAcadLine: AutoCAD Line Interface
; Property values:
; Angle (RO) = 5.49779
; Application (RO) = #<VLA-OBJECT IAcadApplication 00e2f13c>
; Color = 256
; Delta (RO) = (10.0 -10.0 0.0)
; Document (RO) = #<VLA-OBJECT IAcadDocument 022b2f84>

1
utilizarea VL-LOAD-COM mai mult decât o dată nu cauzează nici un rău

74
ELEMENTE DE PROGRAMARE AVANSATĂ
; EndPoint = (15.0 -5.0 0.0)
; Handle (RO) = “2C”
; HasExtensionDictionary (RO) = 0
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 03613c34>
; Layer = “0”
; Length (RO) = 14.1421
; Linetype = “ByLayer”
; LinetypeScale = 1.0
; Lineweight = -1
; Normal = (0.0 0.0 1.0)
; ObjectID (RO) = 21327200
; ObjectName (RO) = “AcDbLine”
; OwnerID (RO) = 21327096
; PlotStyleName = “ByLayer”
; StartPoint = (5.0 5.0 0.0)
; Thickness = 0.0
; Visible = -1
T
Va trebui probabil să redimensionaţi fereastra pentru a vedea toate aceste proprietăţi.
Observaţi similitudinea dintre proprietăţile arătate aici, cum sunt End Point şi Start Point, şi
proprietăţile obiectului corespunzătoare codurilor de grup pe care le-aţi modificat utilizând
AutoLISP. După cum vedeţi unul dintre avantajele utilizării unui obiect care permite folosirea
ActiveX este acela că ActiveX oferă mai multă informaţie programatorului decât oferă în
mod normal AutoLISP. Unul dintre beneficiile utilizării ActiveX este interfaţa sa. Anterior
aţi interogat şi modificat punctul de start şi de final ale liniei unui obiect utilizând codurile de
grup 10 şi 11. Utilizarea ActiveX pentru a regăsi informaţiile despre punctul de start şi punctul
de sfârşit este foarte directă. ActiveX redă aceste puncte într-un tip de date numit variant pe
care trebuie să îl convertiţi la formatul familiar de coordonate.
Pentru a obţine punctul de start a unui obiect, folosiţi funcţia VLA-GET-START-POINT. În
exemplu curent linia a fost setată la vla-line, aşa încât veţi tasta următoarea expresie:
(setq Starting (vla-get-startpoint vla-line))
Visual LISP răspunde după cum urmează:
#<variant 8197 ...>
Pentru a converti punctul de start de la tipul de date variant la un format de coordonate
utilizabil va trebui să scrieţi următoarea linie:
(safearray-value (vlax-variant-value Starting))
Visual LISP răspunde cu o coordonată:
(5.0 5.0 0.0)
Pentru a modifica proprietatea Start Point a unei linii la (0,0,0), veţi folosi următoarea
expresie:
(vla-put-startpoint vla-line (vlax-3d-point ‘(0 0 0 )))
Vă puteţi întoarce în AutoCAD să verificaţii linia. Pentru a verifica noul punct de start puteţi
folosi de asemenea funcţia VLA-GET-START POINT:
(safearray-value (vlax-variant-value (vla-get-StartPoint vla-line)))
Visual LISP redă punctul de start al liniei:
(0.0 0.0 0.0)

75
PROIECTARE ASISTATĂ DE COMPUTER
După cum puteţi vedea acest lucru este similar cu micul program dezvoltat în AutoLISP
anterior în acest capitol.

¾ Pas cu pas regăsirea şi modificarea proprietăţilor obiectelor cu ActiveX:


1. Pentru a începe o nouă sesiune de lucru, închideţi AutoCAD dacă este deschis. Deschideţi
AutoCAD.
2. Începeţi o nouă sesiune de lucru.
3. Desenaţi o nouă linie care să nu aibă punctul de start şi punctul final de coordonate 0,0,0.
4. Alegeţi Tools/AutoLisp/Visual LISP Editor.
5. În fereastra consolă tastaţi (vl-load-com) apoi Enter pentru a încărca funcţiile ActiveX.
6. Pentru a converti numele entităţii într-un obiect vla tastaţi (setq vla-line (vlax-ename ->
vla-object (entlast))) apoi Enter.
7. Pentru a vedea proprietăţile liniei tastaţi (vlax-dump-object vla-line) apoi Enter.
8. Pentru a obţine punctul de început al liniei tastaţi (setq Starting (vla-get-startpoint vla-
line)) şi Enter.
9. Pentru conversia din tipul de date variant în formatul de coordonate al punctului de
început se tastează (safearray-value (vlax-variant-value Starting)) şi Enter.
10. Pentru a schimba punctul de început al liniei la 0,0,0 se tastează (vla-put-startpoint vla-
line (vlax-3d-point '(0,0,0))) şi Enter.
11. Alegeţi Activate AutoCAD din meniul View al AutoLISP pentru a verifica linia. Punctul
său de început este acum 0,0,0.

6.3.2. Crearea obiectelor folosind ActiveX

Acest capitol se referă la funcţii de creare a obiectelor. Când lucraţi cu ActiveX trebuie să
modificaţi obiectele în ordinea lor ierarhică.
Pentru acest capitol trebuie să ştiţi că înainte de a putea reface un obiect trebuie să refaceţi
următoarele:
ƒ Acad-object: Reprezintă aplicaţia AutoCAD.
ƒ ActiveDocument: Reprezintă desenul.
ƒ ModelSpace/PaperSpace: Reprezintă tipul spaţiului de lucru folosit.
În AutoLISP mai întâi modificaţi spaţiul1, apoi desenul, şi în final aplicaţia AutoCAD. Aici
aveţi o comandă simplă de desenare a unei linii, utilizată anterior în acest capitol şi convertiţi-
o folosind ActiveX.
;;; Această funcţie creează o linie utilizând Visual LISP
;;; ActiveX şi returnează obiectul linie ca obiect vla.
(defun ax-make-aLine ()
(vla-AddLine
(vla-get-ModelSpace ; reface spaţiul model
; al obiectului
(vla-get-ActiveDocument ; obţine documentul
; activ curent
(vlax-get-acad-object) ; obţine obiectul acad
)
)
(vlax-3d-point 5 5 0) ; punctul de start
(vlax-3d-point 15 5 0) ; punctul de sfârşit
))

1
model sau paper

76
ELEMENTE DE PROGRAMARE AVANSATĂ
Puteţi tasta exemplul de mai sus în Visual LISP Editor şi apoi încărca. Pentru a-l verifica se
introduce în consolă următoarea comandă:
(ax-make-aLine)
Visual LISP va răspunde cu următoarele:
#<VLA-OBJECT IAcadLine 03614934>
Aceasta ar putea să pară puţin mai greu - ca şi cum ar fi multă muncă pentru a crea o linie -
dar sincer nu este. Este de fapt destul de uşor.
Pentru a localiza alte funcţii ActiveX care creează obiecte trebuie să căutaţi în AutoCAD
ActiveX şi VBA Reference. Din Visual LISP, alegeţi comanda Help, Visual LISP Help
Topics. Din lista Contents, daţi un dublu clic pe ActiveX şi VBA reference, apoi selectaţi
Metods. Veţi vedea imediat o listă în ordine alfabetică cu toate ActiveX desfăşurate. Aici se
află toate metodele VBA care adaugă obiecte desenate.
Pentru a crea o funcţie Visual LISP, adăugaţi VLA înaintea metodei. De exemplu pentru a
adăuga un cerc veţi folosi comanda VLA-AddCircle. Veţi şti imediat dacă funcţia este
corectă, pentru că se va schimba din neagră în albastră pe măsură ce o introduceţi.

6.4. DEPANAREA CODULUI


Deoarece puţini oameni pot scrie un cod perfect de la prima încercare este nevoie întotdeauna
de depanarea codului. Depanare înseamnă un proces simplu de a încerca localizarea şi
corectarea erorilor. În acest capitol veţi avea câteva exemple simple, folosind câteva
instrumente de depanare oferite de Visual LISP.
În primul exemplu, definiţi o funcţie care sigur va genera erori. Tastaţi următoarele în editorul
Visual LISP-ului şi încărcaţi-l:
;;; funcţia următoare va genera o eroare
;;; deoarece strcat concatenează şiruri.
(defun Error-Prone-Code ()
(strcat "Aceasta nu va afişa niciodată numărul: "1)
)
Înainte de a continua trebuie să selectaţi opţiunea Debug/Break on Error. Prin selectarea
acesteia Visual LISP vă dă posibilitatea să săriţi automat la eroare în codul sursă.
Folosirea funcţiei Error-Prone-Code generează o eroare deoarece strcat concatenează şiruri
după cum demonstrează următoarea comandă introdusă la consolă:
(Error-Prone-Code)
Visual LISP va răspunde cu următorul mesaj:
; error: bad argument type: stringp 1
Odată ce aţi primit mesajul de eroare, alegeţi din bara de instrumente Debug opţiunea Last
Break. Visual LISP se va poziţiona în cod pe linia în care a apărut eroarea. Cum puteţi găsi
sursa problemei într-o rutină? Pentru a răspunde la această întrebare adesea trebuie să
efectuaţi o muncă de detectiv. Visual LISP oferă o varietate de metode de depanare pe care
trebuie sa le utilizaţi când întâlniţi "ceva" neplanificat sau o eroare.

¾ Pas cu pas găsirea ultimei opriri forţate:


1. Deschideţi un desen în AutoCAD.

77
PROIECTARE ASISTATĂ DE COMPUTER
O
2. Porniţi Visual
V LISP şi deschideţi un nou fişieer.
3. În Visuaal LISP Editoor tastaţi urm
mătoarele:
;;; Funcţ
ţia add-3-
-numbers nu
n va geneera
;;; o ero gumentele sale sunt
oare dacă toate arg t numere.
(defun ad ers (num1 num2 num3
dd-3-numbe 3)
(+ num1
1 num2 num
m3)
)
4. Alegeţi Load
L Active
e Edit Windo ow din bara de instrumennte Tools.
5. În fereasstra de comennzi scrieţi urrmătoarele şi apoi apăsaţii Enter:
(add-3-nu
umbers 1 2 3)
Visual LISP P returneazăă 6.
6. Oricum, dacă se înloocuieşte cu un
u caracter unul
u dintre arrgumente, appare o eroaree. Dacă se
tastează în fereastră
f urm
mătoarele:
(add-3-nu
umbers 1 “a”
“ 3)
Vizual LISP
P returneazăă următoarelee:
Error: ba
ad argumen
nt type: numberp
n : “a”
7. Se alegee Debug/Breeak on Errorr. Trebuie coonfirmat că Breack
B on Error
E este alees.
8. Se alegee Last Breakk din bara dee instrumentte Debug. Visual
V Lisp trimite
t la funncţia add-
3-numberss, cu (+ numm1 num2 num m3) ca fiindd cauza eroriii.

6.4.1. Folosirrea ferestreei Error tra


ace

Oricând appare o eroarre, se poatee folosi


ultima oprirre împreunăă cu fereastra Error
trace a Visual LISP. Peentru a afişa această
fereastra see alege Vieww/Error tracee pentru
a vedea lista
l de eroori aşa cum m este
prezentată în
î figură.
Pentru a ajuta la depanarea
d c
codului,
fereastra Errror trace affişează atât funcţiile
f
apelate înainnte de eroaree cât şi cele ded unde
a apărut aceeastă eroare.
Linia cu nuumărul 5 diin figură repprezintă
ceea ce a foost introdus în
î consolă. Linia
L cu
numărul 2 (+1 “a” 3) reprezintă
r linnia unde
a apărut erooarea, în timpp ce 1: Errorr break
semnalează terminarea funcţiei deooarece a
apărut o eroare. Visual LISP ajutăă atât la localizarea linieei în care a apărut eroaarea cât şi
poziţia undee a fost apelaată funcţia. Pentru
P a le găăsi, se apasă click dreapta pe a treia poziţie în
fereastra Errror trace. Din
D meniu see poate seleccta atât Sou urce Positio on cât şi Calll Source
Point. Sărinnd la poziţiaa din linia înn care a fostt apelată fun ncţia este foaarte la îndem
mână când
depanăm o aplicaţie vasstă.

6.4.2. Lucrull cu punctee de oprire Break Poin


nts

Câteodată când
c alegem Last Breakk pentru a evvidenţia o ero
oare, observvăm că o listăă mare de

78
ELEMENTE DE
D PROGRAMARE
E AVANSATĂ
linii apare, ceea ce nu este foarte de ajutor înn căutarea errorilor. În accest momentt ne ajută
punctele dee oprire, brea ak points. Punctele
P de oprire
o sunt lo
ocaţii în liniiile de cod, inndicate de
noi, care suunt folosite pentru
p a semmnala Visuall Lisp să se oprească şi să astepte ppână când
suntem pregătiţi să conntinuăm proccesarea liniilor. Visual Lisp executtă liniile de cod şi se
opreşte la fiecare
fi punct de oprire şi aşteaptă insttrucţiunile noastre. Punctele de oprirre ne ajută
să “împărţiim” codul în bucăţi mai mici m pentru a putea detectta mai uşor apariţia
a unei erori.
Pentru a plaasa un punctt de oprire, se poziţioneaază cursorul pe p parantezaa stângă sau dreaptă şi
se apasă F99. Visual Lispp marchează cu roşu aceel loc din cod dul dumneavoastră. Nu văă alarmaţi
– aceste maarcaje nu sunt salvate în fişier.
f
După creareea punctelor de oprire, trrebuie să se reîncarce
r coddul pentru caa Visual LIS SP să ia la
cunoştinţă despre acestte puncte. Apoi A trebuie încercat săă se executee funcţia dinn nou. Se
observă că bara
b de instrrumente Deb bug devine disponibilă.
d Visual LISP P execută linnia voastră
până când înntâlneşte prim mul punct dee oprire.
Acum se poate folosi bara
b de instruumente Debu ug pentru a ne
n ajuta să găsim
g eroareaa. Primele
trei butoanee oferă trei poosibilităţi differite pentru a ne putea deplasa în coddul nostru:

ƒ Step Into : acest butonn se foloseşte pentru a parcurge expresiile, câte una,
începânnd cu cea maai dinăuntru1 până la cea mai din afarră expresie.

ƒ Step Over
O : acest buton se foloseştee pentru a ig gnora expresiile îmbricatte, aceasta
înseam
mnă să se treaacă peste exppresiile afişatte luminos.

ƒ Step Out
O : acest buton ses foloseşte pentru
p a ne duce
d la sfârşşitul funcţiei.. Se poate
ignora întreaga funncţie care estee depanată.

Pentru a elimmina punctele de oprire, se alege Vie ew/Breakpoints pentru a deschide feereastra de
dialog relatiivă la puncteele de oprire, cum se vedee în figura urrmătoare:
Se foloseştee fereastra dee dialog penttru puncte dee oprire pentrru a le muta, afişa sau dezzafecta.
În aceasta fereastră
fe de dialog
d se pot face următoaarele acţiuni:
ƒ Să se şteargă
ş toate punctele de oprire alegânnd Delete All.
ƒ Să se şteargă fieecare punct de oprire,
selectâându-l şi apăssând Delete..
ƒ Se sarăă la un punctt de oprire selectându-l
şi apăssând Show. Visual Lissp plasează
p acel punct de oprire.
un curssor clipitor pe
ƒ Se edittează un punct de oprire selectându-
s
l şi apăăsând Edit. ÎnÎ acel mom ment Visual
Lisp peermite dezaffectarea aceluui punct de
oprire.

¾ Pas cu pas lucrul cu puncte de oprire


Break Poinnts:
1. Deschideeţi AutoCad şi începeţi un
u desen.
2. Porniţi editorul Vissual Lisp. Deschideţi
ab36-a.lspp din AutooCad 2008 8. Alegeţi

1
de la paranttezele deschisse pînă la cele închise

79
PROIECTARE ASISTATĂ DE COMPUTER
O
File/Save As şi salvaţţi-l ca ab36 6-1.lsp în directorul \Au utoCad 200 08\Support sau în alt
c l-aţi adăăugat în caleaa de căutare Support.
director pe care
3. Alegeţi Load
L Active
e Edit Windo ows din baraa de instrumeente Tools.
4. Citiţi codul până la capăt.
c Aceasstă rutină creeează o listă verticală
v de numere. Nouua funcţie
FOREACH H trece prin fiecare
f elemeent această liistă. Comentariile explicăă de ce aceasstă funcţie
conţine o erroare.
5. Dacă nu aţi făcut exeercitiul anterior, alegeţi Debug/Brea
D ak on Error1.
6. Intoduceeţi de la conssolă următoarrele:
(list-beu
utify-with
h-bug’(1 2 3 4 5 ))
)
Consola retturnează urm
mătoarele:
(1
;error:ba
ad argumen
nt type : File 1
7. Alegeţi Last
L Break din bara de instrumente
i D
Debug pentrru a ajunge la eroarea dinn cod.
8. Pentru a plasa un puunct de oprire în cod, puuneţi cursoru ul după (prinnc (chr 40))). Apăsaţi
F9. Visual Lisp marcheează punctul de oprire cu o căsuţă roşşie.
a punct de oprire după (princ (carr aList)). În sfârşit, puneeţi al treilea punct de
9. Puneţi alt
oprire dupăă parantezelee închise din linia care coonţine (princ c item1). Coodul ar trebuui să arate
ca în figură.
10. După ce codul produuce o eroare, trebuie să reesetaţi. Apăssaţi Reset diin bara de instrumente
Debug.
11. Clic pe fereastra
f de editare
e Visua al LISP 2.
al Lisp şi reîîncărcaţi funccţia în Visua
12. Scrieţi aceeaşi expresie care a proodus eroare înî consolă:
13. Visual Lisp evidennţiază expreesia (princ (chr 40)). Alegeţi Ste ep Into dinn bara de
instrumentee Debug. Vissual Lisp evvidenţiază exppresia (princ c (car aList))).
14. Alegeţi Step
S Into. Acum
A doar (ccar aList) estte evidenţiat.
15. Alegeţi Step
S Into pâână când se atinge
a o eroarre, (princ ite
em1).

1
nu faceţi nimic dacă Breaak on Error esste deja ales
2
alegeţi Load Active Window din bara de instrumentte Tools

80
ELEMENTE DE PROGRAMARE AVANSATĂ
16. Editaţi (princ item 1) astfel încât să se citească (princ item).
17. Apăsaţi Reset din nou.
18. Alegeţi Debug/Clear All BreackPoints. Apăsaţi Yes pentru confirmare.
19. Activaţi fereastra pentru editare şi reîncărcaţi funcţia.
20. În consolă scrieţi (beutify_with_bug ’(1 2 3 4 5))
21. Activaţi fereastra de editare şi salvaţi fişierul.
(list-beautify-with-bug ‘(1 2 3 4 5 ))

6.4.3. Folosirea fereastrei WATCH

Această fereastră ne ajută să examinăm valorile expresiilor şi variabilelor aşa cum sunt ele
evaluate. Pentru a examina o variabilă, selectaţi-o în cod şi alegeţi Debug/Add Watch sau
apăsaţi Ctrl+W. Visual Lisp deschide fereastra Watch unde se listează expresiile şi variabilele
împreună cu valorile acestora. În cazul în care selectaţi o expresie sau nu selectaţi nimic şi
apasaţi Ctrl+W, atunci căsuţa de dialog Add Watch se deschide. De exemplu, dacă adaugaţi
un martor (watch) pentru (princ (chr 40)), atunci fereastra watch afişează
(PRINC (CHR 40)) = ”(“
deoarece (princ (chr 40)) este o altă modalitate care sugerează AutoLISP să tipărească o
paranteză stângă. Îndată ce fereastra Watch s-a deschis puteţi adăuga expresii şi variabile
selectându-le şi alegând AddWatch din bara de instrumente Watch.
Dacă aveţi o rutină cu argumente, o puteţi executa cu diferite valori pentru aceste argumente şi
puteţi examina rezultatele utilizând martori pentru expresii şi variabile în fereastra Watch.
Mai mult, puteţi adăuga orice expresie în fereastra Watch pentru a altera contextul oricărei
variabile în timpul depanării funcţiei.

¾ Pas cu pas folosirea fereastrei Watch:


1. Deschideţi AutoCAD şi începeţi să un desen.
2. Lansaţi editorul Visual LISP. Deschideţi ab36_1.lsp.
3. Selectaţi expresia (princ (chr 40)). Alegeţi Debug/AddWatch. Apasaţi OK în casuţa de
dialog AddWatch. Visual LISP deschide fereastra Watch şi afişează atât expresia cât şi
valoarea acesteia.
4. Pentru a adăuga o variabilă în fereastra Watch, selectaţi articolul din dreapta fiecărei
funcţii şi alegeţi AddWatch din fereastra Watch.
5. Adăugaţi un punct de oprire după (princ item) plasând cursorul acolo şi apăsaţi F9.
6. Alegeţi Load Active Edit Window din bara de instrumente Tools.
7. Pentru a examina în fereastra Watch cum se evaluează funcţia list-beutify-with-bug,
tastaţi în consolă:
(list_beutify_with_bug ‘(1 2 3 4 5))
8. Expresia (princ item) ar trebui evidenţiată. Alegeţi Step Into din bara de instrumente
Debug. Variabila item din fereastra Watch ar trebui să afişeze valoarea sa curentă.
Continuaţi să apăsaţi Step Into privind cum valoarea variabilei item creşte în fereastra Watch
de fiecare dată când se parcurge un nou pas din ciclu.
9. Tastaţi aList. Aceasta este o variabilă argument folosită în funcţia list-beutify-with-bug.
Consola returnează:
(1 2 3 4 5)
10. Pentru a adăuga o expresie în fereastra Watch, selectaţi variabila aList şi apăsaţi Ctrl+W.

81
PROIECTARE ASISTATĂ DE COMPUTER
11. Pentru a modifica valoarea lui aList, întorceţi-vă în consolă şi introduceţi:
(setq alist (list 6 7 8 9 10)).
Consola returnează :
( 6 7 8 9 10)
12. Pentru a elimina un breakpoint, alegeţi fereastra View/Breackpoints pentru a deschide
casuţa de dialog Breakpoints. Apăsaţi Delete All pentru a şterge punctul de oprire. Visual
Lisp închide automat căsuţa de dialog.
13. Apăsaţi Reset în bara de instrumente Debug.
14. Închideţi Visual Lisp IDE fără a salva fişierul.
După cum aţi putut observa, Visual LISP nu este un simplu editor de text; este un mediu
complet, integrat, pentru AutoLISP.

82
7. FUNCŢII – AUTOLISP

În continuare sunt prezentate comenzile AutoLISP1 grupate în principalele categorii.


Astfel putem grupa funcţiile AutoLISP conform criteriilor următoare:
- Funcţii de Bază care grupează funcţiile pentru:
o manipularea aplicaţiilor
o aritmetice
o de egalitate şi condiţionale
o manipularea erorilor
o manipularea funcţiilor
o manipularea listelor
o manipularea şirurilor
o manipularea funcţiilor simbol
- Utilitare
o conversii
o accesarea perifericelor
o control ecran
o control fişiere
o geometric,
o comenzi şi interogări
o introducerea datelor
- Mulţimi de Selecţie, Obiecte, şi Tabela de Simboluri
o funcţii extinse pentru manipularea datelor
o manipularea obiectelor
o manipularea mulţimilor de selecţie
o manipularea tabelelor de simboluri
- Managementul Memoriei
- Estensii Visual LISP la AutoLISP
o manipularea colecţiilor
o masurarea curbelor
o conversia datelor
o manipularea dicţionarelor
o manipularea obiectelor
o manipularea proprietăţilor
- Reactor
- Spaţiul de Nume VLX
o funcţia de expunere
o accesul la spaţiul de nume de variabile

1
Actualizate la nivelul AutoLISP integrat în AutoCAD 2008

83
PROIECTARE ASISTATĂ DE COMPUTER
o manipularea erorilor
- Spaţiul de Nume pentru Comunicaţii:
o adresarea tabelului de nume
o încărcarea multi-documentelor
- Manipularea Regiştrilor Windows

7.1. FUNCŢII DE BAZĂ


7.1.1. Manipularea aplicaţiilor

Nume funcţie Descriere


(arx)
arx
returnează o lista cu aplicaţiile curente încărcate
(arxload application [onfailure])
arxload
încarcă o aplicaţie tip ObjectARX
(arxunload application [onfailure])
arxunload
elimină din memorie o aplicaţie tip încărcată
(autoarxload application [onfailure])
autoarxload creează comenzi utilizator pentru încărcarea obiectelor ObjectARX
asociate
(autoload filename cmdlist)
autoload
creează comenzi utilizator pentru încărcarea fişierelor AutoLISP asociate
(initdia [dialogflag])
initdia
forţează afişarea lângă cursor pentru următoarea comandă
(load filename [onfailure])
load
evaluează expresiile AutoLISP într-un fişier
(startapp appcmd file)
startapp
lansează o aplicaţie Windows
(vl-load-all filename)
vl-load-all
încarcă un fişier în toate documentele AutoCAD deschise
(vl-vbaload “filename”)
vl-vbaload
încarcă un proiect VBA
(vl-vbarun “macroname”)
vl-vbarun
rulează un macro VBA
(vlax-add-cmd “global-name” 'func-sym [“local-name” cmd-flags])
vlax-add-cmd
adaugă în AutoCAD comenzi create în command

arx
Descriere 
Returnează o lista cu aplicaţiile curente încărcate.
Apelare 
(arx)

84
FUNCŢII DE BAZĂ – MANIPULAREA APLICAŢIILOR
Valoare  returnată 
O listă cu numele fişierelor aplicaţiilor tip ObjectARX încărcate, calea nefiind inclusă în numele
fişierului.
Exemple 
Command: (arx)
("acapp.arx" "acdblclkeditpe.arx" "acdim.arx" "aceplotx.arx" "acetutil.arx"
"acgsconfig.arx" "achapi17.dbx" "achlnkui.arx" "aclaunchnfw.arx" "acmgd.dll"
"acmgdinternal.dll" "acprevinput.arx" "acsign.arx" "actp.arx" "oleaprot.arx"
"vl.arx" "whohas.arx")
Funcţii  similare 
Funcţiile arxload şi arxunload.

arxload
Descriere 
Încarcă o aplicaţie tip ObjectARX.
Apelare 
(arxload application [onfailure])
Argumente 
application  
Şirul de caractere cerut, sau variabila care conţine numele fişierului executabil. Puteţi omite
extensia .arx din numele fişierului. Trebuie să furnizaţi calea completă catre fişierul
executabil ObjectARX, sau cel puţin fişierul trebuie să se găsească într-una din caile de
căutare ale AutoCAD1.
onfailure
O expresie care va fi executată dacă încărcarea fişierului eşuează.
Valoare  returnată 
Dacă încărcarea se efectuează cu success, numele aplicaţiei. Dacă încărcarea eşuează, şi
argumentul onfailure este furnizat, funcţia arxload returnează valoarea acestui argument; altfel
rezultatul încărcarii eşuate este un mesaj de eroare.
Dacă încercaţi să încărcaţi o aplicaţie care este deja încărcată, arxload emite un mesaj de eroare.
Puteţi verifica aplicaţiile curente de tip încărcate, folosind funcţia arx înainte de utilizarea
funcţiei arxload.
Exemple 
Încărcaţi fişierul acbrowse.arx care se află în dosarul de instalare al AutoCAD:
Command: (arxload "c:/program files/ <AutoCAD installation directory> /acbrowse.arx")
"c:/program files/ <AutoCAD installation directory>/acbrowse.arx"
Funcţii  similare 
Funcţia arxunload.

1
AutoCAD support file search path

85
PROIECTARE ASISTATĂ DE COMPUTER

arxunload
 Descriere 
Descarcă1 o aplicaţie de tip ObjectARX
Apelare 
(arxunload application [onfailure])
Argumente 
application  
Şirul de caractere cerut, sau variabila care conţine numele fişierului, care a fost încărcat în
prealabil cu funcţia arxload. Puteţi omite extensia .arx din numele fişierului şi calea către
acesta.
onfailure  
O expresie care va fi executată dacă descărcarea fişierului eşuează.
Valoare  returnată
Dacă descărcarea se efectuează cu succes este returnat numele aplicaţiei. Dacă descărcarea
eşuează, şi argumentul onfailure este furnizat, funcţia arxload returnează valoarea acestui
argument; altfel rezultatul încărcarii eşuate este un mesaj de eroare.
Observaţie: Aplicaţiile tip ObjectARX blocate nu pot fi descărcate. Aplicaţiile ObjectARX sunt
încuiate implicit.
Exemple 
Descărcaţi aplicaţia acbrowse care a fost încărcată cu funcţia arxload.
Command: (arxunload "acbrowse")
"acbrowse"
Funcţii  similare 
Funcţiile arxload.

autoarxload
 Descriere 
Predefineşte un nume de comandă asociat fişierului ObjectARX.
Apelare 
(autoarxload filename cmdlist)
La prima introducere a comenzii specificate în cmdlist, AutoCAD încarcă aplicaţia ObjectARX
specificată în filename, după care continuă comanda.
Dacă asociaţi o comandă cu filename şi această comandă nu este definită în fişierul respectiv,
AutoCAD va avertizează prin trimiterea unui mesaj de eroare, la introducerea comenzii.
Argumente 
filename  
Un şir de caractere care specifică fişierul .arx care va fi încărcat când una din comenzile
definite de argumentul cmdlist este introdusă de la prompter-ul Command. Dacă omiteţi calea

1
descărcarcă sau elimină din memorie, unloads

86
FUNCŢII DE BAZĂ – MANIPULAREA APLICAŢIILOR
către filename, AutoCAD îl va căuta în căile pentru fişierele suport1.
cmdlist  
O listă de şiruri.
Valoare  returnată
nil
Exemple 
Următorul cod defineşte funcţiile C:APP1, C:APP2 şi C:APP3 care vor fi încărcate cu fişierul
bonusapp.arx
(autoarxload "BONUSAPP" '("APP1" "APP2" "APP3"))

autoload
 Descriere 
Predefineşte numele comenzilor care se încarcă în asociere cu fişierul AutoLISP.
 Apelare 
(autoload filename cmdlist)
La prima introducere a comenzii specificate în cmdlist, AutoCAD încarcă aplicaţia specificată în
filename, apoi continuă comanda.
Argumente 
filename  
Un şir de caractere care specifică fişierul .lsp care va fi încărcat când una din comenzile
definite de argumentul cmdlist este introdusă de la prompter-ul Command. Dacă omiteţi calea
către filename, AutoCAD îl va căuta în căile pentru fişierele suport2.
cmdlist  
O listă de şiruri.
Valoare  returnată
nil
Dacă asociaţi o comandă cu filename şi această comandă nu este definită în fişierul respectiv,
AutoCAD va avertizează prin trimiterea unui mesaj de eroare, la introducerea comenzii.
Exemple 
Următorul cod determină AutoCAD-ul să încarce fişierul prima dată când comenzile APP1,
APP2, sau APP3 sunt introduse la prompterul Command.
(autoload "BONUSAPP" '("APP1" "APP2" "APP3"))

initdia
 Descriere 
Forţează afişarea casetei de dialog pentru următoarea comandă.
  Apelare 

1
Support File Search Path
2
Support File Search Path

87
PROIECTARE ASISTATĂ DE COMPUTER
(initdia [dialogflag])
Curent, comenzile următoare sunt construite pe baza funcţiei initdia:

ATTDEF, ATTEXT, BHATCH, BLOCK, COLOR, IMAGE, IMAGEADJUST, INSERT,


LAYER, LINETYPE, MTEXT, PLOT, RENAME, STYLE, TOOLBAR şi VIEW.

Argumente 
dialogflag
Un întreg. Dacă acest argument nu este present sau este present şi diferit de zero, atunci
următoarea utilizare a comenzii va afişa caseta de dialog command atât timp linia de comandă
este activă.
Dacă este zero , orice apel anterior al acestei funcţii este şters, restaurându-se
comportamentul implicit al interfeţei “linie de comandă”.
Valoare  returnată
nil
Exemple 
Folosiţi comanda PLOT fără a apela initdia prima dată.
Command: (command "_.PLOT")
plot
Enter a layout name <Model>: nil
Enter a layout name <Model>:
AutoCAD, în fereastra command, solicită introducerea datelor de la utilizator.
Folosiţi secvenţa de apel pentru a afişa în AutoCAD caseta de dialog Plot.
(initdia)
(command "_.PLOT")

load
 Descriere 
Evaluează expresii AutoLISP într-un fişier.
  Apelare 
(load filename [onfailure])
Funcţia load poate folosită într-o altă funcţie AutoLISP, sau chiar şi recursiv1.
Argumente 
filename
Un şir de caractere care reprezintă numele fişierului. Dacă în argumentul filename nu este
specificată extensia fişierului, load adaugă extensia la numele fişierului când fişierul este
căutat pentru a fi încărcat. Funcţia va încerca câteva extensii, dacă este necesar, în următoarea
ordine:
• .vlx
• .fas
• .lsp

1
în fişierul tocmai încărcat

88
FUNCŢII DE BAZĂ – MANIPULAREA APLICAŢIILOR
Imediat ce funcţia load găseşte o asemănare1, este oprită căutarea şi este încărcat fişierul.
filename poate include ca prefix calea către fişier, ca în “c:/function/test1”. Slash-ul (/) sau
backslash-ul (\\) este limitator valid. Dacă nu includeţi calea către fişier ca prefix în şirul
nume, load caută în căile bibliotecilor AutoCAD fişierul specificat. Dacă fişierul este găsit
oriunde în această cale, load încarcă acest fişier.
onfailure
O valoare returnată dacă load eşuează.
Dacă argumentul este o funcţie AutoLISP validă, atunci ea este evaluată. În majoritatea
cazurilor, onfailure argumentul trebuie să fie un şir sau un atom. Aceasta permite aplicaţiei
AutoLISP să execute cod program alternativ la eşecul apelării funcţiei load.
Valoare  returnată
Nespecificat, dacă funcţia este executată cu succes. Dacă execuţia funcţiei load eşuează, este
returnată valoarea lui onfailure; dacă argumentul onfailure lipseşte, este returnat un mesaj de
eroare la eşec.
Exemple 
Pentru exemplele următoare, presupunem că fişierul /fred/test1.lsp conţine expresiile:
(defun MY-FUNC1 (x)
...corpul funcţiei...
)
(defun MY-FUNC2 (x)
... corpul funcţiei...
şi nu există nici un fişier numit test2 cu extensia.lsp, .fas, sau .vlx:
Command: (load "/fred/test1")
MY-FUNC2
Command: (load "\\fred\\test1")
MY-FUNC2
Command: (load "/fred/test1" "bad")
MY-FUNC2
Command: (load "test2" "bad")
"bad"
Command: (load "test2") generează o eroare AutoLISP.
Funcţii  similare 
Funcţiile defun şi vl-load-all.

startapp
 Descriere 
Lansează o aplicaţie Windows.
  Apelare 
(startapp appcmd[file])
Argumente 

1
potrivire

89
PROIECTARE ASISTATĂ DE COMPUTER
appcmd 
Un şir de caractere care specifică aplicaţia care va fi executată. Dacă în argumentul appcmd
nu este specificată calea către aplicaţie, startapp caută în calea implicită pentru această
aplicaţie.
file 
Un şir care specifică numele fişierului care va fi deschis
Valoare  returnată
Un întreg egal cu 0 dacă operaţia se efectuează cu success, dacă eşuează nill.
Exemple 
Următorul cod lansează în execuţie Windows Notepad şi deschide în acesta ca document
acad.lsp.
Command: (startapp "notepad" "acad.lsp")
33
Dacă un argument include spaţii, trebuie încadrat între ghilimele. De exemplu, pentru a edita my
stuff.txt cu Notepad, utilizaţi următoarea sintaxă:
Command: (startapp "notepad.exe" "\"my stuff.txt\"")
33

vl-load-all
Descriere 
Încarcă un fişier în toate documentele AutoCAD deschise şi în orice document deschis ulterior în
timpul sesiunii AutoCAD curente.
  Apelare 
(vl-load-all filename)
Argumente 
filename 
Un şir de caractere care specifică fişierul care va fi încărcat. Dacă fişierul este în căile
implicite de căutare AutoCAD, puteţi omite calea către acesta, dar trebuie să specificaţi
întotdeauna extensia fişierului, deoarece vl-load-all nu presupune un tip de fişier implicit.
Valoare  returnată
Nespecificată. Dacă filename nu este găsit, vl-load-all returnează un mesaj de eroare.
Exemple 
_$ (vl-load-all "c:/my documents/visual
lisp/examples/whichns.lsp")
nil
_$ (vl-load-all "yinyang.lsp")
nil

vl-vbaload
Descriere 

90
FUNCŢII DE BAZĂ – MANIPULAREA APLICAŢIILOR
Încarcă un proiect VBA.
  Apelare 
(vl-vbaload filename)
Argumente 
filename 
Un şir de caractere care specifică fişierul proiect VBA care va fi încărcat.
Valoare  returnată
Nespecificată dacă operaţie se execută cu success.
Exemple 
_$ (vl-vbaload "c:/program files/<AutoCAD installation
directory>/sample/vba/drawline.dvb")
"c:\\program files\\<AutoCAD installation directory>\\sample\\vba\\drawline.dvb"
Funcţii  similare 
Funcţia vl-vbarun.

vl-vbarun
Descriere 
Rulează un macro1 VBA.
  Apelare 
(vl-vbarun macroname)
Argumente 
macroname 
Un şir de caractere care specifică numele macro-ului VBA care va fi încărcat.
Valoare  returnată 
macroname
Exemple 
Încarcă un fişier proiect VBA:
_$ (vl-vbaload "c:/program
files/<AutoCAD installation directory>/sample/vba/drawline.dvb")
"c:\\program files\\<AutoCAD installation directory>\\sample\\vba\\drawline.dvb"
Rulează un macro din proiectul încărcat:
_$ (vl-vbarun "drawline")
"drawline"
Funcţii  similare 
Funcţia vl-vbaload

1
succesiune de comenzi/acţiuni utilizator, de fapt un program VBA; folosit pentru automatizarea unor
operaţii

91
PROIECTARE ASISTATĂ DE COMPUTER

vlax-add-cmd
Descriere 
Adaugă comenzi AutoCAD-ului construite în setul command.
  Apelare 
(vlax-add-cmd global-name func-sym [local-name cmd-flags])
Cu funcţia vlax-add-cmd puteţi defini o funcţie AutoLISP apelabilă ca o comandă AutoCAD,
fără folosirea prefix-ului c: în numele funcţiei. Puteţi defini, de asemenea, comenzi AutoLISP
transparente1, ceea ce nu este posibil cu funcţia c:.
vlax-add-cmd crează o funcţie AutoLISP vizibile ca o comandă ObjectARX-style la prompter-
ul Command în timpul sesiunii AutoCAD. Funcţia furnizează acces la ObjectARX
acedRegCmds macro, care furnizează un pointer la obiectul ObjectARX system
AcEdCommandStack.
Funcţia vlax-add-cmd asociază automat comenzi în grupul de comenzi AutoCAD. Când face
parte din spaţiul de nume pentru documente, vlax-add-cmd adaugă comanda la grupul numit
doc-ID; doc-ID este o valoare hexazecimală care identifică documentul. Dacă provine dintr-un
spaţiu de nume separat VLX, vlax-add-cmd adaugă comanda grupului numit VLC-doc-ID:VLX-
name, unde VLX-name este numele aplicaţiei care generează vlax-add-cmd.
Este recomandat să utilizaţi funcţia pentru spaţiul separat de nume VLX. Atunci trebuie să
încărcaţi explicit VLX folosind comanda APPLOAD, mai mult decât apelându-l în unul din
fişierele startup AutoLISP2.
Argumente 
global‐name  
Un şir de caractere.
func‐sym  
Un simbol care specifică o funcţie AutoLISP fără argumente.
local‐name  
Un şir de caractere (implicit global-name)
cmd‐flags  
Un întreg (implicit ACRX_CMD_MODAL + ACRX_CMD_REDRAW)
Argumentul principal
- ACRX_CMD_MODAL Command nu poate fi invocat când o altă comandă este activă
(0)
- ACRX_CMD_TRANSPARENT Command poate fi invocat când o altă comandă este
activa (1).
Argumentul secundar
- ACRX_CMD_USEPICKSET când valoarea setată a lui pickfirst este (2) este anulată în
AutoCAD. Comanda vă permite să recuperaţi valoarea setată a lui pickfirst. Comanda nu
poate obţine sau seta gripuri.
- ACRX_CMD_REDRAW Când este obţinută setarea lui pickfirst sau setarea gripurilor,
acestea nu vor fi anulate în AutoCAD.
- Dacă ambele argumente ACRX_CMD_USEPICKSET şi ACRX_CMD_REDRAW

1
ATENŢIE! Nu puteţi folosi apeluri ale funcţiei Command în modul transparent al funcţiei. Acest lucru
poate genera închiderea AutoCAD-ului în mod neaşteptat.
2
nu puteţi folosi vlax-add-cmd pentru a expune funcţii care crează obiecte reactor, sau servervsc ca
reactor callbacks

92
FUNCŢII DE BAZĂ – MANIPULAREA APLICAŢIILOR
sunt setate, se obţine acelaşi efect ca în cazul setării argumentului
ACRX_CMD_REDRAW.
Valoare  returnată 
Dacă operaţia se execută cu succes se returnează argumentul global-name. Funcţia returnează
nil dacă acedRegCmds->addCommand(...) returnează o eroare de condiţie.
Exemple 
În exemplul următor funcţia hello-autocad nu are prefixul c:, dar vlax-add-cmd crează o comandă
vizibillă ca ObjectARX-style la prompt-erul AutoCAD Command:
_$ (defun hello-autocad () (princ "hello Visual LISP"))
HELLO-AUTOCAD
_$ (vlax-add-cmd "hello-autocad" 'hello-autocad)
"hello-autocad"
Funcţii  similare 
Funcţia vlax-remove-cmd.

7.1.2. Aritmetice

Nume funcţie Descriere


(+ [number number] ...)
+ (add)
returnează suma tuturor numerelor1
(- [number number] ...)
- (subtract) scade din primul număr suma următoarelor numere şi returnează
rezultatul
(*[number number] ...)
* (multiply)
returnează produsul numerelor
(/ [number number] ...)
/ (divide)
împarte primul număr produsul următoarelor numere şi returnează câtul
~ (bitwise (~ int)
NOT) returnează complement faţă de 1pe bit aplicat argumentului2
(1+ number)
1+ (increment)
returnează argumentul incrementat cu 13
(1- number)
1- (decrement)
returnează argumentul decrementat cu 14
(abs number)
abs
returnează valoarea absolută a argumentului
(atan num1 [num2])
atan
returnează arctangent din număr5
cos (cos ang)

1
pentru o imagine mai clară vom folosi termenul de numere în loc de argumente
2
1’s complement
3
la valoarea argumentului se aduna valoarea 1
4
din valoarea argumentului se scade valoarea 1
5
numărul trebuie să reprezinte un unghi în radiani; conform setărilor implicite ale AutoCAD

93
PROIECTARE ASISTATĂ DE COMPUTER
returnează cosinusul unghiului exprimat în radiani
(exp number)
exp
returnează constanta e ridicată la puterea specificată
(expt base power)
expt
returnează un număr la puterea specificată
(fix number)
fix
returnează conversia numărului real în cel mai mic întreg apropiat
(float number)
float
returnează numărul convertit la real
(gcd int1 int2)
gcd
returnează cel mai mare numitor comun al celor 2 întregi
(log number)
log
returnează logaritmul natural al numărului, ca real
(logand [int int ...])
logand
realizează ŞI logic între lista întregilor şi returnează rezultatul
(logior [int int ...])
logior
realizează SAU logic între lista întregilor şi returnează rezultatul
(lsh [int numbits])
lsh realizează SHIFT logic pe un întreg, pe un număr specificat de biţi, şi
returnează rezultatul
(max number number …)
max
returnează cel mai mare număr găsit
(min number number …)
min
returnează cel mai mic număr găsit
(minusp number)
minusp
verifică dacă numărul este negativ
(rem number number …)
rem
împarte primul număr la următoarele şi returnează restul
(sin ang)
sin
returnează sinusul unghiului exprimat în radiani
(sqrt number)
sqrt
returnează radicalul numărului ca real
(zerop number)
zerop
verifică dacă numărul este zero

+ (add)
 Descriere 
Returnează suma tuturor numerelor.
  Apelare
(+ [number number] ...)
Argumente 
number 

94
FUNCŢII DE BAZĂ – ARITMETICE
Un număr.
Valoare  returnată
Rezultatul adunării numerelor. Dacă furnizaţi un singur argument, acestă funcţie returnează
rezultatul adunării acestuia cu zero. Dacă nu furnizaţi nici un argument funcţia returnează
zero.
Exemple 
(+ 1 2) returnează 3
(+ 1 2 3 4.5) returnează 10.5
(+ 1 2 3 4.0) returnează 10.0

- (subtract)
Descriere
Scade din primul număr suma următoarelor.
  Apelare 
(- [number number] ...)
Argumente 
number 
Un număr.
Valoare  returnată 
Rezultatul scăderii. Dacă furnizaţi mai mult de două argumente, acestă funcţie returnează
rezultatul scăderii din primul număr a sumei celorlalte. Dacă furnizaţi numai un argument
atunci acesta este scăzut din zero şi rezultatul este negativ. Dacă nu furnizaţi nici un argument
funcţia returnează zero.
Exemple 
(- 50 40) returnează 10
(- 50 40.0) returnează 10.0
(- 50 40.0 2.5) returnează 7.5
(- 8) returnează -8

* (multiply)
 Descriere 
Returnează produsul tuturor numerelor.
  Apelare 
(* [number number] ...)
Argumente 
number 
Un număr.
Valoare  returnată 

95
PROIECTARE ASISTATĂ DE COMPUTER
Rezultatul înmulţirii. Dacă se furnizează doar un argument funcţia returnează rezultatul
înmulţirii acestuia cu 1, deci returnează numărul. Dacă nu furnizaţi nici un argument se
returnează zero.
Exemple 
(* 2 3) returnează 6 
(* 2 3.0) returnează 6.0 
(* 2 3 4.0) returnează 24.0
(* 3 -4.5) returnează -13.5
(* 3) returnează 3

/ (divide)
 Descriere 
Împarte primul număr la produsul următoarelor şi returnează câtul.
  Apelare 
(/ [number number] ...)
Argumente 
number 
Un număr.
Valoare  returnată 
Rezultatul împărţirii. Dacă furnizaţi mai mult de două argumente, funcţia returnează rezultatul
împărţirii primului număr la produsul următoarelor numere. Dacă furnizaţi un singur argument
este returnat rezultatul împărţirii acestuia la 1, deci numărul. Dacă nu furnizaţi nici un
argument este returnat zero.
Exemple 
(/ 100 2) returnează 50
(/ 100 2.0) returnează 50.0
(/ 100 20.0 2) returnează 2.5
(/ 100 20 2) returnează 2
(/ 4) returnează 4

~ (bitwise NOT)
 Descriere 
Returnează complementul faţă de 1 pe bit al argumentului.
  Apelare 
(~ int)
Argumente 
int 
Un număr întreg.
Valoare  returnată 

96
FUNCŢII DE BAZĂ – ARITMETICE
Returnează complementul faţă de 1 pe bit al argumentului.
Exemple 
(~ 3) returnează -4
(~ 100) returnează -101
(~ -4) returnează 3 

1+ (increment)
 Descriere 
Incrementează un număr cu 1.
  Apelare 
(1+ number)
Argumente 
number 
Un număr.
Valoare  returnată 
Argumentul incrementat cu 1.
Exemple 
(1+ 5) returnează 6 
(1+ -17.5) returnează -16.5

1- (decrement)
 Descriere 
Decrementează un număr cu 1.
Apelare 
(1- number)
Argumente 
number 
Un număr.
Valoare  returnată 
Argumentul decrementat cu 1.
Exemple 
(1- 5) returnează 4 
(1- -17.5) returnează -18.5

abs
 Descriere 
Returnează valoarea absolută a numărului.

97
PROIECTARE ASISTATĂ DE COMPUTER
  Apelare 
(abs number)
Argumente 
number 
Un număr.
Valoare  returnată 
Valoarea absolută a argumentului.
Exemple 
(abs 100) returnează 100
(abs -100) returnează 100
(abs -99.25) returnează 99.25

atan
 Descriere 
Returnează arctangenta numărului în radiani.
  Apelare 
(atan num1 [num2])
Argumente 
num1 
Un număr.
num2 
Un număr.
Valoare  returnată 
Arctangenta lui num1, în radiani, numai dacă num1 este furnizat. Dacă furnizaţi ambele
argumente num1 şi num2, atan returnează arctangenta lui num1/num2, în radiani. Dacă
num2 este 0, atunci funcţia returnează un unghi de ±1.570796 radiani1, depinzând de semnul
lui num1. Domeniul valorilor unghiulare returnate este de la -pi/2 la +pi/2 radiani.
Exemple 
Command: (atan 1)
0.785398
Command: (atan 1.0)
0.785398
Command: (atan 0.5)
0.463648
Command: (atan 1.0)
0.785398
Command: (atan -1.0)
-0.785398
Command: (atan 2.0 3.0)
1
+90 grade sau -90 de grade

98
FUNCŢII DE BAZĂ – ARITMETICE
0.588003
Command: (atan 2.0 -3.0)
2.55359
Command: (atan 1.0 0.0)
1.5708

cos
 Descriere 
Returnează cosinusul unghiului exprimat în radiani.
  Apelare 
(cos ang)
Argumente 
ang 
Un unghi, în radiani.
Valoare  returnată 
Cosinusul unghiului, în radiani.
Exemple 
Command: (cos 0.0)
1.0
Command: (cos pi)
-1.0

exp
 Descriere 
Returnează constanta e, baza logaritmului natural 2,718, ridicată puterea specificată.
  Apelare 
(exp number)
Argumente 
num 
Un număr real.
Valoare  returnată 
Un număr real.
Exemple 
Command: (exp 1.0)
2.71828
Command: (exp 2.2)
9.02501
Command: (exp -0.4)

99
PROIECTARE ASISTATĂ DE COMPUTER
0.67032

expt
 Descriere 
Returnează un număr ridicat la puterea specificată.
  Apelare 
(expt number power)
Argumente 
number 
Un număr.
power 
Puterea la care se ridică number, deci un număr.
Valoare  returnată 
Dacă ambele argumente sunt întregi, un întreg. Dacă cel puţin un argument este real,
rezultatul este real.
Exemple 
Command: (expt 2 4)
16
Command: (expt 3.0 2.0)
9.0

fix
 Descriere 
Returnează conversia numărului real în cel mai apropiat întreg mai mic decât numărul1.
  Apelare 
(fix number)
Argumente 
number 
Un număr real
Valoare  returnată 
Parte întreagă a numărului.
Exemple 
Command: (fix 3)
3
Command: (fix 3.7)
3

1
parte întreagă din număr

100
FUNCŢII DE BAZĂ – ARITMETICE

float
 Descriere 
Returnează conversia unui număr în număr real.
  Apelare 
(float number)
Argumente 
number 
Un număr
Valoare  returnată 
Un real obţinut din număr.
Exemple 
Command: (float 3)
3.0
Command: (float 3.75)
3.75

gcd
 Descriere 
Returnează cel mai mare numitor comun al celor 2 întregi.
  Apelare 
(gcd int1 int2)
Argumente 
int1 
Un număr întreg, trebuie să fie mai mare decât 0
int2 
Un număr întreg, trebuie să fie mai mare decât 0
Valoare  returnată 
Returnează un număr întreg care reptezintă cel mai mare numitor comun al celor 2 întregi int1
şi int2.
Exemple 
Command: (gcd 81 57)
3
Command: (gcd 12 20)
4

log
 Descriere 
Returnează valoarea logaritmului natural al numărului, ca număr real.

101
PROIECTARE ASISTATĂ DE COMPUTER
  Apelare 
(log num)
Argumente 
num 
Un număr pozitiv.
Valoare  returnată 
Un număr real.
Exemple 
Command: (log 4.5)
1.50408
Command: (log 1.22)
0.198851

logand
 Descriere 
Returnează rezultatul operaţiei logice AND asupra numerelor întregi.
  Apelare 
(logand [int int...])
Argumente 
int 
Un număr întreg
Valoare  returnată 
Un număr întreg. Dacă nu sunt furnizate argumente funcţia returnează 0.
Exemple 
Command: (logand 7 15 3)
3
Command: (logand 2 3 15)
2
Command: (logand 8 3 4)
0

logior
 Descriere 
Returnează rezultatul operaţiei logice AND asupra numerelor întregi.
 Apelare 
(logior [int int...])
Argumente 
int 

102
FUNCŢII DE BAZĂ – ARITMETICE
Un număr întreg
Valoare  returnată 
Un număr întreg. Dacă nu sunt furnizate argumente funcţia returnează 0.
Exemple 
Command: (logior 1 2 4)
7
Command: (logior 9 3)
11

lsh
 Descriere 
Lansează o aplicaţie Windows.
  Apelare 
(lsh int numbits)
Argumente 
int 
Un număr întreg
numbits 
Specifică numărul de biţi care sunt deplasaţi în int.
Dacă numbits este pozitiv, int este deplasat la stânga; dacă numbits este negativ, int este
deplasat spre dreapta. În orice caz, biţii introduşi au valoarea zero, biţii scoşi se pierd1.
Dacă numbits nu este specificat, nu există deplasare.
Valoare  returnată 
Valoarea lui int după efectuarea deplasării. Valoarea returnată este pozitivă dacă cel mai
semnificativ bit2 conţine 0 după operaţia de deplasarea; altfel este negativ. Dacă nu sunt
furnizate argumente, lsh returnează 0.
Comportamentul este diferit în alte limbaje de programare3 unde pentru o deplasare de mai
mult de 32 de biţi la stânga4 rezultatul este 0. La deplasarea la dreapta întregul reapare la
fiecare a 32-a deplasare pe bit5.
Exemple 
Command: (lsh 2 1)
4
Command: (lsh 2 -1)
1
Command: (lsh 40 2)
160
1
deplasare la dreapta sau stînga, deci poziţiile eliberate prin deplasare se completează cu 0, biţii care
din cauza deplasării „ies înafara numărului” se pierd
2
bitul numărul 31
3
(>> & << of C, C++, or Java
4
pentru un întreg de 32 de biţi
5
deci după fiecare 32 de biţi deplasaţi (în total)

103
PROIECTARE ASISTATĂ DE COMPUTER

max
 Descriere 
Compară argumentele şi returnează cel mai mare număr găsit.
  Apelare 
(max[number number] ...)
Argumente 
num 
Un număr
Valoare  returnată 
Un număr. Dacă unul din argumente este un număr real, max returnează un număr real, în
celelalte cazuri este returnat un număr întreg. Dacă nu sunt furnizate argumente este returnat
0.
Exemple 
Command: (max 4.07 -144)
4.07
Command: (max -88 19 5 2)
19
Command: (max 2.1 4 8)
8.0

min
 Descriere 
Compară argumentele şi returnează cel mai mic număr găsit.
  Apelare 
(min[number number] ...)
Argumente 
num 
Un număr
Valoare  returnată 
Un număr. Dacă unul din argumente este un număr real, min returnează un număr real, în
celelalte cazuri este returnat un număr întreg. Dacă nu sunt furnizate argumente este returnat
0.
Exemple 
Command: (min 683 -10.0)
-10.0
Command: (min 73 2 48 5)
2
Command: (min 73.0 2 48 5)
2.0

104
FUNCŢII DE BAZĂ – ARITMETICE
Command: (min 2 4 6.7)
2.0

minusp

 Descriere 
Verifică dacă numărul este negativ.
 Apelare 
(minusp num)
Argumente 
num 
Un număr
Valoare  returnată 
T dacă num este negativ; altfel nil.
Exemple 
Command: (minusp -1)
T
Command: (minusp -4.293)
T
Command: (minusp 830.2)
nil

rem
 Descriere 
Divide primul număr la cel de-al doilea şi returnează rezultatul.
  Apelare 
(rem[number number] ...)
Argumente 
num 
Un număr. Dacă furnizaţi mai mult de două argumente, rem divide rezultatul divizării
primului număr la cel de-al doilea, cu cel de-al treilea număr şi tot aşa.
Dacă furnizaţi mai mult de două argumente, rem evaluează de la stânga la dreapta. De
exemplu, dacă furnizaţi trei argumente, rem divide primul număr cu cel de-al doilea, apoi
ia rezultatul şi îl divide cu cel de-al treilea număr şi returnează ce a rămas după operaţii.
Valoare  returnată 
Un număr.
Dacă unul din argumente este un număr real, rem returnează un număr real, în celelalte cazuri
este returnat un număr întreg. Dacă nu sunt furnizate argumente este returnat 0. Dacă este

105
PROIECTARE ASISTATĂ DE COMPUTER
furnizat un singur număr, atunci este returnat acest număr.
Exemple 
Command: (rem 42 12)
6
Command: (rem 12.0 16)
12.0
Command: (rem 26 7 2)
1

sin
 Descriere 
Returnează sinusul unghiului ca număr real, exprimat în radiani.
  Apelare 
(sin ang)
Argumente 
ang 
Un unghi, în radiani
Valoare  returnată 
Un număr real care reprezintă sinusul unghiului ang, exprimat în radiani.
Exemple 
Command: (sin 1.0)
0.841471
Command: (sin 0.0)
0.0

sqrt
 Descriere 
Returnează radicalul unui număr ca număr real.
  Apelare 
(sqrt num)
Argumente 
num 
Un număr pozitiv
Valoare  returnată 
Un număr real.
Exemple 
Command: (sqrt 4)
2.0

106
FUNCŢII DE BAZĂ – ARITMETICE
Command: (sqrt 2.0)
1.41421

zerop
 Descriere 
Verifică dacă un număr are valoarea zero.
  Apelare 
(zerop num)
Argumente 
num 
Un număr pozitiv
Valoare  returnată 
T dacă numărul evaluat este zero, nil altfel.
Exemple 
Command: (zerop 0)
T
Command: (zerop 0.0)
T
Command: (zerop 0.0001)
nil

7.1.3. De egalitate şi condiţionale

Nume funcţie Descriere


(= numstr [numstr] ...)
= (equal to)
returnează T dacă toate argumentele sunt egale între ele, altfel nil.
(/= numstr [numstr] ...)
/= (not equal
returnează T dacă oricare două argumentele succesive sunt diferite între
to)
ele, altfel nil
(< numstr [numstr] ...)
< (less than) returnează T dacă fiecare argument este mai mic decât argumentul din
dreapta lui, altfel returnează nil.
(<= numstr [numstr] ...)
<= (less than or
returnează T dacă fiecare argument este mai mic sau egal decât
equal to)
argumentul din dreapta lui, altfel returnează nil.
(> numstr [numstr] ...)
> (greater
returnează T dacă fiecare argument este mai mare decât argumentul din
than)
dreapta lui, altfel returnează nil.
>= (greater (>= numstr [numstr] ...)
than or equal returnează T dacă fiecare argument este mai mare sau egal decât
to) argumentul din dreapta lui, altfel returnează nil.

107
PROIECTARE ASISTATĂ DE COMPUTER
(and [expr ...])
and
returnează rezultatul operaţiei logice AND asupra unei liste de expresii.
(Boole func int1 [int2 ...])
boole
este folosită ca o funcţie booleană generală.
(cond [(test result ...) ...])
cond
serveşte ca şi funcţie condiţională pentru AutoLISP.
(eq expr1 expr2)
eq
determină dacă două expresii sunt identice.
(equal expr1 expr2 [fuzz])
equal
determină dacă două expresii sunt egale.
(if testexpr thenexpr [elseexpr])
if
funcţie de evaluare condiţională.
(or [expr ...])
or
aplică funcţia booleană OR asupra argumentelor şi returnează rezultatul.
(repeat int [expr ...])
repeat evaluează fiecare expresie de un număr specificat de ori, şi returnează
valoarea ultimei expresii evaluate.
(while test expr [expr ...])
while evaluează expresia de test şi dacă nu este nil evaluează şi celelalte
expresii; se repetă acest procedeu până când expresia de test este nil.

= (equal to)
 Descriere 
Compară egalitatea argumentelor numerice sau şiruri de caractere.
  Apelare 
(= numstr [numstr] ...)
Argumente 
numstr 
Un număr sau un şir de caractere
Valoare  returnată 
T dacă toate argumentele sunt egale între ele, altfel nil. Dacă este furnizat numai un argument,
= returnează T.
Exemple 
(= 4 4.0) returnează T
(= 20 388) returnează nil
(= 2.4 2.4 2.4) returnează T
(= 499 499 500) returnează nil
(= "me" "me") returnează T
(= "me" "you") returnează nil
(= "me" "em") returnează nil
Funcţii  similare 

108
FUNCŢII DE BAZĂ – DE EGALITATE ŞI CONDIŢIONALE
Funcţiile eq şi equal.

/= (not equal to)


 Descriere 
Compară inegalitatea argumentelor numerice sau şiruri de caractere.
  Apelare 
(/= (not equal to) numstr [numstr] ...)
Argumente 
numstr 
Un număr sau un şir de caractere
Valoare  returnată 
T dacă oricare două argumentele succesive sunt diferite între ele, altfel nil1. Dacă este furnizat
numai un argument, /= returnează T.
Exemple 
(/= 10 20) returnează T
(/= "you" "you") returnează nil
(/= 5.43 5.44) returnează T
(/= 10 20 10 20 20) returnează nil
(/= 10 20 10 20) returnează T2

< (less than)


 Descriere 
Returnează T dacă fiecare argument este mai mic decât argumentul din dreapta lui, altfel
returnează nil.
  Apelare 
(< numstr [numstr] ...)
Argumente 
numstr 
Un număr sau un şir de caractere
Valoare  returnată 
Returnează T dacă fiecare argument este mai mic decât argumentul din dreapta lui, altfel
returnează nil. Dacă este furnizat numai un argument < returnează T.
Exemple 
(< 10 20) returnează T

1
funcţia /= din AutoLISP nu se comporta ca o funcţie /= din alte dialecte LISP. Comportamentul
standard al funcţiei implică returnarea T dacă oricare două argumente sunt diferite între ele, în timp ce
în AutoLISP se verifică inegalitatea tuturor argumentelor succesive. Vezi exemplele
2
în acest exemplu există cel puţin două arguemente egale între ele, dar deoarece nu sunt succesive /=
returnează T

109
PROIECTARE ASISTATĂ DE COMPUTER
(< "b" "c") returnează T
(< 357 33.2) returnează nil
(< 2 3 88) returnează T
(< 2 3 4 4) returnează nil

<= (less than or equal to)


Descriere 
Returnează T dacă fiecare argument este mai mic sau egal decât argumentul din dreapta lui,
altfel returnează nil.
  Apelare 
(<= numstr [numstr] ...)
Argumente 
numstr 
Un număr sau un şir de caractere
Valoare  returnată 
Returnează T dacă fiecare argument este mai mic sau egal decât argumentul din dreapta lui,
altfel returnează nil. Dacă este furnizat numai un argument <= returnează T.
Exemple 
(<= 10 20) returnează T
(<= "b" "b") returnează T
(<= 357 33.2) returnează nil
(<= 2 9 9) returnează T
(<= 2 9 4 5) returnează nil

> (greater than)


Descriere 
Returnează T dacă fiecare argument este mai mare decât argumentul din dreapta lui, altfel
returnează nil.
  Apelare 
(> numstr [numstr] ...)
Argumente 
numstr 
Un număr sau un şir de caractere
Valoare  returnată 
Returnează T dacă fiecare argument este mai mare decât argumentul din dreapta lui, altfel
returnează nil. Dacă este furnizat numai un argument >= returnează T.
Exemple 
(> 120 17) returnează T
(> "c" "b") returnează T

110
FUNCŢII DE BAZĂ – DE EGALITATE ŞI CONDIŢIONALE
(> 3.5 1792) returnează nil
(> 77 4 2) returnează T
(> 77 4 4) returnează nil

>= (greater than or equal to)


 Descriere 
Returnează T dacă fiecare argument este mai mare sau egal decât argumentul din dreapta lui,
altfel returnează nil.
  Apelare 
(>= numstr [numstr] ...)
Argumente 
numstr 
Un număr sau un şir de caractere
Valoare  returnată 
Returnează T dacă fiecare argument este mai mare sau egal decât argumentul din dreapta lui,
altfel returnează nil. Dacă este furnizat numai un argument >= returnează T.
Exemple 
(>= 120 17) returnează T
(>= "c" "c") returnează T
(>= 3.5 1792) returnează nil
(>= 77 4 4) returnează T
(>= 77 4 9) returnează nil

and
 Descriere 
Returnează rezultatul operaţiei logice AND asupra argumentelor furnizate.
  Apelare 
(and [expr ...])
Argumente 
expr 
O expresie
Valoare  returnată 
Nil, dacă oricare din argumentele furnizate este evaluat ca nil; altfel T. Dacă and este apelată
fără argumente este returnat T.
Exemple 
Command: (setq a 103 b nil c "string")
"string"
Command: (and 1.4 a c)
T

111
PROIECTARE ASISTATĂ DE COMPUTER
Command: (and 1.4 a b c)
nil

boole
 Descriere 
Este folosită ca o funcţie booleană generală.
  Apelare 
(Boole operator int1 [int2 ...])
Argumente 
operator 
Un număr întreg între 0 şi 15, care reprezintă una din cele 16 funcţii booleene posibile
int1, int2 
Un număr întreg1
Argumentele succesive2 sunt combinate logic3 conform următoarei tabele de adevăr.
Tabela booleană de adevăr
Int1 Int2 Operator bit
0 0 8
0 1 4
1 0 2
1 1 0

Fiecare bit din int1 este împerecheat cu bitul corespunzător din int2, specificat de una din
liniile tabelei de adevăr. Bitul rezultat este 0 sau 1, funcţie de operatorul pe bit setat
corespunzător aceleiaşi linii din tabela de adevăr.
Dacă un bit similar este setat în operator, rezulatatul este 1; altfel este 0. Multe din valorile
operatorilor logici sunt echivalente cu operatorii logici standard AND, OR, XOR şi NOR
Valorile pentru funcţiile booleene pe bit
Operand Operaţie Rezultatul este 1 dacă
1 AND Ambii biţi de intrare au valoarea 1
6 XOR Doar unul din biţii de intrare are valoarea 1
7 OR Unul sau ambii biţi de intrare au valoarea 1
8 NOR Ambii biţi de intrare au valoarea 0

Valoare  returnată 
Un număr întreg.
Exemple 

1
funcţia poate accepta un singur argument, dar rezultatul returnat este impredictibil
2
numere întregi
3
funcţii logice de bază

112
FUNCŢII DE BAZĂ – DE EGALITATE ŞI CONDIŢIONALE
Următorul cod aplică instrucţiunea logicp AND pentru valorile 12 şi 5:
Command: (Boole 1 12 5)
4
Următorul cod aplică instrucţiunea logică AND pentru valorile 6 şi 5:
Command: (Boole 6 6 5)
3
Puteţi utiliza orice valoare pentru operator logic, pentru a efectua o operaţie logică care nu
are corespondent cu operaţiile logice standard. De exemplu, dacă operator este 4, biţii
rezultaţi sunt setaţi dacă biţii corespondenţi sunt în int2 dar nu sunt in int1.
Command: (Boole 4 3 14)
12

cond
 Descriere 
Serveşte ca şi funcţie condiţională pentru AutoLISP.
  Apelare 
(cond [(test result ...) ...])
Funcţia cond acceptă orice număr de liste ca argumente. Ea evaluează fiecare prim element
din fiecare listă1, în ordinea furnizării, până când unul din aceste argumente returnează altceva
decât nil. Se evaluează acea expresie, care urmează unui test încheiat cu succes2.
Argumente 
test 
O expresie condiţională3
result 
Ce se returnează pentru adevărat.
Valoare  returnată 
Valoarea ultimei expresii din sublistă4. Dacă este o singură expresie în sublistă, de exemplu
result lipseşte, atunci este returnat rezultatul expresiei. Dacă nu este furnizat nici un argument
atunci cond returnează nil.
Exemple 
Următorul exemplu foloseşte cond pentru a calcula valoarea absolută:
(cond
((minusp a) (- a))
(t a)
)
Dacă valoarea variabilei a este -10, atunci se returnează 10. 10 este setată ca valoarea
variabilei.
Funcţia cond poate fi folosită şi ca o funcţie de tip case. Este uzual ca T să fie folosit ca

1
test
2
result
3
care returnează un rezultat logic T sau nil
4
result

113
PROIECTARE ASISTATĂ DE COMPUTER
ultimă expresie de test1. Aici este prezentat un exemplu simplu. Se caută răspunsul
utilizatorului, ca şir de caractere, furnizat în variabila s. Această funcţie testează variabila şi
returnează 1 dacă acesta este Y sau y, 0 dacă este N sau n; altfel nil.
(cond
((= s "Y") 1)
((= s "y") 1)
((= s "N") 0)
((= s "n") 0)
(t nil)
)

eq
 Descriere 
Determină dacă două expresii sunt identice.
  Apelare 
(eq expr1 expr2)
Funcţia eq determină dacă expresiile sunt identice din punct de vedere al creării, de exemplu
create cu funcţia setq.
Argumente 
expr1 
Expresia care trebuie comparată
expr2 
Expresia cu care se compară expr1
Valoare  returnată 
T dacă cele două expresii sunt identice; nil altfel.
Exemple 
Se fac următoarele atribuiri:
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
Se compară f1 cu f3:
Command: (eq f1 f3)
nil
eq returnează nil deoarece f1 şi f3, deşi conţin aceleaşi valori, nu fac referire la aceeaşi listă.
Se compară f1 cu f2:
Command: (eq f3 f2)
T
eq returnează T deoarece f1 şi f3 fac referire la aceeaşi listă.
Funcţii  similare 

1
expresie implicită

114
FUNCŢII DE BAZĂ – DE EGALITATE ŞI CONDIŢIONALE
Funcţiile = (equal to) şi equal.

equal
 Descriere 
Determină dacă două expresii sunt egale.
  Apelare 
(equal expr1 expr2 [fuzz])
Argumente 
expr1 
Expresia care va fi comparată.
expr2 
Expresia cu care se compară expr1
fuzz 
Un număr real prin care expr1 şi expr2 pot diferi atunci când sunt considerate egale
Când comparaţi două numere reale, acestea pot diferi foarte puţin dacă au fost calculate prin
metode diferite. Puteţi specifica prin fuzz valoarea cu cât pot diferi acestea atunci când sunt
considerate egale.
Valoare  returnată 
T dacă cele două expresii sunt egale1; nil altfel.
Exemple 
Realizaţi următoarele atribuiri:
(setq f1 '(a b c))
(setq f2 '(a b c))
(setq f3 f2)
(setq a 1.123456)
(setq b 1.123457)
Comparaţi f1 cu f3:
Command: (equal f1 f3)
T
Comparaţi f3 cu f2:
Command: (equal f3 f2)
T
Comparaţi a cu b:
Command: (equal a b)
nil
Variabilele a şi b diferă prin 0.000001
Comparaţi a şi b, cu argumentul fuzz având valoarea 0.000001:
Command: (equal a b 0.000001)
T
Variabilele a şi b diferă în exemplul de mai sus cu factorul fuzz specificat, dar equal

1
evaluate la aceeaşi valoare

115
PROIECTARE ASISTATĂ DE COMPUTER
consideră aceste variabile egale.
Să comparăm funcţiile eq şi equal.
Dacă funcţia eq găseşte două liste sau doi atomi identici, funcţia equal găseşte deasemenea
aceste liste sau atomi identici.
Funcţia equal consideră egali orice atomi gasiţi asemănători de funcţia eq. Totuşi două liste
pe care funcţia equal le gaseşte egale pot fi găsite diferite de funcţia eq.

if
 Descriere 
Funcţie de evaluare condiţională.
  Apelare 
(if testexpr thenexpr [elseexpr])
Argumente 
testexpr 
Expresia care va fi testată
thenexpr 
Expresia care va fi evaluată dacă testexpr nu este nil
elseexpr 
Expresia care va fi evaluată dacă testexpr este nil
Valoare  returnată 
Funcţia if returnează valoarea expresiei selectate. Dacă elseexpr nu este furnizat şi testexpr
este nil, atunci if returnează nil.
Exemple 
Command: (if (= 1 3) "YES!!" "no.")
"no."
Command: (if (= 2 (+ 1 1)) "YES!!")
"YES!!"
Command: (if (= 2 (+ 3 4)) "YES!!")
nil
Funcţii  similare 
Funcţia progn.

or
 Descriere 
Aplică funcţia booleană OR asupra argumentelor şi returnează rezultatul.
  Apelare 
(or [expr...])
Funcţia or evaluează expresia de la stânga la dreapta, căutând expresii difetite de nil.
Argumente 
expr 

116
FUNCŢII DE BAZĂ – DE EGALITATE ŞI CONDIŢIONALE
Expresia care va fi evaluată
Valoare  returnată 
T dacă este găsită o expresie diferită de nil; nil dacă toate expresiile sunt nil sau dacă nu este
furnizat nici un argument. Funcţia acceptă numai un argument şi returnează T dacă este
furnizat numai unul.
Exemple 
Command: (or nil 45 '())
T
Command: (or nil '())
nil

repeat
 Descriere 
Evaluează fiecare expresie de un număr specificat de ori, şi returnează valoarea ultimei
expresii evaluate.
  Apelare 
(repeat int [expr...])
Argumente 
int 
Un număr întreg pozitiv
expr 
Unul sau mai mulţi termeni sau expresii
Valoare  returnată 
Valoarea ultimului termen sau expresii evaluate. Dacă expr nu este furnizat, funcţia repeat
returnează nil.
Exemple 
Command: (setq a 10 b 100)
100
Command: (repeat 4 (setq a (+ a 10)) (setq b (+ b 100)))
500
După evaluare, a are valoarea 50, b are valoarea 500 şi repeat returnează 500.
Dacă sunt furnizate şiruri ca argumente, repeat returnează ultimul şir de caractere.
Command: (repeat 100 "Me" "You")
"You"

while
 Descriere 
Evaluează expresia de test şi dacă nu este nil evaluează şi celelalte expresii; se repetă acest
procedeu până când expresia de test este nil.

117
PROIECTARE ASISTATĂ DE COMPUTER
  Apelare 
(while testexpr [expr...])
Argumente 
testexpr 
Această expresie conţine condiţia de test.
expr 
Una sau mai multe expresii care sunt evaluate până testexpr devine nil.
Valoare  returnată 
Ce mai recentă valoare a ultimei expresii evaluate.
Exemple 
Următorul cod apelează funcţia some-func de 10 ori, setând test de la 1 la 10. Se returnează
11, deoarece este valoarea ultimei expresii evaluate.
(setq test 1)
(while (<= test 10)
(some-func test)
(setq test (1+ test))
)

7.1.4. Manipularea erorilor

Nume funcţie Descriere


(alert string)
alert Afişează o casetă de dialog care conţine un mesaj de eroare sau un mesaj
de avertizare
(*error* string)
*error*
o funcţie error-handling definită de utilizator
(exit)
exit
forţează terminarea aplicaţiei curente
(quit)
quit
Forţează terminarea aplicaţiei curente prin quit
vl-catch-all- (vl-catch-all-apply 'function list)
apply trimite o listă de argumente funcţiei specificate şi tratează orice excepţie
vl-catch-all- (vl-catch-all-error-message error-obj)
error-message returnează un şir de caractere de la un obiect de eroare
vl-catch-all- (vl-catch-all-error-p arg)
error-p evaluează expresiile AutoLISP într-un fişier

alert
 Descriere 
Afişează o casetă de dialog care conţine un mesaj de eroare sau un mesaj de avertizare.
  Apelare 
(alert string)

118
FUNCŢII DE BAZĂ – MANIPULAREA ERORILOR
Argumente 
string 
Şirul care apare în caseta de alertă
Valoare  returnată 
nil.
Exemple 
Afişează un mesaj în casetă1 de alertă:
(alert "Aceasta functie nu este disponibila.")
Afişează mai multe linii de mesaj, utilizând caracterul newline \n în string:
(alert "Aceasta functie\nnu este disponibila.")2

*error*
 Descriere 
O funcţie error-handling definită de utilizator.
  Apelare 
(*error* string)
Dacă *error* nu este nil, ea este executată ca o funcţie de eroare AutoLISP existentă.
AutoCAD trimite un argument funcţiei *error*, cu şirul care conţine descrierea erorii. Funcţia
*error* definită de dumneavoastră poate include apeluri ale funcţiei command fără argumente.
Aceasta anulează comanda AutoCAD anterioară apelată cu funcţia command.
Valoare  returnată 
Funcţia nu returnează nimic, cu excepţia cazului cand este utilizată vl-exit-with-value.
Exemple 
Următoarea funcţie face acelaşi lucru ca o funcţie de eroare error handling AutoLISP
standard. Ea afişează cuvântul “eroare” urmat de descrierea erorii:
(defun *error* (msg)
(princ "error: ")
(princ msg)
(princ)
)
Funcţii  similare 
Funcţiile vl-exit-with-error, vl-exit-with-value, vl-catch-all-apply, vl-catch-all-error-
message, şi vl-catch-all-error-p.

exit
 Descriere 

1
fereastră de mesaje
2
lungimea liniei afişate, precum şi numărul de linii afişate depind de platformă, dispozitiv şi fereastră.
AutoCAD trunchiază orice şir care este prea lung pentru a intra în caseta de alertă

119
PROIECTARE ASISTATĂ DE COMPUTER
Forţează terminarea aplicaţiei curente prin exit.
  Apelare 
(exit)
Dacă funcţia exit este apelată, returnează mesajul de eroare quit/exit abort şi returnează
prompterul AutoCAD Command.
Funcţii  similare 
Funcţia quit.

quit
 Descriere 
Forţează terminarea aplicaţiei curente prin quit.
  Apelare 
(quit)
Dacă funcţia quit este apelată, returnează mesajul de eroare quit/exit abort şi returnează
prompterul AutoCAD Command.
Funcţii  similare 
Funcţia exit.

vl-catch-all-apply
 Descriere 
Trimite o listă de argumente funcţiei specificate şi tratează orice excepţie.
  Apelare 
(vl-catch-all-apply 'function list)
Argumente 
function 
O funcţie. Argumentul function poate fi orice simbol tip defun sau expresie lambda
list 
O listă care conţine argumentele care vor fi trimise funcţiei
Valoare  returnată 
Rezultatul funcţiei apelate dacă operaţia se efectuează cu succes. Dacă apare o eroare, vl-
catch-all-apply returnează eroarea.
Exemple 
Dacă apelarea funcţiei invocate de vl-catch-all-apply se termină cu succes, acesta este la fel
cu folosirea apply, ca în exemplul următor:
_$ (setq catchit (apply '/ '(50 5)))
10
_$ (setq catchit (vl-catch-all-apply '/ '(50 5)))
10
Avantajul folosirii funcţiei vl-catch-all-apply este acela că permite interceptarea erorilor şi

120
FUNCŢII DE BAZĂ – MANIPULAREA ERORILOR
continuarea procesului. De exemplu puteţi vedea ce se întâmplă când împărţiţi la zero:
_$ (setq catchit (apply '/ '(50 0)))
; error: divide by zero
Când utilizaţi apply, apare o excepţie şi este afişat un mesaj de eroare.
Aici este prezentată aceeaşi operaţie utilizând vl-catch-all-apply:
_$ (setq catchit (vl-catch-all-apply '/ '(50 0)))
#<%catch-all-apply-error%>
Funcţia vl-catch-all-apply captează eroarea şi returnează obiectul eroare. Folosind vl-catch-
all-error-message puteţi vedea mesajul de eroare conţinut în obiectul eroare:
_$ (vl-catch-all-error-message catchit)
"divide by zero"
Funcţii  similare 
Funcţia *error*, vl-catch-all-error-p, şi vl-catch-all-error-message.

vl-catch-all-error-message
 Descriere 
Returnează un şir de caractere de la un obiect de eroare.
  Apelare 
(vl-catch-all-error-message error-obj)
Argumente 
error‐obj 
Un obiect eroare returnat de vl-catch-all-apply
Valoare  returnată 
Un şir care conţine mesajul de eroare
Exemple 
Împărţirea la zero folosind vl-catch-all-apply:
_$ (setq catchit (vl-catch-all-apply'/ '(50 0)))
#<%catch-all-apply-error%>
Funcţia vl-catch-all-apply captează eroarea şi returnează obiectul eroare. Folosind vl-catch-
all-error-message puteţi vedea mesajul de eroare conţinut în obiectul eroare.
_$ (vl-catch-all-error-message catchit)
"divide by zero"
Funcţii  similare 
Funcţia *error*, vl-catch-all-apply, şi vl-catch-all-error-p.

vl-catch-all-error-p
 Descriere 
Determină care din argumente este obiectul eroare returnat de vl-catch-all-apply.
  Apelare 

121
PROIECTARE ASISTATĂ DE COMPUTER
(vl-catch-all-error-p arg)
Argumente 
arg 
Orice argument
Valoare  returnată 
T dacă argumentul furnizat este obiectul eroare returnat de vl-catch-all-apply. Altfel
returnează nil.
Exemple 
Împărţirea la zero folosind vl-catch-all-apply:
_$ (setq catchit (vl-catch-all-apply
'/ '(50 0)))
#<%catch-all-apply-error%>
Folosiţi vl-catch-all-error-p pentru a determina dacă valoarea returnată de by vl-catch-all-
apply este un obiect eroare.
_$ (vl-catch-all-error-p catchit)
T
Funcţii  similare 
Funcţia *error*, vl-catch-all-apply, şi vl-catch-all-error-message

7.1.5. Manipularea funcţiilor

Nume funcţie Descriere


(apply function lst)
apply
preia o listă de argumente, executând funcţia specificată
(defun sym ([arguments][/variables...]) expr ...)
defun
defineşte o funcţie
(defun-q sym ([arguments][/variables...]) expr ...)
defun-q
defineşte o funcţie ca o listă
(defun-q-list-ref 'function)
defun-q-list-ref
afişează structura listei de definiţie a funcţiei creată cu defun-q
(defun-q-list-set 'sym list)
defun-q-list-set
setează valoarea simbolului pentru a fi o funcţie definită printr-o listă.
(eval expr)
eval
returnează evaluării unei expresii AutoLISP
(lambda arguments expr ...)
lambda
defineşte o funcţie anonimă
(progn [expr] ...)
progn evaluează secvenţial fiecare expresie şi returnează rezultatul ultimei
expresii evaluate
(trace function ...)
trace
funcţie adiţională pentru depanare în AutoLISP, setează fanionul trace

122
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
(untrace function ...)
untrace
resetează indicatorul de condişie trace pentru funcţia specificată

apply
 Descriere 
Preia o listă de argumente executând funcţia specificată.
  Apelare 
(apply 'function list)
Argumente 
’function 
O funcţie. Argumentul ’function poate fi orice simbol identificat ca defun
list 
O listă. Poate fi nil dacă funcţia poate fi apelată fără argumente
Valoare  returnată 
Rezultatul funcţiei apelate.
Exemple 
Command: (apply '+ '(1 2 3))
6
Command: (apply 'strcat '("a" "b" "c"))
"abc"

defun
 Descriere 
Defineşte o funcţie.
  Apelare 
(defun sym ([arguments] [/ variables...]) expr...)
Argumente 
sym 
Un simbol care defineşte funcţia
arguments 
Numele argumentelor care trebuie furnizate funcţiei
variables 
Numele unei sau unor variabile locale pentru această funcţie. Slash-ul / care precede
numele variabilelor trebuie separat printr-un spaţiu de prima variabilă şi de ultimul
argument. Dacă există trebuie pus cel puţin un spaţiu
expr 
Orice număr de expresii AutoLISP care vor fi evaluate la executarea funcţiei
Dacă nu declaraţi argumente sau simboluri locale trebuie să furnizaţi un set paranteze după
funcţie.
Dacă un nume de argument sau simbol furnizat este duplicat, AutoLISP foloseşte prima

123
PROIECTARE ASISTATĂ DE COMPUTER
iniţializare a fiecărui nume şi ignoră celelalte iniţializări.
Valoare  returnată 
Rezultatul ultimei expresii evaluate.
Nu folosiţi niciodată ca nume defun pentru funcţia construită în interior, sau pentru simbol.
Aceasta suprascrie definiţia originală şi face ca fincţia din interior sau simbolul să devină
inaccesibile. Pentru a gă şi o lista din interior sau orice funcţie anterioară se foloseşte funcţia
atoms-family.
Exemple 
(defun myfunc (x y) ...) Funcţia are două argumente
(defun myfunc (/ a b) ...) Funcţia are două variabile locale
(defun myfunc (x / temp) ...) Un argument, o variabilă locală
(defun myfunc () ...) Fără argumente sau variabile locale

defun-q
 Descriere 
Defineşte o funcţie ca listă.
  Apelare 
(defun-q sym ([arguments] [/ variables...]) expr...)
Funcţia defun-q este inclusă în AutoLISP numai pentru compatibiliatea cu versiuni anterioare
ale limbajului şi nu este indicat să fie folosită în alte scopuri. Puteţi folosi defun-q în situaţii
unde aveţi nevoie să accesaţi o funcţie definită ca o structură de listă care a fost implementată
în versiunile anterioare, necompilate, de AutoLISP.
Argumente 
sym 
Un simbol care defineşte funcţia
arguments 
Numele argumentelor care trebuie furnizate funcţiei
variables 
Numele unei sau unor variabile locale pentru această funcţie. Slash-ul / care precede
numele variabilelor trebuie separat printr-un spaţiu de prima variabilă şi de ultimul
argument. Dacă există trebuie pus cel puţin un spaţiu
expr 
Orice număr de expresii AutoLISP care vor fi evaluate la executarea funcţiei
Dacă nu declaraţi argumente sau simboluri locale trebuie să furnizaţi un set paranteze după
funcţie.
Dacă un nume de argument sau simbol furnizat este duplicat, AutoLISP foloseşte prima
iniţializare a fiecărui nume şi ignoră celelalte iniţializări.
Valoare  returnată 
Rezultatul ultimei expresii evaluate.
Exemple 
_$ (defun-q my-startup (x)
(print (list x)))

124
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
MY-STARTUP
_$ (my-startup 5)
(5) (5)
Utilizaţi funcţia defun-q-list-ref pentru a afişa structura listei lui my-startup:
_$ (defun-q-list-ref 'my-startup)
((X) (PRINT (LIST X)))
Funcţii  similare 
Funcţia defun-q-list-ref şi defun-q-list-set.

defun-q-list-ref
 Descriere 
Afişează structura listei de definiţie a funcţiei creată cu defun-q.
  Apelare 
(defun-q-list-ref 'function )
Argumente 
function 
Un simbol care conţine numele funcţiei
Valoare  returnată 
Lista de definiţie a funcţiei; altfel nil, dacă argumentul nu este o listă.
Exemple 
Defineşte o funcţie folosind defun-q:
_$ (defun-q my-startup (x)
(print (list x)))
MY-STARTUP
Utilizaţi funcţia defun-q-list-ref pentru a afişa structura listei lui my-startup:
_$ (defun-q-list-ref 'my-startup)
((X) (PRINT (LIST X)))
Funcţii  similare 
Funcţia defun-q şi defun-q-list-set.

defun-q-list-set
 Descriere 
Setează valoarea simbolului la o funcţie definită printr-o listă.
  Apelare 
(defun-q-list-set 'sym list)
Argumente 
sym 
Un simbol care reprezintă numele funcţiei

125
PROIECTARE ASISTATĂ DE COMPUTER
list 
O listă care conţine expresii care vor fi incluse în funcţie
Valoare  returnată 
Sym definit
Exemple 
_$ (defun-q-list-set 'foo
'((x) x))
FOO
_$ (foo 3)
3
Următoarele exemple ilustrează utilizarea funcţiei defun-q-list-set pentru a combina două
funcţii într-o singură funcţie. Prima dată, din fereastra consolă Visual LiSP, definiţi două
funcţii cu defun-q:
_$ (defun-q s::startup (x)
(print x))
S::STARTUP
_$ (defun-q my-startup (x)
(print (list x)))
MY-STARTUP
Folosiţi funcţia defun-q-list-set pentru a combina aceste funcţii într-o singură funcţie:
_$ (defun-q-list-set 's::startup
(append
(defun-q-list-ref 's::startup)
(cdr (defun-q-list-ref
'my-startup))))
S::STARTUP
În continuare este prezentat modul în care cele două funcţii răspund individual, şi cum
lucrează funcţiile după ce au fost combinate folosind funcţia defun-q-list-set.
_$ (defun-q foo (x) (print
(list 'foo x)))
FOO
_$ (foo 1)
(FOO 1) (FOO 1)
_$ (defun-q bar (x) (print (list 'bar x)))
BAR
_$ (bar 2)
(BAR 2) (BAR 2)
_$ (defun-q-list-set 'foo
(append (defun-q-list-ref 'foo) (cdr (defun-q-list-ref 'bar))))
FOO
_$ (foo 3)
(FOO 3)
(BAR 3) (BAR 3)

126
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
Funcţii  similare 
Funcţia defun-q şi defun-q-list-ref

eval
 Descriere 
Returnează evaluarea unei expresii AutoLISP.
  Apelare 
(eval expr)
Argumente 
expr 
Expresia care va fi evaluată
Valoare  returnată 
Rezultatul expresiei după evaluare.
Exemple 
Prima dată setaţi variabilele următoare:
Command: (setq a 123)
123
Command: (setq b 'a)
A
Acum evaluaţi expresiile:
Command: (eval 4.0)
4.0
Command: (eval (abs -10))
10
Command: (eval a)
123
Command: (eval b)
123

lambda
 Descriere 
Defineşte o funcţie anonimă.
  Apelare 
(lambda arguments expr...)
În momentul când definirea a mai multor funcţii nu mai este justificată folosiţi funcţia lambda.
Această funcţie returnează valoarea ultimei expresii şi este des folosită în conjuncţie cu
funcţia apply şi/sau mapcar pentru executa o funcţie pe o listă.
Argumente 
arguments 

127
PROIECTARE ASISTATĂ DE COMPUTER
Argumentele trimise expresiei
expr 
O expresie AutoLISP
Valoare  returnată 
Valoarea ultimei expresii evaluate.
Exemple 
Command: (if (= 1 3) "YES!!" "no.")
"no."
_$ (apply '(lambda (x y
z)
(* x (- y z))
)
'(5 20 14)
)
30
_$ (setq counter 0)
(mapcar '(lambda (x)
(setq counter
(1+ counter))
(* x 5)
)
'(2 4 -6 10.2)
)
0
(10 20 -30 51.0)

progn
 Descriere 
Evaluează secvenţial fiecare expresie şi returnează rezultatul ultimei expresii evaluate.
  Apelare 
(progn [expr]...)
Puteţi folosi progn atunci când trebuie să evaluaţi mai multe expresii atunci când este
aşteptată pentru evaluare o singură expresie.
Argumente 
expr 
Una sau mai multe expresii AutoLISP
Valoare  returnată 
Valoarea ultimei expresii evaluate.
Exemple 
În mod normal funcţia if evaluează o singură expresie then dacă expresia de test a fost

128
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
evaluată la altceva decât nil. În exemplul următor se foloseşte progn pentru a evalua două
expresii care urmează după if.
(if (= a b)
(progn
(princ "\nA = B ")
(setq a (+ a 10) b (- b 10))
)
)
Funcţii  similare 
Funcţia if.

trace
 Descriere 
Funcţie adiţională pentru depanare în AutoLISP.
  Apelare 
(trace [function...])
Funcţia trace setează fanionul trace pentru funcţia specificată. De fiecare dată când funcţia
specificată este evaluată, fereastra trace apare având ca intrare această funcţie1 şi listează
rezultatul funcţiei.
Dacă Visual LISP este activ, ieşirea trace este trimisă ferestrei Visual LISP Trace. Dacă
Visual LISP nu este activ, ieşirea trace este trimisă ferestrei AutoCAD Command2.
O dată ce aţi pornit Visual LISP într-o sesiune AutoCAD, acesta rămâne activ până când
părăsiţi AutoCAD. De aceea, toate ieşirile trace rămân afişate în fereastra Visual LISP Trace
în timpul sesiunii AutoCAD. Închiderea sau părăsirea editorului Visual LISP , în timp ce
AutoCAD rulează, va închide doar fereastra de editare, punând Visual LISP în aşteptare;
acesta nefiind o închidere reală. Trebuie să redeschideţi Visual LISP pentru a vedea ieşirile în
ferestra Visual LISP Trace.
Folosiţi untrace pentru a opri activarea indicatorului de condiţie trace.
Argumente 
function 
Un simbol care conţine numele funcţiei. Dacă nu este furnizat nici un argument, funcţia
trace nu are efect
Valoare  returnată 
Numele ultimei funcţii trimise lui trace. Dacă nu este furnizat nici un argument, funcţia trace
returnează nil.
Exemple 
Defineşte o funcţie denumită foo şi setează fanionul trace pentru această funcţie.
Command: (defun foo (x) (if (> x 0) (foo (1- x))))
FOO

1
indentată la nivelul de adâncime al apelului
2
în fereastra de text AutoCAD

129
PROIECTARE ASISTATĂ DE COMPUTER
Command: (trace foo)
FOO
Apelează foo şi urmăreşte rezultatele:
Command: (foo 3)
Entering (FOO 3)
Entering (FOO 2) 
Entering (FOO 1)   
Entering (FOO 0)     
Result: nil     
Result: nil   
Result: nil 
Result: nil
Resetează fanionul trace prin apelarea funcţiei untrace.
Command: (untrace foo)
FOO
Funcţii  similare 
Funcţia untrace.

untrace
 Descriere 
Resetează fanionul trace pentru funcţia specificată.
  Apelare 
(untrace [function...])
Argumente 
function 
Un simbol care conţine numele funcţiei. Dacă nu este furnizat nici un argument, funcţia
untrace nu are efect
Valoare  returnată 
Numele ultimei funcţii trimise lui untrace. Dacă nu este furnizat nici un argument, funcţia
untrace returnează nil.
Exemple 
Resetează fanionul trace prin apelarea funcţiei untrace.
Command: (untrace foo)
FOO

7.1.6. Manipularea listelor

Nume funcţie Descriere


(acad_strlsort lst)
acad_strlsort
sortează o listă în ordine alfabetică

130
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
(append lst ...)
append
preia orice număr de liste şi le returnează ca o singură listă
(assoc item alist)
assoc caută într-o listă de asociere un element şi returnează lista asociată
acestuia
(car lst)
car
returnează primul element al listei
(cdr lst)
cdr
returnează lista specificată, fără primul element din listă
(cons new-first-element lst)
cons
constructorul principal de liste
(foreach name lst [expr ...])
foreach
evaluează expresiile pentru toţi membrii unei liste
(last lst)
last
returnează ultimul element al unei liste
(length lst)
length
returnează numărul de elemente dintr-o listă sub forma unui întreg
(list [expr ...])
list
preia orice număr de expresii şi le returnează sub forma unei liste
(listp item)
listp
verifică dacă argumentul este o listă
(mapcar function list1 ... listn)
returnează, sub forma unei liste, rezultatul aplicării unei funcţii asupra
mapcar
fiecărui element dintr-o listă, sau a listelor furnizate ca argument acestei
funcţii
(member expr lst)
member caută un element într-o listă şi returnează restul listei începând cu acel
element până la sfârşit
(nth n lst)
nth
returnează cel de-al n-lea element dintr-o listă
(reverse lst)
reverse
returnează lista cu elementele inversate
(subst newitem olditem lst)
subst caută într-o lista olditem1 şi returnează acea listă cu toate elementele
olditem găsite, înlocuite cu newitem
(vl-consp list-variable)
vl-consp
determină dacă o listă este sau nu nil
(vl-every predicate-functionlist [more-lists]...)
vl-every verifică dacă funcţia predicat returnează true pentru aplicarea ei asupra
fiecărui element furnizat ca argument
(vl-list* object [more-objects]...)
vl-list*
construieşte şi returnează o listă

1
practic înlocuieşte toate elementele identice cu argumentul cu o nouă valoare

131
PROIECTARE ASISTATĂ DE COMPUTER
(vl-list->string char-codes-list)
vl-list->string combină caracterele asociate cu o lista de numere întregi1 într-un şir de
caractere
(vl-list-length list-or-cons-object)
vl-list-length
calculează lungimea unei liste care nu este nil
(vl-member-if predicate-function list)
vl-member-if verifică dacă funcţia predicat aplicată elementelor listei returnează true
pentru cel puţin un element
(vl-member-if-not predicate-function list)
vl-member-if-
verifică dacă funcţia predicat aplicată elementelor listei returnează false
not
pentru cel puţin un element
(vl-position symbol list)
vl-position returnează indexul în listă al argumentului specificat, respectiv poziţia
elementului în listă
(vl-remove element-to-remove list)
vl-remove
elimină elemente din listă
(vl-remove-if predicate-functionlist)
vl-remove-if elimină din listă toate elementele care la aplicarea funcţiei predicat
returnează false
(vl-remove-if-not predicate-functionlist)
vl-remove-if-
elimină din listă toate elementele care la aplicarea funcţiei predicat
not
returnează true
(vl-some predicate-functionlist [more-lists]...)
vl-some verifică dacă funcţia predicat nu returnează nil pentru o combinaţie de
emente
(vl-sort list less?-function)
vl-sort
sortează elementele din listă conform funcţiei de comparare
(vl-sort-i list less?-function)
vl-sort-i
adaugă în AutoCAD comenzi create în command
(vl-string->list string)
vl-string->list
converteşte un şir de caractere într-o listă de numere asociate

1
cod ASCII

132
FUNCŢII DE BAZĂ – MANIPULAREA LISTELOR

acad_strlsort
 Descriere 
Sortează în ordine alfabetică o listă cu şiruri de caractere.
  Apelare 
(acad_strlsort list)
Argumente 
list 
Lista cu şirurile de caractere care vor fi ordonate
Valoare  returnată 
Lista list în ordine alfabetică. Dacă lista este invalidă sau dacă nu este suficientă memorie
pentru sortare acad_strlsort returnează nil.
Exemple 
Sortează în ordine alfabetică abrevierile lunilor anului:
Command: (setq mos '("Ian" "Feb" "Mar" "Apr" "Mai" "Iun" "Iul" "Aug"
"Sep" "Oct" "Noe" "Dec"))
("Ian" "Feb" "Mar" "Apr" "Mai" "Iun" "Iul" "Aug" "Sep" "Oct" "Noe" "Dec")
Command: (acad_strlsort mos)
("Apr" "Aug" "Dec" "Feb" "Ian" "Iul" "Iun" "Mar" "Mai" "Nov" "Oct" "Sep")

append
 Descriere 
Preia orice număr de liste şi le returnează ca o singură listă.
  Apelare 
(append [list ...])
Argumente 
list 
O listă
Valoare  returnată 
O listă care conţine toate argumentele adăugate primului. Dacă nu se furnizează nici un
argument, append returnează nil.
Exemple 
Command: (append '(a b) '(c d))
(A B C D)
Command: (append '((a)(b)) '((c)(d)))
((A) (B) (C) (D))

assoc
133
PROIECTARE ASISTATĂ DE COMPUTER
 Descriere 
Caută într-o listă de asociere un element specificat şi returnează elementul asociat lui în listă.
  Apelare 
(assoc element alist)
Argumente 
element 
Cheia1 unui element în lista de asociere
alist 
Lista de asociere în care va fi căutat elementul
Valoare  returnată 
Dacă operaţia se termină cu succes intrarea2 în alist. Dacă assoc nu găseşte elementul cheie
element în alist, returnează nil.
Exemple 
Command: (setq al '((name box) (width 3) (size 4.7263) (depth 5)))
((NAME BOX) (WIDTH 3) (SIZE 4.7263) (DEPTH 5))
Command: (assoc 'size al)
(SIZE 4.7263)
Command: (assoc 'weight al)
nil

car
 Descriere 
Returnează primul element dintr-o listă.
  Apelare 
(car list)
Argumente 
list 
O listă
Valoare  returnată 
Primul element din listă. Dacă lista e goală se returnează nil.
Exemple 
Command: (car '(a b c))
A
Command: (car '((a b) c))
(A B)
Command: (car '())
nil

1
simbolul asociat
2
elementul asociat din alist

134
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR

cdr
 Descriere 
Returnează o listă fără primul element.
  Apelare 
(cdr list)
Argumente 
list 
O listă
Valoare  returnată 
O listă care conţine toate elementele cu excepţia primului element1. Dacă lista este goală cdr
returnează nil.
Exemple 
Command: (cdr '(a b c))
(B C)
Command: (cdr '((a b) c))
(C)
Command: (cdr '())
nil
Command: (cdr '(a . b))
B
Command: (cdr '(1 . "Text"))
"Text"

cons
 Descriere 
Adaugă un element la începutul listei sau contruieşte o listă cu punct2.
  Apelare 
(cons new-first-element list-or-atom)
Argumente 
new‐first‐element 
Element care va fi adăugat la începutul listei. Acest element poate fi un atom sau o listă
list‐or‐atom 
O listă sau un atom
Valoare  returnată 
Valoarea returnată depinde de tipul datei list-or-atom. Dacă list-or-atom este o listă, cons
returnează această listă cu new-first-element adăugat ca prim element în listă. Dacă list-or-

1
Dacă lista este o listă cu punct (construită cu cons), atunci cdr returnează cel de-al doilea element fără
însă să îl includă într-o listă
2
de exemplu (100 . "AcDbEntity")

135
PROIECTARE ASISTATĂ DE COMPUTER
atom este un atom, cons returnează o listă cu punct formată din elementele new-first-
element şi list-or-atom.
Exemple  
Command: (cons 'a '(b c d))
(A B C D)
Command: (cons '(a) '(b c d))
((A) B C D)
Command: (cons 'a 2)
(A . 2)

foreach
 Descriere 
Evaluează expresiile pentru toţi membrii listei.
  Apelare 
(foreach name list [expr...])
Funcţia foreach parcurge lista asociind ficare element cu o variabilă şi evaluează fiecare
expresie pentru fiecare element din listă. Poate fi furnizat orice număr de expresii.
Argumente 
name 
Variabila care va fi asignată elementului din listă
list 
Lista care va fi parcursă şi evaluată
expr 
Expresia care va fi evaluată pentru fiecare element din lista list
Valoare  returnată 
Rezultatul ultimei expresii expr evaluate. Dacă nu este furnizată nici o expresie, foreach
returnează nil.
Exemple 
Listează fiecare element din listă:
Command: (foreach n '(a b c) (print n))
A
B
CC
foreach listează fiecare element din listă şi returnează C, ultimul element. Această comandă
este echivaleantă cu următoarea secvenţă de comenzi, dar foreach returnează doar rezultatul
ultimei expresii evaluate:
(print a)
(print b)
(print c)

last
136
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
 Descriere 
Returnează ultimul element dintr-o listă.
  Apelare 
(last lst)
Argumente 
lst 
O listă
Valoare  returnată 
Un atom sau o listă.
Exemple 
Command: (last '(a b c d e))
E
Command: (last '(a b c (d e)))
(D E)

length
 Descriere 
Returnează numărul de elemente din listă sub forma unui număr întreg.
  Apelare 
(length lst)
Argumente 
lst 
O listă
Valoare  returnată 
Un număr întreg
Exemple 
Command: (length '(a b c d))
4
Command: (length '(a b (c d)))
3
Command: (length '())
0

list
 Descriere 
Preia orice număr de expresii şi le combină într-o singură listă.
  Apelare 
(list [expr...])

137
PROIECTARE ASISTATĂ DE COMPUTER
Argumente 
expr 
O expresie AutoLISP
Valoare  returnată 
O listă. Dacă nu este furnizată nici o listă list returnează nil.
Exemple 
_$ (list 'a 'b 'c)
(A B C)
_$ (list 'a '(b c) 'd)
(A (B C) D)
_$ (list 3.9 6.7)
(3.9 6.7)
Ca o alternativă de a folosi funcţia list, puteţi folosi funcţia quote dacă nu aveţi variabile în
listă. Caracterul (') este definit de funcţia quote.
_$ '(3.9 6.7)means the same as (list 3.9 6.7)
Aceasta poate fi folosită pentru a crea liste de asociere şi pentru a defini puncte.
Funcţii  similare 
Funcţiile quote, vl-list şi vl-list-length.

listp
 Descriere 
Verifică dacă un item este listă.
  Apelare 
(listp item)
Argumente 
item 
Un atom, o listă sau o expresie
Valoare  returnată 
T dacă item este o listă, altfel nil. Deoarece nil poate fi şi atom şi listă, funcţia listp returnează
T dacă are ca argument nil.
Exemple 
Command: (listp '(a b c))
T
Command: (listp 'a)
nil
Command: (listp 4.343)
nil
Command: (listp nil)
T
Command: (listp (setq v1 '(1 2 43)))

138
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
T
Funcţii  similare 
Funcţia vl-list şi vl-list-length.

mapcar
 Descriere 
Returnează o listă ca rezultat a execuţiei unei funcţii cu o listă, sau liste, ca argument.
  Apelare 
(mapcar function list1... listn)
Argumente 
function 
O funcţie
list1 … listn 
una sau mai multe liste. Numărul de liste trebuie să fie egal cu numărul de argumente
cerute de funcţia function
Valoare  returnată 
O listă.
Exemple 
Command: (setq a 10 b 20 c 30)
30
Command: (mapcar '1+ (list a b c))
(11 21 31)
Aceasta este echivalent cu seria următoare de expresii, diferenţa constând în faptul că mapcar
returnează ca rezultat o listă:
(1+ a)
(1+ b)
(1+ c)
Funcţia lambda poate să specifice o funcţie anonimă pentru a fi executată de mapcar.
Aceasta este folositoare când unele dintre argumentele funcţiei sunt constante sau sunt
furnizate cu alte medii. Exemplul următor, introdus de la fereastra Visual LISP Console,
demonstrează folosirea funcţiei lambda cu funcţia mapcar:
_$ (mapcar '(lambda (x)
(+ x 3)
)
'(10 20 30)
)
(13 23 33)

member
 Descriere 

139
PROIECTARE ASISTATĂ DE COMPUTER
Caută o expresie într-o listă şi returnează lista de la prima apariţie a expresiei, inclusiv, până la
sfârşitul acesteia.
  Apelare 
(member expr lst)
Argumente 
expr 
Expresia care va fi căutată
lst 
lista în care va fi căutată expresia
Valoare  returnată 
O listă dacă expresia este găsită în lst. Altfel member returnează nil.
Exemple 
Command: (member 'c '(a b c d e))
(C D E)
Command: (member 'q '(a b c d e))
nil

nth
 Descriere 
Returnează al n-lea element al unei liste.
  Apelare 
(nth n lst)
Argumente 

Numărul elementului dorit să fie returnat din listă1
lst 
Lista
Valoare  returnată 
Cel de-al n-lea element din listă. Dacă n este mai mare decât numărul elementelor listei, nth
returnează nil.
Exemple 
Command: (nth 3 '(a b c d e))
D
Command: (nth 0 '(a b c d e))
A
Command: (nth 5 '(a b c d e))
nil

1
zero este considerat primul element

140
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR

reverse
 Descriere 
Returnează copia unei liste având elementele inversate.
  Apelare 
(reverse lst)
Argumente 
lst 
O listă
Valoare  returnată 
O listă
Exemple 
Command: (reverse '((a) b c))
(C B (A))

subst
 Descriere 
Caută într-o listă un element specificat şi returnează o copie a listei având elementele găsite
înlocuite cu un element specificat.
  Apelare 
(subst newitem olditem lst)
Argumente 
newitem 
Un atom sau o listă
olditem 
Un atom sau o listă
lst 
O listă
Valoare  returnată 
O listă daca toate elementele olditem sunt înlocuite cu newitem. Dacă olditem nu este găsit
în lista lst atunci subst returnează lista neschimbată.
Exemple 
Command: (setq sample '(a b (c d) b))
(A B (C D) B)
Command: (subst 'qq 'b sample)
(A QQ (C D) QQ)
Command: (subst 'qq 'z sample)
(A B (C D) B)
Command: (subst 'qq '(c d) sample)
(A B QQ B)

141
PROIECTARE ASISTATĂ DE COMPUTER
Command: (subst '(qq rr) '(c d) sample)
(A B (QQ RR) B)
Command: (subst '(qq rr) 'z sample)
(A B (C D) B)
Când este folosit în conjuncţie cu assoc, subst furnizează un mod convenabil de a înlocui
valoarea asociată cu o cheie în lista de asociere, aspect demonstrat prin apelurile următoare ale
funcţiei:
Setează variabilele din lista asociată:
Command: (setq who '((first john) (mid q) (last public)))
((FIRST JOHN) (MID Q) (LAST PUBLIC))
Setările următoare setează vechiul (FIRST JOHN) la noua valoare (FIRST J).
Command: (setq old (assoc 'first who) new '(first j))
(FIRST J)
În final, se înlocuieşte valoarea primului item din lista asociată:
Command: (subst new old who)
((FIRST J) (MID Q) (LAST PUBLIC))

vl-consp
 Descriere 
Determină dacă o listă este nil.
  Apelare 
(vl-consp list-variable)
vl-consp determină dacă o variabilă conţine o listă definită corect.
Argumente 
list‐variable 
O listă
Valoare  returnată 
T dacă lista furnizată este validă sau nu este nil, nil altfel.
Exemple 
_$ (vl-consp nil)
nil
_$ (vl-consp t)
nil
_$ (vl-consp (cons 0 "LINE"))
T

vl-every
 Descriere 
Verifică dacă funcţia predicat este validă pentru fiecare combinaţie de elemente.
  Apelare 

142
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
vl-every predicate-function list [list]...)
vl-every preia primul element al fiecărei liste furnizate ca argument pentru funcţia de test; se
continuă cu următorul element din fiecare listă, ş.a.m.d. Evaluarea se opeşte de îndată ce
elementele uneia din liste se termină.
Argumente 
predicate‐function 
Funcţia de test. Aceasta poate fi orice funcţie care acceptă mai multe argumente de tip
listă, furnizate împreună lui vl-every, şi returnează T pentru orice condiţii utilizator
specificate. Valoarea funcţiei predicate-funcţion poate fi de tipul:
o un simbol1
o '(LAMBDA (A1 A2) ...)
o (FUNCTION (LAMBDA (A1 A2) ...))
list 
Expresia care va fi testată
Valoare  returnată 
T, dacă predicate-function returnează o valoare diferită de nil pentru fiecare combinaţie de
elemente; altfel nil.
Exemple 
Verifică dacă exită vreun fişier gol în directorul curent:
_$ (vl-every '(lambda (fnm) (> (vl-file-size fnm) 0)) (vl-directory-filesnil nil 1) )
T
Verifică dacă lista de numere din NLST este ordonată după '<=':
_$ (setq nlst (list 0 2 pi pi 4))
(0 2 3.14159 3.14159 4)
_$ (vl-every '<= nlst (cdr nlst))
T
Compară rezultatele următoarelor expresii:
_$ (vl-every '= '(1 2) '(1 3))
nil
_$ (vl-every '= '(1 2) '(1 2 3))
T
Prima expresie returnează nil deoarece vl-every compară al doilea element din fiecare listă şi
ele nu sunt egale numeric. A doua expresie returnează T deaorece vl-every opreşte
compararea elementelor după ce a prelucrat toate elemenetele în liste scurte, liste care au fost
egale numeric. Dacă se ajunge la sfârşitul listei funcţia vl-every returnează o valoare diferită
de nil.
Următorul exemplu demonstrează rezultatul evaluării de către funcţia vl-every a unei liste
care conţine numere întregi şi a unei liste care este nil:
_$ (setq alist (list 1 2 3 4))
(1 2 3 4)
_$ (setq junk nil)
nil

1
nume de funcţie

143
PROIECTARE ASISTATĂ DE COMPUTER
_$ (vl-every '= junk alist)
T
Valoarea returnată este T deoarece vl-every răspunde la lista nil ca şi cum ar fi ajuns la
sfârşitul listei, chiar dacă funcţia predicat nu a fost aplicată nici unui element. Deci când
sfârşitul unei liste este atins, vl-every întoarce valoare diferită de nil.

vl-list*
 Descriere 
Construieşte şi returnează o listă.
  Apelare 
(vl-list* object[object]...)
Argumente 
object 
Orice obiect LISP
Valoare  returnată 
Funcţia vl-list* este similară funcţiei list, dar ea va plasa ultimul object în finalul cdr al listei
rezultate. Dacă ultimul argument al vl-list* este un atom, rezultatul este o listă cu punct. Dacă
ultimul argument este o listă, elementele acesteia sunt elemente care sunt adăugate
argumentelor anterioare listei construite. Valoarea returnată vl-list* de poate fi:
• Un atom, dacă un singur object de tip atom este specificat.
• O pereche cu punct, dacă toate argumentele object sunt atomi.
• O listă cu punct, dacă ultimul argument este un atom şi niciuna din condiţiile
anterioare nu sunt true.
• O listă, dacă nici una din condiţiile anterioare nu este true.

Exemple 
_$ (vl-list* 1)
1
_$ (vl-list* 0 "text")
(0 . "TEXT")
_$ (vl-list* 1 2 3)
(1 2 . 3)
_$ (vl-list* 1 2 '(3 4))
(1 2 3 4)
Funcţii  similare 
Funcţia list.

vl-list->string
 Descriere 

144
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
Combină caractere, asociate unor numere întregi1, într-un şir de caractere.
  Apelare 
(vl-list->string char-codes-list)
Argumente 
char‐codes‐list 
Un număr întreg pozitiv. Fiecare număr întreg trebuie să fie mai mic decât 256
Valoare  returnată 
Un şir de caractere, unde fiecare caracter se bazează2 pe unul din numerele furnizate în char-
codes-list.
Exemple 
_$ (vl-list->string nil)
""
_$ (vl-list->string '(49 50))
"12"
Funcţii  similare 
Funcţia vl-string->list.

vl-list-length
 Descriere 
Calculează lungimea unei liste3.
  Apelare 
(vl-list-length list-or-cons-object)
Argumente 
list‐or‐cons‐object 
O listă nenulă sua o listă cu punct
Valoare  returnată 
Un număr întreg care specifică lungimea listei, dacă argumentul furnizat nu este o listă; altfel
vl-list-length returnează nil dacă ergumentul furnizat este o listă cu punct.
Compatibilitate: Funcţia vl-list-length returnează nil pentru o listă cu punct, când funcţia
LISP Common corespunzătoare returnează un mesaj de eroare dacă argumentul furnizat este
o listă cu punct.
Exemple 
_$ (vl-list-length nil)
0
_$ (vl-list-length '(1 2))
2

1
cod ASCII
2
este asociat cu
3
care nu este nil

145
PROIECTARE ASISTATĂ DE COMPUTER
_$ (vl-list-length '(1 2 . 3))
nil
Funcţii  similare 
Funcţia listp.

vl-member-if
 Descriere 
Determină dacă predicatul este adevărat pentru unul din membrii listei.
  Apelare 
(vl-member-if predicate-functionlist)
Funcţia trimite fiecare element din listă funcţiei specificate în predicate-functionlist. Dacă
predicate-functionlist returnează o valoare nenulă1, vl-member-if returnează restul listei, la
fel cu funcţia member.
Argumente 
predicate‐functionlist 
Funcţia de test. Aceasta poate fi orice funcţie care acceptă un singur argument şi returnează
T pentru orice condiţie specificată de utilizator. Valoarea lui poate lua una din următoarele
forme:
o un simbol2
o '(LAMBDA (A1 A2) ...)
o (FUNCTION (LAMBDA (A1 A2) ...))
Valoare  returnată 
O listă, care are ca prim element primul element din argument care trece testul şi conţine toate
elementele care urmează acestuia în argumentul original. Dacă nici un argument nu trece
testul, vl-member-if returnează nil.
Exemple 
Comanda următoare desenează o linie:
_$ (COMMAND "_.LINE" '(0 10) '(30 50) nil)
nil
Comanda următoare utilizează vl-member-if pentru a returna lista descriptivă asociată
entităţii, dacă entitatea este o linie:
_$ (vl-member-if '(lambda (x) (= (cdr x) "AcDbLine")) (entget (entlast)))
((100 . "AcDbLine") (10 0.0 10.0 0.0) (11 30.0 50.0 0.0) (210 0.0 0.0 1.0))
Funcţii  similare 
Funcţia vl-member-if-not.

vl-member-if-not
 Descriere 

1
care nu este nil, non nil
2
nume de funcţie

146
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
Determină dacă predicatul este nil pentru unul din membrii listei.
  Apelare 
(vl-member-if-not predicate-functionlist)
Funcţia trimite fiecare element din listă funcţiei specificate în predicate-functionlist. Dacă
predicate-functionlist returnează o valoare nenulă1, vl-member-if returnează restul listei, la
fel cu funcţia member.
Argumente 
predicate‐functionlist 
Funcţia de test. Aceasta poate fi orice funcţie care acceptă un singur argument şi returnează
T pentru orice condiţie specificată de utilizator. Valoarea lui poate lua una din următoarele
forme:
o un simbol2
o '(LAMBDA (A1 A2) ...)
o (FUNCTION (LAMBDA (A1 A2) ...))
Valoare  returnată 
O listă care are ca prim element primul element din argumentul predicate-functionlist care
nu trece testul şi conţine toate elementele care urmează acestuia în argumentul original. Dacă
toate argumentele trec testul, vl-member-if-not returnează nil.
Exemple 
_$ (vl-member-if-not 'atom '(1 "Str" (0 . "line") nil t))
((0 . "line") nil T)

Funcţii similare
Funcţia vl-member-if.

vl-position
 Descriere 
Returnează indexul unui element specificat.
  Apelare 
(vl-position symbol list)

Argumente 
symbol 
Orice simbol AutoLISP
list 
O listă nenulă
Valoare  returnată 
Un număr întreg care indică poziţia lui symbol în listă; altfel nil dacă symbol nu se regăseşte

1
care nu este nil, non nil
2
nume de funcţie

147
PROIECTARE ASISTATĂ DE COMPUTER
în listă1.
Exemple 
_$ (setq stuff (list "a" "b" "c" "d" "e"))
("a" "b" "c" "d" "e")
_$ (vl-position "c" stuff)
2

vl-remove
 Descriere 
Elimină elemente din listă.
  Apelare 
(vl-remove element-to-remove list)
Argumente 
element‐to‐remove 
Valoarea elementului care trebuie eliminat din listă. Poate fi orice tip de dată AutoLISP.
list 
O listă
Valoare  returnată 
Lista list fără elementele egale cu element-to-remove.
Exemple 
_$ (vl-remove pi (list pi t 0 "abc"))
(T 0 "abc")

vl-remove-if
 Descriere 
Returnează toate elementele din lista furnizată care eşuează la testul funcţiei2.
  Apelare 
(vl-remove-if predicate-function list)
Argumente 
predicate‐functionlist 
Funcţia de test. Aceasta poate fi orice funcţie care acceptă un singur argument şi returnează
T pentru orice condiţie specificată de utilizator. Valoarea lui poate lua una din următoarele
forme:
o un simbol3
o '(LAMBDA (A1 A2) ...)

1
numerotarea elementelor din listă începe cu 0, deci primul element are index 0, cel de-al doilea are
index 1, etc.
2
rezultatul aplicării funcţiei asupra acestora este nil
3
nume de funcţie

148
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
o (FUNCTION (LAMBDA (A1 A2) ...))
list 
Lista care va fi testată
Valoare  returnată 
O listă care conţine toate elementele din list pentru care vl-remove-if returnează nil.
Exemple 
_$ (vl-remove-if 'vl-symbolp (list pi t 0 "abc"))
(3.14159 0 "abc")

vl-remove-if-not
Descriere 
Returnează toate elementele din lista furnizată care trec la testul funcţiei1.
  Apelare 
(vl-remove-if-not predicate-function list)
Argumente 
predicate‐functionlist 
Funcţia de test. Aceasta poate fi orice funcţie care acceptă un singur argument şi returnează
T pentru orice condiţie specificată de utilizator. Valoarea lui poate lua una din următoarele
forme:
o un simbol2
o '(LAMBDA (A1 A2) ...)
o (FUNCTION (LAMBDA (A1 A2) ...))
list 
Lista care va fi testată
Valoare  returnată 
O listă care conţine toate elementele din list pentru care vl-remove-if nu returnează nil.
Exemple 
_$ (vl-remove-if-not 'vl-symbolp (list pi t 0 "abc"))
(T)

vl-some
 Descriere 
Verifică dacă predicatul nu este nil pentru o combinaţie de elemente.
  Apelare 
(vl-some predicate-function list [list]...)
Argumente 
predicate‐functionlist 

1
rezultatul aplicării funcţiei asupra acestora este nu este nil
2
nume de funcţie

149
PROIECTARE ASISTATĂ DE COMPUTER
Funcţia de test. Aceasta poate fi orice funcţie care acceptă mai multe argumente ca liste şi
returnează T pentru orice condiţie specificată de utilizator. Valoarea lui poate lua una din
următoarele forme:
o un simbol1
o '(LAMBDA (A1 A2) ...)
o (FUNCTION (LAMBDA (A1 A2) ...))
list 
Lista care va fi testată
Funcţia preia primul element din fiecare funcţie furnizată şi îl furnizează ca argument funcţiei
de test, apoi următorul element din fiecare listă, ş.a.m.d. Evaluarea se opreşte când predicatul
returnează o valoare nenulă pentru o combinaţie a argumentelor sau când toate elementele
uneia din liste au fost procesate.
Valoare  returnată 
Valoarea predicatului, dacă funcţia predicate-functionlist returnează altceva decât nil; altfel
nil.
Exemple 
Exemplul următor verifică dacă nlst2 are elemente egale în secvenţa următoare:
_$ (setq nlst (list 0 2 pi pi 4))
(0 2 3.14159 3.14159 4)
_$ (vl-some '= nlst (cdr nlst))
T

vl-sort
Descriere
Sortează elementele dintr-o listă conform unei funcţii de sortare.
  Apelare 
(vl-sort list comparison-function)
Argumente 
list 
O listă
comparison‐function 
O funcţie de sortare. Este acceptată orice funcţie care acceptă două argumente şi returnează
T3 dacă primul argument îl precede pe al doilea în ordinea de sortare. Valoarea lui poate
comparison-function lua una din următoarele forme:
o un simbol4
o '(LAMBDA (A1 A2) ...)
o (FUNCTION (LAMBDA (A1 A2) ...))
Valoare  returnată 

1
nume de funcţie
2
o listă de numere
3
sau orice valoare nenulă
4
nume de funcţie

150
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR
O listă conţinând elementele din list în sortate conform comparison-function. Elementele
duplicat pot fi eliminate din listă.
Exemple 
Sortează o listă de numere:
_$ (vl-sort '(3 2 1 3) '<)
(1 2 3)
Se observă că lista rezultată conţine doar elementele neduplicate.
Sortează o listă de puncte 2D după coordonata y:
_$ (vl-sort '((1 3) (2 2) (3 1))(function (lambda (e1 e2)(< (cadr e1)(cadr e2)))))
((3 1) (2 2) (1 3))
Sortează o listă de simboluri:
_$ (vl-sort '(a d c b a) '(lambda (s1 s2) (< (vl-symbol-name s1) (vl-symbol-name s2)) )
)
(A B C D)

vl-sort-i
 Descriere 
Sortează elementele dintr-o listă conform unei funcţii de sortare şi returnează indexul
elementelor.
  Apelare 
(vl-sort-i list comparison-function)
Argumente 
list 
O listă
comparison‐function 
O funcţie de sortare. Este acceptată orice funcţie care acceptă două argumente şi returnează
T1 dacă primul argument îl precede pe al doilea în ordinea de sortare. Valoarea lui poate
comparison-function lua una din următoarele forme:
o un simbol2
o '(LAMBDA (A1 A2) ...)
o (FUNCTION (LAMBDA (A1 A2) ...))
Valoare  returnată 
O listă conţinând elementele din list în sortate conform comparison-function. Elementele
duplicat pot fi eliminate din listă.
Exemple 
Sortează o listă de caractere în ordine descrescătoare:
_$ (vl-sort-i '("a" "d" "f" "c") '>)
(2 1 3 0)
Elementele sortate din listă sunt “f” “d” “c” “a”; “f” este cel de-al treilea element în lista

1
Sau orice valoare nenulă
2
nume de funcţie

151
PROIECTARE ASISTATĂ DE COMPUTER
iniţială, deci index 2, “d” este al doilea element, deci index 1, ş.a.m.d.
Sortează o listă de caractere în ordine crescătoare:
_$ (vl-sort-i '(3 2 1 3) '<)
(2 1 3 0)
Se observă că indexul elementului 3 apare doar o dată în lista rezultat.
Sortează o listă de puncte 2D după coordonata y
_$ (vl-sort-i '((1 3) (2 2) (3 1)) (function
(lambda (e1 e2)(< (cadr e1)(cadr e2)) ) ) )
(2 1 0)
Sortează o listă de simboluri:
_$ (vl-sort-i '(a d c b a) '(lambda (s1 s2)
(< (vl-symbol-name s1) (vl-symbol-name s2)) ) )
(4 0 3 2 1)
Se observă că ambele elemente a sunt în lista rezultat.

vl-string->list
 Descriere 
Converteşte un şir de caractere într-o listă cu codurile numerice ASCII asociate.
  Apelare 
(vl-string->list string)
Argumente 
string 
Un şir de caractere
Valoare  returnată 
Funcţia returnează o listă, fiecare element fiind un număr întreg care reprezintă codul
caracterului corespunzător din listă, conform standardului ASCII.
Exemple 
_$ (vl-string->list "")
nil
_$ (vl-string->list "12")
(49 50)
Funcţii  similare 
Funcţia vl-list->string.

7.1.7. Manipularea şirurilor

Nume funcţie Descriere


(read [string])
read
returnează prima listă sau atom din şirul de caractere furnizat

152
FUNCŢII DE BAZĂ – MANIPULAREA ŞIRURILOR
(strcase string [which])
strcase returnează şirul de caractere furnizat având caracterele convertite în
caractere minuscule sau majuscule
(strcat [string1 [string2] ...)
strcat returnează un şir de caractere obţinut prin concatenarea mai multor
şiruri de caractere
(strlen [string] ...)
strlen returnează un număr întreg pozitiv care reprezintă numărul de
caractere din şir
(substr string start [length])
substr
returnează un subşir al unui şir de caractere
(vl-prin1-to-string object)
vl-prin1-to-string returnează data AutoLISP furnizată, ca şir de caractere, ca un rezultat
al funcţiei prin1
(vl-princ-to-string object)
vl-princ-to-string returnează data AutoLISP furnizată, ca şir de caractere, ca un rezultat
al funcţiei princ
(vl-string->list string)
vl-string->list
returnează un şir de caractere ca o listă de coduri caracter
(vl-string-elt string position)
vl-string-elt returnează codul ASCII pentru caracterul din poziţia specificată
pentru şirul de caractere furnizat
(vl-string-left-trim character-setstring)
vl-string-left-trim
elimină caracterele specificate de la începutul şirului de caractere
(vl-string-mismatch str1str2 [pos1pos2ignore-case-p])
vl-string-mismatch returnează lungimea celui mai mare subşir comun celor două şiruri de
caractere din poziţia specificată
(vl-string-position char-codestr [start-pos [from-end-p]])
vl-string-position caută un caracter specificat prin codul lui ASCII, în şirul de caractere
specificat
(vl-string-right-trim character-setstring)
vl-string-right-trim
elimină caracterele specificate de la sfârşitul şirului de caractere
(vl-string-search patternstring [start-pos])
vl-string-search
caută în şirul de caractere un subşir specificat
(vl-string-subst new-strpatternstring [start-pos])
vl-string-subst
substituie un subşir cu un altul în sirul de caractere furnizat
(vl-string-translate source-setdest-setstr)
vl-string-translate
înlocuieşte caracterele dintr-un şir cu un set de caractere specificat
(vl-string-trim char-setstr)
vl-string-trim elimină caracterele specificate de la începutul şi sfârşitul unui şirede
caractere
(wcmatch string pattern)
wcmatch
verifică dacă un şir de caractere se potriveşte unui şablon

153
FUNCŢII DE BAZĂ – MANIPULAREA LISTELOR

read
Descriere 
Returnează prima listă sau atom dintr-un şir.
  Apelare 
(read [string])
Funcţia read preia orice şir de caractere sau orice tip de dată AutoLISP şi returnează prima
expresie din acestea convertită în tipul de dată corespunzător.
Argumente 
string 
Un listă sau un atom. Şirul de caractere poate să nu conţină spaţii, exceptând cazul când
conţine liste sau şiruri de caractere
Valoare  returnată 
Funcţia read returnează aceste argumente convertite în tipul corespunzător de dată. Dacă nu
este furnizat nici un argument se returnează nil.
Dacă şirul conţine expresii AutoLISP multiple separate prin delimitatori ca: spaţiu, linie nouă,
tab sau paranteze doar prima expresie este returnată.
Exemple 
Command: (read "hello")
HELLO
Command: (read "hello there")
HELLO
Command: (read "\"Hi Y'all\"")
"Hi Y'all"
Command: (read "(a b c)")
(A B C)
Command: (read "(a b c) (d)")
(A B C)
Command: (read "1.2300")
1.23
Command: (read "87")
87
Command: (read "87 3.2")
87

strcase
Descriere 
Returnează un şir cu toate caracerele convertite în majuscule sau minuscule.
  Apelare 
(strcase string [which])

154
FUNCŢII DE BAZĂ – MANIPULAREA ŞIRURILOR
Argumente 
string 
Un şir de caractere
whitch 
Dacă este specificat ca T, atunci toate caracterele literare din şir sunt convertite în caractere
minuscule. Altfel caracterele sunt convertite în caractere majuscule
Valoare  returnată 
Un şir.
Exemple 
Command: (strcase "Sample")
"SAMPLE"
Command: (strcase "Sample" T)
"sample"
Funcţia strcase va converti caracterele conform setului curent de caractere configurat.

strcat
Descriere 
Returnează un şir de caractere obţinut prin concatenarea mai multor şiruri de caractere.
  Apelare 
(strcat [string[string]...])
Argumente 
string 
Un şir de caractere
Valoare  returnată 
Un şir de caractere. Dacă nu este furnizat nici un argument funcţia returnează un şir de
lungime zero.
Exemple 
Command: (strcat "a" "bout")
"about"
Command: (strcat "a" "b" "c")
"abc"
Command: (strcat "a" "" "c")
"ac"
Command: (strcat)
""

strlen
Descriere 
Returnează numărul de caractere din şirul de caractere sub forma unui număr întreg.

155
PROIECTARE ASISTATĂ DE COMPUTER
  Apelare 
(strlen [string]...)
Argumente 
string 
Un şir de caractere
Valoare  returnată 
Un număr întreg. Dacă sunt furnizate mai multe şiruri de caractere ca argument strlen
returnează suma lungimilor acestora. Dacă nu este furnizat nici un argument sau este furnizat
un şir de caractere de lungime zero, strlen returnează 0.
Exemple 
Command: (strlen "abcd")
4
Command: (strlen "ab")
2
Command: (strlen "one" "two" "four")
10
Command: (strlen)
0
Command: (strlen "")
0

substr
 Descriere 
Returnează un subşir al şirului de caractere furnizat.
  Apelare 
(substr string start [length])
Argumente 
string 
Un şir de caractere
start 
Un număr întreg pozitiv care indică poziţia de start în şirul de caractere. Primul caracter
din şir are poziţia 11.
lenght 
Un număr întreg pozitiv care specifică numărul de caractere care vor fi căutate în şirul de
caractere furnizat. Dacă nu este furnizat acset argument subşirul continuă până la sfârşitul
şirului de caractere string.
Valoare  returnată 
Un şir de caractere.

1
primul caracter din şir are poziţia 1, deci numerotarea începe de la 1. Aceasta diferă la alte funcţii (de
exemplu nth sau ssname) la care primul element are poziţia 0

156
FUNCŢII DE BAZĂ – MANIPULAREA ŞIRURILOR
Exemple 
Command: (substr "abcde" 2)
"bcde"
Command: (substr "abcde" 2 1)
"b"
Command: (substr "abcde" 3 2)
"cd"

vl-prin1-to-string
 Descriere 
Returnează data AutoLISP furnizată ca şir de caractere, ca un rezultat al funcţiei prin1.
  Apelare 
(vl-prin1-to-string data)
Argumente 
string 
Orice tip de dată AutoLISP
Valoare  returnată 
Un şir care conţine reprezentarea lui data, afişat prin prin1.
Exemple 
_$ (vl-prin1-to-string "abc")
"\"abc\""
_$ (vl-prin1-to-string "c:\\acadwin")
"\"C:\\\\ACADWIN\""
_$ (vl-prin1-to-string 'my-var)
"MY-VAR"
Funcţii  similare 
Funcţia vl-princ-to-string.

vl-princ-to-string
  Descriere 
returnează data AutoLISP furnizată, ca şir de caractere, ca un rezultat al funcţiei princ.
  Apelare 
(vl-princ-to-string data)
Argumente 
string 
Orice tip de dată AutoLISP
Valoare  returnată 
Un şir care conţine reprezentarea lui data, afişat prin princ.
Exemple 

157
PROIECTARE ASISTATĂ DE COMPUTER
_$ (vl-princ-to-string "abc")
"abc"
_$ (vl-princ-to-string "c:\\acadwin")
"C:\\ACADWIN"
_$ (vl-princ-to-string 'my-var)
"MY-VAR"
Funcţii  similare 
Funcţia vl-princ-to-string.

vl-string->list
 Descriere 
Funcţia este tratată anterior. Vezi indexul funcţiilor de la sfârşitul anexei.

vl-string-elt
Descriere 
Returnează reprezentarea ASCII1 a caracterului din şir a cărui poziţie a fost specificată.
  Apelare 
(vl-string-elt string position)
Argumente 
string 
Un şir de caractere
position 
Poziţia în şirul de caractere. Primul caracter are poziţie zero. Se trimite un mesaj de eroare
dacă poziţia specificată depăşeşte lungimea şirului de caractere
Valoare  returnată 
Un număr întreg pozitiv care reprezintă codul ASCII al caracterului specificat prin poziţie.
Exemple 
_$ (vl-string-elt "May the Force be with you" 8)
70

vl-string-left-trim
Descriere 
Elimină caracterele specificate de la începutul şirului de caractere.
  Apelare 
(vl-string-left-trim character-set string)
Argumente 
character‐set 
1
codul ASCII

158
FUNCŢII DE BAZĂ – MANIPULAREA ŞIRURILOR
Un şir de caractere care conţine caracterele care vor fi eliminate
string 
Un şir de caractere
Valoare  returnată 
Un şir de caractere obţinut din şirul de caractere furnizat prin eliminarea caracterelor
character-set.
Exemple 
_$ (vl-string-left-trim "\t\n" "\n\t STR ")
"STR "
_$ (vl-string-left-trim "12456789" "12463CPO is not R2D2")
"3CPO is not R2D2"
_$ (vl-string-left-trim " " " There are too many spaces here")
"There are too many spaces here"

vl-string-mismatch
Descriere 
Returnează lungimea celui mai mare subşir comun pentru două şiruri pentru o poziţie
specificată.
  Apelare 
(vl-string-mismatch str1 str2 [pos1 pos2 ignore-case-p])
Argumente 
str1 
Primul şir de caractere care va fi comparat
str2 
Al doilea şir de caractere care va fi comparat
pos1 
Un număr întreg care specifică poziţia de unde începe compararea pentru primul şir; 0 dacă
este omis
pos2 
Un şir de caractere
ignore‐case‐p 
Un şir de caractere
Valoare  returnată 
Funcţia returnează o listă, fiecare element fiind un număr întreg care reprezintă codul
caracterului corespunzător din listă, conform standardului ASCII.
Exemple 
_$ (vl-string->list "")
nil
_$ (vl-string->list "12")
(49 50)
Funcţii  similare 

159
PROIECTARE ASISTATĂ DE COMPUTER
Funcţia vl-list->string.

vl-string-position
 Descriere 
Converteşte un şir de caractere într-o listă cu codurile numerice ASCII asociate.
  Apelare 
(vl-string->list string)
Argumente 
string 
Un şir de caractere
Valoare  returnată 
Funcţia returnează o listă, fiecare element fiind un număr întreg care reprezintă codul
caracterului corespunzător din listă, conform standardului ASCII.
Exemple 
_$ (vl-string->list "")
nil
_$ (vl-string->list "12")
(49 50)
Funcţii  similare 
Funcţia vl-list->string.

vl-string-right-trim
 Descriere 
Un număr întreg care specifică poziţia de unde începe compararea pentru al doilea şir; 0
dacă este omis
ignore‐case‐p 
Dacă acest argument este T atunci funcţia este sensibilă tipul caracterelor
majuscule/minuscule; altfel funcţia nu este sensibilă
Valoare  returnată 
Un întreg.
Exemple 
_$ (vl-string-mismatch "VL-FUN"
"VL-VAR")
3
_$ (vl-string-mismatch "vl-fun"
"avl-var")
0
_$ (vl-string-mismatch "vl-fun"
"avl-var" 0 1)
3

160
FUNCŢII DE BAZĂ – MANIPULAREA ŞIRURILOR
_$ (vl-string-mismatch "VL-FUN"
"Vl-vAR")
1
_$ (vl-string-mismatch "VL-FUN"
"Vl-vAR" 0 0 T)
3

vl-string-search
Descriere 
Caută un subşir de caractere în şirul de caractere specificat.
  Apelare 
(vl-string-search pattern string [start-pos])
Argumente 
pattern 
Şirul de caractere care va fi căutat
string 
Şirul de caractere în care va fi căutat pattern
start‐pos 
Un număr întreg care specifică poziţia din care va fi căutat pattern în string; 0 dacă este
omis
Valoare  returnată 
Un întreg care specifică poziţia în şirul de caractere string unde a fost găsit şirul de caractere
pattern; altfel nil dacă şirul de caractere nu a fost găsit. Primul caracter din şirul de caractere
are poziţia 0.
Exemple 
_$ (vl-string-search "foo"
"pfooyey on you")
1
_$ (vl-string-search "who"
"pfooyey on you")
nil
_$ (vl-string-search "foo"
"fooey-more-fooey" 1)
11

vl-string-subst
 Descriere 
Înlocuieşte un şir de caractere cu un altul în şirul de caractere specificat.
  Apelare 
(vl-string-subst new-str pattern string [start-pos])

161
PROIECTARE ASISTATĂ DE COMPUTER
Argumente 
new‐str  
Şirul de caractere care va înlocui şirul de caractere pattern
pattern 
Şirul de caractere care va fi înlocuit
string 
Şir de caractere în care va fi căutat şirul de caractere pattern
start‐pos 
Un număr întreg care specifică poziţia din şirul string de unde începe căutarea şirului
pattern
Valoare  returnată 
Valoarea şirului de caractere string după ce s-a făcut înlocuirea.
Exemple 
Înlocuieşte şirul de caractere “Ben” cu “Obi-wan”:
_$ (vl-string-subst "Obi-wan" "Ben" "Ben Kenobi")
"Obi-wan Kenobi"
Înlocuieşte “Ben” cu “Obi-wan”:
_$ (vl-string-subst "Obi-wan" "Ben" "ben Kenobi")
"ben Kenobi"
Nu s-a înlocuit nimic deoarece vl-string-subst nu a găsit un şir de caractere identic pentru
“Ben”; în şirul string “ben” este scris cu literă mică “b”.
Înlocuieşte “Ben” cu “Obi-wan”:
_$ (vl-string-subst "Obi-wan" "Ben" "Ben Kenobi Ben")
"Obi-wan Kenobi Ben"
Deşi “Ben” poate fi găsit de două ori, vl-string-subst face înlocuirea doar pentru prima
poziţie.
Înlocuieşte “Ben” cu “Obi-wan,” dar începe căutarea de la cel de-al patrulea caracter
din şir:
_$ (vl-string-subst "Obi-wan"
"Ben" "Ben \"Ben\" Kenobi" 3)
"Ben \"Obi-wan\" Kenobi"
Deşi “Ben” poate fi găsit de două ori, vl-string-subst a fost setat să înceapă căutarea
dde la al patrulea caracter, face înlocuirea pentru ultima poziţie, nu pentru prima.

vl-string-translate
 Descriere 
Înlocuieşte caracterele din şirul de caractere cu un set de caractere specificat.
  Apelare 
(vl-string-translate source-set dest-set str)
Argumente 
source‐set 
Şirul de caractere care va fi căutat

162
FUNCŢII DE BAZĂ – MANIPULAREA ŞIRURILOR
dest‐set 
Un şir de caractere care va substitui source-set în şirul de caractere str
str 
Un şir de caractere căruia îi vor fi înlocuite caracterele
Valoare  returnată 
Valoarea lui str după ce s-au făcut substituirile.
Exemple 
_$ (vl-string-translate "abcABC"
"123123" "A is a, B is b, C is C")
"1 is 1, 2 is 2, 3 is 3"
_$ (vl-string-translate "abc"
"123" "A is a, B is b, C is C")
"A is 1, B is 2, C is 3"

vl-string-trim
Descriere 
Elimină caracterele specificate dintr-un şir de caractere ori de câte ori le găseşte.
  Apelare 
(vl-string-trim char-set str)
Argumente 
char‐str 
Un şir de caractere care conţine caracterele care trebuie eliminate
str 
Şirul de caractere care va fi tăiat de vl-string-trim
Valoare  returnată 
Valoarea lui str după ce caracterele au fost eliminate.
Exemple 
_$ (vl-string-trim " \t\n"
" \t\n STR \n\t ")
"STR"
_$ (vl-string-trim "this
is junk" "this is junk Don't call this junk! this is junk")
"Don't call this junk!"
_$ (vl-string-trim " " "
Leave me alone ")
"Leave me alone"

wcmatch
 Descriere 

163
PROIECTARE ASISTATĂ DE COMPUTER
Compară un şir de caractere cu model un şir de caractere1.
  Apelare 
(wcmatch string pattern)
Argumente 
string 
Şirul de caractere care va fi comparat. Compararea este case-sensitive, deci caracterele
majuscule şi minuscule trebuie să fie identice
pattern 
Un şir de caractere care constituie modelul pentru string. pattern poate conţine caracterele
speciale pentru model conform tabelului Caractere speciale. Puteţi folosi virgula ca
delimitator pentru a introduce mai mult de o condiţie în model2. Doar primele 500 de
caractere din string şi pattern sunt comparate, restul de caractere peste acest număr fiind
ingnorate
Ambele argumente pot fi variabile tip şir de caractere sau şir quoted. Pentru string şi pattern
pot fi furnizate variabile sau valori returnate de funcţii AutoLISP.
Valoare  returnată 
Dacă string şi pattern coincid atunci funcţia wcmatch returnează T, altfel wcmatch
returnează nil.
Caractere speciale
Caracter Definiţie
3
# Înlocuieşte orice caracter de tip număr
(diez)
@ Înlocuieşte orice caracter de tip literar4
(a rond)
. Înlocuieşte orice caracter care nu este de tip număr sau tip literar
(punct)
* Înlocuieşte orice secvenţă de caractere, de orice tip, chiar şi spaţii, şi poate fi
(asterisc) folosit oriunde în model, la început, la mijloc sau la sfârşit
? Înlocuieşte un singur caracter
(semnul
întrebării)
~ Dacă este primul caracter din model el înlocuieşte orice cu excepţia modelului5
(tilda)
[…] Specifică un singur caracter pentru comparaţie, cel din paranteze
[~…] Specifică un singur caracter pentru comparaţie, diferit de cel din paranteze

1
cu un şir de caractere şablon
2
dacă sunt mai multe modele, egalitatea trebuie respectată pentru toate
3
rolul acestor caractere este de a impune o regulă pentru un tip de caractere, de exemplu # poate
înlocui un număr, @ poate înlocui un caracter alfanumeric, * poate înlocui o succesiune de caractere,
ş.a.m.d.
4
literal
5
se indică obligativitatea caracterelor finale, la începutul şirului putând fi orice caractere

164
FUNCŢII DE BAZĂ – MANIPULAREA ŞIRURILOR
- este folosit între paranteze pentru a specifica intervalul de unde poate fi
(cratimă, caracterul1
minus)
, separator pentru două modele
(virgulă)
` specifică citirea caracterului care îl urmează din punct de vedere literar nu ca un
(apostrof caracter special2
invers)

Exemple 
Comanda următoare testează dacă şirul începe cu caracterul majuscul N:
Command: (wcmatch "Name" "N*")
T
Exemplul următor exemplifică folosirea a trei comparaţii simultane. Dacă oricare din
cele trei condiţii este îndeplinită, wcmatch returnează T. Se testează:

• Şirul este format din trei caractere?


• Şirul conţine litera m?
• Şirul începe cu litera “N”?

Dacă oricare din cele trei condiţii este îndeplinită, wcmatch returnează T:
Command: (wcmatch "Name" "???,~*m*,N*")
T
În acest exemplu, ultima condiţie este îndeplinită, deci wcmatch returnează T.
Folosirea caracterelor Escape cu wcmatch.
Pentru a testa identitatea, cu un şir de caractere care conţine caractere speciale, puteţi
folosi caracterul escape - apostrof invers (`) pentru a considera un caracter doar din
punct de vedere literar. Astfel caracterul respeciv nu este tratat ca un caracter special
ci ca un caracter literar. De exemplu pentru a căuta caracterul virgulă oriunde în şirul
“Name”, introduceţi comanda următoare:
Command: (wcmatch "Name" "*`,*")
nil
Caracterul backslash este folosit ca un caracter escape în limbajul de programare C,
cât şi în limbajul de programare AutoLISP. Deci trebuie să folosiţi două caractere
backslash (\\) pentru a produce unul singur (\) în şirul de caractere model. Pentru a
testa cautarea caracterului backslash oriunde în şirul de caractere , folosiţi următoarea
comandă:
Command: (wcmatch "Name" "*`\\*")
nil
Toate caracterele închise între paranteze drepte ([ . . . ]) sunt tratate literar, deci nu este
necesară folosirea caracterului escape, cu următoarele excepţii: caracterul tilda (~)

1
de exemplu [a-e] specifică toate caracterele dintre a şi e inclusiv a şi e
2
de exemplu caracterul ` pus înainte de caracterul * anulează proprietatea acestuia de a specifica o
secvenţă de caractere şi este văzut ca un caracter alfabetic

165
PROIECTARE ASISTATĂ DE COMPUTER
este tratat literar doar dacă nu este primul caracter din şirul de caractere, la fel ca în
"[A~BC]"; altfel el este citit ca un caracter de negaţie, funcţia comparând toate
celelalte caractere cu excepţia celor care urmează caracterului tilda, la fel ca în
"[~ABC]".
Caracterul linie (-) este citit literar doar dacă este primul sau ultimul caracter dintre
parantezele pătrate - ca în "[-ABC]" sau "[ABC-]", sau când urmează după caracterul
tilda - ca în "[~-ABC]". Altfel, caracterul linie (-) este folosit cu parantezele pătrate
pentru a specifica domeniul pentru un anumit caracter. Domeniul specificat poate fi
folosit pentru un singur caracter, deci "STR[1-38]" este identic cu STR1, STR2,
STR3, and STR8 şi "[A-Z]" specifică pentru comparare un singur caracter alfabetic
majusculă.
Caracterul parenteză pătrată închisă este citit literar numai dacă este primul caracter
din paranteze, sau dacă urmează după caracterul tilda, acesta fiind primul caracter din
paranteze - ca în "[ ]ABC]" sau "[~]ABC]".
Deoarece, în versiunile ulterioare de AutoLISP, este posibil să fie adăugate alte
caractere speciale, este indicat ca tpate caracterele alfanumerice să fie precedate de
carcaterul escape, pentru a păstra compatibilitatea.

7.1.8. Manipularea funcţiilor simbol

Nume funcţie Descriere


(atom item)
atom
verifică dacă item este atom
(atoms-family format [symlist])
atoms-family
returnează lista simbolurilor curent definite
(boundp sym)
boundp
verifică dacă un simbol are o valoare asociată
(not item)
not
verifică dacă argumentul este evaluat ca nil
(null item)
null
verifică dacă argumentul este un număr real sau un număr întreg
(numberp item)
numberp
forţează afişarea lângă cursor pentru următoarea comandă
(quote expr)
quote
returnează argumentul fară să îl evalueze
(set sym expr)
set setează valoarea unui simbol, quoted symbol – ‘a, la valoarea unei
expresii
(setq sym1 expr1 [sym2 expr2] ...)
setq
setează valoarea unui simbol sau îl asociază cu valoarea unei expresii
(type item)
type
returnează tipul argumentului specificat
(vl-symbol-name symbol)
vl-symbol-name
returnează un şir care conţine numele simbolului

166
FUNCŢII DE BAZĂ – MANIPULAREA ŞIRURILOR
(vl-symbol-value symbol)
vl-symbol-value
returnează valoarea curentă asociată simbolului
(vl-symbolp object)
vl-symbolp
identifică dacă argumentul este sau nu un simbol

atom
 Descriere 
Verifică dacă argumentul este un atom.
  Apelare 
(atom item)
Majoritatea versiunilor AutoLISP interpretează diferit termenul de atom, deci fiţi foarte atenţi
când convertiţi cod program care nu este AutoLISP.
Argumente 
item 
Orice element AutoLISP
Valoare  returnată 
nil dacă argumentul este o listă; altfel T. Orice nu este listă este considerat atom.
Exemple 
RCommand: (setq a '(x y z))
(X Y Z)
Command: (setq b 'a)
A
Command: (atom 'a)
T
Command: (atom a)
nil
Command: (atom 'b)
T
Command: (atom b)
T
Command: (atom '(a b c))
nil

atoms-family
 Descriere 
Returnează o listă cu simbolurile curent definite.
  Apelare 
(atoms-family format [symlist])
Argumente 

167
PROIECTARE ASISTATĂ DE COMPUTER
format 
Un număr cu valoarea 0 sau 1 care specifică formatul în care atoms-family returnează
numele simbolurilor:
0 – returnează numele simbolurilor ca listă
1 – returnează numele simbolurilor ca listă de şiruri
symlist 
O listă cu şiruri de caractere care conţine simbolurile pe care dorim să le verifice funcţia
atoms-family
Valoare  returnată 
O listă de simboluri. Dacă specificaţi argumentul symlist, funcţia atoms-family returnează
simbolurile specificate care sunt curent definite, şi returnează nil pentru simbolurile care nu
sunt definite.
Exemple 
Command: (atoms-family 0)
(BNS_PRE_SEL FITSTR2LEN C:AI_SPHERE ALERT DEFUN C:BEXTEND
REM_GROUP
B_RESTORE_SYSVARS BNS_CMD_EXIT LISPED FNSPLITL...
Codul următor verifică dacă simbolurile CAR, CDR, and XYZ sunt definite, şi returnează o
listă de şiruri:
Command: (atoms-family 1 '("CAR" "CDR" "XYZ"))
("CAR" "CDR" nil)
Valoarea returnată arată că simbolul XYZ nu este definit.

boundp
Descriere 
Verifică dacă un simbol are atribuită o valoare.
  Apelare 
(boundp sym)
Argumente 
sym 
Un simbol
Valoare  returnată 
T dacă sym are o valoare atribuită. Dacă nu este atribuită nici o valoare lui sym sau este
atribuită valoarea nil atunci boundp returnează nil. Dacă sym este un simbol nedefinit, atunci
acesta este creat şi i se atribuie nil.
Exemple 
Command: (setq a 2 b nil)
nil
Command: (boundp 'a)
T
Command: (boundp 'b)

168
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR SIMBOL
nil
Funcţia atoms-family furnizează o metodă alternativă pentru verificarea existenţei unui
simbol fără crearea automată a acestui simbol.
Funcţii  similare 
Funcţia atoms-family.

not
Descriere 
Verifică dacă argumentul furnizat evaluat la valoarea nil.
  Apelare 
(not item)
În mod normal, funcţia null este folosită pentru liste şi funcţia not este folosită pentru alte
tipuri de date împreună cu alte funcţii de control.
Argumente 
item 
O expresie AutoLISP
Valoare  returnată 
T dacă item este evaluat la nil; altfel nil.
Exemple 
Command: (setq a 123 b "string" c nil)
nil
Command: (not a)
nil
Command: (not b)
nil
Command: (not c)
T
Command: (not '())
T
Funcţii  similare 
Funcţia null.

null
 Descriere 
Verifică dacă argumentul furnizat are atribuită valoarea nil.
  Apelare 
(null item)
Argumente 

169
PROIECTARE ASISTATĂ DE COMPUTER
item 
O expresie AutoLISP
Valoare  returnată 
T dacă item este evaluat la nil; altfel nil.
Exemple 
Command: (setq a 123 b "string" c nil)
nil
Command: (null a)
nil
Command: (null b)
nil
Command: (null c)
T
Command: (null '())
T
Funcţii  similare 
Funcţia not.

numberp
Descriere 
Verifică dacă argumentul este un număr real sau un număr întreg.
  Apelare 
(numberp item)
Argumente 
item 
O expresie AutoLISP
Valoare  returnată 
T dacă item este evaluat la un număr întreg sau real; altfel nil.
Exemple 
Command: (setq a 123 b 'a)
A
Command: (numberp 4)
T
Command: (numberp 3.8348)
T
Command: (numberp "Howdy")
nil
Command: (numberp a)
T
Command: (numberp b)

170
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR SIMBOL
nil
Command: (numberp (eval b))
T

quote
Descriere 
Returnează o expresie fără să o evalueze.
  Apelare 
(quote expr)
Argumente 
expr 
O expresie AutoLISP
Valoare  returnată 
Expresia argument expr.
Exemple 
Command: (quote a)
A
Expresia precedentă poate fi scrisă ca 'a. De examplu:
Command: !'a
A
Command: (quote (a b))
(A B)
Funcţii  similare 
Funcţia function.

set
Descriere 
Setează o expresie ca valoare pentru un simbol quote1.
  Apelare 
(set sym expr)
Argumente 
sym 
Un simbol
expr 
O expresie AutoLISP
Valoare  returnată 
Valoarea expresiei.

1
precedat de apostrof

171
PROIECTARE ASISTATĂ DE COMPUTER
Exemple 
Fiecare din comenzile următoare setează valoarea simbolului la 5.0:
(set 'a 5.0)
(set (read "a") 5.0)
(setq a 5.0)
Ambele set şi setq aşteaptă un simbol ca prim argument, dar set acceptă o expresie
furnizată ca simbol în timp ce setq nu acceptă, ca în exemplul următor:
Command: (set (read "a") 5.0)
5.0
Command: (setq (read "a") 5.0)
; *** ERROR: syntax error
Funcţii  similare 
Funcţia setq.

setq
Descriere 
Setează valoarea unui simbol sau a unor simboluri cu expresiile asociate.
  Apelare 
(setq sym expr [sym expr]...)
Argumente 
sym 
Un simbol. Acest argument nu este evaluat
expr 
O expresie AutoLISP
Valoare  returnată 
Valoarea ultimei expresii evaluate.
Exemple 
Următorul apel de funcţie setează valoarea variabilei la 5.0:
Command: (setq a 5.0)
5.0
Când a este evaluat, returnează numărul real 5.0.
Comenzile următoare setează două variabile, b şi c:
Command: (setq b 123 c 4.7)
4.7
setq returnează valoarea ultimei variabile setate.
În exemplul următor, valoarea variabilei s este setată ca şir de caractere:
Command: (setq s "it")
"it"
Exemplul următor assignează o listă variabilei x:
Command: (setq x '(a b))

172
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR SIMBOL
(A B)

type
Descriere 
Returnează tipul argumentului funizat.
  Apelare 
(type item)
Argumente 
item 
Un simbol
Valoare  returnată 
Tipul de dată al variabilei item. Pentru variabilele evaluate cu nil1, se returnează nil. Tipurile
de dată returnate sunt enumerate în tabelul următor:
Tipuri de date returnate de funcţia type
Caracter Definiţie
ENAME Nume de entitate
EXRXSUBR Aplicaţie externă de tip ObjectARX
FILE Descriptor de fişier
INT Număr întreg
LIST Liste
PAGETB Tabel de paginare a funcţiilor
PICKSET Mulţimi de selecţie
REAL Număr real
SAFEARRAY Safearray
STR Şiruri de caractere
Funcţie internă AutoLISP sau funcţie încărcată prin compilarea fişierelor (FAS
SUBR sau VLX). Funcţiile în fişiere sursă LISP încărcate de la prompterul AutoCAD
pot apărea de asemenea ca SUBR
SYM Simboluri
VARIANT Variant
USUBR Funcţii definite de utilizator încărcate din fişiere sursă AutoLISP
VLA-object Obiecte ActiveX

Exemple 
Pentru exemplificare, faceţi următoarele atribuiri:
(setq a 123 r 3.45 s "Hello!" x '(a b c))

1
de exemplu simbolurile neasignate

173
PROIECTARE ASISTATĂ DE COMPUTER
(setq f (open "name" "r"))
după care,
(type 'a) returns SYM
(type a) returns INT
(type f) returns FILE
(type r) returns REAL
(type s) returns STR
(type x) returns LIST
(type +) returns SUBR
(type nil) returns nil
Codul din exemplul următor foloseşte funcţia type ca argument transmisibil:
(defun isint (a)
(if (= (type a) 'INT) is TYPE integer?
T yes, return T
nil no, return nil
)
)

vl-symbol-name
Descriere 
Returnează numele argumentului ca şir de caractere.
  Apelare 
(vl-symbol-name symbol)
Argumente 
symbol 
Orice simbol AutoLISP
Valoare  returnată 
Un şir de caractere care conţine numele simbolului furnizat ca argument; cu caractere
majuscule.
Exemple 
_$ (vl-symbol-name 'S::STARTUP)
"S::STARTUP"
_$ (progn (setq sym 'my-var)
(vl-symbol-name sym))
"MY-VAR"
_$ (vl-symbol-name 1)
; *** ERROR: bad argument type: symbolp 1

vl-symbol-value
 Descriere 

174
FUNCŢII DE BAZĂ – MANIPULAREA FUNCŢIILOR SIMBOL
Returnează valoarea curentă a simbolului furnizat ca argument.
  Apelare 
(vl-symbol-value symbol)
Argumente 
symbol 
Orice simbol AutoLISP
Valoare  returnată 
Valoarea argumentului symbol după evaluare.
Exemple 
_$ (vl-symbol-value 't)
T
_$ (vl-symbol-value 'PI)
3.14159
_$ (progn (setq sym 'PAUSE)
(vl-symbol-value sym))
"\\"

vl-symbolp
Descriere 
Identifică dacă obiectul specificat este un simbol AutoLISP.
  Apelare 
(vl-symbolp symbol)
Argumente 
object 
Orice obiect AutoLISP
Valoare  returnată 
T dacă object este simbol; altfel nil.
Exemple 
_$ (vl-symbolp t)
T
_$ (vl-symbolp nil)
nil
_$ (vl-symbolp 1)
nil
_$ (vl-symbolp (list 1))
nil

7.2. UTILITARE

175
PROIECTARE ASISTATĂ DE COMPUTER
Funcţiile utilitare cuprind funcţiile de interogare şi comenzi, pentru controlul afişării,
introducerea datelor de către utilizator, funcţii geometrice, de conversie, funcţii pentru
manipularea fişierelor şi funcţii pentru accesul la dispozitive.

7.2.1. Funcţii de conversie

Nume funcţie Descriere


(angtof string [mode])
angtof converteşte un şir de caractere, care reprezintă un unghi, într-un număr
real, care reprezintă valoarea unghiului în radiani
(angtos angle [mode [precision]])
angtos
converteşte valoarea în radiani a unui unghi într-un şir de caractere
(ascii string)
ascii returnează conversia primului caracter dintr-un şir de caractere în cod
ASCII, deci un număr întreg
(atof string)
atof
returnează conversia unui şir de caractere într-un număr real
(atoi string)
atoi
returnează conversia unui şir de caractere într-un număr întreg
(chr integer)
returnează conversia unui număr întreg, care reprezintă codul ASCII al
chr
unui caracter, într-un şir de caractere care conţine numai caracterul
obţinut din conversie
(cvunit value from to)
cvunit
converteşte valoarea unei unităţi de măsură în alta
(distof string [mode])
distof converteşte un şir de caractere, care reprezintă un număr real, într-un
număr real
(itoa int)
itoa
returnează conversia unui număr întreg într-un şir de caractere
(rtos number [mode [precision]])
rtos
converteşte un număr într-un şir de caractere
(trans pt from to [disp])
trans translatează un punct, sau o deplasare, dintr-un sistem de coordonate în
altul

angtof
Descriere 
Converteşte un şir de caractere, care reprezintă valoarea unui unghi în radiani, într-un număr
real.
  Apelare 
(angtof string [units])
Argumente 

176
FUNCŢII UTILITARE – FUNCŢII DE CONVERSIE
string 
Un şir de caractere care descrie valoarea unui unghi într-un format de bază specificat de
argumentul mode. Şirul de caractere string trebuie să poată fi convertit corect de angtof
în unitatea specificată. El poate fi în acelaşi format ca valoarea returnată de angtos sau
într-o formă acceptată de AutoCAD pentru introducerea datelor de la tastatură
units 
Specifică unităţile în care dorim să convertim şirul de caractere. Valoarea trebuie să
corespundă variabilelor acceptate de AutoCAD, conform AUNITS. Dacă unit este omis,
angtof foloseşte valoarea curentă AUNITS. Pot fi specificate următoarele unităţi pentru
conversie:
0 – Grade
1 – Grade/minute/secunde
2 – Grads
3 – Radiani
4 – unităţi de tip Surveyor
Valoare  returnată 
Un număr real, când conversia se realizează cu succes; altfel nil.
Funcţiile angtof şi angtos sunt complementare: dacă furnizaţi funcţiei angtof un şir de
caractere creat cu angtos, angtof va returna garantat o valoare validă, şi viceversa1.
Exemple 
Command: (angtof "45.0000")
0.785398
Command: (angtof "45.0000" 3)
1.0177
Funcţii  similare 
Funcţia angtos.

angtos
Descriere 
Converteşte o valoare a unui unghi, exprimată în radiani, într-un şir de caractere.
  Apelare 
(angtos angle [unit [precision]])
Argumente 
angle 
Un număr real, în radiani
unit 
Un număr întreg care specifică unitatea de măsură a unghiului. Dacă units este omis,
AutoCAD foloseşte valoarea curentă a variabilei, din sistemul de variabile AutoCAD,
AUNITS.
Pot fi specificate următoarele unităţi pentru conversie:
0 – Grade

1
conform setărilor unit

177
PROIECTARE ASISTATĂ DE COMPUTER
1 – Grade/minute/secunde
2 – Grads
3 – Radiani
4 - unităţi de tip Surveyor
precision 
Un număr întreg care specifică precizia cu care este returnat numărul convertit, deci
numărul de zecimale. Dacă precision este omis, AutoCAD foloseşte valoarea curentă a
variabilei din sistemul de variabile AutoCAD, AUPREC
Funcţia angtos preia argumentul angle şi returnează un şir de caractere în acord cu setările
variabilelor unit şi precision, cu variabila sistem AutoCAD UNITMODE şi variabila de
dimensionare DIMZIN.
Funcţia angtos acceptă un argument angle negativ, dar îl transformă întotdeauna într-un
număr pozitiv între 0 şi 2 Pi radiani, înainte de a aplica conversia specificată.
Variabila sistem UNITMODE afectează şirul de caractere când este selectat surveyor's units1.
Dacă UNITMODE = 0, şirul de caractere include spaţii2; dacă UNITMODE = 1 nu sunt
incluse spaţii în şirul de caractere3.
Valoare  returnată 
Un şir de caractere, dacă conversia se efectuează cu succes; altfel nil.
Exemple 
Command: (angtos 0.785398 0 4)
"45.0000"
Command: (angtos -0.785398 0 4)
"315.0000"
Command: (angtos -0.785398 4)
"S 45d E"
Rutinele care folosesc funcţia angtos pentru afişarea unghiurilor arbitrare4 trebuie să verifice
şi să considere această valoare din punctul de vedere al variabilei ANGBASE.
Funcţii  similare 
Funcţia angtof şi funcţiile de conversie a şirurilor de caractere.

ascii
Descriere 
Returnează conversia primului caracter din şirul de caractere furnizat.
  Apelare 
(ascii string)
Argumente 
string 
Un şir de caractere

1
unit are valoarea 4
2
de exemplu, “N 45d E”);
3
de exemplu, “N45dE”
4
acelea care nu sunt relative la valoarea variabilei ANGBASE

178
FUNCŢII UTILITARE – FUNCŢII DE CONVERSIE
Valoare  returnată 
Un număr întreg.
Exemple 
Command: (ascii "A")
65
Command: (ascii "a")
97
Command: (ascii "BIG")
66

atof
Descriere 
Converteşte un şir de caractere într-un număr real.
  Apelare 
(atof string)
Argumente 
string 
Un şir de caractere care va fi convertit într-un număr real
Valoare  returnată 
Funcţia returnează un număr real.
Exemple 
Command: (atof "97.1")
97.1
Command: (atof "3")
3.0
Command: (atof "3.9")
3.9

atoi
Descriere 
Converteşte un şir de caractere într-un număr întreg.
  Apelare 
(atof string)
Argumente 
string 
Un şir de caractere care va fi convertit într-un număr întreg
Valoare  returnată 
Funcţia returnează un număr întreg.

179
PROIECTARE ASISTATĂ DE COMPUTER
Exemple 
Command: (atoi "97")
97
Command: (atoi "3")
3
Command: (atoi "3.9")
3
Funcţii  similare 
Funcţia itoa.

chr
Descriere 
Converteşte un număr întreg, care reprezintă codul ASCII al unui caracter, într-un şir de
caractere care conţine numai caracterul respectiv.
  Apelare 
(chr integer)
Argumente 
string 
Un şir de caractere
Valoare  returnată 
Un şir de caractere care conţine caracterul pentru care a fost furnizat codul ASCII. Dacă
numărul nu este din intervalul 1-255 rezultatul este impredictibil.
Exemple 
Command: (chr 65)
"A"
Command: (chr 66)
"B"
Command: (chr 97)
"a"

cvunit
Descriere 
Converteşte o valoare dintr-o unitate de măsură în alta.
  Apelare 
(cvunit value from-unit to-unit)
Argumente 
value 
O valoare numerică, sau o listă a unui punct 2D sau 3D care va fi convertit
from‐unit 

180
FUNCŢII UTILITARE – FUNCŢII DE CONVERSIE
Unitatea de măsură din care va fi convertită valoarea
to‐unit 
Unitatea de măsură în care va fi convertită valoarea
Argumentele from-unit şi to-unit pot conţine numele oricărui tip de unităţi de măsură care se
găseşte în fişierul acad.unt.
Valoare  returnată 
Funcţia returnează valoarea convertită dacă conversia se realizează cu succes; altfel nil, dacă
numele unităţii de măsură nu este cunoscut1, sau cele două unităţi de măsură sunt
incompatibile2.
Exemple 
Command: (cvunit 1 "minute" "second")
60.0
Command: (cvunit 1 "gallon" "furlong")
nil
Command: (cvunit 1.0 "inch" "cm")
2.54
Command: (cvunit 1.0 "acre" "sq yard")
4840.0
Command: (cvunit '(1.0 2.5) "ft" "in")
(12.0 30.0)
Command: (cvunit '(1 2 3) "ft" "in")
(12.0 24.0 36.0)
Dacă aveţi foarte multe valori de convertit în acest fel, este mult mai eficient să
convertiţi o singură dată valoarea 1.0 şi apoi să aplicaţi valoarea rezultată ca factor de
scală în funcţia dumneavoastră sau în calcul. Aceasta funcţionează pentru toate
unităţile de măsură predefinite cu excepţia temperaturii, unde este implicată o
compensare.

distof
Descriere 
Converteşte un şir de caractere, care reprezintă valoarea unui număr real într-un număr real.
  Apelare 
(distof string [mode])
Funcţiile dtos şi rtos sunt complementare. Dacă îi este furnizat ca argument funcţiei distof un
şir de caractere creat de rtos, distof garantează returnarea unei valori valide, şi viceversa.
Argumente 
string 
Şirul de caractere care va fi convertit. Argumentul trebuie să fie un şir de caractere care
poate fi convertit corect de distof ţinând cont de unităţile de măsură specificate de mode.

1
nu se regăseşte în fişierul acad.unt
2
de exemplu, se încearcă conversia gramelor în ani

181
PROIECTARE ASISTATĂ DE COMPUTER
Poate fi în formatul returnat de rtos sau în formatul acceptat de AutoCAD pentru
introducerea de la tastatură.
mode 
Specifică unităţile în care este convertit şirul de caractere. Valoarea trebuie să corespundă
variabilelor acceptate de AutoCAD conform AUNITS. Dacă unit este omis, angtof
foloseşte valoarea curentă AUNITS. Pot fi specificate următoarele unităţi pentru conversie:
0 – Grade
1 – Grade/minute/secunde
2 – Grads
3 – Radiani
4 - unităţi de tip Surveyor
Valoare  returnată 
Pentru conversie realizată cu succes un număr real, altfel nil.
Funcţia distof tratează modurile 3 şi 4 la fel. Deci, dacă mode ia valoarea 3 sau 4 şi string
este în aceste formate distof returnează o valoare corectă.

itoa
Descriere 
Returnează conversia unui număr întreg într-un şir de caractere.
  Apelare 
(itoa int)
Argumente 
int 
Un număr întreg
Valoare  returnată 
Şirul de caractere derivat din numărul întreg după conversie.
Exemple 
Command: (itoa 33)
"33"
Command: (itoa -17)
"-17"
Funcţii  similare 
Funcţia atoi.

rtos
Descriere 
Converteşte un număr într-un şir de caractere.
  Apelare 
(rtos number [mode [precision]])
Funcţia rtos returnează un şir de caractere care reprezintă argumentul number convertit

182
FUNCŢII UTILITARE – FUNCŢII DE CONVERSIE
conform setărilor mode şi precision precum şi variabilelor sistem UNITMODE, DIMZIN,
LUNITS şi LUPREC.
Argumente 
number 
Un număr
mode 
Un întreg care specifică unitatea de măsură. Argumentul mode ia valorile acceptate pentru
variabila AutoCAD LUNITS. Poate avea una din valorile următoare:
1 – Ştinţific
2 – Zecimal
3 – Ingineresc1
4 – Arhitectural2
5 – Fracţionar
precision 
Un număr întreg care specifică precizia
Argumentele mode şi precision corespund variabilelor de sistem LUNITS şi LUPREC.
Dacă omiteţi aceste argumente funcţia rtos foloseşte valorile curente ale variabilelor de sistem
LUNITS şi LUPREC.
Valoare  returnată 
Funcţia returnează un şir de caractere. Variabila de sistem UNITMODE afectează stilul
returnat când este setat unul din modurile Ingineresc, Arhitectural sau Fracţionar, deci 3, 4 sau
5.
Exemple 
Setaţi variabila x:
Command: (setq x 17.5)
17.5
Convertiţi valoarea lui x într-un şir de caractere în formatul ştiinţific cu precizie de 4.
Command: (setq fmtval (rtos x 1 4))
"1.7500E+01"
Convertiţi valoarea lui x într-un şir de caractere în format zecimal cu două zecimale:
Command: (setq fmtval (rtos x 2 2))
"17.50"
Convertiţi valoarea lui x într-un şir de caractere în format ingineresc cu precizie de 2:
Command: (setq fmtval (rtos x 3 2))
"1'-5.50\""
Convertiţi valoarea lui x într-un şir de caractere în format arhitectural:
Command: (setq fmtval (rtos x 4 2))
"1'-5 1/2\""
Convertiţi valoarea lui x într-un şir de caractere în format fracţionar:
Command: (setq fmtval (rtos x 5 2))
"17 1/2"
Setând UNITMODE la valoarea 1 setează unităţile care sunt afişate la introducerea datelor.
1
feet şi inches zecimali
2
feet şi inches fracţionari

183
PROIECTARE ASISTATĂ DE COMPUTER
Aceasta afectează valoarea returnată de funcţia rtos pentru formatele Ingineresc, Arhitectural
şi Fracţionar, aşa cum este arătat în exempelle următoare:
Command: (setvar "unitmode" 1)
1
Command: (setq fmtval (rtos x 3 2))
"1'5.50\""
Command: (setq fmtval (rtos x 4 2))
"1'5-1/2\""
Command: (setq fmtval (rtos x 5 2))
"17-1/2"

trans
Descriere 
Translatează un punct, sau o deplasare, dintr-un sistem de coordonate în altul.
  Apelare 
(trans pt from to [disp])
Argumente 
pt 
O listă de trei elemente care poate fi interpretată ca un punct 3D sau o deplasare 3D1
from 
Un cod ca număr întreg, un nume de entitate sau un vector 3D care identifică sistemul de
coordonate în care este exprimat pt. Codul poate avea următoarele valori:
0 – Sistemul de coordonate global2;
1 – Utilizator3;
2 – Dacă este utilizat codul 0 sau 1 atunci este indicat sistemul de coordonate DCS4 al
viewport-ului curent; Dacă este folosit codul 3 atunci este indicat sistemul de coordonate
DCS al spaţiului model din viewport-ului curent;
3 – Spaţiul hârtie;
to 
Un cod ca număr întreg, un nume de entitate sau un vector 3D care identifică sistemul de
coordonate pentru punctul returnat. Codul este identic cu cel pentru argumentul from
disp 
Dacă este prezent şi nu este nil, acest argument specifică dacă argumentul pt este tratat ca
punct 3D sau deplasare 3D
Dacă folosiţi un nume de entitate pentru paramentrul from sau parametrul to, trebuie ca acesta
să fie furnizat în formatul returnat de funcţiile entnext, entlast, entsel, nentsel şi ssname.
Acest format vă permite translatarea unui punct la şi de la un sistem de coordonate obiect5
OCS.
Pentru multe obiecte, sistemul de coordonate OCS este echivalent cu sistemul de coordonate

1
un vector de deplasare 3D
2
WCS – sistemul de coordonate global
3
User – sistemul de coordonate UCS curent
4
Display Coordinate System – Sistemul de coordonate al ecranului
5
OCS - Object Coordinate System

184
FUNCŢII UTILITARE – FUNCŢII DE CONVERSIE
WCS1. Vectorul de deplasare 3D2, este o altă metodă de a converti la şi de la un sistem de
coordonate obiect OCS. Oricum, această metodă nu funcţionează pentru toate obiectele la
care sistemul de coordonate OCS este echivalent cu sistemul de coordonate WCS.
Valoare  returnată 
Un punct 3D, sau o deplasare 3D, în sistemul de coordonate specificat de argumentul to.
Exemple 
În următoarele exemple sistemul de coordonate UCS este rotit cu 90 de grade în sens
trigonometric în jurul axei Z a sistemului de coordonate WCS:
Command: (trans '(1.0 2.0 3.0) 0 1)
(2.0 -1.0 3.0)
Command: (trans '(1.0 2.0 3.0) 1 0)
(-2.0 1.0 3.0)
Coordonatele sistem sunt descrise în detaliu în Coordinate System Transformations din
AutoLISP Developer's Guide.
De exemplu, pentru a desena o linie din punctul de inserare al unui element text, fără a folosi
modul OSNAP, convertiţi punctul de inserţie din sistemul de coordonate OCS al textului în
sistemul de coordonate UCS.
(trans text-insert-pointtext-ename 1)
Puteţi folosi rezultatul la prompter-ul From Point.
În schimb trebuie să convertiţi valoarea punctului, sau deplasării la destinaţia lor OCS înainte
de a le furniza lui entmod. De exemplu, dacă doriţi să mutaţi un cerc3, relativ la sistemul de
coordonate UCS (1,2,3), este necesară conversia deplasării de la sistemul de coordonate UCS
la sistemul de coordonate al cercului OCS:
(trans '(1 2 3) 1 circle-ename)
Astfel adunaţi deplasarea rezultată punctului care reprezintă centrul cercului.
De exemplu, dacă aveţi un punct introdus de utilizator şi vreţi să găsiţi un punct de sfârşit de
linie aflat în apropiere, transformaţi punctul din sistemul de coordonate UCS în sistemul de
coordonate DCS.
(trans user-point 1 2)
Astfel convertiţi fiecare punct de sfârşit de linie din sistemul de coordonate UCS în sistemul
de coordonate DCS.
(trans endpoint line-ename 2)
Astfel puteţi calcula distanţa dintre un punct introdus de utilizator şi fiecare punct de capăt al
liniei, ignorând coordonata Z, pentru a determina care punct este mai aproape.
Funcţia trans poate transforma astfel puncte 2D. Puteţi face aceasta setând coordonata Z la o
valoare apropiată. Componenta Z depinde de coordonatele sistem specificate de argumentul
from şi dacă valoarea este convertită ca punct sau ca deplasare. Dacă valoarea este convertită
ca deplasare, valoarea Z are întotdeauna valoarea 0.0; dacă valoarea este convertită ca punct,
valoarea Z este conformă tabelului următor:
Convertirea coordonatei Z a punctelor 2D
De la Coordonata Z

1
pentru aceste obiecte, conversia dintre OCS şi WCS este o operaţie nulă
2
lista de trei numere reale
3
fără a folosi comanda MOVE

185
PROIECTARE ASISTATĂ DE COMPUTER
WCS 0.0
UCS Elevaţia curentă
OCS 0.0
INT Proiecţia pe planul de construcţie curent – planul UCS XY + elevaţia curentă
LIST Proiecţia pe planul de construcţie curent – planul UCS XY + elevaţia curentă

7.2.2. Accesul la dispozitive

Nume funcţie Descriere


(grread [track] [allkeys [curtype]])
grread
citeşte valori de la orice dispozitiv AutoCAD de intrare
(tablet code [row1 row2 row3 direction])
tablet
recuperează şi setează calibrarea unui digitizor (tablet)

grread
Descriere 
Citeşte valori de la orice dispozitiv AutoCAD de intrare.
  Apelare 
(grread [track] [allkeys [curtype]])
Doar programele specializate AutoLISP folosesc această funcţie. Majoritatea datelor introduse
în AutoCAD sunt obţinute cu ajutorul funcţiilor getxxx.
Argumente 
track 
Dacă este furnizat şi nu este nil, acesta activează modul de returnare a coordonatelor de la
dispozitivul de intrare imediat ce acesta se mişcă1
allkeys 
Un cod, număr întreg care specifică funcţiei grread ce funcţii să execute. Biţii care
compun valoarea parametrului allkeys pot fi adunaţi pentru a forma funcţionalităţi
combinate. Pot fi specificate următoarele valori:
1 (bit 0) – returnează coordonate în modul drag mode. Dacă acest bit este setat şi
utilizatorul mişcă dispozitivul de intrare2, apăsând un buton sau o tastă, grread returnează
o listă unde primul membru este de tip 53 şi celălalt reprezintă locaţia curentă (x,y) a
dispozitivului de intrare. Astfel este implementată tragerea4 în AutoCAD5
2 (bit 1) – returnează valoarea tuturor tastelor, inclusiv funcţia şi codul tastelor cursor, şi
nu mută cursorul grafic când utilizatorul apasă tasta cursor;
4 (bit 2) – foloseşte valoarea furnizată de argumentul curtype pentru controlul cursorului

1
de exemplu imediat ce mişcaţi mouse-ul
2
mouse sau digitizor
3
vezi tabelul următor
4
draging
5
de exemplu deplasare mouse cu o tastă apăsată

186
FUNCŢII UTILITARE – ACCESUL LA DISPOZITIVE
grafic
8 (bit 3) – nu afişează erorile: mesajul de întrerupere afişat la consolă când utilizatorul
apasă tasta esc
curtype 
Un număr întreg care indică tipul cursorului grafic afişat. Valoarea bitului 2 a
argumentului allkeys trebuie să fie setată cu valoarea curtype pentru a avea efect.
argumentul allkeys afectează cursorul grafic doar pe perioada apelului funcţiei grread.
Puteţi specifica pentru curtype una din următoarele valori:
0 – afişează cursorul grafic normal1
1 – nu afişează cursorul grafic
2 – afişează cursorul grafic asociat selecţiei de obiecte2
Valoare  returnată 
Funcţia grread returnează o listă în care primul element este un cod care specifică tipul
intrării. Elementul al doilea al listei este un număr întreg sau un punct, funcţie de tipul de
intrare. Valorile returnate sunt descrise în tabelul următor:
Valorile returnate de funcţia grread
Primul element Al doilea element

Val. Tip intrare Valoare Descriere

2 intrare tastatură variant cod caracter

3 punct selectat punct 3D coordonate punct

0 la 999
Screen meniu box nr.
1001 la 1999
POP1 meniu box nr.
2001 la 2999
articol meniu opţiune screen/pull- POP2 meniu box nr.
4 3 3001 la 3999
down POP3 meniu box nr.
… ş.a.m.d.
... şi aşa mai departe, la
16001 la
POP16 meniu box nr.
16999

5 Dispozitiv de digitizare4 punct 3D Coordonate Drag mode

meniu buton
BUTTONS1
0 la 999 meniu buton
1000 la 1999 BUTTONS2
6 Articol meniu BUTTONS
2000 la 2999 meniu buton
3000 la 3999 BUTTONS3
meniu buton
BUTTONS4

1
crosshairs cursor – cursor tip cruce
2
object-selection “target” cursor – cursor tip pătrat
3
de la pointing device
4
returnat numai dacă tracking este activ

187
PROIECTARE ASISTATĂ DE COMPUTER

7 Articol meniu TABLET 1 0 la 32767 Digitized box nr.

Articol meniu TABLET 2


8 0 la 32767 Digitized box nr.

Articol meniu TABLET 3


9 0 la 32767 Digitized box nr.

Articol meniu TABLET 4


10 0 la 32767 Digitized box nr.

0 la 999 AUX1 meniu buton nr.


1000 la 1999 AUX2 meniu buton nr.
11 AUX meniu item
2000 la 2999 AUX3 meniu buton nr.
3000 la 3999 AUX4 meniu buton nr.
Coordinate
12 Buton de tip pointer1 punct 3D
punct
Introducere manuală a datelor cu funcţia grread.
Apăsând tasta ESC când funcţia grread este activă se abandonează programul AutoLISP cu
întrerupere de la tastatură. Orice altă intrare este trimisă direct funcţiei grread, dând aplicaţiei
controlul complet asupra dispozitivelor de intrare.
Dacă utilizatorul apasă butonul pointer din meniul ecran sau meniul pull-down box, funcţia
grread returnează codul tip 6 sau 11, dar într-un apel ulterior dacă nu returnează codul tip 12:
codul tip 12 urmează tipului 6 sau tipului 11 doar când butonul pointer este apăsat atunci când
este în aria de desenare.
Este important să eliminaţi codul 12 din buffer înainte de a efectua altă operaţie cu
buton pointer sau buton auxiliar. Pentru a termina aceasta folosiţi funcţia grread ca în
continuare:
(setq code_12 (grread (setq code grread))))
Această secvenţă capturează valoarea codului 12 furnizată contiunuu de intrarea
dispozitivului.

tablet
Descriere 
Recuperează şi setează calibrarea digitizorului.
  Apelare 
(tablet code [row1 row2 row3 direction])
Argumente 
code 
Un număr întreg care poate fi unul din următoarele:
0 – returnează calibrarea curentă a digitizorului. În acest caz argumentele rămase pot fi
omise

1
urmează returnarea unui tip 6 sau tip 11

188
FUNCŢII UTILITARE – ACCESUL LA DISPOZITIVE
1 – setează calibrarea digitizorului cu argumentele care urmează. În acest caz trebuie să
furnizaţi noi parametri pentru calibrare row1, row2, row3 şi direction.
row1, row2, row3 
Trei puncte 3D. Aceste trei argumente specifică cele trei linii a matricei de transformare a
tabletelor. Al treilea element, row3 (Z), poate fi întotdeauna egal cu 1. Funcţia tablet îl
returnează ca 1 de fircare dată când specificaţi o valoare diferită de 1 pentru parametrul
row3 (Z).
direction 
Un punct 3D. Acesta este vectorul, exprimat în coordonate sistem, sau WCS, care este
normal la planul reprezentat de suprafaţa tabletei. Dacă argumentul direction este
normalizat, funcţia tablet il corectează, deci direction returnează, la setarea calibrării, o
valoare care poate fi diferită de valoarea furnizată
Valoare  returnată 
Dacă apelul funcţiei tablet eşuează, se returnează nil şi se setează variabila variabilei sistem la
o valoare care indică motivul eşecului. Acesta se poate întâmpla dacă digitizorul nu este
tablet.
Exemple 
O foarte simplă transformare care poate fi realizată cu funcţia tablet este transformarea
identitate:
(tablet 1 '(1 0 0) '(0 1 0) '(0 0 1) '(0 0 1))
Efectul acestei transformări este că Articol meniu AutoCAD va primi, efectiv,
coordonatele digitizorului neprelucrate de la tablet. De exemplu, dacă indicaţi cu
digitizorul un punct cu coordonatele (5000, 15000), AutoCAD îl va vedea ca punct cu
aceleaşi coordonate în desenul dumneavoastră.
Variabila sistem TABMODE permite rutinelor AutoLISP să comute tableta pe on şi off.

7.2.3. Controlul afişării

Nume funcţie Descriere


(graphscr)
graphscr
afişează fereastra de desenare
(grdraw from to color [highlight])
grdraw
desenează un vector între două puncte, în viewport-ul curent
(grtext [box text [highlight]])
grtext
scrie un text în linia de stare sau în zona de afişare din meniuri
(grvecs vlist [trans])
grvecs
desenează vectori multipli în zona de desenare
(menucmd string)
menucmd crează comenzi meniu sau setează şi interoghează starea item-urilor
meniu
(menugroup groupname)
menugroup
verifică dacă un meniu grup este încărcat
(prin1 [expr [file-desc]])
prin1
tipăreşte o expresie în linia de comandă sau scrie o expresie într-un fişier

189
PROIECTARE ASISTATĂ DE COMPUTER
deschis
(princ [expr [file-desc]])
princ tipăreşte o expresie în linia de comandă sau scrie o expresie într-un fişier
deschis
(print [expr [file-desc]])
print tipăreşte o expresie în linia de comandă sau scrie o expresie într-un fişier
deschis
(prompt msg)
prompt
afişează un şir de caractere în zona utilizator de afişare prompt
(redraw [ename [mode]])
redraw redesenează viewport-ul curent sau un obiect/entitate specificat în
viewport-ul curent
(terpri)
terpri
tipăreşte linie nouă în linia Command
(textpage)
textpage
comută între ecranul grafic de desenare şi ecranul text
(textscr)
textscr
comută între ecranul grafic de desenare şi ecranul text
(vports)
vports returnează o listă a descriptorilor de viewport-uri, pentru configuraţia
curentă a viewport-urilor

graphscr
Descriere 
Afişează fereastra grafică.
  Apelare 
(graphscr)
Această funcţie este echivalentă cu comanda GRAPHSCR sau cu apăsarea tastei Flip Screen.
Funcţia textscr este complementară funcţiei graphscr.
Valoare  returnată 
nil.
Funcţii  similare 
Funcţia textscr.

grdraw
Descriere 
Desenează un vector între două puncte, în viewport-ul curent.
  Apelare 
(grdraw from to color [highlight])
Argumente 

190
FUNCŢII UTILITARE – CONTROLUL AFIŞĂRII
from 
un punct 2D sau 3D1 specificând unul din punctele de capăt ale vectorului conform
setărilor UCS-ului curent. AutoCAD adaptează vectorul pentru a se potrivi ecranului
curent
to 
un punct 2D sau 3D2 specificând celălalt punct de capăt al vectorului conform setărilor
UCS-ului curent. AutoCAD taie vectorul pentru a se potrivi ecranului curent
color 
Un număr întreg care specifică culoarea folosită pentru desenarea vectorului. -1 reprezintă
culoarea XOR, care este complementară pentru orice este desenat peste sau este şters la
supradesenare
highlight 
Un număr întreg diferit de zero indică ce vector va fi desenat pe ecran folosind metoda
implicită highlight. Dacă highlight este omis sau este zero, funcţia grdraw foloseşte
modul normal ecran
Valoare  returnată 
nil.
Funcţii  similare 
Funcţia grvecs.

grtext
Descriere 
Afişează text în linia de stare sau în zona de afişare a meniurilor.
  Apelare 
(grtext [box text [highlight]])
Argumente 
box 
Un număr întreg care specifică locaţia în care va scris textul
text 
Un şir de caractere care specifică textul care va fi scris în zona de afişare meniu sau linia
de stare. Argumentul text este trunchiat dacă este prea lung pentru a încăpea în zona
disponibilă
highlight 
Un număr întreg care selectează sau deselectează zona de afişare din meniu
Dacă este apelată fără argumente, funcţia grtext restaurează toate liniile de text la valorile
standard. Dacă este apelată cu un singur argument se generează eroare.
Valoare  returnată 
Şirul de caractere furnizat în argumentul text, dacă apelul funcţiei se efectuează cu succes, şi
nil dacă nu se efectuează cu succes, sau nu se furnizează argumente.
Screen Menu Area – Zona de afişare meniu
Dacă setaţi argumentul box la o valoare pozitivă sau la valoarea zero, specificaţi o zona de

1
o listă cu două sau trei numere reale
2
o listă cu două sau trei numere reale

191
PROIECTARE ASISTATĂ DE COMPUTER
afişare meniu. Domeniul valid pentru argumentul box este de la 0 la cel mai mare număr de
linii menu box minus 1. Variabila sistem SCREENBOXES din Command Reference
furnizează numărul maxim de rânduri text din menu boxes. Dacă argumentul highlight este
furnizat şi este un număr întreg pozitiv, funcţia grread activează textul în caseta de afişare
destinată. Activarea unei casete dezactivează automat orice altă caseta activată anterior. Dacă
argumentul highlight are valoarea zero, item-ul meniu este inactivat. Dacă argumentul
highlight este un număr negativ atunci este ignorat. Pe multe platforme, textul trebuie scris
prima dată fără argumentul highlight şi apoi trebuie activat. Activarea unei locaţii meniu este
posibilă doar dacă cursorul nu se află în acea locaţie.
Status line area – Zona de afişare din linia de stare
Dacă funcţia grread este apelată cu valoarea argumentului box -1, el scrie textul în modul
zonă linie de stare. Lungimea în modul linie de stare diferă de la ecran la ecran1. Codul
următor foloseşte expresia $2 DISSEL pentru a returna lungimea în modul linie de stare.
(setq modelen (menucmd "M=$(linelen)"))
Dacă argumentul box are valoarea +2, funcţia grtext scrie textul la coordonatele zonei liniei
de stare. Dacă modul tracking al coordonatelor este activ, valorile scrise în acest câmp sunt
suprascrise cât de repede pointer-ul trimite alt set de coordonate. Pentru ambele valori -1 şi -2,
argumentul highlight este ignorat.

grvecs
Descriere 
Desenează vectori multipli în spaţiul de desenare.
  Apelare 
(grvecs vlist [trans])
Argumente 
vlist 
O listă de vectori compusă dintr-o serie formată din numere întregi care indică culoarea3 şi
liste formate din două puncte4.
trans 
O matrice de transformare folosită pentru a schimba locaţia sau proporţia vectorilor definiţi
în lista de vectori. Matricea este o listă formată din patru liste, fiecare conţinând fiecare
patru numere reale
Valoare  returnată 
nil.
Formatul liste de vectori
Formatul pentru argumentul vlist este următorul:
([color1] from1 to1 [color2] from2 to2 ...)
Valoarea color este aplicată pentru toţi vectorii următori până când vlist specifică o altă
culoare. Culorile AutoCAD se găsesc în intervalul 0-255. Dacă valoarea culorii este mai mare
de 255, verctorii următori sunt desenaţi cu culoarea XOR, care este o culoare complementară

1
la majoritatea cel puţin 40 de caractere
2
linelen
3
opţional
4
vezi detalii pentru formarea argumentului vlist, la vlist

192
FUNCŢII UTILITARE – CONTROLUL AFIŞĂRII
pentru orice este desenat peste şi se autoşterge la supradesenare1. Dacă valoarea culorii este
mai mică decât zero, vectorul devine activ, selectat. Activarea depinde de tipul de ecran.
Majoritatea dispozitivelor ecran, de afişare, indică activarea prin linie întreruptă2, dar multe
indică aceasta printr-o culoare distinctă.
Perechea de puncte din liste, from şi to, specifică punctele de capăt ale vectorilor, exprimate
în sistemul de coordonate UCS curent. Acestea pot fi puncte 2D sau 3D. Trebuie să furnizaţi
aceste puncte în liste de perechide câte două puncte succesive sau apelul funcţiei grvecs va
eşua.
AutoCAD adaptează vectorii astfel încât să fie încadraţi în spaţiul de desenare.
Exemple 
Codul următor desenează cinci linii verticale în zona de desenare, fiecare cu o culoare
diferită:
Desenează o linie roşie din punctul (1,2) în punctul (1,5)
(grvecs '(1 (1 2)(1 5)
Desenează o linie galbenă din punctul (2,2) în punctul (2,5)
2 (2 2)(2 5)
Desenează o linie verde din punctul (3,2) în punctul (3,5)
3 (3 2)(3 5)
Desenează o linie cyan din punctul (4,2) în punctul (4,5)
4 (4 2)(4 5)
Desenează o linie albastră din punctul (5,2) în punctul (5,5)
5 (5 2)(5 5)
))
Matricea următoare reprezintă o scalare uniformă la 1.0 şi o translaţie în punctul
5.0,5.0,0.0. Dacă această matrice este aplicată listei precedente de vectori aceştia vor
fi mutaţi prin offset în 5.0,5.0,0.0.
'((1.0 0.0 0.0 5.0)
(0.0 1.0 0.0 5.0)
(0.0 0.0 1.0 0.0)
(0.0 0.0 0.0 1.0)
Funcţii  similare 
Funcţia nentselp pentru transformarea matricelor şi funcţia grdraw care desenează un vector
între două puncte.

menucmd
Descriere 
Creează comenzi meniu sau setează şi interoghează starea item-urilor meniu.
  Apelare 
(menucmd string)

1
se desenează în aceeaşi locaţie de două ori
2
formată din liniuţe

193
PROIECTARE ASISTATĂ DE COMPUTER
Argumente 
string 
Un şir de caractere care specifică o zonă meniu şi valoarea care va fi asociată acesteia.
Argumentul string are următorii parametri:
"menu_area=value"
Valorile permise pentru menu_area sunt afişate în lista următoare:
B1-B4 - Meniu de tip BUTTON între 1 şi 4. 
A1-A4 - Meniu de tip AUX între 1 şi 4. 
P0-P16 - Meniu de tip Pull-down (POP) între 0 şi 16. 
I - Meniu de tip Image tile. 
S - Meniu de tip SCREEN. 
T1-T4 - Meniu de tip TABLET între 1 şi 4. 
M - expresii şir de caractere DIESEL. 
Gmenugroup.nametag - Un menugroup şi etichetă. 
Valoare  returnată 
nil.
Exemple 
Codul următor afişează imaginea tile menu MOREICONS:
(menucmd "I=moreicons") Încarcă imaginea MOREICONS tile menu
(menucmd "I=*") Afişează meniul
Codul următor verifică starea celui de-al treilea element din meniul pull-down menu
POP11. Dacă elementul meniu este în mod curent activ funcţia menucmd îl trece în
starea inactivă.
(setq s (menucmd "P11.3=?")) Caută starea elementului nmeniu
(if (= s "") Dacă starea este un şir gol
(menucmd "P11.3=~") inactivează elementul meniu
)
Codul anterior nu este complet sigur. În plus faţă de activare sau dezactivare,
elementul meniu trebuie să poată recepţiona marcarea. Codul (menucmd "P11.3=?")
poate returna "!" indicând dacă elementul meniu este curent marcat1. Acest cod poate
determina dacă elementul meniu este inactiv şi continuă fără inactivarea lui. Dacă
codul include un apel al funcţiei wcmatch, el poate verifica status-ul pentru prezenţa
caracterului tilda (~) şi alege acţiunea cea mai apropiată.
Funcţia menucmd permite programelor AutoLISP să aibe avantajele şirurilor de
comenzi din limbajul DIESEL. Multe lucruri pot fi obţinute mai uşor cu DIESEL când
este echivalent cu codul AutoLISP. Codul următor returnează un şir de caractere care
conţine ziua şi data curentă:
(menucmd "M=$(edtime,$(getvar,date),DDDD\",\" D MONTH YYYY)")
returns "Sunday, 16 July 1995"

menugroup

1
checked

194
FUNCŢII UTILITARE – CONTROLUL AFIŞĂRII
Descriere 
Verifică dacă un meniu de tip menugroup este încărcat.
  Apelare 
(menugroup groupname)
Argumente 
groupname 
Un şir de caractere care specifică numele meniului de tip menugroup
Valoare  returnată 
Dacă argumentul groupname corespunde cu meniul menugroup încărcat, funcţia returnează
şirul groupname; altfel, funcţia returnează nil.

prin1
Descriere 
Tipăreşte o expresie în linia de comandă sau scrie o expresie într-un fişier deschis.
  Apelare 
(prin1 [expr [file-desc]])
Argumente 
expr 
Un şir de caractere sau o expresie AutoLISP. Doar argumentul expr specificat este tipărit;
nu include linienouă sau spaţii
file‐desc 
Descriptorul de fişier pentru un fişier deschis pentru scriere
Valoare  returnată 
Valoarea obţinută după evaluarea expr. Dacă apelul funcţiei se face fără argumente, funcţia
prin1 returnează un simbol nul.
Folosită ca ultimă expresie într-o funcţie prin1 folosită fără argumente tipăreşte o linie albă
atunci când execuţia funcţiei este completă permiţând astfel să termine „în linişte”.
Exemple 
Command: (setq a 123 b '(a))
(A)
Command: (prin1 'a)
AA
Comanda anterioară tipăreşte A şi returnează A.
Command: (prin1 a)
123123
Comanda anterioară tipăreşte 123 şi returnează 123.
Command: (prin1 b)
(A)(A)
Comanda anterioară tipăreşte (A) şi returnează (A).
Fiecare din exemplele precedente afişează pe ecran deoarece argumentul file-desc nu a

195
PROIECTARE ASISTATĂ DE COMPUTER
fost specificat. Dacă f este un descriptor de fişier valid pentru un fişier deschis pentru
scriere, funcţia următoare efectuează un apel de scriere a unui şir de caractere în acest
fişier şi returnează şirul de caractere:
Command: (prin1 "Hello" f)
"Hello"
Dacă argumentul expr este un şir de caractere care conţine caractere de control,
funcţia prin1 extinde aceste caractere adăugându-le ca prim caracter carecterul \, ca în
tabelul următor:
Caractere de control
Cod Descriere
\\ caracterul \
\” caracterul „
\e caracterul Escape
\n caracterul Linienoua
\r caracterul Enter
\t caracterul TAB
\nnn caracterul al cărui cod octal este nnn
Exemplul următor arată cum să folosiţi aceste caractere:
Command: (prin1 (chr 2))
"\002""\002"

princ
Descriere 
Tipăreşte o expresie în linia de comandă, sau scrie o expresie într-un fişier deschis.
  Apelare 
(princ [expr [file-desc]])
Această funcţie se aseamănă cu funcţia prin1, exceptând caracterele de control în
argumentul expr care sunt printate fără extensia /. În general, funcţia prin1 este
destinată să tipărească espresii, fiind în acest fel compatibilă cu funcţia load, în timp
ce funcţia princ tipăreşte într-un mod accesibil de funcţii ca read-line.
Argumente 
expr 
Un şir de caractere sau o expresie AutoLISP. Doar argumentul expr specificat este tipărit;
nu include linienouă sau spaţii
file‐desc 
Descriptorul de fişier pentru un fişier deschis pentru scriere
Valoare  returnată 
Valoarea obţinută după evaluarea expr. Dacă apelul funcţiei se face fără argumente, funcţia
prin1 returnează un simbol nul.

196
FUNCŢII UTILITARE – CONTROLUL AFIŞĂRII

print
Descriere 
Tipăreşte o expresie în linia de comandă sau scrie o expresie într-un fişier deschis.
  Apelare 
(print [expr [file-desc]])
Această funcţie se aseamănă cu funcţia prin1, exceptând tipărirea unui caracter
linienouă înaintea expr şi printarea unui caracter spaţiu după expr.
Argumente 
expr 
Un şir de caractere sau o expresie AutoLISP. Doar argumentul expr specificat este tipărit;
nu include linienouă sau spaţii
file‐desc 
Descriptorul de fişier pentru un fişier deschis pentru scriere
Valoare  returnată 
Valoarea obţinută după evaluarea expr. Dacă apelul funcţiei se face fără argumente, funcţia
prin1 returnează un simbol nul.

prompt
Descriere 
Afişează un şir de caractere în zona prompter-ului Command.
  Apelare 
(prompt msg)
Argumente 
msg 
Un şir de caractere
Valoare  returnată 
nil.
Exemple 
Command: (prompt "New value: ")
New value: nil

redraw
Descriere 
Redesenează viewport-ul1 curent sau un obiect2 specificat în viewport-ul curent.
  Apelare 
1
fereastra de desenare curentă, în special când spaţiul de lucru este împărţit în mai multe ferestre de
desenare
2
entitate

197
PROIECTARE ASISTATĂ DE COMPUTER
(redraw [ename [mode]])
Argumente 
ename 
Numele entităţii care trebuie redesenată
mode 
Un număr întreg care controlează vizibilitatea şi activarea1 entităţii. Argumentul mode
poate lua una din următoarele valori:
1 – arată entitatea
2 – ascunde entitatea
3 – selectează entitatea
4 – deselectează entitatea
Folosirea activării entităţii, modul 3, trebuie făcută împreună cu deselectarea entităţii,
modul 4.
Dacă argumentul ename este header-ul unei entităţi complexe2, funcţia redraw procesează
entitatea principală şi toate subentităţile dacă argumentul mode este pozitiv. Dacă argumentul
mode este negativ, funcţia redraw operează doar asupra header-ului entităţii.
Valoare  returnată 
Funcţia redraw returnează întotdeauna nil.

terpri
Descriere 
Tipăreşte linie nouă în linia de comandă.
  Apelare 
(terpri)
Funcţia terpri nu este folosită pentru fişiere I/O. Ca să puteţi scrie linie nouă într-un fişier
folosiţi funcţia prin1, sau funcţia print
Valoare  returnată 
nil.

textpage
Descriere 
Schimbă selecţia, respectiv focusul, spaţiului de desenare cu ecranul text..
  Apelare 
(textpage)
Funcţia textpage este echivalentă cu funcţia textscr.
Valoare  returnată 
nil.

1
selecţia
2
o polilinie sau un block cu atribute

198
FUNCŢII UTILITARE – CONTROLUL AFIŞĂRII

textscr
Descriere 
Schimbă selecţia spaţiului de desenare cu ecranul text. Are acelaşi efect cu funcţia AutoCAD
asociată cu tasta F2.
  Apelare 
(textscr)
Valoare  returnată 
Funcţia textscr returnează întotdeauna nil.
Funcţii  similare 
Funcţia graphscr.

vports
Descriere 
Returnează o listă cu descriptorii viewport-urilor pentru configuraţia curentă a viewport-
urilor.
  Apelare 
(vports)
Valoare  returnată 
Unul sau mai mulţi descriptori de viewport-uri, care constau din numărul de identificare al
viewport-ului şi coordonatele colţurilor stânga–jos şi dreapta-sus ale viewport-urilor.
Dacă variabila sistem AutoCAD TILEMODE este setată cu valoarea 1, deci on, lista returnată
descrie configuraţia viewport-urilor create cu comanda AutoCAD VPORTS. Colţurile
viewport-urilor sunt exprimate în valori între 0.0 şi 1.0, cu (0.0, 0.0) reprezentând colţul din
stânga-jos al ecranului zonei de desenare, şi (1.0, 1.0) colţul din dreapta-sus. Dacă
TILEMODE este 0, deci off, lista returnată descrie obiectele viewport create cu comanda
MVIEW. Colţurile obiectelor viewport sunt exprimate în coordonate spaţiu hârtie. Viewport-
ul numărul 1 este întotdeauna spaţiul hârtie când TILEMODE este off.
Exemple 
Dacă aveţi o configuraţie cu un singur viewport cu TILEMODE on, funcţia vports va returna
următoarea listă:
((1 (0.0 0.0) (1.0 1.0)))
Dacă aveţi o configuraţie cu patru viewport-uri egale ca dimensiune localizate în cele patru
colţuri ale ecranului, cu TILEMODE on, funcţia vports poate returna următoarea listă:
((5 (0.5 0.0) (1.0 0.5))
(2 (0.5 0.5) (1.0 1.0))
(3 (0.0 0.5) (0.5 1.0))
(4 (0.0 0.0) (0.5 0.5)) )
Descriptorul viewport-ului curent este întotdeauna primul în listă. În exemplul
anterior, viewport-ul numărul 5 era cel curent.

7.2.4. Manipularea fişierelor

199
PROIECTARE ASISTATĂ DE COMPUTER
Nume funcţie Descriere
(close file-desc)
close
închide un fişier deschis
(findfile filename)
findfile caută după un fişier speficicat, în biblioteca AutoCAD cu căile
implicite de căutare, după un fişier speficicat
(open filename mode)
open deschide un fişier pentru a fi accesat I/O de către funcţiile
AutoLISP
(read-char [file-desc])
read-char returnează codul zecimal ASCII care reprezintă caracterul citit de
la tastatură sau dintr-un fişier deschis
(read-line [file-desc])
read-line
citeşte un şir de caractere de la tastatură sau dintr-un fişier deschis
(vl-directory-files [directory patterndirectories])
vl-directory-files
listează toate fişierele care se găsesc în directorul dat
(vl-file-copy "source-filename" "destination-filename"
vl-file-copy [append?])
copiază sau adaugă conţinutul unui fişier la conţinutul altui fişier
(vl-file-delete "filename")
vl-file-delete
şterge un fişier
(vl-file-directory-p "filename")
vl-file-directory-p
determină dacă numele unui fişier se referă la un director
(vl-file-rename "old-filename" "new-filename")
vl-file-rename
redenumeşte un fişier
(vl-file-size "filename")
vl-file-size
determină marimea unui fişier în byte
(vl-file-systime "filename")
vl-file-systime
determină timpul ultimei modificări pentru un fişier specificat
(vl-filename-base "filename")
vl-filename-base returnează numele unui fişier după eliminarea căii directoare şi a
extensiei
(vl-filename-directory "filename")
vl-filename-directory returnează calea directoare pentru un fişier după eliminarea
numelui şi a extensiei fişierului
(vl-filename-extension "filename")
vl-filename-extension
returnează estensia unui fişier după eliminarea restului numelui
(vl-filename-mktemp ["pattern" "directory" "extension"])
vl-filename-mktemp calculează numele unui fişier pentru a fi folosit la un fişier
temporar
(write-char num [file-desc])
write-char
scrie un caracter pe ecran sau într-un fişier deschis
(write-line string [file-desc])
write-line
scrie un şir de caractere pe ecran sau într-un fişier deschis

200
FUNCŢII UTILITARE – MANIPULAREA FIŞIERELOR

close
Descriere 
Închide un fişier deschis.
  Apelare 
(close file-desc)
Argumente 
file‐desc 
Un descriptor de fişier obţinut cu funcţia open
Valoare  returnată 
nil dacă argumentul file-desc este valid; altfel este returnat un mesaj de eroare.
După apelul funcţiei close, descriptorul de fişier este neschimbat dar nu mai este valid. Datele
adăugate unui fişier deschis nu mai pot scrise după ce fişierul a fost închis.
Exemple 
Codul următor contorizează numărul liniilor din fişierul somefile.txt şi setează
variabila ct egală cu acest număr:
(setq fil "SOMEFILE.TXT")
(setq x (open fil "r") ct 0)
(while (read-line x)
(setq ct (1+ ct))
)
(close x)

findfile
Descriere 
Caută în biblioteca căilor de căutare AutoCAD1 un fişier specificat sau un director.
  Apelare 
(findfile filename)
Funcţia findfile nu face nici o presupunere despre tipul fişierului sau a extensiei argumentului
filename. Dacă argumentul filename nu are specificat un prefix drive/director, funcţia
findfile caută în biblioteca cu căile de căutare AutoCAD. Dacă este specificat un prefix
drive/director, funcţia findfile caută numai în aceste directoare.
Argumente 
filename 
Numele fişierului sau al directorului care va fi căutat
Valoare  returnată 
Un şir de caractere care conţine numele complet al fişierului; altfel nil, dacă fişierul sau
directorul specificat nu este găsit.
Numele de fişier returnat de funcţia findfile este corespunzător pentru a putea fi folosit cu

1
căile implicite de căutare a fişierelor AutoCAD, setate implicit de sistem sau setate de utilizator

201
PROIECTARE ASISTATĂ DE COMPUTER
funcţia open.
Exemple 
Dacă directorul curent este /Autocad 2008 şi conţine fişierul abc.lsp, următorul apel de
funcţie găseşte calea către acest fişier:
Command: (findfile "abc.lsp")
"C:\\Program Files\\ AutoCAD 2005\\abc.lsp"
Dacă editaţi un desen în directorul /Autocad 2008/drawings, şi variabila AutoCAD
environment este setată la directorul /AutoCAD 2008/support, şi fisierul xyz.txt există
numai în directorul /AutoCAD 2008/support atunci următoarea comandă recuperează calea
către acesta:
Command: (findfile "xyz.txt")
"C:\\Program Files\\ AutoCAD 2008\\support\\xyz.txt"
Dacă fişierul nosuch nu este prezent în niciuna din căile de căutare AutoCAD, funcţia findfile
returnează nil:
Command: (findfile "nosuch")
nil

open
Descriere 
Deschide un fişier pentru accesarea I/O de către funcţiile AutoLISP.
  Apelare 
(open filename mode)
Argumente 
filename 
Un şir de caractere care specifică numele şi extensia fişierului care va fi deschis. Dacă nu
specificaţi toată calea către fişier, funcţia open consideră că doriţi să deschideţi un fişier
din directorul de desenare implicit
mode 
Indică dacă un fişier este deschis pentru citire, scriere sau adăugare. Se specifică un şir de
caractere care conţine una din următoarele trei litere:
r – deschide fişierul pentru scriere
w – deschide fişierul pentru scriere. Dacă fişierul specificat prin argumentul filename nu
există, este creat un nou fişier şi deschis. Dacă fişierul există deja, datele existente în fişier
sunt suprascrise. Datele trimise către un fişier deschis nu mai pot fi scrise după ce fişierul a
fost închis cu funcţia close
a – deschide fişierul pentru adăugare. Dacă fişierul specificat prin argumentul filename nu
există, este creat un nou fişier şi deschis. Dacă fişierul există deja, el este deschis şi
pointer-ul este poziţionat la sfârşitul datelor existente, deci noile date vor fi scrise în fişier
prin adăugare la datele existente.
Argumentul mode poate fi furnuzat cu carectere majuscule şi cu minuscule
Valoare  returnată 
Pentru o operaţie efectuată cu succes, funcţia open returnează descriptorul fişierului, acesta

202
FUNCŢII UTILITARE – MANIPULAREA FIŞIERELOR
putând fi folosit de alte funcţii I/O1. Dacă argumentul mode are valoarea ”r” şi fişierul
specificat de argumentul filename nu există funcţia open returnează nil.
În sistemul de operare DOS, multe programe şi editoare de text scriu fişierele text cu un
marker end-of-file2 la sfârşitul textului. Când este citit un fişier text, DOS returnează un
end-of file dacă este întâlnit un marker CTRL-Z, chiar dacă acesta este urmat de mai multe
date. Dacă intenţionaţi să folosiţi funcţia open în modul de adăugare de noi date fişierelor,
date produse de un alt program, asiguraţi-vă că alt program nu inserează un marker CTRL-Z
la sfârşitul fişierelor lui de text.3
Exemple 
Deschide un fişier existent:
Command: (setq a (open "c:/program files/ <AutoCAD installation
directory>/help/filelist.txt" "r"))
#<file "c:/program files/ <AutoCAD installation directory>/help/filelist.txt">
Elemplele următoare deschid fişiere chiar dacă acestea nu există:
Command: (setq f (open "c:\\my documents\\new.tst" "w"))
#<file "c:\\my documents\\new.tst">
Command: (setq f (open "nosuch.fil" "r"))
nil
Command: (setq f (open "logfile" "a"))
#<file "logfile">

read-char
Descriere 
Returnează codul zecimal ASCII pentru un caracter citit de la tastatură sau dintr-un fişier
deschis.
  Apelare 
(read-char [file-desc])
Argumente 
file‐desc 
Un descriptor de fişier4 care referă un fişier deschis. Dacă argumentul file-desc nu este
specificat, funcţia read-char obţine intrarea de la tastatură
Valoare  returnată 
Un număr întreg reprezentând codul ASCII pentru un caracter. Funcţia read-char returnează
un singur caracter linienouă5 de fiecare dată când detectează secvenţa de caractere sau
caracterul end-of-line6.

1
In/Out – Intrare/Ieşire
2
CTRL-Z, codul zecimal ASCII 26
3
markerul CTRL-Z are rolul de a semnala sfârşitul fişierului, deci datele adăugate dupa un asemenea
marker pot fi ignorate
4
obţinut cu funcţia open
5
cod ASCII 10
6
marker care desemnează sfârşitul liniei curente

203
PROIECTARE ASISTATĂ DE COMPUTER
Exemple 
În exemplul următor nu apare argumentul file-desc, deci funcţia read-char va prelua
datele de intrare de la tastatură:
Command: (read-char)
Buffer-ul tastaturii1 este gol, deci funcţia read-char aşteaptă introducerea datelor de
către utilizator:
ABC
65
Utilizatorul introduce ABC; funcţia read-char returnează codul ASCII corepunzător
primului caracter introdus (A). Următoarele trei apeluri ale funcţiei read-char
returnează datele rămase în buffer-ul tastaturii. Aceste date sunt translatate în 66 -
codul ASCII pentru litera B, 67 - codul ASCII pentru litera C şi 10 - linienouă:
Command: (read-char)
66
Command: (read-char)
67
Command: (read-char)
10
Cum buffer-ul tastaturii este gol acum, funcţia read-char aşteaptă date de la utilizator
la următoarele apeluri:
Command: (read-char)

read-line
Descriere 
Citeşte un şir de caractere de la tastatură sau dintr-un fişier deschis până când este găsit
marker-ul end-of-line.
  Apelare 
(read-line [file-desc])
Argumente 
file‐desc 
Un descriptor de fişier2 care referă un fişier deschis. Dacă argumentul file-desc nu este
specificat, funcţia read-char obţine intrarea de la tastatură
Valoare  returnată 
Şirul citit cu funcţia read-line, fără marker end-of-line. Dacă întâlneşte end-of-file, atunci
returnează nil.
Exemple 
Deschide un fişier pentru citire:
Command: (setq f (open "c:\\my documents\\new.tst" "r"))

1
la introducerea de la tastatură, caracterele tastate sunt păstrate într-un buffer, zona de memorie, până la
preluarea acestora de către sistem, respectiv funcţii
2
obţinut cu funcţia open

204
FUNCŢII UTILITARE – MANIPULAREA FIŞIERELOR
#<file "c:\\my documents\\new.tst">
Folosiţi funcţia read-line pentru a citi o linie din fişier:
Command: (read-line f)
"To boldly go where nomad has gone before."
Obţine o linie text introdusă de către utilizator:
Command: (read-line)
To boldly go
"To boldly go"

vl-directory-files
Descriere 
Listează toate fişierele din directorul dat.
  Apelare 
(vl-directory-files [directory pattern directories])
Argumente 
directory 
Un şir de caractere care specifică directorul de unde se colectează fişierele; dacă este nil
sau lipseşte, funcţia vl-directory-files foloseşte directorul curent
pattern 
Un şir de caractere care conţine calea pentru fişier, în format DOS; funcţia vl-directory-
files foloseşte ”*.*”
directories 
Un număr întreg care indică dacă lista returnată trebuie să includă numele de director.
Specifică unul din următoarele:
-1 – doar lista directoarelor
0 – lista fişierelor şi directoarelor1
1 – lista fişierelor
Valoare  returnată 
O listă a fişierelor şi căii de nume; altfel nil, dacă nu se găsesc fişiere în calea specificată.
Exemple 
_$ (vl-directory-files "c:/acadwin" "acad*.exe")
("ACAD.EXE" "ACADAPP.EXE" "ACADL.EXE" "ACADPS.EXE")
_$ (vl-directory-files "e:/acadwin" nil -1)
("." ".." "SUPPORT" "SAMPLE" "ADS" "FONTS" "IGESFONT" "SOURCE" "ASE")
_$ (vl-directory-files "E:/acad13c4" nil -1)
("." ".." "WIN" "COM" "DOS")

vl-file-copy
Descriere 

1
opţiune implicită

205
PROIECTARE ASISTATĂ DE COMPUTER
Copiază sau adaugă conţinutul unui fişier într-un alt fişier.
  Apelare 
(vl-file-copy source-file destination-file [append])
Copiază sau adaugă conţinutul unui fişier la un alt fişier. Funcţia vl-file-copy nu va suprascrie
un fişier existent; ea doar va adăuga la el.
Argumente 
source‐file 
Un şir de caractere care specifică numele fişierului care va fi copiat. Dacă nu specificaţi
calea de nume completă, funcţia vl-file-copy se uită în directorul implicit de salvare a
desenelor.
destination‐file 
Un şir de caractere care specifică fişierul destinaţie. Dacă nu specificaţi calea de nume
completă, funcţia vl-file-copy scrie în directorul implicit de salvare a desenelor
append 
Dacă este specificat şi nu este nil, fişierul specificat în argumentul source-file este adăugat
la fişierul specificat în argumentul destination-file1
Valoare  returnată 
Un număr întreg, dacă operaţia de copiere s-a efectuat cu succes; altfel nil.
Câteva din motivele tipice pentru returnare nil sunt:
- fişierul specificat de argumentul source-file nu este accesibil
- fişierul specificat de argumentul source-file este un director
- argumentul append este absent sau nil şi există fişierul specificat de argumentul
destination-file
- fişierul specificat de argumentul destination-file nu poate fi deschis pentru ieşire2
- fişierul specificat de argumentul source-file este acelaşi cu fişierul specificat de
argumentul destination-file
Exemple 
Copiază autoexec.bat în newauto.bat:
_$ (vl-file-copy "c:/autoexec.bat"
"c:/newauto.bat")
1417
Copiază test.bat în newauto.bat:
_$ (vl-file-copy "c:/test.bat"
"c:/newauto.bat")
nil
Copierea eşuează deaorece newauto.bat există deja şi argumentul append nu este
specificat.
Repetă comanda anterioară, dar argumentul append este specificat:
_$ (vl-file-copy "c:/test.bat"
"c:/newauto.bat" T)
185
1
dacă acesta există, fişierul sursă va fi copiat la sfârşitul acestuia
2
dacă există, este un nume ilegal de fişier sau fişierul este protejat la scriere

206
FUNCŢII UTILITARE – MANIPULAREA FIŞIERELOR
Copierea se face su succes deaorece T este specificat pentru argumentul append.

vl-file-delete
Descriere 
Şterge un fişier.
  Apelare 
(vl-file-delete filename)
Argumente 
filename 
Un şir de caractere care conţine numele fişierului care va fi şters. Dacă nu specificaţi calea
de nume completă, funcţia vl-file-delete caută în directorul implicit de desenare1
Valoare  returnată 
T dacă ştergerea se efectuează cu succes; nil dacă ştergerea eşuează.
Exemple 
Sterge newauto.bat:
_$ (vl-file-delete "newauto.bat")
nil
Ştergerea s-a efectuat cu succes deoarece calea de nume identifică un fişier existent.
Şterge fişierul newauto.bat din directorul c:\ :
_$ (vl-file-delete "c:/newauto.bat")
T
Nu a fost şters nimic deoarece aici nu există fişierul newauto.bat în calea AutoCAD
implicită de desenare.

vl-file-directory-p
Descriere 
Verifică dacă un nume de fişier este nume de director.
  Apelare 
(vl-file-directory-p filename)
Argumente 
filename 
Un şir de caractere care conţine numele fişierului. Dacă nu specificaţi calea de nume
completă, funcţia vl-file-directory-p caută în directorul implicit de desenare
Valoare  returnată 
T, dacă argumentul filename este numele unui director; nil dacă nu este.
Exemple 
_$ (vl-file-directory-p "sample")
1
directorul implicit de salvare a desenelor

207
PROIECTARE ASISTATĂ DE COMPUTER
T
_$ (vl-file-directory-p "yinyang")
nil
_$ (vl-file-directory-p "c:/My
Documents")
T
_$ (vl-file-directory-p "c:/My
Documents/Visual LISP /yinyang.lsp")
nil

vl-file-rename
Descriere 
Redenumeşte un fişier.
  Apelare 
(vl-file-rename old-filename new-filename)
Argumente 
old‐filename 
Un şir de caractere care conţine numele fişierului pe care doriţi să îl redenumiţi. Dacă nu
specificaţi complet calea de nume, funcţia vl-file-rename caută în directorul AutoCAD de
desenare implicit
new‐filename 
Un şir de caractere care conţine noul nume care va fi asignat fişierului
Observaţie: Dacă nu specificaţi complet calea de nume, funcţia vl-file-rename scrie
fişierul redenumit în directorul de desenare implicit al AutoCAD
Valoare  returnată 
Funcţia returnează T dacă redenumirea se efectuează cu succes; nil dacă redenumirea eşuează.
Exemple 
_$ (vl-file-rename "c:/newauto.bat"
"c:/myauto.bat")
T

vl-file-size
Descriere 
Determină mărimea unui fişier în bytes.
  Apelare 
(vl-file-size filename)
Argumente 
filename 
Un şir de caractere care conţine numele fişierului care va fi măsurat

208
FUNCŢII UTILITARE – MANIPULAREA FIŞIERELOR
Valoare  returnată 
Dacă operaţia se efectuează cu succes, funcţia vl-file-size returnează un număr întreg care
arată mărimea fişierului specificat de argumentul filename. Dacă fişierul nu este citibil,
funcţia vl-file-size returnează nil. Dacă argumentul filename specifică un director sau un
fişier gol, funcţia vl-file-size returnează 0.
Exemple 
_$ (vl-file-size "c:/autoexec.bat")
1417
_$ (vl-file-size "c:/")
0
În exemplul precedent, funcţia vl-file-size returnează 0 deoarece c:/ este un director.

vl-file-systime
Descriere 
Returnează timpul ultimei modificări a unui fişier specificat.
  Apelare 
(vl-file-systime filename)
Argumente 
filename 
Un şir de caractere care conţine numele fişierului care va fi verificat
Valoare  returnată 
Funcţia returnează o listă care conţine data şi timpul la care s-a făcut modificarea; dacă
fişierul nu este găsit funcţia returnează nil.
Lista returnată conţine următoarele elemente:
• anul
• luna
• ziua din săptămână
• ziua din lună
• ora
• minutul
• secunda
Luni este ziua 1 din zilele săptămânii, Marţi este ziua a doua, ş.a.m.d.
Exemple 
_$ (vl-file-systime
"c:/program files/<AutoCAD installation
directory>/sample/Visual LISP /yinyang.lsp")
(1998 4 3 8 10 6 52)
Valoarea returnată arată că acest fişier a fost modificat ultima dată în 1998, în luna 4 a anului,
deci Aprilie, ziua 3 din săptămână, deci Miercuri, ziua 8 din lună, la ora 10:6:52.

209
PROIECTARE ASISTATĂ DE COMPUTER

vl-filename-base
Descriere 
Returnează numele unui fişier, după eliminarea căii directoare şi a extensiei.
  Apelare 
(vl-filename-base filename)
Argumente 
filename 
Un şir de caractere care conţine numele fişierului. Funcţia vl-filename-base nu verifică
dacă fişierul există
Valoare  returnată 
Funcţia returnează un şir de caractere care conţine numele fişierului scris cu caractere
majuscule, având eliminat orice director, precum şi extensia de nume.
Exemple 
_$ (vl-filename-base "c:\\acadwin\\acad.exe")
"ACAD"
_$ (vl-filename-base "c:\\acadwin")
"ACADWIN"

vl-filename-directory
Descriere 
Returnează calea de directoare pentru un fişier, după eliminarea numelui şi a extensiei
fişierului.
  Apelare 
(vl-filename-directory filename)
Argumente 
filename 
Un şir de caractere care conţine numele fişierului complet, inclusiv calea către acesta.
Funcţia vl-filename-directory nu verifică dacă fişierul specificat există. Ca delimitator de
directoare sunt acceptate caracterele slash (/) şi backslash (\)
Valoare  returnată 
Funcţia returnează un şir de caractere care conţine calea de directoare din numele fişierului, cu
caractere majuscule.
Exemple 
_$ (vl-filename-directory
"c:\\acadwin\\acad.exe")
"C:\\ACADWIN"
_$ (vl-filename-directory
"acad.exe")
""

210
FUNCŢII UTILITARE – MANIPULAREA FIŞIERELOR

vl-filename-extension
Descriere 
Returnează extensia unui fişier după eliminarea restului numelui.
  Apelare 
(vl-filename-extension filename)
Argumente 
filename 
Un şir de caractere care conţine numele fişierului, inclusiv extensia acestuia. Funcţia vl-
filename-extension nu verifică dacă fişierul specificat există
Valoare  returnată 
Funcţia returnează un şir de caractere care conţine extensia fişierului specificat de argumentul
filename. Şirul de caractere returnat începe cu caracterul punct (.) şi este scris cu caractere
majuscule. Dacă fişierul specificat de argumentul filename nu are extensie, funcţia vl-
filename-extension returnează nil.
Exemple 
_$ (vl-filename-extension
"c:\\acadwin\\acad.exe")
".EXE"
_$ (vl-filename-extension "c:\\acadwin\\acad")
nil

vl-filename-mktemp
Descriere 
Calculează numele unui fişier pentru a fi folosit la un fişier temporar.
  Apelare 
(vl-filename-mktemp [pattern directory extension])
Argumente 
pattern 
Un şir de caractere care conţine modelul pentru numele fişierului; dacă are valoarea nil sau
este omis, funcţia vl-filename-mktemp foloseşte ”$VL~~”
directory 
Un şir de caractere care conţine numele directorului pentru fişierele temporare; dacă are
valoarea nil sau este omis, funcţia vl-filename-mktemp alege un director în următoarea
ordine:
- Directorul specificat de argumentul pattern, dacă există această valoare;
- Directorul specificat de variabila sistem TMP;
- Directorul specificat de variabila sistem TEMP;
- Directorul curent.
extension 
Un şir de caractere care conţine numele extensiei asignate fişierului; dacă are valoarea nil
sau este omis, funcţia vl-filename-mktemp foloseşte extensia specificată de argumentul

211
PROIECTARE ASISTATĂ DE COMPUTER
pattern1
Valoare  returnată 
Funcţia returnează un şir de caractere care conţine numele fişierului, în formatul următor:
directory\base<XXX><.extension>
unde:
- base este format din maxim 5 caractere, preluate din argumentul pattern
- XXX este o combinaţie unică formată din 3 caractere
Toate fişierele generate de funcţia vl-filename-mktemp în timpul unei sesiuni VLISP sunt
şterse la terminarea sesiunii VLISP.
Exemple 
_$ (vl-filename-mktemp)
"C:\\TMP\\$VL~~004"
_$ (vl-filename-mktemp "myapp.del")
"C:\\TMP\\MYAPP005.DEL"
_$ (vl-filename-mktemp "c:\\acadwin\\myapp.del")
"C:\\ACADWIN\\MYAPP006.DEL"
_$ (vl-filename-mktemp "c:\\acadwin\\myapp.del")
"C:\\ACADWIN\\MYAPP007.DEL"
_$ (vl-filename-mktemp "myapp"
"c:\\acadwin")
"C:\\ACADWIN\\MYAPP008"
_$ (vl-filename-mktemp "myapp"
"c:\\acadwin" ".del")
"C:\\ACADWIN\\MYAPP00A.DEL"

write-char
Descriere 
Scrie un caracter pe ecran sau într-un fişier deschis.
  Apelare 
(write-char num [file-desc])
Argumente 
num 
Codul zecimal ASCII pentru caracterul care trebuie scris
file‐desc 
Un descriptor de fişier care indică un fişier deschis
Valoare  returnată 
Funcţia returnează valoarea argumentului num.
Exemple 
Comanda următoare scrie litera C în fereastra Command şi returnează argumentul num

1
aceasta poate fi un şir de caractere gol

212
FUNCŢII UTILITARE – MANIPULAREA FIŞIERELOR
furnizat:
Command: (write-char 67)
C67
Presupunem că f este un descriptor de fişier pentru un fişier deschis; comanda următoare scrie
litera C în acest fişier:
Command: (write-char 67 f)
67
Observaţie: Funcţia write-char nu poate scrie caracterul NULL, cod ASCII 0, într-un fişier.

write-line
Descriere 
Scrie un şir de caractere pe ecran sau într-un fişier deschis.
  Apelare 
(write-line string [file-desc])
Argumente 
string 
Un şir de caractere
file‐desc 
Un descriptor de fişier care indică un fişier deschis
Valoare  returnată 
Funcţia returnează argumentul string, în forma implicită. Dacă scriem un fişier, apostrofele
sunt omise.
Exemple 
Deschideţi un fişier nou:
Command: (setq f (open "c:\\my documents\\new.tst" "w"))
#<file "c:\\my documents\\new.tst">
Folosiţi funcţia write-line pentru a scrie o linie în fişier:
Command: (write-line "To boldly go where nomad has gone before." f)
"To boldly go where nomad has gone before."
Linia nu este scrisă fizic în fişier până când acest fişier nu este închis:
Command: (close f)
nil

7.2.5. Geometrice

Nume funcţie Descriere


(angle pt1 pt2)
angle returnează valoarea unui unghi, exprimată în radiani, pentru înclinarea
unei linii definită prin două puncte de capăt
(distance pt1 pt2)
distance
returnează distanţa 3D dintre două puncte

213
PROIECTARE ASISTATĂ DE COMPUTER
(inters pt1 pt2 pt3 pt4 [onseg])
inters
caută punctul de intersecţie dintre două linii
(osnap pt mode)
osnap returnează un punct 3D rezultat prin aplicarea modului Object Snap
asupra unui punct specificat
(polar pt ang dist)
polar returnează un punct 3D raportat la sistemul de coordonate UCS, având
specificate unghiul şi distanţa până la punct
(textbox elist)
textbox măsoară un obiect specificat, de tip text, şi returnează coordonatele
diagonalei dreptunghiului care poate încadra acest text

angle
Descriere 
Returnează valoarea unui unghi, exprimată în radiani, pentru înclinarea unei linii definită prin
două puncte de capăt.
  Apelare 
(angle pt1 pt2)
Argumente 
pt1 
Un punct de capăt
pt2 
Un punct de capăt
Valoare returnată 
Un unghi exprimat în radiani. Unghiul este măsurat de la axa X a planului curent de
construcţie, în radiani, cu sensul pozitiv de măsurare a unghiului în sens trigonometric. Dacă
sunt furnizate puncte 3D, acestea sunt proiectate pe planul curent de construcţie.
Exemple 
Command: (angle '(1.0 1.0) '(1.0 4.0))
1.5708
Command: (angle '(5.0 1.33) '(2.4 1.33))
3.14159

distance
Descriere 
Returnează distanţa 3D dintre două puncte.
  Apelare 
(distance pt1 pt2)
Argumente 
pt1 

214
FUNCŢII UTILITARE – GEOMETRICE
O listă care conţine coordonatele unui punct 2D sau 3D
pt2 
O listă care conţine coordonatele unui punct 2D sau 3D
Valoare returnată 
Distanţa.
Dacă unul sau ambele argumente furnizate sunt puncte 2D, atunci funcţia distance ignoră
coordonata Z a oricărui punct 3D furnizat şi returnează distanţa 2D dintre proiecţia punctelor
pe planul de construcţie curent.
Exemple 
Command: (distance '(1.0 2.5 3.0) '(7.7 2.5 3.0))
6.7
Command: (distance '(1.0 2.0 0.5) '(3.0 4.0 0.5))
2.82843

inters
Descriere 
Caută punctul de intersecţie dintre două linii.
  Apelare 
(inters pt1 pt2 pt3 pt4 [onseg])
Argumente 
pt1 
Unul din punctele de capăt pentru prima linie
pt2 
Celălalt punct de capăt pentru prima linie
pt3 
Unul din punctele de capăt a doua linie
pt4 
Celălalt punct de capăt pentru a doua linie
onseg 
Dacă este furnizat ca nil liniile definite de cele patru argumente pt sunt considerate de
lungime infinită. Dacă argumentul onseg este omis sau nu este nil punctul de intersecţie
trebuie să aparţină ambelor linii sau funcţia inters returnează nil
Valoare returnată 
Dacă argumentul onseg este prezent şi este nil funcţia inters returnează punctul unde se
intersectează liniile, chiar dacă acest punct este în afara uneia sau ambelor linii. Dacă
argumentul onseg este omis, sau nu este nil, punctul de intersecţie trebuie să aparţină ambelor
linii, sau funcţia inters returnează nil. Funcţia inters returnează nil dacă cele două linii nu se
intersectează.
Exemple 
(setq a '(1.0 1.0) b '(9.0 9.0))
(setq c '(4.0 1.0) d '(4.0 2.0))
Command: (inters a b c d)

215
PROIECTARE ASISTATĂ DE COMPUTER
nil
Command: (inters a b c d T)
nil
Command: (inters a b c d nil)
(4.0 4.0)

osnap
Descriere 
Returnează un punct 3D rezultat prin aplicarea modului Object Snap asupra unui punct
specificat.
  Apelare 
(osnap pt mode)
Argumente 
pt 
Un punct
mode 
Un şir de caractere care constă din unul sau mai mulţi identificatori valizi pentru Object
Snap, ca de exemplu mid, cen, ş.a.m.d., separaţi prin virgulă
Valoare returnată 
Un punct; altfel nil, dacă punctul de selecţie nu returnează un obiect. Punctul returnat de
osnap depinde de tipul de vedere 3D, entitatea AutoCAD din jurul punctului pt şi setările
pentru variabila sistem AutoCAD APERTURE.
Exemple 
Command: (setq pt1 (getpoint))
(11.8637 3.28269 0.0)
Command: (setq pt2 (osnap pt1 "_end,_int"))
(12.1424 3.42181 0.0)

polar
Descriere 
Returnează un punct 3D raportat la sistemul de coordonate UCS, având specificate unghiul şi
distanţa până la punct.
  Apelare 
(polar pt ang dist)
Argumente 
pt 
Un punct 2D sau 3D
ang 
Un unghi exprimat în radiani relativ la axa X a sistemului de coordonate WCS. Sensul
pozitiv de măsurarea al unghiului este în sens trigonometric, independent de planul de

216
FUNCŢII UTILITARE – GEOMETRICE
construcţie
dist 
Distanţa pentru un punct specificat
Valoare returnată 
Un punct 2D sau 3D depinzând de tipul de punct specificat de argumentul pt.
Exemple 
Furnizează un punct 3D la polar:
Command: (polar '(1 1 3.5) 0.785398 1.414214)
(2.0 2.0 3.5)
Furnizează un punct 2D la polar:
Command: (polar '(1 1) 0.785398 1.414214)
(2.0 2.0)

textbox
Descriere 
Măsoară un obiect specificat de tip text, şi returnează coordonatele diagonalei dreptunghiului
care poate încadra acest text.
  Apelare 
(textbox elist)
Argumente 
elist 
Lista de definiţie a unei entităţi de tip text, în formatul returnat de funcţia entget. Atunci
când câmpurile care definesc parametrii textului, altele decât textul însuşi, sunt omise din
elist, sunt folosite setările curente sau implicite. Lista minimă acceptată de funcţia textbox
este formată din textul însuşi
Valoare returnată 
O listă formată din două puncte dacă apelul funcţiei se efectuează cu succes; altfel nil.
Punctele returnate de funcţia textbox descriu dreptunghiul care poate încadra obiectul text
dacă acesta are punctul de inserare în (0,0,0) şi unghiul de rotaţie este 0. Prima listă returnată
este în general punctul (0.0, 0.0, 0.0), în afara cazurilor când obiectul text este oblic sau
vertical, sau conţine litere cu codiţă, ca de exemplu g şi p. Valoarea primei liste tip punct
specifică offset-ul dintre punctul de inserare a textului şi colţul din stânga-jos a celui mai mic
dreptunghi care poate încadra textul. În funcţie de orientarea textului care trebuie măsurat,
lista tip punct returnează întotdeauna descrierea colţurilor stânga-jos şi dreapta-sus a
dreptunghiului care poate încadra obiectul text
Exemple 
Comanda următoare furnizează textul şi acceptă setările implicite pentru restul parametrilor:
Command: (textbox '((1 . "Hello world.")))
((0.000124126 -0.00823364 0.0) (3.03623 0.310345 0.0))

7.2.6. Interogare şi Funcţii

217
PROIECTARE ASISTATĂ DE COMPUTER
Nume funcţie Descriere
( acad_colordlg colornum [flag])
acad_colordlg afişează culorile AutoCAD standard pentru caseta de dialog
Selection
( acad_helpdlg helpfile topic)
acad_helpdlg
invocă facilităţile de ajutor, help
( command [arguments] ...)
command
execută o comandă AutoCAD
( getcfg cfgname)
getcfg
extrage date aplicaţie din secţiunea AppData a fişierului acad*.cfg
( getcname cname)
getcname
obţine numele local sau în engleză al unei comenzi AutoCAD
(getenv "variable-name")
getenv
returnează, ca şir de caractere, numele unei variabile sistem
( getvar varname)
getvar
obţine valoarea unei variabile sistem AutoCAD
( help [helpfile [topic [command]]])
help
invocă facilităţile de ajutor, help
( setcfg cfgname cfgval)
setcfg
scrie date aplicaţie în secţiunea AppData a fişierului acad*.cfg
( setenv "varname""value")
setenv
setează o variabilă sistem la o valoare specificată
( setfunhelp "c:fname" ["helpfile" ["topic" ["command"]]])
înregistrează o comandă definită de utilizator cu facilitate de ajutor în
setfunhelp
cel mai convenabil fişier şi subiect de ajutor, care este apelat când
utilizatorul solicită ajutor pentru această comandă
( setvar varname value)
setvar
setează o variabilă sistem AutoCAD la o valoare specificată
( ver)
ver returnează numărul versiunii curente AutoLISP sub forma unui şir de
caractere
( vl-cmdf [arguments] ...)
vl-cmdf
execută o comandă AutoCAD după evaluarea argumentelor
( vlax-add-cmd global-name func-sym [local-name cmd-flags])
vlax-add-cmd
adaugă o comandă la un grup de comenzi; necesită vl-load-com
( vlax-remove-cmd global-name)
vlax-remove-cmd
elimină o comandă sau un grup de comenzi; necesită vl-load-com

acad_colordlg
Descriere 
Afişează culorile AutoCAD standard pentru caseta de dialog Selection.
  Apelare 

218
FUNCŢII UTILITARE – INTEROGARE ŞI FUNCŢII
(acad_colordlg colornum [flag])
Argumente 
colornum 
Un număr întreg în domeniul 0-256, inclusiv, specificând culoarea AutoCAD care va fi
afişată ca implicită iniţial. Valoarea implicită este 0 pentru ByBlock şi 256 pentru
ByLayer
flag 
Dacă este setat ca nil, inactivează butoanele ByLayer şi ByBlock. Dacă argumentul flag
este omis sau este setat la o valoare diferită de nil butoanele ByLayer şi ByBlock sunt
activate
Valoare returnată 
Numărul culorii selectate de utilizator; altfel nil dacă utilizatorul abandonează caseta de
dialog.
Exemple 
Aşteaptă de la utilizator selectarea unei culori şi setează culoarea implicită verde dacă nu este
selectat nimic:
(acad_colordlg 3)

acad_helpdlg
Descriere 
Invocă facilităţile de ajutor, help1.
  Apelare 
(acad_helpdlg helpfile topic)
Funcţia definită extern a fost înlocuită cu funcţia construită intern help. Este furnizată pentru
compatibilitate cu versiunile anterioare de AutoCAD.
Funcţii  similare 
Funcţia help pentru o descriere completă a acestei funcţii.

command
Descriere 
Execută o comandă AutoCAD.
  Apelare 
(command [arguments] ...)
Argumente 
arguments 
Comenzile AutoCAD şi opţiunile lor. Argumentele arguments ale funcţiei command pot
fi şiruri de caractere, numere reale, numere întregi sau puncte, care sunt aşteptate în mod
normal la prompter-ul AutoCAD la execuţia comenzii. Un şir de caractere nul (””) este
echivalent cu apăsarea tastei ENTER de la tastatură. Invocarea funcţiei command fără
1
nu se mai foloseşte fiind înlocuită cu altă comandă similară

219
PROIECTARE ASISTATĂ DE COMPUTER
argumente este echivalentă cu apăsarea tastei ESC şi duce la abandonarea comenzii
AutoCAD în curs, pentru majoritatea comenzilor
Funcţia command evaluează fiecare argument şi îl trimite către AutoCAD ca răspuns la
cererile succesive prompt ale acestuia. Dacă este furnizat numele comenzii şi opţiunile
acesteia ca şiruri de caractere, puncte 2D ca liste de două numere reale şi puncte 3D ca liste
de 3 numere reale. AutoCAD recunoaşte numele comenzii numai dacă aceasta este furnizată
la prompter-ul Command1. Dacă apelaţi funcţia command din Visual LISP fereastra
AutoCAD nu devine activă2. Dacă funcţia command solicită introducerea de date de la
utilizator veţi vedea valoarea returnată, respectiv nil, în fereastra Console din Visual LISP,
dar AutoCAD aşteaptă introducerea datelor. Trebuie să activaţi manual fereastra AutoCAD şi
să răspundeţi cererii. Până când faceţi aceasta orice subsecvenţă de comenzi va eşua.
Valoare returnată 
nil.
Exemple 
Exemplul următor setează două variabile pt1 şi pt2 egale cu două puncte 1,1 şi 1,5. După asta
foloseşte funcţia command pentru a trimite comanda LINE la prompter-ul Command şi a
furniza cele valorile celor două puncte:
Command: (setq pt1 '(1 1) pt2 '(1 5))
(1 5)
Command: (command "line" pt1 pt2 "")
line From point:
To point:
To point:
Command: nil
Restricţii şi Note:
Comanda AutoCAD SKETCH în Command Reference citeşte digitizorul în mod direct şi
deci, în consecinţă, nu poate fi folosită cu funcţia AutoLISP command. Dacă comanda
SCRIPT este folosită cu funcţia command ea ar trebui să fie ultima funcţie apelată în rutina
AutoLISP.
Altfel, dacă folosiţi funcţia command în fişierul acad.lsp sau .mnl, ea ar trebui apelată doar
dintr-o funcţie defun. Folosiţi funcţia S::STARTUP pentru a defini comenzi al căror apel
este necesar să fie făcut imediat la pornirea sesiunii de desenare3.
Pentru comenzile AutoCAD care necesită selecţie de obiecte4 puteţi furniza o listă obţinută cu
funcţia entsel în loc de un punct de selecţie a obiectului.
Comenzile AutoCAD executate de funcţia AutoLISP command nu au ecou în linia de
comandă5, dacă variabila sistem AutoCAD CMDECHO6 este setată la valoarea 0.
Funcţii  similare 
Funcţia vl-cmdf.

1
nu avem execuţia unei alte comenzi în curs
2
focus-ul nu se mută pe fereastra AutoCAD
3
deci se execută imediat după lansarea sesiunii de desenare
4
de exemplu comanda BREAK şi TRIM
5
deci la execuţia lor nu se afişează nimic în linia de comandă
6
accesibilă cu funcţiile Setvar şi Getvar

220
FUNCŢII UTILITARE – INTEROGARE ŞI FUNCŢII

getcfg
Descriere 
Extrage date aplicaţie din secţiunea AppData a fişierului acad*.cfg.
  Apelare 
(getcfg cfgname)
Argumente 
cfgname 
Un şir de caractere1 care conţine numele secţiunii şi parametrului valoare care trebuie
extras
Argumentul cfgname trebuie să fie un şir de caractere de forma următoare:
"AppData/application_name/section_name/.../param_name"
Valoare returnată 
Funcţia returnează datele aplicaţiei, dacă operaţia se execută cu succes. Dacă cfgname nu
este valid funcţia getcfg returnează nil.
Exemple 
Presupunând că parametrul WallThk din secţiunea AppData/ArchStuff are valoarea 8,
următoarea comandă extrage această valoare:
Command: (getcfg "AppData/ArchStuff/WallThk")
"8"
Funcţii  similare 
Funcţia setcfg.

getcname
Descriere 
Obţine numele local sau în engleză al unei comenzi AutoCAD.
  Apelare 
(getcname cname)
Argumente 
cname 
numele local sau underscore în engleză2 al comenzii; trebuie să conţină maxim 64
caractere
Valoare returnată 
Dacă argumentul cname nu este precedat de underscore34 funcţia getcname returnează
numele comenzii în engleză precedat de underscore. Dacă argumentul cname este precedat
de underscore, funcţia getcname returnează numele local al comenzii. Această funcţie

1
lungimea şirului de caractere este maxim 496 caractere
2
de exemplu _LINE
3
liniuţă jos “_”
4
se presupune ca este numele local al comenzii

221
PROIECTARE ASISTATĂ DE COMPUTER
returnează nil dacă argumentul cname nu conţine un nume de comandă AutoCAD valid.
Exemple 
În versiunea în limbă franceză a programului AutoCAD, codul următor este corect:
(getcname "ETIRER")returns "_STRETCH"
(getcname "_STRETCH") returns "ETIRER"

getenv
Descriere 
Returnează numele unei variabile sistem ca şir de caractere.
  Apelare 
(getenv variable-name)
Argumente 
variable‐name 
Un şir de caractere care specifică variabila care va fi citită. Numele variabilei sistem
trebuie să fie scris identic cu numele memorat în regiştri şi din punct de vedere al
majusculelor
Valoare returnată 
Funcţia returnează un şir de caractere care reprezintă valoarea atribuită variabilei sistem. Dacă
variabila nu există funcţia returnează nil.
Exemple 
Presupunem că variabila sitem AutoCAD este setată la valoarea /acad/support şi aici nu
există variabila denumită NOSUCH.
Command: (getenv "ACAD")
"/acad/support"
Command: (getenv "NOSUCH")
nil
Presupunem că variabila de sistem MaxArray este setată la valoarea 10000:
Command: (getenv "MaxArray")
"10000"
Funcţii  similare 
Funcţia setenv.

getvar
Descriere 
Obţine valoarea unei variabile sistem AutoCAD.
  Apelare 
(getvar varname)
Argumente 
varname 

222
FUNCŢII UTILITARE – INTEROGARE ŞI FUNCŢII
Un şir de caractere sau un simbol care specifică numele variabilei. Vedeţi Command
Reference pentru lista variabilelor sistem AutoCAD
Valoare returnată 
Funcţia returnează valoarea unei variabile sistem; altfel nil dacă argumentul varname nu
conţine un nume valid de variabilă sistem.
Exemple 
Caută valoarea curentă pentru raza de filetare:
Command: (getvar 'FILLETRAD)
0.25
Funcţii  similare 
Funcţia setvar.

help
Descriere 
Invocă facilităţile de ajutor, help.
  Apelare 
(help [helpfile [topic [command]]])
Argumente 
helpfile 
Un şir de caractere care specifică numele fişierului de Ajutor. Extensia fişierului nu este
cerută cu argumentul helpfile. Dacă este furnizată extensia AutoCAD caută un fişier cu
exact acelaşi nume cu cel specificat.
Dacă nu este specificată extensia AutoCAD caută fişiere de Ajutor cu extensia .chm. Dacă
un fişier cu acest nume nu este găsit, AutoCAD caută un fişier cu extensia .hlp
topic 
Un şir de caractere care identifică ID-ul subiectului de ajutor. Dacă apelaţi un subiect
dintr-un fişier CHM, se furnizează numele fişierului fără extensie; AutoCAD adaugă o
extensie .htm
command 
Un şir de caractere care specifică starea iniţială a ferestrei de ajutor. Argumentul
command este un şir de caractere folosit cu argumentul uCommand1, sau fuCommand2
ale funcţiilor HtmlHelp(), şi WinHelp(), funcţii definite în Microsoft Windows SDK
Pentru fişierele HTML, parametrul command poate fi HH_ALINK_LOOKUP sau
HH_DISPLAY_TOPIC. Pentru fişierele Windows de Ajutor, parametrul command poate
fi HELP_CONTENTS, HELP_HELPONHELP, sau HELP_PARTIALKEY.
Valoare returnată 
Funcţia returnează şirul de caractere helpfile, pentru apel făcut cu succes; altfel nil. Dacă
folosiţi funcţia help fără argumente funcţia returnează un şir de caractere gol (””) pentru apel
efectuat cu succes şi nil pentru eşec.
Doar eroarea de condiţie pe care funcţia help o returnează aplicaţiei există în fişierul

1
în fişierul ajutor HTML; ajutor=help
2
în WinHelp

223
PROIECTARE ASISTATĂ DE COMPUTER
specificat prin argumentul helpfile. Toate celelalte erori de condiţie sunt returnate
utilizatorului printr-o casetă de dialog.
Exemple 
Codul următor apelează funcţia help pentru a afişa informaţiile despre MYCOMMAND
aflate în fişierul de ajutor file achelp.chm:
(help "achelp.chm" "mycommand")
Funcţii  similare 
Funcţia setfunhelp asociază un conţinut-senzitiv1 de ajutor, cu comenzi definite de utilizator.

setcfg
Descriere 
Scrie date aplicaţie în secţiunea AppData a fişierului acad*.cfg.
  Apelare 
(setcfg cfgname cfgval)
Argumente 
cfgname 
Un şir de caractere care specifică secţiunea şi parametrul care va fi setat cu valoarea lui
cfgval. Argumentul cfgname trebuie un şir de caractere de forma următoare:
AppData/application_name/section_name/.../param_name
Şirul de caractere poate conţine maxim 496 caractere
cfgval 
Un şir de caractere. Şirul de caractere poate avea maxim 512 caractere. Şiruri de caractere
mai mari sunt acceptate de funcţia setcfg dar nu pot fi returnate de funcţia getcfg
Valoare returnată 
Pentru apel efectuat cu succes funcţia returnează cfgval. Dacă argumentul cfgname nu este
valid, funcţia setcfg returnează nil.
Exemple 
Codul următor setează parametrul WallThk în secţiunea AppData/ArchStuff la valoarea 8 şi
returnează şirul de caractere “8”:
Command: (setcfg "AppData/ArchStuff/WallThk" "8")
"8"
Funcţii  similare 
Funcţia getcfg.

setenv
Descriere 
Setează o variabilă sistem la o valoare specificată.
  Apelare 

1
când se apasă tasta F1

224
FUNCŢII UTILITARE – INTEROGARE ŞI FUNCŢII
(setenv varname value)
Argumente 
varname 
Un şir de caractere care specifică numele variabilei sistem care va fi setată. Numele
variabilei sistem trebuie să fie scrisă identic cu valoarea stocată în regiştri şi din punct de
vedere al majusculelor
value 
Un şir de caractere care specifică valoarea care va fi atribuită variabilei de sistem
specificată de argumentul varname
Valoare returnată 
Valoarea argumentului value.
Exemple 
Următoarea comandă setează valoarea variabilei sistem MaxArray la valoarea 10000:
Command: (setenv "MaxArray" "10000")
"10000"
Reţineţi aceste schimbări pentru a reface setările, astfel încât să nu aibă efect la următoarea
lansare a programului AutoCAD.
Funcţii  similare 
Funcţia getenv.

setfunhelp
Descriere 
Înregistrează o comandă definită de utilizator cu facilitate de ajutor în cel mai convenabil
fişier şi subiect de ajutor, care este apelat când utilizatorul solicită ajutor pentru această
comandă.
  Apelare 
(setfunhelp c:fname [helpfile [topic
[command]]])
Argumente 
c:fname 
Un şir de caractere care specifică o comandă1 definită de utilizator. Puteţi include prefixul
c:
helpfile 
Un şir de caractere care specifică numele fişierului de Ajutor. Extensia fişierului nu este
cerută cu argumentul helpfile. Dacă este furnizată extensia AutoCAD caută un fişier cu
exact acelaşi nume cu cel specificat.
Dacă nu este specificată extensia AutoCAD caută fişiere de Ajutor cu extensia .chm. Dacă
un fişier cu acest nume nu este găsit AutoCAD caută un fişier cu extensia .hlp.
topic 
Un şir de caractere care identifică ID-ul subiectului de ajutor. Dacă apelaţi un subiect
dintr-un fişier CHM se furnizează numele fişierului fără extensie; AutoCAD adaugă o

1
funcţiile AutoLISP definite de utilizator de tipul C:XXX

225
PROIECTARE ASISTATĂ DE COMPUTER
extensie .htm
command 
Un şir de caractere care specifică starea iniţială a ferestrei de ajutor. Argumentul command
este un şir de caractere folosit cu argumentul uCommand1 sau fuCommand2 ale
funcţiilor HtmlHelp() şi WinHelp(), funcţii definite în Microsoft Windows SDK.
Pentru fişierele HTML parametrul command poate fi HH_ALINK_LOOKUP sau
HH_DISPLAY_TOPIC. Pentru fişierele Windows de Ajutor parametrul command poate
fi HELP_CONTENTS, HELP_HELPONHELP, sau HELP_PARTIALKEY.
Valoare returnată 
Funcţia returnează şirul de caractere furnizat cu argumentul c:fname pentru apel efectuat cu
succes; altfel, nil.
Această funcţie verifică doar argumentele c:fname care conţin prefixul c:. Funcţia nu verifică
dacă funcţia specificată de argumentul c:fname există, şi nu verifică nici corectitudinea altor
argumente specificate.
Exemple 
Exemplul următor ilustrează folosirea funcţiei setfunhelp prin definirea unei funcţii simple şi
utilizarea funcţiei setfunhelp pentru a asocia această funcţie cu topicul circle din fişierul de
Ajutor AutoCAD (acad.chm):
(defun c:foo ()
(getstring "Press F1 for help on the foo command:")
)
(setfunhelp "c:foo" "acad.chm" "circle")
După ce acest cod este încărcat, apelarea comenzii foo şi apăsarea tastei F1 duce la afişarea
topicului de ajutor circle.
Acest exemplu funcţionează dar nu are un scop practic. Într-un caz real trebuie să creaţi
propriul fişier de Ajutor şi să asociaţi acest fişier şi topicul respectiv conţinut cu funcţia
creată.
Definiţi o funcţie cu numele test:
Command: (defun c:test()(getstring "\nTEST: " )(princ))
C:TEST
Asociaţi această funcţie cu un apel de Ajutor cu şirul de caractere “line”:
Command: (setfunhelp "c:test" "acad.chm" "line")
"c:test"
Rulaţi comanda test şi la prompter apăsaţi tasta F1; puteţi vedea topicul de Ajutor pentru
comanda AutoCAD LINE.
Observaţie: Când folosiţi funcţia defun pentru definirea funcţiilor de tip C:XXX ea şterge
numele funcţiei din înregistrările funcţiei setfunhelp. Totuşi, funcţia setfunhelp poate fi
apelată doar după apelul funcţiei defun, când defineşte o funcţie utilizator.
Funcţii  similare 
Funcţia defin şi help.

1
în fişierul ajutor HTML; ajutor=help
2
în WinHelp

226
FUNCŢII UTILITARE – INTEROGARE ŞI FUNCŢII

setvar
Descriere 
Setează o variabilă sistem AutoCAD la o valoare specificată.
  Apelare 
(setvar varname value)
Argumente 
varname 
Un şir de caractere sau un simbol care reprezintă numele unei variabile
value 
Un atom sau o expresie al cărei rezultat după evaluare este atribuit argumentului varname.
Pentru variabilele sistem care au ca valoare numere întregi, argumentul furnizat value
trebuie să aibă valoarea între -32768 şi +32767.
Valoare returnată 
Pentru apel efectuat cu succes funcţia returnează valoarea argumentului value.
Exemple 
Comanda următoare setează variabila de sistem AutoCAD FILLETRAD, respectiv raza de
filetare, la valoarea 0.5 unităţi:
Command: (setvar "FILLETRAD" 0.50)
0.5
Note pentru folosirea setvar:
Multe comenzi AutoCAD obţin valorile variabilelor sistem AutoCAD înainte de afişarea
oricarui prompter. Dacă folosiţi funcţia setvar pentru a seta o valoarea nouă în timp ce o
comandă este în execuţie, noua valoare poate să nu aibă efect până la următoarea comandă
AutoCAD.
Când folosiţi funcţia setvar pentru a modifica valoarea variabilei de sistem AutoCAD
ANGBASE, argumentul value este interpretat în radiani. Aceasta diferă faţă de comanda
AutoCAD SETVAR din Command References care interpretează acest argument în grade.
Când folosiţi funcţia setvar pentru a modifica valoarea variabilei de sistem AutoCAD
SNAPANG argumentul value este interpretat în radiani relativ la direcţia implicită AutoCAD
pentru unghi 0, care este corespunzător direcţiei est, sau orei 3 pe ceas. Aceasta diferă faţă de
comanda AutoCAD SETVAR din Command References care interpretează acest argument
în grade relativ la setarea variabilei ANGBASE.
Observaţie: Comanda UNDO nu poare anula setările făcute variabilei sistem CVPORT de
funcţia setvar.
Puteţi găşi o listă a variabilelor AutoCAD curente în Command Reference.
Funcţii  similare 
Funcţia getvar.

ver
Descriere 
Returnează numărul versiunii curente AutoLISP, sub forma unui şir de caractere.

227
PROIECTARE ASISTATĂ DE COMPUTER
  Apelare 
(ver)
Valoare returnată 
Funcţia returnează un şir de caractere care are următorul conţinut:
"Visual LISP version (nn)"
unde version reprezintă numărul versiunii curente şi nn reprezintă descrierea limbajului, ca
un cod de două litere.
Exemple de descriere a limbajului prin aceste două litere sunt date în continuare:
(de) German
(en) US/UK
(es) Spanish
(fr) French
(it) Italian
Exemple 
Command: (ver)
"Visual LISP 2006 (en)"

vl-cmdf
Descriere 
Execută o comandă AutoCAD.
  Apelare 
(vl-cmdf [arguments] ...)
Funcţia vl-cmdf este similară funcţiei command, dar diferă de această funcţie prin modul în
care evaluează argumentele furnizate. Funcţia evaluează toate argumentele furnizate înainte
de a executa comanda AutoCAD şi nu execută comanda AutoCAD dacă detectează erori în
timpul evaluării argumentelor. În contrast cu aceasta funcţia command trimite fiecare
argument AutoCAD-ului, deci această comandă poate fi executată parţial înainte ca o eroare
să fie detectată.
Dacă apelul comenzii respective include şi apelul altei funcţii funcţia vl-cmdf execută acest
apel înainte de a efectua apelul comenzii, în timp ce funcţia command execută apelul funcţiei
după ce a început execuţia comenzii.
Multe comenzi AutoCAD funcţionează corect când sunt invocate de funcţia vl-cmdf, dar pot
eşua când sunt invocate de funcţia command. Elimină în special limitarea de a nu folosi
funcţii de tipul get.xxx în interiorul comenzii.
Argumente 
arguments 
O comandă AutoCAD şi argumentele ei. Argumentele arguments ale funcţiei vl-cmdf pot
fi şiruri de caractere, numere reale, numere întregi, sau puncte, care sunt aşteptate de
secvenţa de prompt-ere la execuţia comenzii. Un şir de caractere nul ("") este echivalent cu
apăsarea tastei Enter de pe tastatură. Apelul funcţiei vl-cmdf fără argumente este
echivalent cu apăsarea tastei Esc şi anulează execuţia pentru majoritatea comenzilor
AutoCAD.

228
FUNCŢII UTILITARE – INTEROGARE ŞI FUNCŢII
Valoare returnată 
T.
Observaţie: Dacă apelaţi funcţia vl-cmdf din Visual LISP, fereastra AutoCAD nu devine
activă automat. Dacă comanda necesită introducerea datelor de către utilizator veţi vedea
valoarea returnată (T) în fereastra Console, dar AutoCAD aşteaptă introducerea datelor.
Trebuie să comutaţi manual în fereastra AutoCAD şi să răspundeţi prompter-ului. Până când
faceţi aceasta orice subsecvenţă de comenzi eşuează.
Exemple 
Diferenţa dintre funcţiile command şi vl-cmdf este mai simplu de urmărit dacă introduceţi
următoarele apeluri de la prompter-ul Command al AutoCAD decât la prompter-ul din
fereastra Console a Visual LISP:
Command: (command "line" (getpoint "point?") '(0 0) "")
line Specify first point: point?
Specify next point or [Undo]:
Command: nil
Folosind funcţia command, Comanda LINE se execută prima; după care funcţia getpoint
este apelată.
Command: (VL-CMDF "line" (getpoint "point?") '(0 0) "")
point?line Specify first point:
Specify next point or [Undo]:
Command: T
Folosind funcţia vl-cmdf funcţia getpoint este apelată prima1; după care se execută comanda
LINE. Exemplul următor compară ambele comenzi, dar trimite un argument invalid ca listă de
coordonate pentru execuţia comenzii LINE. Observaţi cum diferă rezultatele execuţiei:
Command: (command "line" (getpoint "point?") '(0) "")
line Specify first point: point?
Specify next point or [Undo]:
Command: ERASE nil
Select objects: Specify opposite corner: *Cancel*
0 found
Funcţia command trimite fiecare argument AutoCAD-ului, fără a evalua argumentele, deci
lista cu punctul invalid nu este detectată.
Command: (VL-CMDF "line" (getpoint "point?") '(0) "")
point?Application ERROR: Invalid entity/point list.
nil
Deoarece funcţia vl-cmdf evaluează fiecare argument înainte de a le trimite AutoCAD-ului,
lista cu punctul invalid este detectată şi comanda nu este executată.
Funcţii  similare 
Funcţia command.

vlax-add-cmd
1
observaţi prompter-ul ?point al funcţiei getpoint

229
PROIECTARE ASISTATĂ DE COMPUTER
Descriere 
Adaugă o comandă la un grup de comenzi.
  Apelare 
(vlax-add-cmd global-name func-sym [local-name cmd-flags])
Cu funcţia vlax-add-cmd puteţi defini o funcţie AutoLISP ca o comanda AutoCAD, fără să
folosiţi prefixul C: în numele funcţiei.
Atenţie! Nu puteţi folosi apelul funcţiei command în modul transparent definit de funcţia
vlax-add-cmd. Dacă o faceţi puteţi cauza închiderea AutoCAD-ului în mod neaşteptat.
Funcţia vlax-add-cmd construieşte o funcţie AutoLISP vizibilă ca o comandă ObjectARX-
style la prompt-erul Command în timpul sesiunii AutoCAD. Această funcţie furnizează
accesul la macrourile ObjectARX acedRegCmds, împreună cu un pointer la obiectul
ObjectARX system AcEdCommand Stack.
Funcţia vlax-add-cmd asignează în mod automat comenzi la grupul de comenzi. Când se
apelează din spaţiul de nume pentru documente, funcţia vlax-add-cmd adaugă comanda la un
grup numit doc-ID; doc-ID este o valoare hexazecimală care identifică documentul. Când se
apelează din spaţiul de nume separat VLX, funcţia vlax-add-cmd adaugă comanda la un grup
numit VLC-Ddoc-ID;VLX-name, unde VLX-name este numele unei aplicaţii care apelează
funcţia vlax-add-cmd.
Este recomandat să folosiţi funcţia vlax-add-cmd pentru din spaţiul de nume separat VLX.
Puteţi face asta explicit încărcând VLX folosind comanda APPLOAD, mai mult decât plasând
comanda în fişierul LISP de pornire1.
Observaţie: Nu puteţi folosi funcţia vlax-add-cmd pentru a expune funcţii care Creează
obiecte reactor sau servesc ca reactor callbacks.
Argumente 
global‐name 
Un şir de caractere
func‐sym 
Un simbol care reprezintă numele unei funcţii AutoLISP fără argumente
local‐name 
Un şir de caractere2
cmd‐flags 
Un număr întreg3.
Flag-ul primar este:
ACRX_CMD_MODAL (0) – Comanda nu poate fi apelată cât timp o altă comandă este
activă.
ACRX_CMD_TRANSPARENT (1) – Comanda poate fi apelată cât timp o altă comandă
este activă.
ACRX_CMD_USEPICKSET (2) – Când setarea pickfirst este obţinută, ea este clar în
AutoCAD. Comanda nu poate recupera sau seta grip-urile
ACRX_CMD_REDRAW (4) – Când setarea pickfirst sau setarea grip sunt obţinute, ea
nu va fi făcută în AutoCAD. Comanda poate recupera setarea pickfirst şi setarea grip
Valoare returnată 

1
startup LISP file.
2
setat implicit la global-name
3
setat implicit la ACRX_CMD_MODAL + ACRX_CMD_REDRAW

230
FUNCŢII UTILITARE – INTEROGARE ŞI FUNCŢII
Funcţia returnează valoarea argumentului global-name dacă apelul se efectuează cu succes.
Funcţia returnează nil dacă acedRegCmds->addCommand(...) returnează o eroare de
condiţie.
Exemple 
Funcţia hello-autocad în următorul exemplu nu are prefixul C:, dar este vizibilă ca
ObjectARX-style command la prompt-erul Autocad Command:
_$ (defun hello-autocad ()
(princ "hello Visual LISP"))
HELLO-AUTOCAD
_$ (vlax-add-cmd "hello-autocad"
'hello-autocad)
"hello-autocad"
Funcţii  similare 
Funcţia vlax-remove-cmd.

vlax-remove-cmd
Descriere 
Elimină o comandă sau un grup de comenzi.
  Apelare 
(vlax-remove-cmd global-name)
Elimină o singură comandă sau întreg grupul de comenzi din sesiunea curentă AutoCAD.
Argumente 
global‐name 
Oricare din numele comenzilor ca şir de caractere, sau T. dacă argumentul global-name
are valoarea T, întregul grup de comenzi VLC-AppName, de exemplu VLC-VLIDE, este
şters
Valoare returnată 
Funcţia returnează T pentru apel efectuat cu succes; altfel nil, dacă de exemplu comanda nu
este definită.
Exemple 
Elimină o comandă definită cu funcţia vlax-add-cmd:
_$ (vlax-remove-cmd "hello-autocad")
T
Repetă apelul funcţiei vlax-remove-cmd:
_$ (vlax-remove-cmd "hello-autocad")
nil
De această dată funcţia vlax-remove-cmd returnează nil, deaorece comanda specificată nu
mai există.
Funcţii  similare 
Funcţia vlax-add-cmd.

231
FUNCŢII UTILITARE – INTRODUCERE A DATELOR
7.2.7. Introducere a datelor

Nume funcţie Descriere


( entsel [msg])
entsel solicită utilizatorului să selecteze un singur obiect sau o singură entitate, prin
specificarea unui punct
( getangle [pt] [msg])
getangle aşteaptă introducerea unui unghi de către utilizator şi returnează acest unghi
exprimat în radiani
( getcorner pt [msg])
getcorner aşteaptă introducerea de către utilizator a celui de-al doilea colţ al unul
dreptunghi
( getdist [pt] [msg])
getdist
aşteaptă introducerea de către utilizator a unei distanţe
( getfiled title default ext flags)
getfiled solicită utilizatorului introducerea unui nume de fişier, folosind caseta
standard de dialog AutoCAD, şi returnează acest nume
( getint [msg])
getint aşteaptă introducerea de către utilizator a unui număr întreg şi returnează
acest număr
( getkword [msg])
getkword aşteaptă introducerea de către utilizator a unui cuvânt cheie şi returnează
acest cuvânt
( getorient [pt] [msg])
getorient aşteaptă introducerea unui unghi de către utilizator şi returnează acest unghi
exprimat în radiani
( getpoint [pt] [msg])
getpoint
aşteaptă introducerea de către utilizator a unui punct şi returnează acest punct
( getreal [msg])
getreal aşteaptă introducerea de către utilizator a unui număr real şi returnează acest
număr
( getstring [cr][msg])
getstring aşteaptă introducerea de către utilizator a unui şir de caractere şi returnează
acest şir de caractere
( initget [bits] [string])
initget stabileşte cuvintele cheie pentru folosirea de către utilizator la următorul apel
al funcţiei pentru introducere de date
( nentsel [msg])
solicită utilizatorului să selecteze un singur obiect sau o singură entitate, prin
nentsel
specificarea unui punct şi furnizează accesul la datele de definiţie conţinute
într-un obiect complex
( nentselp [msg] [pt])
nentselp furnizează aceleaşi facilităţi ca şi funcţia nentsel, fără să fie necesară
introducerea datelor de către utilizator

232
FUNCŢII UTILITARE – INTRODUCERE A DATELOR

entsel
Descriere 
Solicită utilizatorului să selecteze un singur obiect, sau o singură entitate, prin specificarea
unui punct.
  Apelare 
(entsel msg)
Argumente 
msg 
Un prompter, şir de caractere, care este afişat pentru utilizator. Dacă este omis funcţia
entsel afişează la prompt mesajul implicit "Select object".
Valoare returnată 
Funcţia returnează o listă care are ca prim element numele entităţii pentru obiectul selectat şi
ca element secund din listă coordonatele punctului1 folosit pentru selectarea obiectului.
Punctul de selecţie returnat de funcţia entsel nu este obligatoriu un punct care aparţine
obiectului selectat. Punctul returnat reprezintă locaţia cursorului grafic AutoCAD din
momentul selectării obiectului. Relaţia dintre punctul de selecţie şi obiect este dependentă de
mărimea cursorului grafic de selecţie şi de factorul curent de scalare, zoom.
Exemple 
Secvenţa următoare de comenzi AutoCAD exemplifică folosirea funcţiei entsel şi lista
returnată de acesta:
  Command: line
  From point: 1,1
  To point:6,6
ENTER  To point:
  Command: (setq e (entsel "Please choose an object: "))
  Please choose an object: 3,3
(<Entity name: 60000014> (3.0 3.0 0.0))
Când operaţi cu obiecte trebuie să urmăriţi simultan selecţia unui obiect şi specificarea
punctului prin care acesta este selectat. Asemenea exemple pot fi găsite în AutoCAD în
Object Snap şi în comenzile BREAK, TRIM, şi EXTEND din Command Reference.
Funcţia entsel permite programelor AutoLISP sa efectueze această operaţie. Dacă este selecat
un singur obiect se cere selecţia prin indicarea unui punct de selecţie. Setările Osnap curente
sunt ignorate de această funcţie până când cererile acestei funcţii sunt îndeplinite. Funcţia
entsel preia keyword de la apelul precedent al funcţiei initget.
Funcţii  similare 
Funcţiile entget, entmake, entnext, handent şi initget.

getangle
Descriere 

1
conform UCS-ului curent

233
PROIECTARE ASISTATĂ DE COMPUTER
Aşteaptă introducerea unui unghi de către utilizator şi returnează acest unghi exprimat în
radiani.
  Apelare 
(getangle [pt] [msg])
Argumente 
pt 
Un punct 2D în sistemul de coordonate curent. Argumentul pt, dacă este specificat,
reprezintă primul din cele două puncte, deci utilizatorul poate specifica AutoLISP-ului
unghiul prin indicarea unui alt punct. Puteţi furniza un punct de bază 3D este măsurat în
planul curent de construcţie
msg 
Un şir de caractere care va fi afişat la prompt-erul utilizatorului
Valoare returnată 
Funcţia returnează valoarea specificată a unghiului, în radiani.
Funcţia getangle măsoară unghiurile de la direcţia 0 radiani1, cu sens pozitiv al unghiurilor în
sens trigonometric. Unghiul returnat este exprimat în radiani respectând setările planului de
construcţie curent2.
Exemple 
Codul din exemplul următor exemplifică folosirea unor argumente diferite cu funcţia
getangle:
Command: (setq ang (getangle))
Command: (setq ang (getangle '(1.0 3.5)))
Command: (setq ang (getangle "Which way? "))
Command: (setq ang (getangle '(1.0 3.5) "Which way? "))
Note de folosire:
Utilizatorul poate specifica un unghi prin introducerea unui număr în formatul curent pentru
unităţile unghiulare. Chiar dacă curente pentru unghi pot fi în grade, radiani, sau în alte
unităţi, funcţia returnează unghiul în radiani. Utilizatorul poate indica unghiul AutoLISP-ului
prin indicarea a două locaţii 2D în zona de desenare. AutoCAD desenează o linie de ghidare
de la primul punct la cursorul grafic pentru a vă ajuta în vizualizarea unghiului.
Este important să înţelegeţi diferenţa dintre unghiul furnizat ca argument şi unghiul returnat
de funcţia getangle. Unghiurile care sunt furnizate funcţiei getangle se bazează pe setările
curente ale variabilelor sistem ANGDIR şi ANGBASE în Command Reference. Oricum, o
dată ce un unghi este furnizat el este măsurat în sens trigonometric3, direcţia 0 radiani fiind
impusă de variabila sistem ANGBASE.
Utilizatorul nu poate introduce o altă expresia ca răspuns la cererea funcţiei getangle.
Funcţii  similare 
Funcţia getorient, initget şi funcţiile de tipul getXXX.

getcorner
1
setată de variabila sistem ANGBASE din Command Reference
2
planul XOY al sistemului de coordonate curent UCS, şi elevaţia curentă
3
se ignora valoarea variabilei de sistem ANGDIR

234
FUNCŢII UTILITARE – INTRODUCERE A DATELOR
Descriere 
Aşteaptă introducerea de către utilizator a celui de-al doilea colţ al unul dreptunghi.
  Apelare 
(getcorner pt [msg])
Argumente 
pt 
Un punct care este folosit ca punct de bază
msg 
Un şir de caractere care va fi afişat la prompter-ul utilizator
Valoare returnată 
Funcţia getcorner returnează un punct în sistemul de coordonate curent, similar cu funcţia
getpoint. Dacă utilizatorul furnizează un punct 3D, coordonata Z este ignorată. Elevaţia
curentă este folosită ca şi coordonată Z.
Exemple 
Command: (getcorner '(7.64935 6.02964 0.0))
(17.2066 1.47628 0.0)
Command: (getcorner '(7.64935 6.02964 0.0) "Pick a corner")
Pick a corner(15.9584 2.40119 0.0)
Funcţii  similare 
Funcţia initget şi funcţiile de tipul getXXX.

getdist
Descriere 
Aşteaptă introducerea de către utilizator a unei distanţe.
  Apelare 
(getdist [pt] [msg])
Utilizatorul poate specifica distanţa prin selectarea a două puncte sau specificând doar cel de-
al doilea punct, dacă punctul de bază este furnizat. Utilizatorul poate de asemenea să specifice
distanţa prin introducerea unui număr conform setărilor curente AutoCAD pentru unităţi
distanţă. Funcţia getdist returnează întotdeauna distanţa ca număr real, chiar dacă unităţile
distanţă curente pot fi în feet sau inches.
Funcţia getdist desenează o linie mobilă de la primul punct până la cursorul grafic pentru a vă
ajuta să vizualizaţi această distanţă.
Utilizatorul nu poate introduce o altă expresie ca răspuns la cererile funcţiei getdist.
Argumente 
pt 
Un punct 2D sau 3D care este folosit ca punct de bază în sistemul de coordonate curent
UCS. Dacă argumentul pt este furnizat, utilizatorului i se solicită cel de-al doilea punct
string 
Un şir de caractere care va fi afişat la prompt-erul utilizator. Dacă acest şir este omis,
AutoCAD nu afişează nici un mesaj

235
PROIECTARE ASISTATĂ DE COMPUTER
Valoare returnată 
Funcţia returnează un număr real. Dacă este furnizat un număr 3D, valoarea returnată este o
distanţă 3D. Oricum, setând funcţia initget pe 64 de biţi determină funcţia getdist să ignore
componenta Z a unui punct 3D şi să returneze distanţa 2D.
Exemple 
(setq dist (getdist))
(setq dist (getdist '(1.0 3.5)))
(setq dist (getdist "How far "))
(setq dist (getdist '(1.0 3.5) "How far? "))
Funcţii  similare 
Funcţia initget şi funcţiile de tipul getXXX.

getfiled
Descriere 
Solicită utilizatorului introducerea unui nume de fişier, folosind caseta standard de dialog
AutoCAD şi returnează acest nume.
  Apelare 
(getfiled title default ext flags)
Argumente 
title 
Un şir de caractere care specifică eticheta casetei de dialog
default 
Numele implicit pentru fişierul care va fi folosit; poate fi un şir de caractere gol ("")
ext 
Extensia implicită a fişierului. Dacă argumentul ext este furnizat ca un şir de caractere gol
(""), el este setat implicit la valoarea * (all file types).
Dacă în argumentul ext este inclusă extensia dwg, funcţia getfiled afişează o imagine de
previzualizare în caseta de dialog
flags 
Un număr întreg1 care controlează comportamentul casetei de dialog. Pentru a seta mai
mult de o condiţie în acelaşi timp, adunaţi valorile pentru a forma o valoare de tip flags
între 0 şi 15. Următoarele argumente de tip flags sunt recunoscute de funcţia getfiled:
1 (bit 0) - Cerere pentru un nume nou de fişier pentru a fi creat. Nu setaţi acest bit când
cereţi pentru deschidere numele unui fişier existent. În ultimul caz, dacă utilizatorul
introduce numele unui fişier care nu există, caseta de dialog afişează un mesaj de eroare în
partea de jos a casetei. Dacă acest bit este setat şi utilizatorul alege un fişier care deja
există AutoCAD afişează o casetă de alertă şi oferă alegerea unei proceduri sau
abandonarea acestei operaţii.
4 (bit 2) - Lasă utilizatorul să introducă o extensie arbitrară de fişier sau să nu introducă
nici o extensie de fişier. Dacă acest bit nu este setat, funcţia getfiled acceptă doar extensia
specificată în argumentul ext şi adaugă această extensie la numele fişierului dacă
utilizatorul nu o introduce în caseta de text File.

1
un câmp de biţi, respectiv un cod, un indicator

236
FUNCŢII UTILITARE – INTRODUCERE A DATELOR
8 (bit 3) - Dacă bitul este setat şi bitul 0 nu este setat, funcţia getfiled efectuează o căutare
în librărie a numelui introdus. Dacă este găsit fişierul şi directorul acestuia în căile de
căutare din bibliotecă se separă calea de numele fişierului şi este returnat numai numele
fişierului. Nu se separă numele fişierului de cale dacă este găsit şi un alt fişier cu acelaşi
nume în alt director1. Dacă acest bit nu este setat, funcţia getfiled returnează întregul
nume, inclusiv calea către acesta. Setaţi acest bit dacă doriţi să folosiţi o casetă de dialog
pentru a deschide un fişier existent al cărui nume doriţi să îl salvaţi ca desen2
16 (bit 4) - Dacă acest bit este setat sau valoarea argumentului default se termină cu un
delimitator de cale, argumentul este considerat numai cale. Funcţia getfiled presupune că
nu există un nume implicit. Ea afişează calea în linia Look in şi lasă necompletat câmpul
File name
32 (bit 5) - Dacă acest bit este setat şi este setat şi bitul 03, utilizatorul nu va fi avertizat
dacă suprascrie un fişier existent. Caseta de alertă, care avertizează utilizatorul că un fişier
cu nume identic există, nu va fi afişată; vechiul fişier fiind suprascris
64 (bit 6) - Nu transferă un fişier specificat de utilizator prin calea URL
Observaţie:
URL - în engleză Uniform Resource Locator, tradus Adresa uniformă pentru
localizarea resurselor este soluţia aleasă de World Wide Web Consortium, prescurtat
W3C, pentru specificarea unei resurse4 în Internet. A fost creat prima dată de Tim
Berners-Lee pentru a fi utilizată în World Wide Web, specificaţiile actuale fiind cuprinse
în RFC1738. URL-ul este un caz particular al unei specificaţii mai ample numite URI
Uniform Resource Identifier, specificaţie a aceluiaşi W3C. Schema care este folosită
este:
<protocol>://<nume_DNS>/<nume_local>
unde
protocol este protocolul folosit5 (de cele mai multe ori http),
nume_DNS este numele domeniului pe care se află resursa,
nume_local este format din calea şi numele resursei de pe discul local.
Exemplu de URL: http://robotics.ucv.ro
128 (bit 7) - nu acceptă calea URL pentru fişiere
Valoare returnată 
Dacă utilizatorul completează un nume de fişier în caseta de dialog funcţia getfiled returnează
un şir de caractere care specifică acest nume; altfel se returnează nil.
Exemple 
Apelul următor al funcţiei getfiled afişează caseta de dialog pentru selectarea unui fişier
AutoLISP:
(getfiled "Select a Lisp File" "c:/program files/ <AutoCAD installation
directory>/support/" "lsp" 8)
AutoCAD afişează ca rezultat caseta de dialog pentru selectarea unui fişier AutoLISP.

getint
1
deci există mai multe fişiere cu acelaşi nume în căile de căutare
2
sau altă bază de date
3
indicând că este specificat un fişier nou
4
unui site sau a unei pagini
5
de cele mai multe ori http, ftp, ş.a.m.d.

237
PROIECTARE ASISTATĂ DE COMPUTER
Descriere 
Aşteaptă introducerea de către utilizator a unui număr întreg şi returnează acest număr.
  Apelare 
(getint [msg])
Valorile acceptate de funcţia getint sunt în domeniul -32.768 – +32.767. Dacă utilizatorul
introduce altceva decât un număr întreg, funcţia getint afişează mesajul ”Requires an
integer value1” şi permite utilizatorului să introducă o nouă valoare. Utilizatorul nu poate
introduce o altă expresie AutoLISP ca răspuns la cererea funcţiei getint.
Argumente 
msg 
Un şir de caractere care va fi afişat la prompterul utilizator; dacă este omis nu este afişat
nici un mesaj
Valoare returnată 
Funcţia returnează numărul întreg introdus de utilizator; dacă utilizatorul apasă tasta ENTER
fără să introducă un număr întreg funcţia returnează nil.
Exemple 
Command: (setq num (getint))
15
15
Command: (setq num (getint "Enter a number:"))
Enter a number: 25
25
Command: (setq num (getint))
15.0
Requires an integer value.
15
15
Funcţii  similare 
Funcţia initget şi funcţiile getxxx.

getkword
Descriere 
Aşteaptă introducerea de către utilizator a unui cuvânt cheie şi returnează acest cuvânt.
  Apelare 
(getkword [msg])
Cuvintele cheie care pot fi furnizate funcţiei getkword sunt setate cu funcţia initget.
Utilizatorul nu poate introduce o altă expresie AutoLISP ca răspuns la cererea funcţiei
getkword.
Argumente 

1
se cere introducerea unui număr întreg

238
FUNCŢII UTILITARE – INTRODUCERE A DATELOR
msg 
Un şir de caractere care va fi afişat la prompterul utilizator; dacă este omis funcţia
getkword nu afişază nici un mesaj
Valoare returnată 
Funcţia returnează un şir de caractere care reprezintă cuvântul cheie introdus de utilizator;
dacă utilizatorul apasă tasta ENTER fără să introducă un număr întreg funcţia getkword
returnează nil. Funcţia getkword returnează nil şi dacă apelul ei nu este precedat de un apel al
funcţiei initget pentru a stabili unul sau mai lulte cuvinte cheie.
Dacă utilizatorul introduce o valoare care nu este un cuvânt cheie funcţia getkword afişează
un mesaj de avertizare şi solicită introducerea unui nou cuvânt.
Exemple 
Exemplul următor arată apelul funcţiei initget pentru setarea unei liste de cuvinte cheie: Yes
şi No, şi inactivează intrarea nulă1 pentru apelul funcţiei getkword:
Command: (initget 1 "Yes No")
nil
Command: (setq x (getkword "Are you sure? (Yes or No) "))
Are you sure? (Yes or No) yes
"Yes"
Secvenţa următoare arată ce se întâmplă la introducerea unor cuvinte invalide ca răspuns la
cererea funcţiei getkword:
Command: (initget 1 "Yes No")
nil
Command: (setq x (getkword "Are you sure? (Yes or No) "))
Are you sure? (Yes or No) Maybe
Invalid option keyword.
Are you sure? (Yes or No) yes
"Yes"
Răspunsul utilizatorului nu este unul din cuvintele cheie definite prin apelul anterior al
funcţiei initget, deci funcţia getkword furnizează un mesaj de eroare şi solicită utilizatorului o
nouă valoare afişând ca mesaj şirul de caractere furnizat în argumentul msg.
Funcţii  similare 
Funcţia initget şi funcţiile getxxx.

getorient
Descriere 
Aşteaptă introducerea unui unghi de către utilizator şi returnează acest unghi exprimat în
radiani.
  Apelare 
(getkword [pt] [msg])
Funcţia getorient măsoară unghiurile considerând direcţia zero radiani spre dreapta, est, şi are

1
valoarea biţilor este egală cu 1

239
PROIECTARE ASISTATĂ DE COMPUTER
ca sens pozitiv al unghiurilor sensul trigonometric. Valoarea unghiului introdusă de utilizator
se bazează pe setările curente ale variabilelor ANGDIR şi ANGBASE, dar odată furnizată
această valoare ea este măsurată în sens trigonometric cu direcţia 0 radiani sprea dreapta,
ignorând variabilele ANGDIR şi ANGBASE. De aceea dacă selectaţi o bază de măsură
diferită de zero radiani sau un sens pozitiv care nu este sensul trigonometric, folosind
comanda UNITS sau variabilele sistem ANGDIR şi ANGBASE, trebuie făcute mai multe
conversii.
Folosiţi funcţia getangle când doriţi să aflaţi rotaţia curentă1. Folosiţi getorient pentru a
obţine sensul unghiular pozitiv curent2.
Utilizatorul nu poate introduce o altă expresie AutoLISP ca răspuns la cererea funcţiei
getorient.
Argumente 
pt 
Un punct 2D în sistemul e coordonate curent UCS.
Argumentul pt, dacă este prezent, specifică primul din cele două puncte, deci puteţi indică
AutoLISP-ului unghiul prin specificarea celui de-al doilea punct. Puteţi furniza ca punct de
bază un punct 3D, dar unghiul este măsurat întotdeauna în planul de construcţie curent3
msg 
Un şir de caractere care va fi afişat la prompterul utilizator
Valoare returnată 
Funcţia returnează unghiul specificat de utilizator, în radiani, conform planului curent de
construcţie.
Exemple 
Command: (setq pt1 (getpoint "Pick point: "))
(4.55028 5.84722 0.0)
Command: (getorient pt1 "Pick point: ")
5.61582
Funcţii  similare 
Funcţiile getangle, initget şi funcţiile getxxx.

getpoint
Descriere 
Aşteaptă introducerea de către utilizator a unui punct şi returnează acest punct.
  Apelare 
(getpoint [pt] [msg])
Utilizatorul poate specifica un punct prin indicarea acestuia sau prin introducerea
coordonatelor acestuia în formatul curent. Dacă argumentul pt este furnizat, AutoCAD

1
unghi relativ
2
unghi absolut
3
planul XOY

240
FUNCŢII UTILITARE – INTRODUCERE A DATELOR
desenează o linie dinamică din acest punct în poziţia curentă a cursorului1.
Utilizatorul nu poate introduce o altă expresie AutoLISP ca răspuns la cererea funcţiei
getpoint.
Argumente 
pt 
Un punct 2D sau 3D în sistemul de coordonate curent UCS.
Funcţia getpoint acceptă un singur număr întreg sau număr real ca argument pt şi poate
folosi mecanismul AutoCAD de specificare a distanţei pentru a determina punctul. Acest
mecanism foloseşte valoarea variabilei de sistem LASTPOINT ca punct de start,
argumentul pt ca distanţă şi locaţia curentă împreună cu locaţia cursorului ca direcţie.
Rezultatul este un punct, specificat în unitatea curentă, din punctul LASTPOINT în
direcţia unde se află locaţia cursorului curent
msg 
Un şir de caractere care va fi afişat la prompterul utilizator
Valoare returnată 
Funcţia returnează un punct 3D, specificat conform sistemului de coordonate UCS curent.
Exemple 
(setq p (getpoint))
(setq p (getpoint "Where? "))
(setq p (getpoint '(1.5 2.0) "Second point: "))
Funcţii  similare 
Funcţiile getcornet, initget şi funcţiile getxxx.

getreal
Descriere 
Aşteaptă introducerea de către utilizator a unui număr real şi returnează acest număr.
  Apelare 
(getreal [msg])
Utilizatorul nu poate introduce o altă expresie AutoLISP ca răspuns la cererea funcţiei
getreal.
Argumente 
msg 
Un şir de caractere care va fi afişat la prompterul utilizator
Valoare returnată 
Funcţia returnează numărul real introdus de utilizator.
Exemple 
(setq val (getreal))
(setq val (getreal "Scale factor: "))

1
la mişcarea cursorului care reprezintă cel de-al doilea punct al liniei, aceasta este redesenată în poziţia
respectivă, deci este dinamică

241
PROIECTARE ASISTATĂ DE COMPUTER
Funcţii  similare 
Funcţia initget şi funcţiile getxxx.

getstring
Descriere 
Aşteaptă introducerea de către utilizator a unui şir de caractere şi returnează acest şir de
caractere.
  Apelare 
(getstring [cr] [msg])
Argumente 
cr 
Dacă este furnizat şi nu este nil acest argument indică utilizatorului că poate include spaţii
în şirul de caractere furnizat1. Altfel, introducerea şirului de caractere este terminată prin
introducerea unui spaţiu sau prin apăsarea tastei ENTER
msg 
Un şir de caractere care va fi afişat la prompterul utilizator
Valoare returnată 
Funcţia returnează şirul de caractere introdus de utilizator; dacă utilizatorul apasă ENTER
fără a introduce nici un şir de caractere se returnează nil.
Dacă şirul de caractere este mai mare de 132 caractere atunci funcţia getstring returnează doar
primele 132 caractere ale şirului de caractere. Dacă şirul de caractere conţine caracterul
backslash ”\” funcţia getstring îl converteşte în două caractere backslash ” \\”. Aceasta vă
permite introducerea unei valori care să specifice calea către un fişier în alte funcţii.
Exemple 
Command: (setq s (getstring "What's your first name? "))
What's your first name? Gary
"Gary"
Command: (setq s (getstring T "What's your full name? "))
What's your full name? Gary Indiana Jones
"Gary Indiana Jones"
Command: (setq s (getstring T "Enter filename: "))
Enter filename: c:\my documents\vlisp\secrets
"c:\\my documents\\vlisp\\secrets"
Funcţii  similare 
Funcţia initget şi funcţiile getxxx.

initget
Descriere 
Stabileşte cuvintele cheie pentru folosirea de către utilizator la următorul apel al funcţiei

1
terminarea acestui şir de caractere trebuie să se facă cu tasta ENTER

242
FUNCŢII UTILITARE – INTRODUCERE A DATELOR
pentru introducere de date.
  Apelare 
(initget [bits] [string])
Funcţiile care folosesc cuvinte cheie sunt: getint, getreal, getdist, getangle, getorient,
getpoint, getcorner, getkword, entsel, nentsel şi nentselp. Funcţia getstring este singura
funcţie pentru introducerea datelor de către utilizator care nu foloseşte cuvinte cheie.
Cuvintele cheie sunt verificate la următorul apel al funcţiei pentru introducerea datelor, pentru
a verifica corectitudinea datelor introduse1.
Dacă utilizatorul introduce un cuvănt cheie identic cu unul din cele predefinite în listă funcţia
returnează cuvântul cheie ca şir de caractere. Aplicaţia poate testa identitatea cu cuvinte cheie
şi asocia o acţiune pentru fiecare din acestea. Dacă ceea ce introduce utilizatorul nu este tipul
de dată dorit şi nici nu este un cuvânt cheie, AutoCAD solicită introducerea unor noi date de
la utilizator. Biţii de setare pentru funcţia initget şi cuvintele cheie se aplică începând cu
următorul apel al unei funcţii de introducere a datelor.
Dacă funcţia initget setează un bit de control şi aplicaţia apelează o funcţie pentru
introducerea datelor, pentru care acesta nu are semnificaţie, acesta bit este ignorat.
Dacă utilizatorul eşuează o dată sau de mai multe ori în respectarea condiţiilor AutoCAD
afişează un mesaj şi solicită utilizatorului reintroducerea datelor.
Argumente 
bit 
Un număr întreg care alocă sau dezalocă tipurile de date introduse de utilizator. Aceşti biţi
pot fi adunaţi împreună în orice combinaţie a lor pentru a forma un număr între 0 şi 255.
Dacă argumentul bits nu este furnizat, nu sunt puse condiţii la introducerea datelor.
Valoarea biţilor este următoarea:
1 (bit 0) Previne introducerea de către utilizator a tastei Enter ca răspuns la cererea
funcţiei.
2 (bit 1) Previne introducerea de către utilizator a valorii zero ca răspuns la cererea
funcţiei.
4 (bit 2) Previne introducerea de către utilizator a unei valori negative ca răspuns la
cererea funcţiei.
8 (bit 3) Permite introducerea de către utilizator a unui punct situat în afara limitelor
desenului curent.
16 (bit 4) Nu este folosit în mod curent.
32 (bit 5) Foloseşte linia întreruptă când se desenează o linie dinamică sau un dreptunghi
dinamic2. Pentru funcţiile pentru care utilizatorul poate specifica un punct prin selectarea
unei locaţii în zona de desenare acest bit cauzează desenarea liniei dinamice sau a ferestrei
de selecţie cu linie întreruptă3. Dacă variabila sistem POPUPS are valoarea zero
AutoCAD ignoră acest bit.
64 (bit 6) Inhibă introducerea coordonatei Z pentru funcţia getdist; Asigură aplicaţia că
acestă funcţie returnează o distanţă 2D.
128 (bit 7) Permite introducerea arbitrară, orice alţi biţi de control şi cuvinte cheie fiind
onorate primele. Acest bit este precedent bitului 0; dacă bitul 7 şi bitul 0 sunt setaţi şi
utilizatorul apasa tasta ENTER este returnat un şir de caractere nul.

1
de exemplu un punct pentru funcţia getpoint
2
de exemplu, la introducerea unei distanţe indicate cu mouse-ul sau digitizorul; aceeaşi situaţie pentru
o fereastră de selecţie
3
multe dispozitive de afişare

243
PROIECTARE ASISTATĂ DE COMPUTER
256 (bit 8) Introducerea unei distanţe directe1 este prioritară faţă de o introducere arbitrară.
Pentru aplicaţiile externe introducerea arbitrară este prioritară faţă de introducerea de
distanţă directă în mod implicit. Setaţi acest bit dacă doriţi să forţaţi AutoCAD-ul să
evalueze datele introduse de utilizator ca distanţă directă. Reţineţi că un punct corect
introdus de la tastatură este întotdeauna prioritar faţă de introducerea arbitrară şi faţă de
introducerea unei distanţe directe.
512 (bit 9) Dacă este setat înainte de apelul funcţiei getpoint sau al funcţiei getcorner, un
sistem de axe temporar UCS este setat acolo unde cursorul grafic taie latura unei suprafeţe
plane a unui obiect solid. Sistemul de coordonate temporar este resetat când cursorul grafic
se deplasează în afara feţei obiectului. El este restabilit dinamic când cursorul grafic trece
peste o faţă diferită. După ce acest punct este reţinut, sistemul de coordonate UCS dinamic
este resetat la sisitemul de coordonate curent. Această funcţionalitate nu este activă pentru
suprafeţe non-planare, ca suprafaţa laterală a unui cilindru.
1024 (bit 10) Când apelaţi funcţiile getdist, getangle, getorient, getpoint sau getcorner
poate nu doriţi ca distanţa, unghiul, orientarea, punctul sau colţul să fie influenţate de
modurile ortho, polar sau otracking în direcţia Z. Setarea acestui bit înainte de apelarea
acestor funcţii va dezactiva temporar modurile respective. Aceasta este folosită când creaţi
entităţi 2D ca PLINE, ARC sau CIRCLE sau folosiţi comanda ARRAY pentru a crea doar
un array 2D. Doar în comenzile 2D poate crea confuzie sau eroare prin introducerea unui
punct 3D folosind modurile ortho Z, polar Z, sau otrack Z.
Observaţie: Versiunile viitoare ale AutoCAD-ului vor putea folosi biţi de control
suplimentari pentru funcţia initget, deci setarea acestor biţi nu se regăseşte în această listă.
string 
Un şir de caractere care reprezintă o serie de cuvinte cheie
Valoare returnată 
Funcţia returnează nil.

Biţii de control ai funcţiei


Valorile speciale de control sunt aplicabile doar funcţiilor getxxx pentru care au sens, ca
acelea indicate în tabelul următor:

Funcţiile de introducere a datelor şi aplicabilitatea biţilor de control


Valoare biţilor de control

Aplicabilitatea Non-null Non- Pozitiv Fară Fol.


Funcţie
cuvintelor cheie zero limită Dashes
1 2 4 8 16
getint x x x x
getreal x x x x
getdist x x x x x
getangle x x x x
getorient x x x x

1
conceptul de distanţă directă se referă la modul de introducere a acesteia cu ajutorul modurilor ortho,
polar sau otrack

244
FUNCŢII UTILITARE – INTRODUCERE A DATELOR
getpoint x x x x
getcorner x x x x
getkword x x
entsel x
nentsel x
nentselp x

Funcţiile de introducere a datelor şi aplicabilitatea biţilor de control


(continuare)
Valoare biţilor de control
distanţă 2D Introducere Distanţă UCS asociat Dezactivare
Funcţie
arbitrară directă unei feţe Tracking Z
64 128 256 512 1024
getint x
getreal x
getdist x x x x
getangle x x x
getorient x x x
getpoint x x x x
getcorner x x x x
getkword x
entsel
nentsel
nentselp
Specificaţii pentru cuvinte cheie
Argumentul string este interpretat în acord cu regulile următoare:
1. Fiecare cuvânt cheie este separat de următorul cuvânt cheie de unul sau mai multe spaţii.
De exemplu “Width Height Depth” defineşte trei cuvinte cheie.
2. Fiecare cuvânt cheie poate conţine doar litere, numere şi (-).
În continuare sunt prezentate două metode pentru abrevierea cuvintelor cheie:
1. Abrevierea din cuvântul cheie este specificată cu caractere majuscule şi restul cuvântului
cheie este specificat cu caractere minuscule. Abrevierea cu caractere majuscule poate apare
oriunde în cuvântul cheie1.
2. Tot cuvântul cheie este specificat cu caractere majuscule şi este urmat imediat de o virgulă,
care este urmată de caracterele din abreviere2. Abrevierea cuvântului cheie trebuie să includă
şi prima literă din cuvântul cheie3.

1
de exemplu ”LType” ”eXit” sau ”toP”
2
de exemplu ”LTYPE,LT”
3
de exemplu ”EXIT,X” nu este valid

245
PROIECTARE ASISTATĂ DE COMPUTER
Cele două exemple de mai sus “LType” şi ”LTYPE,LT” sunt echivalente: dacă utilizatorul
tastează LT sau lt este suficient pentru a identifica cuvântul cheie. Utilizatorul poate introduce
caracterele care urmează abrevierii fără a intra în conflict cu specificaţiile. De exemplu,
utilizatorul poate introduce LTY sau LTYP, dar L nu este suficient.
Dacă argumentul string conţine un cuvânt cheie integral cu caractere majuscule sau cu
caractere minuscule fără delimitatorul virgulă urmată de abreviere, atunci AutoCAD
recunoaşte cuvântul cheie numai dacă este introdus complet de utilizator.
Funcţia initget furnizează suport pentru localizarea1 cuvintelor cheie. Sintaxa următoare
pentru un şir de caractere cuvânt cheie permite introducerea unui cuvânt cheie în limba locală
locală şi returnează un cuvânt cheie independent de limbă:
"local1local2localn_indep1indep2indepn"
unde local1 ... localn sunt cuvinte cheie în limba locală şi indep1 ... indepn sunt cuvinte cheie
independente de limba locală.
Numărul de cuvinte cheie în limba locală trebuie să fie egal cu numărul de cuvinte cheie
independente de limba locală şi primul cuvânt cheie independent de limba locală trebuie
precedat de simbolul “_” ca în exemplul următor:
(initget "Abc Def _Ghi Jkl")
(getkword "\nEnter an option (Abc/Def): ")
Introducerea caracterului A returnează Ghi şi introducerea _J returnează Jkl.
Funcţii  similare 
Funcţiile entsel, getangle, getcorner, getdist, getint, getkword, getorient, getpoint,
getreal, getstring, nentsel şi nentselp. Topicul Control of User-Input Function
Conditions din AutoLISP Developer's Guide.

nentsel
Descriere 
Solicită utilizatorului să selecteze un singur obiect sau o singură entitate, prin specificarea
unui punct şi furnizează accesul la datele de definiţie conţinute într-un obiect complex.
  Apelare 
(nentsel [msg])
Funcţia nentsel solicită utilizatorului selectarea unui obiect. Modul Object Snap curent este
ignorat fără o solicitare expresă din partea utilizatorului. Pentru a furniza ajutor suplimentar la
prompterul Command funcţia nentsel onorează cuvintele cheie definite de un apel anterior
al funcţiei initget.
Argumente 
msg 
Un şir de caractere care va fi afişat la prompter. Este afişat prompterul Select Object dacă
argumentul msg este omis
Valoare returnată 
Dacă obiectul selectat nu este complex2 funcţia nentsel returnează aceleaşi informaţii ca
funcţia entsel. Dacă obiectul selectat este o polilinie 3D, funcţia nentsel oricum returnează o
1
cuvinte cheie scrise în limba locală
2
daca nu este polilinie 3D sau block

246
FUNCŢII UTILITARE – INTRODUCERE A DATELOR
listă cu numele subentităţilor1 şi punctul de selecţie. Aceasta este similară listei returnate de
funcţia entsel exceptând numele vertexului selectat care este returnat ca început de polilinie.
Funcţia nentsel returnează întotdeauna vertexul de start pentru segmentul de polilinie
selectat. Dacă selectăm cel de-al treilea segment al poliliniei funcţia returnează vertexul 3.
Subentitatea Seqend nu este returnată niciodată pentru o polilinie 3D.
Observaţie: O polilinie de tip lightweight este definită în baza de date AutoCAD ca o
singură entitate; nu conţine subentităţi.
Dacă selectăm un atribut al unei referinţe de block funcţia returnează numele atributului şi
punctul de selecţie. Când obiectul selectat este o altă componentă decât un atribut al unei
referinţe de bloc de funcţia nentsel returnează o listă cu patru elemente.
Primul element din lista returnată la selecţia unui obiect dintr-un bloc este numele entităţii
selectate.
Cel de-al doilea element este o listă care conţine coordonatele punctului de selecţie.
Elementul trei se numeşte Model to World Transformation Matrix2. Acesta este o listă care
conţine patru subliste, fiecare conţinând un set de coordonate. Această matrice este folosită
pentru transformarea punctelor de definiţie ale entităţii din coordonate interne ale sistemului
Model Coordinate System (MCS) în coordonatele interne ale sistemului World Coordinate
System (WCS).
Punctul de inserare al blocului care conţine entitatea selectată defineşte originea sistemului de
coordonate MCS. Orientarea sistemului de coordonate utilizator UCS din momentul de creare
a blocului, determină direcţia axelor sistemului de coordonate MCS.
Observaţie: Funcţia nentsel nu este singura funcţie AutoLISP care foloseşte o matrice de
acest tip; funcţia nentselp returnează o matrice similară pentru a fi folosită de alte funcţii
AutoLISP şi fucţii ObjectARX.
Al patrulea element este o listă care conţine numele entităţii block care conţine elementul
selectat. Dacă obiectul selectat face parte dintr-un bloc imbricat3, lista deasemenea conţine
numele de entitate ale tuturor blocurilor imbricate din care entitatea selectată face parte,
începând cu blocul cel mai adânc imbricat până la blocul inserat în desen, deci blocul care
conţine toate celelalte blocuri imbricate, respectiv cel mai dinafară bloc.
Pentru informaţii despre convertirea coordonatelor MCS în coordonate WCS citiţi subiectul
Entity Context and Coordinate Transform Data din Using AutolISP to Manipulate
AutoCAD Objects în AutoLISP Developer´s Guide.
Exemple 
Desenaţi o polilinie 3D având multiple segmente; apoi încărcaţi şi rulaţi funcţia următoare
după care selectaţi diferite segmente din polilinie. Selectaţi un punct înafara liniei şi apoi
selectaţi din nou acelaşi segment pentru a vedea descriptorul subentităţilor. Încercaţi cu o
polilinie de tip lightweight pentru a vedea diferenţa.
(defun c:subent ()
(while
(setq Ent (entsel "\nPick an entity: "))
(print (strcat "Entity handle is: "
(cdr (assoc 5 (entget (car Ent))))))
)

1
vertexuri
2
matricea de transformare din model in world
3
bloc în interiorul altui bloc

247
PROIECTARE ASISTATĂ DE COMPUTER
(while
(setq Ent (nentsel "\nPick an entity or subEntity: "))
(print (strcat "Entity or subEntity handle is: "
(cdr (assoc 5 (entget (car Ent))))))
)
(prompt "\nDone.")
(princ)
)
Funcţii  similare 
Funcţiile entsel, initget şi nentselp.

nentselp
Descriere 
Furnizează aceleaşi facilităţi ca şi funcţia nentsel, fără să fie necesară introducerea datelor de
către utilizator.
  Apelare 
(nentselp [msg] [pt])
Argumente 
msg 
Un şir de caractere care este afişat ca prompter. Dacă argumentul msg este omis este afişat
prompterul Selected object
pt 
Un punct de selecţie. Aceasta permite selectarea unui obiect fără intervenţia utilizatorului
Valoare returnată 
Funcţia nentselp returnează o matrice de transformare 4x4, definită ca în continuare:
Primele trei coloane ale matricii specifică scalarea şi rotaţia. A patra coloană reprezintă
vectorul de translaţie.
Funcţiile care folosesc matrici de acest tip tratează un punct ca un vector de patru dimensiuni.
Punctul este exprimat în coordonate omogene, unde al patrulea element al vectorului punct
este factorul de scală şi este setat în mod normal la valoarea 1.0. Ultima linie a matricei,
vectorul [M30M31M32M33] are valorile nominale [0 0 0 1]; este ignorat în mod curent de
funcţiile care folosesc matricea în această formă.
Funcţii  similare 
Funcţiile initget şi nentsel.

7.3. MULŢIMI DE SELECŢIE, OBIECTE, ŞI TABELA DE


SIMBOLURI

7.3.1. Manipularea Datelor – Funcţii extinse

248
FUNCŢII UTILITARE – INTRODUCERE A DATELOR
Nume funcţie Descriere
( regapp application)
regapp înregistrează un nume de aplicaţie în desenul AutoCAD curent în pregătire
pentru folosirea de date obiect extinse
( xdroom ename)
xdroom returnează mărimea spaţiului datei extinse xdata disponibilă pentru un
obiect/entitate
( xdsize lst)
xdsize returnează dimensiunea, în octeţi, pe care o listă o ocupă când este link către
un obiect, entitate, ca dată extinsă

regapp
Descriere 
Înregistrează un nume de aplicaţie în desenul AutoCAD curent în pregătire pentru folosirea de
date obiect extinse.
  Apelare 
(regapp application)
Argumente 
application 
Un şir de caractere care conţine numele aplicaţiei. Numele trebuie să fie un nume valid din
tabela de simboluri. Pentru a determina dacă numele simbolului este valid consultaţi
descrierea lui snvalid din regulile AutoLISP.
Valoare returnată 
Dacă o aplicaţie cu acelaşi nume este deja înregistrată funcţia returnează nil; altfel funcţia
returnează numele aplicaţiei.
Dacă înregistrarea se face cu succes numele aplicaţiei este introdus în tabela cu simboluri
APPID. Această tabelă păstrază o listă cu aplicaţiile care folosesc date extinse în desen.
Exemple 
(regapp "ADESK_4153322344")
(regapp "DESIGNER-v2.1-124753")
Observaţie: Este recomandat să folosiţi un nume unic pentru aplicaţii. O cale pentru a realiza
această este să folosiţi o schemă de nume care foloseşte numele companiei sau al produsului şi
un identificator numeric unic1. Numărul care specifică versiunea produsului poate fi inclus în
numele aplicaţiei sau păstrat în aplicaţie ca număr întreg sau real2.

xdroom
Descriere 
Returnează mărimea spaţiului datei extinse xdata disponibilă pentru un obiect/entitate.

1
de exemplu numărul de telefon sau data curentă
2
de exemplu 1040 2.1

249
PROIECTARE ASISTATĂ DE COMPUTER
  Apelare 
(xdroom ename)
Deoarece memoria alocată definiţiei unei entitaţi în zona de extensie a datelor este limitată şi
deoarece aplicaţii multiple pot adauga date extinse pentru aceeaşi entitate, această funcţie
furnizează aplicaţiei posibilitatea de a verifica spaţiul necesar datelor extinse care vor fi
adăugate. Ea poate fi apelată în conjuncţie cu funcţia xdsize care returnează dimensiunea
listei de date extinse.
Argumente 
ename 
Un nume de entitate
Valoare returnată 
Funcţia returnează un număr întreg care reprezintă numărul de octeţi ai spaţiului disponibil.
Pentru eşec funcţia xdroom returnează nil.
Exemple 
Exemplul următor verifică spaţiul disponibil pentru data extinsă a obiectului viewport:
Command: (xdroom vpname)
16162
În acest exemplu sunt disponibili 16162 octeţi spaţiu din cei 16383, ceea ce înseamnă că 221
octeţi sunt folosiţi.

xdsize
Descriere 
Returnează dimensiunea, în octeţi, pe care o listă o ocupă când este link către un obiect,
entitate, ca dată extinsă.
  Apelare 
(xdsize lst)
Argumente 
lst 
O listă validă de date extinse care conţine un nume de aplicaţie înregistrat anterior cu
funcţia regapp
Valoare returnată 
Funcţia returnează un număr întreg care reprezintă dimensiunea în octeţi. În caz de eşec
funcţia xdsize returnează nil.
Câmpurile pereche, grupul cod 1002, trebuie să fie egale. Dacă argumentul lst este invalid se
generează o eroare al cărei cod este plasat în variabila ERNO. Dacă datele extinse conţin un
nume de aplicaţie neînregistrată veţi vedea acest mesaj de eroare:
Invalid application name in 1001 group
Exemple 
Argumentul lst poate porni cu codul de grup -3, data extinsă sentinel, dar acest lucru nu este
cerut. Deoarece data extinsă poate conţine informaţii de la aplicaţii multiple lista trebuie să
aibe un set de paranteze închise.

250
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA DATELOR – FUNCŢII EXTINSE
(-3 ("MYAPP" (1000 . "SUITOFARMOR")
(1002 . "{")
(1040 . 0.0)
(1040 . 1.0)
(1002 . "}")
)
)
Aici este prezentat un exemplu similar fără codul de grup +3. Această listă este similară cu
lisa anterioară după aplicarea funcţiei cdr, dar este important ca parantezele închise să fie
incluse:
( ("MYAPP" (1000 . "SUITOFARMOR")
(1002 . "{")
(1040 . 0.0)
(1040 . 1.0)
(1002 . "}")
)
)

7.3.2. Manipularea Obiectelor

Nume funcţie Descriere


( entdel ename)
entdel
şterge obiecte şi entităţi sau restaurează obiecte şterse anterior
( entget ename [applist])
entget
extrage datele de definiţie ale obiectelor sau entităţilor
( entlast)
entlast
returnează numele ultimului obiect neşters din desen
( entmake [elist])
entmake
creează entităţi noi în desen
( entmakex [elist])
entmakex creează obiecte sau entităţi noi furnizând numele şi descriptorul
entităţii şi returnează numele entităţii.
( entmod elist)
entmod
modifică datele de definiţie ale unui obiect sau entităţi
( entnext [ename])
entnext
returnează numele următorului obiect sau entităţi din desen
( entupd ename)
entupd
actualizează imaginea afişată a unui obiect sau entitate
( handent handle)
handent
returnează numele unui obiect sau entităţi pe baza descriptorului
( vlax-dump-object obj)
vlax-dump-object listează proprietăţile obiectelor şi opţional metodele care se aplică
la aceste obiecte

251
PROIECTARE ASISTATĂ DE COMPUTER
( vlax-erased-p obj)
vlax-erased-p
determină dacă un obiect a fost şters
( vlax-get-acad-object)
vlax-get-acad-object găseşte aplicaţiile obiect de nivel înalt pentru sesiunea AutoCAD
curentă
( vlax-method-applicable-p objmethod)
vlax-method-applicable-p
determină dacă un obiect suportă metode particulare
( vlax-object-released-p obj)
vlax-object-released-p
determină dacă un obiect va fi distrus
( vlax-read-enabled-p obj)
vlax-read-enabled-p
determină dacă un obiect poate fi citit
( vlax-release-object obj)
vlax-release-object
distruge un obiect desen
( vlax-typeinfo-available-p obj)
vlax-typeinfo-available-p determină când informaţii de tip TypeLib sunt prezente pentru
tipul specificat de obiect
( vlax-write-enabled-p obj)
vlax-write-enabled-p
determină dacă un obiect desen AutoCAD poate fi modificat

entdel
Descriere 
Şterge obiecte sau restaurează obiecte şterse anterior.
  Apelare 
(entdel ename)
Entitatea specificată de argumentul ename este ştearsă dacă se află în desenul curent. Funcţia
entdel restaurează o entitate din desen dacă aceasta a fost ştearsă anterior în timpul sesiunii
curente de editare. Entităţile şterse sunt eliminate din desen când sesiunea curentă este închisă.
Funcţia entdel poate şterge entităţi grafice şi nongrafice.
Argumente 
ename 
Numele entităţii care va fi ştearsă sau restaurată
Valoare returnată 
Funcţia returnează numele entităţii.
Notă de folosire:
Funcţia entdel lucrează doar cu entităţi primare. Atributele şi vertex-urile poliliniei nu pot fi
şterse independent de entitatea părinte. Puteţi folosi funcţia command pentru a folosi
comanda ATTEDIT sau comanda PEDIT în Command Reference pentru a modifica
subentităţile.
Nu puteţi şterge entităţi de tipul definiţiei de blocuri. Totuşi folosind funcţia entmake puteţi
redefini definiţia unui block fără entitatea pe care vreţi să o ştergeţi.
Exemple 
Găseşte numele primei entităţi din desen şi îl atribuie variabilei e1:

252
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA OBIECTELOR
Command: (setq e1 (entnext))
<Entity name: 2c90520>
Şterge entitatea al cărei nume este memorat în e1:
Command: (entdel e1)
<Entity name: 2c90520>
Restaurează entitatea al cărei nume este memorat în e1:
Command: (entdel e1)
<Entity name: 2c90520>
Funcţii  similare 
Funcţia handent.

entget
Descriere 
Extrage datele de definiţie ale obiectelor1.
  Apelare 
(entget ename [applist])
Argumente 
ename 
Numele entităţii interogate. Argumentul ename se poate referi la entităţi grafice sau
nongrafice
applist 
O listă care conţine numele aplicaţiilor înregistrate
Valoare returnată 
Funcţia returnează o listă de asociere care conţine definiţia entităţii specificate de ename.
Dacă furnizaţi argumentul opţional applist, funcţia entget returnează datele extinse asociate
cu aplicaţiile specificate. Obiectele din această listă au asignat grupul de coduri AutoCAD
DXF pentru fiecare parte a datelor entităţii.
Reţineţi că grupul de coduri DXF folosit de AutoLISP diferă puţin de grupul de coduri din
fişierul DXF. Grupul de coduri DXF este documentat în DXF Reference.
Exemple 
Asiguraţi-vă că ultimul obiect creat în desen este o linie desenată din punctul (1,2) în punctul
(6,5). Exemplul următor arată codul returnat pentru entitatea al cărei nume furnizat de funcţia
entlast este trimis funcţiei entget:
Command: (entget (entlast))
((-1 . <Entity name: 1bbd1d0>) (0 . "LINE") (330 . <Entity name: 1bbd0c8>) (5 . "6A")
(100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 1.0 2.0
0.0) (11 6.0 5.0 0.0) (210 0.0 0.0 1.0))
Funcţii  similare 
Funcţiile entdel, entlast, entmod, entmake, entnext, entupd şi handent şi funcţiile Entity
Data.
1
entităţilor

253
PROIECTARE ASISTATĂ DE COMPUTER

entlast
Descriere 
Returnează numele ultimului obiect1 primar2 neşters din desen.
  Apelare 
(entlast)
Funcţia entlast este folosită frecvent pentru a obţine numele unor entităţi noi care tocmai au
fost adăugate în desen cu funcţia command. Pentru selectarea unei entităţi aceasta trebuie să
fie pe ecran sau într-un strat îngheţat.
Valoare returnată 
Funcţia returnează un nume de entitate. Dacă nu este nici o entitate în desenul curent funcţia
returnează nil.
Exemple 
Atribuie variabilei e1 numele ultimei entităţi adăugate desenului:
Command: (setq e1 (entlast))
<Entity name: 2c90538>
Dacă aplicaţia dumneavoatră necesită numele ultimei entităţi3 neşterse, definiţi o funcţie ca în
exemplul următor şi în ea apelaţi funcţia entlast.
(defun lastent (/ a b)
(if (setq a (entlast)) Găseşte ultima entitate
(while (setq b (entnext a)) Dacă există subentităţi ciclează
repetă până nu mai sunt subentităţi
(setq a b)
)
)
a Returnează entitatea primară
) sau subentitatea
Funcţii  similare 
Funcţia entdel, entget, entmod, entnext, entsel şi handent.

entmake
Descriere 
Creează entităţi noi în desen.
  Apelare 
(entmake [elist])
Funcţia entmake poate defini entităţi grafice şi nongrafice.
Argumente 

1
sau entitate
2
de exemplu o polilinie şi nu un segment din ea
3
entitate primară sau subentităţi

254
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA OBIECTELOR
elist 
O listă cu datele de definiţie pentru o entitate într-un format similar cu cel returnat de
funcţia entget. Argumentul elist trebuie să conţină toate informaţiile necesare definirii
entităţii. Dacă oricare din datele necesate este omisă, atunci funcţia entmake returnează nil
şi entitatea este respinsă. Dacă omiteţi date de definiţie opţionale1, funcţia entmake va
folosi valorile implicite pentru aceste date.
Tipul entităţii2 trebuie să fie primul sau al doilea câmp din argumentul elist. Dacă tipul
entităţii se află pe poziţia a doua, el poate fi precedat numai de numele entităţii. Funcţia
entmake ignoră numele entităţii când Creează o entitate nouă. Funcţia entmake ignoră
descriptorul entităţii dacă este conţinut de argumentul elist.
Valoare returnată 
Funcţia entmake returnează lista de definiţie a entităţii dacă operaţia se efectuează cu succes.
Funcţia entmake returnează nil dacă nu poate crea entitatea.
La completarea definiţiei unui bloc se returnează în plus numele blocului faţă de lista de date
returnată în mod normal.
Exemple 
Codul următor Creează un cerc roşu3, cu centrul în punctul (4,4) şicu raza 1. Datele opţionale
strat de desenare şi tipul de linie sunt omise şi deci vor fi folosite setările implicite pentru
acestea.
Command: (entmake '((0 . "CIRCLE") (62 . 1) (10 4.0 4.0 0.0) (40 . 1.0)))
((0 . "CIRCLE") (62 . 1) (10 4.0 4.0 0.0) (40 . 1.0))
Notă pentru folosirea funcţiei entmake
Nu puteţi crea obiecte tip viewport cu funcţia entmake.
Codul de grup 66 este acceptat doar pentru obiectele inserate4. Pentru entităţile de tip polilinie
acest cod este forţat la valoarea 15 şi toate celelalte entităţi folosesc implicit valoarea 0. Doar
entitatea care urmează după o polilinie este o entitate vertex.
Codul de grup 26 pentru dimensiunile entităţii este opţional pentru funcţia entmake. Dacă
numele blocului este omis din lista de definiţie a entităţii AutoCAD creează unul nou. Altfel
AutoCAD creează dimensiunile folosind numele furnizat.
Din motive de moştenire funcţia entmake ignoră codul de grup DXF 100 pentru entităţile
următoare:
ƒ AcDbText
ƒ AcDbAttribute
ƒ AcDbAttributeDefinition
ƒ AcDbBlockBegin
ƒ AcDbBlockEnd
ƒ AcDbSequenceEnd
ƒ AcDbBlockReference
ƒ AcDbMInsertBlock

1
de exemplu numele stratului de desenare
2
de exemplu CIRCLE sau LINE
3
culoare 62
4
deci urmează atributele
5
deci urmează vertex
6
numele blocului

255
PROIECTARE ASISTATĂ DE COMPUTER
ƒ AcDb2dVertex
ƒ AcDb3dPolylineVertex
ƒ AcDbPolygonMeshVertex
ƒ AcDbPolyFaceMeshVertex
ƒ AcDbFaceRecord
ƒ AcDb2dPolyline
ƒ AcDb3dPolyline
ƒ AcDbArc
ƒ AcDbCircle
ƒ AcDbLine
ƒ AcDbPoint
ƒ AcDbFace
ƒ AcDbPolyFaceMesh
ƒ AcDbPolygonMesh
ƒ AcDbTrace
ƒ AcDbSolid
ƒ AcDbShape
ƒ AcDbViewport
Funcţii  similare 
Funcţiile entdel, entget, entmod şi handent.

entmakex
Descriere 
Creează obiecte sau entităţi noi furnizând numele şi descriptorul entităţii şi returnează numele
entităţii.
  Apelare 
(entmakex [elist])
Argumente 
elist 
O listă cu datele de definiţie pentru o entitate într-un format similar cu cel returnat de
funcţia entget. Argumentul elist trebuie să conţină toate informaţiile necesare definirii
entităţii. Dacă oricare dintre datele necesare este omisă, atunci funcţia entmake returnează
nil şi entitatea este respinsă. Dacă omiteţi date de definiţie opţionale1, funcţia entmake va
folosi valorile implicite pentru aceste date
Valoare returnată 
În caz de succes, funcţia entmakex returnează numele entităţii create. Dacă funcţia
entmakex nu poate crea entitatea funcţia returnează nil.
Exemple 
_$ (entmakex '((0 . "CIRCLE")

1
de exemplu numele stratului de desenare

256
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA OBIECTELOR
(62 . 1) (10 4.0 3.0 0.0) (40 . 1.0)))
<Entity name: 1d45558>
Atenţie! Obiectele şi entităţile fără proprietar1 nu sunt salvate în fişiere DWG sau DXF.
Funcţii  similare 
Funcţiile entmake şi handent.

entmod
Descriere 
Modifică datele de definiţie ale unui obiect2.
  Apelare 
(entmod elist)
Funcţia entmode actualizează informaţiile din baza de date pentru entitatea specificată de
codul de grup -1 în argumentul elist. Mecanismul primar cu care AutoLISP actualizează baza
de date foloseşte funcţia entget pentru obţinerea informaţiilor despre entitate, modifică lista
de definiţie a entităţii folosind funcţia subst şi actualizează datele de definiţie ale entităţii în
baza de date folosind funcţia entmod. Funcţia entmod poate modifica obiecte grafice şi
nongrafice.
Argumente 
elist 
O listă de date de definiţie a unei entităţi în format similar cu cel returnat de funcţia
entget.
Pentru câmpurile de definiţie având coordonate numere reale3 funcţia entmod acceptă
valori numere întregi pe care le converteşte la numere reale. Similar, dacă furnizaţi valori
reale pentru un câmp de definiţie al entităţii care necesită valori numere întregi4, funcţia
entmod trunchiază şi converteşte aceste valori în numere întregi
Valoare returnată 
Funcţia entmod returnează valoarea argumentului elist pentru operaţie efectuată cu succes.
Funcţia returnează nil dacă nu poate modifica entitatea specificată.
Exemple 
Secvenţa următoare de comenzi obţine proprietăţile entităţii şi modifică această entitate.
Atribuie variabilei en1 numele primei entităţi din desen:
Command: (setq en1 (entnext))
<Entity name: 2c90520>
Atribuie variabilei ed datele de definiţie ale entităţii memorate în en1:
Command: (setq ed (entget en1))
((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0)
(8 . "0") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0
1.0))

1
posesor
2
entitate
3
ca de exemplu tickness
4
ca de exemplu numărul care specifică culoarea

257
PROIECTARE ASISTATĂ DE COMPUTER
Schimbă grupul layer în ed din layer 0 în layer 1:
Command: (setq ed (subst (cons 8 "1") (assoc 8 ed) ed ))
((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0)
(8 . "1") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0
1.0))
Modifică stratul de desenare al entităţii en1 în desen:
Command: (entmod ed)
((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0)
(8 . "1") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0
1.0))
Restricţii pentru folosirea lui entmod
Restricţiile pentru schimbările pe care funcţia entmod le poate face sunt prezentate în
continuare:
Tipul entităţii şi descriptorul acesteia nu pot fi schimbate. Dacă doriţi să faceţi asta folosiţi
funcţia entdel pentru a şterge entitatea şi construiţi altă entitate cu funcţia command sau
funcţia entmake.
Funcţia entmod nu poate schimba câmpurile descriptive interne, ca de exemplu numele
entităţii in grupul -2 a celei de-a doua entităţi. Încercările de a schimba acest câmp sunt
ignorate.
Nu puteţi folosi funcţia entmod pentru a modifica entitatea viewport.
Puteţi schimba câmpul pentru vizibilitatea spaţiului entităţilor din 0 în 11. Dacă folosiţi funcţia
entmod pentru a modifica o entitate dintr-o definiţie de block atunci modificarea afectează
toate instanţele blocului în desen.
Înainte de a folosi funcţia entmod pentru entităţile de tip vertex trebuie să citiţi sau să scrieţi
descriptorul entităţii polilinie. Dacă entitatea de tip polilinie cea mai recent procesată este
diferită pentru unul din vertex-uri informaţia de lăţime2 poate fi pierdută.
Atenţie! Puteţi folosi funcţia entmod pentru a modifica entităţile din definiţia unui block, dar
se pot crea autoreferinţe ale blocului ceea ce cauzează oprirea AutoCAD-ului.
Funcţii  similare 
Funcţiile entdel, entget, entmake şi handent.

entnext
Descriere 
Returnează numele următorului obiect sau entităţi din desen.
  Apelare 
(entnext [ename])
Argumente 
ename 
Numele unei entităţi existente
Valoare returnată 

1
cu excepţia obiectelor viewport
2
grupul 40 şi 41

258
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA OBIECTELOR
Dacă funcţia entnext este apelată fără argumente, returnează numele primei entităţi neşterse
din baza de date. Dacă este furnizat argumentul ename, funcţia entnext returnează numele
primei entităţi neşterse din baza de date conform argumentului ename. Dacă nu găseşte
această entitate în baza de date funcţia returnează nil. Funcţia entnext returnează entităţi
primare şi subentităţi.
Exemple 
(setq e1 (entnext)) ; Atribuie variabilei e1 numele primei entităţi din desen
(setq e2 (entnext e1)) ; Atribuie variabilei e2 numele următoarei entităţi din
desen după e1
Observaţie:
Entitatea selectată cu funcţia ssget este o entitate primară, nu un atribut al unui bloc şi nici un
vertex de polilinie. Puteţi accesa structura internă a acestor entităţi complexe parcurgând toate
subentităţile cu funcţia entnext. Odată obţinute numele subentităţilor, puteţi opera asupra lor
similar cu operaţiile asupra altor entităţi. Dacă obţineţi numele unei subentităţi cu entnext
puteţi găsi entitatea părinte parcurgând înainte subentităţile cu funcţia entnext până când
întâlniţi entitatea seqend, după care extrageţi codul de grup -2 pentru acestă entitate, care
reprezintă de fapt numele entităţii primare.
Funcţii  similare 
Funcţiile entdel, entget, entnext, entmake şi handent.

entupd
Descriere 
Actualizează imaginea afişată a unui obiect sau entitate.
  Apelare 
(entupd ename)
Argumente 
ename 
Numele entităţii care va fi actualizată pe ecran
Valoare returnată 
Funcţia returnează entitatea specificată de ename actualizată; dacă nu se actualizează nimic
funcţia returnează nil.
Exemple 
Asiguraţi-vă că prima entitate din desen este o polilinie 3D cu multe vertex-uri. Codul următor
modifică şi reafişează polilinia
(setq e1 (entnext)) ; Atribuie variabilei e1 numele entităţii polilinie
(setq e2 (entnext e1)) ; Setează variabila e2 ca prim vertex
(setq ed (entget e2)) ;Setează variabila ed ca dată vertex
(setq ed
(subst '(10 1.0 2.0)
(assoc 10 ed) ;Schimbă locaţia vertex-ului în variabila ed
ed ; la punctul (1,2)
)

259
PROIECTARE ASISTATĂ DE COMPUTER
)
(entmod ed) ; Mută acest vertex în desen
(entupd e1) ; Regenerează entitatea polilinie din variabila e1

Actualizarea poliliniilor şi blocurilor


Dacă un vertex al unei polilinii 3D sau un atribut al unui block este modificat cu funcţia
entmod entitatea complexă nu este modificată pe ecran. Funcţia entupd poate fi folosită
pentru a actualiza o polilinie sau un block. Această funcţie poate fi apelată cu un nume de
subentitate parte a unei polilinii sau a unui bloc; nu este necesar să fie nume de entitate
primară. El reactualizează pe ecran entitatea primară împreună cu toate subentităţile.
Observaţie: Dacă funcţia entupd este folosită pentru o entitate conţinută în altă entitate sau
pentru un block care conţine asemenea entităţi, majoritatea entităţilor nu pot fi regenerate.
Pentru o actualizare completă trebuie să apelaţi comanda REGEN în Command Reference.
Funcţii  similare 
Funcţiile entget, entnext, entmod şi handent.

handent
Descriere 
Returnează numele unui obiect sau entităţi pe baza descriptorului.
  Apelare 
(handent handle)
Funcţia handent returnează numele unei entităţi grafice sau nongrafice.
Argumente 
handle 
Un şir de caractere care conţine descriptorul entităţii
Valoare returnată 
Funcţia handent returnează numele entităţii asociat cu descriptorul din sesiunea curentă de
editare. Dacă funcţia handent primeşte ca argument un descriptor invalid sau descriptorul nu
este folosit pentru nici o entitate în desenul curent, atunci returnează nil.
Funcţia handent returnează entităţi care vor fi şterse în timpul sesiunii curente. Nu le puteţi
reface după folosirea funcţiei entdel.
Un nume de entitate poate fi schimbat de la o sesiune de editare la alta, dar descriptorul
entităţii rămâne acelaşi, neschimbat.
Exemple 
Command: (handent "5A2")
<Entity name: 60004722>
Apelând funcţia în acelaşi mod, dar în sesiuni de editare diferite, se pot obţine nume diferite
pentru aceeaşi entitate. Odată ce aţi obţinut numele entităţii puteţi să îl folosiţi pentru
manipularea entităţii cu oricare din funcţiile pentru manipularea entităţilor.
Funcţii  similare 
Funcţiile entdel, entget, entlast, entmake, entmakex, entmod, entnext, entsel şi
entupd.

260
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA OBIECTELOR

vlax-dump-object
Descriere 
Listează proprietăţile obiectelor şi opţional metodele care se aplică la aceste obiecte.
  Apelare 
(vlax-dump-object obj [T])

Argumente 
obj 
Un obiect de tip VLA

Dacă acest argument este furnizat funcţia vlax-dump-object listează toate metodele care
se aplică obiectului specificat în argumentul obj
Valoare returnată 
Funcţia returnează T dacă operaţia se desfăşoară cu succes. Dacă este furnizat un nume de
obiect invalid funcţia vlax-dump-object afişează un mesaj de eroare.
Exemple 
_$ (setq aa (vlax-get-acad-object))
#<VLA-OBJECT IAcadApplication 00b3b91c>
_$ (vlax-dump-object aa)
; IAcadApplication: AutoCAD Application Interface
; Property values:
; ActiveDocument (RO) = #<VLA-OBJECT IAcadDocument 01b52fac>
; Application (RO) = #<VLA-OBJECT IAcadApplication 00b3b91c>
; Caption (RO) = "AutoCAD - [Drawing.dwg]"
.
.
.
T
Lista proprietăţilor obiectului şi a metodelor care se aplică acestui obiect.
_$ (vlax-dump-object aa T)
; IAcadApplication: AutoCAD Application Interface
; Property values:
; ActiveDocument (RO) = #<VLA-OBJECT IAcadDocument 01b52fac>
; Application (RO) = #<VLA-OBJECT IAcadApplication 00b3b91c>
; Caption (RO) = "AutoCAD - [Drawing.dwg]"
.
.
.
; Methods supported:
; EndUndoMark ()
; Eval (1)

261
PROIECTARE ASISTATĂ DE COMPUTER
; GetInterfaceObject (1)
; ListAds ()
; ListArx ()
.
.
.
T

vlax-erased-p
Descriere 
Determină dacă un obiect a fost şters.
  Apelare 
(vlax-erased-p obj)
Argumente 
obj 
Un obiect de tip VLA
Valoare returnată 
Funcţia vlax-erased-p returnează T dacă obiectul a fost şters; altfel nil.

vlax-get-acad-object
Descriere 
Găseşte aplicaţiile obiect de nivel înalt pentru sesiunea AutoCAD curentă.
  Apelare 
(vlax-get-acad-object)
Valoare returnată 
Funcţia returnează un obiect de tip VLA.
Exemple 
_$ (setq aa (vlax-get-acad-object))
#<VLA-OBJECT IAcadApplication 00b3b91c>

vlax-method-applicable-p
Descriere 
Determină dacă un obiect suportă o metodă particulară.
  Apelare 
(vlax-method-applicable-p obj method)
Argumente 
obj 

262
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA OBIECTELOR
Un obiect de tip VLA
method 
Un simbol sau un şir de caractere care conţine numele metodei care trebuie verificată
Valoare returnată 
Funcţia returnează T dacă obiectul suportă metoda; altfel nil.
Exemple 
Următoarele comenzi sunt folosite pentru un obiect de tip LightweightPolyline:
_$ (vlax-method-applicable-p
WhatsMyLine 'copy)
T
_$ (vlax-method-applicable-p
WhatsMyLine 'AddBox)
nil
Funcţii  similare 
Funcţia vlax-property-available-p.

vlax-object-released-p
Descriere 
Determină dacă un obiect va fi distrus1.
  Apelare 
(vlax-object-released-p obj)
Observaţie: Ştergerea unui obiect VLA2 nu duce la distrugerea lui. Un obiect VLA este
distrus la apelul funcţiei vlax-release-object pentru acest obiect sau eliminarea normală din
spaţiul AutoLISP a ”gunoaielor”3 sau atunci când baza de date a desenului este distrusă la
închiderea sesiunii de desenare.
Argumente 
obj 
Un obiect de tip VLA
Valoare returnată 
Funcţia returnează T dacă obiectul va fi distrus; nil dacă obiectul nu va fi distrus
Exemple 
Ataşează o aplicaţie Microsoft Excel la desenul AutoCAD curent:
_$ (setq excelobj (vlax-get-object
"Excel.Application"))
#<VLA-OBJECT _Application 00168a54>
Distruge obiectul Excel:
_$ (vlax-release-object excelobj)

1
eliminat din memoria de lucru
2
folosind comanda ERASE sau funcţia vla-erase
3
obiecre şterse şi nedistruse, variabile care nu sunt distruse şi ocupă spaţiul de memorie, ş.a.m.d.

263
PROIECTARE ASISTATĂ DE COMPUTER
1
Apelează funcţia vlax-object-released-p pentru a verifica dacă obiectul a fost distrus.
_$ (vlax-object-released-p
excelobj)
T

vlax-read-enabled-p
Descriere 
Determină dacă un obiect poate fi citit.
  Apelare 
(vlax-read-enabled-p obj)
Argumente 
obj 
Un obiect de tip VLA
Valoare returnată 
Funcţia returnează T dacă obiectul poate fi citit; altfel nil.

vlax-release-object
Descriere 
Distruge1 un obiect desen.
  Apelare 
(vlax-release-object obj)
Când o rutină AutoLISP nu foloseşte timp îndelungat un obiect extern AutoCAD-ului, ca de
exemplu un obiect Microsoft Excel, apelaţi funcţia (vlax-release-object) pentru a fi siguri
că această aplicaţie asociată este închisă corect. Obiectul distrus cu (vlax-release-object …)
ar putea să nu fie distrus imediat. Distrugerea poate să nu se efectueze până la următoarea
eliminare automata a ”gunoaielor”2. Puteţi curăţa memoria singuri apelând direct funcţia (gc)
undeva în cod. Totuşi această metodă poate afecta performanţele programului, de aceea este
indicat apelul funcţiei (gc) într-o zonă din program unde nu este apelată de multe ori sau nu se
află într-o buclă de repetare.
Dacă un obiect asociat aplicaţiei nu este închis după apelarea funcţiei (gc), atunci funcţia
(vlax-release-object) nu a fost apelată pentru toate obiectele externe AutoCAD-ului.
Argumente 
obj 
Un obiect de tip VLA
După distrugere
Valoare returnată 
Nespecificat.

1
elimină din memorie
2
curăţirea automată a memoriei

264
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA OBIECTELOR

vlax-typeinfo-available-p
Descriere 
Determină prezenţa pentru tipul specificat de obiect a informaţiilor de tip TypeLib.
Visual LISP necesită informaţii pentru a determina dacă o anumită metodă sau o proprietate
sunt disponibile pentru un obiect. Unele din obiecte pot să nu aibă informaţii TypeLib,, ca de
exemplu AcadDocument.
  Apelare 
(vlax-typeinfo-available-p obj)
Argumente 
obj 
Un obiect de tip VLA
Valoare returnată 
Funcţia returnează T dacă informaţia TypeLib este disponibilă; altfel nil.
Funcţii  similare 
Funcţia vlax-import-type-library.

vlax-write-enabled-p
Descriere 
Determină dacă un obiect desen AutoCAD poate fi modificat.
  Apelare 
(vlax-write-enabled-p obj)
Argumente 
obj 
Un obiect de tip VLA sau o entitate obiect AutoLISP (ename)
Valoare returnată 
Funcţia returnează T dacă obiectul desen AutoCAD poate fi modificat sau nil dacă obiectul nu
poate fi modificat.

7.3.3. Manipularea Mulţimilor de Selecţie

Nume funcţie Descriere


( ssadd [ename[ss]])
ssadd
adaugă un obiect la o mulţime de selecţie
( ssdel ename ss)
ssdel
şterge un obiect dintr-o mulţime de selecţie
( ssget [mode] [pt1 [pt2]] [pt-list][filter-list])
ssget
Creează o mulţime de selecţie pentru obiectele selectate
( ssgetfirst)
ssgetfirst
determină care obiect este selectat şi are grip-urile active

265
PROIECTARE ASISTATĂ DE COMPUTER
( sslength ss)
sslength returnează un număr întreg care reprezintă numărul de obiecte din
mulţimea de selecţie
( ssmemb ename ss)
ssmemb
testează dacă un obiect este membru al unei mulţimi de selecţie
( ssname ss index)
ssname
returnează numele obiectului indexat dintr-o mulţime de selecţie
( ssnamex ss index)
ssnamex
returnează informaţiile despre modul de creare a unei mulţimi de selecţie
( sssetfirst gripset [pickset])
sssetfirst
setează ce obiecte sunt selectate şi au grip-urile active

ssadd
Descriere 
Adaugă un obiect1 la o mulţime de selecţie.
  Apelare 
(sssetfirst gripset[pickset])
Dacă argumentul gripset este ignorat, mulţimea de selecţie a obiectelor specificate prin
argumentul pickset sunt selectate şi au grip-uri active2.
Sunteţi responsabili pentru crearea unor mulţimi de selecţie valide. De exemplu, trebuie să
verificaţi dacă background-ul spaţiului de desenare din veiwport-ul curent3 nu este inclus în
mulţimea de selecţie. Puteţi de asemenea avea nevoie să selectaţi obiectele din startul de
desenare curent, ca în codul următor:
(setq ss (ssget (list (cons 410 (getvar "ctab")))))
Argumente 
gripset 
AutoCAD nu oferă suport pentru grip-uri pentru obiecte neselectate, deci acest argument
este ignorat. Totuşi, dacă argumentul gripset este nil şi nu este furnizat argumentul
pickset, funcţia sssetfirst inactivează grip-urile active şi le activează pentru mulţimea de
selecţie anterioară
pickset 
Mulţimea de selecţia care va fi selectată
Valoare returnată 
Funcţia returnează mulţimea de selecţie sau setările specificate.
Exemple 
În primul rând desenaţi un pătrat şi construiţi trei mulţimi de selecţie. Începeţi prin a desena
prima latură şi creaţi o mulţime de selecţie care include linia desenată.
Command: (entmake (list (cons 0 "line") '(10 0.0 0.0 0.0)'(11 0.0 10.0 0.0)))
((0 . "line") (10 0.0 0.0 0.0) (11 0.0 10.0 0.0))

1
entitate
2
punctele particulare ale obiectului care la selectarea acestuia sunt marcate cu un pătrăţel albastru
3
codul de grup DXF este 69

266
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA MULŢIMILOR DE SELECŢIE
Command: (setq pickset1 (ssget "_l"))
<Selection set: a5>
Mulţimea de selecţie creată este atribuită variabilei pickset1.
Desenaţi latura a doua şi adăugaţi-o în mulţimea de selecţie pickset1:
Command: (entmake (list (cons 0 "line") '(10 0.0 10.0 0.0)'(11 10.0 10.0 0.0)))
((0 . "line") (10 0.0 10.0 0.0) (11 10.0 10.0 0.0))
Command: (ssadd (entlast) pickset1)
<Selection set: a5>
Creaţi o altă mulţime de selecţie care să includă doar latura 2:
Command: (setq 2onlyset (ssget "_l"))
<Selection set: a8>
Desenaţi latura a treia şi adăugaţi-o mulţimii de selecţie pickset1:
Command: (entmake (list (cons 0 "line") '(10 10.0 10.0 0.0)'(11 10.0 0.0 0.0)))
((0 . "line") (10 10.0 10.0 0.0) (11 10.0 0.0 0.0))
Command: (ssadd (entlast) pickset1)
<Selection set: a5>
Creaţi o nouă mulţime de selecţie şi includeţi latura a treia în aceasta:
Command: (setq pickset2 (ssget "_l"))
<Selection set: ab>
Variabila pickset2 are atribuită o nouă mulţime de selecţie.
Desenaţi latura 4 şi adăugaţi-o mulţimilor de selecţie pickset1 şi pickset2:
Command: (entmake (list (cons 0 "line") '(10 10.0 0.0 0.0)'(11 0.0 0.0 0.0)))
((0 . "line") (10 10.0 0.0 0.0) (11 0.0 0.0 0.0))
Command: (ssadd (entlast) pickset1)
<Selection set: a5>
Command: (ssadd (entlast) pickset2)
<Selection set: ab>
În acest punct mulţimea de selecţie pickset1 conţine laturile 1-4, mulţimea de selecţie
pickset2 conţine laturile 3 şi 4 şi mulţimea de selecţie 2onlyset conţine doar latura 2.
Activaţi grip-urile şi selectaţi toate obiectele din mulţimea de selecţie pickset1:
Command: (sssetfirst nil pickset1)
(nil <Selection set: a5>)
Activaţi grip-urile şi selectaţi toate obiectele din mulţimea de selecţie pickset2:
Command: (sssetfirst nil pickset2)
(nil <Selection set: ab>)
Activaţi grip-urile şi selectaţi toate obiectele din mulţimea de selecţie 2onlyset:
Command: (sssetfirst nil 2onlyset)
(nil <Selection set: a8>)
Fiecare apel al funcţiei sssetfirst înlocuieşte mulţimea de selecţie setată cu aceea de la apelul
anterior al funcţiei.
Observaţie: Nu apelaţi funcţia sssetfirst când AutoCAD este în cursul execuţiei unei
comenzi.
Funcţii  similare 

267
PROIECTARE ASISTATĂ DE COMPUTER
Funcţiile ssget şi ssgetfirst.

ssdel
Descriere 
Şterge un obiect dintr-o mulţime de selecţie.
  Apelare 
(ssdel ename ss)
Argumente 
ename 
Un nume de entitate
ss 
O mulţime de selecţie
Valoare returnată 
Funcţia returnează numele mulţimii de selecţie; dacă entitatea specificată nu se află în
mulţimea de selecţie se returnează nil.
Reţineţi că această entitate este ştearsă din mulţimea de selecţie actuală, spre deosebire de o
mulţime de selecţie nouă care nu va conţine această entitate.
Exemple 
În următoarele exemple variabila e1 conţine numele unei entităţi care face parte dintr-o
mulţime de selecţie ss, în timp ce entitatea al cărui nume este atribuit variabilei e3 nu face
parte din mulţimea de selecţie ss:
Command: (ssdel e1 ss)
<Selection set: 2>
Mulţimea de selecţie ss este returnată cu entitatea e1 eliminată.
Command: (ssdel e3 ss)
nil
Funcţia returnează nil deoarece e3 nu face parte din mulţimea de selecţie ss.

ssget
Descriere 
Creează o mulţime de selecţie pentru obiectele selectate.
  Apelare 
(ssget [sel-method] [pt1 [pt2]]
[pt-list] [filter-list])
Mulţimile de selecţie pot conţine obiecte din spaţiul paper şi din spaţiul model, dar când
mulţimea de selecţie este folosită într-o operaţie, funcţia ssget filtrează şi elimină obiectele
conţinute în spaţiul care nu este curent activ. Mulţimea de selecţie returnată de funcţia ssget
conţine doar entităţi primare1.
Argumente 
1
nu atribute sau vertex-uri ale poliliniilor

268
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA MULŢIMILOR DE SELECŢIE
sel‐method 
Un şir de caractere care specifică metoda de selecţie a obiectelor. Metodele de selecţie1
valide sunt:
C – Selecţie Crossing.
CP – Selecţie Cpolygon2.
F – Selecţie Fence.
I – Selecţie Implied3.
L – Ultimul obiect vizibil este adăugat la baza de date.
P – Selecţie a ultimei mulţimi de selecţie create.
W – Selecţie Window.
WP – Selecţie Wpolygon.4
X – Toată baza de date. Dacă specificaţi metoda de selecţie X şi nu furnizaţi argumentul
filter-list funcţia ssget selectează toate entităţile din baza de date, inclusiv entităţi care
sunt în straturi de desenare închise, îngheţate sau care nu sunt vizibile pe ecran.
:E – Orice obiect specificaţi cu cursorul grafic în modul pickbox.
:N – Apelează funcţia ssnamex pentru informaţii adiţionale din block-urile container şi
matricele de transformare pentru entităţile selectate în timpul operaţiei ssget. Aceste
informaţii adiţionale sunt disponibile doar pentru entităţile selectate prin intermediul
metodelor de selecţie ca Window, Crossing şi point pick.
Spre deosebire de metodele de selecţie a obiectelor :N poate returna entităţi multiple cu
acelaşi nume de entitate în mulţimea de selecţie. De exemplu, dacă utilizatorul selectează o
subentitate a unei entităţi complexe ca BlockReference, PolygonMesh sau o polilinie stil
vechi, funcţia ssget verifică dacă subentitatea selectată nu a fost selectată deja anterior.
Totuşi, funcţia ssget, în mod curent, adaugă entităţi primare5 la mulţimea de selecţie6.
:S – Permite selectarea unei singure entităţi.
:U – Activează modul de selectare a subentităţilor. Nu poate fi combinat cu modul de
selecţie Duplicate (“:D”) sau Nested (“:N”). În acest mod entităţile de nivel ridicat sunt
selectate în mod implicit, dar utilizatorul poate încerca selectarea subentităţilor prin
apăsarea tastei CTRL când se face selecţia. Această opţiune este acceptată doar împreună
cu selecţii interactive, ca window, crossing şi polygon. Ea nu este acceptată pentru modul
de selecţie all, filtered sau group.
:V – Forţează selectarea subentităţilor. Selectează subentităţile prin toate modurile de
selecţie grafice interactive folosite de utilizator. Mulţimea de selecţie returnată conţine
doar subentităţile. Această opţiune nu poate fi combinată cu modul de selecţie Duplicate
(“:D”) sau Nested (“:N”). Această opţiune suportă doar modurile interactive de selecţie ca
window sau crossing. Nu este acceptat modul de selecţie pentru all, filtered sau group.
pt1 
Un punct relativ la selecţie
pt2 
Un punct relativ la selecţie
pt‐list 
O listă de puncte
filter‐list 

1
metodele de selecţie enumerate în continuare se regăsesc în AutoCAD sau sunt explicate
2
toate obiectele care intersectează sau se găsesc în interiorul poligonului specificat
3
obiectele selectate când PICKFIRST este activ
4
toate obiectele care sunt incluse în poligonul specificat
5
BlockReference, PolyMesh, ş.a.m.d.
6
fiecare având informaţii despre diferite subentităţi pentru raportul funcţiei ssnamex

269
PROIECTARE ASISTATĂ DE COMPUTER
O listă de asociere care specifică proprietăţile obiectelor. Obiectele care se potrivesc
argumentului filter-list sunt adăugate la mulţimea de selecţie
Dacă omiteţi toate argumentele, funcţia ssget afişează prompt-ul Select Object, permiţând
construirea interactivă a mulţimii de selecţie.
Dacă furnizaţi un punct, dar nu specificaţi o metodă de selecţie, AutoCAD aşteaptă ca
utilizatorul să selecteze un obiect prin indicarea unui singur punct.
Valoare returnată 
Funcţia returnează numele mulţimii de selecţie dacă aceasta a fost creată cu succes; dacă nu
au fost obiecte selectate funcţia returnează nil.
Note pentru Metode de creare a mulţimilor de selecţie.
ƒ Când folosiţi metoda de selecţie :N, dacă utilizatorul selectează o subentitate a unei
entităţi complexe ca BlockReference, PolygonMesh sau o polilinie de stil vechi, funcţia
ssget verifică dacă subentitatea care este selectată nu a fost deja selectată anterior. Totuşi,
funcţia ssget, în mod curent, adaugă entităţi primare1 la mulţimea de selecţie2. Deoarece
metoda de selecţie :N nu garantează că fiecare element din mulţimea de selecţie este unic,
codul care necesită unicitatea câmpurilor nu trebuie să folosească această opţiune pentru
crearea mulţimilor de selecţie.
ƒ Când folosiţi metoda de selecţie L în mediul MDI, nu puteţi fi siguri întotdeauna că
ultimul obiect desenat rămâne vizibil. De exemplu, dacă aplicaţia dumneavoastră
desenează o linie şi utilizatorul minimizează sau cascadează ferestrele AutoCAD linia
poate să nu mai fie vizibilă. În acest caz, aplicarea funcţiei ssget cu opţiunea L va returna
nil.
Exemple 
Solicită utilizatorului selectarea obiectelor care vor fi adăugate mulţimii de selecţie:
Command: (ssget)
<Selection set: 2>
Creează o mulţime de selecţie care conţine obiectul aflat în punctul (2,2):
Command: (ssget '(2 2))
nil
Creează o mulţime de selecţie cu cel mai recent obiect selectat:
Command: (ssget "_P")
<Selection set: 4>
Creează o mulţime de selecţie care conţine obiectele intersectate de dreptunghiul determinat
de punctele (0,0) şi (1,1):
Command: (ssget "_C" '(0 0) '(1 1))
<Selection set: b>
Creează o mulţime de selecţie care conţine obiectele cuprinse în fereastra determinată de
punctele (0,0) şi (5,5):
Command: (ssget "_W" '(0 0) '(5 5))
<Selection set: d>
Prin specificarea filtrelor puteţi obţine o mulţime de selecţie care conţine obiectele de un
anumit tip sau dintr-un anumit strat de desenare sau de o anumită culoare. Exemplul următor

1
BlockReference, PolyMesh, ş.a.m.d.
2
fiecare având informaţii despre diferite subentităţi pentru raportul funcţiei ssnamex

270
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA MULŢIMILOR DE SELECŢIE
returnează o mulţime de selecţie care conţine doar liniile albastre:
Command: (ssget "_I" '((0 . "LINE") (62 . 5)))
<Selection set: 4>
Exemplele următoare ale funcţiei ssget necesită o listă de puncte listp care să îi fie transmise
funcţiei. Variabila listă pt nu poate conţine puncte care să definească segmente de lungime 0.
Creează o listă de puncte:
Command: (setq pt_list '((1 1)(3 1)(5 2)(2 4)))
((1 1) (3 1) (5 2) (2 4))
Creează o mulţime de selecţie care conţine toate obiectele care intersectează sau se găsesc în
interiorul poligonului definit de lista pt_list.
Command: (ssget "_CP" pt_list)
<Selection set: 13>
Creează o mulţime de selecţie care conţine toate liniile albastre conţinute în interiorul
poligonului definit de lista pt_list
Command: (ssget "_WP" pt_list '((0 . "LINE") (62 . 5)))
<Selection set: 8>
Obiectele selectate sunt marcate cu linie întreruptă numai când funcţia ssget este folosită fără
argumente. Mulţimea de selecţie consumă din sloturile temporare ale AutoCAD pentru fişiere,
deci AutoLISP nu poate avea mai mult de 128 de mulţimi de selecţie la un moment de timp.
Dacă această limită este depăşită AutoCAD nu poate crea mai multe mulţimi de selecţie şi
returnează nil pentru toate apelurile ssget. Pentru a închide toate mulţimile de selecţie
nenecesare trebuie să le setaţi la valoarea nil.
O mulţime de selecţie poate fi trimisă AutoCAD ca răspuns la orice cerere de a selecta obiecte
cât timp selecţia cu Last este validă. AutoCAD va selecta toate obiectele din mulţimea de
selecţie.
Setările curente pentru modul Object Snap sunt ignorate de funcţia ssget dacă nu aveţi o
cerere specială în această funcţie.
Funcţii  similare 
Vedeţi string. Selection Set Handling şi Selection Set Filter Lists în AutoLISP
Developer's Guide

ssgetfirst
Descriere 
Determină care obiect1 este selectat şi are grip-urile active.
  Apelare 
(ssgetfirst)
Funcţia returnează o listă cu două mulţimi de selecţie similare cu cele furnizate funcţiei
sssetfirst. Primul element din listă este întotdeauna nil deoarece AutoCAD nu permite grip-
uri pentru elemente neselectate. Al doilea element este o mulţime de selecţie care este
selectată şi cu grip-uri active. Ambele elemente din listă pot să fie nil.
Observaţie: Pot fi analizate de această funcţie doar entităţile din spaţiul model curent de
desenare şi spaţiul paper, şi nu entităţi nongrafice sau entităţi aflate în definiţii de block-uri.

1
entitate

271
PROIECTARE ASISTATĂ DE COMPUTER
Funcţii  similare 
Funcţiile ssget şi sssetfirst.

sslength
Descriere 
Returnează un număr întreg care reprezintă numărul de obiecte1 din mulţimea de selecţie.
  Apelare 
(sslenght ss)
Argumente 
ss 
O mulţime de selecţie
Valoare returnată 
Un număr întreg.
Exemple 
Adăugaţi ultimul obiect la o mulţime de selecţie nouă:
Command: (setq sset (ssget "L"))
<Selection set: 8>
Folosiţi funcţia sslength pentru a determina numărul obiectelor din noua mulţime de selecţie:
Command: (sslength sset)
1

ssmemb
Descriere 
Testează dacă un obiect2 este membru al unei mulţimi de selecţie.
  Apelare 
(ssmemb ename ss)
Argumente 
ename 
Un nume de entitate
ss 
O mulţime de selecţie
Valoare returnată 
Funcţia returnează numele entităţii dacă numele de entitate specificat de argumentul ename
aparţine mulţimii de selecţie ss. Dacă ename nu este membru funcţia ssmemb returnează
nil.
Exemple 

1
entităţi
2
entitate

272
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA MULŢIMILOR DE SELECŢIE
În exemplul următor entitatea al cărei nume este atribuit variabilei e2 face parte din mulţimea
de selecţie ss, în timp ce e1 nu este membră a acestei mulţimi de selecţie:
Command: (ssmemb e2 ss)
<Entity name: 1d62d68>
Command: (ssmemb e1 ss)
nil

ssname
Descriere 
Returnează numele obiectului1 indexat dintr-o mulţime de selecţie.
  Apelare 
(ssname ss index)
Numele entităţilor din mulţimea de selecţie obţinute cu funcţia ssget sunt întotdeauna nume de
entităţi primare. Subentităţile2 nu sunt returnate3.
Argumente 
ss 
O mulţime de selecţie
index 
Un număr întreg sau număr real care indică un element din mulţimea de selecţie. Primul
element în mulţimea de selecţie are index 0. Pentru a accesa entităţi din mulţimea de
selecţie cu index mai mare decât numărul 32767 trebuie să furnizaţi argumentul index ca
număr real
Valoare returnată 
Funcţia returnează un nume de entitate dacă apelul se desfăşoară cu succes. Dacă argumentul
index este negativ sau mai mare decât numărul de entităţi din mulţimea de selecţie funcţia
ssname returnează nil.
Exemple 
Caută numele primei entităţi din mulţimea de selecţie:
Command: (setq ent1 (ssname ss 0))
<Entity name: 1d62d68>
Caută numele celei de-a patra entităţi din mulţimea de selecţie:
Command: (setq ent4 (ssname ss 3))
<Entity name: 1d62d90>
Pentru a accesa entităţile cu index mai mare decât numărul 32767 din mulţimea de selecţie
trebuie să furnizaţi argumentul index ca număr real ca în exemplul următor:
(setq entx (ssname sset 50843.0))
Funcţii  similare 
Funcţia entnext.

1
entităţii
2
atribute şi vertex-uri ale poliliniilor
3
funcţia entnext permite accesul la acestea

273
PROIECTARE ASISTATĂ DE COMPUTER

ssnamex
Descriere 
Returnează informaţiile despre modul de creare a unei mulţimi de selecţie.
  Apelare 
(ssnamex ss [index])
Argumente 
ss 
O mulţime de selecţie
index 
Un număr întreg, sau număr real, care indică un element din mulţimea de selecţie. Primul
element în mulţimea de selecţie are index 0
Valoare returnată 
Dacă operaţia se desfăşoară cu succes atunci funcţia ssnamex returnează numele entităţii
indicată ca argument index împreună cu datele care descriu cum a fost selectată entitatea.
Dacă argumentul index nu este indicat această funcţie returnează o listă care conţine numele
entităţilor din mulţimea de selecţie împreună cu datele care descriu cum a fost selectată fiecare
entitate. Dacă argumentul index este negativ sau mai mare decât numărul de entităţi din
mulţimea de selecţie funcţia ssnamex returnează nil.
Datele returnate de funcţia ssnamex sunt de forma unei liste care conţine listele cu informaţii
care descriu fiecare entitate şi metoda de selectare a ei sau poligonul folosit pentru selectarea
uneia sau mai multor entităţi. Fiecare sublistă care descrie metoda de selecţie a unei entităţi
este compusă din trei părţi: metoda de selecţie ID, numele entităţii selectate şi datele specifice
care descriu metoda folosită pentru selectarea entităţii.
((sel_id1 ename1 (data))(sel_id2ename2 (data)) ... )
Lista ID-urilor metodelor de selecţie sunt prezentate în tabelul următor:
ID metodă selecţie

ID Descriere

0 Nespecific1
1 Pick
2 Window sau WPolygon
3 Crossing sau CPolygon
4 Fence
Fiecare sublistă care descrie un poligon şi este folosită în timpul selecţiei entităţii ia formează
un poligon urmând descrierea punctelor după un ID2.
(polygon_idpoint_description_1point_description_n... )
Numerele punctelor ID care descriu poligonul încep cu -1 şi fiecare punct3 este incrementat cu
-1. În funcţie de locaţia de vizualizare un punct este reprezentat de una din următoarele: o linie
1
Last, All
2
un număr întreg <0
3
vârf al poligonului

274
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA MULŢIMILOR DE SELECŢIE
infinită, o linie ray, sau un segment de linie. Descriptorul unui punct cuprinde trei părţi: un
descriptor ID al punctului, punctul de start al elementului şi, opţional, un vector unitate care
descrie direcţia în care o linie infinită îl traversează, sau un vector care descrie ofset-ul unei
alte laturi a liniei segment.
(point_descriptor_idbase_point[unit_or_offset_vector])
Lista ID-urilor descriptorilor unui punct valid sunt prezentate în tabelul următor:
ID descriptor punct

ID Descriere

0 Linie infinită
1 Ray
2 Segment de linie
1
Când punctul de vedere este diferit de punctul de coordonate 0,0,1 este returnat
unit_or_offset_vector.
Exemple 
Data asociată cu punctul de selecţie2 a entităţii conşine descrierea unui singur punct. De
exemplu codul următor este returnat pentru selecţia unei entităţi selectate în punctul de
coordonate 1,1 în planul de vedere al sistemului de coordonate WCS:
Command: (ssnamex ss3 0)
((1 <Entity name: 1d62da0> 0 (0 (1.0 1.0 0.0))))
Data asociată cu o entitate selectată cu metoda Window, WPolygon, Crossing, sau
CPolygon conţine ID-ul poligonului care a selectat entitatea.
Este sarcina aplicaţiei să asocieze identificatoarele poligoanelor de selecţie ţi să facă asociarea
între poligon şi entităţile selectate. De exemplu codul următor returnează entitatea selectată
prin modul de selecţie Crossing3:
Command: (ssnamex ss4 0)
((3 <Entity name: 1d62d60> 0 -1) (-1 (0 (-1.80879 8.85536 0.0)) (0 (13.4004 8.85536
0.0)) (0 (13.4004 1.80024 0.0)) (0 (-1.80879 1.80024 0.0))))
Data asociată cu poligonul de selecţie este o listă a punctelor şi descriptorilor pentru punctele
de intersecţie dintre poligon şi entităţile selectate. De exemplu comenzile următoare
returnează informaţii despre o linie verticală vecină intersectată de trei ori de poligonul de
selecţie:
Command: (ssnamex ss5 0)
((4 <Entity name: 1d62d88> 0 (0 (5.28135 6.25219 0.0) ) (0 (5.61868 2.81961 0.0) )
(0 (5.52688 3.75381 0.0) ) ) )

sssetfirst
Descriere 

1
punctul din care se vizualizează/priveşte desenul
2
pick point
3
reţineţi că ID-ul poligonului este -1

275
PROIECTARE ASISTATĂ DE COMPUTER
Setează care obiecte sunt selectate şi au grip-urile active.
  Apelare 
(sssetfirst gripset[pickset])
Dacă argumentul gripset este ignorat selecţia mulţimii de obiecte specificate de
argumentul pickset sunt selectate şi cu gripuri active.
Sunteţi responsabili pentru crearea unor mulţimi de selecţie valide. De exemplu, trebuie să
verificaţi dacă background-ul spaţiului de desenare din veiwport-ul curent1 nu este inclus în
mulţimea de selecţie. Puteţi avea nevoie, de asemenea, să selectaţi obiectele din startul de
desenare curent, ca în codul următor:
(setq ss (ssget (list (cons 410 (getvar "ctab")))))
Argumente 
gripset 
AutoCAD nu furnizează suport pentru gripuri active la obiecte neselectate, deci acest
argument este ignorat. Totuşi, dacă argumentul gripset este nil şi argumentul pickset nu
este furnizat, funcţia sssetfirst dezactivează modul de lucru grip curent şi activează
selecţia precedentă.
pickset 
Mulţimea de selecţie care va fi selectată.
Valoare returnată 
Funcţia returnează mulţimea de selecţie sau setările specificate.
Exemple 
În primul rând desenaţi un pătrat şi construiţi trei mulţimi de selecţie. Începeţi prin desenarea
laturii 1 şi creaţi o mulţime de selecţie care să includă linia desenată:
Command: (entmake (list (cons 0 "line") '(10 0.0 0.0 0.0)'(11 0.0 10.0 0.0)))
((0 . "line") (10 0.0 0.0 0.0) (11 0.0 10.0 0.0))
Command: (setq pickset1 (ssget "_l"))
<Selection set: a5>
Mulţimea de selecţie creată îi este atribuită variabilei pickset1.
Desenaţi latura 2 şi adăugaţi-o la mulţimea de selecţie pickset1:
Command: (entmake (list (cons 0 "line") '(10 0.0 10.0 0.0)'(11 10.0 10.0 0.0)))
((0 . "line") (10 0.0 10.0 0.0) (11 10.0 10.0 0.0))
Command: (ssadd (entlast) pickset1)
<Selection set: a5>
Creaţi o altă mulţime de selecţie care să includă doar latura 2:
Command: (setq 2onlyset (ssget "_l"))
<Selection set: a8>
Desewnaţi latura 3 şi adăugaţi-o la mulţimea de selecţie pickset1:
Command: (entmake (list (cons 0 "line") '(10 10.0 10.0 0.0)'(11 10.0 0.0 0.0)))
((0 . "line") (10 10.0 10.0 0.0) (11 10.0 0.0 0.0))
Command: (ssadd (entlast) pickset1)
<Selection set: a5>

1
codul de grup DXF este 69

276
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULAREA MULŢIMILOR DE SELECŢIE
Creaţi o alţă mulţime deselecţie şi includeţi latura 3 în ea:
Command: (setq pickset2 (ssget "_l"))
<Selection set: ab>
Variabila pickset2 are atribuită ca valoare noua mulţime de selecţie:
Desenaţi latura 4 şi adăugaţi-o mulţimilor de selecţie pickset1 şi pickset2:
Command: (entmake (list (cons 0 "line") '(10 10.0 0.0 0.0)'(11 0.0 0.0 0.0)))
((0 . "line") (10 10.0 0.0 0.0) (11 0.0 0.0 0.0))
Command: (ssadd (entlast) pickset1)
<Selection set: a5>
Command: (ssadd (entlast) pickset2)
<Selection set: ab>
În acest punct mulţimea de selecţie pickset1 conţine laturile 1-4, mulţimea de selecţie
pickset2 conţine laturile 3 şi 4 şi mulţimea de selecţie 2onlyset conţine doar latura 2.
Activaţi manipularea cu grip-uri şi selectaţi toate obiectele din mulţimea de selecţie pickset1:
Command: (sssetfirst nil pickset1)
(nil <Selection set: a5>)
Activaţi manipularea cu grip-uri şi selectaţi toate obiectele din mulţimea de selecţie pickset2:
Command: (sssetfirst nil pickset2)
(nil <Selection set: ab>)
Activaţi manipularea cu grip-uri şi selectaţi toate obiectele din mulţimea de selecţie
2onlyset:
Command: (sssetfirst nil 2onlyset)
(nil <Selection set: a8>)
Fiecare apel al funcţiei sssetfirst înlocuieşte grip-urile şi mulţimea de selecţie din apelul
anterior al funcţiei sssetfirst.
Observaţie: Nu apelaţi funcţia ssetfirst când AutoCAD este în mijlocul execuţiei unei
comenzi.
Funcţii  similare 
Funcţiile ssget şi ssgetfirst.

7.3.4. Manipularea Tabelelor de simboluri şi a Dicţionarelor

Nume funcţie Descriere


( dictadd ename symbol newobj)
dictadd
adaugă obiecte nongrafice la un dicţionar specificat
( dictnext ename symbol [rewind])
dictnext
caută următorul element într-un dicţionar
( dictremove ename symbol)
dictremove
elimină un element dintr-un dicţionar specificat
( dictrename ename oldsym newsym)
dictrename
redenumeşte un element dintr-un dicţionar
dictsearch ( dictsearch ename symbol [setnext])

277
PROIECTARE ASISTATĂ DE COMPUTER
caută un element într-un dicţionar
( layoutlist)
layoutlist returnează lista tuturor straturilor de desenare din spaţiul hârtie din
desenul curent
( namedobjdict)
namedobjdict returnează numele de entitate al dicţionarului desenului curent,
dacă acesta conţine pentru toate obiectele nongrafice din desen
( setview view_description [vport_id])
setview
stabileşte un punct de vedere pentru un viewport specificat
( snvalid sym_name)
snvalid
verifică un tabel de simboluri pentru caractere valide
( tblnext table-name [rewind])
tblnext
caută elementul următor într-un tabel de simboluri
( tblobjname table-name symbol)
tblobjname returnează numele de entitate al unui element dintr-un tabel de
simboluri
( tblsearch table-name symbol [setnext])
tblsearch
caută numele unui simbol într-un tabel de simboluri
( vlax-ldata-get dictkey [default-data])
vlax-ldata-get
obţine datele LISP pentru un dicţionar desen sau pentru un obiect
( vlax-ldata-list dict)
vlax-ldata-list
afişează datele LISP dintr-un dicţionar de desenare
( vlax-ldata-put dictkeydata)
vlax-ldata-put memorează date LISP într-un dicţionar de desenare sau într-un
obiect
( vlax-ldata-test data)
vlax-ldata-test
determină dacă datele pot fi salvate într-o sesiune limită

dictadd
Descriere 
Adaugă obiecte nongrafice la un dicţionar specificat.
  Apelare 
(dictadd ename symbol newobj)
Argumente 
ename 
Numele obiectului dicţionar la care se face adăugarea
symbol 
Numele elementului care a fost adăugat la dicţionar; argumentul symbol trebuie să aibă un
nume unic care nu există deja în dicţionar
newobj 
Un obiect nongrafic care va fi adăugat la dicţionar
Ca regulă generală fiecare obiect adăugat la dicţionar trebuie să fie unic în dicţionar. Aceasta
este o problemă specifică când adăugaţi grupuri de obiecte la grupuri de dicţionare. Adăugarea

278
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULARE TABELEL DE SIMBOLURI ŞI DICŢIONARE
unui grup de obiecte
Valoare returnată 
Funcţia returnează.
Exemple 
Exemplele care urmează crează obiecte şi le adaugă dicţionarului specificat prin nume.
Crează o listă de intrare în dicţionar:
Command: (setq dictionary (list '(0 . "DICTIONARY") '(100 . "AcDbDictionary")))
((0 . "DICTIONARY") (100 . "AcDbDictionary"))
Crează un obiect dicţionar folosind funcţia entmakex:
Command: (setq xname (entmakex dictionary))
<Entity name: 1d98950>
Adaugă dicţionarul obiectului dicţionar specificat prin nume:
Command: (setq newdict (dictadd (namedobjdict) "MY_WAY_COOL_DICTIONARY"
xname))
<Entity name: 1d98950>
Crează o listă Xrecord:
Command: (setq datalist (append (list '(0 . "XRECORD")'(100 . "AcDbXrecord")) '((1 .
"This is my data") (10 1. 2. 3.) (70 . 33))))
((0 . "XRECORD") (100 . "AcDbXrecord") (1 . "This is my data") (10 1.0 2.0 3.0) (70 .
33))
crează un obiect Xrecord:
Command: (setq xname (entmakex datalist))
<Entity name: 1d98958>
Aaugă obiectul Xrecord la dicţionar:
Command: (dictadd newdict "DATA_RECORD_1" xname)
<Entity name: 1d98958>
Funcţii  similare 
Funcţiile dictnext, dictremove, dictrename, dictsearch şi namedobjdict.

dictnext
Descriere 
Caută următorul element într-un dicţionar.
  Apelare 
(dictnext ename [rewind])
Argumente 
ename 
Numele dicţionarului care va fi vizualizat
rewind 
Dacă acest argument este prezent şi nu este nil atunci dicţionarul este repoziţionat la

279
PROIECTARE ASISTATĂ DE COMPUTER
început şi este furnizat primul element1
Valoare returnată 
Funcţia returnează următoarea intrare în dicţionarul specificat; cînd se ajunge la sfârşitul
dicţionarului se returnează nil. Elementul din dicţionar este returnat ca o listă cu punct de tipul
codurilor şi valorilor DXF. Elementele şterse din dicţionar nu sunt returnate.
Exemple 
În exemplul următor, pentru funcţia dictadd, creaţi un dicţionar şi adăugaţi o intrare în
dicţionar. După acesta creaţi un alt obiect Xrecord:
Command: (setq xname (entmakex datalist))
<Entity name: 1b62d60>
Adăugaţi acest obiect Xrecord la dicţionar, ca a doua înregistrare a dicţionarului:
Command: (dictadd newdict "DATA_RECORD_2" xname)
<Entity name: 1b62d60>
Returnează numele de entitate pentru următorul element din dicţionar:
Command: (cdr (car (dictnext newdict)))
<Entity name: 1bac958>
dictnext returnează numele primei entităţi adăugate la dicţionar.
Returnează numele de entitate pentru următorul element din dicţionar:
Command: (cdr (car (dictnext newdict)))
<Entity name: 1bac960>
dictnext returnează numele celei de-a doua entităţi adăugate la dicţionar.
Returnează numele de entitate pentru următorul element din dicţionar:
Command: (cdr (car (dictnext newdict)))
nil
Nu mai sunt intrări în dicţionar, deci funcţia dicnext returnează nil.
Reveniţi la prima intrare în dicţionar şi numele de entitate pentru această intrare:
Command: (cdr (car (dictnext newdict T)))
<Entity name: 1bac958>
Specificând T pentru argumentul rewind determină ca funcţia dicnext să returneze prima
intrare în dicţionar.
Funcţii  similare 
Funcţia dictadd, dictremove, dictrename, dictsearch, şi namedobjdict.

dictremove
Descriere 
Elimină un element dintr-un dicţionar specificat.
  Apelare 
(dictremove ename symbol)
Implicit eliminarea unei intrări în dicţionar nu o şterge şi din baza de date. Aceasta trebuie
făcută prin apelarea funcţiei entdel. În mod curent excepţiile de la această regulă sunt
1
prima intrare

280
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULARE TABELEL DE SIMBOLURI ŞI DICŢIONARE
grupurile şi mlinestyles. Codul care implementează această facilitate necesită ca baza de date
şi dicţionarul să fie permanent actualizate cu datele, deci, în consecinţă, ştergerea entităţilor
trebuie să se facă automat atunci când sunt eliminate1 din dicţionar.
Argumente 
ename 
Numele dicţionarului care va fi modificat
symbol 
Intrarea care va fi eliminată din dicţionarul specificat prin argumentul ename
Funcţia dictremove nu permite eliminarea unui element mlinestyle din dicţionarul mlinestyle
dacă există o referinţă activă la mline în baza de date.
Valoare returnată 
Funcţia returnează numele entităţii a cărei intrare a fost eliminată. Funcţia dictremove
returnează nil dacă argumentul ename este invalid sau argumentul symbol nu este furnizat.
Exemple 
Exemplul următor elimină dicţionarul creat în exemplul funcţiei dictadd:
Command: (dictremove (namedobjdict) "my_way_cool_dictionary")
<Entity name: 1d98950>
Funcţii  similare 
Funcţiile dictadd, dictnext, dictrename, dictsearch, şi namedobjdict.

dictrename
Descriere 
Redenumeşte un element dintr-un dicţionar.
  Apelare 
(dictrename ename oldsym newsym)
Argumente 
ename 
Numele dicţionarului care trebuie modificat
oldsym 
Numele intrării2 originale în dicţionar
newsym 
Noul nume pentru această intrare în dicţionar
Valoare returnată 
Funcţia returnează valoarea rgumentului newstyle dacă redenumirea se efectuează cu succes.
Dacă argumentul oldname nu este prezent în dicţionar sau dacă argumentele ename sau
newname sunt invalide sau argumentul newname este deja prezent în dicţionar, atuncţi
funcţia dictrename returnează nil.
Exemple 
Exemplul următor redenumeşte dicţionarul creat în exemplul funcţiei dictadd:
1
apelând funcţia dictremove
2
elementului

281
PROIECTARE ASISTATĂ DE COMPUTER
Command: (dictrename (namedobjdict) "my_way_cool_dictionary" "An even cooler
dictionary")
"An even cooler dictionary"
Funcţii  similare 
Funcţiile dictadd, dictnext, dictremove, dictsearch, şi namedobjdict.

dictsearch
Descriere 
Caută un element într-un dicţionar.
  Apelare 
(dictsearch ename symbol [setnext])
Argumente 
ename 
Numele dicţionarului în care se va căuta
symbol 
Un şir de caractere care specifică numele elementului care va fi căutat în dicţionar
setnext 
Dacă este prezent şi nu este nil, contorul funcţiei dictnext este ajustat astfel ca următorul
apel al funcţiei dictnext să returneze intrarea în dicţionar după aceea care a fost returnată
de acest apel al funcţiei dictsearch
Valoare returnată 
Funcţia returnează intrarea elementului specificat dacă apelul se efectuează cu succes; altfel
nil, dacă nu este găsită nici o intrare.
Exemple 
Exemplul următor ilustrează folosirea funcţiei dictsearch pentru a căuta dicţionarul
manipulat cu funcţia dictadd:
Command: (setq newdictlist (dictsearch (namedobjdict) "my_way_cool_dictionary"))
((-1 . <Entity name: 1d98950>) (0 . "DICTIONARY") (5 . "52") (102 .
"{ACAD_REACTORS") (330 . <Entity name: 1d98860>) (102 . "}") (330 . <Entity
name: 1d98860>) (100 . "AcDbDictionary") (280 . 0) (281 . 1) (3 .
"DATA_RECORD_1") (350 . <Entity name: 1d98958>))
Funcţii  similare 
Funcţiile dictadd, dictnext, dictremove şi namedobjdict.

layoutlist
Descriere 
Returnează lista tuturor straturilor de desenare din spaţiul hârtie din desenul curent.
  Apelare 
(layoutlist)
Valoare returnată 

282
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULARE TABELEL DE SIMBOLURI ŞI DICŢIONARE
Funcţia returnează o listă de şiruri de caractere.
Exemple 
Command: (layoutlist)
("Layout1" "Layout2")

namedobjdict
Descriere 
Returnează numele de entitate al dicţionarului desenului curent, dacă acesta conţine pentru
toate obiectele nongrafice din desen.
  Apelare 
(namedobjdict)
Folosind numele returnat de această funcţie şi funcţiile de acces la dicţionar, o aplicaţie poate
accesa toate entităţile nongrafice din desen.

setview
Descriere 
Stabileşte un punct de vedere pentru un viewport specificat.
  Apelare 
(setview view_descriptor [vport_id])
Argumente 
view_descriptor 
O definiţie de entitate furnizată ca listă, similară cu cea returnată de apelul funcţiei
tblsearch aplicată tabelului de simboluri VIEW
vport_id 
Un număr întreg care identifică viewport-ul care va primi noua vedere. Dacă vport_id este
0 noua vedere o primeşte viewport-ul curent.
Puteţi obţine numărul vport_id din variabila de sistem CVPORT
Valoare returnată 
Funcţia setview returnează valoarea argumentului view_descriptor dacă apelul se efectuează
cu succes.

snvalid
Descriere 
Verifică un tabel de simboluri pentru caractere valide.
  Apelare 
(snvalid sym_name [flag])
Funcţia snvalid verifică variabila sistem ENTNAMES pentru a determina regulile impuse
desenului curent. Dacă variabila EXTNAMES are valoarea 0 atunci funcţia snvalid validează
prioritar faţă de AutoCAD folosirea simbolurilor în nume. Dacă variabila EXTNAMES are

283
PROIECTARE ASISTATĂ DE COMPUTER
valoarea 11 atunci funcţia snvalid validează folosirea simbolurilor în nume folosind regulile
AutoCAD pentru numele formate din simbolurile extinse. Nu sunt permise în numele se
simboluri, indiferent de setările variabilei de sistem EXTNAMES, următoarele:
ƒ Caracterele de control şi caracterele grafice;
ƒ Şirurile de caractere nume;
ƒ Barele verticale şi primul sau ultimul caracter din nume.
Dacă variabila de sistem ENTNAMES are valoarea 1 AutoLISP nu impune restricţii de
lungime a tabelului cu simboluri.
Argumente 
sym_name 
Un şir de caractere care specifică numele tabelului de simboluri
flag 
Un număr întreg care specifică dacă caracterele bară verticală sunt permise în nume.
Argumentul flag poate lua una din următoarele valori:
0 – nu permite apariţia caracterului bară verticală niciunde în şirul de caractere
sym_name;
1 - permite apariţia caracterului bară verticală în şirul de caractere sym_name dacă acesta
nu este primul sau ultimul caracter din nume.
Valoare returnată 
Funcţia returnează T dacă argumentul sym_name este numele unui tabel de simboluri valid;
altfel nil.
Dacă variabila de sistem are valoarea 1 sunt permise toate caracterele, cu excepţia caracterelor
de control şi caracterelor grafice prezentate în tabelul următor:
Caractere neacceptate în numele
tabelelor de simboluri
<> mai mic şi mai mare
/\ slash2 şi backslash
” ghilimele
: două puncte
? semnul întrebării
* asterisc3
| bară verticală
, virgulă
= egal
’ apostrof
; punct şi virgulă4
Numele tabelului de simboluri poate conţine spaţii.

1
valoarea implicită
2
linie de fracţie
3
înmulţire, multiplicare
4
ASCII 59

284
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULARE TABELEL DE SIMBOLURI ŞI DICŢIONARE
Dacă variabila EXTNAMES are valoarea 0 atunci numele tabelului de simboluri poate
conţine caractere alfabetice majuscule1 şi minuscule, caractere numerice2 şi caracterele dolar
$, liniuţă jos _ şi minus -.
Exemple 
Exemplul următor presupune că variabila de sistem ENTNAMES are valoarea 1:
Command: (snvalid "hocus-pocus")
T
Command: (snvalid "hocus pocus")
T
Command: (snvalid "hocus%pocus")
T
Exemplul următor presupune că variabila de sistem ENTNAMES are valoarea 0:
Command: (snvalid "hocus-pocus")
T
Command: (snvalid "hocus pocus")
nil
Command: (snvalid "hocus%pocus")
nil
Exemplul următor include caracterul bară verticală în numele tabelului de simboluri:
Command: (snvalid "hocus|pocus")
nil
Caracterul bară verticală este considerat invalid în toate numele de tabele de simboluri în mod
implicit.
În exemplul următor argumentul flag are valoarea 1, deci funcţia snvalid consideră caracterul
bară verticală ca fiind valid în argumentul sym_name atât timp cât acesta nu este primul sau
ultimul caracter din nume:
Command: (snvalid "hocus|pocus" 1)
T

tblnext
Descriere 
Caută elementul următor într-un tabel de simboluri.
  Apelare 
(tblnext table-name [rewind])
Când funcţia tblnext este folosită în mod repetat este normal ca ea să returneze de fiecare dată
următoarea intrare în tabelul specificat. Funcţia tblsearch poate seta următoarea intrare în
tabel care va fi furnizată. Dacă argumentul rewind este prezent şi nu este nil tabelul de
simboluri este reparcurs şi este furnizată prima intrare în tabel.
Argumente 

1
A-Z şi a-z
2
0-9

285
PROIECTARE ASISTATĂ DE COMPUTER
table‐name 
Un şir de caractere care identifică tabela de simboluri. Valori valide pentru argumentul
table-name sunt "LAYER", "LTYPE", "VIEW", "STYLE", "BLOCK", "UCS", "APPID",
"DIMSTYLE" şi "VPORT". Argumentul nu este case sensitive1
rewind 
Dacă acest argument este prezent şi nu este nil tabelul de simboluri este reparcurs şi este
furnizată prima intrare în tabel
Valoare returnată 
Dacă este găsită intrarea în tabelul de simboluri, funcţia returnează această intrare ca listă de
tip punct, cu cod şi valoare de tip DXF. Dacă nu mai sunt găsite intrări în tabel funcţia
returnează nil.
Exemple 
Furnizează primul strat în tabelul de simboluri:
Command: (tblnext "layer" T)
((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "CONTINUOUS"))
The return values represent the following:
(0 . "LAYER") tipul simbolului
(2 . "0") numele simbolului
(70 . 0) fanion
(62 . 7) numărul culorii, dacă e off număr negativ
(6 . "CONTINUOUS") numele tipului de linie
Reţineţi că acesta este grupul numărul -1. Ultima intrare returnată din fiecare tabel
este memorată şi următoarea după aceasta este returnată de fiecare dată când funcţia
tblnext este apelată pentru acest tabel. Când începeţi scanarea acestui tabel fiţi siguri
că furnizaţi al doilea argument nenul pentru a reparcurge tabelul şi a furniza prima
intrare.
Intrările primite dint tabelul block includ grupul -2 cu numele entităţii pentru prima
entitate2 din definiţia block-ului. De exemplu codul următor obţine informaţii despre
block-ul numit BOX:
Command: (tblnext "block")
((0 . "BLOCK") (2 . "BOX") (70 . 0) (10 9.0 2.0 0.0) (-2 . <Entity name: 1dca370>))
Valoarea returnată este următoarea:
(0 . "BLOCK") Tipul simbolului
(2 . "BOX") Numele simbolului
(70 . 0) Fanioane
(10 9.0 2.0 0.0) Originea X,Y,Z
(-2 . <Entity name: 1dca370>) Prima entitate
numele entităţii în grupul -2 este acceptată de funcţiile entget şi entnext, dar nu este
acceptată de alte funcţii ce acces la entitate. De exemplu nu puteţi folosi funcţia ssadd
pentru o adăuga la o mulţime de selecţie. Pentru a furniza funcţiei entnext numele

1
sensibil la caractere majuscule/minuscule, deci nu contează dacă folosim caractere majuscule sau
minuscule
2
dacă există vreuna

286
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULARE TABELEL DE SIMBOLURI ŞI DICŢIONARE
entităţii grupului -2 puteţi scana entităţile cuprinse în definiţia block-ului; funcţia
entnext returnează nil după ultima entitate din definiţia block-ului.
Dacă block-ului nu conţine entităţi grupul -2 returnat de funcţia tblnext este nume de
entitate dacă aceasta este o entitate de tip endblk.
Observaţie: Funcţia vports returnează tabela de informaţii pentru VPORT-ul curent;
totuşi poate fi mai simplu să folosiţi funcţia vports în opoziţie cu funcţia tblnext pentru
a obţine această informaţie.

tblobjname
Descriere 
Returnează numele de entitate al unui element dintr-un tabel de simboluri.
  Apelare 
(tblobjname table-name symbol)
Argumente 
table‐name 
Un şir de caractere care identifică tabelul de simboluri în care se va căuta
symbol 
Un şir de caractere care identifică simbolul care va fi căutat
Valoare returnată 
Funcţia returnează numele de entitate al intrării1 din tabel, dacă aceasta este găsită.
Numele de entitate returnat de funcţia tblobjname poate fi folosit de funcţia entget şi funcţia
entmod.
Exemple 
Comanda următoare caută numele de entitate al intrării de tip block “ESC-01”:
Command: (tblobjname "block" "ESC-01")
<Entity name: 1dca368>

tblsearch
Descriere 
Caută numele unui simbol într-un tabel de simboluri.
  Apelare 
(tblsearch table-name symbol [setnext])
Argumente 
table‐name 
Un şir de caractere care identifică tabelul de simboluri în care se va căuta. Acest argument
nu este sensibil la caractere majuscule/minuscule
symbol 
Un şir de caractere care identifică numele care va fi căutat. Acest argument nu este sensibil

1
elementului

287
PROIECTARE ASISTATĂ DE COMPUTER
la caractere majuscule/minuscule
setnext 
Dacă acest argument este furnizat şi nu este nil atunci contorul tblnext este setat astfel
încât următorul apel să returneze intrarea următoare după aceea furnizată de acest apel al
funcţiei tblsearch. Atlfel spus, funcţia tblsearch nu are efect asupra ordinii intrărilor
furnizate de funcţia tblnext
Valoare returnată 
Dacă funcţia tblsearch caută o intrare1 pentru numele simbolului cerut atunci funcţia
returnează această intrare în formatul descris pentru funcţia tblnext. Dacă nu este găsită nici o
intrare atunci funcţia tblsearch returnează nil.
Exemple 
Comanda următoare caută un stil de text numit “standard”:
Command: (tblsearch "style" "standard")
((0 . "STYLE") (2 . "STANDARD") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 .
0.3) (3 . "txt") (4 . ""))

vlax-ldata-get
Descriere 
Obţine datele LISP pentru un dicţionar desen sau pentru un obiect.
  Apelare 
(vlax-ldata-get dict key [default-data] [private])
Argumente 
dict 
Un obiect tip VLA, un obiect entitate desen AutoCAD sau un şir de caractere care specifică
un dicţionar global
key 
Un şir de caractere care specifică cuvântul cheie căutat în dicţionar
default‐data 
Data LISP care va fi returnată dacă nu există un cuvânt cheie identic în dicţionar
private 
Dacă pentru argumentul private este furnizată o valoare nenulă şi funcţia vlax-ldata-get
este apelată pentru spaţiul de nume separat VLX, atunci funcţia obţine date private LISP
din obiectul specificat de argumentul dict. Dacă specificaţi argumentul private trebuie să
specificaţi şi argumentul default-data; puteţi folosi valoarea nil pentru argumentul
default-data
Reţineţi că spaţiul de nume separat VLX poate memora date private şi neprivate folosind
aceleaşi argumente dict şi key. Datele private pot fi accesate doar de acelaşi VLX, dar orice
aplicaţie poate obţine date neprivate.
Valoare returnată 
Funcţia returnează valoarea argumentului key.
Exemple 

1
element

288
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULARE TABELEL DE SIMBOLURI ŞI DICŢIONARE
Introduceţi următoarele comenzi în fereastra consolă Visual LISP:
_$ (vlax-ldata-put "mydict" "mykey" "Mumbo Dumbo")
"Mumbo Dumbo"
_$ (vlax-ldata-get "mydict" "mykey")
"Mumbo Dumbo"
Pentru a testa folosirea datelor private din VLX urmaţi paşii:
1. Introduceţi următoarele comenzi în fereastra consolă Visual LISP:
_$ (vlax-ldata-put "mydict" "mykey" "Mumbo Dumbo")
"Mumbo Dumbo"
_$ (vlax-ldata-get "mydict" "mykey")
"Mumbo Dumbo"
2. Introduceţi următorul cod într-un fişier şi folosiţi Make Application pentru a construi un
VLX din acest fişier. Folosiţi modul Expert al Make Application wizard şi selectaţi opţiunea
Separate Namespace din tab-ul Compile Options.
(vl-doc-export 'ldataput)
(vl-doc-export 'ldataget)
(vl-doc-export 'ldataget-nilt)
(defun ldataput ()
(princ "This is a test of putting private ldata ")
(vlax-ldata-put "mydict" "mykey" "Mine! Mine! " T)
)
(defun ldataget ()
(vlax-ldata-get "mydict" "mykey")
)
(defun ldataget-nilt ()
(vlax-ldata-get "mydict" "mykey" nil T)
)
3. Încărcaţi fişierul VLX.
4. Rulaţi ldataput pentru a salva datele private:
_$ (ldataput)
This is a test of putting private ldata
Referitor la codul care defineşte ldataput: această funcţie memorează un şir de caractere care
conţine “Mine! Mine!”
5. Rulaţi ldataget pentru a obţine datele LISP:
_$ (ldataget)
"Mumbo Dumbo"
Reţineţi că data returnată de ldataget nu este data memorată de ldataput. Aceasta se întâmplă
deoarece ldataget nu specifică argumentul private în apelurile funcţiei vlax-data-get. Deci
data obţinută de ldataget este data setată prin apelarea funcţiei vlax-data-put de la consola
Visual LISP la pasul 1.
_$ (ldataget-nilt)
"Mine! Mine! "
6. Rulaţi ldataget-nilt pentru a obţine data LISP:
_$ (ldataget-nilt)

289
PROIECTARE ASISTATĂ DE COMPUTER
"Mine! Mine! "
În acest timp data privată salvată de ldataput este returnată, deoarece ldataget-nilt specifică
argumentul private în apelul funcţiei vlax-ldata-get.
7. La prompt-erul consolei Visual LISP efectuaţi acelaşi apel ca ldataget-nilt folosind data
privată obţinută:
_$ (vlax-ldata-get "mydict" "mykey" nil T)
"Mumbo Dumbo"
Argumentul private este ignorat când funcţia vlax-data-get este folosită în afara
spaţiunui de nume separat VLX. Dacă există date neprivate, pentru argumentele dict şi
1
key specificate , aceste date vor fi obţinute.

vlax-ldata-list
Descriere 
Afişează datele LISP dintr-un dicţionar de desenare.
  Apelare 
(vlax-ldata-list dict [private])
Argumente 
dict 
Un obiect tip VLA, un obiect entitate desen AutoCAD, sau un şir de caractere care
specifică un dicţionar global
private 
Dacă funcţia vlax-ldata-list este apelată din spaţiul de nume separat VLX şi pentru
argumentul private este specificată o valoare nenulă, atunci funcţia vlax-ldata-list obţine
numai data privată memorată de acelaţi VLX2
Valoare returnată 
Funcţia returnează o listă cu punct asociativă (key . value).
Exemple 
Folosiţi funcţia vlax-ldata-put pentru a memora data LISP într-un dicţionar:
_$ (vlax-ldata-put "dict" "cay" "Mumbo Jumbo ")
"Mumbo Jumbo "
_$ (vlax-ldata-put "dict" "say" "Floobar ")
"Floobar "
Folosiţi funcţia vlax-ldata-list pentru afişa data LISP memorată în “dict”:
_$ (vlax-ldata-list "dict")
(("say" . "Floobar ") ("cay" . "Mumbo Jumbo "))
Funcţii  similare 
Funcţiile vlax-ldata-get, vlax-ldata-delete, şi vlax-ldata-put.

1
ca în această instanţă
2
vedeţi funcţia vlax-ldata-get pentru exemplificarea folosirii acestui argument

290
MULŢIMI DE SELECŢIE, OBIECTE ŞI TABELA DE SIMBOLURI – MANIPULARE TABELEL DE SIMBOLURI ŞI DICŢIONARE

vlax-ldata-put
Descriere 
Memorează date LISP într-un dicţionar desen sau într-un obiect.
  Apelare 
(vlax-ldata-put dict key data [private])
Argumente 
dict 
Un obiect tip VLA, un obiect entitate desen AutoCAD sau un şir de caractere care specifică
un dicţionar global
key 
Un şir de caractere care specifică cuvântul cheie căutat din dicţionar
data 
Data LISP care va fi memorată în dicţionar
private 
Dacă pentru argumentul private este furnizată o valoare nenulă şi funcţia vlax-ldata-put
este apelată pentru spaţiul de nume separat VLX, atunci funcţia marchează datele obţinute
doar de acelaşi VLX.
Valoare returnată 
Funcţia returnează valoarea argumentului data.
Exemple 
_$ (vlax-ldata-put "dict" "key" '(1))
(1)
_$ (vlax-ldata-put "dict" "cay" "Gumbo jumbo")
"Gumbo jumbo"

Funcţii  similare 
Funcţiile vlax-ldata-get, vlax-ldata-delete, şi vlax-ldata-list.

vlax-ldata-test
Descriere 
Determină dacă datele pot fi salvate în timpul unei sesiuni.
  Apelare 
(vlax-ldata-test data)
Argumente 
data 
Orice dată LISP pentru a fi testată
Valoare returnată 
Funcţia returnează T dacă data poate fi salvată şi restaurată în timpul sesiunii; altfel nil.
Exemple 

291
PROIECTARE ASISTATĂ DE COMPUTER
Determină dacă un şir de caractere poate fi salvat ca ldata în interiorul sesiunii:
_$ (vlax-ldata-test "Gumbo jumbo")
T
Determină dacă o funcţie poate fi salvată ca ldata în interiorul sesiunii:
_$ (vlax-ldata-test yinyang)
nil
Funcţii  similare 
Funcţiile vlax-ldata-get, vlax-ldata-delete, vlax-ldata-list şi vlax-ldata-put.

7.4. MANAGEMENTUL MEMORIEI


Nume funcţie Descriere
( alloc int)
alloc
setează mărimea segmentului pentru furnizarea numărului de noduri
( expand number)
expand
alocă spaţiul de noduri conform unui număr de segmente specificat
( gc)
gc
elimină din memorie obiectele nefolosite, eliberând memoria
( mem)
mem
afişează starea curentă a memoriei în AutoLISP

alloc
Descriere 
Setează mărimea segmentului care poate fi utilizat cu funcţia expand.
  Apelare 
(alloc n-alloc)
Argumente 
n‐alloc  
Un număr întreg care indică mărimea memoriei care trebuie alocată. Numărul întreg
reprezintă numărul de simboluri, şiruri de caractere, usubrs1, numere reale, ş.a.m.d.
Valoare returnată 
Funcţia returnează setarea anterioară a lui n-alloc.
Exemple 
_$ (alloc 100)
1000
Funcţii  similare 

1
identificator pentru funcţii definite de utilizator; reprezintă nume de funcţii: SUBR se referă la funcţii
interne sau compilate, EXRXSUBR se referă la funcţii externe tip ARX şi USUBR identifică funcţii
definite de utilizator

292
MANAGEMENTUL MEMORIEI
Funcţia expand.

expand
Descriere 
Alocă memorie adiţională pentru AutoLISP.
  Apelare 
(expand n-expand)
Argumente 
n‐expand  
Un întreg care indică mărimea memoriei adiţionale care trebuie alocată. Memoria va fi
alocată astfel:
ƒ n-alloc alocă memorie liberă pentru n simboluri
ƒ n-alloc alocă memorie liberă pentru n şiruri de caractere
ƒ n-alloc alocă memorie liberă pentru n funcţii definite de utilizator1
ƒ n-alloc alocă memorie liberă pentru n numere reale
ƒ n1-alloc * n2-expand alocă n1*n2 celule memorie liberă
unde n-alloc este mărimea segmentului.
Valoare returnată 
Funcţia returnează un număr întreg care indică numărul de celule de memorie liberă alocat cu
n-alloc.
Exemple 
Setarea dimensiunii segmentului la 100:
_$ (alloc 100)
1000
Alocarea memoriei pentru două segmente adiţionale:
_$ (expand 2)
82
Acest lucru asigură faptul că AutoLISP are acum memorie disponibilă pentru cel puţin 200 de
simboluri adiţionale, şiruri de caractere, usubrs sau numere reale, sau 8200 free conses.
Funcţii  similare 
Funcţia alloc.

gc
Descriere 
Forţează eliberarea memoriei neutilizate de o colecţie de date nefolosite aflate în memorie.
  Apelare 
(gc)

1
usubrs

293
PROIECTARE ASISTATĂ DE COMPUTER

mem
Descriere 
Afişează starea curentă a memoriei AutoLISP.
  Apelare 
(mem)
Funcţia mem afişează statisticile utilizării memoriei AutoLISP. Prima linie a acestui raport de
statistici conţine următoarea informaţie:
GC calls
Numărul apelurilor funcţiei de eliberare a memoriei neutilizate de o colecţie de date nefolosite
de la pornirea AutoLISP.
GC run time
Timpul total consumat de eliberarea memoriei1.
Obiectele LISP sunt alocate în memoria dinamică care este organizată în segmente şi divizată
pe pagini. Memoria este descrisă în secţiunea “Dynamic Memory Segments Statistics”:
PgSz
Dimensiunea paginii de memorie dinamică2.
Used
Numărul de pagini utilizat.
Free
Numărul de pagini libere3.
FMCL
Cea mai mare zonă continuă de memorie a paginilor goale.
Segs
Numărul de segmente alocate.
Type
Descrierea internă a tipurilor obiectelor alocate în acest segment. Acestea includ:
lisp stacks – stiva internă ale LISP
bytecode area – modulele funcţiilor de cod compilate
CONS memory – obiecte CONS
::new – memorie nespecificată necesară deservirii utilizând acest segment
DM Str – corpurile şirurilor de caractere dinamice
DMxx memory – toate celelalte noduri ale LISP
bstack body – structura internă utilizată pentru operaţiile I/O
Ultima linie din raport listează dimensiunea minimă a segmentului şi numărul segmentelor
alocate. AutoLISP menţine o listă de nu mai mult de trei segmente libere pentru a salva
apelările sistemului pentru necesarul de memorie.
Toată mulţimea memoriei este globală ; toate documentele AutoCAD împart aceeaşi mulţime.
Aceasta se poate modifica în decuplările viitoare ale AutoCAD-ului.
De notat faptul că mem nu listează toată memoria necesară pentru sistemul de operare;

1
în milisecunde
2
în KB
3
goale

294
MANAGEMENTUL MEMORIEI
listează numai acele necesare deservite de subsistemul AutoLISP Dynamic Memory (DM).
Anumite clase AutoLISP nu foloseşte DM pentru memorie.
Valoare returnată 
nil.
Exemple 
Comanda: (mem)

; GC calls: 23; GC run time: 298 ms


Dynamic memory segments statistic:
PgSz Used Free FMCL Segs Type
512 79 48 48 1 lisp stacks
256 3706 423 142 16 bytecode area
4096 320 10 10 22 CONS memory
32 769 1213 1089 1 ::new
4096 168 12 10 12 DM Str
4096 222 4 4 15 DMxx memory
128 4 507 507 1 bstack body
Segment size: 65536, total used: 68, free: 0
nil

7.5. EXTENSII VISUAL LISP LA AUTOLISP


Funcţiile extinse ale AutoLISP furnizate de VLISP conţin funcţii de măsurare a curbelor,
conversia datelor, manipularea obiectelor, manipularea proprietăţilor, manipularea colecţiilor
şi de manipularea a dicţionarului. Numele funcţiei are prefixul vlax-. Aceste funcţii sunt
adăugate la metodele ActiveX®, furnizate prin intermediul funcţiilor vla-*.
Observaţie: Înaintea utilizărilor extensiilor AutoLISP, trebuie editată următoarea comandă:
(vl-load-com)
Funcţia vl-load-com iniţializează de asemenea suportul ActiveX pentru AutoLISP.

7.5.1. Manipularea Colecţiilor ActiveX

Nume funcţie Descriere


( vlax-for symbolcollection [expression1 [expression2 ...]])
vlax-for
iterează o colecţie de obiecte, evaluând fiecare expresie
( vlax-map-collection obj function)
vlax-map-collection
aplică o funcţie tuturor obiectelor dintr-o colecţie

7.5.2. Conversia datelor tip ActiveX

Nume funcţie Descriere


vlax-3D-point ( vlax-3D-point list)

295
PROIECTARE ASISTATĂ DE COMPUTER
creează structuri de puncte 3D1 compatibile cu
ActiveX
( vlax-ename->vla-object entname)
vlax-ename->vla-object
transformă o entitate la un obiect VLA
( vlax-make-safearray type '(l-bound . u-bound) [
vlax-make-safearray '(l-bound . u-bound)...)]
creează o matrice de tip safearray
( vlax-make-variant valuetype)
vlax-make-variant
creează un tip de date variant
( vlax-safearray-fill var 'element-values)
vlax-safearray-fill stochează datele în elementele unei matrice
safearray
( vlax-safearray-get-dim var)
vlax-safearray-get-dim returnează numărul dimensiunilor într-o matrice
tip safearray
( vlax-safearray-get-element var element)
vlax-safearray-get-element
returnează un element dintr-o matrice
( vlax-safearray-get-l-bound var dim)
vlax-safearray-get-l-bound returnează limita inferioară a unei dimensiuni a
unei matrice
( vlax-safearray-get-u-bound var dim)
vlax-safearray-get-u-bound returnează limita superioară a unei dimensiuni a
unei matrice
( vlax-safearray-put-element var element value)
vlax-safearray-put-element
adaugă un element la o matrice
( vlax-safearray-type var)
vlax-safearray-type returnează tipul datelor unei matrice de tip
safearray
( vlax-safearray->list var)
vlax-safearray->list returnează elementele unei matrice de tip
safearray sub formă de listă
( vlax-tmatrix list)
returnează o reprezentare adecvată pentru ca o
vlax-tmatrix
matrice de transformare 4x4 să fie utilizată în
metodele VLA
( vlax-variant-change-type vartype)
vlax-variant-change-type returnează valoarea unei variabile după
modificarea acesteia dintr-un tip de date în altul
( vlax-variant-type var)
vlax-variant-type
determină tipul de date al unei variabile tip variant
( vlax-variant-value var)
vlax-variant-value
returnează valoarea unei variabile tip variant
vlax-vla-object->ename ( vlax-vla-object->ename obj)

1
variabile

296
EXTENSII VISUAL LISP LA AUTOLISP
transformă un obiect VLA intr-o entitate
AutoLISP

7.5.3. Invocarea Metodelor ActiveX

Nume funcţie Descriere


( vlax-invoke-method objmethodlist)
vlax-invoke-method
apelează metoda specificată ActiveX
( vlax-method-applicable-p objmethod)
vlax-method-applicable-p determină dacă un obiect suportă o metodă
particulară

7.5.4. Manipularea Obiectelor ActiveX

Nume funcţie Descriere


( vlax-dump-object obj)
vlax-dump-object listează proprietăţile unui obiect, şi opţional, metodele care
se aplică obiectului
( vlax-erased-p obj)
vlax-erased-p
determină dacă un obiect a fost şters
( vlax-get-acad-object)
vlax-get-acad-object obţine obiectul aplicaţiei AutoCAD de nivelul superior
pentru sesiunea AutoCAD curentă
( vlax-method-applicable-p objmethod)
vlax-method-applicable-p
determină dacă un obiect suportă o metodă particulară
( vlax-object-released-p obj)
vlax-object-released-p creează comenzi utilizator pentru încărcarea fişierelor
AutoLISP asociate
( vlax-read-enabled-p obj)
vlax-read-enabled-p
determină dacă un obiect a fost deconectat
( vlax-release-object obj)
vlax-release-object
decuplează un obiect de desen
( vlax-typeinfo-available-p obj)
vlax-typeinfo-available-p determină dacă informaţia TypeLib este prezentă pentru
tipul specificat al obiectului
( vlax-write-enabled-p obj)
vlax-write-enabled-p
determină dacă un obiect desen AutoCAD poate fi modificat

7.5.5. Manipularea Proprietăţilor ActiveX

Nume funcţie Descriere

297
PROIECTARE ASISTATĂ DE COMPUTER
( vlax-get-property objproperty)
vlax-get-property
testează o proprietate a obiectului VLA
( vlax-property-available-p objprop [T])
vlax-property-available-p
determină dacă un obiect are o proprietate specificată
( vlax-put-property objpropertyarg)
vlax-put-property
setează proprietatea unui obiect ActiveX

7.5.6. Măsurarea Curbelor

Nume funcţie Descriere


( vlax-curve-getArea curve-obj)
vlax-curve-getArea
returnează aria interioară unei curbe
( vlax-curve-getDistAtParam curve-objparam)
vlax-curve-getDistAtParam returnează lungimea segmentului de curbă de la
începutul curbei la parametrul specificat
( vlax-curve-getDistAtPoint curve-objpoint)
returnează lungimea segmentului curbei între
vlax-curve-getDistAtPoint
punctul de început al curbei şi un punct
specificat
( vlax-curve-getEndParam curve-obj)
vlax-curve-getEndParam returnează parametrul punctului de final al
curbei
( vlax-curve-getEndPoint curve-obj)
vlax-curve-getEndPoint returnează punctul final al curbei specificate în
sistemul de coordonate WCS
( vlax-curve-getParamAtPoint curve-objparam)
vlax-curve-getParamAtPoint returnează parametrul curbei la punctul
specificat
( vlax-curve-getPointAtDist curve-objdist)
vlax-curve-getPointAtDist returnează un punct de pe o curbă specificată la
o distanţă de capăt specificată de utilizator
( vlax-curve-getPointAtParam curve-objparam)
vlax-curve-getPointAtParam returnează punctul la valoarea parametrului
specificat de-a lungul unei curbe
( vlax-curve-getStartParam curve-obj)
vlax-curve-getStartParam
returnează parametrul de început al curbei
( vlax-curve-getStartPoint curve-obj)
vlax-curve-getStartPoint
returnează punctul de început pe curbă.
( vlax-curve-isClosed curve-obj)
vlax-curve-isClosed
determină dacă, curba specificată este închisă.
( vlax-curve-isPeriodic curve-obj)
determină dacă, curba specificată are un
vlax-curve-isPeriodic
domeniu infinit în ambele direcţii şi există o
perioadă dT, astfel încât un punct pe curbă la (u

298
EXTENSII VISUAL LISP LA AUTOLISP
+ dT) = punctul pe curba (u), pentru orice
parametru u.
( vlax-curve-isPlanar curve-obj)
vlax-curve-isPlanar determină dacă există un plan care conţine
curba.
( vlax-curve-getClosestPointTo curve-obj
givenPnt [extend])
vlax-curve-getClosestPointTo
returnează punctul de pe o curbă care este cel
mai apropiat de punctul specificat.
( vlax-curve-getClosestPointToProjection
vlax-curve- curve-obj givenPnt normal [extend])
getClosestPointToProjection returnează cel mai apropiat punct de pe o curbă
după proiecţia curbei pe un plan.
( vlax-curve-getFirstDeriv curve-obj param)
vlax-curve-getFirstDeriv returnează prima derivată a curbei la poziţia
specificată.
( vlax-curve-getSecondDeriv curve-obj param)
vlax-curve-getSecondDeriv returnează derivata a doua a curbei la poziţia
specificată

7.5.7. Dicţionar

Nume funcţie Descriere


( vlax-ldata-delete dictkey)
vlax-ldata-delete
şterge datele din LISP dintr-un dicţionar desen
( vlax-ldata-get dictkey [default-data])
vlax-ldata-get
obţine datele LISP dintr-un dicţionar pentru desen sau un obiect
( vlax-ldata-list dict)
vlax-ldata-list
listează datele LISP dintr-un dicţionar desen
( vlax-ldata-put dictkeydata)
vlax-ldata-put stochează datele LISP într-un dicţionar pentru desen sau într-un
obiect
( vlax-ldata-test data)
vlax-ldata-test
determină dacă datele pot fi salvate peste o limită a sesiunii

7.5.8. Manipularea Obiectelor desenate

Nume funcţie Descriere


( vlax-create-object “prog-id”)
vlax-create-object
returnează o lista cu aplicaţiile curente încărcate
( vlax-dump-object obj)
vlax-dump-object
încarcă o aplicaţie tip ObjectARX

299
PROIECTARE ASISTATĂ DE COMPUTER
( vlax-erased-p obj)
vlax-erased-p
elimină din memorie o aplicaţie tip încărcată
( vlax-get-acad-object)
vlax-get-acad-object creează comenzi utilizator pentru încărcarea obiectelor
ObjectARX asociate
( vlax-get-object “prog-id”)
vlax-get-object creează comenzi utilizator pentru încărcarea fişierelor
AutoLISP asociate
( vlax-get-or-create-object “prog-id”)
vlax-get-or-create-
forţează afişarea lângă cursor pentru următoarea
object
comandă
( vlax-import-type-library :tlb-filename filename
[:methods-prefix mprefix :properties-prefix pprefix
vlax-import-type-
:constants-prefix cprefix])
library
evaluează expresiile AutoLISP într-un fişier
vlax-method- ( vlax-method-applicable-p objmethod)
applicable-p lansează o aplicaţie Windows
( vlax-object-released-p obj)
vlax-object-released-p încarcă un fişier în toate documentele AutoCAD
deschise
( vlax-read-enabled-p obj)
vlax-read-enabled-p
încarcă un proiect VBA
( vlax-release-object obj)
vlax-release-object
rulează un macro VBA
vlax-typeinfo- ( vlax-typeinfo-available-p obj)
available-p adaugă în AutoCAD comenzi create în command
( vlax-write-enabled-p obj)
vlax-write-enabled-p
adaugă în AutoCAD comenzi create în command

7.6. REACTOR
Funcţiile reactor definesc, interoghează şi şterg reactorii şi proprietăţile reactorului.
Observaţie: Înainte de a putea utiliza aceste funcţii, trebuie încărcat reactorul AutoLISP
utilizând următoarea comandă: (vl-load-com)
Funcţia vl-load-com iniţializează suportul reactor şi un număr de alte extensii AutoLISP.

Nume funcţie Descriere


( vl-load-com)
vl-load-com
încarcă extensiile Visual LISP în AutoLISP
( vlr-acdb-reactor datacallbacks)
vlr-acdb-reactor construieşte un obiect reactor care notifică când un obiect este
adăugat, modificat sau şters dintr-o bază de dată desen
( vlr-add obj)
vlr-add
Validează un obiect reactor dezactivat

300
REACTOR
( vlr-added-p obj)
vlr-added-p
produce un sunet de beep
( vlr-beep-reaction [args])
vlr-beep-reaction creează comenzi utilizator pentru încărcarea fişierelor AutoLISP
asociate
( vlr-current-reaction-name)
vlr-current-
returnează numele evenimentului curent, dacă este apelată dintr-
reaction-name
un apel callback al reactorului
( vlr-data obj)
vlr-data
returnează datele specifice aplicaţiei asociate unui reactor
( vlr-data-set objdata)
vlr-data-set
Suprascrie datele specifice aplicaţiei asociate unui reactor
( vlr-deepclone-reactor objdata)
vlr-deepclone-
construieşte un obiect reactor editor care notifică un eveniment
reactor
de clonare
( vlr-docmanager-reactor objdata)
vlr-docmanager-
construieşte un obiect reactor care notifică evenimentele generate
reactor
de documentele desen
( vlr-dwg-reactor objdata)
vlr-dwg-reactor construieşte un obiect reactor editor care notifică un eveniment
de desen
( vlr-dxf-reactor objdata)
vlr-dxf-reactor construieşte un obiect reactor editor care notifică un evenimet
corespunzător citirii sau scrierii unui fişier DXF
( vlr-editor-reactor data callbacks)
vlr-editor-reactor
construieşte un obiect reactor editor
( vlr-linker-reactor data callbacks)
vlr-linker-reactor construieşte un obiect reactor care notifică în fiecare moment
dacă aplicaţia ObjectARX este sau nu încărcată
( vlr-miscellaneous-reactor datacallbacks)
vlr-miscellaneous-
construieşte un obiect reactor editor care nu corespunde oricăror
reactor
altor tipuri de reactoare
( vlr-mouse-reactor datacallbacks)
vlr-mouse-reactor construieşte un obiect reactor editor care notifică un eveniment al
mouse-ului
( vlr-notification reactor)
vlr-notification determină daca un reactor se lansează sau nu dacă numele lui
asociat nu este activ
( vlr-object-reactor owners datacallbacks)
vlr-object-reactor
construieşte un obiect reactor pentru obiectul desen
( vlr-owner-add reactorowner)
vlr-owner-add
adaugă un obiect în lista proprietarilor unui reactor al obiectului
( vlr-owner-remove reactorowner)
vlr-owner-remove
şterge un obiect din lista proprietarilor unui reactor al obiectului
vlr-owners ( vlr-owners reactor)

301
PROIECTARE ASISTATĂ DE COMPUTER
returnează lista proprietarilor unui reactor al obiectului
( vlr-pers reactor)
vlr-pers
determină un reactor să fie persistent
( vlr-pers-list [reactor])
vlr-pers-list returnează o listă a reactoarelor persistente în documentul desen
curent
( vlr-pers-p reactor)
vlr-pers-p
determină dacă un reactor este persistent
( vlr-pers-release reactor)
vlr-pers-releas
produce un reactor să fie temporar
( vlr-reaction-name reactor-type)
vlr-reaction-name returnează o listă a tuturor condiţiilor funcţiei callback posibile
pentru acest tip de reactor
( vlr-reaction-set reactoreventfunction)
vlr-reaction-set
adaugă sau înlocuieşte o funcţie callback într-un reactor
( vlr-reactions reactor)
vlr-reactions returnează o listă de perechi (event-name . callback_function)
pentru reactor
( vlr-reactors [reactor-type...])
vlr-reactors
returnează o listă a reactorilor existenţi
( vlr-remove reactor)
vlr-remove
dezactivează un reactor
( vlr-remove-all reactor-type)
vlr-remove-all
dezactivează toţi reactorii de tipul specificat
( vlr-set-notification reactor 'range)
vlr-set-notification defineşte dacă o funcţie callback a reactorului va fi executată
dacă namespace-ul său asociat nu este activ
( vlr-sysvar-reactor data callbacks)
vlr-sysvar-reactor construieşte un obiect reactor editor care notifică o modificare a
unei variabile de sistem
( vlr-toolbar-reactor data callbacks)
vlr-toolbar-reactor construieşte un obiect reactor editor care notifică o modificare a
bitmap-urilor într-un toolbar
( vlr-trace-reaction)
vlr-trace-reaction o funcţie callback predefinită care listează unul sau mai multe
argumente ale funcţiei callback în fereastra Trace
( vlr-type reactor)
vlr-type
returnează un simbol care reprezintă tipul reactorului
( vlr-types)
vlr-types
returnează o listă a tuturor tipurilor reactorilor
( vlr-undo-reactor datacallbacks)
vlr-undo-reactor construieşte un obiect reactor editor care notifică un eveniment
undo
vlr-wblock-reactor ( vlr-wblock-reactor data

302
REACTOR
construieşte un obiect reactor editor care notifică un eveniment
legat de scrierea unui bloc
( vlr-window-reactor datacallbacks)
vlr-window-reactor construieşte un obiect reactor editor care notifică un eveniment
legat de mutarea sau redimensionare unei ferestre AutoCAD
( vlr-xref-reactor datacallbacks)
vlr-xref-reactor construieşte un obiect reactor editor care notifică un eveniment
legat de ataşarea sau modificarea XREF-urilor

7.7. SPAŢIUL DE NUME VLX


Funcţiile VLX pentru spaţiul pentru nume care vor fi prezentate mai jos se aplică la aplicaţiile
VLX separate-namespace. Aceste funcţii permit funcţiilor VLX separate-namespace să
fie accesibile dintr-un document al spaţiului pentru nume, validează salvarea şi updatarea
variabilelor în documentul din spaţiul pentru nume asociat şi furnizează rutine de tratare a
erorilor pentru funcţiile VLX separate-namespace.

Nume funcţie Descriere


( vl-arx-import [function | application]
vl-arx-import importă funcţiile ObjectARX/ADSRX într-un spaţiu de nume
separat VLX
( vl-doc-export 'function)
vl-doc-export
Permite ca o funcţie să fie disponibilă în documentul curent
( vl-doc-import ['function | application])
vl-doc-import
Importă o funcţie exportată anterior într-un spaţiu de numeVLX
( vl-doc-ref symbol)
vl-doc-ref Salvează valoarea unei variabile din spaţiul de nume document
curent
( vl-doc-set symbolvalue)
vl-doc-set Setează valoarea unei variabile în spaţiul de nume document
curent
( vl-exit-with-error “msg”)
vl-exit-with-
Pasează controlul dintr-un VLX de tratare a erorii la funcţia
error
*error* a din spaţiului de nume apelat
( vl-exit-with-value value)
vl-exit-with-
Returnează o valoare a funcţiei care este invocată de VLX din
value
alt spaţiu de nume
vl-list-
( vl-list-exported-functions [“appname”])
exported-
Listează funcţiile exportate
functions
( vl-list-loaded-vlx)
vl-list-loaded-
Returnează o listă a tuturor fişierelor spaţiu de nume separat
vlx
VLX asociate documentului curent
( vl-unload-vlx “appname”)
vl-unload-vlx Se descarcă o aplicaţie VLX care este încărcată în propriul său
spaţiu de nume

303
PROIECTARE ASISTATĂ DE COMPUTER
( vl-vlx-loaded-p “appname”)
vl-vlx-loaded-p Determină dacă un spaţiu de nume separat VLX este încărcat în
acest timp

7.8. SPAŢIUL DE NUME PENTRU COMUNICAŢII:


Funcţii de comunicare cu spaţiu pentru nume conţine adresarea tabelei spaţiului de nume şi
funcţiile de încarcare multi-document.

Nume funcţie Descriere


( vl-bb-ref 'variable)
vl-bb-ref
returnează valoarea unei variabile din tabela spaţiului de nume
( vl-bb-set 'variable value)
vl-bb-set
setează o variabilă în tabela spaţiului de nume
( vl-load-all “filename”)
încarcă un fişier în toate documentele AutoCAD deschise şi în
vl-load-all
orice document deschis succesiv atâta timp cât sesiunea
AutoCAD curentă este deschisă
( vl-propagate 'variable)
copiază valoarea unei variabile în toate documentele din spaţiile
vl-propagate pentru nume deschise şi stetează valoarea acesteia în orice
subsecvenţă pentru desen deschisă atâta timp cât sesiunea
AutoCAD curentă este deschisă

7.9. MANIPULAREA REGIŞTRILOR WINDOWS


Funcţiile pentru registrii Windows interoghează şi actualizează registrii Windows.

Nume funcţie Descriere


( vl-registry-delete reg-key [val-name])
vl-registry-delete
şterge o cheie specificată sau valoarea acesteia din regiştri
( vl-registry-descendents reg-key [val-names])
vl-registry-
returnează o listă de subchei sau numele valorilor pentru o
descendents
cheie a registrului specificat
( vl-registry-read reg-key [val-name])
vl-registry-read returnează datele stocate in registru din Windows pentru
perechea cheie/valoare specificată
( vl-registry-write reg-key [val-name val-data])
vl-registry-write
creează o cheie în registrul Windows-ului
( vlax-product-key)
vlax-product-key
returnează calea registrului AutoCAD din Windows

304
EXTENSII VISUAL LISP LA AUTOLISP – MĂSURAREA CURBELOR

8. COMPARARE VERSIUNI AUTOCAD

8.1. ISTORIC AUTOCAD


Prima prezentare, de către firma Autodesk, a AutoCAD-ului1, a avut loc în august 1982.
Prima versiune oficială2, numită Autocad-80, datează din ianuarie 1983. Au urmat apoi, pe
rând, versiunile 1.2, 1.3, 1.4, 2.0, 2.1, 2.5, 2.63, următoarele versiuni fiind prezentate numai
cu denumirea de Release (9 ÷ 14). Din anul 2000 noile versiuni sunt cunoscute sub numele:
AutoCAD 2000, AutoCAD 2002. Autodesk, prin produsul său AutoCAD, a oferit un sistem
global de proiectare asistată fiind cel mai larg utilizat şi bine cunoscut produs în domeniul
CAD. Până la versiunea Release 12, AutoCAD a fost orientat în special pe crearea de desene
de reper şi de ansamblu. Strategia firmei a cuprins un sistem global de marketing, vânzare sau
acordare de licenţe de evaluare, ca şi libera circulaţie a licenţelor fără cheie, care i-a asigurat o
piaţă foarte extinsă. Fondarea modelului creat a fost geometrică, cu constrângeri complete, cu
posibilităţi de reprezentare în model solid restrânse.

8.2. SISTEMUL AUTOCAD


AutoCAD este un pachet de programe de desenare şi proiectare asistată de calculator, realizat
de firma Autodesk Inc. din California, SUA, disponibil pe o multitudine de calculatoare şi
staţii grafice: IBM PC sau 100% compatibile, Hewlett Packard, IBM RS/6000, Iris Indigo,
SUNWorkstation, Apple Macintosh, Digital Workstation, DEC 3100, etc., rulând sub
sistemele de operare DOS, Windows, OS/2, Sun OS, Sun Solaris, Silicon Graphics IRIX,
DECstation ULTRIX, Macintosh System 7, Novell Netware, Hewlett Packard HP-UX, IBM
RS/6000AIX. AutoCAD este destinat proiectanţilor din diferite domenii de activitate:
inginerie mecanică şi producţie - CAD, CAM; electrotehnică, electronică, robotică şi sisteme
flexibile de fabricaţie, construcţii şi arhitectură: proiectarea arhitecturală, proiectarea
clădirilor, inginerie civilă, proiectare hidrologică şi drenaj, facilităţi de sistematizare şi
management teritorial, proiectarea autostrăzilor, proiectarea elementelor din beton, proiectarea
structurilor; grafică publicistică, cartografie, hidrologie, geologie, mediul înconjurător.

8.3. CALITĂŢI ALE SISTEMULUI AUTOCAD


o posibilităţi ample de creare şi editare a desenelor;
o compatibilitate cu un mare număr de periferice grafice: monitoare, digitizoare,

1
numit iniţial MicroCAD
2
versiunea 1.0 sau Release 1
3
respectiv, Release 2 ÷ 8

305
PROIECTARE ASISTATĂ DE COMPUTER
plottere,imprimante;
o marea varietate a programelor de aplicaţie care intră în relaţie cu AutoCAD-ul;
o facilităţi deosebite pentru uşurarea muncii de proiectare şi a lucrului în echipă prin
utilizarea fişierelor de referinţă;
o arhitectura deschisă a sistemului, prin limbajele de programare incluse: C(ADS),
AutoLISP, VBA.

8.4. COMPARARE AUTOCAD 2000, 2002, 2004, 2005


În tabelul următor vor fi punctate cele mai importate caracteristici ale ultimelor versiuni de
AutoCAD.

Unelte ptr. desenare AutoCAD AutoCAD AutoCAD AutoCAD


(Design tools) 2000 2002 2004 2005
Moduri AutoSnap şi AutoTrack x x x x
Hyperlink la Obiecte x x x x
Conectare cu baze de date x x x x
Bară cu instrumente DesignCenter x x x x
Manager pentru proprietăţile
x x x x
obiectului
Metoda de tragere I-drop x x x
Curata fişierele desenate cu dat
x x x
nefolosite.
Comanda Array x x x
Manager Atribute bloc x x x
Extragerea atributelor unui bloc din
x x x
desen
Cotare asociativă x x x
Meniuri tip Palete de unelte x x
Bară cu instrumente on-line
x x
DesignCenter
Text multilinie cu taburi/indentare x x
Bară cu instrumente Express x x
Polilinie Revision Clouds x x
Efecte Gradient x x
True Color, Pantone, RAL Support x x
Comanda Table x
Câmpuri x
Vederi/Viewport-uri x
Grupuri de straturi x
Creează o pagina de index x

306
COMPARARE VERSIUNI AUTOCAD
8.4.1. Tabele

Problema: Date de tip tabular precum liste de componente, cartuşuri şi legende sunt
fundamentale pentru multe documente. Acum aceste tabele sunt create folosind obiecte
AutoCAD precum linii şi text. Crearea şi actualizarea manuală a acestui tip de date necesită
paşi mulţi şi atenţie acordata detaliilor, iar riscul de a introduce erori creşte pe măsură ce
proiectul avansează.
Soluţie:AutoCAD 2005 introduce comanda Table prin care va puteţi concentra mai mult
asupra conţinutului acestor tabele şi mai puţin asupra creării lor. Pot fi predefinite stiluri ale
tabelelor controlând apariţia acestora: grosimi de linii, culori, vizibilitate a celulelor, stil şi
aliniere ale textului, definirea capetelor de tabel, etc. Un tabel poate fi definit sau modificat ca
proprietăţi în doar câteva secunde. Pot fi adăugate sau şterse linii şi coloane, celulele pot fi
reconfigurate, iar gabaritul unui tabel poate fi decis editându-l la nivel de grip-uri.
Pentru a aduce informaţie text provenind din Microsoft® Excel se specifica pur şi simplu
punctul de inserţie. În cazul obiectelor OLE care conţin text, AutoCAD 2005 aproximează
mărimea font-urilor cu unităţi AutoCAD echivalente. În plus AutoCAD scalează automat
orice obiect OLE plasat în spaţiul hârtie sau spaţiul model.
Beneficiu: Cu AutoCAD 2005 este mai simplu să desenezi şi să modifici un tabel, având la
dispoziţie o varietate de opţiuni de formatare.

8.4.2. Câmpuri

Problema: Textele dintr-un set de desene sunt în mod constant actualizate şi revizuite. În plus,
multe texte se repetă de-a lungul întregii documentaţii: numele proiectului, informaţiile despre
client, etc. Responsabilii CAD petrec la sfârşitul fiecărui proiect, multe ore, chiar zile, în care
verifica tabele de componente, cartuşuri, legende, în general adnotările tuturor desenelor
finalizate, înainte de a fi tipărite şi distribuite. Ei ştiu că orice inconsistenţă poate genera
confuzie şi implicit risipă de timp şi bani.
Soluţie: În AutoCAD 2005 noua comandă Fields simplifică procesul de creare, plasare şi
editare a textelor. Câmpurile create cu comanda Fields depozitează practic informaţiile
dinamice, care pot suferi modificări de-a lungul desfăşurării proiectului. De pildă, în cartuşul
desenului poate fi inserat un câmp de tip "data", care face ca de fiecare dată când deschideţi
fişierul respectiv, aceasta să se actualizeze automat. Poate fi de asemenea util să păstraţi "la
zi" tabelele de componenţă. Compatibilitatea cu versiuni mai vechi ale AutoCAD este
menţinută, inclusiv posibilitatea de a converti câmpurile în obiecte text.
Beneficii: Economisirea timpului şi prevenirea greşelilor prin actualizarea automată a textelor
pe măsură ce proiectul avansează iar documentaţia devine din ce în ce mai voluminoasă.

8.4.3. Vederi ale foii şi Viewport-uri

Problema: Exista proiecte a căror documentaţie este atât de laborioasa, încât pentru a le
prezenta cu acurateţe este nevoie de desene care conţin multe vederi şi layout-uri. De obicei se
recurge la atribuirea multor referinţe, la desenarea multor detalii, la folosirea scărilor de
reprezentare multiple, ceea ce complică mult urmărirea documentaţiei. Administrarea şi
actualizarea tuturor formatelor dintr-un astfel de proiect necesită multa atenţie acordată
fiecărui detaliu.
Soluţie: Sheet Set Manager plasează şi actualizează automat pe toate vederile dintr-un
sheet-set simboluri "callout" şi etichete care identifica complet cărui "sheet" aparţin

307
PROIECTARE ASISTATĂ DE COMPUTER
O
vederile, scara reprezenntării şi ordinnea inserării. Orice modiificare se refflecta automaat în toate
heet-set".
vederile afeectate din caddrul unui "sh
Beneficiu: Actualizareaa automata a acestor sim mboluri, adno
otări şi eticheete de identiificare ale
desenelor reeduce riscul de propagare a erorilor şi ş asigura conţinutul actuual şi corect indexat al
proiectelor.

nare1
8.4.4. Straturri de desen

Problema: Deoarece AutoCAD


A suuporta îngloobarea unui număr nelimitat de sttraturi de
desenare înttr-un desen, există comppanii care maanipulează fişiere
fi ce connţin sute de sstraturi de
desenare. Foolositor penttru organizarrea informaţiiei în interiorrul desenuluii, dar extrem
m de dificil
de administtrat!
Soluţie: În AutoCAD
A 2005 pot fi definite
d grupuuri de straturri de desenarre, în scopul de a li se
modifica raapid şi uşor proprietăţile.
p . A fost moddificată casetta "Layer Prroperties M Manager",
care a devennit mai flexibbilă şi mai coompactă, desscoperind maai mult din sppaţiul de lucrru.

Beneficiu: Informaţia structurata pee straturi de desenare estte filtrată maai eficient, pputându-se
opera uniforrm modificărri asupra unuui întreg grupp de straturi de desenare.

AutoCAAD AutoC
CAD AutooCAD Au
utoCAD
U
Uşurarea luccrului
20000 200
02 20004 22005
Integrare Autodesk
A Buuzzsaw2 x x x x
Seturi Disstributing Traansmittal3 x x x
Manager pentru fişierelle
x x
Standards/Model

1
layer
2
site web seecurizat pus laa dispoziţie dee AutoDesk pentru
p colaborrarea on-line la
l realizarea pproiectului;
accesul se face pe bază de subscripţie
3
împachetareea unui set dee fişiere pentruu transmitere pe
p internet

3088
COMPARARE VERSIUNI AUTOCAD
Semnăturii digitale şi parole
p x x
1
Lucrul cu Markup x x
Centru de comunicare x x
Administrrarea seturiloor de foi x
Arhivareaa seturilor de foi x

8.4.5. Admin
nistrarea seeturilor de foi
f

Problema: Pe P toata duraata de viaţă a unui proiecct, membrii echipei de prooiectare se poot roti, iar
conţinutul desenelor
d pooate suferi multe
m modificcări. Toate acestea
a generrează inconssistente în
circuitul dattelor. Proiecctanţii pierd mult
m timp assamblând şi renumerotânnd desene, reeindexând
practic inforrmaţiile din proiecte.
p
Soluţie: Noul
N instruument She eet Set Manager
M
ierarhizeazăă informaţia conţinuta înn desene în seturi şi
subseturi loogice, de unnde poate fii regăsita fuuncţie de
apartenenţa să la un annumit proiecct, partener, sau după
alte criterii.. Aceste "sh heet-sets" pot
p fi asambblate uşor
pornind de la desene exxistente, şi potp fi utile innclusiv în
propagarea standardelor de proiecttare de-a lunngul mai
multor prooiecte. Aceeste seturi de docum mente se
materializeaază în fişieree care pot fi accesate
a de mai
m mulţi
utilizatori simultan, asupra lor putându-se opera
modificări fie
f folosind paleta
p "Shee et Set Mana ager", fie
folosind meeniuri contexxtuale.
Beneficiu: Cu Sheet Set Mana ager proiecttanţii pot
comunica simplu stadiuul actual al unui u proiect oricât de
complex arr fi, sau poot regăsi innformaţii dinn etapele
anterioare ale acestuiaa. Sunt elim minate în acest
a fel
confuziile şi
ş se scuteşte timpul alocaat de obicei creării
c de
referinţe peentru desennele individuuale. Renum merotarea
desenelor şii indexarea innformaţiilor se fac fără efort.

8.4.6. Arhivaarea seturillor de foi

Problema: Pentru a arrhiva docum mentaţia unuui proiect, companiile obişnuiesc


o săă copieze
desenele dinntr-un dosar în altul. Stoocarea mai multor
m versiu
uni ale desennelor creşte rriscul de a
folosi informmaţie depăşitta.
Soluţie: Sheeet Set Manaager producee şi stochează copii ale documentelor
d r automat, fuurnizând o
metoda de stocare
s a dateelor mai siguura.
Beneficiu: Arhivarea
A auutomata perm mite revedereea uşoara a fazelor
f impoortante ale prroiectului.
În plus, utillizatorii pot fi
f siguri ca manipulează
m date pertineente şi ca scaad şansele dee a comite
greşeli datorate stocării versiunilor multiple
m ale aceloraşi
a fişiiere.
AutoC CAD AutoC CAD AutoCAD AutooCAD
Publicaare
2000 20002 20004 20005

1
o singură liinie de comenntariu sau o linnie roşie corecctoare inseratee în fişierul DW
WF; ajută la ssemnalarea
erorilor unui desen pentru proiecte distrribuite

309
PROIECTARE ASISTATĂ DE COMPUTER
Layouts x x x x
Viewport-uri ne-rectangulare x x x x
Linii cu grosime Lineweights x x x X
Control inserare Plot x x x
Stările stratului x x x
Publicarea unui website x x x
Publicarea DWF – o singură foaie x x x
Publicarea DWF – setări foaie x x
Ieşire Plotter Shaded/Rendered x x
Tipărirea în fundal x

8.4.7. Publicare şi colaborare DWF

Problema: Cele mai multe companii care folosesc AutoCAD au nevoie să publice desenele
pentru a fi distribuite în interiorul echipelor de proiectanţi, de-a lungul a diferite etape ale
proiectelor. Indiferent dacă plotaţi desene pentru întâlniri cu partenerii, schimbaţi informaţii
cu colegii proiectanţi sau transmiteţi furnizorilor fişiere DWFTM1, trebuie să ştiţi dacă aţi
colectat/publicat/transmis cele mai actuale şi corecte date. În acest moment plotarea sau
publicarea fişierelor DWF "ţin ocupată" aplicaţia şi consuma timp prin parcurgerea unor
dialoguri complexe.
Soluţie: Sheet Set Manager permite identificarea şi accesarea uşoara a documentelor
individuale din cadrul proiectelor folosind o ierarhizare informaţiilor de tip arborescent
comună multor aplicaţii Microsoft® Windows®. Poate fi creat un număr nelimitat de seturi de
documente "sheet-sets" pentru orice proiect. În plus, AutoCAD 2005 admite ca plotarea şi
publicarea să ruleze ca procese în background, redând timpi preţioşi de lucru utilizatorului.
Noua interfaţa de plotare este mai simpla şi în plus pot fi generate fişiere .log în care se
colectează istoricul incidentelor survenite în timpul plotării.
Beneficiu: Sheet Set Manager permite plotarea simplificata a mai multor desene fără să fie
nevoie să urmăriţi la ce locaţii sunt depuse fişierele individuale DWG. Rezulta mai puţine
erori şi o economie importanta de timp.
AutoCAD AutoCAD AutoCAD AutoCAD
Asistenţă pentru utilizator
2000 2002 2004 2005
Trucuri utile x x x
Asistenţă activă x x x
Soluţii de lucru x x x
Suport conectare cu baze de date x x x
Motor de căutare în limba natală x x x
Asistenţă suport AutoCAD x x x x
Asistenţă învăţare AutoCAD x x
Noi caracteristici x x

8.4.8. Instrumente de învăţare şi migrare către ultima versiune


1
Design Web Format

310
COMPARARE VERSIUNI AUTOCAD
Toate cele descrise până acum nu sunt de mare folos dacă nu puteţi "face saltul" către ultima
versiune. Pentru a va ajuta în acest proces, AutoCAD 2005 adăuga instrumente de prezentare
şi învăţare a celor mai noi funcţionalităţi, pentru a va acomoda cu acestea imediat după
instalare.
Problema: Aveţi AutoCAD 2005 instalat, şi mai aveţi nevoie doar de o mână de ajutor pentru
a învăţa noutăţile.
Soluţie: Funcţia interactiva "New Features Workshop" descrie cele mai noi funcţii şi
conţine mici tutoriale pentru asigurarea unui start rapid. În acelaşi timp, AutoCAD 2004 şi
AutoCAD 2005 pot fi instalate temporar pe aceeaşi maşina pentru a acorda timpul necesar
deprinderii noilor funcţii.

8.4.9. Instrumente de transfer către o versiune nouă AutoCAD

Problema: Este un lucru obişnuit să se lucreze într-un mediu personalizat AutoCAD - folosind
propriile meniuri, taste rapide, tipuri de linii şi haşuri. Trecând la o versiune nouă, toate aceste
artificii trebuiesc recreate înainte de a începe lucrul în mediu productiv.
Soluţie: Cu AutoCAD 2005 pot fi transferate uşor fişierele, setările, meniurile, într-un cuvânt
preferinţele, pentru a va afla încă de la început în mediul Dvs. familiar de lucru.
Beneficiu: Economie de timp alocat acomodării cu AutoCAD 2005.
AutoCAD AutoCAD AutoCAD AutoCAD
Administrarea softului
2000 2002 2004 2005
Manager produse Autodesk x x x
Asistent trecere la altă versiune x x x
Certificare Windows XP Logo x x
Eliminarea restricţiilor drepturilor
x x
Power User
Transferul licenţei de pe un server de
x x
reţea

AutoCAD AutoCAD AutoCAD AutoCAD


Cerinţe de sistem de operare
2000 2002 2004 2005
Windows 95 x
Windows 98 x x
Windows NT x x x
Windows 2000 x x x
Windows XP Home x x
Windows XP for TabletPC x x
Windows XP Professional x x

8.5. DIFERENŢE AUTOCAD 2006


AutoCAD® 2006, a 20-a versiune a programului, duce la un nou nivel tradiţia inovaţiei

311
PROIECTARE ASISTATĂ DE COMPUTER
O
specifică accestei linii dee produse, avvând drept reezultat o prodductivitate spporita încă diin primele
momente alle utilizării produsului.
În proiectarre, crearea unui
u singur desen
d într-unn mod cât maim eficient posibil estee un lucru
important. Însă creareaa a unui sett întreg de desene d coord donate este un lucru crrucial. Cu
AutoCAD® ® 2006 puteţţi face ambelle lucruri.
Caracteristicile care connduc la o maai mare produuctivitate preecum obiecteele tabelare şşi paletele
de instrumeente avansatte simplificăă sarcinile dee desenare. În acelaşi tiimp, noul S Sheet Set
Manager va v ajuta să creaţi,
c să gesstionaţi şi săă partajaţi seeturi întregi de foi cu o eficienţă
maximă.
Cu AutoCA AD 2006 puteeţi:
• Gesstiona mai efficient seturille de foi;
• Creea mai rapid desene prin intermediul
i i
instrumentel or de producctivitate;
• Parttaja mai simpplu datele prrin intermediiul instrumen ntelor de colaaborare.

8.5.1. Blocurri Dinamicee

Un desen în î AutoCAD D este adeseaa compus diintr-o serie de componeente standarddizate sau
blocuri utiliizate în mai multe desenne. În AutoC CAD aceste componentee sunt reprezzentate de
blocuri. Follosirea blocuurilor econom miseşte timpuul şi ajută la crearea unorr desene stanndardizate
eliminând necesitatea
n reedesenării ellementelor standardizate de fiecare data.
d Cu toatte acestea
blocurile poot fi dificil de
d gestionat şi manipulatt, deseori exiistând mii dee blocuri la dispoziţia
utilizatoriloor pentru a fi introduse şi modificate.
AutoCAD 2006 2 face caa blocurile săă fie dinamicce. Noile uneelte din AutooCAD 2006 va permit
să adăugaţi un comporttament dinam mic biblioteccilor de bloccuri existente. Acest luccru reduce
timpul neceesar manipulăării blocuriloor într-un dessen.

8.5.2. Manipularea Blocurilor Din


namice

Problema: După inserarrea unui bloc, acesta ar trebui t scalat,, rotit,


oglindit sauu poziţionat manual
m în rapport cu alte elemente.
e
Soluţia: Nooile caracteriistici ale Blocurilor Dinaamice va perm mit să
manipulaţi cu uşurinnţa blocurile1. Noile grupuri permit p
utilizatoriloor să manipuuleze grafic blocurile duupă ce acesttea au
fost introduuse în desen.
Avantaj: Uttilizarea Bloocurilor Dinaamice conducce la econom mie de
timp şi eficcienta în luccrul cu bloccuri. Desenatorii pot luccra cu
blocuri într--un mod simmplu bazat pee interfaţa graafica, permiţţându-
le să poziţiioneze şi săă manipulezee blocurile corect încă de la introdducerea lor în desen.
Blocurile Dinamice
D redduc semnificcativ timpull necesar acctualizării blocurilor carre nu mai
îndeplinesc criteriile prooiectului.

8.5.3. Varian
nte ale blocurilor simiilare

Problema: Multe bibliioteci de bloocuri sunt compuse


c din
n variante alle aceluiaşi bloc. De
exemplu, o uşă standarrd poate aveaa cinci grosiimi diferite, sau o flanşăă se poate prrezenta în
sase tipuri diferite.
d Pot exista
e de exeemplu variante standardizzate ale unui bloc.

1
rotire, alinieere etc.

3122
COMPARARE VERSIUNI AUTOCAD
Soluţia: Nooile Blocuri Dinamice
D dinn AutoCAD 2006 va perm mit să le setaaţi astfel încâât să poată
fi configuraate în funcţie de un set dee forme şi măărimi predefiinite1.
Avantaj: Prrin includereea tuturor vaariantelor înttr-un singur bloc număruul total de bblocuri cu
care trebuiee să lucreze atât
a administtratorul CAD D cat şi desen natorul scade semnificattiv. Pentru
administratoorul CAD se s simplificăă munca dee gestionare şi actualizaare a bibliottecilor de
blocuri. Penntru desenattor este mullt mai eficieent să insereeze un Bloc Dinamic2 şşi apoi să
selecteze diimensiunea potrivita,
p sauu să o modifice apoi pee măsura ce proiectul se schimba,
fără să o ia de la începutt.

8.5.4. Creareea Blocuriloor Dinamicce

Problema: Aveţi blocuuri pe care le l folosiţi deja.


d Nu
doriţi să reccreaţi biblioteecile de blocuri.
Soluţia: Nooul mediu dee editare al Blocurilor
B Dinamice
oferă o moodalitate graafica uşoara de a crea Blocuri
Dinamice dind blocurile existente, făără a avea cuunoştinţe
de program mare. Pentruu a va da seama de eficienta e
Blocurilor Dinamice
D AuutoCAD 20006 include mostre de
Blocuri Dinnamice cu tutoriale
t desspre modul cum au
fost create.
Avantaje: Puteţi
P să transformaţi cu rapiditate
r şi uşurinţa
u
bibliotecile de blocuri înn Blocuri Diinamice. Aceeasta va
permite săă faceţi trannziţia folossind standarrdele şi
convenţiile potrivite penntru companiia dumneavooastră.

8.5.5. Creareea tabeleloor pornind


d de la
blocuri

Problema: De multe orri blocurile conţinc inform


maţii care trebbuie adunatee şi înscrise uundeva în
desen. De exemplu,
e un număr al unnui reper sauu costul pe unitate
u poate fi stocat ca atribut al
unui bloc, iar când esste combinattă cu numărrul total de blocuri aflaate în desenn, aceasta
informaţie poate
p fi folossită pentru a estima un coost.
Soluţia: Nooul “vrăjitor””3 de extragerre a datelor are
a o interfaţţa nouă care va v permite să selectaţi
cu rapiditatte şi uşurinţaa atributele care
c va interresează atât pentru Bloccurile Dinam mice cât şi
pentru bloccurile existennte. Noua fuuncţie de preevizualizare a blocurilor permite o confirmare
vizuala a bllocurilor seleectate. Vrăjitorul introducce apoi datelle într-un tabbel AutoCAD D. Tabelul
poate avea o formatare standardizată asociată şii poate fi uşo or actualizat în funcţie dee criteriile
pe care le selectaţi. Pot fi create şabbloane4 pentrru a standard diza şi autommatiza processul pentru
tabele comuune. Dacă o schimbare a proiectuluii implica acttualizarea tabbelului, AuttoCAD va
anunţă că innformaţia treebuie actualiizată şi va oferă
o o modaalitate de a face
f acest luucru cu un
singur clickk.
Avantaj: Taabelele conţiin informaţii esenţiale peentru succesu ul unui proiect. Prin autoomatizarea
acestui procces veţi ecoonomisi timpp, veţi evita erorile şi va v veţi asiguura ca inform maţia este

1
de exempluu o masă cu paatru scaune sauu o masa cu douăsprezece
d scaune
s
2
cum ar fi o uşă de garaj
3
wizard
4
templates

313
PROIECTARE ASISTATĂ DE COMPUTER
O
întotdeaunaa la zi şi corectă

8.5.6. Managger Setări Foi


F

Problema: În timpul unui proiect membrii unei u


echipe se potp schimbaa şi conţinuttul fişierelorr se
poate schim mba des. Acceste schimbbări pot gennera
inconsecvennte în stilul de lucru. Membrii
M echhipei
pot consum ma mult tim mp verificâând seturile de
desene, reenumerotând desenele şi actualizzând
informaţiilee.
Soluţia: Sheet
S Sett Managerr introdus în
AutoCAD 20052 va perm
mite să organnizaţi desenelle în
cadrul unuui proiect. Acesta
A oferră o modaliitate
uşoară de a compara desene
d în seturi şi subseeturi
logice. Puteeţi să reuniţţi seturi de desene folosind
desene exisstente, să exxtindeţi standdardele unuii set
asupra altorr proiecte şi să oferiţi accces simultaan la
proiecte înn cadrul unnei reţele. Puteţi apoii să
adăugaţi şi să înlăturaţi desene dintrr-un set folosind
uneltele Sheeet Set Manaager.
Avantaj: Foolosind She eet Set Man nager în AuutoCAD, com mpaniile pot gestiona maai eficient
seturile de desene.
d Commpaniile pot folosi seturille de desenee pentru a coomunica mai uşor date

3144
COMPARARE VERSIUNI AUTOCAD
despre proiect sau pot obţine uşor informaţii dintr-un stadiu timpuriu al proiectului. Sheet
Set Manager elimină confuziile şi reduce timpul consumat comparând desene individuale.

8.5.7. Crearea adnotărilor şi desenelor

Un desen AutoCAD poate conţine atât text cat şi elemente grafice. Crearea, amplasarea şi
modificarea textelor1 sunt plictisitoare, consumatoare de timp şi predispuse spre erori. De
asemenea multe desene folosesc haşuri specifice industriei pentru a indica materiale sau
diverse tipuri de obiecte. O dată cu schimbarea proiectelor aceste haşuri trebuie modificate de
multe ori iar schimbările nu sunt foarte uşor de făcut.
Următoarele capitole evidenţiază noile comenzi AutoCAD care oferă flexibilitate pentru
inserarea şi manipularea adnotărilor.

8.5.8. Mtext mai bun

Problema: Multe desene conţin note sau liste care oferă informaţii detaliate despre parţi ale
desenului care nu pot fi explicate doar prin desen. Formatarea textului este foarte importantă
pentru a reuşi înţelegerea intenţiilor proiectantului. În prezent AutoCAD nu permite o editare
în mod real a textului şi se consumă mult timp cu alinierea corectă a textului după ce acesta a
fost creat. În plus, textul creat în AutoCAD nu suportă “bullets” sau numerotare, cerându-vă
să actualizaţi manual o listă numerotată sau să importaţi textul din alt program cum ar fi
Microsoft Word.
Soluţia: Noua comandă Mtext din AutoCAD 2006 permite textului creat în editorul Mtext să
arate exact ca atunci când va fi introdus în desen. Riglele grafice va permit să aliniaţi textul, să
creaţi cu uşurinţa liste numerotate sau cu “bullets” sau să schimbaţi rapid formatarea textului
cu uneltele de formatare. O dată ce notele arata aşa cum aţi dorit în editor, cu un singur click
le puteţi plasa în desen acolo unde trebuie.
Avantaj: Cu AutoCAD 2006 puteţi să creaţi şi să editaţi text cu uşurinţă. O dată ce textul este
creat el poate fi plasat în desen cu formatarea dorită. De acum încolo nu mai trebuie să
adăugaţi sau să ştergeţi o notă din mijlocul unei liste şi apoi să renumerotaţi manual lista de la
început.

8.5.9. Tabele îmbunătăţite

Problema: AutoCAD 2005 a introdus prima oara conceptul de tabele. Tabelele permit ca
informaţia să fie afişată într-un format tabelar comun multor industrii. Acestea includ formate
cum ar fi planificări, liste de repere, lista de materiale şi estimări de costuri. În multe cazuri
aceste informaţii trebuie însumate pentru a completa tabelele2. AutoCAD 2005 nu suporta
introducerea expresiilor matematice în tabele; multe calcule trebuiau făcute de mână şi apoi
introduse manual în tabel. Dacă datele iniţiale erau schimbate calculele trebuiau refăcute
manual, ceea ce conducea la volum de munca suplimentar şi la posibile erori.
Solutia: AutoCAD 2006 suportă însumări în tabele, medii şi numerotări ale rândurilor şi
coloanelor, şi adăugarea expresiilor matematice bazate pe valori din celulele tabelului.
Expresiile matematice suportate sunt adunarea, scăderea, înmulţirea, împărţirea, ridicarea la
putere şi egalitatea.
1
atât ca adnotări cât şi ca tabele
2
de exemplu o estimare a costului nu va afişa doar costul pe unitate cât şi costul total al reperelor din
desen

315
PROIECTARE ASISTATĂ DE COMPUTER
O
Avantaj: Acctualizarea automată
a a calculelor dinn tabele odată cu modificcarea proiecttului, ceea
ce duce la economie
e de timp şi evitaarea erorilor costisitoare.
c

8.5.10. Haşurii
îmbunătăţite

Problema: Haşurile în î AutoCA AD


sunt folositte în numerooase moduri –
de la aşezarrea ierbii şi pavajului
p pânnă
la secţiuneea printr-unn perete de d
cărămida. În prezentt, crearea şi
editarea haaşurilor neceesită utilizareea
repetata a casetei de dialog penttru
haşuri. În plus, unele elemente de d
editare cumm ar fi specifficarea originnii
haşurii sauu selectareaa zonei caare
trebuie haşurata,
h p
pot necesiita
cunoştinţe avansate de d AutoCA AD
pentru a fi efectuate
e correct. Nu exissta
nici un mood de a calccula aria unnei
haşuri şi afişarea aceesteia într-uun
desen pentruu a fi utilizatta în estimareea
costurilor şii materialelor necesare.
Soluţia: AutoCAD 2006 a
îmbunătăţit caracteristiicile haşurilor
care acum va permit să s haşuraţi cu c
uşurinţa zone multiple cu o singuura
comanda. Comanda
C dee haşurare vav
oferă posibiilitatea să addăugaţi şi să ştergeţi granniţele unei haaşuri şi să moodificaţi origginea unei
haşuri pentrru a îmbunăttăţi aspectul acesteia în desen.
d Puteţii să calculaţii aria unei haaşuri şi să
afişaţi valoaarea în desenn.
Avantaj: Haaşurile sunt maim uşor de creat,
c de edittat şi cu posibbilitatea de a calcula ariaa lor.

8.5.11. Interfaaţa cu utilizzatorul îmb


bunătăţita

AutoCAD a fost întootdeauna uneealta flexibiilă, permiţân nd utilizatorrilor familiaarizaţi cu


programul să îndeplineească un num măr mare dee sarcini rap pid şi eficiennt. Aceste pposibilităţi
aveau totuşşi un neajunss. Un utilizaator avea nevvoie de mullt studiu şi experienţă
e peentru a le
utiliza. Aceest lucru ducce la câteva probleme.
p U ar fi ca utilizatorii
Una u exxperimentaţi învaţă să
fie întotdeauuna atenţi laa ceea ce estee afişat pe linnia de comannda. Ei învaţţă sa-şi comuute atenţia
de la desenuul la care luccrează la linia de comandda şi înapoi. Acest lucru înseamnă caa ei nu vor
pierde nici o informaţiee de pe linia de comandaa, dar pentru u un începătoor acest lucruu se poate
dovedi dificil. În plus,, caracterul non-grafic al a multor co omenzi îi pooate face chhiar şi pe
utilizatorii experimentaaţi să nu observe unele opţiuni rar utilizate dar care ar puutea să le
crească prooductivitateaa sau sa-i ajute să rezzolve problleme particuulare ale prroiectului.
În AutoCAD D 2006 interrfaţa de bazaa cu utilizatoorul a fost îmmbunătăţita. Prin aceastaa opţiunile
liniei de comanda
c sunnt adăugate la cursorull grafic astffel încât uttilizatorii nooi cât cei
experimentaaţi pot fi maii eficienţi cu mai puţin tim mp de învăţaare.

3166
COMPARARE VERSIUNI AUTOCAD
8.5.12. Introducere de daate Dynam
mică

Problema: AutoCAD cere utilizatorilor să inntroducă dim


mensiuni şi opţiuni pee linia de
comandă, înntr-un formaat care nu
oferă un răăspuns asuprra datelor
introduse. Acest
A lucru poate
p face
dificilă correctarea greşelilor şi
lucrul eficieent sau poatee ascunde
utilizatoriloor expeerimentaţi
opţiuni foloosite mai rar.
Soluţia: In I AutoCA AD 2006
dimensiunille sunt afişate
dinamic pe elementul geometric
g
în timp ce acesta este creat sau

editat. Noile
N valori pot fi introdduse direct laa cursorul
grafic iaar valorile reevizuite sunt afişate instaantaneu în
desen, oferind feeedback imeediat asupraa datelor
introdusse. Opţiunille comenziii sunt de asemenea
afişate la cursoru ul grafic am mintind utilizatorilor
experimmentaţi ce metode alternaative sunt disponibile
şi în accelaşi timp fără să înceetinească inttroducerea
comenzilor.
Avantajj: Sarcinile de d desenare de zi cu zi sunt mai
eficient îndeplinite. Sarcinile de bazza sunt mai uşor u învăţatee şi mai uşorr de folosit aatât pentru
utilizatorii noi cat şi pentru cei experimenttaţi. Prin
existenta innformaţiei înn locul unde este necesaara puteţi
limita timpuul alocat efecctuării sarcinnilor repetitivve.

8.5.13. Calculatorul graffic

Problema: Comanda CAL C în AutooCAD este o unealtă


puternică pentru
p efectuuarea calcullelor matem matice de
bază sau avansate,
a connversiilor dee unităţi, caalcule de
distanţe bazzate pe obieccte selectate din
d desen. Din păcate
mulţi utilizaatori de AutooCAD nu ştiuu de existentta acestei
caracteristicci, din momeent ce este doar
d o comannda şi nu
este prezenttă în meniu saus în tolbar.
Soluţia: AuutoCAD oferră o noua intterfaţa graficca pentru
comanda CAL C existenttă, şi permitte accesul laa aceasta
unealta puteernica atât prin
p intermeddiul meniuluui cat şi a
tolbar-ului. Acest calcuulator este disponibil în î cadrul
comenzilor individuale1 şi în alte zoone ale progrramului2.
Acesta oferră expresii matematice
m sttandard, convversie de
unităţi şi cittirea coordonnatelor puncttelor şi intersecţiilor, poaate salva connstante folosiite apoi la
calcule viitooare şi are o funcţie de memorare.
m
1
unde este necesara efectuuarea de calcuule
2
cum ar fi paaleta de proprietăţi

317
PROIECTARE ASISTATĂ DE COMPUTER
O
Avantaj: Noua
N interfaţţă a calculattorului perm
mite utilizato
orilor să accceseze capaccităţile de
analiză inccluse în AuutoCAD. Oferind aceasta funcţie în interioruul AutoCAD D, multe
interacţiuni cu comenzille folosite dees se pot acceelera.

8.5.14. Palete de unelte îmbunătăţitte

Problema: Mulţi utilizatori de AuttoCAD inveestesc timp în î adaptareaa software-ullui pentru


nevoile prooprii. Unele companii auu creat toolbbar-uri pentrru a uşura munca m angajaţilor. Cu
toate acesteea adaptareaa toolbar-uriilor consumaa mult timp p, necesită experienţa
e şii ocupa o
porţiune maare din ecrann.
Soluţia: AuutoCAD folooseşte flexibbilitatea paleetelor de uneelte Tool Palettes.
P Acuum puteţi
atribui oricee tip de conţţinut – inclussiv macro-urri, apelări la rutine LISP şi ARX – uunei palete
de unelte. AutoCAD
A suuporta orice număr
n de pallete de uneltte şi face ca organizarea
o şi accesul
la ele să fie foarte uşoarre.
Avantaj: Sttandardizaţi conţinutul
c deesenelor şi sttocaţi comenzile folosite într-o paletăă de unelte
care ocupa mai puţin looc, este speccifică fiecăruui proiect şi pe care o puteţi
p distribuui întregii
echipe.

8.6. DIFEREN
NŢE AUTO
OCAD 20
007

8.6.1. Creareea modificaarea şi mod


delarea de obiecte

2. Crearea
C de obiecte
o 3D

o C
Crearea Prim
mitivelor 3D
D - solide

Versiunea 2007 oferă o metodă mai facilă de creare a


primitivelorr solide 3D. Primitivele solide reprezzintă cele mai
m
simple formme de solide cum ar fi cuburi, coonuri, cilindrri,
sfere, piram
mide şi altele.
De exempluu crearea unnui con se poate
p face prin
p selectareea
butonului con
c din meniiul cu obiectte. Se speciifică mai înttâi
centrul punnctului de bază, şi apoi a se speccifică raza şi
înălţimea.
De asemenea forma unnui obiect see poate moddifica prin selectarea acestuia şi maanipularea
cursorului. Prin
P intermeediul cursoruului, care are proprietateaa de a se „priinde” de obieect, se pot
modifica înnălţimea, grosimea şi razza obiectelor.. De asemen nea cursorul se utilizeazăă şi atunci
când se dorreşte modificarea conuluui într-un truunchi de con n după cum se prezintă în figura
următoare.

o Crearea Pollisolidelor

Pracctic un polissolid se trassează în aceelaşi mod înn care se


traseează o polilinie. În form ma implicită (default)
( unn polisolid
prezzintă un proffil rectangulaar. Se poate crea de asem menea un
polissolid fie dinttr-o linie exiistentă, fie diintr-o polilinnie, un arc
sau un
u cerc utilizzând comand da POLYSO OLID.

3188
COMPARARE VERSIUNI AUTOCAD
Observaţie e: Polisolidele sunt solidde ce sunt trrasate cu un profil specifficat de-a luungul unei
direcţii speccificate.
Pentru a crea un polisoolid, mai întââi s e apasă butonul Po olysolid din meniul de oobiecte, se
selectează tiipul obiectullui ce se doreeşte a fi un polisolid.
p În figură
f un pollisolid este crreat dintr-
o polilinie.

o C
Crearea obieectelor elicoiidale (Helix))

Butonul He elix se utilizeează atunci când


c se doreeşte crearea de
d obiecte ellicoidale 2DD şi 3D de
tipul arcurillor sau şurubburilor. Pentrru aceasta see specifică punct de centtru al bazei sspiralei, şi
raza acesteei baze. Appoi se poatee specifica raza suprafeţei
s se apasă tasta ENTE
superioare sau ER în cazul înn care se dorreşte
aceeaşi valooare a acestteia ca şi ceea precizată suprafeţei de d la
bază, după care
c se speciifică înălţimeea spiralei. O spirală se poate
p
modifica dee asemenea şi ş prin utilizaarea cursorullui „de prind
dere”
sau opţiunea Propertiess palette.
În cazul în care se trassează o spiraală cu aceleaaşi diametru atât
pentru suprrafaţa superiooară cât şi pentru
p baza rezultă
r o spiirală
cilindrică1. De asemeneea prin reduccerea diametrrului fie al bazei
b
fie al supraffeţei superioaare rezultă unn con elicoiddal.
Poziţionareaa şi mutareaa obiectului elicoidal see realizează prin
selectarea şii „prinderea”” bazei.

o C
Crearea de solide
s şi suprrafeţe

Pentru a creea solide şi suprafeţe


s dinn lini şi curbbe
existente se utilizează urrmătoarele comenzi:
c
• Exttrude
• Sw weep
• Lofft
• Revolve

Liniile şi cuurbele se uttilizează penntru a definiii


atât profilul cât şi direcţia solidelor saau
suprafeţelorr. De exempplu un profil închis2, creeează un solid d, iar un proofil deschis3 creează o
suuprafaţă.
See pot crea soolide sau suprrafeţe prin „eextragerea” oobiectelor
seelectate. Commanda EXTR RUDE se utilizează penttru a crea
unn solid sau o suprafaţă dintr-un
d proffil al unui obbiect, cum
arr fi conturul unui
u echipam
ment, o carosserie în exem mplu.
Coomanda SW WEEP se poatep utilizaa pentru a crea noi
suuprafeţe sau solide prin n eliminarea unor curbee4 planare
deeschise sau închise de-aa lungul unoor direcţii 2 2D şi 3D
înnchise sau deeschise. Pracctic obiectelee multiple ddin acelaşi
pllan pot fi „exxtrudate”.

1
acesta fiindd practic helix--ul implicit
2
un cerc
3
un arc
4
profile

319
PROIECTARE ASISTATĂ DE COMPUTER
O
Dee asemenea utilizând co omanda SW WEEP obiecttele pot fi
răssucite şi scallate.
Coomanda LOF FT se utilizzează în cazuul în care sse doreşte
creearea a obiiectelor 3D prin trasaarea a soliddelor sau
suuprafeţelor prrintr-un set de două sauu mai multe curbe ce
reaalizează secţiuni transveersale.
Seecţiunile traansversale definesc
d proofilul1 soliddului sau
suuprafeţei rezzultante. Co ontrolul currbelor şi unnghiurilor
solidelor sau suprafeţelorr trasate see realizează utilizând
caaseta de dialog Loft Setttings sau prin utilizareaa opţiunii
Prroprieties palette.
p Dee asemeneaa curbele ssecţiunilor
traansversale treebuie selectaate în ordineea prin care sse doreşte
„să treacă” solidul sau suprafaţa
s resppectivă.
Comanda REVOLVE
R s
se
utilizează pentru
p a creea
solide sau suprafeţe
s priin
rotirea obieectelor închisse
sau deschisee în jurul unei
axe. Obieectele rotitte
definesc profiluul
suprafeţei sau
s soliduluui.
Specificareaa axei se s
realizează prin
p setarea a
două puuncte saau
selectarea unui
u obiect.

o Crearea Soliidelor prin eliminarea


C e u
unor curbe2 planare
p descchise sau încchise de-a
l
lungul unorr direcţii 2D şi
ş 3D

Creareaa de noi soolide sau su uprafeţe se poate


p realizza şi prin
extrudaarea unor currbe3 planare deschise saau închise dee-a lungul
unor dirrecţii 2D şi 3D.
3
În conttinuare figurra ilustrează modalitateaa de extrudaare a unui
cerc dinntr-o spirală.. Pentru înceeput se traseaază un cerc dde aceeaşi
grosimee cu a spiraleei ce se doreşşte a fi creatăă. Dacă se trrasează un
obiect circular,
c obiectul ce va fi eliminat va v avea o diimensiune
circularră, după cuum dacă se trasează unn obiect recctangular,
obiectul de eliminnat va avea o dimensiuune rectanggulară. Se
setează butonul Sw weep, se selectează ceercul şi apooi spirala,
rezultânnd un obiect 3D de tipul unui arc sau a unei spire..

o Crearea Soliidelor prin trrasarea a soolidelor sau suprafeţelor


C s p
printr-un seet de două
s
sau mai multe curbe ce realizeazză
s
secţiuni tran
nsversale

Comanda LOFT
L se utillizează în caazul în care se

1
forma
2
profile
3
profile

3200
COMPARARE VERSIUNI AUTOCAD
doreşte creaarea a obiectelor 3D prinn trasarea a solidelor
s sau
u suprafeţelorr printr-un seet de două
sau mai multe curbe ce realizează
r seecţiuni transversale.
Secţiunile trransversale definesc
d proffilul1 soliduluui sau supraffeţei rezultannte. Controluul curbelor
şi unghiurillor solidelor sau suprafeeţelor trasatee se realizeazză utilizând caseta de diialog Loft
Settings saau prin utilizzarea opţiuniii Proprietiees palette. Pentru
P a creaa un solid priin această
metodă se creează întââi setul de secţiuni transsversale, apo oi se selecteează butonull Loft din
meniu. Se selectează seccţiunile transsversale şi see apasă ENT TER.

o Crearea su
uprafeţelor plane
p

Suuprafeţele plaanare se pot crea prin sellectarea unuiia sau mai


muultor obiectee ce formeaază una sau mai multe suprafeţe
încchise sau prin
p specificcarea colţurrilor opuse ale unui
dreptunghi.
Peentru a crea o suprafaţă planară, se apasăa butonuul Planar
Suurface din meniul
m de desenare
d şi apoi
a se selectează un
obbiect sau se specifică colţţurile unui drreptunghi.

o C
Crearea soliidelor prin în
ngroşare

Există posibbilitatea de a îngroşa o suprafaţă saau un solid.


Pentru a crrea un solid prin îngroşşarea unei suuprafeţe se
apasă butonnul Thicken n Surface diin meniul dee desenare.
Se selecteează supraffaţa şi se introduce grosimea.
Dimensiuneea grosime a solidelor se introduce pe direcţia
normală la suprafaţa resspectivă duppă cum este prezentat
p şi
în exemplu..

o C
Crearea sollidelor prin secţionare
s

Există possibilitatea seecţionării unnui solid înn vederea


creării unuuia sau mai multor
m solidde noi. Se pooate reţine
doar o partte sau ambele părţi ale soolidului.
Un solid poate
p fi secţio
onat prin maai multe metoode dintre
care:
• Prin specificarrea a două sauu trei punctee;
• Prin selectareaa unei supraffeţe sau a unnui obiect
planar.
Pentru a seecţiona un ob biect se apassă butonul Slice de pe
meniul de desenare, du upă care se seelectează obiiectul(ele)
de secţionaat. Se speciffică o opţiunee pentru secţţionare, şi
apoi se urm
măresc repereele.

8.6.2. Modifiicarea solid


delor şi sup
prafeţelor 3D

o S
Selectarea şii Manipularrea Subobiecctelor

1
forma

321
PROIECTARE ASISTATĂ DE COMPUTER
O
Printr-un suubobiect se înţelege oricce parte a unuui solid: o faaţă, o muchiee sau un vertex. Există
posibilitateaa de selectarre a unui obiiect sau de creare
c a unu
ui set de seleecţie, ce poatte include
unul sau maai multe tipurri de subobiiecte.
Fiecărui tip de selecţie, faţa, muchiee, sau vertex, îi corespundde câte un tipp de cursor.
Pentru a sellecta diversee subobiecte dintr-un soliid se apăsă şiş se menţinee apăsată tasta CTRL.
Cu ajutorul cursorului se s pot selectta colţurile, muchiile
m sau
u feţele obiecctului pentruu a selecta
mulţimea subobiectelorr ce se doreeşte a fi maanipulată, du upă care se apasă SHIF FT+CTRL
pentru a desselecta subobbiectele selecctate.
Modificareaa unui solid se realizeazză prin operaaţiile de selectare a subo obiectului mmenţinerea
cursorului pe
p acesta pânnă ce ajunge la forma dorrită.
Există de asemenea possibilitatea manipulării
m suubobiectelor prin instrum
mentele de pprindere şi
prin comenzzile MOVE, ROTATE, SCALE S şi ERASE.
E

o U
Utilizarea in
nstrumenteloor de prinderre

Instrumenteele de prindere sunt utilizate în cadrrul unei vedeerii 3D în sccopul de a reestricţiona


într-o manieeră facilă miişcarea sau rotaţia
r pe o axa
a sau un plan p a mulţimmii de selecţţie. Există
două tipuri de instrumennte de prindeere:
• mişşcarea - comaanda 3DMO OVE
• rotaaţia - comandda 3DROTA ATE
mentul de priindere move
Pentru a utiiliza instrum e se selecteaază obiectele şi subobiecctele ce se
doreşte a fi manipulatte, după caree se apasă
butonul 3D3 Move din meniul dee desenare
şi se plassează instrum mentul de prindere; se
selecteazăă axa sau planul penntru a se
na mişcareaa şi apoi se mută
restricţion
obiectele selectate.
Pentru a utiliza instrrumentul dee prindere
rotate se selecteează obiecctele şi
subobiecttele ce se dooreşte a fi m manipulate,
după caree se apasă buutonul 3D R Rotate din
meniul de desenarre şi se plasează
instrumen ntul de prinddere; se selecctează axa
pentru a ses restricţionna rotaţia, see specifică
punctele ded start şi dee final ale ungghiului de
rotaţie, şi obiectele se rotesc.

o U
Utilizarea in
nstrumenteloor de prinderre pentru mo
odificarea soolidelor

Există posibilitattea utiilizării


instrumenteelor de prrindere în cazul
modificării formei unuui solid ce derivă
d
dintru-un solid prim mitiv de tipul
cuburilor, piramideelor, sfeerelor,
cilindrilor, conurilor, torurilor. De
asemenea se pot utilizaa instrumenteele de
prindere penntru a manippula diverse forme
a solidelor primitive orriginale în scopul
s
obţinerii unnor solide coompozite. Soolidele

3222
COMPARARE VERSIUNI AUTOCAD
compozite sunt
s create din
d două sau mai multe solides individduale utilizâând una din ccomenzile
următoare: UNION, SU UBTRACT şii INTERSECT.
Pentru a sellecta o formăă individualăă a unui solidd compozit see apasă şi se menţine tastta CTRL.
Instrumenteele de prindeere se pot uttiliza de asem menea pentrru a modificaa solide sau suprafeţe
create cu unna din următooarele comennzi: EXTRU UDE, LOFT, SWEEP, şii REVOLVE E.

o A
Adăugarea de
d muchii saau faţete

Există posibilitattea de a adăuuga muchii sau de a faţetta solidele


3D existente,
e ceeea ce oferă o flexibilitate deosebită îîn crearea
oricăărei forme 3DD prin utilizaarea comenzii IMPRINT T.
Aceaasta comanndă poate combina c unn obiect cu o faţetă
rezulltând o mucchie. De exem mplu dacă o linie interssectează o
faţettă a unui sollid 3D, poatte fi „imprim mată” pe accesta după
cum se ilustreează în
figurră. Sellectarea
muchiilor şi faţetelor unnui obiect see realizează apăsând
a
tasta CTRLL.

o Delimitarea şi extragerrea de supraafeţe în


D
i
interiorul un
nui solid

Delimitareaa şi extragereea de suprafeeţe în interiorrul unui


solid se reaalizează prin apăsarea şi menţinerea tastelor
CTRL + AL LT, sau prinn selectarea butonului
b Pre
resspull
din meniull de desenaat şi apoi delimitarea
d r
regiunii
mărginite. Această
A regiiune trebuie să fie mărgiinită de
linii sau muuchii coplanaare.

8.6.3. Creareea secţiunillor pentru modele


m 3D

o C
Crearea unu
ui obiect secţţionat

Comanda SECTIONPL
S LANE realizzează un obieect secţionatt ce expune detaliile
d inteerioare ale
modelului creat
c cu obiecte 3D. Obieectul secţiunne poate fi mu utat şi manippulat în oricee punct de
vedere se doreşte.
d Aceeastă comanndă se activeează apăsând d butonul Section
S Plan ne de pe
meniul de comanda 3D D Make Co ontrol. O seecţiune într--un obiect poate
p fi obţiinută prin
utilizarea cââtorva opţiunni şi anume:
- opţiuneea Orthograp phic – reprezzintă o modaalitate rapidăă de a crea
un obieect secţionat,, prin aceastta specificânndu-se doar o orientare
ortograafică relativăă la UCS.
- opţiuneea Front – este e utilizatăă în aşa fel încât prin secţionarea
s
obiectullui taie faţa frontală a sticlei de la linnia medianăă în jos. De
notat faptul
f că pllanul transpparent reprezzintă un in ndicator al
planuluui de secţioonare. Deoaarece secţionnarea obiecctului este
realizatăă prin utilizza rea opţiuunii ortho se activează automat o
secţionaare „animattă”, ce difereenţiază vizuaal diverselee faţete ale
indicatoorului planului de secţionnare pentru diverse
d obiectte 3D.
Indicatorul planului de d secţionare poate fi, ca orice alt obiect

323
PROIECTARE ASISTATĂ DE COMPUTER
O
AutoCAD, fie mutat, fiee scalat sau rotit.
r Astfel se pot vizualliza în timp real
r diferite puncte de
vedere din interiorul sticlei.
s De exemplu
e penntru a vizuaaliza un alt punct de vedere din
interiorul stticlei indicatoorul planuluii de secţionaare este rotit 90 de gradee utilizând caa punct de
bază punctuul median al liniei de secţţionare.

o M
Manipularea
a unui obiecct secţionat

În momentuul selectării liniei


l de secţiionare existăă numeroase modalităţi de prindere şi anume:
- Base grip,
g prindereea de bază – mută întreagga secţiune a obiectului
- Directio onal arrow grip, prinderrea direcţionnată prin senssul unei săgeeţi – modificcă direcţia
planuluui de tăiere;
- Segme ent end grip p, prinderea de un capătt de segmentt – roteşte secţiunea obiiectului în
jurul prrinderii de baază;
- Menu grip g – mută secţiunea
s întrre 3 poziţii1.
Obiectelee secţionatee pot fi
manipulaate în diversse moduri
în funcţie de starea2 secţiunii
obiectuluui.
Obiectelee secţionaate pot
prezenta 3 stări duupă cum
urmează:
- poziţiaa planullui de
secţionare – afişeazăă linia de
secţionare sau indicatul
planului ded secţionaree;
- poziţiaa limită a secţiunii –
afişează liniile lateraale şi din
spate, repprezentând o suprafaţă
de tăiere 2D;
- poziţiaa în volum a secţiunii
– supraffaţa de tăiere este
afişată caa o zonă 3D3.

o A
Accesarea raapidă a meniului Sectioon Object

Accesarea rapidă
r a menniului Section Object se realizează
prin selectaarea liniei de secţiune şi apăsarea
a buttonului din
dreapta a mouse-ului.
m
De exempllu, se poatee activa saau dezactivaa animaţia
secţionării şi selecta opţiunea cee controlează afişarea
anumitor păărţi din modeelul tăiat.
De asemenea se poate acc esa oppţiunea de adăugarea a
unui segm ment jogged d unei liniii de secţiune, prin
selectarea optţiunii
o Addd Jog din meeniul rapid şi aplicarea
acesteia uneei secţiuni.

1
stări
2
poziţia
3
paralelipipeed

3244
COMPARARE VERSIUNI AUTOCAD
o G
Generarea s
secţiunilor 2D
D şi 3D

Odată ce see stabileşte unn anumit punnct de vederee al secţionăării se pot creea cu acurateeţe blocuri
2D sau 3D ce pot fi dim mensionate, utilizând oppţiunea Gene erate 2D/3D D Section ddin meniul
rapid.

8.6.4. Asisten
nţă în modeelarea 3D

o Îmbunătăţirrile generalee

Creaarea şi editarrea obiecteloor în 3D estee mult mai


facillă cu ajuto orul îmbunăttăţirilor în modelare
oferrite de versiuunea 2007.
Îmbbunătăţiri majore au foost realizatee şi sunt
dispponibile în urrmătoarele doomenii:
- un mod UCS S nou şi dinaamic;
- o îmbunătăţiire semnificaativă a grilei;;
- un suport ad diţional 3D pentru
p moduulul Ortho,
moddul polar şi modul
m prindeere de obiectee.
Se potp astfel crea
c
obieecte din orrice
faţettă planară a
unui solid 3D
3 fără modiificarea manuuală a UCS.
În cazul înn care moduul UCS dinnamic este activ a în cad drul
comenzii, prin
p simpla mişcare
m a currsorului pestee o faţă plannară
a unui solidd UCS-ul see va alinia teemporal cu aceasta
a pânăă la
terminarea comenzii.
c
În cazul în care se opttează pentru un stil de vizualizare
v „cu

umbre” sau u cadre 3D g
grila se modi ifică dintr-o formă puncttată
mă rectangullară. Noua formă a grilei
într-o form g este mai
m
adeecvată orienttării modeleloor în 3D şi aanume:
- asigură o viizualizare în perspectivă;;
- pot fi afişaate atât liniiile majore cât şi cele
minnore ale grileei;
- oferă opţiun ni color;
- poate fi asigurat coontrolul auutomat al
dennsităţii în caazul moduluui zoom in sau out -
grillă adaptivă.

o U
Utilizarea U
UCS-ului dinaamic

UCS-ul dinnamic poate fi utilizat pentru


p a creaa
obiecte pe o faţetă plannară a unui solid
s 3D fărăă
modificareaa manuală a orientării
o UCCS.
În timpul deesfăşurării coomenzii UCS S-ul dinamicc
mporar planuul XY al UC
aliniază tem CS cu faţetaa
planară a soolidului în momentul
m în care
c cursorul
este mutat oriunde
o în caadrul acestei suprafeţe.
Pe parcurssul activăriii UCS-uluui dinamic,

325
PROIECTARE ASISTATĂ DE COMPUTER
O
diversele puuncte specifiicate sau instrumente de desenare cu um ar fi celee din modul polar sau
grila sunt reeprezentate tooate relativ la UCS-ul temporal stabiilit de UCS-uul dinamic.
Activarea UCS-ului
U dinnamic se reaalizează prin apăsarea buttonului DUC CS din bara aactivă.
În exemplu următor se tastează Cyllinder din meniulm de barră. Se mişcă cursorul pe suprafaţa
planară a a solidului 3D D. UCS-ul temporar
t se comută coreespunzător orientării
o faţeetei. După
care se speccifică un punnct de centru pentru baza cilindrului, o rază şi o înnălţime.
După cum se prezintă în î exemplu, direcţia axeei X este parralelă la mucchia faţetei ppe care se
mişcă cursoorul. Prin utilizarea
u UC
CS-ului dinaamic împreu ună cu comaanda ALIGN N oferă o
reorientare a obiectelorr mult mai rapidă
r şi eficcientă. De asemenea moodul UCS dinamic se
poate utilizza împreună cu comandaa UCS penttru a specificca un nou UCS U în 3D mult mai
acurat.

o E
Explorarea o
opţiunilor dee asistenţă pentru
p obiectte 3D

Aceasta verrsiune este îm


mbogăţită cu următoarelee instrumentee de lucru penntru modelarrea 3D:
- opţiuni pentru grilă de lucru;
- urmărirrea pe direcţia Z;
- modul ortho
o pe direecţia Z;
- modul de d prindere a obiectelor cu
c UCS dinamic.

Urmărirea pe
p direcţia Z
La versiuunea 2007 prin com manda Auto oTrack -
direcţionaarea polară saau direcţionaarea în cazull prinderii
obiectelorr, se poate direcţiona
d pee Z ca şi pe direcţia
planului XY.
X Analog g, în cazul în î care moddul Ortho
activat, pooate fi blocatt pe direcţia Z.
Z

Modul de prindere de obiecte


Modele 3D 3 dispun de d un număăr mult mai mare de
locaţii possibile pentru modul prinddere de obieccte. Pentru
a simplififica modelarrea în cazul activării UCS-ului
dinamic, se poate setta o opţiunee în caseta de dialog
pentru a ignora mod dul prinderee de obiectee în faţa
posterioarră a solidelorr 3D.

8.6.5. Managgement

o ÎÎmbunătăţirrile în
m
managemen ntului fişieerelor de
r
referinţă extterne

Paleta de referinţe
r extterne permitte ataşarea,
organizareaa şi managem mentul tuturoor fişierelor
de referinţă asociate dessenului curennt.
Se pot ataşşa şi manageera desene de d referinţă
(şabloane) (Xref),
( DWWF ataşate, im maginile de
tip tipar impportate.
Paleta de reeferinţe exterrne permite:
1. Ataaşarea de noii fişiere de reeferinţă sau

3266
COMPARARE VERSIUNI AUTOCAD
reacctualizarea reeferinţelor exxistente de laa butoanele de
d instrumennte.
2. Mannagementul fişierelor reeferinţă existtente în caseeta File References cee poate fi
setaată fie de tipuul List modde sau Tree mode.
m
3. Vizzualiza inform maţii privindd fiecare fişieer de referinţă din caseta Details/Preview.
Proprietăţilee unui anum mit fişier dee referinţă seelectat sunt afişate în Details
D modde, iar în
Preview mode
m sunt afiişate în miniaatură imaginiile fişierele de a fişierelor selectate.
d referinţă ale

8.6.6. Interfaaţa utilizatoor

o P
Prezentarea noii interfeţţe de lucru

Acceesarea şi utillizarea caraccteristicilor 3D


3 în AutoC CAD 2007
devinne mult mai facilă prin in ntroducerea:
- meniului
m de desenare
- paleta
p de cullori
- spaţiul
s de opperare 3D
Utiliizând noua innterfaţă 3D se s poate vizuualiza, accessa şi primi
inforrmaţii despre noile caraacteristici 3D D încă de laa lansarea
AutooCAD.
Menniul de desennare este co onstituit dintrr-un set de casete de
contrrol organizaate pe funcţii. De exempple, caseta dde control
din partea
p superiioară a meniiului conţinee comenzi prrin care se
creeaază şi se moodifică solid dele 3D; ceaa de-a doua categorie
conţiine comenzile
utilizzate pentru baleierea
modelelor 3D. De aseemenea, se pot ataşa meniul m de
desenare saau alte paletee fie de parteea stângă sauu de partea
dreaptă a zoonei de deseenare. Acesttea pot fi deschise sau
închise odattă cu mişcareea cursoruluii deasupra loor.
În cazul în care se apassă pe caseta de control, aceasta se
extinde şi se
s afişează o serie de coomenzi adiţiionale. De
asemenea câteva
c din casetele
c de control, în momentul
când sunt extinse li se ataşeazăă automat paleta de
instrumentee asociată.
Fiecare dinttre aceste cassete de dialoog poate fi paarticularizat prin asignareea propriilorr palete de
instrumentee.
Există posibbilitatea unei comutări facile
fa între innterfaţa clasiică AutoCAD D şi noua interfaşă de
modelare 3D D.
Din meniul Workspace es se poate opta
o pentru:
- modelarre 3D;
- interfaţaa AutoCAD clasică;
- propriul spaţiu de luucru personallizat.
Spaţiul de lucru de moodelare 3D conţine doaar bara de instrumente, meniurile şşi paletele
l lucrul în 3D,
referitoare la 3 iar acele componentee ale interfeţeei care nu sunnt cerute în m modelarea
3D sunt asccunse, maxim mizând astfell zona de ecraan disponibilă pentru luccru.

o A
Alegerea unui spaţiu de lucru adecvvat

La lansarea AutoCAD 2007


2 iniţial se poate alegee unul din ceele trei spaţii de lucru:

327
PROIECTARE ASISTATĂ DE COMPUTER
O
- Modelaare 3D
- AutoCA AD clasic
- AutoCA AD implicit
Oricum spaaţiul de lucrru ales iniţiaal se poate modifica
m oricând în timppul operării,, existând
posibilitateaa de a defini şi salva spaţţii de operaree personalizaate.
Observaţie e: Opţiunea AutoCAD im mplicit este afişată doarr în cazul înn care sunt ttransferate
setări dintr-o versiune AutoCAD
A antterioară.

o S
Spaţiu de opperare de tip Modelare 3D
D

Spaţiul de lucru
l de tip Modelare
M 3D conţine nooul meniu dee desenare prin
p intermeddiul căruia
se pot accessa facil noile caracteristicci 3D.

Zona de dessenare din caadrul acestuii spaţiu de luucru afişeazăă o paletă dee culori pentrru fundal,
un plan orizzontal sau unu plan de luucru – planuul XY al UC CS – şi o griilă nouă recttangulară.
a vizualizaarea 3D cât şi
Aceasta îmbbunătăţeşte atât ş construcţiaa de modele 3D.
3
De asemenea noul curssor 3D oferă informaţii despre orieentarea UCS S. În aceastăă versiune
tabu-rile modelului
m sau straturiloor acestuia sunt înloccuite cu
butoane în meniul
m de ba
ară. Dacă înssă se preferă utilizarea ta
ab-urilor
există posibbilitatea commutării la accest mod dee lucru prin tastarea
butonului din
d dreapta în timpul selectării
s buttoanelor mo odel sau
straturi.

o O
Operarea cu
u meniul de desenare

Opţiunile paaletei de insttrumente sunnt accesibile din meniurille rapide


prin apăsarrea butonuluui din dreaapta în tim mpul poziţion nării în
diferitele zoone ale paleteei de instrum
mente.
Aceste opţiuuni sunt:

3288
COMPARARE VERSIUNI AUTOCAD
- Allow Docking
D – coomută capaciitatea de a deecupa sau ataaşa paleta dee casete de luucru;
- Anchorr Left sau Riight – ataşeazză paleta de un tab de ancorare
- Auto-hiide – controlează afişareea paletei ;
- Transpparency – seetează afişareea instrumenttelor paletei ca fiind actiive;
- Views – modifică sttilul de afişaare şi mărimeea butoanelorr în paleta dee instrumentee;
- Com mutarea din modul
m floatin
ng în modul d docked –
se trage din
d meniu, bara
b ce conţinne titlul, cătrre zona de
desenaree;
- Com mutarea din modul
m docke ed în modul floating –
se trage din meniu, the move handle în interiorul
zonei de desenare;
- Ancoorarea docke ed dashboa ard – se apassă butonul
dock în colţul stângaa sus;
- Ancoorarea floatin ng dashboa ard – se apassă butonul
din dreappta a barei de titlu apoii se tasteazăă opţiunea
anchor;
În figurăă se ilustreaază meniul ancorat rezultat prin
mişcareaa cursorului peste
p tab-ul ancorat.

8.6.7. Efecte

o L
Luminozitat
tea - Utilizarrea Slidere-llor

Când soarelle distribuie o lumină înn viewport puteţi


p folosi cursoarele sun pentru a ajusta, în
calendarul asociat,
a ziua,, anul şi timppul curent.
În figură see observă efeectul schimbăării timpului din zi prin afectarea
a ungghiului luminnii solare,
desenul fiinnd iluminat coonform poziţiei soarelui.

329
PROIECTARE ASISTATĂ DE COMPUTER
O
o Materiale (T
Texturi)

Editarea Materialelor
M
Caseta Matteriale afişează paleta tuuturor materrialelor dispo onibile
pentru deseenare. Materrialele sunt adăugate auutomat în caazul în
care se utillizează un innstrument dee tip materiaal pentru aplicarea
unui materiial unui obiiect. Proprieetăţile materrialul selectaat sunt
afişate în editorul de d materialle Materia al Editor. Există
posibilitateaa modificăriii proprietăţillor materialuului şi vizuaalizarea
imediată a efectului
e acestor modificăării asupra obbiectelor.

Aplicarea materialelor
m din paleta de
d instrumente
Exiistă posibiilitatea
apliicării unui
ma aterial unui obiect
sauu unei faţţete a
aceestuia utilizând paleta dee instrumentte. Astfel,
se selectează materialul
m d
dorit dintre tab-urile
paleetei de in nstrumente şi apoi se trage
insttrumentul material
m peste obiectul ssau faţeta
dorrită. Se poatte realiza accest lucru pprin dubla
tasttare pe butonul
b maaterial resppectiv şi
utillizarea cu
ursorului p
paintbrush pentru
seleectarea obiecctului sau faţţetei dorite.

Utilizarea Scalei
S Real-WWorld pentru u Bitmaps
La aplicareaa unui materrial asupra unnui obiect saau a unei faţeete a acestuiaa se poate utiiliza scala
Real-World d. Scala Rea al-World aplică materiallul unui obieect utilizând valori ale ggrosimii şi
înălţimii reale. Valorilee Real-Worrld pot fi seetate în caseta de dialogg Adjust Bitmap. La
selectarea unei
u opţiuni dind lista Unitts, se activeaază scala Rea al-World.

8.6.8. Stiluri vizuale

o U
Utilizarea sti
tilurilor vizu
uale

Un stil vizual controleează afişareaa într-un


viewport. UnU stil vizuaal se poate crea
c sau
modifica prrin modificaarea propriiloor setări
în caseta Viisual Styles Manager.
- Face settings
s conntrolează modul
m de
afişare al culoriloor sau umbrrelor pe
faţetelee obiectului.
- Environ nment setttings activează sau
dezactiivează diveersele umbbre sau
fundaluuri.
- Edge settings sppecifică caree dintre
muchiii sunt afişatee şi ce moddificatori
de mucchii sunt apliicaţi.

3300
COMPARARE VERSIUNI AUTOCAD
Face Colorr Mode
Face Colorr Mode conttrolează moddalitatea în caare culorile sunt
s afişate pe
p o suprafaţăă.
- Upper left (stânga sus)); afişează
culoorile obiectuluui normal;
- Upper rig ght (dreapta sus):
afişeează monocrromatic toatte faţetele
obieectului în acceeaşi culoarre şi grad
de umbrire;
u
- Lower left (stânga
( jos): utilizează
aceeeaşi culoare de umbrirre tuturor
faţettelor prin moodificarea vaalorilor de
saturraţie şi nuanţţă a culorii;
- Lower rightt: desatureazză culorile
atenuate ale faţţetelor prin reducerea
valoorii de saturaaţie a acestoora prîntr-
un
n
proccent
de 30%
%.

Face Style
Face Stylee controleazăă modalitateaa de umbrire a faţetelor:
- Real esste opţiunea ce produce asupra obieectelor un effect
cât maii realistic;
- Gooch atenuarea contrastului
c prin utilizarrea unor tonnuri
calde pentru
p zonelee luminoase şi tonuri recci pentru zon
nele
întuneccate.

Ground Shaadows
Setarea umbbrelor controolează orice umbră afişattă. Pentru a îmbunătăţii
î p
performanţa în timpul
luccrului în cazzul în care um
mbrele nu
sunnt necesarre se dezzactivează
aceeastă opţiunee.
Ummbrirea plannului orizontaal poate fi
afiişată în sittuaţiile în ccare este
acttivată opţiiunea impllicită de
lumminare a obiectelor. În siituaţiile în
carre umbrele se suprapunn acestea
apar mai închisse.

Full Shadows
Full Shado ows reprezinntă practic umbre
u al unoor obiecte
în interiorull altor obiectte. Luminareea în viewpo ort trebuie
să fie luminni create de utilizator
u – peentru ca full shadows
să fie afişat.
În paleta proprietăţi
p se poate setaa pentru oriice obiect
proprietateaa Shadow Display
D – ummbrele afişatee, umbrele
recepţionatee sau umbrelle ignorate.

331
PROIECTARE ASISTATĂ DE COMPUTER
O
Modificatorri de muchiii
Modificatorii
M de muchii de tipul
Overhang
O ş Jitter prroduc un
şi
asspect al moddelului ca şi cum ar fi
în
ntr-o fază connceptuală.
- Jitter – faace liniile săă apară ca
şi cum ar fi scchiţate cu un creion;
- Overhang g – produce un alt tip
dee efect al dessenului de mâână.

o A
Aplicarea un
nui stil vizuaal unui Viewp
wport

Pentru a aplica un stil vizual


v unui viewport
v cureent fie se apasă de două ori pe butonnul visual
style de pe paleta de insstrumente saau în Visual Styles Manager, sau see trage opţiunnea visual
style peste orice viewpport şi se seteează acest viewport
vi ca fiind
f cel cureent. Exempluu prezintă

stiluri de vizzualizare apllicate la 4 vie


ewport-uri înn cadrul acelluiaşi desen.

o A
Adaptive deggradation

La activarea opţiunii adaptive deg gradation, înn situaţiile în


î care perfoormanţa lucrrării scade
sub un niveel specificat sau
s implicit, se produce dezactivarea
d efectelor înttr-o ordine prestabilită

3322
COMPARARE VERSIUNI AUTOCAD
până când performanţa
p l
lucrării revinne la un nivell acceptabil.
În plus prinn specificareea unui nivell de perform manţă măsuraat în cadre pep secundă ((FPS), se
poate modifica ordinul de degradarre şi se pot selecta anum mite obiecte ce nu ar treebui să se
degradeze.

8.6.9. Îmbun
nătăţirea Naavigaţiei

o I
Introducere în mediul dee navigare

mediul modurrilor de naviggare 3DWallk şi 3Dfly se


Prin interm s poate „me erge” sau „zzbura” în
interiorul unnui model prrin apăsarea unui set de taste
t rapide, cum ar fi tasstele săgeţi, îîn aceeaşi
maniera în care se poaate naviga în î lumea triddimensionalăă a jocurilorr video. Exiistă astfel
posibilitateaa mişcării caamerei înainnte, înapoi, dreapta stân
nga prin utilizarea tastellor săgeţi,
precum şi posibilitatea
p m
modificării ta
arget-ului caamerei prin utilizarea
u moouse-ului.
În modul „zbor”
„ direccţia mişcării nu este meenţinută de-aa lungul plannului XY caa în cazul
modului „m mers”.

o A
Animaţia un
nei secvenţe de
d mers

În versiunea 2007 se poate


înregistrra, salva şi redă
animaţiaa unei „p plimbări”
într-o scenă. Înregistrarea se
realizeaază prin plasarea
camereii pe o trraiectorie,
setarea înălţimii laa care se
găseşte camera, pornirea
camereii şi vizualizzarea unui
preview w.
La înreggistrarea uneei animaţii
pot fi setate urrmătoarele

proprietăţi:
- Visual style/Rende er Preset applicat animaţiiei;
- Formatuul fişierului de
d ieşire şi reezoluţia acesstuia;
- Număruul de cadre pep secundă.

o U
Utilizarea loocalizatorulu
ui de poziţie

Prin utilizaarea Position


n Locator poate fi detterminată în
n orice
moment pooziţia curenttă în timpul navigării într-un mod del. În
imaginea prreview, poziiţia curentă este
e marcată printr-un ind
dicator
vizual. Duupă cum se s poate observa pozziţia curentăă este
reprezentatăă printr-un punct. Dee asemeneaa se poate afişa

333
PROIECTARE ASISTATĂ DE COMPUTER
O
indicatorul ţintă, ce repprezintă pracctic un câmpp de vedere şi poziţia ţiintă. Pe măssură ce se
înaintează în model indiicatorul vizuual din imagiinea preview
w se auto - reepoziţionează dinamic
pentru a afişa noua poziiţie. Se poatee de asemeneea aplica un anumit
a stil vizual,
v ajusta gradul de
transparenţăă şi seta culooarea indicatoorului vizuall.

o A
Actualizarea
a funcţiilor camerei
c

Crearea un
nui obiect cam
meră

În versiu unea 2007 sunt


s disponibbile două
noi modaalităţi de a crrea camera obbiect:
- prin utilizarea buutonului Camera din
meniu;
- prin suprapunerrea opţiuniii camera
object dind paleta de d instrumente peste
editorul de
d desenare.
La utilizaarea oricăreii din aceste m modalităţi
vor fi afişate prompt-ere pentru
specificarrea locaţieei camerei, locaţiei
ţintei, lun
ngimea lentillelor şi înălţiimea.

Managerrierea propriietăţilor cam


merei
În aceasstă versiunee există poosibilitatea
editării proprietăţiloor pentru o cameră.
Utilizând paaleta Camerra Propertie es se
poate modiffica numele,, poziţia cammerei,
poziţia ţinntei, unghiul de rootire,
lungimea leentilelor preccum şi câmpuul de
vedere al acesteia. See pot ajustaa de
asemenea planurile
p de tăiere anterioare
sau posteriooare.

Modificareaa vizibilităţiii camerei


Utilizând meniul
m de opţiuni
o Cammera
sau meniul de desenaree se poate activa
a
sau dezactiiva afişajul global al unei
camerei înttr-o imaginee. În situaţiile în
care camerra nu este vizibilă
v simbbolul
acesteia în desen
d nu estee activ.

o Î
Îmbunătăţir
rile DWF pubblishing

Streamline Publishing Workflow

3344
COMPARARE VERSIUNI AUTOCAD
Utilizând opţiunea 3 3D DWF
publishing,, se pot geneera fişiere
Design Web W Format (DWF)
pentru diverse modele
tridimensionnale. Fişiereele DWF
reprezintă o alternativăă elegantă
de prezenntare a pproiectelor
realizate în AutoCAD cchiar şi pe
staţiile pe care
c nu existtă instalat
mediul AuutoCAD. Înn această
versiune see poate creea fişiere
3DDWF prrin comandaa Publish,
ce oferă beeneficiile funncţiilor de
tip Publishh, cum ar fi ppublicarea
paginilor multiplee sau
combinareaa unor fişieree 2d dwf
şi 3d dwf într-un singur fişier
dwf. De asemenea pot fi
publicate diverse materiale
indiferent dacă
d există anumite lim mitări în ceeea ce priveşte anumitte coresponddenţe sau
proceduri de textură ale materialelorr.

o A
Animaţie şi navigare
n în cadrul modeelor 3D

Definirea trraiectoriilor de mişcare


În această versiune
v exisstă posibilitaatea de
animaţie dintr-un
d anuumit viewp port a
camerei dee-a lungul unei u traiectoorii de
mişcare. O traiectorrie de mişcare m
defineşte traseul
t cameerei sau o ţintă
pentru cam meră. Ca şi traiectorrii de
mişcare poot fi specifficate oricarre din
următoarelee entităţi: linnii, cercuri, arcuri,
a
elipse, polillinii şi splinee. În acest exemplu
se prezintă modalitatea
m de animaţie a unei
camere dee-a lungul unei u traiectoorii de
mişcare de tipul
t unei linnii.
În primul râând se speciffică un punctt sau o
cale corespunzător cam merei după care se
asociază unn punct sau o cale ţinteei care
ulterior pott fi salvate pentru
p o eveentuală
reutilizare.
Se pot seta următoarele
u proprietăţi pentru
p animaţţie:
- durata animaţiei
a în secunde;
s
- număruul de cadre pee secundă;
- număruul total de caddre;
- stilul viizual / rende er preset apllicat animaţiei;
- formatuul fişierului de d ieşire şi reezoluţia;
După specifficarea locaţiei de ieşire şi denumirea fişierului animaţiei,
a în timpul creărrii acestui
fişier este prezentat un preview
p al annimaţiei.

335
PROIECTARE ASISTATĂ DE COMPUTER
O

Utilizarea setărilor
s Presset Render
Renderr preset repprezintă o coolecţie de
setării de
d randare predefinite
p uutilizate la
randareaa unui model. Se poot utiliza
d randare saau se pot
presetării standard de
crea alttele personaalizate prin utilizarea
Renderr Presets Ma anager. Duppă cum se
observă în exemplu fiecare
f rendder preset
are pro opriile setăări ce inffluenţează
calitateaa imaginii rendered. Cele trei
imagini prezentate utilizează respectiv
Draft, Medium
M and Presentatio on quality
standarrd presetss. În caddru unui
presetăriilor particuulare pot ffi făcute
diverse ajustări de finaţe
f utilizâând paleta
Advanc ced Renderr Settings, Render
Presets s Manager sau Rende er control
panel diin meniul dee desenare.

Randarea folosind
f ilum
minarea globbală
Iluminaţia globală
g îmbuunătăţeşte reaalismul unei
scene prin simularea interreflecţiiilor luminii,
iluminând scena
s cu o lumină refleectată într-o
manieră difuză. Activaarea acestei opţiuni se
d pe paleta Render
realizează de R Setttings.
Iluminaţia globală poaate determinna randareaa
diverselor zone
z de tippul colţurilorr întunecate
sau a variaţţiilor de lum mină de frecvenţă joasă.
Există possibilitatea reeducerii sauu eliminării
acestor efeccte prin actiivarea Finall Gathering g
din paleta Render Settings, opţiune ce
determină o creştere a numărului de raze
utilizate penntru a calculaa iluminarea globală.

8.6.10. Resursse comune

o A
Autodesk Vaault

Accesul vault
v pentrru înscriereea
clienţilor
Autodesk Vault constituie un sisteem
de administtrare a dateloor la utilizareea
în grup a resurselor comune caare
distribuie datele
d de prroiectare înttre
membrii echhipei unui prroiect.
Vault reprezintă un fişiier
managemennt şi sistem de control al
versiunilor de lucru utilizate de d

3366
COMPARARE VERSIUNI AUTOCAD
ingineri carre pune în corespondenţ
c ţă datele de proiectare provenite
p de membrii unnei echipe
într-un meddiu central şi securizat de colaborare.
Implementaarea vault în AutoCAD este e sintetizattă prin două elemente cheeie:
- Vault Data
D Manag gement Servver;
- Vault Client.
C
Opţional see poate insttala de asem menea Vaullt Office Ad dd-in, ce permite
p acceesul vault
produselor Microsoft
M O
Office (Word d, Excel).
Data Manaagement Servver stochează copiile prinncipale ale tu uturor docummentelor şi pproiectelor
astfel încât acestea să pooată fi accesaate şi adminiistrate facil de
d către echippa de proiecttare.
Vault Cliennt include Va ault Explore er, o aplicaţiee independen ntă, ce oferă instrumentel
i le utilizate
pentru acceesarea dateloor stocate în î Data Ma anagement Server. Prrin intermeddiul Vault
Explorer se poate:
- adminisstra vault şi conturile
c utillizator;
- adauga şi verifica fiişierele de intrare şi ieşiree;
- muta şi redenumi fişşierele;
- vizualizza istoria oriccăror modificcări survenitte în proiect;
- ataşa unnul sau mai multe
m fişiere şi crearea unnei asocieri între
î acestea;;
- verificaa cea mai recentă versiunee a proiectului.

8.6.11. Suporttul DWF

o A
Ataşarea fişiierelor DWF
F ca suport

În cadrul veersiunii 20077 există posibbilitatea ataşăării ca fişieree externe a fiişierelor DW WF la cele
DWG utilizzând comandda DWFATT TACH. La seelectarea unu ui fişier DWF F din caseta de dialog
Select DWFWF File este afişată caseeta de dialogg Attach DWF Underllay, casetă îîn care se
definesc paarametrii şi alte
a detalii ale a fişieruluii suport DW WF ataşat. Înn situaţiile îîn care se
ataşează unn fişier DWF F ca suport există
e posibillilitatea mutăării, rotirii şii scalării aceestuia, dar
mb modificarrea geometrieei fişierului DWF.
nu este posiibilă în schim D
Implicit la inserarea unnui suport DWF D
într-un dessen se poatte specificaa un
punct de innserţie după care se mennţine
apăsat curssorul pentruu setarea sccalei.
Dacă existăă însă o anum mită locaţie, scală
s
sau un ungghi de rotaaţi dorite poot fi
definite aceeste setări în caseta de diialog
Attach DW WF Underlayy.
Există dee asemeneea posibilittatea
ajustării contrastului,
c gradului de
decolorare sau a setăărilor
monocromaaticii pentru un fişier suuport
DFW ataşaat. Aceste seetări influenţţează
gradul de luminozitate
l sau matizarre al
liniei de lucru
l într-unn suport DWFD
raportat la culoarrea fundallului
fişierului. Aceste
A setărri sunt acceesate
prin paleta DWF Unde erlay Properrties
sau utilizând comanda DWFADJUS
D ST.

337
PROIECTARE ASISTATĂ DE COMPUTER
O
o E
Editarea fişiierelor ce con
nţin suportu
uri DWF

În AutoCAD D 2007 existtă posibilitattea plotării saau editării fişierelor deseen ce au ataşate fişiere
suport DWF F ca fiind fişşiere DWF. În situaţiile în care un fiişier de deseenare ce conţţine ataşat
un suport DWF
D este plootat sau editaat ca fişier DWF
D nou, în noul fişier DWF
D plotat sau editat
conţine oricce geometrie a DWF ce estee vizibilă.

8.6.12. PDF

o C
Crearea de fişiere
f PDF

Aplicând mediul
m PDF unui fişier DWG, deseenele pot fi transformate în fişiere Portable
Document Format (PD DF). Astfel datorită
d faptuului că soft-u mate PDF,
urile ce vizuaalizează form
de tipul Addobe Reader, pot fi desccărcate gratuuit de pe web bsite-ul Adoobe, un deseen poate fi
distribuit viirtual în acesst format oricui client nee fiind necesar ca acesta să dispună dde mediul
de lucru AutoCAD.
A D
Deoarece fişiierele PDF sunt generaate într-un format f de tiip vector,
desenele sunnt reprezentaate cu o acurrateţe deosebbită.
Ca modalittate de crearre a fişiereloor PDF se selectează fişierul f DWG G ca fiind PPDF.pc3,
opţiune ce ses găseşte înn caseta de dialog
d PLOT T. Se pot setta de asemennea rezoluţia fişierului
PDF sau orice alţi paraametrii, cum m ar fi dimennsiunea hârttiei şi scala. După generrarea unui
fişier PDF acesta
a poate fi vizualizatt şi printat dinn mediul Ad dobe Reade er.

8.7. DIFEREN
NŢE AUTO
OCAD 20
008

8.7.1. Scale Annotation


A ns

o O
Overview

Scale Annootations Autoomatically


Procesul dee scalare a adnotărilor pentru obieecte se
1
face automaat în layout viewports
v şi model spacee2.
Obiectele foolosite frecveent pentru a adnota desennele au
o propriettate numităă Annotatiive. Cu această a
proprietate puteţi autom matiza proceesul de scallare al
adnotăre pentru a avea o dimennsiune coreectă la
plotare. În general definiţi
d adnootările funcţţie de
dimensiunea hârtiei. Dim mensiunea adnotărilor
a depinde
de scala adnnotărilor setaată pentru ferrestrele view
wport şi
spaţiul moddel.

Set Annotattion Scale


Scalarea cootelor de tipp notaţii estee o setare care
c se
salvează cu model spacee3, layout vieewports1 şi model
m view2.

1
zona din deesen vizualizattă în viewportt
2
spaţiu de deesenare AutoCCAD
3
zona din deesen vizualizattă în viewportt

3388
COMPARARE VERSIUNI AUTOCAD
Când obiecteele de tip
C
a
adnotare sunnt create,
a
acestea sunt scalate pe
b
baza setăriloor curente
d
de scală
coresppunzătoare
a
acestor tippuri de
o
obiecte şi suunt afişate
a
automat la
d
dimensiunea corectă.
Înainte de a adăuga
o
obiecte de tipp adnotare
în desen seetaţi scara peentru acesteaa la fel cu scara
s viewport-urilor în care doriţi ca aceste
obiecte să fie afişate. Astfel scalarea obiecteelor de tip adnotare see va face auutomat la
dimensiunea corectă.

o A
Annotative O
Objects

Create Ann notative Objeectcs


Puteţi activva proprietaatea Annotiive
pentru urmmătoarele obiecte care suunt
de obicei utilizate penntru a adnoota
desene:
- Text
- Mtext
- Dimenssions
- Hatchess
- Tolerannces
- Multileaders
- Leaderss
- Blocks
- Attributtes
Când propprietatea Annotive
A esste
activă3, aceeste obiecte sunt denumite
t adnotare. Multe din casetele
obiecte de tip c de dialog folositee pentru creaarea acestoraa au acum
butoane de validare Annotative tip check box, în î care puteţţi specifica ca
c obiectul crreat să fie
de tip adnootare. Puteţi, de asemeneea, să schim
mbaţi tipul ob biectelor exiistente în tipp adnotare
schimbând proprietatea annotative a acestora înn panelul Pro operties. Obiiectele de tipp adnotare
afişează un icon special la poziţionaarea mouse-uului pe ele.

Use Annotaative Styles


Minimizarea paşilor penntru adnotarrea desenelorr folosind stiilurile de adnnotare.
Stilurile muultileaders, dimension
d şi text adnotattive pot creaa obiecte de tip adnotare. Casetele
de dialog foolosite pentruu a defini aceste obiecte conţin butoaane de validaare Annotativve în care
puteţi speciifica ca acesste stiluri să fie de tip addnotare. Stilurile Adnotaative afişeazză un icon
special înainntea numeluii lor atât în casetele
c de diialog cât şi în
n panelul Prooperties.

1
zona din deesen vizualizattă în viewportt
2
zona de dessenare vizibilăă din spaţiul model
m
3
setată pe yees

339
PROIECTARE ASISTATĂ DE COMPUTER
O

Use Annotaative Blocks


Folosind attributele şi blocurile
b de tip adnotatiiv
puteţi combbina mai muulte obiecte într-un
î singuur
obiect care va
v fi utilizat la adnotareaa în desen.
De exemplu dacă dooriţi să follosiţi obiecte
geometrice pentru adnnotare combinaţi-le într--o
definiţie dee bloc de tip adnotatiiv. Puteţi de d
asemenea crea
c atribute adnotative pentru
p blocuuri
care nu suunt de tip adnotare.
a Foolosiţi această
opţiune cânnd doriţi ca geometria
g din block să fie
f
afişată pe hârtie la scara viewpport-ului, daar
atributul texxt să fie afişşat la scara hârtiei
h definită
de atribut.

Display Ann notative Objjects


Butonul penntru vizibilittatea adnotărrilor în desenn sau bara dee stare seteaază afişarea oobiecte de
tip adnotaree. Toate obieectele de tip adnotare,
a sauu doar aceleaa care suporttă scara stiluului curent
de adnotaree, pot fi afişşate. Astfel este
e redusă nevoia de a utiliza stratturi multiplee pentru a
administra vizibilitarea
v adnotărilor pentru
p modell space şi lay
yout viewporrts.

Add and Modify


M Scale Representati
R ions
Când creaţi obiecte de tipt adnotare în desen elee suportă o siingură scară de adnotaree: scara de
adnotare carre este curenntă atunci cânnd creaţi obieectul.
Obiectul pooate fi acualizzat pentru a suporta
s scării de adnotaree suplimentarre.
Dacă aţi schhimbat scaraa de adnotaree în aplicaţiee sau în bara de stare a deesenului puteeţi selecta
şi actualizaa obiectul diin desen penntru a-l aducce la scara curentăc prinn selectarea MModify >
Annotative Object Scalee > Add Currrent Scale. Observaţi
O cumm obiecul estte afişat acumm la scara
curentă. Accest obiect suportă
s acum
m două scărri. Obiectele de tip adnootare afişeazză diferite
reprezentării ale scării de adnotaree bazate pe scările de adnotare a supportate de oobiect. De
exemplu daacă un obiectt suportă douuă scări de adnotare
a acessta are două scări de reprezentare.
Când sellectaţi un obbiect care
suportă maim mult dee o scară,
scara de adnotare carre suportă
scara currentă este repprezentată
supralumminat. Cealaaltă scară
de repreezentare a oobiectului
este afişaată în mod întunecat.
Puteţi foolosi grip-uriile pentru
a modifica scara de
reprezenttare indiviiduală a
obiecteloor de tip adnotare.
Aceasta vă perm mite să
modificaţi poziţia
p indiviiduală a fiecăărei scări de adnotare pen ntru acelaşi obiect.
o
De exempluu aţi vrea caa acelaşi textt să se afişezze în două lo ocuri diferitee în două vieewport-uri
diferite. Settaţi scara de adnotare peentru reprezeentarea de sccară pe care vreţi să o m modificaţi.
Folosiţi gripp-urile pentruu a modifica scara de repprezentare.

o O
Orientation f Annotatiions
for

3400
COMPARARE VERSIUNI AUTOCAD
Set Orientaation for Ann
notations

Blocurile şi textele de tip


adnotare poot fi setate astfel
a încât
orientarea lor
l să coresspundă cu
orientarea ferestrei. Orientarea
O
adnotărilor de tip haşură
corespunde în mod im mplicit cu
orientarea ferestrei. Chiar
C dacă
vederea viewport-ullui este
răsucită sauu neplanară orientarea
acestor obbiecte în ferestrele
viewport se va pootrivi cu
orientarea ferestrei.
f Puteeţi seta orienntarea pentruu blocuri şi teext din panellul Propertiees sau prin
casetele de dialog Blockk Definition sau Style.

8.7.2. Dimen
nsions and Leaders
L

o D
Dimension E
Enhancemen
nts

General Dim
mension Enhancementss
Seveeral general enhancemennts to dimenssions have
beenn added th hat include tolerance aalignment
options, quadran nt support foor angular dim mensions,
and arc extensions for radial dimensions..
Dimmension Toleerance Alignnment- You can align
stackked tolerancces using either
e the opperational
symmbol or deccimal separrator. The tolerance
alignnment is parrt of a dimeension style or can be
set individually y for a dimension. Angular
Dimmension Textt - You can control
c the loocation of
the text of angu ular dimensioons outside the angle
beinng measured.. If the text iss specified ooutside the
anglle, an extend
ded dimensioon arc is creaated to the
dimension text. Arc Extensiion Option ffor Radial
Dimmensions - Yo ou can speciify the text loocation of
radiuus, diameterr, and joggeed radial diimensions
withh an arc exten
nsion line.

Add a Breaack Dimensioon


You can brreak dimenssion or extennsion lines
where they intersect geoometric objeccts or other
dimensions. While this is not a reccommended
drafting praactice, it cann become neecessary in
some circummstances.

Create a Inspecion Dim


mension

341
PROIECTARE ASISTATĂ DE COMPUTER
O
You can add an inspectionn
dimension to existingg dimensionn
objects. Forr example, an
a inspectionn
dimension can be added a to a
dimension to indicate how often a
critical dimension or tollerance valuee
of a part beeing manufacctured for ann
industrial machine should bee
checked too ensure thhat the parrt
meets or exceeds all qualityy
assurance reequirements..

Add a Jog tot a Linear Dimension


D
You can addd a jog line to a linear
dimension to reppresent a
measuremennt whose acctual value iss
not the sam me length between thee
extension lines.
l Jogged dimensionn
lines are typpically used to indicate when
w a dimeensioned object is shownn smaller thaan the true
length of the object beinng dimensionned.

Adjust the Distance


D Bettween Dimen
nsions
You can adju
Y ust the spaccing betweenn parallel
liinear and ang gular dimenssions automaatically or
based on a sp pecified spacing value. AAlong with
addjusting the spacing of dimension llines, you
caan also alignn dimension lines with eeach other
by entering a spacing valuue of 0. Beinng able to
addjust the spacing beetween or aligning
d
dimension liines eliminaates the prrocess of
having to recrreate the dimmensions, or use grips
too align and reposition
r thee dimension lines one
by one.

o M
Multileaders
s

Create a Multileader
M
A multileadder is a leaader object that has more m
options. Wiith a multileaader, you can place a leaader
object head first, tail firsst, or contentt first.

Arrange Multileaders
M
You can atttach multiple leader linnes to the
same note;; multiple notes
n can bbe evenly
spaced and quickly alignned.

3422
COMPARARE VERSIUNI AUTOCAD
Organize a drawing by b using thhe MLEAD DERCOLLEC CT commannd to groupp several
multileader objects withh block conteent and attachh them to a single
s leader line.

Align Multiileaders
With the MLEADERAL
M LIGN comm mand, you caan align seveeral
multileader objects aloong a speciified line. The T horizonntal
landing willl be placed along
a an inviisible line thhat you speciify.
Arrowheadss will remainn where they were originaally placed.
When you align the multileader
m obbjects, you can also spaace
them.
By distributting the multtileaders, thee invisible linne used to aliign
the multileaader objects is also usedd to evenly space them as
desired. Thhe multileadders are disttributed eveenly along the t
length of the alignment line.
By makingg the multileeaders paralllel, the leadder lines of all
selected muultileaders wiill be placed parallel to each other.

8.7.3. Tables

o D
Data Links

Link Table Data


Table data can be linkeed to data inn Microsoft Excel.
E Dataa links can include
i linkss to entire
spreadsheetts, single cellls, or rangess of cells.

Update Linked Data


Data links can be updaated in bothh
directions, eliminating the need too
update t
tables orr externall
spreadsheetts independenntly.
When data has been changed in a
linked Exxcel spreaddsheet, thee
changes cann be quickly downloadedd
to the establlished data liink.
If changes have been made to a
linked tablee in your drrawing, thenn
you can uppload those changes too
your exterrnal spreaddsheet. Alll
linked infoormation cann easily bee
kept currentt and in syncch.***

o C
Create Tablees

Create Tablle Styles


Table styless are enhancced to includde additionaal format and d display opptions for boorders and
margins witthin tables annd table cellls. You can quickly
q creatte table stylees from existting tables
in a drawingg.
Table styless contain celll styles, whiich define the look of a table
t upon innsertion. Whhen a table
that was creeated from a table style you
y insert, yoou can speciffy a cell style for the firsst, second,

343
PROIECTARE ASISTATĂ DE COMPUTER
O
and all otheer data rows.
Create Bettter Tables
Using AutooFill grips, you can draag to
automaticallly incremennt data in a table.
t
You can also a use AutoFill
A gripps to
d cells as well.
automaticallly populate date
Activating the
t Table Brreaking gripss will
break a tabble into muultiple fragm ments.
When you drag the activated grip,, you
determine the
t height off the primaryy and
secondary table fragmennts.
If a brokeen table is set to Maanual
Positions inn the Properrties palette, then
ments can be placed anyw
table fragm where
within youur drawing. Table fragm ments
set to Manuual Heights in the Propeerties
palette can have
h differennt heights.
New numbeer and currenncy formattinng within row
ws, columns,, and individuual cells is available.

o L Tables
Live

Extract Datta From Draawings


Using the Data
D Extracttion wizard, you can exxtract property data from m objects in drawings
(including blocks
b and atttributes) andd drawing infformation.
The extraccted data
can be liinked to
information in a
Microsoft Excel
spreadsheet and
output to a table or
an external ffile.
In this exam mple, the
area off each
condominiuum unit is
extracted too create a
table.
Later, aadditional
information from a
Microsoft Excel
spreadsheet will be
added to thee table.
Select Objects and
Properties for Data
Extraction
In this example,
polylines thhat outline
the perimeteer of each coondominium unit are seleected to defin ne the data soource.
The Select Objects
O pagee in the wizarrd lists the polyline objeccts.
By clickingg Next in thhe wizard, the Select Properties
P page displayss a list of pproperties
pertaining to the selected polylines.

3444
COMPARARE VERSIUNI AUTOCAD
For this extrraction, Areaa is the only property to be
b extracted.
Refine the Extracted
E Daata
The Refine Data page iss where the extracted
e dataa is displayed in columnss.
On this page, columns canc be reordeered and sortted, renamed d, and hiddenn. Other organizational
and formattting tasks cann be done such as insertinng formula columns
c and footer rows. By right-
clicking a column label,, a shortcut menu
m displayys various op ptions.
In this exaample, three columns arre displayedd in the grid d. Because thet Count aand Name
columns doo not need too be includeed in the tabble, they can n be hidden by b clicking the Show
Count Coluumn and
Format the Data
The data in the column is displayedd in sq. inchees but needs to be displayyed in feet aand inches
in the table..
This is easilly accomplisshed by first inserting a formula
fo colummn that dividdes the numeerical data
by 12. Usinng the Insert Formula Collumn dialog box, the num merical data in the Area column is
divided by 12.
Using the Set
S Cell Form mat dialog box, Architecctural is seleccted to displlay the numeerical data
in the formuula column too architecturral units.Showw Name Collumn check boxes.b

Merge Dataa from Microosoft Excel Shet


S
Information in a
M
Microsoft Excel
s
spreadsheet can be
a
added as coluumns with
thhe data that has been
e
extracted fr
from the
d
drawing.
F
For this example,
a
additional innformation
a
about the pproject is
a
added to the extracted
d
data.
C
Create Liink to
S
Spreadsheet
F
From the Reefine Data
p
page, thee Link
E
External Daata dialog
b is accessed.
box
F
From this diialog box,
thhe followinng three
taasks are donne:
T
The XLS file as the
data link is chosen.
A column from the exxtracted dataa that matchhes a colum mn from the external daata in the
spreadsheett is selected.
The columnns from the sppreadsheet too include witth the extracted data are selected.
Preview thee Table
The columnns from the Excel
E spreadssheet containn a symbol in
n the columnn label.
The data inn the table can be view wed to see how
h it look
ks before prooceeding in the Data
Extraction wizard
w wheree a table stylle is set.
Format the Table

345
PROIECTARE ASISTATĂ DE COMPUTER
The Table Style page in the wizard is where the table is formatted.
A table style can be defined or selected if a table style exists in the drawing. If the table style
contains a template, that can be selected.
In this case, a table style is selected and a title for the table is entered.
Insert the Table
On the Finish page in the wizard, you click Finish to insert the table into the drawing.
The table is formatted, labeled, and contains the extracted data from the drawing and columns
from the Excel spreadsheet.

8.7.4. Layers

o Layers Improvements

Override Properties by Viewport


Objects can now display differently in individual viewports in paper space while retaining
their original layer properties in model space.
When a layout viewport is current, property overrides can be assigned to one or more layers
so that the new settings apply only to that viewport.
The viewport on the right displays wiring in a different color than in the left viewport. That’s
because a color override was set on the Wiring layer for that viewport.
When the Layer Properties Manager is opened from a layout tab, four new columns display.
These columns are used for setting layer property overrides for the current viewport.
VP Color
VP Linetype
VP Lineweight
VP Plot Style
Examine Viewport Override Columns in the Layer Properties Manager
When the Layer Properties Manager is opened when the right viewport is active, a
background color displays behind the Layer Name, Color setting and VP Color setting.
If the left viewport is active when the Layer Properties Manager is opened, the background
color does not display because there are not layer property overrides for that viewport.
Use Viewport Overrides Filter
Another way to see which layers have property overrides is through the Viewport Overrides
filter in the Layer Properties Manager.
When property overrides exist for the current viewport, a Viewport Overrides filter is
automatically created in the tree list.
By selecting the filter, you can quickly see all the layers that have property overrides for the
viewport.
In this example, the right viewport is active and the Viewport Overrides filter displays the
Lighting layer as the only layer that contains property overrides.

8.7.5. Visualization

o Lighting

Introduction of Photometric Lights


The lighting capabilities have been improved to include a choice of photometric light sources.
With photometric lights, you can illuminate your scenes for more realistically rendered
images.

346
COMPARARE VERSIUNI AUTOCAD
Photometricc lighting can be
specified inn Internationnal (SI)
units of measurement
m t or in
American units of
measuremennt. The settting of
Internationaal (SI) unitss is the
default valuue.
Photometricc lights usee “real-
world” vallues for addjusting
lighting. Foor example, if your
scene requuires you to use
fixtures (luminaries) that
contain a 75W
7 bulb, you
y can
select a bullb that is 75W
W from
the tool palette.
p You can
adjust the laamp intensityy of the
bulb in Caandela, Lum men, or
Lux units.
Data for phhotometric ligghts can
be supplied in IES files that designaate a photom
metric web thaat shows how
w a light from
m a given
fixture will illuminate a room or wassh a wall.

Illuminnate with Lu uminaires


To creaate realistic lighting in a drawing,
you caan embed photometric
p lights in
blocks that also conntain geomettry.
Tool palettes off photometrric lights
providee easy acccess to phhotometric
g bulbs, lampps, or webs. You can
lighting
select from fluoreescent, low pressure
sodiumm, incandesceent, and highh intensity
discharrge types of lighting.
l
A lum minary assem mbles a set of light
objectss into a light fixture. Forr example,
you can n create a seet of lights too create a
light ovver a diningg area. You ccan select
the ph hotometric lights
l from the tool
palettess, position them withhin a 3D

representatiion of the ligght, and create a block of the


light objects and the 3D D representattion of the liight to
create the liight fixture with
w photomeetric propertiies.

Sun and Skky Background


You can noow simulate the effects ofo sunlight inn your
drawings by b applyingg the new w Sun andd Sky
backgroundd to a drawingg view.
Atmospheree contributees a consideerable amouunt of
light to outtdoor sceness. The intennsity and coolor of
this light vaaries greatly depending on
o sky condditions.

347
PROIECTARE ASISTATĂ DE COMPUTER
O
These condiitions can noow be replicaated through property settings.

o M
Materials

Explore Maaterial Improovements


Materials are improvved with the t
addition off new procedural maaps.
Unlike a bitmap, whicch is an imaage
produced byy a fixed maatrix of colorred
pixels like a mosaic, a procedural
p m
map
is generatted by a mathematical
algorithm. A proceduraal map can be
generated ini two dim mensions or in
three.
New proccedural maps m includde:
Checker, Noise,
N Specckle, Tile and a
Wave. Youu can create more organnic,
realistic maaterials in youry drawinngs
than can be derived from m texture maaps.
You can neest a proceduural map witthin another procedural map. This gives g more ddepth and
color variatiion to the maaterial.
New proceddural maps have h been addded to the Materials
M too
ol palette to provide
p mateerials you
can start witth. You can select these materials annd make chan nges to the property settinngs.
Advanced Lighting
L Oveerride
With advannced lightingg override at a the materiial level, you can adjust aspects off the light
emission, reeflectance, and
a color bleeeding to prooduce even more m realisticcally rendereed images
than if you relied
r strictlyy on the lighht sources illuuminating a scene.
s

Preview w Realistic MMaterials


Any chhange to a material
updates the preview w swatch.
You cann see what the material
“really looks
l like” bbefore you
do the fiinal render.
The setttings for a realistic
material are physical
propertiees, so whenn you use
realistic materiaals in
conjuncttion with phhotometric
lights, the renderiings that
result are physically realistic.
Even thhough most materials
will reaact realisticaally when
lit by photometriic lights,
some addjustments are often
necessarry at the mateerial level
to helpp improve indirect
lighting or broaden
b the artistic
a expreession. You can
c select a material
m fromm the Materiaals palette
and adjust the
t physical properties
p off the materiall and see the results in thhe preview swwatch.

3488
COMPARARE VERSIUNI AUTOCAD
Adjust Proccedural Mapps
After you create
c and apply
a maps to a materiaal, you can
adjust the scaling and tiiling settingss. A panel for
f Material
Scaling andd Tiling, andd Material Offset
O and Preview
P has
been addedd to the Matterial window to make changes to
these settinggs.
In additionn, you cann specify a scaling factor and
synchronizee the settinggs to be sharred across alla maps, or
you can speecify the settiings at the prrocedural maap level.
c be adjussted to fit thhe shape of the object.
Materials can
Applying thhe appropriatte settings too an object im
mproves the
fit for that object. The change willl appear in thet material
preview swaatch.

8.7.6. User In
nterface

o Workspaces

2D Draftingg and Annottation Worksspace


The 2D Draafting and Annotation
A w
workspace coontains only
toolbars, menus,
m and palettes
p relatted to 2D drafting
d and
annotation.
The dashbooard displayys buttons and
a controlss that are associated
a w
with 2D draafting and
annotation.

o N Elemen
New nts

Use The Drrawing Statu us Bar


The drawingg status bar contains
c toolls for scalingg annotationss.
Diffferent tools display foor model
spacce and paperr space.
Wheen the drawing status barr is turned
off, its tools are movedd to the
appllication statuus bar.

Get Information n trough InffoCenter


On the
t menu barr, InfoCenterr provides
acceess to multiple
m souurces of
info
ormation.
Youu can enter keywords
k or a question
for help, displayy the Comm munication
Cennter panel forr product uppdates and
anno ouncements,, or dispplay the
Favorites paneel to accesss saved
topiics.
/*-
When you enter a quesstion for helpp and then press
p ENTER R or click thhe Search buutton, you
search multtiple Help reesources as well
w as any specified
s doccuments. Thee results are displayed
as links on a panel.

349
PROIECTARE ASISTATĂ DE COMPUTER
O
The Displayy More Ressults and
Display Previous Results
buttons alloow you to broowse the
search resullts.
Click a linkk to display thhe topic.
Click the sttar icon that displays
next to a link
l to savee it as a
favorite.
The Favorites panel displays
links saved as favorites.
Click the Delete
D icon next
n to a
link on thee Favorites panelp to
remove it.
The Comm munications Center
panel displaays links to product
update annd announncement
informationn and RSS feeeds, and
may incclude linkks to
Subscriptionn Center annd CAD
Manager sppecified files..

8.7.7. Custom
mization

o C
Customizatio
ons Improveements

Overview off Customization Changees


Several enhhancements have
h been maade for custoomizing the user
u interfacee.
Changes too Toolbar Customization
C n – You caan interactiv vely add, repposition, andd remove

3500
COMPARARE VERSIUNI AUTOCAD
commands in i the Toolbar Preview pane
p or directtly in the app
plication winndow.
Create Toollbar from Meenu – You caan create tooolbars and too olbar flyouts from existinng menus.
Changes too Dashboardd Customizattion – You can custom mize the dashboard by aadding or
modifying dashboard
d paanels using thhe tree in thee Customizattions In panee or the Paneel Preview
pane.
Ability to Copy,
C Dupliccate, and Pastte – You cann copy, pastee, or duplicatte commandss and user
interface eleements to creeate copies of
o existing coontent in a CU UI file.
Command ListL Filter – You can filteer the comm mand list baseed on a text string
s to narrrow down
the commannd you are loooking for.

8.7.8. Draftin
ng Producttivity

o F
Fading Lockked Layers

Reduce Visual Complexxity


As you creeate drawinggs, they gett
complex quickly,
q maaking them m
harder to work
w with. Tyypically, youu
turn layerss off to manage
m thee
density of objects,
o but in so doing,
you can losse context annd ability too
snap to obbjects on hidden layers.
Instead, by locking layyers, you cann
dim the objects
o on those
t layerss
instead of turning them off. Thiss
reduces thee visual commplexity of a
drawing while
w still providing
p a
visual referrence and a means forr
snapping to the dimmedd objects.

o E
Enhancemen
nts

Additional Enhanceme
E ents
ments. Refer to the Heelp system for more
Check out the followiing additionnal enhancem
informationn on each enhhancement.
aici tre traduus din help

351
9. BIBLIOGRAFIE

1. Ionel Simion, AUTOCAD 2006 pentru ingineri, Teora 2005


2. David Frey, AUTOCAD 2006 SI AUTOCAD LT 2006 PENTRU INCEPATORI,
Teora 2005
3. Mark Middlebrook, David Byrnes, AutoCAD 2006 for Dummies, (Paperback - May
2005) 2Rev Ed edition (May 1, 2005)
4. Ionel Simion, AUTOCAD 2005 pentru ingineri, Teora 2004
5. Elen Filkenstein, AutoCAD 2005 and AutoCAD LT 2005 Bible, Wiley Publishing
Inc, 2005
6. Ralph Grabowski Using AutoCAD 2004: Basics, Autodesk Press; 1 edition
(September 2, 2003)
7. David S. Cohn, AutoCAD 12, Editura Teora, 1995
8. Stefan Trausan-Matu, Programare in Lisp - Inteligenta artificiala si web semantic,
Polirom 2004
9. Sham Tickoo, Customizing AutoCAD 2004 (Autodesk's Programmer Series),
(Paperback) Autodesk Press; 1 edition (August 28, 2003)
10. AutoDesk – AutoCAD 2000. VISUAL LISP TUTORIAL, Ed. Teora 1999
11. Rod R. Rawls, Mark A. Hagen, Autolisp Programming: Principles and Techniques,
(Paperback) Goodheart Wilcox Company (June 1, 1998)
12. John W. Gibb, Jeff Pilcher The Autolisp Programmer's Toolbox, (Paperback - Jun
1997)
13. Peter M. Moanfeldt, Introduction to AutoLISP (Paperback) Prentice Hall; 1st edition
(November 7, 1996)
14. Gheorghe Marin, INTRODUCERE IN LIMBAJUL AUTO LISP, Editura Teora,
1995
15. George O. Head, Autolisp in Plain English: A Practical Guide for Non-
Programmers/Book and Disk (Autocad Reference Library), Ventana
Communications Group; 5th/Bk&Dsk edition (October 1, 1994)
16. Rusty Gesner, Joseph Smith, Patrick Haessly, Maximizing AutoCAD: Inside
AutoLISP, (Paperback - April 1991)
17. Joseph J. Smith, Gesner B. Rustin, Rusty Gesner, Patrick Haessly, Customizing
Autocad: A Complete Guide to Integrating Autolisp, Menus, Macros, and More
(Hardcover - Sep 1988)
18. referinţă internet AfraLisp, AutoLisp/Visual Lisp Tutorials
http://www.afralisp.co.za/
19. referinţă internet, AutoCAD, Placerea de a proiecta,
http://www.ournet.md/~autocad/html/prezentarea_2.htm
20. referinţă internet, CADTutor Forum, AutoCAD help and advice from the
CADTutor community - http://www.cadtutor.net/

352
COMPARARE VERSIUNI AUTOCAD
21. BOLD, Marina Cristiana, VISUAL BASIC IN 30 DE LECTII, Ed. Paralela 45 2005
22. Cristopher J. Bockmann Lars Klander Lingyan Tang Visual Basic - Biblioteca
programatorului Teora 2004
23. Bogdan Patrut Aplicatii in Visual Basic Ed. Teora 2003
24. Jack Purdum, Visual Basic .Net Primer Plus, Sams publishing, 2003
25. Jeffrey P. McManus How to Program. Visual Basic 5.0 Control Creation Edition,
Macmillan Computer Publishing USA.2003
26. Luminita Finaru, Ioan Brava Visual Basic. Primii pasi... si urmatorii Ed Polirom 2001
27. Cornelia Botezatu Visual Basic - fundamente ale programarii pe obiecte Ed.
Universitara 2000
28. Ted Patisson, Programming Distributed Applications, with COM + Microsoft
Visual Basic 6.0 Second Editions, Microsoft Press, 2000
29. Andrew Roe, Using Visual Basic with AutoCAD 2000 (Autodesk's Programmer)
Thomson Delmar Learning; 2 edition (October 1, 2000)
30. David Bocto, Microsoft Office 2000. Visual Basic for Aplications, 2000
31. Diane Zak, Visual Basic for Applications, Course Technology; 1 edition (June 22,
2000)
32. John W. Gibb and Bill Kramer, AutoCAD VBA Programming Tools and
Techniques: Exploiting the Power of VBA in AutoCAD 2000, CMP Books; Bk&CD
Rom edition (November 1, 1999)
33. Jerry Winters, AutoCAD Visual Basics - VBA - A Guide for the Non-Programmer,
Vb Cad Llc; Spiral edition (March 3, 1998)
34. QUE Corporation Visual Basic 5 Night School 1997, Macmillan Publishing USA, a
Simon and Schuster Company. 1997
35. Mansfield, Richard and Petroutsos, Evangelos. Visual Basic Power Toolkit. Chapel
Hill, NC: Ventana Press, 1995.
36. Torgerson, Thomas W. Visual Basic Professional 3.0 Programming. John Wiley &
Sons, Inc., 1994.
37. Appleman, Daniel. PC Magazine Visual Basic Programmer’s Guide to the
Windows API. Emeryville, California: Ziff-Davis Press, 1993.
38. Craig, John Clark. Microsoft Visual Basic Workshop. Redmond, WA: Microsoft
Press, 1993.
39. Mansfield, Richard. The Visual Guide to Visual Basic for Windows. 2d. Ed. Chapel
Hill, NC: Ventana Press, 1993.
40. Nelson, Ross. Running Visual Basic for Windows. 2d. Ed. Redmond, WA: Microsoft
Press, 1993.
41. Potter, Bill and Maxwell, Taylor and Scott, Byron. Visual Basic SuperBible. 2d. Ed.
Corte Madera, CA: Waite Group Press, 1993.

353
INDEX FUNCŢII AUTOLISP

B
-, 29, 88, 90 boole, 103, 107
*, 29, 88, 90 boundp, 161, 163
*error*, 113, 114
/, 29, 88, 91 C
/=, 34, 102, 104 car, 27, 46, 126, 129
~, 88, 91 cdr, 46, 126, 130
+, 29, 88, 89 chr, 32, 171, 175
<, 34, 102, 104 close, 195, 196
<=, 34, 102, 105 command, 213, 214
=, 34, 102, 103 cond, 103, 108
>, 34, 102, 105 cons, 126, 130
>=, 34, 102, 106 cos, 31, 88, 94
1-, 31, 88, 92 cvunit, 171, 175
1+, 31, 88, 92
D
A defun, 34, 117, 118
abs, 30, 88, 92 defun-q, 117, 119
acad_colordlg, 213 defun-q-list-ref, 117, 120
acad_helpdlg, 213, 214 defun-q-list-set, 117, 120
acad_strlsort, 125, 128 dictadd, 272, 273
alert, 113 dictnext, 272, 274
alloc, 287 dictremove, 272, 275
and, 33, 103, 106 dictrename, 272, 276
angle, 31, 208, 209 dictsearch, 272, 277
angtof, 171 distance, 31, 208, 209
angtos, 171, 172 distof, 171, 176
append, 126, 128
apply, 117, 118 E
arx, 79 entdel, 246, 247
arxload, 79, 80 entget, 246, 248
arxunload, 79, 81 entlast, 246, 249
ascii, 32, 171, 173 entmake, 246, 249
assoc, 126, 128 entmakex, 246, 251
atan, 31, 88, 93 entmod, 246, 252
atof, 171, 174 entnext, 246, 253
atoi, 32, 171, 174 entsel, 227, 228
atom, 161, 162 entupd, 246, 254
atoms-family, 161, 162 eq, 103, 109
autoarxload, 79, 81 equal, 103, 110
autoload, 79, 82 eval, 117, 122
exit, 113, 114

354
INDEX FUNCŢII AUTOLISP
exp, 30, 89, 94 list, 27, 126, 132
expand, 287, 288 listp, 34, 126, 133
expt, 30, 89, 95 load, 79, 83
log, 30, 89, 96
F logand, 89, 97
findfile, 195, 196 logior, 89, 97
fix, 31, 89, 95 lsh, 89, 98
float, 30, 89, 96
foreach, 126, 131 M
mapcar, 126, 134
G max, 29, 89, 99
gc, 287, 288 mem, 287, 289
gcd, 89, 96 member, 126, 134
getangle, 227, 228 menucmd, 184, 188
getcfg, 213, 216 menugroup, 184, 189
getcname, 213, 216 min, 30, 89, 99
getcorner, 227, 229 minusp, 33, 89, 100
getdist, 58, 227, 230
getenv, 213, 217 N
getfiled, 227, 231 namedobjdict, 273, 278
getint, 58, 227, 232 nentsel, 227, 241
getkword, 227, 233 nentselp, 227, 243
getorient, 227, 234 not, 33, 161, 164
getpoint, 227, 235 nth, 126, 135
getreal, 58, 227, 236 null, 34, 161, 164
getstring, 58, 227, 237 numberp, 33, 161, 165
getvar, 213, 217
graphscr, 184, 185 O
grdraw, 184, 185 open, 195, 197
grread, 181 or, 33, 103, 111
grtext, 184, 186 osnap, 209, 211
grvecs, 184, 187
P
H polar, 31, 209, 211
handent, 246, 255 prin1, 184, 190
help, 213, 218 princ, 185, 191
print, 185, 192
I progn, 117, 123
if, 32, 103, 111 prompt, 185, 192
initdia, 79, 82
initget, 227, 237 Q
inters, 209, 210 quit, 113, 115
itoa, 32, 171, 177 quote, 161, 166

L R
lambda, 117, 122 read, 147, 149
last, 126, 131 read-char, 195, 198
layoutlist, 273, 277 read-line, 195, 199
length, 126, 132 redraw, 185, 192

355
PROIECTARE ASISTATĂ DE COMPUTER
regapp, 244 V
rem, 89, 100 ver, 213, 222
repeat, 103, 112 vla-get-StartPoint, 70
reverse, 126, 136 vl-arx-import, 298
rtos, 171, 177 vlax-3D-point, 290
vlax-add-cmd, 79, 87, 213, 224
S vlax-create-object, 294
set, 161, 166 vlax-curve-getArea, 293
setcfg, 213, 219 vlax-curve-getClosestPointTo, 294
setenv, 213, 219 vlax-curve-getClosestPointToProjection, 294
setfunhelp, 213, 220 vlax-curve-getDistAtParam, 293
setq, 26, 161, 167 vlax-curve-getDistAtPoint, 293
setvar, 213, 222 vlax-curve-getEndParam, 293
setview, 273, 278 vlax-curve-getEndPoint, 293
sin, 31, 89, 101 vlax-curve-getFirstDeriv, 294
snvalid, 273, 278 vlax-curve-getParamAtPoint, 293
sqrt, 30, 89, 101 vlax-curve-getPointAtDist, 293
ssadd, 260, 261 vlax-curve-getPointAtParam, 293
ssdel, 260, 263 vlax-curve-getSecondDeriv, 294
ssget, 55, 260, 263 vlax-curve-getStartParam, 293
ssgetfirst, 260, 266 vlax-curve-getStartPoint, 293
sslength, 55, 261, 267 vlax-curve-isClosed, 293
ssmemb, 261, 267 vlax-curve-isPeriodic, 293
ssname, 55, 261, 268 vlax-curve-isPlanar, 294
ssnamex, 261, 269 vlax-dump-object, 69, 246, 256, 292, 294
sssetfirst, 261, 270 vlax-ename->vla-object, 69, 291
startapp, 79, 84 vlax-erased-p, 247, 257, 292, 295
strcase, 148, 149 vlax-for, 290
strcat, 32, 148, 150 vlax-get-acad-object, 247, 257, 292, 295
strlen, 32, 148, 150 vlax-get-object, 295
subst, 126, 136 vlax-get-or-create-object, 295
substr, 148, 151 vlax-get-property, 293
vlax-import-type-library, 295
T vlax-invoke-method, 292
tablet, 181, 183 vlax-ldata-delete, 294
tblnext, 273, 280 vlax-ldata-get, 273, 283, 294
tblobjname, 273, 282 vlax-ldata-list, 273, 285, 294
tblsearch, 273, 282 vlax-ldata-put, 273, 286, 294
terpri, 32, 185, 193 vlax-ldata-test, 273, 286, 294
textbox, 209, 212 vlax-make-safearray, 291
textpage, 185, 193 vlax-make-variant, 291
textscr, 194 vlax-map-collection, 290
textscr, 185 vlax-method-applicable-p, 247, 257, 292, 295
trace, 117, 124 vlax-object-released-p, 247, 258, 292, 295
trans, 171, 179 vlax-product-key, 299
type, 31, 161, 168 vlax-property-available-p, 293
vlax-put-property, 293
U vlax-read-enabled-p, 247, 259, 292, 295
untrace, 118, 125 vlax-release-object, 247, 259, 292, 295
vlax-remove-cmd, 213, 226

356
INDEX FUNCŢII AUTOLISP
vlax-safearray->list, 291 vl-prin1-to-string, 148, 152
vlax-safearray-fill, 291 vl-princ-to-string, 148, 152
vlax-safearray-get-dim, 291 vl-propagate, 299
vlax-safearray-get-element, 291 vlr-acdb-reactor, 295
vlax-safearray-get-l-bound, 291 vlr-add, 295
vlax-safearray-get-u-bound, 291 vlr-added-p, 296
vlax-safearray-put-element, 291 vlr-beep-reaction, 296
vlax-safearray-type, 291 vlr-current-reaction-name, 296
vlax-tmatrix, 291 vlr-data, 296
vlax-typeinfo-available-p, 247, 260, 292, 295 vlr-data-set, 296
vlax-variant-change-type, 291 vlr-deepclone-reactor, 296
vlax-variant-type, 291 vlr-docmanager-reactor, 296
vlax-variant-value, 291 vlr-dwg-reactor, 296
vlax-vla-object->ename, 291 vlr-dxf-reactor, 296
vlax-write-enabled-p, 247, 260, 292, 295 vlr-editor-reactor, 296
vl-bb-ref, 299 vl-registry-delete, 299
vl-bb-set, 299 vl-registry-descendents, 299
vl-catch-all-apply, 113, 115 vl-registry-read, 299
vl-catch-all-error-message, 113, 116 vl-registry-write, 299
vl-catch-all-error-p, 113, 116 vl-remove, 127, 143
vl-cmdf, 213, 223 vl-remove-if, 127, 143
vl-consp, 126, 137 vl-remove-if-not, 127, 144
vl-directory-files, 195, 200 vlr-linker-reactor, 296
vl-doc-export, 298 vlr-miscellaneous-reactor, 296
vl-doc-import, 298 vlr-mouse-reactor, 296
vl-doc-ref, 298 vlr-notification, 296
vl-doc-set, 298 vlr-object-reactor, 296
vl-every, 126, 137 vlr-owner-add, 296
vl-exit-with-error, 298 vlr-owner-remove, 296
vl-exit-with-value, 298 vlr-owners, 296
vl-file-copy, 195, 200 vlr-pers, 297
vl-file-delete, 195, 202 vlr-pers-list, 297
vl-file-directory-p, 195, 202 vlr-pers-p, 297
vl-filename-base, 195, 205 vlr-pers-releas, 297
vl-filename-directory, 195, 205 vlr-reaction-name, 297
vl-filename-extension, 195, 206 vlr-reactions, 297
vl-filename-mktemp, 195, 206 vlr-reaction-set, 297
vl-file-rename, 195, 203 vlr-reactors, 297
vl-file-size, 195, 203 vlr-remove, 297
vl-file-systime, 195, 204 vlr-remove-all, 297
vl-list*, 126, 139 vlr-set-notification, 297
vl-list->string, 127, 139 vlr-sysvar-reactor, 297
vl-list-exported-functions, 298 vlr-toolbar-reactor, 297
vl-list-length, 127, 140 vlr-trace-reaction, 297
vl-list-loaded-vlx, 298 vlr-type, 297
vl-load-all, 79, 85, 299 vlr-types, 297
vl-load-com, 69, 295 vlr-undo-reactor, 297
vl-member-if, 127, 141 vlr-wblock-reactor, 297
vl-member-if-not, 127, 141 vlr-window-reactor, 298
vl-position, 127, 142 vlr-xref-reactor, 298

357
PROIECTARE ASISTATĂ DE COMPUTER
vl-some, 127, 144 vl-vbarun, 79, 86
vl-sort, 127, 145 vl-vlx-loaded-p, 299
vl-sort-i, 127, 146 vports, 185, 194
vl-string->list, 127, 147, 148, 153
vl-string-elt, 148, 153 W
vl-string-left-trim, 148, 153 wcmatch, 148, 158
vl-string-mismatch, 148, 154 while, 36, 103, 112
vl-string-position, 148, 155 write-char, 195, 207
vl-string-right-trim, 148, 155 write-line, 195, 208
vl-string-search, 148, 156
vl-string-subst, 148, 156 X
vl-string-translate, 148, 157 xdroom, 244
vl-string-trim, 148, 158 xdsize, 244, 245
vl-symbol-name, 161, 169
vl-symbolp, 162, 170 Z
vl-symbol-value, 162, 169 zerop, 89, 102
vl-unload-vlx, 298 zerop, 33
vl-vbaload, 79, 85

358
ANEXĂ - CODURI DE EROARE AUTOLISP
În această anexă va fi prezentată lista mesajelor de eroare pe care utilizatorul le poate întâlni
scriind si depanând programe AutoLISP. Cele mai multe dintre acestea indică erori tipice de
programare în LISP, ca de exemplu: nume greşite de funcţii sau simboluri, tip sau număr
greşit de argumente de funcţii, paranteze neîmperecheate, apostrofuri neîmperecheate (şiruri
neterminate) etc.
Exemple de erori posibile:
• AutoCAD rejected function - AutoCAD a respins funcţia. Argumentele transmise unei
funcţii AutoCAD au fost incorecte sau funcţia însăşi este invalidă în contextul curent. De
exemplu, nu puteţi aplica o Funcţie getxxx de intrare utilizator din interiorul unei funcţii
command.
AutoLISP stack overflow - Depăşire a stivei AutoLISP. Spaţiul stivă de stocare al
AutoLISP-ului a fost depăşit. Aceasta poate fi datorată recursivităţii excesive a unei
funcţii sau a unor liste de argumente prea mari pentru o funcţie.
• bad argument type - Tip greşit de argument. Unei funcţii i s-a transmis un argument de
tip incorect. De exemplu, nu puteti transmite un număr întreg ca argument pentru funcţia
strlen.
• bad association list - Listă greşită de asociere. Lista transmisă funcţiei assoc nu constă în
liste.
bad conversion code - Cod de conversie greşit. Aceasta arată că un identificator de spaţiu
invalid a fost transmis funcţiei trans.
bad ENTMOD list - Listă ENTMOD greşită. Argumentul transmis lui entmod nu este o listă
de date entităţi corespunzătoare (ca cea returnată de entget).
• bad formal argument list - Listă greşită de argumente formale. Când a evaluat această
funcţie, AutoLISP a detectat o listă greşită de argumente formale. Probabil că “funcţia
definită cu defun” nici nu este funcţie, ci o listă de date.
• bad function - Funcţie greşită. Primul element din listă nu este un nume de funcţie
validă. Probabil este un nume de variabilă sau un număr. Acest mesaj poate indica de
asemenea că funcţia numită este definită impropriu - a nu se uita lista cerută de argumente
formale.
bad grvecs list value - Valoare a listei grvecs greşită. Ceva transmis într-o listă grvecs nu
este un punct 2D sau 3D.
• bad list - Listă greşită. O listă formată impropriu a fost transmisă unei funcţii. Aceasta
poate apărea dacă un număr real începe cu un punct zecimal; trebuie să folosiţi un 0 în
fată în acest caz.
bad node - Nod greşit. Tip de articol invalid întâlnit de funcţia type.
bad node type in list - Tip de nod greşit în listă. Tip de articol invalid întâlnit de funcţia
foreach.
• bad point argument; bad point value - Argument/valoare de punct greşită. Un punct
(listă de două numere reale) greşit definit a fost transmis unei funcţii care aşteaptă un
punct. A se avea în vedere că un număr real nu începe cu un punct zecimal; într-un astfel
de caz trebuie folosit un zero în fată.
bad real number detected - Număr real detectat greşit. O încercare a fost făcută pentru a
transmite un număr real greşit din AutoLISP în AutoCAD.
bad ssget list - Listă ssget greşită. Argumentul transmis către (ssget “x”) nu este o listă
corespunzătoare de date (ca cea returnată de entget).
bad ssget mode string - şir mod ssget greşit. Această eroare este cauzată când lui ssget îi este
transmis un şir invalid în argumentul mod.

359
PROIECTARE ASISTATĂ DE COMPUTER
• can’t evaluate expression - Nu pot evalua expresia. Această eroare poate fi cauzată de
plasarea incorectă a punctului zecimal sau alte expresii greşit formulate.
• can’t open (file) for input - LOAD failed - Nu pot deschide (fişierul) pentru intrare -
încărcare eşuată. Fişierul menţionat în funcţia load nu poate fi găsit (în directorul curent)
sau utilizatorul nu are acces de citire la respectivul fişier.
• console break - Întrerupere consolă. Utilizatorul a introdus un CTRL/C (^C) în timp ce
funcţia era în execuţie.
• divide by zero - Împărţire prin zero. Împărţirea prin zero nu este permisă.
• divide overflow - Depăşire la împărţire. Împărţirea printr-o valoare foarte mică a condus
la un cât invalid (foarte mare).
• extra right paren - Paranteză dreapta în plus. Au fost întâlnite una sau mai multe
paranteze dreapta (închise) în plus fată de cele deschise.
• file not open - Fişier nedeschis. Specificatorul de fişier dat la o operaţie de intrare/ieşire
nu este al unui fişier deschis.
• function cancelled - Funcţie anulată. Utilizatorul a introdus un CTRL/C ca răspuns la un
prompt de intrare.
• function undefined for argument - Funcţie nedefinită pentru argument. Argumentul
transmis unei funcţii log sau sqrt este în afara gamei de valori admise.
• function undefined for real - Funcţie nedefinită pentru real. S-a transmis un argument
un număr real unei funcţii care cere un număr întreg.
• improper argument - Argument impropriu. Argument nul sau negativ pentru funcţia
gcd.
• incorrect number of arguments to a function - Număr incorect de argumente pentru o
Funcţie . Numărul de argumente pentru o Funcţie definită de utilizator nu se potriveşte cu
numărul de argumente formale specificat în defun.
• incorrect request for command list data - Cerere incorectă pentru o listă de date a unei
comenzi. A fost întâlnită o Funcţie command, dar ea nu poate fi executată datorită unei
alte funcţii active.
• insufficient node space - Spaţiu “node” insuficient. Nu este spaţiu “heap” suficient
pentru asigurarea actiunii cerute.
• insufficient string space - Spaţiu şir insuficient. Nu este spaţiu “heap” suficient pentru a
încăpea textul şir specificat.
• invalid argument - Argument invalid. Tip impropriu de argument, sau argument în afara
gamei de valori permise.
• invalid character - Caracter invalid. O expresie conţine un caracter impropriu.
• invalid integer value - Valoare întreagă invalidă. A fost întâlnit un număr mai mic decât
cel mai mic număr întreg sau mai mare decât cel mai mare număr întreg.
• malformed list - Listă greşit constituită. O listă în curs de citire dintr-un fişier s-a
terminat prematur (nu s-au închis toate parantezele deschise sau sunt greşeli de sintaxă).
• malformed string - şir greşit constituit. Un şir în curs de citire dintr-un fişier s-a terminat
prematur (nu s-au închis toate ghilimelele deschise pentru a pune în evidentă şirurile de
caractere).
• null function - Funcţie nulă. S-a încercat evaluarea unei funcţii care are definiţie nil.
• quit / exit abort
Abandon quit/exit. Acesta - este rezultatul apelului Funcţie i quit sau exit. Aceste funcţii
nu sunt folosite de AutoLISP.
• too few arguments - Prea puţine argumente. S-au transmis prea puţine argumente unei
funcţii înglobate.

360

S-ar putea să vă placă și