Sunteți pe pagina 1din 24

Elemente de grafică asistată

4. PERSONALIZAREA PROGRAMULUI
AutoCAD PENTRU REZOLVAREA UNOR
PROBLEME DE GEOMETRIE DESCRIPTIVĂ
CU AJUTORUL LIMBAJULUI AutoLISP
Motivul răspândirii fără precedent a pachetelor de
programe AutoCAD este proprietatea acestora de a permite
crearea unor sisteme informatice deschise, care pot fi
configurate corespunzător necesităţilor utilizatorului. Unul
dintre cele mai vechi limbaje de programare, de nivel înalt,
LISP, este folosit în conjuncţie cu AutoCAD ul, pentru a-l
putea adapta unor aplicaţii particulare tot mai diversificate.
Prima versiune a limbajului LISP datează din anul 1959 şi a
fost dezvoltată în cadrul Massachusetts Institute of Technology
(MIT), de către un grup de cercetători sub conducerea
profesorului J. McCarthy. O caracteristică a acestui limbaj este
faptul că fiecare grup de utilizatori şi-a dezvoltat cu timpul
propriul dialect LISP (restandardizarea limbajului) prin
modificări succesive: sub sistemul de operare DOS există
dialectele PowerLISP, XLISP, IQ-LISP, CommontLISP,
AutoLISP.
Limbajul AutoLISP este o implementare a limbajului
LISP (List Processing Language), el fiind inclus în pachetele
AutoCAD ale firmei Autodesk, Inc. Se poate spune că
AutoLISP-ul oferă celor care folosesc AutoCAD-ul într-o
direcţie specializată posibilitatea de a rezolva mai rapid o serie
de aplicaţii particulare sau, altfel spus, de a personaliza sau
adapta programul de proiectare specificului şi necesităţilor
activităţilor curente. Aşa după cum se adresează cititorilor săi
prof. C. Stăncescu în AutoLISP-Manual de programare,
“…exploatând arhitectura deschisă a AutoCAD-ului puteţi face

107
Personalizarea programului AutoCAD

ca tot dialogul să se poarte în limba română şi nici să nu se


vadă altceva decât aplicaţia dvs.”
4.1 Interfeţe programabile

Există multe situaţii în care proiectantul are nevoie de o


unealtă de programare, compatibilă cu sistemul CAD avut la
dispoziţie. Un exemplu tipic îl constituie modelele geometrice
parametrizate. Acestea au aceeaşi topologie însă dimensiuni
geometrice diferite. Programele de acest fel au ca date de
intrare datele geometrice după care modelul geometric este
generat automat.
Aportul major al limbajelor de programare CAD constă
în automatizarea anumitor faze ale proiectării. Utilizările tipice
ale acestor limbaje sunt:

• Crearea automată de entităţi complexe sau familii de


piese. O problemă specifică o constituie parametrizarea
modelului. Prin parametrizare, forma piesei este descrisă de un
set de variabile.
• Crearea de meniuri personalizate, adaptate lucrărilor
uzuale şi stilului de lucru al proiectantului.
• Crearea unor entităţi noi, inexistente în sistem, dar
necesare utilizatorului, prin implementarea modelului
matematic aferent.
• Studiul influenţelor unor parametri geometrici asupra
formei şi proprietăţilor obiectului.
• Crearea unor aplicaţii inginereşti de analiză şi simulare
(analiza cu MEF, optimizare etc).

În general, programarea aplicaţiilor CAD se realizează


cu limbaje de programare asemănătoare cu cele convenţionale
ca principiu, cu singura deosebire, că acestea pot încorpora
comenzi pentru manipularea şi interacţiunea cu mediul CAD
respectiv. De obicei, aceste limbaje CAD sunt mai puţin

108
Elemente de grafică asistată

performante, datorită dimensiunilor mai mari. În funcţie de


modul de lucru şi datele procesate, limbajele interactive CAD
sunt de trei categorii: limbaje de nivel elementar, de nivel înalt
şi de programare la nivelul bazei de date.
• Limbaje de programare la nivel elementar
Aceste limbaje sunt concepute cu scopul de a se putea
grupa şi salva fişiere ce conţin secvenţe de comenzi sub un
nume, care să poată fi executate la cerere printr-o comandă
generică simplă. Aceste fişiere se mai numesc MACRO-uri.
Limbajele sunt, de obicei, bazate pe interpretor şi nu pe
compilator.
Macro-urile sunt utilizate pentru "mici automatizări" în
procesul de concepţie, de verificare sau de prezentare a unei
probleme. Majoritatea sistemelor CAD sunt prevăzute cu
facilităţi MACRO. Programele MACRO se salvează pe disc
sub forma unor secvenţe ASCII care pot fi ulterior prelucrate
cu editoare de text convenţionale sau se pot utiliza ca atare în
aplicaţii.
• Limbaje de nivel înalt
Acestea sunt cele mai populare tipuri de limbaje
folosite de către utilizatorii de sisteme CAD-CAM. Sistemele
CAD comerciale sunt prevăzute întotdeauna cu un astfel de
limbaj, cum este AutoCAD cu limbajul AutoLISP (citit de
interpretor). Programele sunt dependente de sistemul CAD şi
nu pot fi transferate şi executate pe alte sisteme. Problema este
rezolvată parţial prin interfaţarea cu limbaje convenţionale
(FORTRAN, C, PASCAL etc).
• Limbaje de programare la nivelul bazei de date
Prin intermedul acestor limbaje se realizează cel mai
profund acces de programare ce se poate permite utilizatorului.
Dezavantajul principal constă în necesitatea cunoaşterii
structurii bazelor de date. Limbajele permit modificarea chiar
însăşi a sistemului CAD, prin schimbarea interfeţei grafice,
adăugarea de facilităţi noi etc. Doar sistemele CAD comerciale
sunt prevăzute cu un astfel de limbaj.
109
Personalizarea programului AutoCAD

