17542405-Curs-Autocad-21

11
19.Tehnologii de programare în mediul AutoCAD. Fişiere SCRIPT, LISP, VBA 19.1.Fişiere de comenzi AutoCAD. Comanda SCRIPT Cel mai simplist mod de automatizare a unor operaţii în mediul AutoCAD îl constituie crearea şi rularea fişierelor de comenzi, denumite fişiere “script”. Acestea sunt fişiere-text, salvate în format ASCII. Extensia unui fişier de comenzi este “.scr”. Un fişier script se crează cu un editor de texte oricât de simplu, cum ar fi Notepad sau Wordpad, rulat în afara sesiunii AutoCAD. Atenţie! Un fişier script trebuie să fie salvat în format ASCII! Includerea unor comentarii în fişierele script este posibilă prin utilizarea caracterului “;” la începutul liniei. Linia va fi considerată în întregime un comentariu. Caracterul <>, adică apăsarea tastei <ENTER>, se reprezintă prin spaţiu. Caracterul de sfârşit de rând din fişierul script are aceeaşi valoare. Numele lungi de fişiere incluse într-un fişier script trebuie să fie scrise între ghilimele. Într-un fişier script nu se admit opriri pentru introducerea datelor. Datele trebuie să fie scrise în totalitate în fişier. Un exemplu de fişier script este redat mai jos: ; rozeta din 4 cercuri, cu centrul rozetei in origine ;primul cerc CIRCLE 0,50 100 ; al doilea cerc CIRCLE 50,0 100 ; al treilea cerc CIRCLE 0,-50 100 19.Tehnologii de programare în mediul AutoCAD. Fişiere SCRIPT, 219

Transcript of 17542405-Curs-Autocad-21

Page 1: 17542405-Curs-Autocad-21

19.Tehnologii de programare în mediul AutoCAD. Fişiere SCRIPT, LISP, VBA

19.1.Fişiere de comenzi AutoCAD. Comanda SCRIPT

Cel mai simplist mod de automatizare a unor operaţii în mediul AutoCAD îl constituie crearea şi rularea fişierelor de comenzi, denumite fişiere “script”. Acestea sunt fişiere-text, salvate în format ASCII. Extensia unui fişier de comenzi este “.scr”.

Un fişier script se crează cu un editor de texte oricât de simplu, cum ar fi Notepad sau Wordpad, rulat în afara sesiunii AutoCAD.

Atenţie! Un fişier script trebuie să fie salvat în format ASCII!Includerea unor comentarii în fişierele script este posibilă prin

utilizarea caracterului “;” la începutul liniei. Linia va fi considerată în întregime un comentariu.

Caracterul <↵>, adică apăsarea tastei <ENTER>, se reprezintă prin spaţiu. Caracterul de sfârşit de rând din fişierul script are aceeaşi valoare.

Numele lungi de fişiere incluse într-un fişier script trebuie să fie scrise între ghilimele.

Într-un fişier script nu se admit opriri pentru introducerea datelor. Datele trebuie să fie scrise în totalitate în fişier.

Un exemplu de fişier script este redat mai jos:

; rozeta din 4 cercuri, cu centrul rozetei in origine;primul cercCIRCLE 0,50 100; al doilea cercCIRCLE 50,0 100; al treilea cercCIRCLE 0,-50 100

19.Tehnologii de programare în mediul AutoCAD. Fişiere SCRIPT,

219

Page 2: 17542405-Curs-Autocad-21

; al patrulea cercCIRCLE -50,0 100

Exemplul se încheie pe rândul al zecelea.Un fişier script se lansează în lucru prin comanda SCRIPT. Fişierele script sunt utile în realizarea unor prezentări constituite din

succesiuni de slide-uri create în AutoCAD, precum şi în crearea obiectelor 3dmesh în care vertex-urile sunt precizate explicit, punct cu punct.

Într-o prezentare de slide-uri, pentru a asigura staţionarea unui slide pe ecran un anumit timp, se foloseşte comanda DELAY, specificând durata în milisecunde a întârzierii dorite. Valoarea poate fi un număr natural între 1 şi 32767. Imaginile utilizate în prezentările de acest tip, slide-urile, sunt create prin comanda MSLIDE anterior rulării script-ului, şi trebuie să se găsească în directorul curent de lucru, sau pe o cale de căutare prespecificată.

