CAPITOLUL 4

24
Elemente de grafică asistată 107 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

Transcript of CAPITOLUL 4

Page 1: CAPITOLUL 4

Elemente de grafică asistată

107

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

Page 2: CAPITOLUL 4

Personalizarea programului AutoCAD

108

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

Page 3: CAPITOLUL 4

Elemente de grafică asistată

109

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.

Page 4: CAPITOLUL 4

Personalizarea programului AutoCAD

110

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

Page 5: CAPITOLUL 4

Elemente de grafică asistată

111

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.

Page 6: CAPITOLUL 4

Personalizarea programului AutoCAD

112

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.

Page 7: CAPITOLUL 4

Elemente de grafică asistată

113

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

Page 8: CAPITOLUL 4

Personalizarea programului AutoCAD

114

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

Page 9: CAPITOLUL 4

Elemente de grafică asistată

115

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

( + 5 2 ) 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,

Page 10: CAPITOLUL 4

Personalizarea programului AutoCAD

116

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 (element)

Un număr întreg cuprins între –32768 şi +32768

Lista Listă de date, listă de funcţii etc.

List (car a, cadr a caddr a), care redă coordonatele carteziene ale unui punct

Simboluri Nume predefinite de funcţii

Setq, prin care se atribuie unei variabile o anumită valoare

Nume de obiecte

Entităţi AutoCAD Pline p1p2p3”C”, linia poligonală închisă, care uneşte punctele p1p2p3

Seturi de selecţie

O listă care cuprinde 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

Page 11: CAPITOLUL 4

Elemente de grafică asistată

117

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”.

Page 12: CAPITOLUL 4

Personalizarea programului AutoCAD

118

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

variabilei Detalii

Î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,

Page 13: CAPITOLUL 4

Elemente de grafică asistată

119

(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: Matematice Şir 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ă

Page 14: CAPITOLUL 4

Personalizarea programului AutoCAD

120

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

Page 15: CAPITOLUL 4

Elemente de grafică asistată

121

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

Page 16: CAPITOLUL 4

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

Page 17: CAPITOLUL 4

Elemente de grafică asistată

123

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,

Page 18: CAPITOLUL 4

Personalizarea programului AutoCAD

124

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

Page 19: CAPITOLUL 4

Elemente de grafică asistată

125

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ă;

Page 20: CAPITOLUL 4

Personalizarea programului AutoCAD

126

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

Page 21: CAPITOLUL 4

Elemente de grafică asistată

127

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.

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).

x

a’ b’

b a

Figura 4.2

O

Page 22: CAPITOLUL 4

Personalizarea programului AutoCAD

128

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”.

Page 23: CAPITOLUL 4

Elemente de grafică asistată

129

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")

Page 24: CAPITOLUL 4

Personalizarea programului AutoCAD

130

(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).

X O

Z

Y

Figura 4.3