4.1.1 Baze de date externe

Prin baze de date externe se înţelege o categorie de


fişiere care stochează informaţii. Aceste fişiere sunt de obicei
compuse din tabele care se aseamănă cu o foaie de calcul, cu
datele asemănătoare, organizate pe coloane, numite câmpuri, şi
cu fiecare set unic de date stocat pe o linie numită înregistrare.
Când se folosesc baze de date externe pentru organizarea şi
stocarea datelor, pot fi create, editate şi regăsite volume imense
de date.
AutoCAD 2000 pune la dispoziţie instrumente care
permit lucrul cu fişiere ce conţin baze de date externe. Se poate
deschide o bază de date şi i se pot vedea sau edita datele. De
asemenea, se pot lega înregistrările bazei de date la obiecte
create cu AutoCAD, cum sunt liniile, cercurile şi poliliniile. Se
pot executa interogări prin care este regăsită o submulţime de
date pe baza unor criterii. Prin utilizarea instrumentelor
AutoCAD, se poate lucra din interiorul programului AutoCAD,
cu baze de date externe.
În continuare, sunt prezentate câteva instrumentele
AutoCAD pentru lucrul cu baze de date.
Configurarea programului AutoCAD pentru a lucra cu
baze de date externe
Pentru utilizarea din interiorul desenelor AutoCAD a
bazelor de date este necesară definirea informaţiilor referitoare
la fişierele de baze de date care se folosesc. Când se definesc
informaţiile necesare, AutoCAD poate să comunice cu o bază
de date externă şi poate lega datele acesteia cu obiecte din
desene. Definirea informaţiilor de care are nevoie AutoCAD
pentru a realiza comunicarea cu bazele de date externe permite
utilizarea datelor din fişiere de baze de date în conexiune cu
desenele create.
După ce se definesc informaţiile necesare programului
AutoCAD referitoare la bazele de date, se poate obţine din
110
Elemente de grafică asistată

interiorul programului AutoCAD accesul la date. Acest lucru


este valabil chiar pe un calculator care nu are instalată aplicaţia
în care au fost create iniţial fişierele de baze de date. AutoCAD
este proiectat astfel încât să asigure accesul la fişierele de baze
de date externe, fără a utiliza aplicaţia în care a fost creată baza
de date, este astfel conceput încât să recunoască baze de date
care au fost create într-unui dintre următoarele programe de
gestionare a bazelor de date:
• Microsoft Access 97
• dBase V şi III
• Microsoft Excel 97
• Oracle 8.0 şi 7.3
• Paradox 7.0
• Microsoft Visual FoxPro 6.0
• SQL Server 7.0 şi 6.5
La oricare fişier de baze de date creat cu oricare dintre
programele de mai sus este posibil accesul din interiorul
programului AutoCAD la datele din respectivul fişier.
Pentru a defini informaţiile necesare programului
AutoCAD 2000 în vederea accesului la informaţiile intr-o bază
de date externă, trebuie folosită gestiunea de surse de date
ODBC (ODBC Data Source Administrator), furnizată de
sistemul de operare Windows, care este o interfaţă de
programare ce permite programului AutoCAD accesul la datele
create cu aplicaţiile de gestionare a bazelor de date enumerate,
apoi trebuie folosită caseta de dialog Data Link Properties, care
există la versiuni mai noi de 2000. Caseta de dialog Data Link
Properties creează un fişier de configurare UDL care indică
tabelul de bază de date care se urmăreşte a fi accesat. Prin
utilizarea acestor două module se creează informaţiile necesare
pentru ca AutoCAD să comunice eficient cu bazele de date
externe.

111
Personalizarea programului AutoCAD

Crearea unul fişier de configurare OLE DB