Repetarea automată a execuţiei unui fişier script este asigurată de folosirea comenzii RSCRIPT pe ultima linie a fişierului. Ieşirea din ciclu se realizează tastând <Esc>.

Pentru a crea fişiere script corecte, este necesară o foarte bună cunoaştere a mediului AutoCAD şi multă experienţă.

Iată un exemplu de fişier script utilizat la prezentarea unei secvenţe de slide-uri:

; incepe prezentarea si se incarca SLIDE1VSLIDE SLIDE1; se preincarca SLIDE2VSLIDE *SLIDE2; se vizioneaza SLIDE1 timp de 2 secundeDELAY 2000; se afiseaza SLIDE2VSLIDE; se preincarca SLIDE3VSLIDE *SLIDE3; se vizioneaza SLIDE2 timp de 2 secundeDELAY 2000; se vizioneaza SLIDE3 timp de 3 secundeVSLIDEDELAY 3000; se repeta ciclul

Lia DOLGA AutoCAD 2000 în douăzeci de paşi

220

Page 3: 17542405-Curs-Autocad-21

RSCRIPT

19.2.Fişiere LISP. Comenzile VLISP şi APPLOADLimbajul de programare asociat implicit mediului AutoCAD este

AutoLISP. Acesta este un derivat al limbajului de inteligenţă artificială LISP şi permite crearea unor aplicaţii proprii ale utilizatorului pentru mediul AutoCAD.

Interpretorul AutoLISP este înglobat în AutoCAD, astfel că expresii AutoLISP pot fi utilizate chiar pe linia de comandă, la prompter-ul “Command:” sau din fişiere externe încărcate în memorie.

Pentru a obţine repatabilitatea utilizării expresiilor AutoLISP, ele trebuie scrise în fişiere format ASCII, cu extensia “.lsp”.

Un fişier lisp poate fi creat în orice editor de texte, cu condiţia scrierii sale corecte şi a salvării în formatul ASCII.

Versiunea AutoCAD 2000 include un mediu integrat de dezvoltare (“Integrated Development Environment”), numit Visual LISP, care conţine un compilator, un depanator (“debugger”), cataloage de funcţii precum şi controale vizuale care să simplifice mult scrierea programelor AutoLISP. În fig. 19.1 se prezintă fereastra de lucru pentru Visual LISP.

19.Tehnologii de programare în mediul AutoCAD. Fişiere SCRIPT,

221

Page 4: 17542405-Curs-Autocad-21

Figura 19.1 Fereastra de lucru pentru Visual LISP

Aplicaţiile AutoLISP interacţionează cu AutoCAD în moduri multiple. Funcţiile AutoLISP pot solicita date de intrare, pot accessa comenzi interne AutoCAD, pot crea şi manipula obiecte în desen, atât de natură grafică (cercuri, linii, polilinii, haşuri, cilindri, texte, etc.), cât şi de natură negrafică (layer-e, tipuri de linii, stiluri de scriere, etc.). Prin intermediul unor programe AutoLISP, utilizatorul îşi poate defini propriile comenzi AutoCAD. Odată definite, acestea pot fi utilizate simplu, similar cu orice comandă internă.

Scrierea programelor AutoLISP necesită multă experienţă şi cunoaşterea avansată a mediului AutoCAD.

Exemplul de mai jos prezintă definirea unei comenzi AutoCAD noi, denumită ROZETA, care desenează rozeta din 4 cercuri cu centrul în punctul specificat.

Lia DOLGA AutoCAD 2000 în douăzeci de paşi

222

Page 5: 17542405-Curs-Autocad-21

