Parametrul < tip_meniu > poate avea expresiile [ 1]: S – specifică meniul ecran ( Screen Menu ); B – specifică meniul tastatură ( Buttons Menu ); I –… [601438]
Lucrarea nr. 3
51
Parametrul < tip_meniu > poate avea expresiile [ 1]:
S – specifică meniul ecran ( Screen Menu );
B – specifică meniul tastatură ( Buttons Menu );
I – specifică meniul imagine grafică ( Icon Menu );
P1…P10 – specifică meniurile derulante ( Pull Down Menu );
T1…T4 – specifică meniurile tabletei digitizoare;
A1 – specifică meniurile auxiliare.
Funcția REDRAW – realizează redesenarea entităților ce se
găsesc în fereastra curentă sau redesenează o entitate al cărei nume este
specificat (v. exemplul 3.16) .
Sintaxă : (REDRAW NumeEntitate Mod)
Exemplul 3.16 . Funcția REDRAW
(GRCLEAR)
(REDRAW (ENTLAST))
(REDRAW) șterg e ecranul
redesenează ultima entitate desenată
redesenează întregul desen
Dacă funcția nu are argumente, rezultatul este redesenarea ferestrei
curente.
Argumentul < Mod> poate lua una din tre valorile din tabelul 3.1 [ 1].
Tabelul 3.1 . Valorile argumentu lui <Mod >
Valoarea argumentului < Mod > Efectul asignării
1 Redesenează entitatea specificată
2 Șterge entitatea specificată
3 Afișează entitatea specificată cu contrast mărit
4 Anulează afișarea cu contrast mărit
Dacă argumentul < NumeEntitate > desemne ază o entitate ce se găsește
la începutul unei entități complexe (polilinie, poligon, bloc etc.), entitatea
principală și toate subentitățile sunt tratate în același fel dacă argumentul
<Mod> este pozitiv. Dacă argumentul < Mod> este negativ, funcția REDRAW
acționează numai asupra entității de la începutul entității complexe.
3.7. FUNCȚII DE INTRODUCERE A DATELOR
Funcția INITGET – controlează modul de funcționare al unei
funcții de tip GETXXX (exc epție fac funcțiile GETSTRING și GETVAR) (v.
exemplul 3.1 7).
Sintaxă : (INITGET Bit ”Cheie” )
Grafică asistată de calculator . Seria a III -a. Aplicații Aut oLisp
52
Exemplul 3.1 7. Funcția INITGET
(INITGET (+ 1 2 4)) ; se acceptă și sintaxa (INITGET 7)
(SETQ a (GETINT „Introduceți o cifră:”)) ; cifra introdusă nu are voie să fie 0 sau negativă
și, de asemenea, nu se permite apăsarea tastelor < Enter >, respectiv < Space >
…
(INITGET 1 „Alfa Beta”)
(SETQ C (GETKWORD „Cuvânt cheie ?”)) ; programul trece mai departe doar dacă nu se
dă răspunsul NUL și numai dacă răspunsul este Alfa sau Beta
Observații :
cuvintele cheie nu trebuie să co nțină nume de variabile deja utilizate și trebuie să
înceapă cu literă majusculă.
Controlul se validează prin cifre (biți de comandă) < Bit> sau prin
cuvinte cheie (opțiuni) <Cheie >, programul executând funcția GETXXX, cu
opțiunea programată.
Cuvântul chei e <Cheie > nu trebuie să conțină nume de variabile deja
utilizate și trebuie să înceapă cu literă majusculă.
Biții de comandă <Bit> sunt facultativi și pot avea valorile din tabelul
3.2 [1].
Tabel 3. 2. Biți de comandă pentru funcția INITGET
Bit de
comandă Semnificație
1 Nu se permit intrări nule și nu se permite ca răspuns apăsarea tastei < Enter > și
<Space >
2 Nu se permite introducerea valorii 0
4 Nu se permite introducerea valorilor negative
8 Nu se verifică limitele de desenare, nici în cazul în care variabila de sistem
LIMCHECK este setată ON
16 Se returnează un punct 3D în locul unui punct 2D
32 Pentru box -uri sau linii elastice, se folosește linia întreruptă
Observație: Biții de comandă se pot compune prin adunare, luând valori de la 0 la 63.
Funcția GETANGLE – permite introducerea valorilor
unghiulare.
Sintaxă : (GETANGLE Punct Expresie )
În interiorul funcției se pot defini: punctul de bază și vârful unghiului;
un text propriu de interogare. Unghiul se introduce în unitatea de măsură
stabi lită pentru sesiunea curentă de lucru AutoCAD (grade decimale,
grade/minute/secunde, grade centezimale, radiani, unități topometrice) sau
indicând un al doilea punct.
Există patru metode de definire a funcției (v. exemplul 3.1 8).
Lucrarea nr. 3
53
Exemplul 3.1 8. Funcția GETANGLE
(GETANGLE); se așteaptă introducerea unei valori unghiulare
(GETANGLE p1); p1 este punctul de bază 2D definit anterior și se așteaptă introducerea
celui de -al doilea punct
(GETANGLE „Primul punct : \n”); sunt cerute explicit ambele puncte
(GETAN GLE p1 „Punct direcție : \n”) ; p1 este punctul de bază definit anterior și se cere al
doilea punct care va defini a doua latură a unghiului
Observații :
valoarea unghiulară returnată de funcție este dată întotdeauna în radiani, indiferent
de modul de defi nire a sistemului de unități în AutoCAD ;
valoarea unghiului este calculată de AutoLISP relativ la axa Ox (direcție 00) și în
sensul de parcurgere setat în AutoCAD ;
în cadrul funcției, nu este permisă introducerea altor funcții;
punctele ce definesc un ungh i sunt de tip 2D și pot fi introduse explicit prin
coordonate sau indicate cu ajutorul dispozitivelor digitizoare.
Atât punctul de bază <Punct >, cât și expresia < Expresie > sunt
facultative.
Funcția GETCORNER – așteaptă introducerea unui punct, în
situația în care este definit deja un punct de bază .
Sintaxă : (GETCORNER Punct Expresie )
Funcția returnează al doilea punct de colț (adică o listă formată din
două sau trei numere reale) în sistemul de coordonate -utilizator implicit.
Există două metode de ut ilizare a funcției (v. exemplul 3.1 9).
Exemplul 3.1 9. Funcția GETCORNER
(GETCORNER p1) ; p1 este punct de bază definit anterior și se așteaptă introducerea celui
de-al doilea punct
(GETCORNER p1 „Punctul de colț al câmpului de scriere : \n”) ; p1 este pu nct de bază și
se așteaptă introducerea celui de -al doilea punct
Observații :
dacă se definește un punct 3D ca punct de bază, coordonata z este ignorată;
în cadrul funcției, nu este permisă introducerea altor funcții;
punctele pot fi introduse explicit pr in coordonate sau indicate cu ajutorul
dispozitivelor digitizoare.
Funcția GETDIST – așteaptă introducerea unei distanțe,
opțional putând conține un punct de bază 2D predefinit în sistemul de
coordonate -utilizator implicit și un text de interogare.
Există patru metode de utilizare a funcției (v. exemplul 3. 20).
Sintaxă : (GETDIST Punct Expresie )
Grafică asistată de calculator . Seria a III -a. Aplicații Aut oLisp
54
Exemplul 3.20. Funcția GETDIST
(GETDIST); se așteaptă introducerea punctelor care definesc distanța
(GETDIST p1); p1 este un punct de bază 2D predefinit și se așteaptă introducerea celui de –
al doilea punct
(GETDIST „Punct de plecare : \n”); se cere punctul de plecare și al doilea punct
(GETDIST p1 „Punctul de capăt al distanței : \n”) ; p1 este punctul de bază predefinit și se
cere al doilea punct
Observații :
distanța poate fi definită printr -un număr real sau prin indicarea a două puncte;
valoarea returnată va fi întotdeauna un număr real;
în cadrul funcției, nu este permisă introducerea altor funcții.
Funcția GETINT – așteaptă introducerea unui număr î ntreg
cuprins în intervalul ( -32767, 32767).
Opțional, funcția poate cuprinde un text de interogare (v. exemplul
3.21).
Sintaxă : (GETINT Expresie )
Exemplul 3.21. Funcția GETINT
(INITGET (+ 1 2 4))
(SETQ varsta (GETINT „Câți ani ai? : \n”))
Observații :
funcția returnează numărul întreg introdus;
în cadrul funcției, nu este permisă introducerea altor funcții.
Funcția GETKWORD – așteaptă introducerea unui cuvânt cheie
predefinit cu funcția INITGET (v. exemplul 3.22).
Sintaxă : (GETKWORD Expresie )
Exem plul 3.22. Funcția GETKWORD
(INITGET 1 „Intersecție Sfârșit”)
(SETQ r (GETKWORD „(I)ntersecția sau punctul de (S)fârșit”)) ; aici funcția acceptă ca
introducere minimă, caracterele I sau S
Observații :
funcția returnează cuvântul cheie ca un șir de caract ere;
în cadrul funcției, nu este permisă introducerea altor funcții.
Funcția GETORIENT – așteaptă introducerea unui unghi.
Sintaxă : (GETORIENT Punct Expresie )
Lucrarea nr. 3
55 Funcția preia un unghi după regula cadranului (0 grade spre dreapta,
creșterea unghiului rea lizându -se în sens antiorar). Opțional, se poate defini un
punct de bază 2D și un text de interogare. Unghiul se definește printr -o valoare
reală (în funcție de modul de setare al unităților de măsură în AutoCAD ) sau
poate fi indicat prin două puncte 2D.
Există patru metode de utilizare a funcției (v. exemplul 3.2 3).
Exemplul 3.23. Funcția GETORIENT
(GETORIENT)
(GETORIENT p1)
(GETORIENT „Primul punct : \n”)
(GETORIENT p1 „Punct dreapta : \n”)
Observații :
valoarea unghiulară returnată de funcție este d ată întotdeauna în radiani, indiferent
de modul de definire a sistemului de unități în AutoCAD ;
valoarea unghiului este calculată de AutoLISP în baza modului de definire a valorii
de 0 grade din AutoCAD ;
în cadrul funcției, nu este permisă introducerea alt or funcții;
punctele ce definesc un unghi sunt de tip 2D și pot fi introduse explicit prin
coordonate sau indicate cu ajutorul dispozitivelor digitizoare.
Funcția GETPOINT – așteaptă introducerea unui punct.
Opțional, se poate defini un punct de bază 2D sau 3D și un text de
interogare (v. exemplul 3.2 4). Dacă în definiția funcției apare un punct de
bază, în mediul de lucru AutoCAD se va activa o linie elastică care pornește
din acest punct.
Sintaxă : (GETPOINT Punct Expresie )
Exemplul 3.24. Funcția GE TPOINT
(GETPOINT)
(GETPOINT p1)
(GETPOINT „Introduceți un punct : \n”)
(GETPOINT p1 „Introduceți deplasarea : \n”)
Observații :
punctele pot fi introduse explicit prin coordonate sau indicate cu ajutorul
dispozitivelor digitizoare;
valoarea returnată va fi un punct 2D sau 3D;
în cadrul funcției, nu este permisă introducerea altor funcții.
Funcția GETREAL – așteaptă introducerea unui număr real pe
care îl returnează.
Sintaxă : (GETREAL Expresie )
Grafică asistată de calculator . Seria a III -a. Aplicații Aut oLisp
56 Opțional, se poate introduce un text de interogare (v. exemplul 3.2 5).
Exemplul 3.25. Funcția GETREAL
(INITGET (+ 1 2 4))
(SETQ lat (GETREAL „Introduceți latura mare : \n”)
Observații :
în cadrul funcției, nu este permisă introducerea altor funcții.
Funcția GETSTRING – așteaptă introducerea unui șir de
caractere.
Sintaxă : (GETSTRING Control Expresie )
Opțional, se poate introduce un text explicativ despre șirul de caractere
ce se va introduce, precum și un caracter de control al textului introdus.
Există patru metode de utilizare a funcției (v. exemplul 3. 26).
Exemplul 3.26. Funcția GETSTRING
(GETSTRING); nu se cere explicit șirul de caractere dar se așteaptă introducerea lui
(GETSTRING text1); variabila șir text1 este citită și afișată ca un text de interogare după
care se așteaptă introducerea unui șir de caractere
(GETSTRING „ \n Nume desen :”); pe un nou rând, se afișează textul „Nume desen :”,
după care se așteaptă introducerea numelui desenului
(CETSTRING T „ \n Nume desen :”) ; caracterul de control T este un argument diferit de
NUL care permite int roducerea de spații goale în textul care se va introduce
Observații :
caracterul de control T poate fi și un număr (ex: 6 sau 40);
dacă lipsește caracterul de control, introducerea textului se va încheia în momentul
în care se introduce un spațiu liber s au se acționează tasta < Enter >;
dacă șirul introdus este foarte lung, numai primele 132 de caractere vor fi memorate
și returnate;
dacă șirul de caractere conține un caracter „ \”, se va returna „ \\” (pentru returnarea
corectă a șirurilor de caractere care conțin nume de fișiere;
în cadrul funcției, nu este permisă introducerea altor funcții.
APLICAȚII REZOLVATE
A.1. Se dă cercul din fig. 3.1, având raza R = 50 și centrul cercului în
punctul O(110,150). S ă se conceapă programul AutoLISP care împart e un
cerc în trei părți egale și construi ește triunghiul echilateral înscris în cerc .
Lucrarea nr. 3
57
Fig. 3.1
(DEFUN C:cerc()
(COMMAND "ERASE" "ALL" "")
(A4)
(GETSTRING "Trasarea cercului. <Enter>")
(COMMAND "CIRCLE" "110,150" 50)
(GETSTRING "Trasarea diametrului ve rtical al cercului. <Enter>")
(COMMAND "LINE" "110,200" "110,100" "")
(COMMAND "CHPROP" "l" "" "lt" "center" "")
(SETVAR "LTSCALE" 10)
(GETSTRING "Trasarea arcului de cerc. <Enter>")
(COMMAND "CIRCLE" "110,100" 50)
(COMMAND "TRIM" PAUSE "" PAUSE "")
(COMMA ND "CHPROP" "l" "" "lt" "dashed" "")
(GETSTRING "Trasarea triunghiului echilateral. <Enter>")
(COMMAND "OSNAP" "END")
(COMMAND "PLINE" "110,200" PAUSE PAUSE "C")
)
(DEFUN A4 ()
(COMMAND "OSNAP" "OFF")
(GETSTRING "Trasarea formatului A4(210,297). <Enter>")
(COMMAND "RECTANG" "0,0" "210,297")
(COMMAND "ZOOM" "ALL")
(COMMAND "RECTANG" "20,10" "200,287")
(COMMAND "PEDIT" "L" "W" 0.5 "")
(COMMAND "RECTANG" "200,10" "20,50")
(COMMAND "PEDIT" "L" "W" 0.5 "")
(COMMAND "LINE" "20,0" "20,297" "")
(COMMAND "LINE" "0,1 48.5" "20,148.5" "")
) Definire fc ț. principală
Apelare func ție internă
Încheiere func ție pp.
Definire func ție internă
Încheiere func ție internă
Grafică asistată de calculator . Seria a III -a. Aplicații Aut oLisp
58
APLICAȚII PROPUSE
B.1. Se dă cercul din fig. 3.2, având raza
R = 50 și cent rul cercului în punctul O
(110,150). Să se conceapă programul AutoLISP
care împart e cercul în patru părți egale și
construi ește pătratul înscris în cerc.
Fig. 3.2
B.2. Se dă cercul din fig. 3.3, având raza R = 50 și centrul cercului în
punctul O (110, 150). Să se conceapă programul AutoLISP care împart e cercul
în cinci părți egale și construi ește pentagonul regulat înscris în cerc.
Fig. 3.3.
B.3. Definiți o „cerere” de număr întreg, pozitiv sau nul utilizând
funcția GETINT.
B.4. Definiți două cuv inte cheie și formulați o „cerere” utilizând
funcția GETKWORD.
B.5. Scrieți o secvență prin care se cere introducerea unui număr real
pozitiv, fără a accepta răspunsuri de tip NUL.
Lucrarea nr. 4
59
FUNCȚII ARITMETICE , GEOMETRICE ȘI
DE COMPARARE
4.1. SCOPUL LUCRĂRII
Lucrarea permite studenți lor să utilizeze comenzile predefinite pentru
efectuarea operațiilor aritmetice, pentru compararea datelor și obținerea
informațiilor atașate entități lor AutoCAD . Se urmărește asimilarea unor
tehnici de bază care să permită însușirea noțiunilor necesare efectuării
operațiilor aritmetice, comparării datelor și preluării informațiilor entităților
AutoCAD, specifice mediului de programare AutoLISP .
4.2. DESFĂȘURAREA LUCRĂRII
Se vor identifica funcții le predefinite AutoLISP pentru efectuarea
operațiilor aritmetice, compararea datelor și identificarea informațiilor
entităților AutoCAD cu ajutorul instrucțiunilor AutoLISP , astfel încât studenții
sa fie cap abili să implementeze, în mod minimal, programe pe calculator.
Studenții vor trebui să se familiarizeze cu instrucțiunile specifice și să rezolve
problemele propuse ca temă
4.3. FUNCȚII ARITMETICE
Funcțiile „+”, „-”, „*”, „/” – permit efectuarea operaț iilor
aritmetice de adunare (+), scădere ( -), înmulțire (*), împărțire (/) (v. exemplul
4.1).
Sintaxă : (FUNCȚIE Operand1 … OperandN )
Operanzii operațiilor aritmetice pot fi numere sau variabile (întregi sau
reale ). Dacă toți operanzii sunt întregi, rezul tatul returnat va fi întreg. Dacă
unul sau mai mulți operanzi sunt reali, rezultatul returnat va fi real.
Exemplul 4.1. Funcții aritmetice
adunare scădere înmulțire împărțire
(+ 2 4 6 8)
20 (- 5 4 7 9)
-15 (* 2 5 8)
80 (/ 18 3 2)
3
Grafică asistată de calculator . Seria a III -a. Aplicații AutoL isp
60 (+ 2.5 3 5 6)
16.5 (- 30 2.5 2)
25.5 (* 3 –2 5.0)
-30.0 (/ 9 2)
4
(/ 11 2.0)
5.5
(/ 16.0 2 2.5)
3.2
Funcția REM – returnează restul împărțirii dintre operandul din
stânga și cel din dreapta (v. exemplul 4. 2).
Sintaxă : (REM Operand1 Operand2 )
Operanzii pot fi numere , variabile întregi sau variabile reale.
Exemplul 4.2. Funcția REM
(REM 12 4)
0 (REM 12 5)
2 (REM 12 7.0)
5.0
Funcția GCD – returnează cel mai mare divizor comun dintre doi
operanzi (v. exemplul 4. 3).
Sintaxă : (GCD Oper and1 Operand2 )
Operanzii pot fi numere naturale.
Exemplul 4.3. Funcția GCD
(GCD 9 51)
3 (GCD 16 20)
4
Funcția ABS – returnează restul valoarea absol ută a unui număr
sau variabilă (v. exemplul 4. 4).
Sintaxă : (ABS Operand )
Operanzii pot fi numer e sau variabile întregi ori reale.
Exemplul 4.4. Funcția ABS
(ABS 50)
50 (ABS -50)
50 (ABS –49.75)
49.75
Funcțiile MAX și MIN – funcția MIN returnează cel mai mic
argument al funcției , iar funcția MAX returnează cel mai mare argument al
funcției (v. exemplul 4. 5).
Sintaxă : (FUNCȚIE Operand1 … OperandN )
Lucrarea nr. 4
61
Argumentele pot fi numere sau variabile întregi ori reale.
Exemplul 4.5. Funcțiile MIN și MAX
(MAX 5.01 –100 10)
10.0 (MIN 650 –10 25)
-10
(MAX 5 20 –3 15)
20 (MIN 0.5 –15 250)
-15.0
Funcția SQRT – returnează rădăcina pătrată a unui număr sau
variabi lă întreagă ori reală pozitive (v. exemplul 4. 6).
Sintaxă : (SQRT Operand )
Valoarea returnată va fi întotdeauna reală.
Exemplul 4.6. Funcția SQRT
(SQRT 56.25)
7.5 (SQRT 25)
5.0
Funcția EXPT – returnează valoarea obținută prin ridicarea
primului argument la puterea dată de al doilea argument (v. exemplul 4. 7).
Sintaxă : (EXPT Operand1 Operand2 )
Argumentele pot fi numere sau variabile întregi ori reale.
Exemplul 4.7. Funcți a EXPT
(EXPT 2 10)
1024 (EXPT 5.0 -3)
0.008 (EXPT -6.0 3.0)
-216.0
Funcțiile EXP și LOG – funcția EXP returnează valoarea
ridicării constantei numerice e = 2.71828183 la puterea dată de argument , iar
funcția LOG returnează valoarea logaritmului n atural (în baza e) din argument
(v. exemplul 4. 8).
Sintaxă : (FUNCȚIE Operand )
Argumentele pot fi numere sau variabile întregi ori reale. Rezultatul
returnat este întotdeauna real.
Exemplul 4.8. Funcțiile EXP și LOG
(EXP 1)
2.71828 (EXP (/ 3 6))
1.0 (EXP (/ 3.0 6))
1.64872 (LOG (EXP 5))
5.0
Observații :
în cazul funcției < EXP> , puterea poate fi și negativă.
Grafică asistată de calculator . Seria a III -a. Aplicații AutoL isp
62
Constanta PI – nu este o funcție, ci reprezintă contanta egală cu
3.14115926 și poate fi apelată prin nume.
Funcții le de incrementare „1+” și decrementare „1-“ – funcția de
incrementare 1+ returnează valoarea incrementării cu 1 a argumentului , iar
funcția 1- returnează valoarea decrementării cu 1 a argumentului (v. exemplul
4.9).
Sintaxă : (FUNCȚIE Operand )
Argumentul poate fi număr sa u variabilă întreagă ori reală.
Exemplul 4.9. Funcțiile 1+ și 1 –
(1+ 5)
6 (1+ 10.0)
11.0 (1+ -8.5)
-7.5 (1- 5)
4 (1- -3.0)
-4.0
Funcția ~ – returnează complementul la 1 al unui argument (v.
exemplul 4.10).
Sintaxă : (~ Operand )
Argumentul poate fi număr sau variabilă întreagă.
Exemplul 4.10 . Funcția ~
(~ 4)
– 5 (~ 99)
-100 (~ -5)
4
Funcțiile SIN și COS – returnează valoarea sinusului, respectiv a
cosinusului unui argument (v. exemplul 4.1 1).
Sintaxă : (FUNCȚIE Operand )
Argument ul trebuie introdus în radiani.
Exemplul 4.11 Funcțiile SIN și COS
(SIN 0.7854)
0.707108 (SIN (/ (* 45 PI) 180))
0.707108 (COS 0)
1.0
Funcția ATAN – returnează valoarea arctangentei unui argument
sau arctangenta rezultatul ui împărțirii a două a rgumente (v. exemplul 4. 12).
Sintaxă : (ATAN Operand1 Operand2 )
Lucrarea nr. 4
63
Argumentele pot fi numere sau variabile întregi ori reale. Rezultatul
returnat este întotdeauna real.
Exemplul 4.12. Funcția ATAN
(ATAN 5 4)
0.896055 (ATAN (/ 5 4))
0.785398 (ATAN 1.0)
0.785398 (ATAN –4.0)
-1.570796
Observații :
valoarea returnată va aparține mereu intervalului [ -PI, +PI];
dacă al doilea argument este zero, în funcție de semnul primului argument, valoarea
returnată va fi PI/2 sau –PI/2.
4.4. FUNCȚII DE COMPARARE
Funcțiile „=”, „ /=”, „ <”, „ <=”, „ >”, „ >=” – realizează
compararea argumentelor conținute, returnând T (True) dacă c omparația are
valoare de adevăr (v. exemplul 4. 13).
Sintaxă : (FUNCȚIE Atom1… AtomN )
Exemplul 4. 13. Funcții de comparare
(SETQ a 21)
(= a 21)
T
(/= „Ada” „Adda”)
T
(SETQ a 13 b 27 c 7)
(< c a b)
T
(<= „a” „b” „c” „a”)
T
(> 97 51 1 10 15)
T
(SETQ x „x”)
(>= x „a” „b” „x”)
Observații:
atomii de comparare pot fi de tip șir sau variabilă ;
compararea dintre atomi este de tip n umeric (șirurile de caractere primesc un cod
numeric în corespondență cu codurile ASCII ale caracterelor din șir);
funcțiile de comparare nu pot fi utilizate ca argumente de tip listă.
Funcți a EQUAL – compară două argumente între ele și testează
dacă s unt identice (v. exemplul 4. 14).
Sintaxă : (EQUAL Arg1 Arg2 Error )
Funcția EQUAL testează dacă rezultatul evaluării argumentului
<Arg1 > este identic cu cel al argumentului < Arg2 > și dacă testul este adevărat,
se returnează T (True ). Valoarea numerică op țională < Error > reprezintă
Grafică asistată de calculator . Seria a III -a. Aplicații AutoL isp
64 diferența maximă ce trebuie să existe între cele două argumente, pentru a
obține ca valoare returnată T.
Exemplul 4. 14. Funcția EQUAL
(SETQ a 1.234 b 1.235)
(EQUAL a b 0.001)
T
(SETQ list1 ‘(“abc” 20 30)
list2 ‘( “def” 40 50)
list3 list2)
(EQUAL list1 list2)
T
(EQUAL list1 list 2)
NIL
(EQUAL list1 list3)
NIL
(EQUAL list1 ‘(“abc” 20 30))
T
Funcția EQ – testează dacă două argumente sunt identice sau,
altfel spus, dacă argumentele sunt legate de același obiect (v. exemplul 4. 15).
Sintaxă : (EQ Arg1 Arg2 Error )
Exemplul 4. 15. Funcția EQ
(SETQ list1 ‘(“abc” 20 30)
list2 ‘(“def” 40 50)
list3 list2)
(EQ list2 list3)
T
(EQ list1 list2)
NIL
(EQ list1 list3)
NIL
(EQ l ist1 ‘(“abc” 20 30))
NIL
Observații:
compararea a două argumente prin EQUAL și EQ nu are neapărat același rezultat;
răspunsul T al funcției EQ este întotdeauna T și la funcția EQUAL, dar reciproca nu mai
este valabilă
argumentul < Error > este util pentru a specifica eroarea admisibilă în compararea
argumentelor;
nu trebuie confundate între ele funcțiile EQUAL și EQ și nici aceste funcții cu
funcția predefinită EQUAL (=).
Funcția WCMATCH – realizează comparația dintre un text dat
și un model. Dacă text ul este identic cu modelul dat se returnează valoarea T
(True ), altfel se returnează valoarea NIL (v. exemplul 4.16).
Sintaxă : (WCMATCH Text Model )
Exemplul 4.16 . Funcția WCMATCH
(SETQ a ”Auto -LISP”)
(WCMATCH ”Auto -LISP” ”*o*”)
T
Lucrarea nr. 4
65 (WCMATCH a ”*t*”)
T
(WCMATCH a ”*’ -*”)
NIL
(WCMATCH a ”* -????”)
T
(WCMATCH a ”??,~*m*,A*”)
T
(WCMATCH ”num1” ”num[1 -9]”)
T
(WCMATCH ”num0” ”num[1 -9]”)
NIL
Modelul de verificare < Model > poate fi definit explicit sau utilizându –
se convenția DOS de scriere „ DOS wil dcard characters ” așa cum se arată în
tabelul 4.1 [1].
Tabelul 4.1 . DOS wildcard characters
Caracter de
înlocuire Semnificație
* Toate simbolurile cuprinse în tabela ASCII, în orice combinație
~ Dacă este primul semn al modelului, textul dat este negat în totalitate
? Un simbol oarecare din tabela ASCII
@ O literă oarecare
# O cifră oarecare
! Un simbol nealfanumeric
<space > Unul sau mai multe spații goale
[ ] Orice semn inclus este interpretat ca și caracter
[~] Toate semnele neincluse
– Se defi nește un domeniu distinct de semne
) Enumerarea unor modele într -o listă
( Următorul semn nu se interpretează
Atât textul, cât și modelul pot fi date sub formă de variabilă.
Caracterele majuscule nu sunt identice cu caracterele minuscule.
Textul care se compară poate avea dimensiunea maximă de 500 de
caractere, restul fiind ignorat.
În cazul în care se folosesc mai multe modele de verificare, acestea
trebuie despărțite prin virgulă.
4.5. FUNCȚII GEOMETRICE
Funcția ANGLE – returnează unghiul în r adiani pe care îl face o
dreaptă definită de punctele P1, P2 și axa Ox (v. exemplul 4.17).
Sintaxă : (ANGLE Pct1 Pct2)
Unghiul se calculează în sistemul de coordonate utilizator în sens
antiorar de la axa Ox până la dreapta definită prin punctele ( P1, P2). În cazul în
Grafică asistată de calculator . Seria a III -a. Aplicații AutoL isp
66 care P1 și P2 sunt puncte 3D, dreapta astfel definită se proiectează pe planul de
construcție implicit (momentan în lucru).
Întotdeauna funcția ANGLE returnează rezultatul în radiani.
Exemplul 4.17. Funcția ANGLE
(ANGLE ‘(2 2) ‘(3 3)) → 0. 785398
(ANGLE ‘(2 2 0) ‘(3 3 7)) → 0.785398
Funcția DISTANCE – returnează distanța 3D între două puncte
(v. exemplul 4.18).
Sintaxă : (DISTANCE Pct1 Pct2)
Dacă unul sau ambele puncte sunt 2D, se returnează distanța 2D
obținută prin proiectarea dist anței 3D în planul implicit de construcție. O
distanță 2D este întotdeauna definită în planul implicit de construcție.
Exemplul 4.18. Funcția DISTANCE
(DISTANCE ‘(3 3 1) ‘(2 2 0)) → 1.73205
(DISTANCE ‘(3 3 1) ‘(0 0)) → 1.41421
Funcția INTERS – analiz ează două linii și returnează punctul lor
de intersecție. În cazul în care cele două linii nu au punct de intersecție, funcția
returnează NIL.
Sintaxă : (INTERS Pct11 Pct12 Pct21 Pct22 Arg )
Considerăm că cele două linii sunt definite prin punctele de în ceput
P11, P21 și prin punctele de sfârșit P12, P22. Toate punctele sunt luate în
considerare ca fiind definite în sistemul de coordonate definit de utilizator și
aflat momentan în utilizare (sistem de coordonate curent) (v. exemplul 4.19).
Dacă cele patru puncte sunt puncte 3D, funcția INTERS va căuta un
punct de intersecție 3D. Dacă unul sau mai multe puncte sunt de tip 2D,
dreptele definite sunt proiectate în planul curent de construcție și INTERS va
căuta un punct de intersecție în acest plan.
Exemplul 4.19. Funcția INTERS
(SETQ p11 ‘(1 0) p12 ‘(7 4)
p21 ‘(5 0) p22 ‘(8 4)
)
(INTERS p11 p12 p21 p22) → NIL
(INTERS p11 p12 p21 p22 TRUE) → NIL
(INTERS p11 p12 p21 p22 NIL) → (7.5 3.75)
Lucrarea nr. 4
67
Dacă la argumentul funcției <Arg> apare valoarea NIL, punc tul de
intersecție va fi calculat chiar dacă este amplasat în afara lungimii efectiv
definită a liniilor. În cazul în care la argument apare valoarea TRUE sau
lipsește, funcția returnează NIL dacă punctul de intersecție se găsește în afara
lungimii efectiv e a liniilor (lungimea efectivă a unei linii este lungimea liniei
între punctele prin care a fost definită).
Funcția POLAR – returnează un punct Pct2, definit prin unghi și
distanță față de un punct Pct1, în sistemul de coordonate curent (v. exemplul
4.20).
Sintaxă : (POLAR Pct1 Unghi Distanță )
Exemplul 4.20. Funcția POLAR
(SETQ P1 ‘(1.0 1.0))
(POLAR P1 0.785398 2) → (3.0 3.0) ; se returnează P2 de coordonate (3.0 3.0) (0.78539
reprezintă valoarea în radiani a unghiului față de P1, iar 2 reprezintă di stanța față de P1)
(SETQ P1 ‘(1.0 1.0 6.0))
(POLAR P1 0.785398 1.414214) → (2.0 2.0 6.0);
(POLAR ‘(3 1 5) 1.570796 2) → (3.0 3.0 5.0)
(POLAR ‘(1 5) 0 3) → (4.0 5.0)
Dacă Pct1 este un punct 2D, funcția returnează un punct 2D. Dacă
Pct1 este un punct 3D, f uncția returnează un punct 3D. Unghiul introdus
trebuie să fie exprimat în radiani față de axa Ox.
Funcția TRANS – transferă un punct sau vector de deplasare
dintr -un sistem de coordonate în altul (v. exemplul 4.19).
Sintaxă : (TRANS Pct Codf Codi Argum ent).
Exemplul 4.19. Funcția TRANS
(SETQ pt1 ‘(1.0 2.0 5.0))
(TRANS pt1 0 1) → (2.0 -1.0 5.0)
(TRANS pt1 1 0) → ( -2.0 1.0 5.0)
(TRANS ‘(2.0 0.7 2.0) 0 1 T) → (2.0 0.7 2.0)
Argumentul < Pct> este o listă ce conține trei numere reale ce sunt
interpretate c a și coordonate ale unui punct 3D sau vector 3D. Argumentul
<Codf > este un cod numeric ce indică sistemul de coordonate în care <Pct>
este exprimat, iar <Codi > este un cod numeric ce indică sistemul de
coordonate în care <Pct> este transpus. Argumentul <Argument > este opțional
și, dacă există și nu este NIL, face ca <Pct> să fie tratat ca vector 3D.
Grafică asistată de calculator . Seria a III -a. Aplicații AutoL isp
68
Argumentele < Codf > și <Codi > pot avea valorile : 0, pentru sistemul de
coordonate general (World); 1, pentru sistemul de coordonate utilizator
(UCS); 2, pentr u vizualizare (ferestre active); 3, pentru spațiul hârtie (se
utilizează împreună cu 2) .
Sistemele de coordonate utilizate în AutoCAD sunt centralizate în
tabelul 4.2 [ 1].
Tabelul 4. 2. Sistemele de coordonate utilizate în AutoCAD
Sistemul de
coordonate Semnificație
SCG Sistem de coordonate general . Este sistemul de coordonate de referință,
celelalte sisteme de coordonate fiind definite în raport cu SCG. Sistemul
SCG nu poate fi schimbat, iar valorile măsurătorilor efectuate în el se
conservă, indiferent de transferul în alte sisteme de coordonate.
SCU Sistem de coordonate al utilizatorului . Este sistemul de coordonate definit
de utilizator pentru a facilita editarea de desene. Toate punctele introduse
sunt interpretate relativ la SCU
SCE Sistem de coord onate al entității . Sistemul de coordonate în care funcția
ENTGET returnează coordonatele punctelor introduse
SCV Sistem de coordonate de vizualizare . Este sistemul de coordonate în care
este transferat un obiect înainte de a fi afișat. Originea sistemulu i de
coordonate este stocată în variabila de sistem TARGET, iar axa Oz este dată
de direcția de vizualizare.
SCASH Sistem de coordonate de afișare în spațiul hârtie . Sistem de coordonate care
poate fi utilizat numai pentru transferul punctelor între SCV -ul din spațiul
hârtie și SCV -ul ferestrei active din spațiul model.
APLICAȚII REZOLVATE
A.1. Realizați un program care să deseneze o linie ce une ște capetele a
două linii selectate [1]
Program AutoLISP Semnifica ție
((DEFUN C:unire()
(SETQ os (GE TVAR "OSMODE"))
(SETVAR "OSMODE" 33)
(COMMAND "LINE" "0,0" "150,150" "")
(COMMAND "LINE" "10,100" "40,175" "")
(COMMAND "ZOOM" "ALL")
(SETQ pt1 (GETPOINT "Selecteaza prima linie:") Definire func ție AutoLISP
Memorare mod selec ție curent
Selectare mod selec ție (END,INT)
Trasare a primei linii
Trasarea celei de -a doua linii
Vizualizarea întregii planșe
Memorare primul capăt de linie
Lucrarea nr. 4
69 pt2 (GETPOINT "Selecteaza a doua linie:")
)
(COMMAND "LINE" pt1 pt2 " ")
(SETVAR "OSMODE" os)
) Memorare al doilea capăt de l inie
Încheiere SETQ
Desenare linie care une ște capetele
Revenire la modul de selec ție ini țial
Încheiere a program ului AutoLISP
A.2. Realizați un program care să calculeze și să afișeze media
aritmetică a 2 numere reale
Program AutoLISP Semnificație
(DEFUN C:medie2()
(TEXTSCR)
(SETQ A (GETREAL "Introduceti primul numar :"))
(SETQ B (GETREAL "Introduceti al doilea numar :"))
(SETQ M (/ (+ A B) 2))
(PROMPT " \nMedia aritmetica a numerelor este: ")
(EVAL M)
) Definire funcție AutoLISP
Trecere în mode text
Introducere primul număr (A)
Introducere al doilea număr (B)
Calculare medie aritmetică (M)
Mesaj de afișare
Afișare medie aritmetică
Încheierea programului AutoLISP
A.3. Fie triunghiul definit de punctele A(2, 3, 4), B(3, 2, 1) și C(4, 4,
2). Să se calc uleze lungimea laturilor triunghiului ABC și unghiurile pe care
acestea le fac cu pe planul de construcție xOy .
(DEFUN C:laturi()
(COMMAND "ERASE" "ALL" "")
(SETQ pt1 (LIST 2 3 4) pt2 (LIST 3 2 1) pt3 (LIST 4 4 2))
(COMMAND "LINE" pt1 pt2 pt3 "C")
(COMMA ND "ZOOM" "ALL")
(TEXTSCR)
(SETQ d1 (DISTANCE pt1 pt2))
(PRINC " \nLungimea laturii AB este d1= ")
(PRINC d1)
(SETQ d2 (DISTANCE pt2 pt3))
(PRINC " \nLungimea laturii BC este d2= ")
(PRINC d2)
(SETQ d3 (DISTANCE pt3 pt1))
(PRINC " \nLungimea laturii CA este d 3= ")
(PRINC d3)
(SETQ unghi12 (ANGLE pt1 pt2))
(PRINC " \nUnghiul in radiani dintre latura AB si planul xOy este: ")
(PRINC unghi12)
(SETQ unghi23 (ANGLE pt2 pt3))
(PRINC " \nUnghiul in radiani dintre latura BC si planul xOy este: ")
(PRINC unghi23)
(SETQ u nghi31 (ANGLE pt3 pt1))
(PRINC " \nUnghiul in radiani dintre latura CA si planul xOy este: ")
(PRINC unghi31)
(PRINC)
)
Grafică asistată de calculator . Seria a III -a. Aplicații AutoL isp
70
APLICAȚII PROPUSE
B.1. Realizați un program care să calculeze și să afișeze media
aritmetică a 4 numere întregi .
B.2. Realiza ți un program care să calculeze și să afișeze media
geometrică a 3 numere naturale nenule .
B.3. Realizați un program care să calculeze și să afișeze media finală.
Media finală se va calcula conform raționamentului: 60% din nota obținută la
examen, 30% di n nota obținută la proiect, 10% din nota obținută la laborator.
B.4. Realizați un program care să calculeze logaritmul natural al unui
număr mare, după care aplicați funcția exponențială EXP rezultatului.
B.5. Realizați un program care să calculeze tan genta unui unghi (în
radiani), în baza funcțiilor predefinite SIN și COS .
B.6. Realizați un program care să calculeze funcțiile inverse
trigonometrice arcsin și arccos dintr -un număr aflat în intervalul [ -1, 1], în
baza relațiilor de calcul date de func ția trigonometrică arctg .
B.7. Realizați un program care să returneze argumentul maxim și
argumentul minim dintr -o listă de argumente, pe care să le afișeze printr -un
prompter.
Lucrarea nr. 5
71
FUNCȚII PREDEFINITE DE CONVERSIE,
MANIPULARE , ENUMERARE, SELECTARE ȘI
ITERARE
5.1. SCOPUL LUCRĂRII
Lucrarea permite studenți lor să utilizeze comenzile predefinite de
conversie a diferitelor tipuri de date, de manipulare a șirurilor de caracter e, de
selectare și iterare , de enumerare . Se urmărește asimilarea unor tehnici de bază
care să permită însușirea noțiunilor necesare acestor operațiuni .
5.2. DESFĂȘURAREA LUCRĂRII
Se vor prezenta, unele funcții predefinite pentru conversia tipurilor de
date, funcții pentru manipularea șirurilor de caractere, funcții de selectare și
iterare , funcții de enumerare . Studenții vor trebui să se familiarizeze cu
funcțiile specifice și să rezolve problemele propuse ca temă.
5.3. FUNCȚII DE CONVERSIE A DATELOR
Funcția ANGTOS (angle to string ) – returnează o valoare
unghiulară reală (în radiani) unui unghi, sub forma unui șir de caractere (v.
exemplul 5.1) .
Sintaxă : (ANGTOS Unghi Mod Exact )
Exemplul 5.1 . Funcția ANGTOS
(SETQ a (/ PI 10))
(ANGTOS a 0 0) ; re turnează ”18”
(ANGTOS a 0 4) ; returnează ”18.0000”
(ANGTOS a 1 4) ; returnează ”18 d 0’0”
(ANGTOS a 2 3) ; returnează ”20.333g”
(ANGTOS a 3 5) ; returnează ”0.237945”
(ANGTOS a 4 3) ; returnează ”N 85 d 0’ 0” 0”
Valoarea parametrului <Unghi > este reală. Forma șirului de caractere
returnat depinde de parametrii opționali <Mod> și <Exact >, care sunt numere
întregi ce definesc modul de editare a șirului de caractere.
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
72 Parametrul <Exact > definește numărul de zecimale utilizat la
reprezentarea șirului de cara ctere prelucrat.
Valorile parametrul ui <Mod>, sunt centralizate în tabelul 5.1 [1].
Tabel 5.1. Valorile parametrului < Mod > al funcției ANGTOS
Valoare parametru <Mod > Forma de editare
0 Grade hexazecimale
1 Grade/minute/secunde
2 Grade zecimale
3 Radiani
4 Grade geodeziene
Funcția RTOS (real to string ) – returnează un șir de caractere
care reprezin tă valoarea reală a unui număr (v. exemplul 5.2).
Sintaxă : (RTOS Num Mod Exact )
Exemplul 5.2 . Funcția RTOS
(SETQ b 12.345678)
(RTOS b 1 4) ; returne ază ”1.2345 E+01”
(RTOS b 2 3) ; returnează ”12.345”
(RTOS b 3 2) ; returnează ”1’ -3.35” ”
(RTOS b 4 3) ; returnează ”1” -33/8” ”
(RTOS b 4 5) ; returnează ”12 3/8”
Valoarea parametrului <Num > este reală. Forma șirului de caractere
returnat depinde de pa rametrii opționali <Mod> și <Exact >, care sunt numere
întregi ce definesc modul de editare a șirului de caractere.
Parametrul <Exact > definește numărul de zecimale utilizat la
reprezentarea șirului de caractere prelucrat.
Valorile parametrul ui <Mod> sunt centralizate în tabelul 5.2 [1].
Tabel 5.2. Valorile parametrului < Mod > al funcției RTOS
Valoare parametru <Mod > Forma de editare
1 Științific
2 Zecimal
3 Inginerie (picioare/inch zecimali)
4 Arhitectură (picioare/inch fracționar)
5 Unități fracționa re arbitrare
DACĂ PARAMETRII < MOD > ȘI < EXACT > LIPSESC,
VALORILE CORESPUNZĂTOARE SUNT PRELUATE DE AUTOLISP
DIN VARIABILELE AUTOCAD CURENTE
Lucrarea nr. 5
73
Funcția ASCII – returnează codul ASCII al primului ca racter al
unui șir de caractere (v. exemplul 5.3).
Sinta xă: (ASCII SirC)
Exemplul 5.3 . Funcția ASCII
(SETQ a ”Exemplu”)
(ASCII ”Banca”) ; returnează 66 – codul ASCII pentru caracterul B
(ASCII ”x Zx”) ; returnează 120 –codul ASCII pentru caracterul x
(ASCII ” (x -y) ” ; returnează 40 – codul ASCII pentru caracterul (
(ASCII a) ; returnează 70 – codul ASCII pentru caracterul E
Funcția ATOF (ASCII to float ) – returnează valoare a reală a unui
șir de caractere (v. exemplul 5.4).
Sintaxă : (ATOF SirC)
Exemplul 5.4. Funcția ATOF
(ATOF ”15”) ; returnează 15.0000
(ATOF ” -3.1415”) ; returnează –3.1415
Funcția ATOI (ASCII to integer ) – returnează valoarea î ntreagă a
unui șir de caractere (v. exemplul 5.5).
Sintaxă : (ATOI SirC)
Exemplul 5.5. Funcția ATOI
(ATO I ”27.3”) ; returnează 27
(ATOI ”21.7”) ; returnează 21
(ATOI ”5”) ; returnează 5
Funcția ITOA (integer to ASCII ) – returnează rezultatul
transformării unui număr întreg într -un șir de caractere (v. exemplul 5.6).
Sintaxă : (ITOA Int)
Exemplul 5 .6. Funcția ITOA
(SETQ a 67)
(ITOA 10) ; returnează ”10”
(ITOA a) ; returnează ”67”
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
74
Funcția READ – returnează prima listă sau primu l atom al unui
șir de caractere (v. exemplul 5.7).
Sintaxă : (READ SirC)
Exemplu l 5.7. Funcția READ
(SETQ a ”Exemplu”)
(READ ”Coral”) ; returnează CORAL
(READ ”17.3”) ; returnează 17.3
(READ ‘a) ; returnează EXEMPLU
FUNCȚIA READ RETURNEAZĂ ÎNTOTDEAUNA UN SYMBOL .
UZUAL, ACEASTĂ FUNCȚIE ESTE UTILIZATĂ PENTRU A
TRANSFORMA LITERELE DINTR -UN ȘIR DE CARACTERE ÎN
MAJUSCULE
Funcția FIX – returnează valoarea întreagă a unui număr real (v.
exemplul 5.8) .
Sintaxă : (FIX Num )
Exemplul 5.8. Funcția FIX
(SETQ a 17.375 b 10 c 0)
(FIX 10.91) ; returnează 10
(FIX a) ; returnează 17
(FIX b) ; returnează 10
(FIX c) ; returnează 0
Funcția FLOAT – returnează o valoare reală obț inută prin
conversia unui număr (v. exemplul 5.9).
Sintaxă : (FLOAT Num )
Exemplul 5.9. Funcția FLOAT
(SETQ a 17.375 b 10 c 0)
(FLOAT 76) ; returnează 76.0000
(FLOAT a) ; returnează 17.3750
(FLOAT b) ; returnează 10.0000
(FLOAT c) ; returnează 0.0000
Lucrarea nr. 5
75
Funcția CHR – returnează caracterul corespunzător unui cod
ASCII dat (v. exemplul 5. 10).
Sintaxă : (CHR Int)
Exemplul 5.10 . Funcția CHR
(SETQ a 67 b 15.5)
(CHR a) ; returnează ”(”
(CHR b) ; returnează „ bad argument type ”
(CHR ”(corp)”) ; returnează „ bad argument type ”
Codul ASCII dat de parametrul < Int> trebuie să fie întotdeauna număr
întreg.
Funcția CVUNIT – convertește o valoare sau un punct dintr -o
unitate de măsură în altă unitate de măsură (v. exemplul 5.11).
Sintaxă : (CVUNIT Arg UMinitial UMfinal )
Exemplul 5.11 . Funcția CVUNIT
(CVUNIT 6 ”hours” ”minute”)
360.0000
(SETQ a 12.7)
(CVUNIT a ”cm” ”dm”)
1.2700
(CVUNIT a ”mm” ”inch”)
0.5000
(CVUNIT a ”mm” ”sq inch”)
NIL
(CVUNIT 1.0 ”galben” ”liter”)
3.7854
Unitățile de măsură trebuie introduse sub forma unui șir de caractere
care se regăsește în fișierul „ acad.u nt”.
Dacă se dorește efectuarea mai multo r transformări între aceleași
unități de măsură, se aplică funcția CVUNIT cu argument 1.0. Se va obține un
factor real care apoi se înmulțește cu fiecare din valorile ce trebuie
transformate.
Funcția VPORTS – returnează o listă a descriptorilor ferestrelor
active.
Sintaxă : (VPORTS )
Lista descriptorilor cuprinde: numărul de identificare al ferestrei;
coordonatele colțului din stânga jos al ferestrei; coordonatele colțului din
dreapta jos al ferestrei.
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
76
Funcția *ERROR* – funcție definită de utilizator pentru tratarea
erorilor AutoLISP . Dacă funcția este diferită de NIL ea este automat executată
de fiecare dată când interpretorul AutoLISP detectează o eroare (v. exemplul
5.12).
Sintaxă : (DEFUN *ERROR* Msg)
Exemp lul 5.12 . Funcția *ERROR*
(DEFUN *ERROR* (msg)
(PRINC (STRCAT ”Eroare, ”msg))
(PRINC)
)
Argumentul < Msg> este un șir de caractere ce conține o descriere a
erorii.
Funcția TRACE – funcție utilizată în depanarea programelor
AutoLISP, ce are rolul de a r eturna numele funcției utilizator după ce aceasta a
fost executată (v. exemplul 5.13).
Sintaxă : (TRACE Funcție )
Exemplul 5.13 . Funcția TRACE
(TRACE Calcul)
CALCUL
Funcția UNTRACE – funcție utilizată pentru dez activarea
indicatorului de execuție al funcției utilizator, returnând numele ei (v.
exemplul 5.14).
Sintaxă : (UN TRACE Funcție )
Exemplul 5.13 . Funcția UNTRACE
(UNTRACE Calcul)
CALCUL
5.4. FUNCȚII DE MANIPULARE A ȘIRURILOR DE
CARACTERE
Funcția STRCA SE – realizează convertirea caracterelor
alfabetice dintr -un șir de caractere <SirC> dat, în litere mari sau mici, funcție
de valoarea argumentului <Tip> (v. exemplul 5.1 4).
Sintaxă : (STRCASE SirC Tip)
Lucrarea nr. 5
77
Exemplul 5.1 4. Funcția STRCASE
(STRCASE ”cArtE”)
”CARTE”
(STRCASE ”cArtE” T)
”carte”
DACĂ < TIP> LIPSEȘTE SAU ESTE NIL, TOATE
CARACTERELE ALFABETICE DIN < SIRC > SUNT TRANSFORMA –
TE ÎN LITERE MARI, IAR DACĂ < TIP> ARE VALOAREA T (TRUE ),
ACESTEA SUNT CONVERTITE ÎN LITERE MICI
Funcția STRCAT – returnea ză un șir de caractere ce se obține
prin concatenarea mai multor șiruri de caractere (v. exemplul 5.1 5).
Sintaxă : (STRCAT SirC1 SirC2 … SirCN )
Exemplul 5.15. Funcția STRCAT
(STRCAT ”Anti” ”furt” )
”Antifurt”
(SETQ prenume ”Dan ” )
(SETQ nume ”Ion” )
(STRCAT prenume nume)
”Dan Ion”
Funcția STRLEN – returnează numărul de caractere din șirul
specificat (v. exemplul 5.1 6).
Sintaxă : (STRLEN SirC)
Exemplul 5.16. Funcția STRLEN
(STRLEN ”Prenume”)
7 (STRLEN)
0
ÎN CAZUL ÎN CARE ȘIRUL DE CARACT ERE LIPSEȘTE,
FUNCȚIA RETURNEAZĂ UN RĂSPUNS NUL (0)
Funcția SUBSTR – returnează un subși r dintr -un șir de caractere
dat (v. exemplul 5.1 7).
Sintaxă : (SUBSTR SirC Start Lung )
Exemplul 5.17. Func ția SUBSTR
(SUBSTR ”Teleenciclopedie” 7 6)
”ciclop”
(SUBSTR ”Teleenciclopedie” 5)
”enciclopedie”
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
78
SUBȘIRUL RETURNAT ÎNCEPE DE LA POZIȚIA < START > ȘI
ARE O LUNGIME < LUNG >. ARGUMENTELE < START > ȘI < LUNG >
TREBUIE SĂ FIE NUMERE ÎNTREGI POZITIVE ȘI DIFERITE DE
ZERO
5.5. FUNCȚII DE SELECTARE ȘI ITERARE
Funcția IF – evaluează o condiție.
Dacă această condiție este îndeplinită (diferită de NIL), se execută al
doilea argument (primul argument este condiția), în caz contrar se execută al
treilea argument (facultativ) (v. exemplul 5.18) .
Sintaxă : (IF Cond THEN Arg1 ELSE Arg2 )
Exemplul 5.18. Func ția IF
(IF (<= a 20))
(+ a 1)
(SETQ gata T)
) ; dacă a <= 20
; atunci ( then) incrementează valoarea lui a
; altfel ( else) atribuie variabilei gata valoarea True
Funcția COND – funcție dezvoltată din IF, prin care se pot
controla mai multe condiții .
La îndeplinirea primei condiții (diferită de NIL) se execută argumentul
aferent și se părăsește funcția (v. exemplul 5.19) .
Sintaxă : (COND (Cond1 Funct1 )…(CondN FunctN ))
Exemplul 5.19. Func ția COND
(COND
((< varsta 10) (PRINC ”Prea devreme pentru AutoLisp”))
((< varsta 20) (PRINC ”Ai început din timp”))
(varsta (PRINC ”Distracție plăcută”))
)
Indiferent de vârsta introdusă, ultima condiție este adevărată dar
argumentul aferent ei va fi executat doar dacă condițiile anterioare sunt false.
Funcția WHILE – determină evaluarea argumentelor până în
momentul în ca re condiția devine falsă, adică NIL.
Altfel spus, funcția execută argumentele atâta timp cât condiția este
adevărată (v. exem plul 5.20) .
Lucrarea nr. 5
79
Sintaxă : (WHILE Expresie Funcție )
Exemplul 5.20. Func ția WHILE
(DEFUN C: bucla()
(SETQ a 0)
(WHILE (< a 5)
(SETQ c (GETREAL ”Introduceți un număr :”))
(evaluare)
(SETQ a (+ a 1))
)
)
(DEFUN evaluar e ()
(PRINC c)
)
Atâta timp cât a este mai mic ca 5, se cere utilizatorului introducerea
unui număr care este atribuit lui c și se va lansa în lucru o funcție internă
evaluare , după care se incrementează a cu 1 și se reia ciclul.
Funcția REPEAT – execută o se cvență de un număr de ori impus
(v. exemplul 5. 21).
Sintaxă : (REPEAT Numar Funcție )
Exemplul 5.21. Func ția REPEAT
(DEFUN C: repeta()
(SETQ a 2 b 50)
(REPEAT 5
(SETQ a (* 2 a)
b (+ b 10)
)
(PROMPT “ \nAfișează a: “)
(PRINC a)
(PROMPT “; Afișează b: “)
(PRINC b)
)
)
La fiecare ciclare, a se înmulțește cu 2 și b se adună cu 10. După 5
ciclări, execuția este întreruptă.
5.6. FUNCȚII DE ENUMERARE
Funcția PROGN – permite prelucrarea secvențială a unor funcții
individuale (v. exemplul 5.2 2).
Sintaxă : (PROGN Funcții )
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
80
Exemplul 5.22 . Funcția PROGN
(IF (<= a 20)
(PROGN
(+ a 1)
(+ b 5)
)
(SETQ OK T)
) Dacă a <= 20
atunci
adună la a pe 1
adună la b pe 5
închidere PROGN
altfel, atribuie variabilei OK valoarea T (True )
închidere IF
Funcția QUOTE – permite transferul unui argument fără a fi
evaluat (v. exemplul 5.2 3).
Sintaxă : (QUOTE Argument )
Exemplul 5.23 . Funcția QUOTE
(QUOTE Argument)
ARGUMENT
(QUOTE ”Argument”
”ARGUMENT”
(QUOTE (Argument)
(ARGUMENT)
În programe, funcția QUOTE poate fi înlocuită prin ghilimele.
APLICAȚII REZOLVATE
A.1. Realizați un program pentru calcularea l ui n!
prin funcția WHILE
(DEFUN C:factorial()
(setq N (getreal " \nIntroduceti N:"))
(setq P 1)
(setq I 1)
(while (<= I N)
(setq P (* P I))
(setq I (+ I 1))
)
(prompt (strcat " \nValoarea lui N! este: " (rtos N) "!" "=" (rtos P)))
(princ)
)
Lucrarea nr. 5
81
prin func ția IF
(DEFUN C:factif()
(princ " \nProgram pentru calcularea lui n!")
(setq num (getint " \nIntroduceti numarul: ")
factor 1
i 1)
(if (< i num)
(repeat ( – num 1)
(setq i (+ i 1) factor (* factor i))
)
)
(princ (strcat "Rezultatul este: " (rtos factor)))
(princ)
)
A.2. Realizați un program care să afi șeze produsul (a x 2), respectiv
(b + 10) de n ori, fiecare pas n al itera ției preluând valorile de la pasul (n -1).
(DEFUN C:repeta()
(textscr)
(setq a (getreal " \nIntroduceti a:"))
(setq b (getreal " \nIntroduceti b:"))
(setq n (getint " \nIntrodceti pasul n:"))
(repeat n
(setq a (* 2 a)
b (+ b 10)
)
(prompt " \nAfiseaza a: ")
(princ a)
(prompt "; Afiseaza b: ")
(princ b)
)
)
APLICAȚII PROPUSE
B.1. Realizați un program care să definească o funcție cu un singur
parametru pentru validarea unui răspuns. Dacă ră spunsul utilizatorului este
„D” sau „d”, parametrul funcției va fi setat pe valoarea T (True ). Altfel,
valoarea va fi NIL.
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
82
B.2. Realizați un program care să ceară utilizatorului continuarea
unei operații de adunare (răspuns D) sau încheierea programului (răspuns N).
Dacă răspunsurile sunt diferite de D și N, să se atragă atenția utilizatorului
asupra variantelor de răspuns și să se relanseze în execuție programul.
B.3. Realizați un program care, în mod repetat, să preia de la
utilizator șiruri de caract ere. După ce noul șir a fost preluat, să se adauge
șirului vechi calculându -se totodată lungimea șirului nou creat. Lungimea
astfel calculată să fie afișată sub forma de șir de caractere. Întreruperea
introducerii de șiruri de caractere să se facă prin int roducerea unui șir NUL .
Lucrarea nr. 6
83
FUNCȚII PREDEFINITE DE MANIPULARE
A LISTELOR . FUNCȚII LOGICE
6.1. SCOPUL LUCRĂRII
Lucrarea permite studenți lor să utilizeze comenzile predefinite pentru
manipularea listelor și funcțiile logice . Se urmărește asimilarea unor tehnic i de
bază care să permită însușirea noțiunilor necesare operării cu datele tip listă și
a operanzilor logici .
6.2. DESFĂȘURAREA LUCRĂRII
Se vor prezenta, unele funcții predefinite pentru manipularea listelor și
funcțiile logice . Studenții vor trebui să se familiarizeze cu funcțiile specifice și
să rezolve problemele propuse ca temă.
6.3. FUNCȚII DE MANIPULARE A LISTELOR
Funcția APPEND – returnează o listă formată prin reuniunea
celor N liste spec ificate în interiorul funcției (v. exemplul 6.1).
Reunirea listelor se realizează în ordinea apariției lor în cadrul
comenzii.
Sintaxă : (APPEND Lista1 Lista2 … ListaN )
Exemplul 6.1 . Funcția APPEND
(APPEND ‘(N1 N2) ‘(N3 N4))
(N1 N2 N3 N4)
(SETQ A ‘(N1 N2)
B ‘(N3 N4)
C ‘(N5 N6) )
(APPEND A B C)
(N1 N2 N3 N4 N5 N6)
Funcția APPLY – returnează rezultatul obținut prin aplicarea
unei funcții AutoL ISP unei liste specificate (v. exemplul 6.2).
Funcția specificată în comandă are ca argumente, elementele listei.
Sintaxă : (APPLY ‘Funcție Listă )
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
84
Exemplul 6.2 . Funcția APPLY
(APPLY ‘* ‘(1 3 5))
15
(APPLY ‘+ ‘(2 4 8))
14
(APPLY ‘STRCAT (“Cas” “tan”)
“Castan”
Funcția ASSOC – returnează o sublistă a argumentului Listă (v.
exemplul 6.3).
Căutarea sublistei se realizează după pri mul ei element care trebuie să
fie identic cu cuvântul cheie Argument din funcția ASSOC.
Sintaxă : (ASSOC ‘Argument Listă )
Exemplul 6.3. Funcția ASSOC
(SETQ tabel ‘((poz1) (rep “M6x25x1.5”) (masa 1.473 kg)))
(ASSOC ‘rep tabel)
(rep “M6x25x1.5”)
(ASSOC ‘ buc tabel)
NIL
Primul argument al listei trebuie precedat de apostrof sau o variabilă de
tip listă.
Funcția CAR (Contents of Address part of Register ) – returnează
primul argument găsit în parametrul Listă (v. exemplul 6.4).
Sintaxă : (CAR Listă )
Exemplul 6.4. Funcția CAR
(CAR ‘(1.05 17 “Cuvânt”))
1.05
(CAR ‘((1.05 17.13) (7.3 10.1)))
(1.05 17.13)
(CAR ‘())
NIL
Funcția este utilizată cel mai des pentru a obține coordonata x a unui
punct anterior definit (în AutoL ISP, coordonatele unui p unct sunt cuprinse
într-o listă de 3 elemente, primul fiind coordonata x a punctului).
Dacă funcția se aplică unei liste vide, se returnează NIL.
Funcția CDR (Contents of Decrement part of Register ) –
returnează argumentele parametrului Listă , exceptând primul element al listei
(v. exemplul 6.5) .
Sintaxă : (CDR Listă )
Exemplul 6.5. Funcția CDR
(CDR ‘(1.05 17.1 1.5))
(17.1 1.5)
Lucrarea nr. 6
85 (CDR ‘((1.1 “Nume”) (7.3 10)))
(7.3 10)
(CDR ‘(1.01))
NIL
Dacă funcția este folosită pentru extragerea directă a c oordonatei y a
unui punct anterior definit, se va obține o listă care conține, în cazul punctelor
3D, și coordonata z a punctului.
Dacă lista are un singur element, se returnează NIL.
Funcția CxR – permite realizarea unei concatenări a funcțiilor
CAR și CDR pe maxim 4 nivele de imbricare (v. exemplul 6.6) .
În locul caracterului „x” poate fi utilizată oricare din combinațiile: AA
AD AAA ADA ADD AAAA AAAD AADA AADD ADAA ADAD ADDA
ADDD DD DA DDD DAD DAA DDDD DDDA DDAD DDAA DADD
DADA DAAD DAAA.
Exemplul 6 .6. Funcția CxR
(CADR ‘(A B C)
B
(CDADDR ‘((A) (BC) (DEF) (GHIJ)))
(EF)
(CADDDR ‘((A) (BC) (DEF) (GHIJ)))
G
(CADR Listă )
(CAR (CDR Listă )
(CDADDR Listă )
(CDR (CAR (CDR (CDR Listă ))))
(CADDDR Listă )
(CAR (CDR (CDR (CDR Listă ))))
Fiecare caracter „ A” reprezintă funcția CAR și fiecare caracter „ D”
reprezintă funcția CDR .
Funcția LAST – returnează ultimul argument din lista Listă (v.
exemplul 6.7).
Sintaxă : (LAST Listă ).
Nu este indicată utilizarea funcției pentru a obține coordonata y a unui
punct deoarece, dacă avem un punct 3D se va obține coordonata z (se va
utiliza funcția CADR ).
Dacă lista Listă nu are argumente, va fi returnat NIL.
Exemplul 6.7. Funcția LAST
(LAST ‘(a b c))
c (LAST ‘((a b) (b c) (c d e)))
(c d e)
Funcția CONS – inserează pe prima poziți e într -o listă, un
element dat (v. exemplul 6.8).
Sintaxă : (CONS Arg Listă ).
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
86
Exemplul 6.8. Funcția CONS
(CONS ‘A ‘(B C))
(A B C) (CONS ‘(A B) ‘((C D) (E F)))
((A B) (C D) (E F))
Atât în locul argumentului, cât și în l ocul listei pot fi utilizați atomi (v.
exemplul 6.9) . În acest caz, funcția CONS creează o structură de date
denumită „ dotted pair ”. AutoL ISP afișează elementele unei astfel de structuri
separate printr -un punct.
Exemplul 6.9. Funcția CONS (dotted pair )
(CONS ‘B 5)
(B.5) (CAR (CONS ‘B 5))
B (CDR (CONS ‘B 5))
5
Structura „ dotted pair ” este un tip particular de listă și nu este acceptat
ca și argument de toate funcțiile AutoL ISP care lucrează cu liste.
Funcți a MAPCAR – returnează o listă ce conțin e rezultatul
aplicării unei funcții AutoL ISP fiecărui element conținut în Lista1 … ListaN
(v. exemplul 6.10).
Cele N liste sunt considerate de funcția MAPCAR ca fiind argumente
ale parametrului <Funcție >.
Sintaxă : (MAPCAR ‘Funcție ‘Lista1 … ‘ListaN )
Exemplul 6.10. Funcția MAPCAR
(SETQ x 5 y 10)
(MAPCAR ‘1 – ‘(LIST x y))
(4 9)
(MAPCAR ‘/ ‘(50 80 100) ‘(5 10 25))
(10 8 4)
Funcția FOREACH – parcurge o listă atribuind pe rând
elementele listei variabilei VarX conținută în Expresie (v. exemplul 6 .11).
Variabila VarX este unul din tre argumentele funcției conținută în
Expresie . Expresia este evaluată după fiecare atribuire și se returnează
rezultatul ultimei evaluări.
Sintaxă : (FOREACH VarX ‘Listă Expresie )
Exemplul 6.11. Funcția FOREACH
(SETQ a 10 b 20)
(FOREACH z ‘(a b) ‘(SET z (* 1.5 (EVAL z))))
(EVAL a)
15
(EVAL b)
30
(FOREACH x ‘(a b) (PRINT x))
(PRINT a); (PRINT b)
Lucrarea nr. 6
87
Funcția LENGTH – returnează numărul de argumente conținute
în lista Listă (v. exemplul 6.12).
Funcția returnează doa r numărul argumentelor din lista Listă , fără a
ține cont de faptul că argumentele pot fi la rândul lor liste.
Sintaxă : (LENGTH Listă )
Exemplul 6.12. Funcția LENGTH
(LENGTH ‘(a b c d))
5
(LENGTH ‘(a b c (d e)))
4
(LENGTH (LAST ‘(a b c (d e))))
2
Funcția LIST – permite definirea unei liste cu N elemente (v.
exemplul 6.13).
În general, această funcție este utilizată pentru a defini un punct prin
coordonatele sale.
Sintaxă : (LIST ‘Argument1… ‘ArgumentN )
Exemplul 6.13. Funcția LIST
(LIST ‘x ‘y ‘z)
(x y z) (LIST ‘x ‘y ‘z ‘(a b))
(x y z (a b))
Funcția LISTP – returnează T (TRUE ) în cazul în care
parametrul Argument este o variabilă de tip listă (v. exemplul 6.14).
Se recomandă pentru testa rea argumentel or funcțiilor AutoL ISP care
acceptă d oar argumente de tip listă.
Sintaxă : (LISTP ‘Argument )
Exemplul 6.14. Funcția LISTP
(LISTP ‘(x y))
T (LISTP ‘a)
NIL (LISTP ‘())
T
Funcția MEMBER – caută în lista Listă parametrul Argument și
returnează o listă care conține toate elementele list ei ce urmează după
Argument (v. exemplul 6.15).
Lista returnată va începe cu Argument .
Sintaxă : (MEMBER ‘Argument ‘Listă )
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
88
Exemplul 6.15. Funcția MEMBER
(MEMBER ‘c ‘(a b c d e f g))
(c d e f g) (MEMBER ‘e ‘(a b c d))
NIL
Funcția NTH – extrage argumentul cu numărul de ordine Num
din lista Listă (v. exemplul 6.16).
Primul argument al unei liste are întotdeauna numărul de ordine 0.
Sintaxă : (NTH Num ‘Listă )
Exemplul 6.16. Funcția NTH
(NTH 3 ‘((a b) (c) (d e f) (g h i j) (k)))
(g h i j) (NTH 4 ‘(( a) (b c) (d) (e)))
NIL
Funcția REVERSE – inversează argumentele listei Listă (v.
exemplul 6.17).
Dacă lista Listă este vidă, se returnează NIL.
Sintaxă : (REVERSE ‘Listă )
Exemplul 6.17. Funcția REVERSE
(REVERESE ‘((a b) (c d) (e f g) (h)))
((h) (e f g) (c d) (a b))
Funcția SUBST – permite înlocuirea unui argument existent
ArgVechi dintr -o listă Listă cu un argument nou ArgNou (v. exemplul 6.18).
Dacă ArgVechi nu face parte din Listă , se returnează lista Listă
nemodificată.
Sintaxă : (SUBST ‘ArgNou ‘ArgVechi ‘Listă )
Exemplul 6.18. Funcția SUBST
(SUBST ‘** ‘x ‘(x y (m n) (x z) x))
(** y (m n) (x z) **)
(SUBST ‘** ‘a ‘(x y (z p) (x z) x))
(x y (z p) (x z) x)
6.4. FUNCȚII LOGICE
Funcți a BOOLE – permit e efectuarea operațiilor booleene la
nivel de bit.
Sintaxă : (BOOLE Bit_funcțional Nr.1 Nr.2)
Lucrarea nr. 6
89 Argumentele Nr.1, Nr.2, …, Nr.n sunt automat convertite în numere
binare, după care sunt comparate bit cu bit, rezultatul returnat fiind funcție de
bitul funcțional.
Valoarea bitului funcțional ap arține domeniului [0,15], fiecare număr
din acest domeniu reprezentând o anumită comparație logică adevărată.
Corespondența dintre biți și comparația cu valoarea de adevăr se
regăsește în tabelul 6.1.
Tabel 6.1 . Corespondența dintre biți și valoarea de a devăr
Bit nr. 1 Bit nr. 2 Bit funcțional
0 0 8
0 1 4
1 0 2
1 1 1
Fiecare bit al argumentului Nr.1 este comparat cu bitul corespunzător
al celorlalte argumente. În cazul unei comparații adevărate, bitul din rezultat,
corespunzător biților comparați, p rimește valoarea 1. În caz contrar, valoarea
este 0.
Operațiile booleene standard sunt AND, OR, XOR, NOT și se obțin
prin combinarea biților funcționali, așa cum se observă în tabelul 6.2.
Tabel 6. 2. Operații booleene
Bit funcțional Operație booleană Bit returnat este 1 dacă
1 AND Cei doi biți de intrare sunt egali cu 1
2 + 4 = 6 XOR Unul dintre biții de intrare este egal cu 1
1 + 2 + 4 = 7 OR Unul sau amândoi biții de intrare sunt egali cu 1
8 NOT Amândoi biții de intrare sunt egali cu 0
Funcți a AND – realizează combinația logică „ȘI” între
elementele unei liste de argumente (v. exemplul 6.19).
Pentru ca f uncția AND să returne ze NIL este suficient ca unul sau mai
multe argumente să fie NIL. Dacă toate argumentele funcției sunt diferite de
NIL, valoarea returnată este T (TRUE ).
Exemplul 6.1 9. Funcția AND
(SETQ a 12
b nil
c „sir”)
(AND 2.5 a c)
T
(AND 2.5 a b c)
NIL
Funcți a OR – realizează combinația logică „SAU” între
elementele unei liste de argumente (v. exemplul 6.20).
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
90 Pentru ca funcția OR să returneze T (TRUE ) este suficient ca unul
dintre argumente să fie diferit de NIL. În caz contrar, funcția returnează NIL.
Exemplul 6. 20. Funcția OR
(SETQ a 12
b nil
c „sir”)
(OR 2.5 a b c)
T
(OR 2.5 c)
NIL
APLICAȚII REZOLVATE
A.1. Să se realizeze un program de desenare a unei linii 3D în
AutoCAD . Primul punct va fi cerut ca punct 3D , iar cel de -al doilea punct va
fi cerut ca punct 2D. Se presupune că al doilea punct are aceeași coordonată z
ca și primul punct .
(DEFUN C:lin3d ()
(INITGET 16)
(SETQ pts (GETPOINT “Introduceți punctul 3D de start al liniei (x, y, z):”)
ptf (GETPOINT “Introduceți punctul 2D de sfârșit al liniei (x, y):”)
)
(COMMAND “3DPOLY” pts ( SUBST (CADDR pts) 0.0 ptf) “”)
(COMMAND ”ZOOM” “E”)
(PRINC)
)
A.2. Să se realizeze un program de desenare în AutoCAD a unui
triunghi dreptunghic cu catetele paralele cu axele UCS -ului curent. Se vor
introduce: punctul de start; lungimea pe x; lungime a pe y. Programul trebuie
să permită modificarea lungimii pe x. Procesul de modificare se va termina
dacă lungimea pe x primește valoarea NULL (< Enter >).
Nr.
linie Structura programului AutoLISP
1 (DEFUN C:triung hi ()
2 (SETQ pts (GETPOINT “Punct de start :”)
3 lungx (GETREAL “Lungime pe x :”)
4 lungy (GETREAL “Lungime pe y :”)
5 crdx (LIST (CAR pts))
Lucrarea nr. 6
91 6 crdy (CADR pts)
7 )
8 (WHILE (NOT (NULL lungx))
9 (SETQ crdx (CONS lung x crdx)
10 ptx2 (APPLY ‘+ crdx)
11 )
12 (COMMAND “Line” pts (LIST ptx2 crdy) (LIST ptx2 (+ lungy crdy)) “C”)
13 (COMMAND “Zoom” “E”)
14 (SETQ lungx (GETREAL “Introduceți altă catetă pe x :”))
15 )
16 (PRINC “Au fost introduse următoarele lungimi de catete (x): \n”)
17 (PRINC crdx)
18 )
Nr.
linie Semnificația liniilor AutoLISP
1 Se definește funcția triung
2 Se introduce punctul de start
3 Se introduce lungimea catetei pe x
4 Se introduce lungimea catetei pe y
5 Se memorează ca lis tă coordonata x a punctului de start
6 Se memorează coordonata y a punctului de start
7 Ieșire din secvența de atribuire SETQ
8 Atâta timp cât lungimea pe x nu este nulă
9 Se introduce variabila lungx în lista crdx
10 Se calculează coordonata x a punc tului 2
11 Ieșire din secvența de atribuire SETQ
12 Se desenează triunghiul
13 Se încadrează triunghiul într -o fereastră minimă (zoom>extents)
14 Se introduce o altă lungime pe x
15 Ieșire din bucla WHILE
16 Mesaj afișat pe monitor
17 Listare catete pe x introduse
18 Terminare program
A.3. Să se scrie un program prin care, dacă se dă numărul poziției
unui reper să se obțină numele reperului și numărul de repere identice
existente în lista dată .
Se vor scrie două programe:
un program de încărcare a unei liste cu articole ce vor cuprinde
fiecare în parte, următoarele: număr poziți e, denumire reper, număr bucăți:
(DEFUN C:incarc a () ;se definește funcția incarc a
(SETQ lstrep ‘(((poz1) (den “Piuli ta M5”) (buc 3)) ;se definește lista de repere
((poz2) (den “ Surub M5x20”) (buc 2))
((poz 3) (den “ Saiba Grover N5 ”) (buc 2))
) ;închidere listă de repere
(deschisă prin ‘ )
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
92 ) ;ieșire din secvența de atribuire
SETQ
) ;terminare program
un program de citire condiționată a listei lstrep , după numărul
poziției introduse de utilizator:
(DEFUN C:rep er (/ poz den) ;se definește funcția reper
(SETQ poz (GETINT “ Numărul poziției de listat: \n ”)
den (ASSOC (LIST ‘poz poz) lstrep)
;se caută și se memorează sublista
care conține numărul de poziție
selectat
)
(IF (NOT (NULL den)) ;afișare nume piesă și numărul de
bucăți
(PRINC (APPEND (ASSOC ’den den)
(ASSOC ’buc den)))
)
(PRINC)
)
APLICAȚII PROPUSE
B.1. Să se realizeze un program care afișează coordonata x, respectiv
coordonata y a unui punct anterior introdus .
B.2. Se dă lista definită prin sintaxa: (SETQ lista ‘((a) (b c) (d e f))).
Să se adauge următoarele argumente: x la începutul listei; (s f) la sfârșitul
listei .
B.3. Se dă lista definită prin sintaxa: (SETQ lista ‘((a) (b c) (d e f) (g h
i) (j) (k l m n o p))). Să se extragă argumentele: b, h, (j), m, o .
B.4. Să se realizeze un program pentru desenarea automată a
dreptunghiurilor. Ca date de intrare se vor introduce: punctul de start,
lungimea pe direcția x, lungimea pe direcția y.
Lucrarea nr. 7
93
FUNCȚII PREDEFINITE DE OPERARE A
ENTITĂȚILOR AUTOCAD
7.1. SCOPUL LUCRĂRII
Lucrarea permite studenți lor să utilizeze comenzile predefinite pentru
operarea entităților AutoCAD . Se urmărește asimilarea unor tehnici de bază
care să per mită însușirea noțiunilor necesare manipulării, editării, accesării sau
prelucrării entităților AutoCAD .
7.2. DESFĂȘURAREA LUCRĂRII
Se vor prezenta, unele funcții predefinite pentru manipularea , editarea,
accesarea sau prelucrarea entităților AutoCAD . Studenții vor trebui să se
familiarizeze cu funcțiile specifice și să rezolve problemele propuse ca temă.
7.3. LISTE ASOCIATE ENTITĂȚILOR AUTOCAD
În AutoCAD, toate entitățile sunt memorate într -o bază de date.
AutoLISP are incluse o serie de funcții c are permit accesarea directă a
entităților AutoCAD și modificarea lor. Modificarea entităților se poate realiza
individual sau în grup.
Fiecărei entități AutoCAD îi este asociat un nume unic pe perioada
editării unui desen, o altă editare a desenului cond ucând la schimbarea
denumirii entității. Numele entității este definit de un număr hexazecimal
format din opt cifre.
Fiecărui nume de entitate îi este asociat în baza de date o listă ce
conține informații care definesc entitatea (tipul de entitate, numele layer -ului
curent, tipul de linie utilizat la desenare, punct de start și de sfârșit al entității,
elevația, grosimea, culoarea etc.).
O altă modalitate de identificare a obiectelor AutoCAD este prin
„entity handle ”, care rămâne nemodificat pe parcursul sesiunilor de editare și
permanent legat de entitățile create. „ Handle ”-ul reprezintă un șir de caractere
alfanumerice care este asociat automat entității care se construiește.
Prin intermediul funcțiilor AutoLISP pot fi extrase caracteristicile
entitățil or din baza de date a desenului și returnate sub forma listelor asociate .
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
94 O listă asociată este formată din subliste care conțin date necesare definirii și
afișării entităților AutoCAD.
Primul membru al uni subliste este un număr întreg care reprezintă
codul grupei și prin intermediul căruia se identifică o anumită proprietate a
entității AutoCAD. Spre exemplu, dacă numele entității este 60000051, prima
sublistă a listei asociate va cuprinde numele entității și codul subgrupei.
Sublista va avea forma ( -1. <Entity name : 60000051>). Presupunând că
entitatea se găsește în layer -ul „0”, sublista asociată layer -ului în care se
găsește entitatea va fi de forma (8. „0”), în care codul grupei este 8.
Prin urmare, codurile grupelor [ 1] permit identificarea unor anu mite
subliste dintr -o listă asociată.
Majoritatea sublistelor cuprind doar doi termeni, separați prin tehnica
„dotted pair ” (spațiu -punct -spațiu ), care presupune ocup area unei mai puțin e
memori i comparativ cu alte tipuri de liste .
Coordonatele punctelor sunt memorate în subliste care au codul de
grupă cuprins în intervalul (10…16) și conțin patru membri (codul grupei,
coordonata x, coordonata y, coordonata z). Spre exemplu, sublista ce
corespunde punctului de coordonate (15.1, 20.5, 0) va avea forma (10
15.100000 20.500000 0.000000).
Datorită faptului că listele asociate entităților AutoCAD sunt
structurate pe liste și subliste, marcate prin seturi de paranteze, AutoLISP este
unealta ideală pentru operarea lor.
Numele funcțiilor AutoLISP predefinite care operează asupra listelor
asociate entităților AutoCAD încep cu ENT .
Nu în ultimul rând, AutoCAD permite atașarea unor date suplimentare
la lista asociată unei entități. Aceste date poartă denumirea de „ Extended
Data ”. Fiecare set de date extinse este uti lizat sub forma unei liste a cărui prim
argument este un șir de caractere ce conține numele aplicației externe care
utilizează datele extinse (AutoLISP, ADS etc.). Prin urmare, datele extinse
sunt cuprinse în liste care, la rândul lor, pot include alte lis te ce conțin un cod
de grupă și datele asociate corespunzătoare.
Codul grupei datelor extinse [ 1] sunt numere întregi formate din
maxim patru cifre.
7.4. FUNCȚII DE PRELUCRARE A NUMELOR ENTITĂȚILOR
AUTOCAD
Funcția ENTNEXT – dacă este apelată fără ar gument, returnează
numele primei entități neșterse din baza de date , iar dacă este apelată cu
argumentul NumeE , returnează numele primei entități neșterse ce se găsește în
baza de date , după NumeE (v. exemplul 7.1).
Sintaxă : (ENTNEXT NumeE )
Lucrarea nr. 7
95
Exemplul 7.1 . Funcția ENTNEXT
(ENTNEXT)
<Entity name: 60000011> ; numele primei entități neșterse
(SETQ n1 (ENTNEXT))
<Entity name: 60000011> ; numele primei entități neșterse este
atribu it lui n1
(SETQ n2 (ENTNEXT n1))
<Entity name: 6000001 5> ; numele primei en tități neșterse ce
urmează după entitatea n1 este atribuit lui n2
ÎN CAZUL ÎN CARE SUNTEM POZIȚIONAȚI PE ULTIMUL
ARTICOL AL BAZEI DE DATE, SE RETURNEAZĂ NIL
Funcția ENT LAST – returnează ultima entitate principală
generată, cuprinsă în baza de date (v. exemplul 7.2) .
Sintaxă : (ENT LAST )
Exemplul 7. 2. Funcția ENTLAST
(COMMAND „CHPROP” ( ENT LAST) ”” „L” PAUSE ””) ; trece ultim a entitate generat ă din
layer -ul inițial în layer -ul dorit de utilizator
FUNCȚIA ENTLAST NU ACCEPTĂ ARGUMENTE, ÎN CAZ
CONTRAR FIIND AFIȘAT MESAJUL DE EROARE „TOO MANY
ARGUMENTS”
Funcția ENT SEL – permite selectarea unei entități printr -un
punct de selecție introdus de utilizator (v. exemplul 7.3).
Sintaxă : (ENT SEL Msg)
Funcția returnează o listă în care primul element este nu mele entității
selectate, iar următorul cuprinde coordonatele punctului de selectare.
Argumentul opțional Msg cuprinde un mesaj ce va fi afișat în momentul în
care se cere punctul de selecție.
Exemplul 7. 3. Funcția ENTSEL
(SETQ ent (ENTSEL „Selectați enti tatea de rupt: ”))
(COMMAND „BREAK” (CAR ent) (CADR ent) ” @”); rupe entitate a selectată în două
obiecte distincte
VARIABILA DE SISTEM OSNAP CARE SETEAZĂ MODUL DE
SELECTARE NU ESTE IGNORATĂ ÎN TIMPUL EXECUTĂRII
COMENZII
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
96
Funcția HANDENT – asociază un număr unic hexazecimal
fiecărei entități cuprinse în desenul curent (v. exemplul 7.4).
Sintaxă : (HANDENT SirC)
Numărul hexazecimal asociat entității AutoCAD poartă denumirea de
„handle ” și rămâne în permanență nemodificat. Funcția HANDENT
returnează chia r și numele entităților șterse în timpul sesiunii curente de lucru,
acestea putând fi recuperate prin funcția ENTDEL.
Exemplul 7. 4. Funcția HANDENT
(HANDENT „2BC”)
Entity name: 60001262
Funcția NENTSEL – se aplică numai dacă subentitatea selectată
este cuprinsă într -o entitate complexă de tip polilinie sau bloc și returnează o
listă cu 4 elemente (numele subentității selectate, coordonatele punctului de
selec ție, matricea de transfer care cuprinde lista de coordonate a patru puncte,
numele entități i complexe) (v. exemplul 7.5).
Sintaxă : (NENTSEL Msg)
Exemplul 7. 5. Funcția NENTSEL
(SETQ nlst (NENTSEL "S electează subentitatea: "))
(<Entity name: 7efa1570> ; numele subentității selectate
(3.4282 3.40008 0.0) ; punctul de selecție în WCS
((1.0 0.0 0. 0) (0.0 1.0 0.0) (0.0 0.0 1.0) (2.0 2.0 0.0)) ; matricea de transfer
(<Entity name: 7efa1588>)) ; numele entității complexe
Argumentul opțional Msg cuprinde un mesaj ce va fi afișat în
momentul în care se cere selectarea entității.
Dacă entitatea complex ă este o subentitate, cel de -al 4-lea element va fi
o listă ce conține toate numele entităților complexe, începând cu cea mai adânc
imbricată.
Al 3 -lea element al listei poate fi utilizat ca matrice de transfer a
coordonatelor relative ale punctelor defin itorii ale entității selectate în
coordonate WCS absolute.
În lista asociată entității imbricate într -un bloc, punctele reprezentative
au coordonatele relative la punctul de inserare al blocului, acest punct putând
fi considerat de coordonate (0,0).
Funcția XDSIZE – returnează o valoare întreagă ce semnifică
spațiul de memorie (în Bytes), ocupat de datele extinse asociate unei entități
(v. exemplul 7.6) .
Lucrarea nr. 7
97
Sintaxă : (XDSIZE Lst)
Argumentul Lst cuprinde o listă care conține datele extinse legate de o
anumită entitate. Lista trebuie să înceapă cu un șir de caractere care indică
numele aplicației ce utilizează datele extinse.
Exemplul 7. 6. Funcția XDSIZE
(REGAPP ”DEM”)
(XDSIZE ‘(-3 (”DEM” (1000 . ”EXEMPLU”))))
20
Dacă funcția returnează o valoare, atun ci lista inclusă în funcție este
validă.
DACĂ ARGUMENTUL LST CONȚINE UN NUME DE
APLICAȚE NEÎREGISTRAT, SE AFIȘEAZĂ MESAJUL DE EROARE
„INVALID APPLICATION NAME IN 1001 GROUP”
7.5. FUNCȚII DE EDITARE A ENTITĂȚILOR
Funcția ENTDEL – permite ștergere a entității NumeEnt dacă
aceasta există în desenul curent sau restaurarea ei dacă aceasta a fost ștearsă pe
durata sesiunii de lucru curente (v. exemplul 7.7) .
Sintaxă : (ENTDEL NumeEnt )
Exemplul 7. 7. Funcția ENTDEL
(SETQ ent (ENTNEXT))
(ENTDEL ent); se ș terge entitatea ent din sesiunea curentă de lucru
(ENTDEL ent); se restaurează entitatea ștearsă anterior
Dacă o entitate este ștearsă și se iese din sesiunea curentă de lucru,
entitatea ștearsă se pierde definitiv .
PRIN FUNCȚIA ENTDEL, NU SE POATE RE ALIZA
ȘTERGEREA DIRECTĂ A UNEI SUBENTITĂȚI DINTR -O
ENTITATE COMPUSĂ
Funcția ENTGET – returnează o listă care conține elementele
caracteristice entității NumeEnt (v. exemplul 7.8).
Dacă argumentul NumeAplic există și este un nume de aplicație valid,
lista returnată va conține și lista asociată entității în aplicația specificată.
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
98
Sintaxă : (ENT GET NumeEnt NumeAplic )
Exemplul 7. 8. Funcția ENTGET
(SETQ L1 (ENTLAST))
(ENTGET L1)
((-1 . <Entity name: 7efa15d0>) ; numele entității
(0 . "LINE") ; tipul en tității
(330 . <Entity name: 7ef9fcf8>)
(5 . "18A")
(100 . "AcDbEntity")
(67 . 0)
(410 . "Model")
(8 . "CONT") ; denumirea layer -ului care conține entitatea
(100 . "AcDbLine")
(10 10.0 20.0 0.0) ; coordonatele punctului de start
(11 50.0 50.0 0.0) ; coordonatele punctului de sfârșit
(210 0.0 0.0 1.0)
)
Funcția ENTMAKE – permite crearea unei noi entități în
sesiunea de lucru curentă . Dacă entitatea este creată, funcția returnează
parametrii definitorii ai entității, iar în caz contrar se returneaz ă NIL (v.
exemplul 7.9).
Sintaxă : (ENTMAKE DatEnt )
Argumentul DatEnt este o listă ce conține parametrii definitorii ai
entității și care trebuie să fie identică cu forma listei returnate cu funcția
ENTGET.
În exemplul 7.9 se creează un cerc de culoare roșie, cu tipul de linie
dashdot , având ca centru punctul cen și raza de mărime rad.
Exemplul 7. 9. Funcția ENTMAKE
(DEFUN C:cerc ()
(SETQ cen (GETPOINT "Selectati centrul cercului:")
rad (GETREAL " \nIntroduceti raza cercului:")
)
(ENTMAKE '( (0 . "CIRCLE ") (8 . "0") (62 . 1) (6 . "DASHDOT") (10 . cen) (40 . rad) ))
(PRINC)
)
Funcția ENTMOD – permite actualizarea parametrilor entității
al cărei nume este furnizat în lista parametrilor sub codul de grupă -1 (v.
exemplul 7.10) .
Lucrarea nr. 7
99
Sintaxă : (ENTMOD DatEnt )
Argumentul DatEnt este o listă ce conține parametrii definitorii ai
entității și care trebuie să fie identică cu forma listei returnate cu funcția
ENTGET.
În exemplul 7.10 se modifică punctul de start al unei linii selectate de
utilizator.
Exemplul 7. 10. Funcția ENTMOD
(DEFUN C:startlin ()
(SETQ lin (ENTGET (CAR (ENTSEL "Selecteaza linia:")))
pst (GETPOINT " \nSelecteaza noul punct de start:")
lin (SUBST (CONS 10 pst)
(ASSOC 10 lin) lin)
)
(ENTMOD lin)
(PRINC)
)
Funcția ENTUPD – activează ima ginea unui bloc sau polilinii
care a fost modificată cu funcția ENTMOD (v. exemplul 7.11).
Sintaxă : (ENTUPD NumtEnt )
Argumentul Num Ent trebuie să conțină numele entității sau subentității
a cărei imagine dorim să o actualizăm.
În exemplul 7.11 se modi fică punctul de start al unei polilinii selectate
de utilizator.
Exemplul 7. 11. Funcția ENTUPD
(DEFUN C:modp ()
(SETQ nump (CAR (ENTSEL "Selecteaza polilinia:"))
ptst (GETPOINT " \nSelecteaza noul punct de start:")
sent1 (ENTNEXT nump)
care1 (ENTGET sen t1)
sent1 (SUBST (CONS 10 ptst)
(ASSOC 10 care1) care1)
)
(ENTMOD sent1)
(ENTUPD nump)
)
Grafică asistată de calculator . Seria a III -a. Aplicații AutoLisp
100
7.6. FUNCȚII DE MANIPULARE A ENTITĂȚILOR
Funcția SSGET – permite selectarea anumitor entități din
sesiunea de lucru curentă (v. exemplul 7.12).
Sintaxă : (SSGET Mod Pt )
Exemplul 7. 12. Funcția SSGET
(SETQ a (SSGET))
(SETQ b (SSGET ”L”))
(SETQ c (SSGET ”C” ‘(10, 10) ‘(50, 50)))
Determinarea entităților ce urmează a fi selectate se realizează prin
argumentele funcției Mod și Pt. Dacă funcția nu are argum ent, este afișat
mesajul „ Select objects: ”, permițând utilizatorului selectarea interactivă a
entităților .
Argumentul opțional Mod este de tip caracter și poate avea valorile:
”W”- permite selectarea entităților care se găsesc integral într -o
fereastră de limitată de două puncte diagonal opuse;
”C”- permite selectarea entităților care au cel puțin un punct comun
cu o fereastră delimitată de două puncte diagonal opuse;
”L”- permite selectarea ultimei entități memorate și inserate în
sesiunea curentă de lucru ;
”P”- permite selectarea entităților anterior selectate prin comanda
„Select objects: ”;
”X”- permite introducerea condițiilor de selectare, furnizate sub
formă de liste și care conțin coduri de caracteristici ale entităților [1] (tipul
entității, nume blo c, tip de linie, stil de text, nume de layer, culoare, elevație,
grosime, direcție de extrudare etc.).
Argumentul Pt este un punct definit anterior sau o listă care conține
coordonatele unui punct.
Funcția SSLENGTH – permite determinarea numărului de
entități ce sunt cuprinse în grupul de selecție GrSel (v. exemplul 7.13).
În exemplul 7.13 se presupune că în fereastra având colțurile de
coordonate (20, 10) și (50, 100), există 7 entități.
Sintaxă : (SSLENGTH GrSel )
Exemplul 7. 13. Funcția SSLENGTH
(SETQ gr (SSGET ”W” ‘(20 10) ‘(50 100)))
(SSLENGTH gr)
7
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Parametrul < tip_meniu > poate avea expresiile [ 1]: S – specifică meniul ecran ( Screen Menu ); B – specifică meniul tastatură ( Buttons Menu ); I –… [601438] (ID: 601438)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