Un fişier de configurare OLE DB conţine informaţii pe
care AutoCAD le foloseşte pentru a accede la datele din bazele
de date. În fişierul de configurare se adaugă informaţiile care
identifică numele fişierului sursă de date ODBC. Tot aici se
poate specifica o parolă de protecţie pentru accesul la fişiere.
Fişierul mai defineşte locaţiile în care se află fişierele sursă ale
bazelor de date.
Accesul la tabele din dbConnect Manager
O modalitate vizuală simplă de a analiza desenele
legate la fişiere de baze de date şi sursele de date la care sunt
legate ele este dbConnect Manager. Se pot afişa legături,
etichete şi interogări definite în desene, ca şi tabelele asociate
cu sursele de date. Prin intermediul modului dbConnect
Manager se pot examina cu uşurinţă tabelele disponibile
precum şi relaţiile între tabele şi desenele la care sunt legate.
Pentru a vedea dbConnect Manager, se selectează
dbConnect din meniul Tools sau se scrie DBCONNECT de la
linia de comandă. Când se execută comanda, AutoCAD încarcă
meniul :Connect şi dbConnect Manager (figura 4.1). Acesta din
urmă este o fereastră redimensionabilă, care poate fi şi
ancorată, dar care este, în principiu, deplasabilă deasupra
ferestrelor de desenare din AutoCAD. Pentru a închide
fereastra dbConnect Manager, se execută din nou comanda
dbConnect sau click pe butonul Exit (micul buton „x" aflat în
colţul din dreapta-sus al ferestrei dbConnect Manager). Când
este închis dbConnect Manager, atât fereastra dbConnect
Manager cât şi meniul dbConnect sunt îndepărtate de pe ecran.
Comanda dbConnect Manager oferă o modalitate
simplă de afişare a informaţiilor referitoare la desene, legături,
etichete şi interogări, precum şi la surse de date disponibile la
calculatorul dumneavoastră. Din această fereastră există acces
la datele din tabele şi se pot defini interogări. Utilizând
dbConnect Manager, se pot efectua rapid operaţii obişnuite cu
baze de date.
112
Elemente de grafică asistată

Figura 4.1
Examinarea datelor dintr-un tabel utilizând Data View
Fereastra Data View din AutoCAD permite schimbarea
modului de vizualizare pentru a afişa datele din tabel în felul
dorit. De exemplu, se poate anula ascunderea unor coloane. Se
pot muta coloane în noi poziţii în tabel, schimbându-le ordinea.
Se pot sorta datele din coloane în ordine ascendentă sau
descendentă sau se pot controla chiar aspectul textului afişat în
tabel, schimbând fontul sau dimensiunea fontului. Prin
intermediul ferestrei Data View, se poate schimba modul de
afişare a unui tabel, pentru a vedea mai clar informaţiile
cuprinse în acesta.

4.2 Introducere în programarea AutoLISP

Acest capitol se adresează celor cărora le este util să


înlocuiască comenzile directe ale AutoCAD-ului cu un
program care, evident, include şi comenzile AutoCAD
necesare. Se adresează deci cunoscătorilor AutoCAD-ului,
celor care lucrează în desenare şi proiectare asistată în domenii

113
Personalizarea programului AutoCAD

ca mecanic, arhitectură, electrotehnică, electronică, topografie,


designeri, construcţii, cartografiere civilă sau militară etc.
Iată care sunt motivele principale, pentru care firma
americană Autodesk, Inc. a ales AutoLISP-ul ca interfaţă
programabilă pentru implementarea funcţiilor propri:
- modul de memorare şi manipulare a datelor oferă
facilităţi de lucru cu liste ce conţin coordonate de puncte;
- permite, ca orice limbaj de nivel înalt, adăugarea unor
funcţii noi;
- apelarea oricărei funcţii AutoCAD poate fi făcută în
mod direct, nefiind necesară construirea unor funcţii noi;
- este un limbaj cu o circulaţie tot mai mare.

4.2.1 Tipuri de variabile


Spre deosebire de limbajele de programare BASIC,
FORTRAN, PASCAL etc., AutoLISP-ul este orientat şi
dezvoltat în principal pentru manipularea obiectelor.
Particularităţile programării în acest limbaj pot sistematizate
astfel:
- în LISP nu există diferenţe între date şi programe,
astfel încât un program poate crea un program nou sau poate
modifica un program existent;
- tipurile de date nu trebuiesc declarate explicit;
- programele LISP conţin atât funcţii propri cât şi
funcţii autodefinite;
- funcţiile pot fi definite recursiv;
- datorită unei administrări dinamice a memoriei, se pot
defini structuri de date oricât de mari necesită aplicaţia
respectivă.
Limbajul AutoLISP operează cu următoarele tipuri de
date: Atom, Listă, Simbol, Nume de obiect, Set de selecţie. Ele
sunt prezentate, împreună cu câte un exemplu, în tabelul 4.1.
Un program este alcătuit dintr-o succesiune ierarhică de
liste care conţin tipurile de date enumerate. Elementele unei

114
Elemente de grafică asistată

liste sunt închise între paranteze, ordinea ierarhică fiind


desemnată prin subliste. Primul atom al unei liste este
considerat nume al unei funcţii, iar celelalte elemente ale listei
sunt considerate argumentele acelei funcţii. De exemplu, lista
(+52)
realizează însumarea numerelor 5 şi 2, ele fiind considerate
argumentele funcţiei “+”. Acest mod de a folosi atomii unei
liste mai este cunoscut sub denumirea “notaţie cu prefixe”. Ea
a fost introdusă încă în 1925, de către logicianul polonez J.
Lukasiewicz.
Mai pe scurt, LISP înseamnă prelucrare sau procesare
de listă. Lista este alcătuită din un număr oarecare de articole
(atomi) separate prin spaţii şi incluse între paranteze rotunde.
Fiecare articol poate fi la rândul său o altă listă, cuprinsă în cea
dintâi. Cuprinderea listelor una în alta se numeşte imbricare.
Gradul (sau adâncimea) de imbricare nu este limitat decât de
memoria calculatorului. Întâi programul evaluează lista
imbricată mai adânc şi în locul ei este introdus apoi rezultatul
evaluării.
De exemplu, în lista
(+ 5 ( * 2 3 ) 10)
6, care este evaluarea listei ( * 2 3 ), este considerat
element al următoarei liste echivalente:
(+ 5 6 10),
care returnează 21.
În principiu, numărul parantezelor deschise trebuie să
fie egal cu cel al parantezelor închise. Pe măsură ce în cadrul
programului se adaugă noi linii şi se deschid noi paranteze,
suntem informaţi despre numărul parantezelor rămase
neînchise prin apariţia semnului 1> sau 2> etc. la începutul
liniei care ar trebui să închidă o paranteză sau două etc.
Programul AutoCAD, aşa cum este el cunoscut de către
desenatori, este un program specializat pentru operaţii grafice,
care poate fi comparat cu un instrument de desen asemănător
planşetei cu rigle perpendiculare şi cap divizor. În plus,