(defun C:ROZETA(/ c c1 c2 c3 c4 r ecou); se salvează starea curenta a variabilei de sistem CMDECHO(setq ecou (getvar “CMDECHO”)); se inlatura ecoul comenzilor pe linia de comanda(setvar “CMDECHO” 0); se specifica pozitia centrului(initget 1) (setq c (getpoint “/nSpecificati centrul rozetei:”));se specifica raza unui element(initget 7) (setq r (getdist c “/nSpecificati raza elementului:”));se calculează poziţia celor 4 centre(setq c1 (list (car c) (+ (cadr c) r)))(setq c2 (list (+ (car c) r) (cadr c)))(setq c3 (list (car c) (- (cadr c) r)))(setq c4 (list (- (car c) r) (cadr c))); se desenează cele 4 cercuri(command “CIRCLE” c1 r)(command “CIRCLE” c2 r)(command “CIRCLE” c3 r)(command “CIRCLE” c4 r);se restabileste ecoul comenzilor pe linia de comanda(setvar “CMDECHO” ecou)

)

Încărcarea în desen a unor aplicaţii scrise în AutoLISP se realizează fie prin comanda APPLOAD, fie prin funcţia AutoLISP (load “nume_aplicatie”). Comanda APPLOAD deschide caseta de dialog din fig. 19.2, denumită “Load/Unload Application”. Din casetă, se poate selecta fişierul dorit, după care, prin butonul “Load”, se încarcă efectiv acel fişier în memorie. Rubrica din stânga-jos anunţă încărcarea efectuată. Rubrica “Startup Suite” permite alegerea aplicaţiilor care se încarcă automat în memorie la începerea sesiunii de lucru.

Un fişier lisp încărcat în memorie poate fi descărcat prin aceeaşi comandă şi casetă de dialog. Descărcarea din memorie duce la gospodărirea mai eficientă a resurselor de lucru.

Scrierea expresiilor AutoLISP direct pe linia de comandă este admisă, dar execuţia este volatilă, nefiind repetabilă, decât în urma unei noi scrieri.

19.Tehnologii de programare în mediul AutoCAD. Fişiere SCRIPT,

223

Page 6: 17542405-Curs-Autocad-21

Figura 19.2 Caseta de dialog pentru încărcarea aplicaţiilor AutoLISP

19.3.Proiecte VBA. Comenzile VBAMAN,VBALOAD, VBAUNLOAD, VBARUN, VBAIDE

Utilizatorii de AutoCAD resimt necesitatea de a dezvolta noi aplicaţii, de a automatiza şi simplifica operaţiile, astfel încât să dobândească maximum de eficienţă şi comoditate în lucru. Unul din mijloacele cele mai evoluate şi mai elegante de realizare a acestui deziderat este crearea aplicaţiilor VBA. VBA este abrevierea denumirii “Visual Basic for Applications” şi desemnează un limbaj de programare derivat din Visual Basic Standard, cu facilităţi specifice pentru CAD.

Lia DOLGA AutoCAD 2000 în douăzeci de paşi

224

Page 7: 17542405-Curs-Autocad-21

AutoCAD include un mediu de dezvoltare interactivă a aplicaţiilor, VBA IDE (VBA Interactive Development Environment), cu câteva caracteristici care îl individualizează faţă de mediile similare create pentru alte pachete soft.

Cu ajutorul VBA IDE, se pot crea proiecte VBA, care sunt colecţii de module de cod, module de clasă şi formulare electronice destinate toate îndeplinirii unei anumite funcţii. Această funcţie are de obicei un caracter complex. Un proiect VBA poate fi stocat în interiorul desenului, ca “embedded project”, caz în care se salvează odată cu acesta, sau în afara unui desen, ca un fişier independent, “global project”. În prima variantă, proiectul în cauză este utilizabil numai în interiorul desenului-gazdă şi se încarcă automat la deschiderea desenului. Un singur proiect VBA poate fi fixat în desen la un moment dat. În varianta a doua, proiectul este disponibil spre utilizare în orice desen, dar trebuie încărcat în mod explicit. Un proiect global poate fi partajat cu alţi utilizatori.

Utilitarul VBA Manager gestionează unitar toate proiectele VBA disponibile (fig. 19.2). Utilitarul permite încărcarea., descărcarea, salvarea, crearea unor proiecte, fixarea – şi respectiv extragerea proiectelor VBA din desen. Utilitarul este lansabil prin comanda VBAMAN sau din meniul pull-down “Tools”, linia “Macro”.

