Documente Academic
Documente Profesional
Documente Cultură
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
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.
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.
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
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.
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.
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.
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 .
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.
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.
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 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.
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 .
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
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.
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.
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.
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.
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.
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.
33
PROIECTARE ASISTATĂ DE COMPUTER
− matematice;
− şir;
− condiţionale.
Proces de
Proces de
Rezultat returnat
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)).
(strlen “retea-apa”)
(strlen s)
strlen returnează lungimea 9 a
lungimea şirului s
şirului anterior
(terpri)
terpri
începe o nouă linie pe ecran
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
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
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ă:
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
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ă.
Î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
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.
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
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.
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.
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.
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.
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.
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.
53
PROIECTARE ASISTATĂ DE COMPUTER
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
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.
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.
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.
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.
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.
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
65
PROIECTARE ASISTATĂ DE COMPUTER
comentariu|; În acest fel se poate întinde un comentariu pe mai multe linii fără a mai
folosi ;.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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 ))
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.
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
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
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:
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
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
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.
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
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
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))
)
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
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
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
n
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.
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ă:
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.
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.
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ă
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
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
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
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.
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.
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
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))
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
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.
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
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.
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 . "}")
)
)
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
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
T
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.
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.
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.
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)
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
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
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
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.
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
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
304
EXTENSII VISUAL LISP LA AUTOLISP – MĂSURAREA CURBELOR
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.
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ă.
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
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.
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
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
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.
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
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.
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.3. Varian
nte ale blocurilor simiilare
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.
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ă
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.
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.
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.
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
3166
COMPARARE VERSIUNI AUTOCAD
8.5.12. Introducere de daate Dynam
mică
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.
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.6. DIFEREN
NŢE AUTO
OCAD 20
007
2. Crearea
C de obiecte
o 3D
o C
Crearea Prim
mitivelor 3D
D - solide
o Crearea Pollisolidelor
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))
o C
Crearea de solide
s şi suprrafeţe
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.
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
o C
Crearea soliidelor prin în
ngroşare
o C
Crearea sollidelor prin secţionare
s
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
o U
Utilizarea in
nstrumenteloor de prinderre pentru mo
odificarea soolidelor
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
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
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
o U
Utilizarea U
UCS-ului dinaamic
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
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
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
o P
Prezentarea noii interfeţţe de lucru
o A
Alegerea unui spaţiu de lucru adecvvat
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
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
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.
o U
Utilizarea sti
tilurilor vizu
uale
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
o A
Adaptive deggradation
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
o A
Animaţia un
nei secvenţe de
d mers
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
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ă
o Î
Îmbunătăţir
rile DWF pubblishing
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
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ă.
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.
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
o O
Overview
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
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
o O
Orientation f Annotatiions
for
3400
COMPARARE VERSIUNI AUTOCAD
Set Orientaation for Ann
notations
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.
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..
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
o C
Create Tablees
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
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
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
8.7.5. Visualization
o Lighting
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.
347
PROIECTARE ASISTATĂ DE COMPUTER
O
These condiitions can noow be replicaated through property settings.
o M
Materials
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
o N Elemen
New nts
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
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
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
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