115
Personalizarea programului AutoCAD

programul oferă toate facilităţile caracteristice modelării în


mediu electronic: capacitate mare a memoriei, modificarea
rapidă a unor desene preexistente, automatizarea unor comenzi
(de exemplu comanda pentru multiplicare polară “array” sau
“copy”, “move” etc.), evitarea apariţiei unor greşeli şi lucrul
simultan pe mai multe straturi “layers”.

Tabelul .1. Tipuri de date AutoLISP

Denumirea Semnificaţia Exemplu


Atom Un număr întreg cuprins
(element) între –32768 şi +32768
Lista Listă de date, listă de List (car a, cadr
funcţii etc. a caddr a), care
redă coordonatele
carteziene ale
unui punct
Simboluri Nume predefinite de Setq, prin care se
funcţii atribuie unei
variabile o
anumită valoare
Nume de Entităţi AutoCAD Pline
obiecte p1p2p3”C”, linia
poligonală
închisă, care
uneşte punctele
p1p2p3
Seturi de O listă care cuprinde
selecţie toate entităţile
AutoCAD selectate în
urma unei operaţii de
desenare sau editare

Dar aceste aspecte arată totodată şi limitele acestui


program atunci când el este folosit doar prin intemediul

116
Elemente de grafică asistată

comenzilor sale directe. În cazul unor desene parametrizate,


care se deosebesc doar prin valorile cotelor de exemplu, este
necesară desenarea repetată a obiectului prin folosirea aceloraşi
comenzi de desenare şi adăugarea “manuală” a deosebirilor
necesare. Un exemplu mai sugestiv este cel al secţionării unei
piramide, dată prin coordonatele vârfurilor sale, cu un plan, dat
prin coordonatele celor trei puncte care îl determină.
Rezolvarea acestei probleme implică aceleaşi etape,
independent de valorile coordonatelor respective: reprezentarea
vârfurilor şi muchiilor piramidei, alegerea planelor proiectante
auxiliare, determinarea punctelor în care muchiile piramidei
înţeapă planul de secţiune şi reprezentarea poligonului de
secţiune. Toate aceste operaţii grafice (dar nu numai, ele pot fi
calcule geometrice sau de rezistenţă) se pot introduce într-un
program care le va lansa succesiv în aplicare pentru orice caz
particular dat de valorile coordonatelor punctelor respective.
S-a arătat deja că, în general, o expresie AutoLISP are
forma:
(nume funcţie (argumente)…)
cu o separaţie de un spaţiu între numele funcţiei şi argumente.
În AutoLISP există patru tipuri de variabile, care sunt
explicate în tabelul 4.2. Tipul variabilei este asociat cu valoarea
acesteia, iar valoarea care i se atribuie unei variabile se
introduce prin intermediul funcţiei “Setq” (Set quoted),
conform sintaxei:
(Setq nume variabilă valoare).
De exemplu, prin atribuirea
(Setq a 56)
variabila a este de tip întreg şi “a fost încărcată” cu valoarea 56.
Ceea ce îl interesează însă în primul rând pe
programatorul care urmăreşte personalizarea AutocAD-ului
pentru operaţii repetate de desenare, probleme de geometrie
descriptivă sau reprezentări în dublă sau multiplă proiecţie
ortogonală este atribuirea valorilor variabileIor de tip “punct
geometric”.

117
Personalizarea programului AutoCAD

Coordonatele unui punct geometric se introduc prin


intermediul unei liste AutoLISP, formată din două sau trei
variabile reale cuprinse între paranteze, precedată de funcţia
“List”. De exemplu:
(list 2.5 89.0)
(list 22.5 15.4 56.8)

Tabelul 4.2. Tipuri ale variabilelor AutoLISP


Tipul Detalii
variabilei
Întreg Numere întregi (cu semn)
Real Numere cu parte întreagă şi zecimală
Punct Listă de două sau trei variabile reale ce reprezintă
coordonatele carteziene ale punctului
Şir O secvenţă de caractere

În cazul în care se urmăreşte crearea unei variabile de