Comenzile VBALOAD şi VBAUNLOAD încarcă/descarcă din memorie proiecte VBA.

19.Tehnologii de programare în mediul AutoCAD. Fişiere SCRIPT,

225

Page 8: 17542405-Curs-Autocad-21

Figura 19.2 Utilitarul VBA Manager

Intervenţia în desen a elementelor dintr-un proiect VBA se concretizează prin macrocomenzi. Lansarea unei macrocomenzi se realizează prin VBARUN, activabilă şi din meniul pull-down “Tools”. Caseta de dialog “Macros” (fig. 19.3), deschisă de comanda VBARUN oferă lista macrocomenzilor accesibile în momentul lucrului.

Casetele “Macros” şi “VBA Manager” sunt apelabile reciproc, pentru a asigura gestionarea rapidă a proiectelor şi a macrocomenzilor.

Pentru crearea, corectarea, modificarea proiectelor VBA, se utilizează VBA IDE, mediul de lucru menţionat anterior. Acesta se poate lansa fie din “VBA Manager” (butonul “Visual Basic Editor”), fie din meniul pull-down “Tools”, linia “Macro”, sau prin comanda VBAIDE.

Lia DOLGA AutoCAD 2000 în douăzeci de paşi

226

Page 9: 17542405-Curs-Autocad-21

Figura 19.3 Caseta de dialog “Macros” destinată managementului macrocomenzilor

În fig. 19.4 şi în fragmentul de program de mai jos, se prezintă un exemplu de creare a unei aplicaţii printr-un proiect VBA, aplicaţie în care se desenează rozeta din patru cercuri exemplificată anterior în AutoLISP şi într-un fişier script.

Private Sub d_cmd_Click()'Declaram variabilele in care se stocheaza'coordonatele centrelor cercurilor Dim center(0 To 2) As Double Dim c1(0 To 2) As Double Dim c2(0 To 2) As Double Dim c3(0 To 2) As Double Dim c4(0 To 2) As Double Dim radius As Double'Citim coordonatele rozetei din casutele text center(0) = CDbl(UserForm1.TextBox1.Text) center(1) = CDbl(UserForm1.TextBox2.Text) center(2) = 0

19.Tehnologii de programare în mediul AutoCAD. Fişiere SCRIPT,

227

Page 10: 17542405-Curs-Autocad-21

radius = CDbl(UserForm1.TextBox3.Text)'Calculam coordonatele cercului 1 c1(0) = center(0) c1(1) = center(1) + radius c1(2) = 0 Set circleObj1 = ThisDrawing.ModelSpace.AddCircle(c1, radius)'Calculam coordonatele cercului 2 c2(0) = center(0) - radius c2(1) = center(1) c2(2) = 0 Set circleObj2 = ThisDrawing.ModelSpace.AddCircle(c2, radius)'Calculam coordonatele cercului 3 c3(0) = center(0) c3(1) = center(1) - radius c3(2) = 0 Set circleObj3 = ThisDrawing.ModelSpace.AddCircle(c3, radius)'Calculam coordonatele cercului 4 c4(0) = center(0) + radius c4(1) = center(1) c4(2) = 0 Set circleObj4 = ThisDrawing.ModelSpace.AddCircle(c4, radius)'Regeneram viewport-ul activ ThisDrawing.Regen acActiveViewport ZoomAll MsgBox "Rozeta a fost creata!!!", , "Rozeta"End SubPrivate Sub exit_cmd_Click()EndEnd SubPrivate Sub UserForm_Initialize()UserForm1.Left = 3 * ThisDrawing.Width / 4UserForm1.top = ThisDrawing.Height / 2End Sub

Lia DOLGA AutoCAD 2000 în douăzeci de paşi

228

Page 11: 17542405-Curs-Autocad-21

Figura 19.4 Caseta de dialog creată în VBA, pentru parametrizarea rozetei din 4 cercuri

19.Tehnologii de programare în mediul AutoCAD. Fişiere SCRIPT,

229