tip “ punct geometric”, se atribuie numelui punctului o listă ce
conţine valorile coordonatelor sale, ca în următorul exemplu, în
care punctul a fost notat cu “p1”:
(setq p1 (list(22.5 15.4 56.8)))
Dacă coordonata “z” (cota) lipseşte, atunci programul
evaluează elevaţia (ELEV) curentă. În exemplul următor
(setq p2 (list(x1 15.4 56.8)))
s-a folosit drept abscisă a punctului variabila “x1”, care
a fost definită anterior. O altă formă de a introduce
coordonatele unui punct geometric este:
(setq p3 ‘(22.8 52.4 12.0))
unde apostroful are rolul de a lăsa neevaluată lista internă şi de
a o evalua pe cea externă care, în acest fel, atribuie numelui
punctului “p3” o listă şi nu o simplă valoare scalară.
Pentru a “extrage” una din coordonatele unui anumit
punct introduse, aşa cum s-a arătat, sub forma unei liste, se
foloseşte una dintre funcţiile “car”, “cadr” sau “caddr”. Astfel,
118
Elemente de grafică asistată

(car p1)
exprimă abscisa punctului p1, adică 22.5,
(cadr p1)
returnează ordonata lui, adică 15.4, iar
(caddr p1)
returnează cota punctului p1, adică 56.8.
Următorul exemplu, în care se defineşte punctul i, a
cărui abscisă este egală cu ordonata lui p1 şi ordonată, egală cu
abscisa lui p2, este şi mai edificator:
(Setq i (list (cadr p1) (car p2)))
Funcţiile AutoLISP, cum sunt cele deja explicate, pot fi
folosite pentru formarea unor expresii AutoLISP, de forma
(nume funcţie (argumente)…)
Expresiile AutoLISP sunt de următoarele trei feluri:
9 Matematice
9 Şir
9 Condiţionale.
În cele ce urmează, sunt arătate doar câteva exemple de
astfel de expresii matematice. Liste complete cu expresii
matematice, şir, sau condiţionale, se găsesc în orice manual de
programare AutoLISP.
(+ x y) returnează suma x + y
(- x y) returnează diferenţa x – y
(* x y) returnează produsul x * y
(/ x y) returnează câtul x : y
(max x y) returnează maximul dintre x şi y
(min x y) returnează minimul dintre x şi y
(sqrt x ) radical din x
(exp x p) x la puterea p
(angle p1 p2) unghiul, în radiani, al segmentului p1 p2,
măsurat în sens direct trigonometric
(distance p1 p2) distanţa dintre punctele p1 şi p2
(polar p1 alfa dist) punctul aflat la distanţa “dist” şi
unghiul “alfa”(în radiani) faţă de punctul p1
O altă categorie de funcţii este cea a funcţiilor “de
introducere”. Ele se folosesc pentru a permite utilizatorului să
119
Personalizarea programului AutoCAD

atribuie unei variabile o anumită valoare, prin dialog, direct de


la tastatură. Aceste funcţii sunt:
Getint pentru variabile de tip întreg (integer)
Getreal pentru variabile reale (real)
Getstring pentru variabile de tip şir (string)
Getpoint pentru variabile de tip punct geometric
Getcorner pentru variabile de tip punct geometric
Getdist pentru variabile de tip punct geometric
O altă funcţie, foarte utilă, este funcţia care face
legătura între comenzile AutoLISP şi preluarea lor de către
AutoCAD. Aceasta este:
(Command “argumente”),
unde “argumente” reprezintă comenzi şi subcomenzi
AutoCAD. Primul argument dă numele comenzii AutoCAD, de
exemplu “Pline” sau “Point”. În timp ce comanda AutoCAD
este executată, în zona de dialog apare efectiv dialogul, ca în
cazurile în care comenzile sunt efectuate manual. Pentru a
suprima această afişare, trebuie setată variabila de sistem
Cmdecho pe valoarea zero. Pentru asta, se poate folosi
comanda Setvar din AutoCAD (sau Setvar din AutoLISP).
Adaptarea programului AutoCAD şi eficienţa
limbajului AutoLISP sunt reflectate prin posibilitatea alcătuirii
şi introducerii de noi funcţii. O funcţie nouă se creează tot cu
ajutorul unei funcţii: Defun., conform sintaxei:
(Defun <simbol> (lista arg) (expresii))
în care, prin “simbol” se înţelege numele funcţiei,
argumentele ei, date ca listă şi una sau mai multe expresii, care
formează corpul funcţiei. De exemplu:
(Defun drpt ()
(setq a (getpoint “primul varf al dreptunghiului:”))
(setq b (getcorner b “coltul opus: “))
(Command “pline” a (list (car a) (cadr b)) b (list (car b) cadr a))
“c”)
Se observă că funcţia numită aici”drpt” este de fapt o
listă care începe cu paranteza de dinaintea lui Defun şi conţine
expresiile care formează corpul ei. Această funcţie se scrie ca
120
Elemente de grafică asistată

fişier text şi se salvează sub numele Drpt. cu extensia LSP.,


apoi, fie se da comanda “load” de pe prompterul AutoCAD
Command: (load “drpt”)
fie, de la lista derulantă “tools”, se indică “load aplications” şi
se obţin cererile succesive ale programului:
Primul vărf al dreptunghiului:
Colţul opus:
În acest fel a fost definită o funcţie cu ajutorul căreia se
pot trasa dreptunghiuri introducând, la cererile programului, un
vârf şi vârful diagonal opus.
Un alt exemplu este cel al funcţiei următoare, denumită
simbolic “Monge”, cu ajutorul căreia se trasează automat axele
unui sistem rectangular, folosit pentru reprezentări în dublă
proiecţie ortogonală. Formatul de desenare este unul A3, iar
originea sistemului de axe este punctul O(210, 150).
(DEFUN C:Monge ( )
(setq o1 (list 0.0 150.0))
(setq o2 (list 420.0 150.0))
(Command "pline" o1 o2 "C" )
(setq v1 (list 210 0))
(setq v2 (list 210 300))
(Command "pline" v1 v2 "C")
În concluzie, când AutoCAD “vede”, în loc de o
comandă, o expresie AutoLISP, el cedează execuţia
interpretorului AutoLISP, care este dator să evalueze expresia.
Expresia AutoLISP are reguli simple de formare:
• începe cu o paranteză rotundă;
• după paranteză urmează un nume de funcţie AutoLISP;
• funcţia AutoLISP este urmată de argumentele sale,
despărţite cel puţin de câte un spaţiu;
• argumentele pot fi la rândul lor expresii AutoLISP;
• în ansamblu, câte paranteze se deschid, tot atâtea
trebuie si închise.
Cele mai multe bătăi de cap ridică parantezele si
împerecherea lor corectă. Astfel, iată câteva expresii aritmetice

121
Personalizarea programului AutoCAD

simple si echivalentele AutoLISP, într-o formă tabelară


(verificaţi fiecare expresie în parte):

Numărul π este exprimat în AutoLISP prin cuvântul pi.


Pe de altă parte, + sau sqrt sunt de asemenea cuvinte rezervate
pentru nume de funcţii interne AutoLISP – primul fiind
dedicate adunării si cel de-al doilea extragerii radicalului de
ordinul doi. Asemenea oricărui limbaj de programare,
AutoLISP permite utilizarea de variabile.
Analizând expresiile de mai sus, pot fi sintetizate câteva
aspecte ale scrierii AutoLISP:
• prima expresie AutoLISP din tabel transpusă în cuvinte
ar suna asa: împarte pe unu la radicalul lui doi - nu uita deci că
întâi numesti funcţia si apoi argumentele sale;
• după fiecare paranteză deschisă urmează o funcţie;
• numerele reale se scriu folosind punctul zecimal;
• funcţiile trigonometrice asteaptă unghiurile în radiani,
nu în grade;
• pentru numărul π se foloseste cuvântul “pi”;
• fiecare funcţie are dreptul la un număr dat de
argumente, iar folosirea unui număr incorect de argumente
atrage un mesaj de eroare.
Un tabel cu funcţiile aritmetice uzuale si exemple de
utilizare ale acestora, este dat în tabelul de mai jos, alături de
câteva observaţii importante:

122
Elemente de grafică asistată

4.2.2 Atomi si liste

Expresiile AutoLISP pot să răspundă oricăror cereri


AutoCAD. În dialogul comenzilor AutoCAD pot să apară
cereri de numere reale, numere întregi, puncte, texte, selecţii de
obiecte, nume de fisiere etc. Am enumerat mai sus o serie de
tipuri de date, pe care expresiile AutoLISP trebuie să le poată
prelucra.
Ca orice program de desenare, AutoCAD are de-a face
mai ales cu puncte, definite prin coordonatele lor într-un sistem
de referinţă. Pentru a răspunde în AutoCAD unei cereri de
punct, AutoLISP formează o listă cu doi sau trei reali,
reprezentând coordonatele x, y, z ale punctului; astfel,
123
Personalizarea programului AutoCAD

exprimarea în AutoLISP a punctului de coordonate x =10, y =


20, z = 30.7 este prin lista (10 –20 30.7).
Listele se prelucrează si se generează prin funcţii
AutoLISP specifice. Iată un exemplu, probat la prompt-ul
Command: din AutoCAD, prin care se generează lista (10 -20
30.7):
Command: (list 10 -20 30.7)
(10 -20 30.7)
Valoarea returnată de funcţia list este o listă compusă
din valorile argumentelor sale. Funcţia list admite oricâte
argumente, dar pentru reprezentarea punctelor sunt necesare 2
sau 3 argumente de tip întreg sau real. În exemplul următor, se
leagă lista la variabila pt, iar apoi această variabilă este utilizată
într-o cerere de punct pentru comanda line din AutoCAD:
Command: (setq pt (list 10 20 30.7))
(10 20 30.7)
Command: line
From point: !pt
To point: (list 100 100)
To point: Enter
Reprezentarea liniei poate fi provocată si printr-o
expresie AutoLISP de tipul:
Command: (command “line” pt (list 100 100) “”)
unde trebuie remarcat faptul că variabila pt nu cere ghilimele.
Ghilimele sunt folosite atunci când parametri de transmis
AutoCAD-ului, la utilizarea funcţiei command, nu trebuie
evaluaţi de interpretorul AutoLISP.
În AutoLISP există două categorii majore de obiecte:
atomii si listele. Un atom este cel mai simplu obiect în
AutoLISP. Un atom poate fi un întreg, un număr real, un sir, o
funcţie AutoLISP predefinită, sau orice alt tip de obiect din
tabelul care este arătat pe pagina următăare.
Există o regulă simplă de a determina dacă un obiect
este un atom sau o listă: dacă obiectul nu este închis între
paranteze, atunci el este un atom; altfel este o listă. Toate

124
Elemente de grafică asistată

obiectele din AutoLISP sunt fie atomi, fie liste. Un atom nu


poate fi niciodată listă, iar o listă nu poate fi niciodată atom.
Există o regulă simplă de a determina dacă un obiect
este un atom sau o listă: dacă obiectul nu este închis între
paranteze, atunci el este un atom; altfel este o listă.

Listele sunt expresii complexe care includ atomi sau


alte liste. Listele au reguli sintactice stricte, dar simple:
• listă trebuie închisă între paranteze;
• pentru orice listă care trebuie evaluată, primul element
al listei trebuie să fie o funcţie;
• obiectele din listă trebuie separate cu cel puţin un
spaţiu.
Iată într-o formă tabelară, câteva exemple de liste:

Obiectul “nil “ este o listă vidă. Prin convenţie, “nil“


este simultan atom si listă. El poate fi exprimat în două feluri: (
) sau “nil “.
În AutoLISP “nil” este echivalent cu fals. Multe funcţii
în AutoLISP testează dacă o condiţie este falsă sau adevărată;
125
Personalizarea programului AutoCAD

de exemplu, dacă valoarea unui număr este egală cu zero.


Întotdeauna când rezultatul unui test este “fals”, AutoLISP
returnează n i l ca valoare a testului efectuat.
Evaluarea este procesul prin care AutoLISP determină
valoarea unui obiect. Sunt supusi evaluării atât atomii cât si
listele. În AutoLISP fiecare obiect are o valoare. Prin evaluare,
AutoLISP determină valoarea obiectului si returnează acea
valoare.
Atomii sunt obiecte simple, evaluate după o regulă
simplă în funcţie de tipul lor. Cei mai mulţi atomi sunt evaluaţi
la valorile lor în sine. Valoarea unei variabile este egală cu
ultima valoarea legată ei. Câteva exemple de evaluare sunt date
în tabelul de mai jos.
Pentru orice listă care trebuie evaluată, primul element
din listă trebuie să fie o funcţie. Listele se evaluează în funcţie
de regulile date de primul element din listă. În general, pasii de
evaluare sunt:
• AutoLISP priveste la primul element; el trebuie să fie o
listă. Dacă primul element nu este o listă, atunci AutoLISP va
genera un mesaj de eroare. Elementele care urmează funcţiei
într-o listă sunt argumentele funcţiei – adică datele asupra
cărora operează funcţia.
• AutoLISP evaluează funcţia pentru a sti cum să
proceseze argumentele care îi urmează. Pentru o anume
funcţie, numărul si tipul argumentelor admise trebuie respectat,
altfel, AutoLISP returnează un mesaj de eroare. Pentru a le
putea procesa, AutoLISP evaluează de la stânga la dreapta si
argumentele în sine - care pot fi de tip atom sau listă.
• AutoLISP returnează valoarea listei.
Adaptabilitatea programului AutoCAD poate fi utilizată
şi în rezolvarea unor probleme de geometrie descriptivă, cum
sunt reprezentarea dublei sau triplei proiecţii ortogonale a
punctului, dreptei sau a planului, reprezentarea dublei proiecţii
ortogonale a poliedrelor, reprezentarea după “metoda cubului

126
Elemente de grafică asistată

de proiecţie”, secţiuni plane prin poliedre, intersecţii de


poliedre, metodele geometriei descriptive, desfăşurate etc.

4.3 Rezolvarea unor probleme de geometrie


descriptivă prin adaptarea programului AutoCAD

Pot fi definite funcţii specifice, ale căror variabile sunt


puncte geometrice introduse prin valorile coordonatelor
carteziene care, prin intermediul comenzilor AutoCAD,
trasează automat vârfurile şi muchiile unor poliedre, conturul
poligonului de secţiune plană a unui poliedru sau de intersecţie
a două poliedre, desfăşurata unei suprafeţe etc.
a’
b’

x O

b
a

Figura 4.2

Se reaminteşte că notaţia A(a, a’) desemnează punctul


A, a cărui proiecţie orizontală este a, iar cea verticală a’(figura
4.2).
127
Personalizarea programului AutoCAD

Aceste două proiecţii pot fi definite prin coordonatele


carteziene ale punctului, aşa cum se cunoaşte: abscisa şi
ordonata determină proiecţia orizontală, iar abscisa şi cota, pe
cea verticală.
Pentru un singur punct, dubla lui proiecţie ortogonală poate fi
obţinută cu ajutorul funcţiei următoare, denumită simbolic
“Monge”:
(DEFUN C:Monge ( ).
( SETQ a (GETPOINT "Coordonatele punctului A:"))
(Command "Point"(list (car a) (cadr a)))
(Command "Point"(list (car a) (caddr a)))
(Command "Pline"(list (car a) (cadr a)) (list (car a) (caddr a))
"C"))
La invitaţia “Coordonatele punctului A”, se pot
introduce coordonatele absolute ale acestuia dar, dacă se alege
un sistem de axe diferit, se vor introduce coordonatele relative
corespunzătoare.
Pentru a păstra convenţia conform căreia semiaxele
triedrului I sunt pozitive, în cele ce urmează se alege un sistem
de referinţă care să evidenţieze acest fapt.
În exemplele următoare, doarece formatul de desenare
(drawing limits) a fost ales unul A3, pe care a fost prestabilit
sistemul de axe zOx, a cărui origine O are coodonatele 210 şi
150, s-a făcut translaţia necesară exprimării coordonatelor
punctelor în raport cu acest sistem.
O astfel de abordare, ar permite reprezentarea dublei
proiecţii ortogonale a oricărui poliedru căruia i se cunosc
coordonatele vârfurilor, ataşând pentru muchii comanda Pline a
AutoCAD-ului. Dublele proiecţii ortogonale obţinute astfel pot
fi considerate proiecţiile unor modele “de sârmă”, astfel că, în
această etapă, nu este necesară stabilirea vizibilităţii muchiilor.
De exemplu, în figura 4.3 este prezentată dubla
proiecţie ortogonală a unui tetraedru oarecare, dat prin
coordonatele vârfurilor sale, obţinută cu ajutorul următoarei
funcţii, intitulată “Tetra”.

128
Elemente de grafică asistată

1.Tetra.LSP
;Tetra. LSP Desenarea dublei proiecţii ortogonale a muchiilor unui
tetraedru
;Obs. –
;Autor: H.Tarziu
; Data: 15.01.2002
; Variabile: Coordonatele varfurilor
DEFUN C:Tetra ( )
(setq o1 (list 0.0 150.0))
(Command "text" (list (+ (car o1) 8) (+ (cadr o1) 6)) 12 0 "X")
(setq o2 (list 420.0 150.0))
(Command "pline" o1 o2 "C" )
(setq v1 (list 210 0))
(setq v2 (list 210 300))
(Command "pline" v1 v2 "C")
(setq o3 (list 210.0 150.0))
(Command "text" (list (+ (car o3) 8) (+ (cadr o3) 6)) 12 0 "O")
(setq o4 (list 210.0 300.0))
(Command "text" (list (+ (car o4) 8) (+ (cadr o4) 6)) 12 0 "Z")
(setq o5 (list 210.0 0.0))
(Command "text" (list (+ (car o5) 8) (+ (cadr o5) 6)) 12 0 "Y")
( SETQ a (GETPOINT "Coordonatele punctului A:"))
(Command "Point"(list (- 210 (car a)) (- 150 (cadr a))))
(Command "Point"(list (- 210 (car a)) (+ 150 (caddr a))))
(Command "Pline"(list (- 210 (car a)) (- 150 (cadr a))) (list (- 210 (car
a)) (+ 150 (caddr a))) "C")
( SETQ b (GETPOINT "Coordonatele punctului B:"))
(Command "Point"(list (- 210 (car b)) (- 150 (cadr b))))
(Command "Point"(list (- 210 (car b)) (+ 150 (caddr b))))
(Command "Pline"(list (- 210 (car b)) (- 150 (cadr b))) (list (- 210 (car
b)) (+ 150 (caddr b))) "C")
( SETQ c (GETPOINT "Coordonatele punctului C:"))
(Command "Point"(list (- 210 (car c)) (- 150 (cadr c))))
(Command "Point"(list (- 210 (car c)) (+ 150 (caddr c))))
(Command "Pline"(list (- 210 (car c)) (- 150 (cadr c))) (list (- 210 (car
c)) (+ 150 (caddr c))) "C")
( SETQ d (GETPOINT "Coordonatele punctului D:"))
(Command "Point"(list (- 210 (car d)) (- 150 (cadr d))))
(Command "Point"(list (- 210 (car d)) (+ 150 (caddr d))))
(Command "Pline"(list (- 210 (car d)) (- 150 (cadr d))) (list (- 210 (car d))
(+ 150 (caddr d))) "C")

129
Personalizarea programului AutoCAD

(Command "Pline" (list (- 210 (car a)) (- 150 (cadr a))) "W" "0.8"
"0.8"(list (- 210 (car b)) (- 150 (cadr b))) (list (- 210 (car c)) (- 150 (cadr
c))) "C")
(Command "Pline" (list (- 210 (car a)) (+ 150 (caddr a))) (list (- 210
(car b)) (+ 150 (caddr b))) (list (- 210 (car c)) (+ 150 (caddr c))) "C")
(Command "Pline" (list (- 210 (car a)) (- 150 (cadr a))) (list (- 210 (car
d)) (- 150 (cadr d))) "C")
(Command "Pline" (list (- 210 (car b)) (- 150 (cadr b))) (list (- 210 (car
d)) (- 150 (cadr d))) "C")
(Command "Pline" (list (- 210 (car c)) (- 150 (cadr c))) (list (- 210 (car
d)) (- 150 (cadr d))) "C")
(Command "Pline" (list (- 210 (car a)) (+ 150 (caddr a))) (list (- 210
(car d)) (+ 150 (caddr d))) "C")
(Command "Pline" (list (- 210 (car b)) (+ 150 (caddr b))) (list (- 210
(car d)) (+ 150 (caddr d))) "C")
(Command "Pline" (list (- 210 (car c)) (+ 150 (caddr c))) (list (- 210 (car
d)) (+ 150 (caddr d))) "C")
)
În figura 4.3 este redată dubla proiecţie ortogonală a
unui tetraedru oarecare. Coordonatele vârfurilor au fost alese
arbitrar, valorile lor fiind A(90, 40, 30), B(-150,0,120), C(-40,
120, 140) şi D(-10, 80, 0). Formatul pentru desenare a fost ales
unul A3, iar originea sistemului celor două axe perpendiculare
este punctul O( 210, 150).
Z

X O

Figura 4.3

130