Sunteți pe pagina 1din 210

ALEXANDRU BABĂ

AUTOMATIZAREA PROCESULUI DE PROIECTARE IN


INGINERIA MECANICĂ
1
Introducere

Prezenta lucrare a avut în vedere următoarele obiective:

- Preluarea schiţei operaţie, preluarea condiţiilor determinante şi modalităţi de


geometrizare a condiţiilor determinante sau găsirea altei metode prin extragerea acestora sau
prin citirea lor de pe schiţa piesei, stabilirea suprafeţelor pe care se inserează simbolurile;
- Generarea automată a simbolurilor informaţionale care aduce în prim plan analiza
schemelor de orientare şi fixare, suportul teoretic, ştiinţific al concepţiei dispozitivului,
suport pe care se construieşte schiţa de principiu şi apoi se declanşează întregul proces de
teorie şi practică a proiectării constructive;
- Generarea automată a simbolurilor informaţionale care aduce în prim plan analiza
schemelor de orientare şi fixare, suportul teoretic, ştiinţific al concepţiei dispozitivului,
suport pe care se construieşte schiţa de principiu şi apoi se declanşează întregul proces de
teorie şi practică a proiectării constructive;
- Generarea automată a reazemelor având la bază faptul că orice reazem la modul general e
o reuniune de blocuri constructiv funcţionale (BCF) cu legi de compoziţie specifice.
Rezolvarea obiectivelor a implicat cunoştinţe valoroase din mai multe domenii:
proiectarea dispozitivelor, matematică şi informatică.

2
CUPRINS
Introducere 2
Capitolul I CONSIDERAŢII PRIVIND PROIECTAREA ASISTATĂ DE 5
CALCULATOR
1. Prezentarea generală a limbajului de programare, Visual Basic 5

1.1 Aspecte generale privind folosirea controalelor 9


1.2 Controale pentru iniţierea acţiunilor 9
1.3 Controale pentru introducerea şi afişarea textului 10
1.4 Controale pentru selectarea opţiunilor 11
1.5 Concluzii 13
Capitolul II ANALIZA CU INSTRUMENTE INFORMATICE A ARHITECTURII 14
SCHIŢEI PIESEI SEMIFABRICAT (SC-PSF) CE SE PRELUCREAZĂ ÎN
DISPOZITIVE DE ORIRIENTARE ȘI FIXARE (DOFPSF)
2 Algoritmi pentru sinteza primitivelor (entităţilor) grafice 16
2.1 Aspecte ale entităţilor (primitivelor grafice) 16
2.2 Reprezentarea curbelor plane 16
2.3 Operaţii de decupare (clipping) 22
2.3.1 Necesitatea operaţiei de clipping 22
2.4 Clipping pentru segmente de dreapta 23
2.5 Transformări Grafice 2D 25
2.6 Curbe de aproximare şi interpolare: Curbe Bezier 32
2.6.1 Puncte de control 32
2.6.2 Curbe Bezier 32
2.7 Curbe de aproximare şi interpolare: Curbe B-Spline cubice 34
2.7.1 Curbe B-Spline cubice 34
2.7.2 Proprietatile curbei B-Spline cubice 36
2.8 Tehnici de extragere a informaţiilor de pe desen 50
2.9 Concluzii 72

Capitolul III SELECTAREA AUTOMATĂ A SCHEMELOR DE ORIENTARE TEHNIC 73


POSIBILE

3 Modalităţi de selectare automată a schemelor de orientare tehnic posibile 73


3.1 Modalităţi de selectare automată a schemelor de orientare tehnic 73
posibile utilizând structura arborescentă a PSF
3.2 Modalităţi de selectare automată a schemelor de orientare tehnic 78
posibile cu citirea informaţiilor de pe piesă

3
3.3 Concluzii 95

Capitolul IV GENERAREA AUTOMATĂ A SIMBOLURILOR UTILIZATE ÎN 96


PROIECTAREA DISPOZITIVELOR MECANICE

4 Algoritmul de gandire a problemei pentru rezolvarea ei cu ajutorul 96


calculatorului

4.1 Modalităţi de reprezentare a obiectelor grafice cu ajutorul 100


calculatorului

4.2 109
Algoritmi pentru generarea automată a simbolurilor informaţionale
folosite în proiectarea dispozitivelor mecanice utilizând VBA

4.3 Algoritm de crearea automată a unui block şi a unei colecţii de 114


blocuri

4.31 Modul de realizare a unui block folosind mediul AutoCad 115

4.3.2 Modul de realizare automată a unui block folosind VBA şi 118


mediul AutoCad

4.4 Algoritmi pentru generarea automată a simbolurilor 120


informaţionale folosite în proiectarea dispozitivelor mecanice
utilizând VB

4.5 Extragerea informaţiilor ataşate simbolului pentru a putea fi 176


folosite în alte aplicaţii

4.6 Aplicaţii folosind generatorul de simboluri 178

4.7 Construirea matricei de simboluri informaţionale 180

4.8 Concluzii 183

Capitolul V GENERAREA AUTOMATĂ A REAZEMELOR PENTRU 185


CONSTRUCŢIA DISPOZITIVELOR

5 Modelul general constructiv funcţional al blocurilor 185


5.1 Algoritm de generare automată a entităţilor (componentelor) dintr- 186
un desen de ansamblu în blocuri

5.2 Algoritm pentru generarea automată a tuturor reazemelor având la 191


bază modelul general constructiv-funcţional

5.3 Concluzii 202

Bibliografie 203

4
Capitolul I. CONSIDERAŢII PRIVIND PROIECTAREA ASISTATĂ DE
CALCULATOR

1. Prezentarea generală a limbajului de programare, Visual Basic

Aplicarea informaticii în tehnică, se impune astăzi ca o necesitate. Informatizarea tehnică, este


cea care, adesea, pe pieţele interne şi internaţionale înclină balanţa succesului într-o parte sau
alta, fiind în acelaşi timp un cert factor de progres. Calculatorul electronic pătrunde în
universităţi, şcoli, întreprinderi, institute de cercetare, şi se consemnează astfel intrarea decisivă a
calculatorului electronic în rezolvarea problemelor de natură tehnologică atât în proiectare, cât şi
în producţiei.
Participarea la circuitul de valori internaţional nu este posibil decât prin elemente de certă
noutate; iar această noutate nu se poate rezolva, decât prin intermediul unor programe eficiente,
bazate pe algoritmi eficienţi.
Majoritatea dintre acestea pot fi programate în limbajul Visual Basic (VB) sau Visual Basic
Aplication (VBA) sau alte limbaje de programare.
Folosirea codului C în AutoCad prezintă avantajul de a fi un limbaj comun mai multor aplicaţii,
asigurând astfel interconectivitatea. Legătura dintre AutoCad şi VB este posibilă prin interfaţa
AutoCad ActiveX Automation [4].
Visual Basic este un mediu pentru dezvoltarea de aplicaţii Windows.
Termenul visual din sintagma Visual Basic se referă la faptul că interfaţa aplicaţiei este
grafică, iar proiectarea ei se face visual. Mediul Visual Basic pune la dispoziţia proiectantului de
aplicaţii o mulţime de elemente visuale standard care definesc o interfaţă grafică, numite de
obicei elemente de control, sau, mai scurt, controale.
Proiectarea interfeţei înseamnă plasarea controalelor necesare în ferestrele aplicaţiei (numite
forme în terminologia Visual Basic şi setarea proprietăţilor acestora (de asemenea într-o manieră
vizuală, prin intermediul ferestrei Properties) în concordanţă cu nevoile aplicaţiei.
De asemenea, Visual Basic are incluse facilităţi de lucru cu obiectele visuale ce compun
interfaţa unei aplicaţii Windows: accesarea proprietăţilor, apelarea metodelor şi definirea
procedurilor eveniment.

5
În concluzie, Visual Basic este un limbaj de programare multiparadigmă, care corespunde
cerinţelor programării structurate (mai exact programării bazate pe obiecte), programării dirijate
de evenimente (eventdriven programming) şi paradigmei bazelor de date (manipularea datelor
dintr-o bază de date şi pentru efectuarea de interogări folosind SQL).
Mediul de programare Visual Basic permite scrierea de aplicaţii – ce se pot executa sub mediile
şi sistemele de operare Windows.

Aplicaţiile realizate în Visual Basic pot, la rândul lor, să comunice cu alte aplicaţii Windows prin
intermediul următoarelor interfeţe [4], [14], [35] :

 COM, Component Object Model: model general de interconectare şi comunicare


între obiecte, într-un sistem distribuit şi bazat pe platforme Windows;
 OLE, Object Linking and Embedding, tehnologie care permite programatorului
unei aplicaţii Windows să realizeze afişarea de date ce aparţin altor aplicaţii modificarea acestor
date din interiorul aplicaţiei care le-a creat.
 ActiveX este umbrela sub care coexistă o mulţime de tehnologii software
dezvoltate de Microsoft, bazate pe OLE şi COM.
Legătura dintre AutoCad şi VB este posibilă prin interfaţa AutoCad ActiveX Automation [4].
Această tehnologie permite manipularea obiectelor din VB. Obiectul este entitatea fundamentală
în cadrul unei aplicaţii ActiveX. Există mai multe tipuri de obiecte AutoCad:
- Obiecte grafice: linii, cercuri etc
- Obiecte stil: dimStyle, lineType etc
- Obiecte de tip vederi sau ferestre de afişare
- Desenul însuşi sau chiar aplicaţia AutoCad
- Structuri organizate: straturi, mulţimi de selecţie etc
Obiectele ActiveX sunt structurate conform unei ierarhii specifice. Un obiect este identificat prin
apartenenţa sa pe cale ierarhică. Pentru a manipula un obiect se folosesc proprietăţi, metode şi
evenimente.
În fig. 1 se prezintă ierarhizarea obiectelor în Autocad [60], [71].

6
Fig. 1 Ierarhizarea obiectelor în Autocad

 Microsoft Jet Database Engine este motorul sistemului de gestiune a bazelor de


date Microsoft Access ce permite accesarea informaţiei memorate în următoarele formate:
Microsoft Access, dBase, Fox-Pro, Paradox. Mediul Visual Basic are acelaşi gestionar de date ca
şi sistemul de gestiune a bazelor de date Microsoft Access, [14], [35]. Prin această interfaţă se
asigură folosirea aceluiaşi limbaj de manipulare a datelor (în cazul nostru, Visual Basic) pentru
oricare dintre formatele enumerate;
 ODBC, Open DataBase Connectivity este un protocol standard ce permite
aplicaţiilor (numite şi aplicaţii client) să se conecteze la o varietate de servere de baze de date sau
de fişiere, [14], [22], [23].
Visual Basic se încadrează în clasa de medii RAD (Rapid Application Development, dezvoltare
rapidă a aplicaţiilor), care la această oră se impun din ce în ce mai mult pe piaţă. Produse
similare din această clasă sunt Borland Delphi, Power Builder şi poate Microsoft Visual C++.

Realizarea unei aplicaţii folosind Visual Basic înseamnă parcurgerea următoarelor etape:
 Proiectarea interfeţei cu utilizatorul;
 Setarea proprietăţilor, formelor şi controalelor;

7
 Scrierea codului;
 Testarea aplicaţiei realizate;
 Crearea fişierului executabil şi distribuirea aplicaţiei.
Prima etapă este realizată prin următoarele activităţi:
 Crearea unui proiect nou, care este cadrul în care se realizează aplicaţia;
 Crearea formelor (câte una pentru fiecare fereastră a aplicaţiei) ;
 Includerea controalelor în fiecare formă, prin folosirea cutiei cu instrumente
Toolbox;
 Crearea unei bare de meniuri pentru fereastra principală a aplicaţiei.
Terminologia Visual Basic foloseşte numele de formă pentru fereastră şi de control pentru
elementele de control [21], [23]. Toate elementele de interfaţă din Visual Basic (forme sau
cotroale) sunt considerate obiecte. În Visual Basic, obiectele vizuale au proprietăţi (ce corespund
variabilelor de stare) şi metode. O clasă specială de metode este reprezentată de procedurile
eveniment, cu ajutorul cărora programatorul descrie comportamentul particular al obiectului la
declanşarea evenimentului în cauză. Apelul procedurilor eveniment este realizat de mediul de
execuţie, pe când apelul metodelor este scris de programator.
Ferestrele dintr-o aplicaţie Visual Basic sunt instanţe ale clasei generice Form. În momentul
în care o formă este inclusă într-un proiect, numele său defineşte o nouă clasă, care este
caracterizată de controalele incluse în formă şi de codul scris în modulul formei.
În Visual Basic stabilirea stilului formei (ce defineşte comportamentul acesteia) se face prin
setarea unor proprietăţi specifice ale clasei formă, făcută fie în faza de proiectare a interfeţei
(folosind fereastra Properties a mediului integrat de dezvoltare), fie la execuţie (folosind
instrucţiuni de atribuire în codul sursă). Forma are şi proprietăţi care sunt accesibile fie numai la
proiectare, fie numai la execuţie.
Orice obiect vizual se reprezintă într-un dreptunghi. Proprietăţile de poziţie şi dimensiune ale
dreptunghiului sunt denumite natural Top şi Left (colţul din stânga sus al chenarului
dreptunghiului), respectiv Width şi Height (lăţimea şi înălţimea acesteia). Pentru forme,
proprietatea Border Style defineşte stilul ferestrei, Caption precizează valoarea elementului
omonim al barei de titlu, iar proprietăţile ControlBox, MinButton şi MaxButton specifică
prezenţa sau absenţa iconului pentru meniul sistem, respectiv butoanelor de minimizare sau
maximizare.

8
1.1 Aspecte generale privind folosirea controalelor

Într-o aplicaţie Visual Basic, controalele trebuie incluse în forme [4]. Forma reprezintă cadrul
în care un control îşi desfăşoară acţiunile sale: coordonatele controlului sunt setate relativ la zona
client a acesteia, iar ordinea de accesare depinde de alte controale existente în formă. Fiecare
obiect formă are o colecţie Controls care conţine controalele existente în formă la un moment
dat. Această colecţie este accesibilă numai la execuţie.
Există două metode de includere a controalelor în formă: la proiectare, folosind caseta cu
intrumente ToolBox sau la execuţie când controalele se pot insera sau elimina dinamic. La
încărcarea formei în memorie colecţia Controls conţine toate controalele stabilite la proiectare;
pe parcursul execuţiei această colecţie se modifică în concordanţă cu operaţiile de adăugare şi de
eliminare a controalelor în/din formă, realizate cu intrucţiunile Load şi Unload.

1.2 Controale pentru iniţierea acţiunilor

Între cele mai simple acţiuni ale utilizatorului se numără şi apăsarea pe un buton dintr-o
formă. Butonul poate fi controlul standard CommandButton sau un control specializat creat de
proiectant prin folosirea unui control Image care va conţine o imagine sugestivă (de genul
butoanelor de pe bara de instrumente).
Butoanele de comandă sunt obiecte din clasa CommandButton şi permit iniţierea de acţiuni
prin apăsare. Ele au o formă dreptunghiulară cu colţurile rotunjite, fondul gri (implicit) şi conţin
în interior un text care explică acţiunea iniţiată la apăsare. Butoanele OK şi Cancel care apar în
multe casete de dialog pe care Windows le afisează sunt exemple de butoane de comandă.
Prefixul stadard al acestora este cmd.
Controalele CommandButton au proprietăţile: BackColor, Cancel, Caption, Default,
DragIcon, DragMode, Enabled, FontBold, FontItalic, FontName, FontSize, Height, Index, Left,
Name, Parent, TabIndex, Tag, Top, Value, Visible, Width.
Evenimentele specifice controalelor Command Button sunt: Click, DragDrop, DragOver,
GotFocus, KeyDown, KeyPress, KeyUp, LostFocus, MouseDown, MouseMove, MouseUp.

9
Evenimentul uzual este Click care semnifică apăsarea butonului folosind mousul. Utilizatorul
are senzaţia vizuală de apăsare, controlul schimbându-şi aspectul prin aplatizare. Declanşarea
acetui eveniment este provocată de una din următoarele acţiuni:
 Click Mouse pe buton;
 Apăsarea tastelor Enter sau bară de spaţiu când butonul este focalizat (denumirea
butonului este încadrată într-un chenar punctat);
 Apăsarea tastei de accesare a butonului (alt+litera subliniată din denumirea
butonului);
 Setarea proprietăţii Value si True în cod;
 Apăsarea tastei Enter dacă butonul este butonul de confirmare al casetei de dialog
chiar dacă el nu are focalizarea în momentul apăsării tastei;
 Apăsarea tastei Esc dacă butonul este butonul de anulare al casetei de dialog.

1.3 Controale pentru introducerea şi afişarea textului

Visual Basic pune la dispoziţia programatorului două tipuri de controale intrinseci [14] cu
această funcţionalitate: Label şi Text Box. Pe lângă acestea, barele de defilare orizontală şi
verticale (Horizontal Scroll Bar şi Vertical Scroll Bar) se pot folosi pentru afişarea, introducerea
şi modificarea grafică a valorilor numerice din intervalele prestabilite.
Controlul Label (etichetă) se foloseşte pentru afişarea textului în forma şi pentru accesarea
(prin intermediul tastaturii a) controalelor care nu au proprietatea Caption.
Controalele Label au următoarele proprietăţi: Alignment, Autosize, Caption, DataField, Index,
Height, Font, Name, TabIndex, Visible, Width, WordWrap.
Metodele controalelor Label sunt: Drag, LinkExecute, LinkPoke, Move, Refresh. Controlul Text
Box este folosit pentru afişarea şi modificare textului. Elementele caractecteristice lor sunt
chenarul dreptunghiular şi absenţa proprietăţii Caption.
Controalele TextBox au următoarele proprietăţi: Alignment, BackColor, BorderStyle, DataField,
DataSource, Index, Left, Name, Parent, ScrollBars, SetLength, TabIndex, Visbile, Width.
Deoarece controlul Text Box nu are proprietatea Caption, el nu poate fi focalizat direct cu
tastatura. Ca regulă generală, orice casetă cu text trebuie să aibă ataşată o etichetă care să
precizeze semnificaţia textului de conţinut în ea.

10
Evenimentele vizibile ale casetei cu text sunt textul conţinut în ea şi chenarul său, în care sunt
poziţionate barele de defilare. Poziţia curentă a cursorului în text este marcată printr-o bară
verticală. Evenimentele specifice controalelor Text Box sunt: Change, Click, DblClick,
DragDrop, DragOver, KeyPress, Link, LostFocus, MouseDown, MouseMove.
Metodele controalelor Text Box sunt: Drag, LinkExecute, LinkPoke, LinkRequest, Move, Refresh,
SetFocus.

1.4 Controale pentru selectarea opţiunilor

Frecvent utilizatorul este pus în situaţia să aleagă unul sau mai multe elemente dintr-o
mulţime predefinită.
Controalele List Box prezintă opţiunile posibile într-o listă, afişând de regulă o singură
coloană în care elementele listei sunt dispuse una sub alta [4], [14], [23], [35]. Elementele
prezentate într-un control List Box sunt memorate intern într-un tablou. Afişarea elementelor în
control se face fie alfabetic, fie în ordinea de introducere a opţiunilor în tablou. Controlul List
Box memorează într-un alt tablou, care din elementele sale sunt selectate.
Dintre proprietăţile unui control List Box amintim: BackColor, Column, DragItem,
DragMode, Enabled, Index, Left, List, ListCount, ListIndex, Parent, Sorted, TabIndex, Visible,
Tag, Text, Width.
Evenimentele specifice controalelor sunt: Click, DblClick, GotFocus, KeyDown, KeyPress,
LostFocus, MouseDown, MouseMove, MouseUp.
Cele mai folosite evenimente sunt Click şi DblClick. Evenimentul tastatură KeyPress se poate
folosi pentru poziţionarea (automată) în listă.
Metodele controalelor List Box sunt: AddItem, Clear, Drag, Move, Refresh, SetFocus.
Operaţiile ce se pot efectua asupra unui control List Box sunt cel puţin următoarele:
 Adăugarea de elemente în listă (prin apelul metodei AddItem), care permite (dacă
lista nu este sortată) fie adăugarea la sfârşit (când nu se precizează parametrul indice), fie
adăugarea pe o poziţie specificată (când se precizează parametrul indice); în cazul listelor sortate
(cu proprietatea Sorted setată pe True), adăugarea se face automat pe poziţia (indicele) care
conservă ordinea alfabetică a opţiunilor din listă.

11
 Adăugatrea de informaţie auxiliară (numerică) asociată elementelor listei în
tabelul ItemData, prin folosirea proprietăţii NewIndex, imediat după adăugarea elementului;
NewIndex conţine indicele elementului cel mai recent introdus în listă: ItemData(NewIndex)
poate conţine codul numeric asociat opţiunii List(NewIndex), cea mai recent introdusă în listă cu
metoda AddItem;
 Sortarea listei – prin setarea proprietăţii Sorted pe True la proiectare;
 Ştergerea unui element din listă (precizat prin indicele său), prin apelul metodei
RemoveItem;
 Ştergerea tuturor elementelor din listă, prin apelul metodei Clear;
 Accesarea elementului selectat – prin proprietatea Text;
 Accesarea informaţiei numerice ataşate unui element din listă (precizat prin
indicele său), folosind proprietatea ItemData;
 Determinarea numărului de elemente din listă, folosind proprietatea ListCount;
 Determinarea poziţiei elementului cel mai recent selectat prin folosirea
proprietăţii ListIndex; dacă ListIndex =-1‚ atunci nu există element selectat
 Determinarea tuturor elementelor selectate prin testarea proprietăţii Selected; un
element de indice I este selectat dacă Selected(I) = True;
 Crearea unei casete cu listă cu o singură coloană şi cu defilare pe orizontală, prin
setarea proprietăţii Columns pe 1;
 Crearea şi folosirea de casete cu listă cu mai multe coloane, prin setarea
proprietăţii Columns pe valoarea dorită pentru numărul de coloane;
 Crearea şi folosirea de casete cu listă cu selecţii multiple, prin setarea proprietăţii
MultiSelect pe 1 sau pe 2;
Din simpla parcurgere a listei de operaţii de mai sus rezultă complexitatea controlului ListBox.
Controalele Combo Box, sunt combinaţie între casetele cu listă şi casetele cu text, moştenind din
proprietăţile şi comportamentul ambelor tipuri de controale.
Există trei stiluri de casete combinate, ce diferă între ele atât ca aspect, cât şi ca funcţionalitate:
 Combo Box derulantă (dropdown), este cea mai folosită; în formă comprimată, caseta cu
listă este invizibilă, ea expandându-se prin apăsarea unui buton de comandă săgeată-jos
poziţionat în dreapta casetei cu text

12
 Combo Box standard (simplă) rar utilizată, fiind însă utilă pentru înţelegerea
funcţionalităţii casetei combinate; constă dintr-o casetă cu text şi o casetă cu listă, afişată
întotdeauna şi poziţionată imediat sub caseta cu text. Utilizatorul poate selecta un element al
listei sau poate introduce în caseta cu text un element ce nu există în listă;
 List Box derulantă (dropdown); comportamental, ea este o casetă cu listă cu selecţie
unică; în caseta cu text aferentă (de al cărei capăt din dreapta este lipit un buton de comandă
săgeată-jos) nu se poate introduce text, ci doar se afişează elementul cel mai recent selectat din
listă.
Atât casetele cu listă, cât şi casetele combinate se folosesc pentru selectarea opţiunilor, fiind o
alternativă flexibilă la controalele simple de selectare.
Proprietăţile unui contol Combo Box sunt: BackColor, DragIcon, DragMode, Enabled, Index,
Left, List, ListCount, ListIndex, TabIndex, Visible, Tag, Text, Width.
Evenimentele unui contol Combo Box sunt: Click, DblClick, GotFocus, KeyDown, KeyPress,
LostFocus.
Pentru toate stilurile, declanşarea evenimentului Click provoacă completarea conţinutului
casetei cu text cu valoarea elementului selectat din listă.
Evenimentele DropDown sunt specifice numai casetelor combinate cu stilurile 0 şi 2 şi sunt
declanşate de apăsarea butonului săgeată-jos poziţionat în partea dreaptă a casetei cu text.
Controalele Combo Box au aceleaşi metode ca şi controalele List Box.
Metodele controalelor Combo Box sunt: AddItem, Clear, Drag, Move, Refresh, SetFocus.

1.5 Concluzii

Inginerul este asistat de aplicaţii CAD/CAM prin care are posibilitatea verificării celor create si
poate să realizeze o productivitate mai bună. Majoritatea dintre acestea pot fi programate în
limbajul Visual BASIC sau VBA sau alte limbaje de programare.

Folosirea codului VB în AutoCad prezintă avantajul de a fi un limbaj comun mai multor


aplicaţii, asigurând astfel interconectivitatea. Legătura dintre AutoCad şi VB este posibilă prin
interfaţa AutoCad ActiveX Automation.

13
Capitolul II. ANALIZA CU INSTRUMENTE INFORMATICE A ARHITECTURII
SCHIŢEI PIESEI SEMIFABRICAT (SC-PSF) CE SE PRELUCREAZĂ ÎN
DISPOZITIVE DE ORIRIENTARE ȘI FIXARE (DOFPSF)

În cadrul concepţiei clasice schiţa operaţiei cuprinde schiţa piesei semifabricat, schiţa sculei
aşchietoare şi schema de aşchiere.
Schiţa operaţiei (Fig. 1) cu piesa în poziţie de lucru pe maşina-unealtă, trebuie să
îndeplinească următoarele condiţii [20]:
 să cuprindă un număr suficient de vederi şi secţiuni pentru înţelegerea şi determinarea în
bune condiţii a formei constructive a piesei;
 să scoată în evidenţă suprafeţele supuse prelucrării prin îngroşarea conturului;
 să conţină dimensiunile, precizia dimensională, de formă, de poziţie şi rugozitatea
suprafeţelor ce se prelucrează şi a celor faţă de care acestea se raportează;
 să evidenţieze mişcările piesei în procesul generării suprafeţelor, conform schemei de
aşchiere adoptate;
 să fie redate schematic sculele aşchietoare cu care se realizează generarea şi evidenţiate
mişcările lor;
 să fie indicate prin simboluri forţele care solicită piesa în procesul de prelucrare.

14
Fig. 2 Exemplu de shemă de orientare

Toate aceste date trebuie să fie indicate de tehnolog, singurul în măsură să stabilească tehnologia
de prelucrare, să determine regimurile de aşchiere, forţele şi momentele care iau naştere în
procesul de prelucrare, să indice sculele aşchietoare etc.
Oricare piesă este proiectată pentru un anumit scop, deci trebuie să îndeplinească un anumit rol
funcţional în ansamblul din care face parte. Potrivit acestui rol, proiectantul a indicat materialul,
tratamentul termic, dimensiunile, precizia dimensională de formă, de poziţie şi rugozitatea
suprafeţelor, toate acestea concentrate în desenul de execuţie al piesei.
Ca urmare a obligativităţii respectării prevederilor STAS 7385-66, referitoare la înscrierea pe
desenele de execuţie a toleranţelor dimensionale şi a abaterilor de la forma geometrică şi de la
poziţia reciprocă face ca aproape în totalitate, condiţiile să se regăsească înscrise pe desenele de
execuţie.
Se sţie că o schemă de orientare este compusă din schiţa piesei semifabricat la operaţia pentru
care se proiectează dispozitivul, cu evidenţierea suprafeţei de generare şi cotele care reprezintă
condiţiile determinante (care determină cert o anumită poziţie reciprocă a supafeţei de generat),
şi un set de simboluri, care vin pe suprafeţele rezultate din geometrizarea acestor condiţii.
Pornind de la concepţia clasică începem să analizăm problema din punct de vedere informatic.
Deci pentru a face schema de orientare este nevoie de schiţa operaţiei şi de simbolurile
informaţionale.
Pornim de la ideea următoare:
Dacă avem schiţa piesei construită într-un mediul grafic şi înzestrată cu un set de condiţii
(constrângeri) astfel încât să fie inteligentă, pot cu ajutorul instrumentelor de programare a
calculatoarelor să le preluăm şi să le prelucrăm informatic?
Presupun că am schiţa piesei desenată în mediul grafic. Este această schiţă completă?
Dacă da, se continuă cu altă activitate. Dacă nu, mă obligă ca programul pe care doresc să-l
proiectez să aibă posibilitatea să trasez, să schimb, să completez anumite elemente din schiţa
operaţiei. Acest lucru să se realizeze fără părăsirea programului proiectat şi folosirea
instrumentelor din mediul grafic ales.

15
Piesa trebuie să aibe vederi şi secţiuni complete, dacă nu să pot interveni pentru ale putea
completa.
Se impune ca programul să aibe posibilitatea să deseneze linii, arce de cerc, cercuri, etc.
Piesa trebuie să aibe cote. În cazul în care lipseşte o cotă trebuie să am posibilitatea să o pun.
Piesa trebuie să aibe rugozităţile trecute. Dacă lipseşte, trebuie să le pun.
Piesa trebuie să aibe un sistem de referinţă. Dacă nu-l are trebuie pus.
Dacă schema de aşchiere nu este trecută, trebuie trecută.
Pentru a realiza programul am nevoie de algoritmi de sinteza primitivelor grafice.

2. Algoritmi pentru sinteza primitivelor (entităţilor) grafice

2.1 Aspecte ale entităţilor (primitivelor grafice)

Se numeşte element geometric de bază o entitate geometrică simplă, necesară în mod


frecvent în descrierea scenelor grafice [1], [2]. O realizare a unui element geometric de bază într-
un sistem grafic (implementarea acestuia) se numeşte element grafic de bază.
Reamintim că cele mai simple elemente grafice de baza sunt: punctul, segmentul de
dreapta, arcul de cerc, cercul. Elementele grafice de baza sunt recunoscute de sistem fie prin
ecuaţii analitice, fie printr-un set reprezentativ de puncte din care se pot deduce ecuaţii analitice.
De exemplu, un cerc poate fi generat pe dispozitivul de ieşire pornind de la ecuatia:
x2 + y2 = r2 (1)

Pentru fiecare element grafic de bază, în sistem este prevazută o rutină grafică
(procedură) a carei execuţie poate produce imaginea sa pe dispozitivul de ieşire (ecran). Aceste
rutine grafice vor fi numite în continuare entităţi. Vom defini şi implementa rutine grafice
specific limbajului VBA pentru AUTOCAD şi pentru următoarele elemente grafice de bază:
 linia poligonala
 dreptunghiul

 cercul

 arcul de cerc
Acest set de primitive grafice poate fi extins după necesităţi.

16
2.2 Reprezentarea curbelor plane.
Menţionez că în literatura de specialitate [2], [22], [30] au fost propuşi numeroşi
algoritmi privind implementarea primitivelor grafice (entităţi).
Implementarea primitivelor grafice poate porni de la ecuaţiile analitice ale elementelor
grafice de bază. Este doesebit de util ca sistemul grafic să prevadă şi procedura generală pentru
reprezentarea curbelor plane descrise analitic.
Ecuaţia unei curbe plane poate fi dată în una din formele:
a. forma explicită y=f(x) în coordonate carteziene sau polare. În acest caz pentru fiecare
valoare a lui x se poate găsi o singură valoare y. Curbele închise sau cu mai multe variabile nu
pot fi descrise printr-o singură ecuaţie explicită.
b. forma implicită f(x, y)=0 descrie atât curbele deschise cât şi pe cele închise sau cu
mai multe ramuri, dar sunt dificil de utilizat.
c. forma parametrică, în care fiecare coordonată a unui punct p(x, y) al curbei este dată
ca o funcţie dependentă de un parametru:
x=x(t) (2)
y=y(t) (3)
cu parametrul t în intervalul [a,b].
Vectorul de poziţie al unui punct al curbei este
p(t) = [x(t), y(t)] (4)
Reprezentarea parametrică a unui segment de dreapta definit de punctele P1(x1, y1) şi
P2(x2, y2) este:
P(t) = P1 + (P2 - P1)*t, (5)
sau
x(t) = x1 + (x2 - x1)*t (6)
y(t) = y1 + (y2 – y1)*t (7)
cu t în intervalul [0,1] iar pentru un cerc cu centrul în origine şi raza R:
P(t) = [R*cos(t), R*sin(t)] (8)
sau
x(t) = R*cos(t) (9)
y(t) = R*sin(t) (10)
cu t în [0,2PI].

17
Reprezentarea curbelor se poate face prin aproximare cu o secvenţă de segmente de
dreaptă. Aceste segmente sunt determinate de creşteri egale ale parametrului. Numărul de
segmente utilizate se alege ţinând cont de aspectul grafic al imagini rezultate.
Procedura generală pentru trasarea curbelor parametrice are ca parametrii cele două
funcţii care descriu ecuaţiile:
x = x(t) (11)
y = y(t) (12)
şi limitele variaţiei parametrului.
În cadrul acestei lucrări se vor implementa procedurile şi funcţiile necesare pentru:
 trasarea curbelor parametrice
 trasarea cercurilor, arcelor de cerc
 trasarea liniilor poligonale
 trasarea dreptunghiurilor
Iată nişte exemple practice utilizând programele scrise în VB care demonstrează că atunci
când piesa nu este desenată complet, pot să o completez . De menţionat că toate programele sunt
funcţionale.
 Să se deseneze un arc (Fig. 3):

Fig. 3 Obiectul arc


Public Sub GenerareArc()
Dim Centru As Variant

18
Dim Raza As Double
Dim punctInceput As Double
Dim punctSfarsit As Double
Dim objEntitate As AcadArc
On Error Resume Next
" introducere date
With ThisDrawing.Utility
Centru = .GetPoint(, vbCr & "Selectaţi centrul arcului: ")
Raza = .GetDistance(Centru, vbCr & "Introduceti raza: ")
punctInceput = .GetAngle(Centru, vbCr & "Introduceti unghiul de start: ")
puncSfarsit = .GetAngle(Centru, vbCr & "Introduceti unghiul de sfarsit: ")
End With
" desenare arc
If ThisDrawing.ActiveSpace = acModelSpace Then
Set objEntitate = ThisDrawing.ModelSpace.AddArc(Centru, Raza, punctInceput, punctSfarsit)
Else
Set objEntitate = ThisDrawing.PaperSpace.AddArc(Centru, Raza, punctInceput, punctSfarsit)
End If
objEnt.Update
End Sub
 Să se traseze un cerc (Fig. 4):

Fig. 4. Obiect cerc

Public Sub GenerareCerc()


" Declarare variabile
Dim Centru As Variant
Dim Raza As Double
Dim objEntitate As AcadCircle
On Error Resume Next
" introducere date
With ThisDrawing.Utility
Centru = .GetPoint(, vbCr & "Selectati centrul: ")
Raza = .GetDistance(Centru, vbCr & "Introduceti raza: ")

19
End With
" desenare cerc
If ThisDrawing.ActiveSpace = acModelSpace Then
Set objEntitate = ThisDrawing.ModelSpace.AddCircle(Centru, Raza)
Else
Set objEntitate = ThisDrawing.PaperSpace.AddCircle(Centru, Raza)
End If
objEnt.Update
End Sub

 Să se traseze o elipsă (Fig. 5):

Fig. 5 Obiectul elipsă


Public Sub GenerareElipsa()
Dim Centru(0 To 2) As Double
Dim Major(0 To 2) As Double
Dim RazaRatio As Double
Dim Inceput As Double
Dim Sfarsit As Double
Dim objEntitate As AcadEllipse

On Error Resume Next

" setarea parametrilor elipsei


Centru(0) = 0: Centru (1) = 0:
Centru (2) = 0 Major(0) = 10:
Major(1) = 0: Major(2) = 0
RazaRatio = 0.5

" desenare elipsa

20
If ThisDrawing.ActiveSpace = acModelSpace Then
Set objEntitate = ThisDrawing.ModelSpace.AddEllipse(Centru, Major, RazaRatio)
Else
Set objEntitate = ThisDrawing.PaperSpace.AddEllipse(Centru, Major, RazaRatio)
End If
objEnt.Update
End Sub

 Să se deseneze o linie (Fig. 6):

Fig. 6 Obiectul linie

Public Sub GenerareLinie()


Dim punctInceput As Variant
Dim punctSfarsit As Variant
Dim objEntitate As AcadLine

On Error Resume Next


" introducere date
With ThisDrawing.Utility
punctInceput = .GetPoint(, vbCr & "selectati primul punct: ")
punctSfarsit = .GetPoint(punctInceput, vbCr & "selectati al doilea punct: ")
End With

" desenează linia


If ThisDrawing.ActiveSpace = acModelSpace Then
Set objEntitate = ThisDrawing.ModelSpace.AddLine(punctInceput, punctSfarsit)
Else
Set objEnt = ThisDrawing.PaperSpace.AddLine(punctInceput, punctSfarsit)
End If
objEnt.Update
End Sub

21
2.3 Operaţii de decupare (clipping)

2.3.1 Necesitatea operaţiei de clipping


Pe parcursul execuţiei unei aplicaţii grafice în orice moment sunt active o fereastră şi un
port de vedere. Sistemul grafic asigură că imaginile elementelor grafice conţinute în fereastra
activă vor fi produse în zona ecran definită de portul de vedere curent pe baza unei transformări
de coordonate numită transformare de vizualizare. Această transformare mapează (aplică)
conţinutul ferestrei pe zona portului de vedere. În acest proces nu se verifică dacă punctul supus
tranformării este sau nu în interiorul ferestrei. Punctul ecran corespunzător unui punct din
exteriorul ferestrei este plasat de transformarea de vedere în afara portului activ, sau chiar în
afara spaţiului ecranului. Aceste situaţii trebuie deci evitate prin introducerea unei etape
intermediare în procesul reprezentării elementelor grafice [2], [4].
În momentul în care utilizatorul defineşte o fereastră, în mod implicit este stabilit şi un
sistem de coordonate cartezian. Elementele componente ale unei scene grafice se raportează la
acest sistem de coordonate. În raport cu fereastra, elementele grafice pot fi conţinute total,
exterioare sau se pot intersecta.

Fig. 7 Elemente grafice conţinute total, exteriore sau se pot intersecta în raport cu fereastra

Transformarea de vizualizare trebuie aplicată şi asupra acelor elemente sau porţiuni de


elemente care sunt incluse în fereastra activă. Operaţia de prelucrarea a unei scene grafice în
urma cărei sunt eliminate porţiunile care nu se încadrează în fereastra activă poartă numele de
clipping. Algoritmii de clipping trebuie să stabilească pentru fiecare element grafic al scenei
porţiunile care se încadrează în fereastra activă iar pe celelalte să le îndepărteze.

22
Procedurile de reprezentare a elementelor grafice vor face apel la operaţia de clipping
înaintea aplicării transformarii de vizualizare, asigurând în acest fel că elementele grafice vor fi
produse în interiorul portului de vedere activ.

2.4 Clipping pentru segmente de dreapta


Unul dintre algoritmii cei mai deşi utilizaţi pentru clipping-ul segmentelor de dreaptă este
algoritmul Cohen-Sutherland.
Vom considera că fereastra activă este definită de 4 valori reale: xmin, ymin, xmax,
ymax. Un punct P(x, y) definit în coordonate utilizator este în interiorul ferestrei (deci vizibil)
dacă îndeplineşte relaţiile :
xmin <= x <= xmax (13)
ymin <= y <= ymax (14)
Aceste relaţii trebuie în principiu verificate pentru fiecare punct al segmentului, ceea ce
evident, este imposibil. Algoritmul de clipping Cohen-Sutherland porneşte de la determinarea
poziţiei relative a segmentului faţă de fereastră. Există 4 posibilităţi:
1. ambele capete ale segmentului sunt în interiorul ferestrei
2. un capat al segmentului este în interior iar celelalt în exterior
3. ambele capete ale segmentului sunt exterioare ferestrei, dar segmentul intersectează
fereastra
4. ambele capete sunt în exteriorul ferestrei dar segmentul nu intersectează fereastra
Planul utilizator este împărtit în 9 regiuni cărora li se asociază câte un cod unic, format
din 2 valori întregi (0 respectiv 1) conform Fig. 8:

Fig. 8 Planul utilizator

23
Unui punct oarecare P(x, y) i se asociază codul de regiune (b3, b2, b1, b0) al zonei în care
este plasat astfel:
se setează iniţial: b3=b2=b1=b0=0 şi apoi dacă:

x < xmin -> b3=1

x > xmax -> b2=1

y < ymin -> b1=1

y > ymax -> b0=1


Se determină cate un cod de regiune pentru cele două capete ale segmentului, punctele P1
respectiv P2. În continuare se face un test pentru a determina dacă segmentul nu este în totalitate
în afara ferestrei. Dacă nu, se vor translata capetele segmentului care sunt exterioare ferestrei
până la cea mai apropiată frontieră a ferestrei. În acest scop se va determina intersecţia
segmentului cu frontierele ferestrei după modelul următor:

Fig.9 Intersecţia segmentului cu frontierele ferestrei

Descrierea algoritmului este următoarea:


1. Determină codurile de regiune pentru punctele P1, P2

24
2. Cele două coduri sunt însumate logic (OR).
Dacă rezultatul este codul (0,0,0,0) segmentul este complet interior şi este acceptat. Altfel treci la
pasul 3.
3. Cele două coduri sunt înmulţite logic (AND). Dacă rezultatul este diferit de codul
(0,0,0,0) segmentul este complet în afara ferestrei şi este eliminat. Altfel treci la pasul 4.
4. Se alege codul unui capat al segmentului. Dacă acesta este codul (0,0,0,0) se alege
celalalt cod.
5. Se inspectează codul în ordinea b3, b2, b1, b0 pentru a determina primul element
b i = 1 care precizează frontiera ferestrei faţă de care punctul este exterior.
6. Se calculează intersecţia segmentului cu acea frontieră şi se înlocuieşte punctul cu
intersecţia determinată.
7. Se trece la pasul 1.

2.5 Transformări Grafice 2D

Transformarea unei figuri geometrice implică transformarea fiecărui punct din care este
alcatuită. Ca urmare transformarea figurii va induce în ultima instanţă, transformări la nivelul
pixelilor care compun realizarea grafică a figurii geometrice. Transformările vor fi realizate în
coordonate utilizator iar efectele induse asupra pixelilor imaginii grafice vor fi realizate prin
transformarea de vedere (fereastra -> port de vedere).
 Forma generală a unei transformări punctuale bidimensionale este [2], [46]:
x’=f1(x, y) (15)
y’=f2(x, y) (16)
f1, f2 – funcţii necesar liniare, sau în forma matricială
X’=F(X), (17)

  (18)
Transformările pot fi:
 active – în acest caz X si X’ reprezintă puncte diferite în acelaşi sistem de coordonate al
utilizatorului
 pasive – în acest caz X si X’ reprezintă acelaşi punct în plan dar în sisteme de
coordonate diferite.

25
În continuare, vom presupune că transformările sunt active. În lucrările anterioare s-a
prezentat modul în care fiecare element geometric de bază care este format dintr-un număr infinit
de puncte, poate fi definit cu ajutorul unui set finit de puncte. Un element geometric va fi
transformat prin aplicarea funcţiilor de transformare f1, f2 asupra tuturor punctelor din care este
constituit, adică de un număr infinit de ori, ceea ce este practic imposibil. Ca urmare se vor
aplica funcţiile f1 si f2 asupra punctelor multimii finite care defineşte elementul grafic, iar noul
set de puncte obţtinute în urma transformării se vor utiliza pentru generarea elementului
transformat. Imaginea obţinută poate să nu fie identică cu imaginea reală a elementului
transformat. Un element geometric este invariat sub un grup de transformări dacă mulţimea de
puncte obţinute prin aplicarea oricărei transformări asupra tuturor punctelor elementului
geometric este aceeaşi cu cea generată după aplicarea transformării asupra setului de puncte care
definesc elementul geometric. 
În forma matricială avem:
X’=A*X+B (19)
sau
x’ = a11*x + a12*y + b1 (20)
y’ = a21*x + a22*y + b2 (21)

  (22)
Vom considera în continuare următoarele transformări grafice elementare:
a. translaţia
b. rotaţia
c. scalarea
Un punct din plan P(x, y) poate fi reprezentat ca un vector coloană:
H = (H1, H2, S)t (23)
H1, H2, S se numesc coordonatele omogene ale punctului P. Coordonatele carteziene (x,
y) ale punctului se obţin din coordonatele omogene astfel:
x = H1 / S (24)
y = H2 / S (25)
De obicei S = 1, deci x = H 1, y=H2. Punctele de pe cercul de la infinit vor avea în
coordonate omogene S = 0.

26
Utilizând coordonatele omogene este posibilă tratarea unitară a transformărilor
elementare, reprezentate ca matrici de 3x3. În acest caz, transformările vor avea forma:
H’ = C * H (26)
H’ = (x’ y’ 1)t (27)
H = (x y 1)t (28)

(29)
unde A, B sunt matricile din (22).
1. Translaţia transformă punctul P(x, y) în punctul P’(x’, y’) după modelul:
x’ = x + tx (30)
y’ = y + ty (31)
tx, ty – deplasarile pe directiile x si y
Matricea transformării este:

(32)
2. Rotaţia în jurul originii transformă punctul P(x, y) în punctul P(x’, y’) rotind vectorul
de poziţie al punctului P, OP, în jurul originii cu un unghi t, în sens trigonometric:
x’ = x*cos(t) - y*sin(t) (33)
y’ = x*sin(t) + y*cos(t) (34)
Matricea transformării este:

(35)
3. Scalarea transformă punctul P(x, y) în punctul P(x’, y’) după relaţiile:
x’ = x*sx (36)
y’ = y*sy (37)
sx, sy - factori de scară în direcţiile OX si OY

(38)

27
Transformările succesive ale acestui punct pot fi compuse prin înmulţirea succesivă la
stânga a matricilor care definesc transformările individuale. Se obţine o matrice rezultat care se
aplică punctului iniţial. Ordinea în care se aplică transformările nu este arbitrară, lucru ce reiese
în mod evident din necomutativitatea produsului matricial.

28
Dau în continuare câteva exemple utilizând VB şi AutoCad pentru a demonstra că este posibil să
fac unele completări la piesă folosind transformările.
 Să se mute din P1(Point1) în P2(Point2) obiectul din imagine (Fig. 10).

Fig. 10 Mutarea de obiecte

Public Sub Mutare obiect()


Dim Point1 As Variant
Dim Point2 As Variant
Dim objSelectionSet As AcadSelectionSet
Dim objDrawingObject As AcadEntity
'inchide selectia daca obiectul nu exista
On Error Resume Next
ThisDrawing.SelectionSets("TempSSet").Delete
Set objSelectionSet = ThisDrawing.SelectionSets.Add("TempSSet")
‘Selecteaza obiectul
objSelectionSet.SelectOnScreen
varPoint1 = ThisDrawing.Utility.GetPoint(, vbCrLf & "baza de deplasare: ")
varPoint2 = ThisDrawing.Utility.GetPoint(Point1, vbCrLf & "punctul unde se muta: ")
‘Se muta obiectul
For Each objDrawingObject In objSelectionSet
objDrawingObject.Move Point1, Point2
objDrawingObject.Update
Next
objSelectionSet.Delete
End Sub

 Oglindeşte obiectul fată de o dreapta dată ce conţine un dreptunghi, o elipsă


şi un text “This is a text object” (Fig 11).

29
Fig. 11 Oglindirea unor obiecte faţă de o axă

Public Sub Oglindire()


Dim objSelectionSet As AcadSelectionSet
Dim objDrawingObject As AcadEntity
Dim objMirroredObject As AcadEntity
Dim Point1 As Variant
Dim Point2 As Variant

ThisDrawing.SetVariable "MIRRTEXT", 0

‘Inchide selectarea daca obiectele nu exista


On Error Resume Next
ThisDrawing.SelectionSets("TempSSet").Delete
Set objSelectionSet = ThisDrawing.SelectionSets.Add("TempSSet")

‘Selecteaza obiectele de pe ecran


ThisDrawing.Utility.Prompt "Pick objects to be mirrored." & vbCrLf
objSelectionSet.SelectOnScreen
Point1 = ThisDrawing.Utility.GetPoint(,"Selecteaza un punct de pe axa")
varPoint2 = ThisDrawing.Utility.GetPoint(Point1, "Selecteaza al doilea punct de pe axa")
For Each objDrawingObject In objSelectionSet
Set objMirroredObject = objDrawingObject.Mirror(Point1, Point2)
objMirroredObject.Update
Next
objSelectionSet.Delete
End Sub

30
 Roteşte elipsa conform imaginii (Fig. 12):

Fig. 12 Metoda de rotire a unui obiect

Public Sub Rotire()


Dim objDrawingObject As AcadEntity
Dim EntityPickedPoint As Variant
Dim BasePoint As Variant
Dim RotationAngle As Double
On Error Resume Next
ThisDrawing.Utility.GetEntity objDrawingObject, EntityPickedPoint, "Selecteaza elipsa pentru rotatie "
If objDrawingObject Is Nothing Then
MsgBox "Nu exista obiecte."
Exit Sub
End If
BasePoint = ThisDrawing.Utility.GetPoint(, "Introdu punctual de rotatie: ")
RotationAngle = ThisDrawing.Utility.GetReal( "Introdu unghiul de rotatie: ")
"Convertit in radiani
RotationAngle = ThisDrawing.Utility.AngleToReal(CStr(dblRotationAngle), acDegrees)
'Rotirea obiectului
objDrawingObject.Rotate BasePoint, RotationAngle
objDrawingObject.Update
End Sub

31
 Implementarea metodei de scalare (Fig. 13)

Fig. 13 Metoda de scalare


Public Sub Scalare()
Dim objDrawingObject As AcadEntity
Dim varEntityPickedPoint As Variant
Dim BasePoint As Variant
Dim ScaleFactor As Double
On Error Resume Next
ThisDrawing.Utility.GetEntity objDrawingObject, EntityPickedPoint, "Selectare obiect pentru scalare: "
If objDrawingObject Is Nothing Then
MsgBox "nu exista niciun obiect"
Exit Sub
End If
BasePoint = ThisDrawing.Utility.GetPoint(, "baza punctului pentru scalare:")
dblScaleFactor = ThisDrawing.Utility.GetReal("factorul de scala: ")
‘Scalare obiect
objDrawingObject.ScaleEntity BasePoint, ScaleFactor
objDrawingObject.Update
End Sub

32
2.6 Curbe de aproximare şi interpolare: Curbe Bezier

2.6.1 Puncte de control


Ecuaţiile analitice ale curbelor care descriu formele diverselor obiecte reale sunt de cele
mai multe ori deosebit de complicate [2], [22]. În această situatie este însă suficient să cunoaştem
un set de puncte ale curbei respective şi să încercăm să conectăm aceste puncte printr-o curbă a
cărei ecuaţie analitică este în general simplă. Aceste puncte le vom numi în continuare puncte de
control.
În grafica pe calculator, ceea ce prezintă interes în primul rând este aspectul vizual al
curbei reprezentate şi mai puţin proprietăţile sale matematice. Pronind de la un set de puncte de
control, construcţia unei curbe controlate de acestea poate fi realizată utilizând metode de
interpolare sau de aproximare. În primul caz, curba obţinută va trece prin punctele de control. În
cel de-al doilea caz, curba nu va mai trece în mod necesar prin punctele de control ci prin
vecinatatea acestora:

(a) (b)
Fig. 14 Curba obţinută trece prin punctele de control (a) , nu trece prin punctele de control (b)

2.6.2. Curbe Bezier


O curbă Bezier plană este o curba netedă care este definită prin n puncte specificate prin
coordonatele carteziene Xi, Yi. În forma parametrică, este dată de ecuaţiile:

(39)

(40)
Funcţiile Bk,m sunt funcţii polinomiale Bernstein:

33
(41)
Se observă că x(0) = x1, x(1) = xn, y(0) = y1, y(1) = yn, deci curba porneşte de la primul
punct de control şi sfârşeşte la ultimul.
Curba Bezier nu trece în mod necesar prin alt punct de control dar are proprietatea de a se
menţine tot timpul în interiorul poligonului convex definit de aceste puncte. Utilizând o secvenţă
de curbe Bezier de grad 3 se obţine o curbă de aproximare formată din porţiuni având
proprietatea de a trece prin punctele Pi si Pi+3 ale setului de puncte din control panta tangentei la
curbă în punctul Pi+3, ceea ce permite construcţia unei curbe ce trece printr-un set de puncte
având forma controlată de punctele intermediare:

Fig. 15 Curba ce trece printr-un set de puncte având forma controlată de punctele intermediare

Prin alegerea punctelor P2, P3, P4 coliniare se va obţine aspectul neted al curbei în P3.

Fig. 16 Aspectul neted al curbei în P3

Utilizând forma parametrică cu 0 <= t <=1 pentru fiecare curbă componenta C i


determinată de punctele [Pi, Pi+1, Pi+2, Pi+3], vom avea:

(4 2)

34
Atunci când parametrul t parcurge intervalul [0,1], formula de mai sus furnizează punctele curbei
dintre punctul corespunzator punctului de control Pi si cel corespunzător lui Pi+1. Curba finală se
obţine prin trasarea segmentelor de curbă pentru valorile i=1, i=4, …, i=3*(j-1)+1.
2.7 Curbe de aproximare şi interpolare: Curbe B-Spline cubice

2.7.1 Curbe B-Spline cubice


În grafica pe calculator curbele trebuie să îndeplinească o serie de condiţii. Este de dorit
ca acestea să aibe un aspect regulat, neted, fară discontinuităţi, oscilaţii sau bucle între punctele
de control. Totodată, influenţa punctelor asupra aspectului general al curbei trebuie să fie limitată
în sensul că modificarea poziţiei unui punct de control trebuie să aibă un efect local, schimbând
aspectul curbei numai într-o vecinătate restrânsă a punctului respectiv. Această proprietate a
curbei poartă denumirea de control local şi permite proiectarea interactivă a formelor obiectelor
prin încercări repetate.
Totodată, este de dorit ca ecuaţiile analitice ale curbelor să fie cât mai simple. În general
se utilizează curbe descrise prin funcţii polinomiale de grad redus (2 sau 3). O astfel de curbă nu
va putea acoperi întregul set de puncte de control. Soluţia constă în separarea setului de puncte
de control în subgrupe de puncte şi construirea unor curbe de grad redus pentru fiecare subgrupă.
Curba cautată va rezulta din asamblarea acestor curbe elementare (porţiuni de curba) şi deci ea
nu va fi descrisă de o ecuaţtie unică pe întregul domeniu de definiţie. Aspectul neted al curbei
rezultate va fi obţinut prin impunerea condiţiilor de continuitate şi derivabilitate funcţiei asociate,
în punctele de joncţiune a două porţiuni de curbă.
Construind în acest mod curbe de interpolare, utilizând curbe descrise de funcţii
polinomiale de grad 3 se obţine curba spline cubică naturală.
Dezavantajul acesteia este controlul global pe care îl exercită fiecare punct de control
asupra curbei.
Determinarea acestei curbe având n+1 puncte de control necesită rezolvarea unui sistem
liniar de 4*n ecuaţii cu 4*n necunoscute.
Acest sistem furnizează coeficienţii funcţiilor polinomiale de grad 3 asociate celor n
porţiuni de curba care definesc curba de interpolare.
O altă metodă pentru construcţia unei curbe de interpolare spline cubică utilizează un set
de curbe SPLINE DE BAZĂ. Curba de interpolare se obţine ca o combinaţie liniară (suma
ponderată) a acestora.
35
Şi în acest caz se obţine o curbă de interpolare asupra căreia fiecare punct de control
exercită o influentă globală.
Asigurarea controlului local asupra unei curbe spline cubice de interpolare nu poate fi
obţinută decât renunţând la unele condiţii asupra curbei.
Renuntând la cerinţa ca curba să treacă prin punctele de control conduce la obţinerea unor
curbe de aproximare numite CURBE B-SPLINE CUBICE (Fig. 4.19). Renunţând la cerinţa de
derivabilitate de ordin II a curbei, se va obţine o curbă de interpolare de tip Romm-Catmull
(Fig.17).
Curbele B-Spline cubice sunt formate prin combinaţii liniare ale unor curbe spline numite
B-Spline sau baze.
Curba B-Spline cubică este în general şi ea o curbă spline.
Pentru reprezentarea acestui tip de curba se utilizează o forma parametrică.
Fiind date n+1 puncte de control, P0, …,Pn, vom diviza intervalul [0,n] al parametrului u în n
subintervale [ui, ui+1], cu 0 <= t <= 1 şi t(0)=ui si t(1)=ui+1.

Fig. 17 Curbe B-spline cubice

36
Fig. 18 Curbă de interpolare de tip Romm-Catmull

(43)

pentru curbele B-
Spline cubice, respective pentru curbele Romm-Catmull.

(44)

Un punct al curbei
va avea coordonatele [cx(t), cy(t)], obţinute aplicând formula de mai sus şi înlocuind vectorul P cu
coordonatele x respectiv y ale punctelor de control.

2.7.2 Proprietatile curbei B-Spline cubice


 curba nu este o curbă de interpolare ci una de aproximare;
 specificând un punct de control de două ori, curba este atrasă mai aproape de acel
punct;
 specificând un punct de control de trei ori, curba trece prin acel punct.

37
 Iată o implementare în VB (Fig. 19).

Fig. 19 Obiectul Spline

Public Sub Spline()

Dim objEnt As AcadSpline


Dim dblBegin(0 To 2) As Double
Dim dblEnd(0 To 2) As Double
Dim dblPoints(14) As Double
dblBegin(0) = 1.5: dblBegin(1) = 0#: dblBegin(2) = 0
dblEnd(0) = 1.5: dblEnd(1) = 0#: dblEnd(2) = 0
dblPoints(0) = 0: dblPoints(1) = 0: dblPoints(2) = 0
dblPoints(3) = 3: dblPoints(4) = 5: dblPoints(5) = 0
dblPoints(6) = 5: dblPoints(7) = 0: dblPoints(8) = 0
dblPoints(9) = 7: dblPoints(10) = -5: dblPoints(11) = 0
dblPoints(12) = 10: dblPoints(13) = 0: dblPoints(14) = 0
" desenare
If ThisDrawing.ActiveSpace = acModelSpace Then
Set objEnt = ThisDrawing.ModelSpace.AddSpline(dblPoints, dblBegin, dblEnd)
Else
Set objEnt = ThisDrawing.PaperSpace.AddSpline(dblPoints, dblBegin, dblEnd)
End If
objEnt.Update
End Sub

De asemenea am spus că atunci când lipseşte o cotă trebuie să o trecem pe desen. Pentru aceasta
am efectuat câteva programme care să rezolve problema.

38
 Program pentru generarea cotelor unghiulare utilizând 3 puncte:

Fig. 20 Cotă unghiulară utilizând 3 puncte

Public Sub CotaUnghilara()


Dim Centru As Variant
Dim Punct1 As Variant
Dim Punct2 As Variant
Dim PozitieText As Variant
Dim objUnghiular As AcadDim3PointAngular

‘ Date de intrare
Centru = ThisDrawing.Utility.GetPoint(,"Introduceti Centru: ")
Punct1 = ThisDrawing.Utility.GetPoint(varAngularVertex,"Selectati primul punct: ")
Punct2 = ThisDrawing.Utility.GetPoint(varAngularVertex, "Selectati al doilea punct: ")
PozitieText = ThisDrawing.Utility.GetPoint(varAngularVertex, "Indicati locul unde trebuie scris textul: ")
Set objDim3PointAngular = ThisDrawing.ModelSpace.AddDim3PointAngular( _
varAngularVertex, Punct1, Punct2, PozitieText)
objDim3PointAngular.Update
End Sub

 Program pentru generarea cotelor liniare (Fig. 21)

39
Fig. 21 Cotă liniară

Public Sub CotaLiniara()


Dim Point1 As Variant
Dim Point2 As Variant
Dim PozitieText As Variant
Dim objDimAligned As AcadDimAligned
'Definire cota
Point1 = ThisDrawing.Utility.GetPoint(, "Selectati primul punct: ")
Point2 = ThisDrawing.Utility.GetPoint(Point1,"Selectati al doilea punct: ")
PozitieText = ThisDrawing.Utility.GetPoint(,"Indicati locul unde trebuie scris textul: ")
'Desenare cota
Set objDimAligned = ThisDrawing.ModelSpace.AddDimAligned(Point1, Point2, PozitieText)
objDimAligned.Update
End Sub

40
 Dimensiunea unghiulară pentru un arc (Fig. 22)

Fig. 22 Cotă unghiulară pentru arc

Public Sub CotaArc()


Dim varAngularVertex As Variant
Dim Point1 As Variant
Dim Point2 As Variant
Dim PozitieText As Variant
Dim objDimAngular As AcadDimAngular
'Definire cota
varAngularVertex = ThisDrawing.Utility.GetPoint(, "Introduceti Centru: ")
Point1 = ThisDrawing.Utility.GetPoint(varAngularVertex, "Selectati Primul punct: ")
Point2 = ThisDrawing.Utility.GetPoint(varAngularVertex, "Selectati al doilea punct: ")
PozitieText = ThisDrawing.Utility.GetPoint(varAngularVertex," Indicati locul unde trebuie scris textul: ")
'Deseneaza cota unghiulara
Set objDimAngular = ThisDrawing.ModelSpace.AddDimAngular(varAngularVertex, Point1, Point2, PozitieText)
objDimAngular.AngleFormat = acGrads
objDimAngular.Update
'Formatul unghiului
objDimAngular.AngleFormat = acDegreeMinuteSeconds
objDimAngular.TextPrecision = acDimPrecisionFour
objDimAngular.Update
End Sub

41
 Cotarea cercurilor(Fig. 23)

Fig. 23 Cotarea cercurilor

Public Sub CotareCerc()


Dim Point1 As Variant
Dim Point2 As Variant
Dim LeaderLength As Double
Dim objDimDiametric As AcadDimDiametric
Dim Osmode As Integer
'setare snap
Osmode = ThisDrawing.GetVariable("osmode")
ThisDrawing.SetVariable "osmode", 512 ' Near
With ThisDrawing.Utility
Point1 = .GetPoint(, "Selectati primul punct: ")
ThisDrawing.SetVariable "osmode", 128 ' Per
Point2 = .GetPoint(Point1, "Selectati un punct opus primului: ")
LeaderLength = .GetDistance(Point1, "Introduceti lungimea leaderului spre primul punct: ")
End With
Set objDimDiametric = ThisDrawing.ModelSpace.AddDimDiametric(Point1, Point2, LeaderLength)
objDimDiametric.Update
'revenirea la setarea originala snap
ThisDrawing.SetVariable "osmode", Osmode
End Sub

42
 Cotarea razei unui arc de cerc sau cerc (Fig. 24)

Fig. 24 Cotarea razei unui arc sau cerc

Public Sub CotareRaza()


Dim objUserPickedEntity As Object
Dim EntityPickedPoint As Variant
Dim Point As Variant
Dim LeaderLength As Double
Dim DimRadial As AcadDimRadial
Dim Osmode As Integer
Osmode = ThisDrawing.GetVariable("osmode")
ThisDrawing.SetVariable "osmode", 512 ' Near
'Definire cota
On Error Resume Next
With ThisDrawing.Utility
.GetEntity objUserPickedEntity, EntityPickedPoint, "Selectati Arc sau Cerc:"
If objUserPickedEntity Is Nothing Then
MsgBox "Nu am selectat entitatea"
Exit Sub
End If
EdgePoint = .GetPoint(objUserPickedEntity.Center, "Selectati un punct")
dblLeaderLength = .GetReal("Introduceti lungimea leaderului spre primul punct ")
End With
'Deseneaza cota
Set objDimRadial = ThisDrawing.ModelSpace.AddDimRadial(objUserPickedEntity.Center, EdgePoint,
LeaderLength)
objDimRadial.Update
'revenirea la setarea originala snap
ThisDrawing.SetVariable "osmode", intOsmode
End Sub

43
 Pentru scrierea toleranţelor (Fig. 25)
Punct de inserţie

Aceasta este o toleranţă


Direcţie

Direcție
Fig. 25 Scrierea toleranţelor
Public Sub CrereToleranta()
Dim TolerantaText As String
Dim PunctInsertie As Variant
Dim DirectieText As Variant
Dim I As Integer
Dim objTolerance As AcadTolerance
TolerantaText = InputBox("Introduceti textul pentru toleranta")
PunctInsertie = ThisDrawing.Utility.GetPoint(,"Introduceti punctual pentru insertie")
DirectieText = ThisDrawing.Utility.GetPoint(PunctInsertie, "Dati directia")
For intI = 0 To 2
DirectieText(I) = DirectieText (I) - DirectieText (I)
Next
Set objTolerance = ThisDrawing.ModelSpace.AddTolerance(TolerantaText, punctInsertie, DirectieText)
End Sub

Codurile pentru generarea automată a toleranţelor


COD SIMBOL

{\Fgdt;a} pentru unghiuri (similar cu <)

{\Fgdt;b} perpendicularitate

{\Fgdt;c} planeitate

{\Fgdt;d} Forma dată a suprafeţei

{\Fgdt;e} Circularitate

{\Fgdt;f} Paralelism (//)

{\Fgdt;g} Cilindricitate (/O/)

{\Fgdt;h} Bătaia radială şi a bătăii frontale

{\Fgdt;i} Simetrie

{\Fgdt;j} Poziţia nominală

44
Codurile pentru generarea automată a toleranţelor
COD SIMBOL

{\Fgdt;k} Forma dată a profilului

{\Fgdt;n} diametru

{\Fgdt;r} Coaxialitate şi concentricitate

{\Fgdt;u} rectilinitate (-)

{\Fgdt;y} Toleranţa la înclinare

%%v Se utilizează ca separator tip linie verticală

 Pentru numerotarea suprafeţelor sau pentru alte adnotări ( Fig. 26)

S1

S2

Fig. 26 Folosirea leaderelor pentru numerotare şi adnotări

Public Sub CreareLeaderCuNota()


Dim Puncte(5) As Double
Dim PunctInceput As Variant
Dim PunctSfarsit As Variant
Dim LeaderType As Integer
Dim objAcadLeader As AcadLeader
Dim objAcadMtext As AcadMText
Dim Mtext As String
Dim I As Integer
LeaderType = acLineWithArrow
PunctInceput = ThisDrawing.Utility.GetPoint(, "Punctul inceput leader: ")
PunctSfarsit = ThisDrawing.Utility.GetPoint(PunctSfarsit, "PunctSfarsit leader: ")
For I = 0 To 2
Puncte(I) = PunctInceput(I)
Puncte(I + 3) = PunctSfarsit(I)
Next
Mtext = InputBox("Nota:", "Leader Nota")
If Mtext = "" Then Exit Sub
' Creare text pentru leader
Set objAcadMtext = ThisDrawing.ModelSpace.AddMText(PunctSfarsit, _
Len(Mtext) * ThisDrawing.GetVariable("dimscale"), Mtext)
' Aliniere text
If varEndPoint(0) > varStartPoint(0) Then

45
objAcadMtext.AttachmentPoint = acAttachmentPointMiddleLeft
Else
objAcadMtext.AttachmentPoint = acAttachmentPointMiddleRight
End If
objAcadMtext.InsertionPoint = PunctSfarsit
'Desenare Leader
Set objAcadLeader = ThisDrawing.ModelSpace.AddLeader(Puncte, objAcadMtext, LeaderType)
objAcadLeader.Update
End Sub

 Pentru scrierea rugozităţii (Fig. 27)

Fig. 27 Scrierea rugozităţii

' Declararea variabilelor globale


Dim ra() As McadSurfaceTexture

Private Sub cmdCreare_Click()


Dim acmApp As AcadmApplication
Set acmApp = ThisDrawing.Application.GetInterfaceObject("AcadmAuto.AcadmApplication")

Dim util As McadUtility


Set util = acmApp.ActiveDocument.Utility

frmSuprafata.hide

On Error Resume Next

Dim atasarePunct(0 To 2) As Double


Dim atasareSimb As IMcadGeometry
'selectarea obiectului caruia i se ataseaza simbolul de rugozitate
Dim alege As McadPick
Set alege = util.pick("Selecteaza locul unde vrei sa pui simbolul.", mcGeometry)
If Err = 0 Then
'pune simbolul
Set atasareSimb = util.GetObjectFromPick(pick)

'punctul de atasare
Dim alegePunct As GePoint
Set alegePt = pickPt.PickPoint
atasarePunct(0) = pickPt.X

46
atasarePunct (1) = pickPt.Y
atasarePunct (2) = pickPt.Z
Else
MsgBox "obiect neselectat.", vbExclamation, "Error"
End If

'punctul de start pentru desenarea leaderului


Dim startPunct As Variant
startPunct = ThisDrawing.Utility.GetPoint(, "punctul de start pentru desenarea leaderului: ")
If IsEmpty(startPunct) Then
RefreshUserForm
Exit Sub
End If
Dim leaderPuncte(0 To 5) As Double
leaderPuncte(0) = startPt(0)
leaderPuncte(1) = startPt(1)
leaderPuncte(2) = startPt(2)

'punctul de sfarsit pentru desenarea leaderului


Dim sfarsitPunct As Variant
sfarsitPunct = ThisDrawing.Utility.GetPoint(, "punctul de sfarsit pentru desenarea leaderului: ")
If IsEmpty(endPt) Then
RefreshUserForm
Exit Sub
End If
leaderPuncte (3) = sfarsitPunct (0)
leaderPuncte (4) = sfarsitPunct (1)
leaderPuncte (5) = sfarsitPunct (2)

'simbolul pentru suprafata


Dim suprafataSimb As McadSurfaceTexture
Set suprafataSimb = ThisDrawing.ModelSpace.AddCustomObject("AcmSurfaceTexture")

'specifica suprafetele si ajusteaza automat leaderul


suprafataSimb.Origin = atasarePunct

'aduce leaderul
suprafataSimb.AddLeader leaderPuncte

'il ataseaza obiectului selectat


If Not atasareSimb Is Nothing Then
suprafataSimb.AttachGeometry atasareSimb, atasarePunct
End If

suprafataSimb.LeaderArrowType = ArrowheadType

'seteaza tipul de suprafata


suprafataSimb.SurfaceTexture = Surftype

'seteaza simbolul conform tipului de suprafata


suprafataSimb.RaVal = txtRa.Text

'adapteaza
suprafataSimb.Update

47
'regenerare
ThisDrawing.Regen acAllViewports

'Lista cu toate simbolurile


Dim simbNr As Integer
simbNr = UBound(Ra)
ReDim Preserve Ra(simbNr + 1)
Set Ra(simbNr + 1) = suprafataSimb
lbSupraf.AddItem "Surface Texture" & simbNr + 1

RefreshUserForm

End Sub

Private Sub lbSupraf_click()


' apar toate valorile de proprietati ale simbolurilor
Dim listId As Integer
listId = lbSupraf.ListIndex
Dim selSimb As McadSurfaceTexture
Set selSimb = Ra(listId + 1)

'textbox cu proprietatile luate individual


txtRa.Value = selSym.RaValuare

End Sub

Private Sub RefreshUserForm()

txtRa.Text = ""

If frmSuprafTexture.Visible = False Then frmSuprafTexture.Show

End Sub

Private Sub UserForm_Initialize()

Dim simb As McadSymbolBBMgr


Set simb = ThisDrawing.Application.GetInterfaceObject("SymBBAuto.McadSymbolBBMgr")

Dim StandardM As McadStandardMgr


Set StandardM = simb.StandardMgr

Dim standard As McadStandard


Set standard = Stdmgr.CurrentStandard

Dim suprafStandard As McadSurfaceTextureStandard


Set suprafStandard = standard.SurfaceTextureStandard

'tipurile de sagati
With cbArrowhead
.AddItem "ByStandard"
.AddItem "ArrowBoxBlank"

48
.AddItem "ArrowBoxFilled"
.AddItem "ArrowClosed"
.AddItem "ArrowClosed15"
.AddItem "ArrowClosed30"
.AddItem "ArrowClosed60"
.AddItem "ArrowClosed90"
.AddItem "ArrowDatumBlank45"
.AddItem "ArrowDatumBlank60"
.AddItem "ArrowDatumFilled45"
.AddItem "ArrowDatumFilled60"
.AddItem "ArrowDatumThickLine"
.AddItem "ArrowDot"
.AddItem "ArrowDotBlank"
.AddItem "ArrowEmpty"
.AddItem "ArrowEmpty15"
.AddItem "ArrowEmpty30"
.AddItem "ArrowEmpty60"
.AddItem "ArrowEmpty90"
.AddItem "ArrowFilled"
.AddItem "ArrowFilled15"
.AddItem "ArrowFilled30"
.AddItem "ArrowFilled60"
.AddItem "ArrowFilled90"
.AddItem "ArrowOblique"
.AddItem "ArrowOpen"
.AddItem "ArrowOpen15"
.AddItem "ArrowOpen30"
.AddItem "ArrowOpen60"
.AddItem "ArrowOpen90"
.AddItem "ArrowOrigin"
End With

'tipuri de suprafete
With cbSurfaceType
.AddItem "Suprafata pe care se pune simbolul"
End With
cbSurfaceType.ListIndex = 0

End Sub

Private Function Surftype()


Select Case cbSurfaceType.Text
Case "Suprafata pe care se pune simbolul"
Surftype = sbBasic
End Select
End Function

Function SageataTip()

Select Case cbArrowhead.Text


Case "ByStandard"
SageataTip = sbByStandard
Case "ArrowBoxBlank"
SageataTip = sbArrowBoxBlank
Case "ArrowBoxFilled"

49
SageataTip = sbArrowBoxFilled
Case "ArrowClosed"
SageataTip = sbArrowClosed
Case "ArrowClosed15"
SageataTip = sbArrowClosed15
Case "ArrowClosed30"
SageataTip = sbArrowClosed30
Case "ArrowClosed60"
SageataTip = sbArrowClosed60
Case "ArrowClosed90"
SageataTip = sbArrowClosed90
Case "ArrowDatumBlank45"
SageataTip = sbArrowDatumBlank45
Case "ArrowDatumBlank60"
SageataTip = sbArrowDatumBlank60
Case "ArrowDatumFilled45"
SageataTip = sbArrowDatumFilled45
Case "ArrowDatumFilled60"
SageataTip = sbArrowDatumFilled60
Case "ArrowDatumThickLine"
SageataTip = sbArrowDatumThickLine
Case "ArrowDot"
SageataTip = sbArrowDot
Case "ArrowDotBlank"
SageataTip = sbArrowDotBlank
Case "ArrowEmpty"
SageataTip = sbArrowEmpty
Case "ArrowEmpty15"
SageataTip = sbArrowEmpty15
Case "ArrowEmpty30"
SageataTip = sbArrowEmpty30
Case "ArrowEmpty60"
SageataTip = sbArrowEmpty60
Case "ArrowEmpty90"
SageataTip = sbArrowEmpty90
Case "ArrowFilled"
SageataTip = sbArrowFilled
Case "ArrowFilled15"
SageataTip = sbArrowFilled15
Case "ArrowFilled30"
SageataTip = sbArrowFilled30
Case "ArrowFilled60"
SageataTip = sbArrowFilled60
Case "ArrowFilled90"
SageataTip = sbArrowFilled90
Case "ArrowOblique"
SageataTip = sbArrowOblique
Case "ArrowOpen"
SageataTip = sbArrowOpen
Case "ArrowOpen15"
SageataTip = sbArrowOpen15
Case "ArrowOpen30"
SageataTip = sbArrowOpen30
Case "ArrowOpen60"
SageataTip = sbArrowOpen60
Case "ArrowOpen90"

50
SageataTip = sbArrowOpen90
Case "ArrowOrigin"
SageataTip = sbArrowOrigin
End Select

End Function

Acum am completat desenul cu tot ce trebuie. Se pune problema de extragere a informaţiilor


de pe desen în vederea prelucrării lor.
Am o cotă liniară. Pot să creez un algoritm de citire automată a informaţiilor de pe o cotă liniară
(coordonatele punctelor de capăt, distanţa dintre puncte (cota nominală) şi abaterile cotei), şi
aceste informaţii să le salvez într-un fişier .xls sau .mdb sau .txt şi să le pot folosi pentru anumite
calcule?
2.8 Tehnici de extragere a informaţiilor de pe desen
a) cazul când se completează desenul cu cota liniară liberă (fară abateri)
De exemplu avem desenul fără cota care interesează (fig. 28 )

Fig. 28 Desenul fară cota care interesează

Pentru proiectarea algoritmului notăm cu P1 şi P2 punctele de capăt ale liniei de cotă şi cu L


lungimea cotei(fig. 29 )

P1(10,10) P2(30,10)
L

Fig 29 Modelarea desenului

Algoritmul în pseudocod:

Se selectează P1 şi se reţin coordonatele (x1,y1)


Se selectează P2 şi se reţin coordonatele (x2,y2)
Se calculează distanţa dintre ele (L) adică tocmai cota nominală
Se citesc abaterile din fişierul numit abateri (conform STAS corespunzător cotelor libere)

51
Salvează datele într-un fişier

STAS
Abateri limita

Desenul în Program
mediul
grafic
.mb .txt
.xls
l

Fig. 30 Schema de preluare a datelor

Implementare:

Public Sub TrasareCotaLiniara()


Dim P1 As Variant
Dim P2 As Variant
Dim objCotaLiniara As AcadDimAligned
'definire cota
P1 = ThisDrawing.Utility.GetPoint(, "Selecteaza P1: ")
X1=P1(0)
Y1=P1(1)
P2 = ThisDrawing.Utility.GetPoint(P1,"Selecteaza P2: ")
X2=P2(0)
Y2=P2(1)
'Calculeaza distanta
L= sqrt(sqr(X1-X2) + sqr(Y1-Y2))
LocCota = ThisDrawing.Utility.GetPoint(,"Selecteaza locul unde se pune cota: ")

'Deseneaza linia de cota


Set objCotaLiniara = ThisDrawing.ModelSpace.AddDimAligned(P1, P2, LocCota)
objCotaLiniara.Update

End Sub

Etragerea informaţiilor citite de pe desen într-un fişier .xls

Următorul program ilustrează dacă Excelul de pe sistemul de calcul rulează sau nu:

Public Sub RuleazaDaNuExcel(App As Excel.Application, Visible As Boolean)


'trateaza erorile inline
On Error Resume Next
Set App = GetObject(, "Excel.Application") 'verifica daca aplicatia ruleaza
If Err Then
'nu, aplicatia nu ruleaza

52
Err.Clear
Set App = CreateObject("Excel.Application") 'verifica daca aplicatia a fost startata
If Err Then
'nu, aplicatia nu poate fi startata - exit
Exit Sub
End If
End If
'seteaza vizibilitatea aplicatiei
App.Visible = Visible
End Sub

Dacă versiunea de Excel este instalată aplicaţia se startează.

O altă variant de startare a Excelului:

Public Sub Start()


Dim oExcel As Excel.Application
'se asteapta incarcarea Excelului
StartExcel oExcel, True
If Not oExcel Is Nothing Then
MsgBox "Excelul s-a incarcat cu succes"
Else
MsgBox "Nu exista Excelul pe sistem ...", vbCritical
Exit Sub
End If
End Sub

În exemplele de mai sus putem face modificări în cod în functie de varianta de Excel existent.

De exemplu în loc de Excel.Application se pune Excel.Application.X, unde X este indexul de


versiune.

Microsoft versiuni:

Produsul Versiunea Exemple

Office 95 7 Excel.Application.7

Office 97 8 Excel.Application.8

Office 2000 9 Excel.Application.9

Office XP 10 Excel.Application.10

53
Microsoft versiuni:

Produsul Versiunea Exemple

Office 2003 11 Excel.Application.11

Crearea unui workbook:

Creem un workbook, prin declararea variabilei obiect Excel.Workbook ca tip de date. Utilizăm
metoda Add pentru aplicaţia Excel (obiect), pentru a adduce un workbook:
Dim Workbook As Excel.Workbook
Set Workbook = App.Workbooks.Add

Crearea unui Worksheet:


Creem un worksheet, prin declararea variabilei obiect Excel.WorkSheet ca tip de date. Utilizăm
metoda Add pentru crearea unei colecţii WorkSheets:
Dim WorkSheet As Excel.WorkSheet
Set WorkSheet = App.Worksheets.Add

Accesul la un Worksheet
Dim WorkSheet As Excel.WorkSheet
Set WorkSheet = App.Worksheets(1)

Scrierea celulelor
With WorkSheet
.Cells(1, 1).Value = "P 1": .Cells(1, 3).Value = "P 2": .Cells(1, 5).Value = "L"
.Cells(2, 1).Value = X1: .Cells(2, 2).Value = Y1
.Cells(2, 3).Value = X2: .Cells(2, 4).Value = Y2: Cells(2, 5).Value = L
End With

Citirea celulelor
With WorkSheet
MsgBox .Cells(1, 1).Value & ", " & .Cells(1, 3).Value & ", " & .Cells(1, 5).Value
MsgBox .Cells(2, 1).Value & ", " & .Cells(2, 2).Value & ", " & .Cells(2, 3).Value
MsgBox .Cells(2, 4).Value & ", " & .Cells(2, 5).Value
End With

Salvarea datelor într-un fişier extern.


Se utilizează metoda Close pentru obiectul Workbook sau WorkSheet. Această metodă
determină salvarea sau nu a fişierului după cum starea sa este True sau False:
Workbook.Close True, "D:\coteLiniare.xls"

54
Sau
WorkSheet.Close True, "D:\coteLiniare.xls"
Pentru părăsirea aplicaţiei Excel:
App.Quit

Rezultatele în urma rulării programului: desenul din mediul graphic cu cota L scrisă în clar
(fig. 30), şi tabelul ataşat (fig. 31 ).

30
Fig. 31 Desenul rezultat în urma rulării

Fig. 32 Rezultate în urma rulării programului


b) cazul când se completează desenul cu cota unghiulară liberă(fară abateri)
De exemplu avem desenul fără cota unghiulară care interesează (fig. 33)

Fig. 33 Desenul fară cota care interesează


Pentru proiectarea algoritmului notăm cu P1 şi P2 punctele de capăt ale cotei unghiulare
(fig. 34)

a0

55

P2
P0
P1

Fig. 34 Modelarea desenului

Algoritmul în pseudocod:

Se selectează P0
Se selectează P1
Se selectează P2
Se calculează unghiul
Se citesc abaterile din fişierul numit abateri (conform STAS corespunzător cotelor unghiulare)
Salvează datele într-un fişier

Schema de preluare a datelor


Implementare:
Public Sub CotaUnghilara()
Dim Centru As Variant
Dim Punctul1 As Variant
Dim Punctul2 As Variant
Dim PozitieText As Variant
Dim objUnghiular As AcadDim3PointAngular

‘ Date de intrare
Centru = ThisDrawing.Utility.GetPoint(, "Centru: ")
Punctul1 = ThisDrawing.Utility.GetPoint(AngularVertex,"Primul Punct: ")
Punctul2 = ThisDrawing.Utility.GetPoint(AngularVertex,"Al doilea punct: ")
PozitieText = ThisDrawing.Utility.GetPoint(AngularVertex, "Indica locul textului: ")
Set objDim3PointAngular = ThisDrawing.ModelSpace.AddDim3PointAngular( _
AngularVertex, Punctul1, Punctul2, PozitieText)
objDim3PointAngular.Update
End Sub
900

Fig.35 Desenul rezultat în urma rulării

56
Fig. 36 Rezultatele în urma rulării programului

57
cazul când se completează desenul cu cota liniară dar cu abateri

Fig. 37 Desenul fară cota care interesează

P1 P2

Fig. 38 Modelarea desenului

Algoritmul în pseudocod:

Se selectează P1
Se selectează P2
Citeşte de la tastatură abaterile şi reţinele în AInf şi ASup
Desenează linia de cotă şi pune în poziţia selectată cota cu abaterile dispuse simetric
Salvează datele într-un fişier

Citeşte
Abaterile

Desenul în Program .xls


mediul
grafic
.mb
l

.txt

Fig. 39 Schema de preluare a datelor

Implementare
Public Sub CotaL()
Dim P1 As Variant
Dim P2 As Variant

58
Dim locText As Variant
Dim StilText As AcadTextStyle
Dim objcotaL As AcadDimAligned
Dim CurrentDisplay As String
'definire dimensiuni
P1 = ThisDrawing.Utility.GetPoint(, "Selecteaza P1: ")
P2 = ThisDrawing.Utility.GetPoint(P1, "Selecteaza P2: ")
locText = ThisDrawing.Utility.GetPoint(, "Alege locul pentru text: ")
'Creare cote
Set objcotaL = ThisDrawing.ModelSpace.AddDimAligned(P1, P2, locText)
objcotaL.Update
CurrentDisplay = "Symmetrical"

objcotaL.ToleranceDisplay = acTolSymmetrical

ThisDrawing.Regen acAllViewports

objcotaL.Update
End Sub

Rezultatele în urma rulării programului: desenul din mediul graphic cu cota L scrisă în clar
împreună cu abaterile(fig 40), şi tabelul ataşat (fig. 41)

Fig. 40 Desenul rezultat în urma rulării

Fig. 41 Rezultatele în urma rulării programului

59
c) cazul când se completează desenul cu cota unghiulară cu abateri
De exemplu avem desenul fără cota unghiulară care interesează(fig. 42)

Fig. 42 Desenul fară cota care interesează


Pentru proiectarea algoritmului notăm cu P1 şi P2 punctele de capăt ale cotei unghiulare (fig.42 )

90’

P1

P2
P0
Fig. 43 Modelarea desenului

Algoritmul în pseudocod:

Se selectează P0
Se selectează P1
Se selectează P2
Citeşte de la tastatură abaterile şi reţinele în AInf şi ASup
Desenează linia de cotă şi pune în poziţia selectată cota cu abaterile dispuse simetric
Salvează datele într-un fişier

Citeşte
Abaterile

Desenul în Program
.xls
mediul
grafic
.mb
l

.txt
Fig. 44 Schema bloc
Implementare:
Public Sub CotaUnghilara()

60
Dim Centru As Variant
Dim Punct1 As Variant
Dim Punct2 As Variant
Dim PozitieText As Variant
Dim objUnghiular As AcadDim3PointAngular

‘ Date de intrare
Centru = ThisDrawing.Utility.GetPoint(, "Centrul: ")
Punct1 = ThisDrawing.Utility.GetPoint(varAngularVertex, "P1: ")
Punct2 = ThisDrawing.Utility.GetPoint(varAngularVertex, "P2: ")
PozitieText = ThisDrawing.Utility.GetPoint(varAngularVertex, "Pozitie text: ")
AInf=dimObj.ToleranceLowerLimit
ASup=dimObj.ToleranceUpperLimit
Set objDim3PointAngular = ThisDrawing.ModelSpace.AddDim3PointAngular( _
varAngularVertex, Punct1, Punct2, PozitieText)
' Pune abaterile
dimObj.ToleranceDisplay = acTolSymmetrical
ThisDrawing.Regen acAllViewports
objDim3PointAngular.Update
End Sub
90 ’

Fig. 45 Desenul rezultat în urma rulării

Fig. 46 Rezultatele în urma rulării programului


e)cazul când pe desen există cota liniară cu sau fără abateri (Fig. 47)

61
Fig. 47 Desenul la început

P1 P2

Fig.48 Modelarea desenului


Algoritmul în pseudocod:

Se selectează P1
Se selectează P2
Dacă cotă liberă atunci
Citeşte abaterile din fişierul tolerante.txt şi reţinele
Altfel
Citeştele de pe desen şi reţinele
Salvează datele într-un fişier

Tolerante.txt

Desenul în Program
.xls
mediul
grafic
.mb
l

.txt

Fig. 49 Schema de preluare a datelor

Implementare
Public Sub CotaAbateri()
Dim P1 As Variant
Dim P2 As Variant
Dim locText As Variant
Dim StilText As AcadTextStyle
Dim objCotaL As AcadDimAligned
Dim CurrentDisplay As String
'Definire cota
P1 = ThisDrawing.Utility.GetPoint(, "P1: ")
P2 = ThisDrawing.Utility.GetPoint(P1, "P2: ")
locText = ThisDrawing.Utility.GetPoint(,"alege locul pentru text: ")

62
If dimObj.ToleranceLowerLimit<>0 and dimObj.ToleranceUpperLimit <>0 then
CurrentDisplay = "Symmetrical"
AInf=dimObj.ToleranceLowerLimit
ASup=dimObj.ToleranceUpperLimit
L= dimObj.Measurement
Else
CitesteFisTol
End if
ThisDrawing.Regen acAllViewports
objCotaL.Update
End Sub
Rezultatele în urma rulării programului: desenul din mediul grafic cu cota L scrisă în clar
împreună cu abaterile (fig. 49 ), şi tabelul ataşat (fig. 50)

Fig. 50 Desenul rezultat în urma rulării

Fig. 51 Rezultatele în urma rulării programului


f) cazul când pe desen există cota unghiulară cu sau fără abateri

De exemplu avem desenul cu cota unghiulară care interesează (fig. 52)

90’

Fig. 52 Desenul cu cota care interesează

63
Pentru proiectarea algoritmului notăm cu P1 şi P2 punctele de capăt ale cotei unghiulare
(fig. 53)
90’

P1

P2
P0
Fig. 53 Modelarea desenului

Algoritmul în pseudocod:

Se selectează P0
Se selectează P1
Se selectează P2
Dacă cotă unghiulară liberă atunci
Citeşte abaterile din fişierul tolerante.txt şi reţine-le
Altfel
Citeşte-le de pe desen şi reţine-le
Salvează datele într-un fişier
Tolerante.txt

Desenul în Program .xls


mediul
grafic
.mb
l

.txt
Fig. 54 Schema de preluare a datelor
Implementare:
Public Sub CotaUnghilara()
Dim Centru As Variant
Dim Punct1 As Variant
Dim Punct2 As Variant
Dim PozitieText As Variant
Dim objUnghiular As AcadDim3PointAngular
‘ Date de intrare
Centru = ThisDrawing.Utility.GetPoint(,"Centrul: ")
Punct1 = ThisDrawing.Utility.GetPoint(varAngularVertex, "P1: ")
Punct2 = ThisDrawing.Utility.GetPoint(varAngularVertex, "P2: ")
Pozitietext = ThisDrawing.Utility.GetPoint(varAngularVertex, "Alege loc text: ")
If dimObj.ToleranceLowerLimit<>0 and dimObj.ToleranceUpperLimit <>0 then

64
CurrentDisplay = "Symmetrical"
AInf=dimObj.ToleranceLowerLimit
ASup=dimObj.ToleranceUpperLimit
Unghiul= dimObj.Measurement
Else
CitesteFisTol
End if
Set objDim3PointAngular = ThisDrawing.ModelSpace.AddDim3PointAngular( _
varAngularVertex, Punct1, Punct2, PozitieText)
' Pune abaterile
dimObj.ToleranceDisplay = acTolSymmetrical
ThisDrawing.Regen acAllViewports
objDim3PointAngular.Update
End Sub

90’

Fig. 55 Desenul rezultat în urma rulării

Fig. 56 Rezultatele în urma rulării programului


g) cazul când trebuie să completăm desenul cu cotarea unui cerc (fig. 57)

Fig. 57 Desenul fară cota care interesează

65
Ф8

P1
P2

Fig. 58 Modelarea desenului

Algoritmul în pseudocod

Se selectează P1
Se selectează P2
Se selectează zona unde se pune leaderul pentru cota ( înspre P1)
Desenează cota şi pune valuarea
Reţine diametrul
Citeşte abaterile dintr-un fişier pentru cota liberă
Salvează datele într-un fişier extern

Schema de preluare a datelor


Implementare
Public Sub CotareCerc()
Dim P1 As Variant
Dim P2 As Variant
Dim dblLeader As Double
Dim objDimDiametru As AcadDimDiametric
Dim intOsmode As Integer
'seteaza modul snap
intOsmode = ThisDrawing.GetVariable("osmode")
ThisDrawing.SetVariable "osmode", 512 ' Near

With ThisDrawing.Utility
P1 = .GetPoint(, "p1: ")
ThisDrawing.SetVariable "osmode", 128 ' Per
P2 = .GetPoint(P1, "P2: ")
dblLeader= .GetDistance(P1, "Punct inceput leader: ")
End With

Set objDimDiametru = ThisDrawing.ModelSpace.AddDimDiametric (P1, P2, dblLeader)

D= objDimDiametru.Measurement
CitireAbateri
objDimDiametric.UnitsFormat = acDimLEngineering
objDimDiametric.PrimaryUnitsPrecision = acDimPrecisionFive
objDimDiametric.FractionFormat = acNotStacked
objDimDiametric.Update

'revenire la setarile initiale


ThisDrawing.SetVariable "osmode", intOsmode
End Sub

66
Ф8

Fig.59 Desenul rezultat în urma rulării

Fig. 60 Rezultatele în urma rulării programului


h) cazul când pe desen există cota cercului cu sau fără abateri

Ф8

Fig. 61 Desenul cu cota care interesează

Ф8

P1
P2

Fig. 62 Modelarea desenului

Algoritmul în pseudocod
67
Se selectează P1
Se selectează P2
Se selectează zona unde este pus leaderul pentru cota
Dacă cotă liberă atunci
Citeşte abaterile din fişierul tolerante.txt şi reţine-le
Altfel
Citeşte-le de pe desen şi reţine-le
Salvează datele într-un fişier extern
Implementare
Public Sub CotaCercAbateri()
Dim P1 As Variant
Dim P2 As Variant
Dim dblLeader As Double
Dim objDimDiametru As AcadDimDiametric
Dim intOsmode As Integer
'setare mod snap
intOsmode = ThisDrawing.GetVariable("osmode")
ThisDrawing.SetVariable "osmode", 512 ' Near

With ThisDrawing.Utility
P1 = .GetPoint(, "P1: ")
ThisDrawing.SetVariable "osmode", 128 ' Per
P2 = .GetPoint(P1, "P2: ")
dblLeader = .GetDistance(P1 "Punct inceput leader: ")
End With

If objDimDiametru.ToleranceLowerLimit<>0 and dimObj.ToleranceUpperLimit <>0 then


CurrentDisplay = "Symmetrical"
AInf= objDimDiametric.ToleranceLowerLimit
ASup= objDimDiametric.ToleranceUpperLimit
D= objDimDiametric.Measurement
Else
CitesteFisTol
End if

End Sub

Ф8

Fig.63 Desenul existent

68
Fig. 64 Rezultatele în urma rulării programului
i) cazul când pe desen nu este trecută abaterea de la intersecţie

Fig. 65 Desenul fără abaterea de intersecţie


Algoritmul
Citeşte toleranţa şi memorează
Introduce punctul de intersecţie pentru toleranţă
Stabileşte direcţia textului
Desenează semnul de toleranţă cu valorile
Salvează valoarea într-un fişier extern

Implementare

Public Sub SimbolIntersectie()


Dim TolerantaText As String
Dim PunctInsectie As Variant
Dim DirScriere As Variant
Dim I As Integer
Dim objToleranta As AcadTolerance

TolerantaText = InputBox("toleranta")

69
PunctInsectie = ThisDrawing.Utility.GetPoint(, _
"Punctul de inserare")
DirScriere = ThisDrawing.Utility.GetPoint(PunctInsectie, _
"Directie scriere toleranta")
For I = 0 To 2
DirScriere (I) = DirScriere (I) - PunctInsectie (I)
Next

Set objToleranta = ThisDrawing.ModelSpace.AddTolerance(TolerantaText, _


PunctInsectie, DirScriere)
tol= objToleranta. TextString

End Sub

Fig. 66 Desenul rezultat in urma rulării programului

Fig. 67 Rezultatele în urma rulării programului


În continuare extrag cu ajutorul programului condiţiile determinante specificate pe desenele luate
ca exemplu.
Exemplul 1. O piesă cotată ca în fig. 68

Cotele de realizat pe piesă la prelucrarea alezajului Φ10, fig.68 care constituie condiţiile
determinante sunt:
- cota 11, bază de cotare planul determinat de suprafaţa A;
- abaterea de la intersecţie, bază de cotare este axa suprafeţei cilindrice interioare B.

70
Precizia cotelor de realizat pe piesă este specificată pe desen:
T (11) = 0,1 mm
T( ) = 0,1 mm.

Fig. 68 Desenul propus pentru ex. 1


Rezultatele în urma rulării programului sunt:

Fig. 69 Rezultatele în
urma rulării programului
Exemplul 2. Considerăm piesa din fig. 70
Condiţiile determinante sunt:

- perpendicularitatea axelor găurilor


- cota 50±0,015
- simetria axelor găurilor

71
Fig. 70 Desenul propus pentru ex. 2

Fig. 71 Rezultatele în urma rulării programului


Exemplul 3. Considerăm desenul din fig. 72

Dacă se consideră ca exemplu piesa de tip flanşă reprezentată în fig. 72, se pot pune în evidenţă
următoarele condiţii de poziţie reciprocă:

72
— poziţia suprafeţei plane a flanşei în raport cu suprafaţa plană care mărgineşte butucul, definită
prin cota de 50 mm, cu o abatere admisibilă de ±0,2 mm ;
— poziţia axei geometrice a suprafeţei filetate (M6) în raport cu suprafaţa plană care mărgineşte
butucul, definită prin cota de 20 mm, cu o abatere admisibilă de ±0,1 mm ;
— poziţia suprafeţei inferioare a flanşei în raport cu suprafaţa plană superioară, definită prin cota
de 15 mm, netolerată;
— concentricitatea cercului 90 pe care se execută cele patru găuri din flanşă, cu cercul
director al suprafeţei cilindrice interioare a butucului, prescrisă cu o abatere admisibilă
de 0,05 mm ;
— poziţia unghiulară a celor patru găuri 10 executate în flanşă în raport cu planul de
simetrie al canalului de pană, definită prin cota de 45°, cu abaterea admisibilă de ±30';
— coaxialitatea suprafeţelor cilindrice 40, 120 şi 60, condiţie de poziţie reciprocă
subînţeleasă ;
— perpendicularitatea suprafeţelor plane (care mărginesc flanşa şi butucul) pe axa
geometrică a piesei , condiţie subînţeleasă;

Fig. 72 Desenul propus pentru exemplul 3

73
Fig. 73 Rezultatele în urma rulării programului
2.9 Concluzii
Pentru desenul piesei semifabricat trebuie să stabilim o strategie de construcţie pentru a
putea fi preluată informatic (desen inteligent). Am pornit de la ideea că un desen se construieşte
din entităţi (primitive) grafice (punct, linie, arc, elipsă etc) care conţin:
- atribute geometrice (coordonate sau/şi model analitic);
- atribute topologice (conexiuni între diferite „părţi” ale entităţii (obiectului);
- atribute de aspect (culoare, textură, tip linie etc..
Am ţinut seama că prin intermediul transformărilor geometrice sunt afectate numai
atributele geometrice.
S-a creat algoritmi şi s-au implementat programe în VB care să deseneze o linie, un cerc,
un arc etc. ţinând cont de forma analitică a acestora. Am prezentat rezultatele la rularea fiecărui
program.
S-a creat algoritmi şi s-au implementat programe în VB pentru transformările geometrice
(translaţia, rotaţia, scalarea).
S-a creat algoritmi şi s-au implementat programe în VB pentru generarea cotelor unghiulare,
cotelor liniare, cotelor unghiulare pentru arce, cotarea cercurilor, scrierea toleranţelor, folosirea
leaderelor, scrierea rugozităţii.
S-a prezentat rezultatele la rularea fiecărui program.
S-a creat algoritmi pentru extragerea informaţiilor de pe desen cu reţinerea lor în fisiere externe.
S-a prezentat rezultatele la rularea fiecărui program.
Adică desenului preluat din mediul grafic complet sau incomplet (dar care se poate completa) i
se poate ataşa un fişier extern care conţine toate informaţiile legate de el.

74
Capitolul III. SELECTAREA AUTOMATĂ A SCHEMELOR DE ORIENTARE TEHNIC
POSIBILE
3. Modalităţi de selectare automată a schemelor de orientare tehnic posibile
3.1 Modalităţi de selectare automată a schemelor de orientare tehnic posibile
utilizând structura arborescentă a PSF
În lucrărle [7],[10], am arătat o modalitate de extragere a condiţiilor determinante.
Specific că această modalitate de extragere a condiţiilor determinante era în momentul când nu
ajunsesem cu cercetările să pot citii toate informaţiile direct de pe desenul piesei.

Fig. 74 Schiţa operaţiei

Schiţa piesei a fost preluată din mediul Autocad, în 2D folosind tehnicile normale de desenare..
Din schiţa operaţiei (fig. 74) se constată necesitatea de a respecta condiţiile trecute în tabelul
următor:

75
Evidenţierea condiţiilor
Simbolul condiţiei Condiţia
C1 Simetria axelor găurilor ce se prelucrează faţă de un plan de simetrie (axa
orizontală a piesei).
C2 Cota 50±0.1 – distanţa de la planul ce conţine axele găurilor ce se prelucrează
la axa alezajului Ф24.
C3 Perpendicularitatea axelor găurilor ce se prelucrează pe suprafaţa plană A.

Se pune problema evidenţierii condiţiilor ce interesează procesul orientării. Necesitatea


indicării corecte a condiţiilor este reclamată de fapul că, neluarea în considerare a unora are ca
urmare, în etapele următoare limitarea numărului schemelor de orientare şi, în consecinţă,
posibilitatea pierderii soluţiei optime.
Aceste condiţii ce determină în mod cert o anumită poziţie reciprocă a suprafeţei de
generare (C1, C2, …, Cn) se numesc condiţii determinante.
Trebuie să preluăm informatic aceste condiţii, pentru aceasta s-a propus un algoritm care
să rezolve această problemă în mod automat.
Acest algoritm este capabil să descompună piesa în corpuri geometrice elementare, să
evidenţieze suprafeţele ce urmează să fie prelucrate, precum şi condiţiile ce se referă la
poziţionarea suprafeţelor de prelucrat în raport cu alte suprafeţe. În felul acesta am geometrizat
condiţiile determinante şi acum ştim unde să amplasăm simbolurile informaţionale (simbolizarea
orientării).
Algoritmul pentru geometrizarea condiţiilor determinante:
Legătura cu Autocad-ul
Declarare variabile
Creare rădăcină parinte
Crearea structurii cu condiţiile determinante
Pentru fiecare condiţie determinantă
Crează vederile (top, front, etc)
Vizualizare
Salvare

76
În urma rulării modulului de program creăm radăcina (părintele) în cazul nostru piesa test supusă
studiului (fig. 75).

Fig. 75 Crearea rădăcinii părinte


Crearea cu acelaşi program a structurii arborescente (în cazul nostru al condiţiilor impuse
piesei la operaţia considerată.

77
Fig.76 Crearea structurii arborescente
În fig. 77 Sunt redate vizualizările condiţiilor determinante geometrizate.

78
Fig.77 Vizualizarea condiţiilor geometrizate de pe desen
În felul acesta am geometrizat condiţiile determinante şi acum ştim unde să amplasăm
simbolurile informaţionale (simbolizarea orientării). Condiţiile determinante sunt salvate şi într-
un fişier extern (fig. 78)

79
Fig. 78 Salvarea datelor într-un fişier extern
După geometrizarea condiţilor ne propunem să inserăm simbolurile informaţionale pe
suprafeţele responsabile cu acele condiţii.
Algoritmul propus pentru inserarea simbolurilor pe suprafeţele condiţionate este următorul:
Option Explicit
Declarare variabile

Private Sub cmdCautaBlocKSimb_Click()


Cauta in baza de date simbol, grupa de simboluri corespunzatoare conditiei alese‚
unei conditii ii corespunde un tip de suprafata
Amplaseaza grupa de simboluri pe acea suprafata
End sub

3.2 Modalităţi de selectare automată a schemelor de orientare tehnic posibile cu citirea


informaţiilor de pe piesă

Prezint o altă modalitate de selectare automată a schemelor de orientare tehnic posibile pornind
de la posibilitatea de citere a informaţiilor de pe desenul piesei semifabricat. Schiţa operaţiei
(Fig. 79), trebuie să îndeplinească următoarele condiţii:

80
- să cuprindă un număr suficient de vederi şi secţiuni pentru înţelegerea şi determinarea în
bune condiţii a formei constructive a piesei;
- să scoată în evidenţă suprafeţele supuse prelucrării prin îngroşarea conturului (nu este
obligatorie);
- să conţină dimensiunile, precizia dimensională, de formă, de poziţie şi rugozitatea
suprafeţelor ce se prelucrează şi a celor faţă de care acestea se raportează;
- să evidenţieze mişcările piesei in procesul generării suprafeţelor, conform schemei de
aşchiere adoptate;
- să fie redate schematic sculele aşchietoare cu care se realizează generarea şi evidenţiate
mişcările lor;
- să fie indicate prin leadere suprafeţele pe care vin simbolurile

Fig. 79 Schiţa operaţiei

81
Fig. 80 Relaţia dintre suprafeţe şi simboluri

82
Completarea tabelului Conditii.xls erorilor admisibile

Completarea tabelului Conditii.xls cu suprafetele aferente fiecărei condiţii

Fig.81 Fişierul cu codurile simbolurile aferente tipului de suprafaţă

Alege condiţia Ci din lista derulantă


Citeşte cota de pe desen
Dacă cotalibera atunci
Citeşte abaterile din fişierul Tolerante.txt şi scrie în Conditii.xls
Altfel
Citeşte de pe desen şi scrie în Conditii.xls
Calculează toleranţa şi scrie în Conditii.xls
Calculează eroarea admisibilă şi scrie în Conditii.xls

Citeşte tipSup şi scrie în Conditii.xls


Pentru tip suprafaţă citit
Alege simbolurile şi scrie în Scheme.xls

Generare scheme
Calcul erori
Dacă singulare atunci
Calculează eroriSingulare

83
Altfel
Calculează eroriNesingulare

Algoritm pentru generarea schemelor

Fie A1, A2, ... , An mulţimi finite.

Produsul cartezian A1xA2x...xAn= {(a1, a2, ..., an)|a1 A1,a2 A2, ..., an An}

Formula de numărare: A1xA2x...xAn are m1xm2x ... xmn elemente.


Unde:
m1 numărul de elemente al mulţimii A1
m2 numărul de elemente al mulţimii A2
......
mn numărul de elemente al mulţimii An
Notaţii: Numărul de elemente ale unei mulţimi A se notează cu card(A) – cardinalul mulţimii A
Formula de numărare poate fi scrisă sub forma:
Card(A1xA2x...xAn) = m1xm2x ... xmn
Unde:
m1 = card(A1)
m2 = card(A2)

mn = card(An)
Algoritm pentru generarea produsului cartezian
În cazul particular luăm:
A1 = {1,2, ..., m1}
A2 = {1,2, ..., m2}
...
An = {1,2, ..., mn}
Exemplu1:
n=3, m1=3, m2=2, m3=2
A1 = {1,2, 3}
A2 = {1,2 }

84
A3 = {1,2 }
Elementele produsului cartezian scrise în ordine lexicografică:

1) 111
2) 112
3) 121
4) 122
5) 211
6) 212
7) 221
8) 222
9) 311
10) 312
11) 321
12) 322

Total 3x2x2=12 elemente

Exemplul2:

n=5, m1=3, m2=4, m3=2, m4=3, m5=2


total 3x4x2x3x2= 144 elemente
1) 1 1 1 1 1 – primul element
2) .....
12232
23111
...
144) 3 4 2 3 2 – ultimul element
Regula de găsire a următorului element:
- Se parcurg cifrele de la sfârşit spre început
Cât timp nu pot fi marite adică Ck = mk (cifra de pe poziţia k este egală cu numărul maxim de pe
acea poziţie)
- Dacă găsim o cifră Ck ce poate fi mărită atunci următorul element este C1 ... Ck-1(Ck+1)1...1 (de
la C1 ... Ck-1 cifrele sunt nemodificate, Ck+1 – cifra găsită s-a mărit cu 1, 1...1 – următoarele cifre
se iau egele cu 1)
- Dacă nu găsim o cifră ce poate fi mărită însemnă că am ajuns la ultimul element

Pornind de la primul element 1 1 ... 1 şi repetând aplicarea regulii de găsire a următorului element cât
timp acesta există (altfel spus până când se ajunge la ultimul element) se obţin toate elementele. Acesta
reprezintă un algoritm pentru generarea tuturor elementelor.
Algoritmul în pseudocod:

85
Citeste n \\ se citeşte valoarea lui n care reprezintă numărul de mulţimi
Pentru fiecare i=1,2, ..., n se citeşte mi \\ se stabilesc valorile lui m1,m2, ..., mn
Pentru i=1,2, ..., n Ci primeste valoarea 1 \\ primul element
Afişare \\ se afişează elementul găsit, adică pentru i=1,2, ..., n se scrie Ci
Repetă \\ se repetă procedeul de găsire a următorului element
k primeşte voloarea n\\ căutarea cifrei ce va fi mărită începe de pe poziţia k=n (de pe ultima poziţie)
Cât timp (Ck = mk şi k >0) k=k-1\\ cât timp nu putem mării cifra trecem la cifra anterioară, condiţia k>0
restricţionează această acţiune la existenţa cifrei
Dacă k>0 \\ există cifra Ck ce poate fi mărită
Ck=Ck+1 \\ cifra Ck se măreşte cu 1
Pentru i= k+1, ..., n, Ci =1\\cifrele următoare sunt egale cu 1
Afişare \\ s-a găsit următorul element şi se afişează
Cât timp k>0 \\ procedeulse repetă cât timp găsim cifre ce pot fi mărite adică se încheie când nu se mai găsesc
astfel de cifre (k=0 şi s-a ajuns la ultimul)

Având în vedere că noi trebuie să generăm combinaţiile dintre codurile simbolurilor trebuie să
generăm tot produsul cartezian anterior iar la afişare se va afişa elementul corespunzător al indicilor.
Deci fie A1xA2x...xAn cu
A1 = {a11,a12, ..., a1m1}
A2 = {a21,a22, ..., a2m2}
...
An = {an1,an2, ..., anmn}
Urmărim să generăm tot produsul cartezian anterior, iar la afişare se va afişa elementul corespunzător
indicilor C1,C2, ...,Cn şi anume a1C1,a2C2, ..., anCn
Algoritmul în pseudocod pentru generarea produsului cartezian A1xA2x...xAn cu
A1 = {a11,a12, ..., a1m1}
A2 = {a21,a22, ..., a2m2}
...
An = {an1,an2, ..., anmn}

Citeste n \\ se citeşte valoarea lui n care reprezintă numărul de mulţimi


Pentru fiecare i=1,2, ..., n pentru fiecare mulţime Ai
se citeşte mi \\ se stabilesc valorile lui m1,m2, ..., mn
Pentru j=1,2, ..., mi citeste aij elementele mulţimii Ai
Pentru i=1,2, ...,n Ci primeste valoarea 1 \\ primul element al produsului cartezian de indici
Afişare (pentru i=1,2, .., n scrie aiCi\\ se afişează elementul corespunzător din produsul cartezian aiCi pentru
i=1,2, ..., n
Repetă \\ se generează următoarele elemente (indici)
k primeşte voloarea n
Cât timp (Ck = mk şi k >0) k=k-1
Dacă k>0

86
Ck=Ck+1
Pentru i= k+1, ..., n, Ci =1
Afişare se afişează elementul corespunzător din produsul cartezian
Cât timp k>0

Algoritm pentru calcul de erori pentru scheme singulare

Pentru fiecare simbol // se citesc din fişierul scheme.xls


Dacă codSimb corespunde cu codurile pentru suprafeţe plane, mecanisme autocentrante, con etc.
Dacă BC=BO şi joc=0 atunci
Eroare=0
Altfel
Eroare=joc/2
Dacă BC diferită de BO atunci
Eroare=tol
Dacă codsimb este corespunzător codului unei prisme atunci
Calcul eroare prismă
Pentru calculul jocului:
Citeste cotă nominală
Alege ajustajele (H7/f8,...)
Extrage din fişierul Tolerante.txt abaterile corespunzătoare ajustajului ales
Calculează jocul (joc= As-ai)
Scrie rezultatul în fişierul scheme.xls
Schema bloc pentru calculul de erori singulare este prezentată în fig. 82

Scheme.xls
BD cu
Suprafete

SI
Program citire date de pe desen Afişare

Program calcul erori singulare


Trepte de
precizie Listare
imprimantă

Fig. 82 Schema bloc Calcul erori Pentru scheme singulare

87
Fig. 83 Calculul erorilor pentru scheme singulare (BC=BO, Fară joc)

Fig. 84 Calcul erorilor pentru scheme singulare(BC=BO, Cu joc)

88
Funcţionare program scheme singulare.

Alege suprafaţa din listă. //În listă vor fi scrise în mod automat tipul de suprafeţe din baza de date
aferentă schemei.
Alege simbolul // În listă apare numai simbolurile scrise în baza de date aferentă
Alege treapta de precizie // alege coincidenţa sau necoincidenţa bazelor
Alege dacă este cu joc sau nu
Alege ajustajul
Calculează eroarea
Scrie eroarea în tabelul cu scheme // scheme.xls
Afişează şi pe ecran
Ieşire

BD cu Scheme.xls
combinări de
Suprafete

SI
Extrem I Program citire date de pe desen Afişare

SI Extrem Program calcul erori singulare


II
Listare
imprimantă
Trepte de
precizie

Fig. 85 Schema bloc Calcul erori nesingulare

89
Fig. 86 Calculul erorilor pentru scheme nesingulare

Funcţionarea programului pentru scheme nesingulare

Alege combinarea de suprafeţe // în listă vor fi scrise combinarea de suprafeţe din baza de date aferentă
conform schemei
Alege simbolul de pe extremul I// în listă apare numai simbolul scris în baza de date aferentă conform
schemei
Alege dacă este cu joc sau nu
Alege simbolul de pe extremul II// în listă apare numai simbolul scris în baza de date aferentă conform
schemei
Alege dacă este cu joc sau nu
Alege treapta de precizie
Alege ajustajul dacă este cu joc
Calculează eroarea conform schemei aferente
Scrie eroarea în tabelul cu scheme
Afişează şi pe ecran
Ieşire

Până în acest moment am obţinut toate schemele tehnic posibile. Urmărim să obţinem
schema optimă. Pentru aceasta folosim filtrul economic. Pentru aceasta avem fişierul cu
schemele rămase după selecţia tehnică. Construim un fişier cu numele Cost. xls, ce conţine

90
preţurile sau puntajul pentru fiecare element de reazem. Ne propunem să găsim schema cea mai
ieftină ( cost minim sau punctaj minim).
Pentru aceasta am realizat un program de actualizare a bazei de date. Pe baza fişierelor
scheme.xls şi cost.xls am realizat un program ce poate calcula pentru fiecare schemă costul total/
punctajul total şi de afişare a schemei cu cel mai mic cost/punctaj. Această schemă este cea
optimă.
Simbolurile care compune schema optimă trebuie inserate pe schiţa operaţiei.
Pentru amplasarea (inserarea) simbolurilor pe schiţa piesei s-au realizat două aplicaţii:
1. prin tragerea şi eliberarea simbolului pe schiţa piesei (metoda drag and drop) (Fig. 87);
2. cu specificarea coordonatelor sau prin specificarea pe ecran cu un clic de mouse (Fig. 88).

Fig. 87 Inserare prin tragerea şi eliberarea simbolului pe schiţa operaţiei

91
Fig. 88 Exemplu de inserare a unui simbol prin specificarea pe ecran cu clic de mouse
În fig. 87 partea din stânga, pe două coloane, se găsesc mai multe pictograme, fiecare din ele
reprezentând un simbol anume.
Folosind metoda “drag and drop”, astfel de pictograme pot fi copiate în restul ferestrei
aplicaţiei. Aici, fiecare astfel de obiect poate primi o anumită denumire. Apoi, prin apăsarea
butonului din stânga al mouse-ului, putem afla informaţii despre respectivul obiect amplasat.
Prin acţionarea butonului din dreapta peste un astfel de obiect, vom realiza ştergerea
obiectului respectiv.
Pentru a realiza aplicaţia descrisă, trebuie creat un fişier proiect schita.mak. Acesta trebuie să
cuprindă trei fişiere: desen.frm, desen_d.frm şi desen.bas.
În fişierul desen.frm este descrisă forma principal a aplicaţiei, ceea ce cuprinde schiţa piesei,
precum şi codul asociat acestei forme.

Begin Form Form1


Autoredraw = -1 ‘ True
Caption = “Schita Piesei”
ClientHeight = 2430
ClientLeft = 4410
ClientTop = 2055
ClientWidth = 3375

92
FontItalic = 0 ‘False
FontBold = 0 ‘False
FontName = “Arial”
FontSize = 8.25
FontStrikethru = 0 ‘False
FontUnderline = 0 ‘False
Height = 3390
Left = 4350
LinkTopic = “Form1”
Scale Height = 2430
ScaleWidth = 3375
Top = 1155
Width = 3495
Begin Image ob
Height = 735
Left = 120
Index = 0
Left = 1080
Visible = 0 ‘False
Width = 615
End
Begin Image simbol
DragMode = 1 ‘Automatic
Height = 615
Index = 0
Left = 120
Top = 120
Visible = 0 ‘False
Width = 615
End
End

În principiu, forma cuprinde, pe lângă un meniu cu patru opţiuni, două obiecte de tip Image,
ambele având Index=0.
Cele două obiecte (purtând numele de Simbol, respectiv ob) ajută la generarea de vectori cu
astfel de obiecte. Vectorul Simbol va conţine cele 16 pictograme din stânga, iar vectorul ob va
conţine obiectele care vor fi amplasate pe schiţă.
Iată şi figura corespunzătoare descrierii formei anterioare:

93
Fig. 89 Proiectare machetă
Un al doilea fişier este desen_d.frm care conţine descrierea unei forme, Form2, foarte simplă.
Ea cuprinde o etichetă explicativă (Label1) şi o casetă de text (Text1). În respectiva casetă va fi
colimată denumirea obiectului (ob-ului) curent, care urmează a se amplasa pe schiţa piesei.
Să trecem acum la implementarea programului.
m n As Integer 'nr. de simb-uri
Dim x_min As Single
Dim first_x, first_y
Dim desen As Integer
Dim rap_x, rap_y, x_0, y_0

Private Sub Form_Load()


desen = False
n=0
has = Form1.ScaleHeight \ 15
lat = has
x_min = 3 * has + 50
rap_x = 1
rap_y = 1
x_0 = ScaleHeight - x_min
y_0 = ScaleHeight
ChDir App.Path
Open "simbol.TXT" For Input As #1
Dim s As String
For j = 1 To 2
For k = 1 To 16
i = 16 * (j - 1) + k
Line Input #1, s

94
p = InStr(s, "->")
fis_ob = Left(s, p - 1) + ".JPG"
nume_ob = Right(s, Len(s) - p - 1)
Load simbol(i)
simbol(i).BorderStyle = 1
simbol(i).Stretch = True
simbol(i).Left = lat * (j - 1)
simbol(i).Top = has * (k - 1)
simbol(i).Width = lat
simbol(i).Height = has
simbol(i).Tag = nume_ob
simbol(i).Picture = LoadPicture(fis_ob)
simbol(i).DragMode = 1
simbol(i).Visible = True
Next k
Next j
Close #1
End Sub

Prin n notăm numărul de obiecte amplasate pe desen.


Să vedem acum ce se întâmplă la pornirea programului, deci ce se realizează în subrutina
Form_Load.
Imaginea ferestrei Form1, după pornirea programului, este dată în figura Fig. 90

Fig. 90 Ecranul înainte de inserarea simbolului

95
Aşadar, are loc încărcarea pictogramelor şi dispunerea lor pe cele două coloane, fiecare cu câte 8
elemente.
Pictogramele se citesc din nişte fişiere JPG (de exemplu). Numele acestora, precum şi
semnificaţia lor sunt date într-un fişier text, numit simbol.txt ce se genereaza din baza de date ce
conţine formele grafice şi denumirea lor.
Acest fişier are următorul coţinut:
boltfrezat->bolt cilindric frezat
bolt->bolt cilindric
boltconica->bolt conic autoreglabil
boltconicm->bolt conic mobil
boltconic->bolt conic
dornfrezat->dorn cilindric frezat
dorncilindric->dorn cilindric
cepplacuta->doua cepuri sau placute de reazem
placutaa->placuta de sprijin autoreglabila
placutam->placuta de sprijin mobila
placutasprijin->placuta de sprijin
prismal->prisma lunga
prismas->prisma scurta
sistautocentr->sistem autocentrant
treicepiplacute->trei cepi sau placute de reazem
uncepplacuta->un cep sau placuta de reazem

În fişierul de mai sus se poate vedea denumirile fişierelor JPG (fără extensie) pe care le-am
folosit în realizarea aplicaţiei noastre.

96
3.3 Concluzii
S-au prezentat două modalităţi de selectare automată a schemelor de orientare tehnic posibile:
- o modalitate de extragere a condiţiilor principale când nu ajunsesem cu cercetările să pot
citii toate informaţiile direct de pe desenul piesei;
- o modalitate de extragere a condiţiilor principale în momentul când am ajuns cu
cercetările să pot citii toate informaţiile direct de pe desenul piesei.
S-a realizat un exemplu de schiţă de piesă cu toate elementele necesare proiectării asistate.
S-a realizat un algoritm capabil să descompună piesa în corpuri geometrice elementare
S-a realizat un algoritm pentru geometrizarea condiţiilor determinante.
Cu acelaşi program am realizat structura arborescentă a condiţiilor determinante, după cum
urmează:
- S-a realizat un program de vizualizare a condiţiilor geometrizate de pe desen în toate
vederile;
- Algoritm pentru inserarea tuturor simbolurilor pe suprafeţele condiţionate;
- Algoritm de selecţie a schemelor de orientare matematic posibile folosind metoda
backtracking;
- S-a stabilit condiţiile pe care trebuie să le îndeplinească schiţa operaţiei în vederea
preluării informatice;
- S-a realizat un algoritm de extragere a condiţiilor principale şi calculul erorilor admisibile
( cu salvarea lor într-un fişier conditii.xls);
- S-a realizat un algoritm pentru generarea tuturor schemelor de orientare;
- S-au stabilit schema bloc pentru calculul de erori pentru scheme singulare şi nesingulare;
- S-au realizat programe pentru calculul de erori pentru schemele singulare şi nesingulare;
- S-a realizat un program de selectare tehnică prin calculul de erori;
- S-a realizat un program pentru selectarea economică pentru stabilirea schemei optime.
Pentru amplasarea (inserarea) simbolurilor pe schiţa piesei am realizat două aplicaţii:
- prin tragerea şi eliberarea simbolului pe schiţa piesei (metoda drag and drop) (Fig. 87);
- cu specificarea coordonatelor sau prin specificarea pe ecran cu un clic de mouse (Fig.
88).
S-au prezentat rezultatele pentru toate programele.

97
Capitolul IV. GENERAREA AUTOMATĂ A SIMBOLURILOR UTILIZATE ÎN
PROIECTAREA DISPOZITIVELOR MECANICE

Utilizarea calculatorului în proiectare a devenit, practic, o necesitate. Încă din fazele precoce
ale proiectării şi până la execuţia finală, calculatorul a înlocuit uneltele clasice, punând la
dispoziţie metode de lucru foarte performante. O multitudine de programe (limbaje de programe
– VISUAL BASIC, PASCAL, C++, DELPHI, VBA ş.a., programe de proiectare asistată -
AUTOCAD, EUCLID, PROENGINEER, CATIA ş.a., softuri performante MultiBody Systems -
ADAMS, PLEXUS, DYMES, SDS ş.a.) au fost şi sunt utilizate pe scară largă, conducând la
realizarea unor adevărate prototipuri virtuale, având în vedere obţinerea unor produse care să
corespundă funcţional cerinţelor din ce în ce mai mari impuse de piaţă.

4. Algoritmul de gândire a problemei pentru rezolvarea ei cu ajutorul calculatorului

S-a pornit de la clasificarea reazemelor deoarece dă corespondent de simbol.


Simbolurile sunt purtătoare de informaţii, care rezultă atât din forma grafică cât şi din
forma codificată a simbolului.
Forma grafică a simbolului informaţional cuprinde trei componente arhitecturale, [20]:
- Forma geometrică de bază, stilizată a suprafeţelor active ale reazemelor (SA);
- Gradele de libertate legate piesei semifabricat la contactul cu reazemele;
- Operatorii grafici şi alfanumerici.
În figura Fig. 91 s-au prezentat câteva forme geometrice de bază utlizate.
În figură sunt prezentate forme ale suprafeţelor plane, suprafeţe cilindrice, conice, sferice,
canelate, filetate (interioare sau exterioare).
Cercul sau conul exterior tăiat diametral şi respectiv simetric, sugerează un cilindru sau
un con frezat simetric faţă de un plan diametral de simetrie.
De asemenea se poate remarca faptul că utilizând un număr relativ redus de forme
geometrice simple se acoperă marea majoritate a suprafeţelor active ale reazemelor utilizate în
proiectarea dispozitivelor [7].

98
99
Stilizarea formei de bază a [SA] a Diversificarea simbolurilor informaţionale în funcţie de numărul gradelor de
reazemelor exprimate în cod CAS libertate diferitelor tipuri de (PSF) cu SO (1 PUNCT =1 GRAD DE LIBERTATE)

1 CEP, PLĂCUŢĂ
1 SP 3 CEPURI, PLĂCUŢE 2 CEPURI,PLĂCUŢE 1 PLĂCUŢĂ

2SPI(∢∝) 2SPE(∢∝) GHIDAJ DESCHIS LUNG GHIDAJ DESCHIS SCURT ……

2SPI( GHIDAJ DESCHIS LUNG GHIDAJ DESCHIS SCURT (RUD) GHIDAJ DESCHIS
SCURT (RBD) ……….

3SPI 3SPE GHIDAJ DESCHIS NORMAL GHIDAJ DESCHIS (RUD) GHIDAJ DESCHIS
(RBD) ………

4SPI( GHIDAJ ÎNCHIS NORMAL GHIDAJ ÎNCHIS (RUD) …….

4SPI∢∝ 4SPE∢∝ GHIDAJ PIRAMIDAL NORMAL GHGIDAJ PIRAMIDAL (RUD) …….

SCI SCE DORN CIL NETED BOLŢ CIL. NETED BOLŢ CIL. NETED ……

SKI SKE DORN CONIC BOLŢ CONIC

SCE(f) DORN CIL. (f) BOLŢ CIL.(f)

1SsfI 1SsfE REAZEM SFERIC EXTERIOR

1SCaKI 1SCaKE
DORN CONIC CANELAT BOLŢ CONIC CANELAT

1SCaKI 1SCaKE DORN CONIC CANELAT BOLŢ CONIC CANELAT

1SCFI 1SCFE DORN CIL. FILETAT BOLŢ CIL. FILETAT

2 SP ∝
PRISMĂ SCURTĂ PRISMĂ LUNGĂ

Fig. 91 Exemple de forme geometrice cele mai utilizate

100
TIPUL COD SEMNIFICAŢIA OPERATORI GRAFICI OPERATORI EXEMPLIFICARE
REAZEMULUI ALFA
NUMERICI
Reazeme RPF -
principale fixe
Reazeme RPR Reglare liniară pe
principale 1,2,3 axe
reglabile Rl1
Reglare
unghiulară în jurul
a 1,2,3 axe
Ru23
Reazeme RPAR Autoreglare
principale liniară pe 1,2,3
autoreglabille axe ARl1
Autoreglare
unghiulară în jurul
a 1,2,3 axe AR
u1
Reazeme RPM Mobilitate liniară
principale pe 1,2,3 axe
Ml1
mobile
Mobilitate
unghiulară în jurul
a 1,2,3 axe M
u1
Reazeme RPFl Flotante liniar FLl
principale
flotante

Flotante unghiular FLu

Reazeme RA Gradul de -
auxiliare libertate nu este
principal
Reazeme RS R cu autoaţezare -
suplimentare RSAA
Cu aşezare -
ulterioară
Forţa de Fr Asigură contactul -
reglare PSF cu reazemele
Forţa de Fs(S) Menţine -
stranger contactul PSF cu
principală reazemele în
scopul prelucrării

Fig. 92 Exemple de operatori grafici şi alfanumerici

101
Trecem la a doua componentă arhitecturală a simbolului informaţional. De menţionat
necesitatea ca în varianta maximală aceasta să ofere informaţii privind numărul, natura (rotaţii,
translaţii), sensurile şi axele de raportare a gradelor de libertate legate de reazemul simbolizat.

Numărul gradelor de libertate este dat de numărul cerculeţelor (pline sau goale), plasate
pe forma de bază a simbolului, indicând un reazem principal (cerculeţ plin) sau auxiliar (cerculeţ
gol).

Numărul diferit de cerculeţe pe aceeaşi formă de bază, oferă informaţii asupra aspectului
dimensional al suprafeţelor de orientare de pe PSF şi al suprafeţelor active de pe reazem (R), în
zona comună a contactului (prismă lungă, prismă scurtă, bolţ, dorn, etc.).
În figura Fig. 92 se prezintă diversificarea simbolurilor informaţionale în funcţie de
numărul gradelor de libertate legate.
A treia componentă din arhitectura simbolizării informaţionale – operatorii grafici sunt
concentrate în figura Fig. 92.
Sinteza gândirii:
- Am făcut o referire la esenţa simbolizării informaţionale, deoarece forma grafică,
explicită, frecvent utilizată direct pe schiţele pieselor semifabricat şi forma codificată
implicită este necesară pentru prelucrarea automată a datelor cu ajutorul calculatorului.
- Am făcut exploatarea arhitecturală, pentru că de aici încep ideile de cum să generez
simbolurile informaţionale.
- Arhitectura de simbol înseamnă forme de bază , fără marcaj ( ; ) adică de forme
geometrice. Al doilea element numărul de puncte: goale (1,2,3), pline (1,2, ...,6).
Se pune problema: cum plasăm bulina (marcajul)?. Grupuri de posibilităţi:
Dacă linie atunci putem să plasăm 1,2,3 marcaje (buline)
Dacă cerc atunci putem să plasăm 1,2,4 marcaje (buline)
Continuând cu acest raţionament adică făcând o corelaţie între forma de bază şi numărul
de buline acceptate de o formă construim toate simbolurile.
La fel şi cu operatorii grafici.

Am putea spune că:

102
- dacă am un fişier de forme, un fişier de buline şi operatorii în alt fişier, atunci pot să
construiesc toate posibilităţile de forme ale simbolurilor, iar informaţiile comprimate în
simbol în alt fişier (număr grade de libertate, număr de rotaţii, număr de translaţii);
- fiecare simbol are o formă geometrică construită din elemente geometrice (punct,
dreaptă, arc, cerc etc.) şi pot fi exprimate analitic, deci se pot genera, iar informaţiile
comprimate în simbol (număr grade de libertate, număr de rotaţii, număr de translaţii)
sunt atribuite odată cu generarea simbolului, şi salvate într-un fişier.

4.1 Modalităţi de reprezentare a obiectelor grafice cu ajutorul calculatorului

Scenele grafice realizate cu ajutorul calculatorului sunt compuse, în majoritatea cazurilor,


din elementele grafice de bază [1],[2]. De multe ori insă este necesar ca utilizatorul pachetului
grafic să poată avea acces nemijlocit la un grup de elemente grafice de bază pe care să le trateze
ca o unitate de sine stătătoare, identificată eventual printr-un nume specific. Acest grup de
elemente grafice va putea fi manipulat in mod distinct faţă de celelalte elemente. Un astfel de
grup va fi numit în cele ce urmează obiect grafic. Elaborarea programelor de grafică pe
calculator, utilizând conceptul de obiect grafic va fi numită programare orientată pe obiecte
grafice.
Limbajele de programare, tehnicile şi metodele de programare au evoluat în mod
spectaculos de la apariţia calculatorului şi până astăzi, ca urmare a necesităţii de a răspunde la
creşterea continua a complexităţii problemelor de rezolvat şi deci, implicit a programelor
corescpunzătoare. Astfel, programarea a evoluat de la stadiul iniţial al introducerii notiunilor
direct în cod binar şi a continuat cu apariţia limbajelor de asamblare, care permiteau
reprezentarea simbolică a instrucţiunilor pentru calculator. Atunci când limbajele de asamblare
n-au mai făcut faţă complexităţii crescânde a programelor a fost necesară utilizarea unor limbaje
de nivel mai înalt, cunoscute sub numele de limbaje de programare de gereratia 1 şi 2, care să
faciliteze gestionarea acelui nivel de complexitate. Reprezentate de seamă ale acestei perioade
sunt limbajele FORTRAN, COBOL, ALGOL.
Deceniul 6 al secolului 20 a adus cu sine apariţia programării structurate, ceea ce a
constituit unul dintre paşii semnificativi în evolutia ingineriei software, această paradigmă de
programare dominând o bună bucată de timp lumea programării. Programarea structurată este

103
susţinută de limbaje de generaţia 3 cum sunt C, PASCAL, BASIC principala caracteristică a lor
fiind utilizarea subprogramelor ca modalitate de gestionare a complexitatii.
Programarea structurată s-a dovedit a fi o modalitate corespunzătoare de abstractizare a
operaţiilor şi a algoritmilor, dovedindu-şi eficienţa în gestionarea programelor a căror
complexitate putea fi controlată de către un singur programator sau de catre un număr restrâns de
programatori.
Odată cu creşterea dimensiunii şi complexităţii proiectelor software a devenit tot mai clar
că pentru a le putea controla este absolut necesară abstractizarea datelor şi ca în acest scop
programarea structurata nu mai este suficienta.
În 1984 Shankar afirma că: ”Natura abstractizărilor ce pot fi obţinute prin utilizarea
procedurilor este adecvată descrierii operaţiilor abstracte, dar nu este adecvată descrierii
obiectelor abstracte.
Aceasta este o carenţă majoră de vreme ce în multe aplicaţii complexitatea obiectelor de
date care trebuiesc manipulate contribuie substanţial la complexitatea globală a problemei”.
S-a impus găsirea unui nou model de programare capabil să depăşească limitările
programării structurate şi care să fie capabilă să realizeze abstractizarea adecvată a datelor. Aşa
s-a născut limbajele bazate pe obiecte şi apoi cele orientate pe obiecte.
Dintre acestea cele mai răspandite sunt Ada şi CLOS şi mai de curând Java(bazate pe
obiecte), respective Smalltalk, C++, Turbo Pascal(Object Pascal) Eiffel (orientate pe obiecte).
În evoluţia tehnicilor de proiectare şi realizare efectivă a programelor au apărut la un
moment dat, concepte şi construcţii noi, modalităti noi de structurare a datelor, de tratare a
colectiilor de date şi chiar de programare.
Construcţia de bază în abordarea orientată obiect este obiectul [4],[5],[13] care combină
structura datelor şi comportamentul într-o singură entitate.
Prin obiect înţelegem o entitate din lumea reală asupra căreia se poate intreprinde o
acţiune, sau care poate intreprinde o acţiune.
Obiectul este deci un concept, o abstracţie sau un lucru, o entitate din lumea reală având
limite precise şi un sens precis în contextul problemei studiate.
Un obiect este caracterizat prin 3 elemente:
- identitate;
- stare;

104
- comportament;
Spunem despre un obiect că are 2 componente:
- structura informaţională;
- comportamentul sau operaţiile care acţionează asupra structurii.
Analizând mai atenţi obiectele, constatam că acestea pot fi:
- obiecte concrete, care există în mod fizic;
- obiecte conceptuale(o idee,o lege etc).
Comportamentul obiectelor poate fi declanşat de stimul externi sau evenimente.
Fiecare obiect conţine informaţii individuale(date) care trebuie să fie accesate sau
modificate numai prin intermediul mulţimii de operaţii care definesc comportamentul obiectului
respectiv. Singura parte vizibilă a unui obiect este constituită din operaţiile (funcţiile) obiectului
şi este denumită interfaţă.
Atât structura care memorează informaţiile cât şi implementarea operaţiilor sunt ascunse
în interiorul obiectului. Operaţiile arată numai ce face obiectul nu şi cum face.
Orice obiect are atribute şi operaţii.
Atributele descriu un obiect şi sunt valori ale datelor, în timp ce operaţiile(funcţiile)
definesc comportamentul obiectelor.
Anumite metode orientate propun, pentru acelaşi scop, utilizarea a trei tipuri de obiecte,
definite în contextul problemei şi anume [4]:
- obiecte entitate;
- obiecte de interfaţă;
- obiecte de control.
Modelul în abordarea pe obiecte bazată pe faptul că fiecare obiect, ca subsistem
individual cuprinde o procedură particulară, un comportament propriu şi comunică cu alte
obiecte.
Arhitectura sistemelor cu obiecte se bazează pe clase, obiecte şi interacţiunea dintre ele.
Un obiect dispune de proprietăţi, metode şi evenimente.
Proprietăţile unui obiect descriu caracteristicile fizice ale acestuia. Obiectul este deci
caracterizat prin proprietăţile (atributele) sale: nume, dimensiune, culoare, etichetă şi alte
proprietăţi care fac unic un obiect.

105
Într-un limbaj de programare, fiecare obiect posedă o cheie unică prin care el poate fi
referit fără ambiguitate.
Referintele asupra obiectelor sunt uniforme şi independente de conţinutul lor, ceea ce
permite crearea colecţiilor de obiecte.
Din punct de vedere al programatorilor, un obiect reprezintă o multime de date şi o serie
de operaţii, numite metode, care manipulează datele.
Utilizarea de obiecte în programe este o modalitate de a privi programele din perspectiva
obiectelor care compun un sistem.
Un obiect se caracterizeaza prin:
- identitate - cea care individualizează obiectul;
- starea obiectului - este caracterizată de atributele care descriu obiectul.
Obiectele cu stări comportamentale asemănătoare formează deci o clasa de obiecte.
O clasă de obiecte este o abstracţie care descrie toate caracteristicile comune ale unui
grup de obiecte şi care permite crearea de noi obiecte.
Ea descrie o mulţime de obiecte cu atribute similare, operaţii similare, aceeaşi semantică
şi aceleaşi relaţii cu alte obiecte.
Exemple de clase:
- cerc;
- linie;
- triunghi.
O clasă poate fi rafinată în subclase din ce în ce mai fine.
Fiecare subclasă moşteneşte toate proprietăţile superclasei sale şi adaugă propriile sale
proprietăţi.
Dacă o clasă moşteneşte o altă clasă atunci ea moşteneşte toate atributele şi operaţiile clasei
de bază, iar din punctul de vedere al codului, acestea sunt aceleaşi cu cele ale clasei de bază, şi
nu copii ale lor.
Încapsularea reprezintă conceptul care defineşte apartenenţa unor proprietăţi şi metode
faţă de un obiect.
Încapsularea protejează obiectele de manevre eronate din afară.
Programarea este practic activitatea prin care se concepe şi se realizează programul pentru
rezolvarea unei probleme, cu ajutorul calculatorului electronic.

106
Un program reprezintă o succesiune de instrucţiuni şi comenzi aparţinând unui/unor limbaje de
programare (Pascal, Basic, C, Visual Basic ,Java etc) care conduc la soluţionarea problemelor
formulate.
Dacă ne referim la activitatea de programare, vom identifica în cadrul acesteia, următoarele
etape:
- formularea problemei;
- elaborarea, identificarea şi descrierea algoritmului de rezolvare a problemei date;
- scrierea programului;
- testarea programului;
- realizarea, completarea şi definitivarea documentaţiei programului;
- exploatarea curentă, utilizarea şi întreţinerea programului.
Modele utilizate în dezvoltarea programelor:
Un model este o noţiune abstractă şi este construit pentru a înţelege problema inainte de a
implementa soluţia.
Cele mai utilizate modele în dezvoltarea programelor sunt:
- modelul orientat procedural care se bazează pe proceduri şi algoritmi;
- modelul orientat pe obiecte, care constă într-o colecţie de obiecte ce aparţin unor clase;
- modelul orientat pe reguli(de tipul If-Then);
- modelul orientat logic în care anumite scopuri se exprimă prin calcule cu predicate;
- modelul orientat pe constrângeri(relaţii de invarianţă).
Cea mai mare răspândire o are modelul procedural şi cel mai mare interes îl prezintă în
ultimul timp modelul orientat pe obiecte.
Modelul procedural reprezintă, prin intermediu algoritmilor de prelucrare, succesiunea de
operaţii elementare, în număr finit, care trebuie parcurse pentru rezolvarea unei probleme.
Modelul procedural are la bază abstracţia procedurală şi principiul substituţiei conform
căreia, la apelul unei proceduri, fiecare poziţie de parametru formal din corpul acesteia, poate fi
ocupată de o valoare de parametru identic din punct de vedere al tipului, sau de un nou apel la o
procedură, inclusive a procedurii în cauză(recursivitate), care reîntoarce tipul corespunzator
parametrului substituit.
Programele complexe sunt structurate în subprograme şi/sau proceduri. Programele
cuprind deci proceduri ce se pot apela reciproc.

107
Dintre limbajele de tip procedural amintim: Pascal, Cobol, Basic, C++, FoxPro.
Clasele şi obiectele obţinute în urma abstractizării şi încapsulării trebuie grupate şi apoi
stocate într-o formă fizică, denumită modul.
Modulele pot fi privite ca şi containere fizice în care declarăm clasele şi obiectele
rezultate în urma proiectării la nivel logic.
Modulele formează aşadar arhitectura fizică a programului. Modularizarea constă în
divizarea programului într-un număr de module care pot fi compilate separate, dar care sunt
conectate între ele. Limbajele care suportă conceptul de modul fac în acelaşi timp distincţia între
interfaţa modulului şi implementarea sa. Putem spune ca încasularea şi modularizarea merg
mână în mână. Concret, în C++ modulele nu sunt altceva decât fişiere ce pot fi compilate separat.
Reguli generale de modularizare:
1. Structura fiecărui modul trebuie să fie suficient de simplă pentru a putea fi complet
înţeleasă;
2. Implementarea unui modul trebuie să depindă doar de interfeţele altor module. Cu alte
cuvinte trebuie să fie posibilă modificarea implementării unui modul fară a avea cunostinte
despre implementarea altor module şi fără a afecta comportarea celorlante module;
3. Detaliile sistemului ce se presupune că se vor modifica independent vor fi plasate în
module diferite;
4. Singurele legături între module vor fi acelea a căror modificare este improbabilă;
5. Orice structură de date este încapsulată într-un modul; ea poate fi accesată direct din
interiorul modulului dar nu poate fi accesată din afara modulului decât prin intermediul
obiectelor şi claselor conţinute în acel modul.
Programarea orientată pe obiecte este o metoda de implementare în care programele sunt
organizate ca şi colectii de obiecte ce cooperează între ele, fiecare obiect reprezentând instanţa
unei clase; fiecare clasă aparţine unei ierarhii de clase, clasele fiind unite prin relaţii de
mostenire.
Un limbaj de programare care oferă support pentru utilizarea claselor şi a obiectelor, dar care
nu are implementat mecanismul relaţiilor de mostenire între clase este un limbaj de programare
bazat pe obiecte.
Programarea bazată pe clase şi pe obiecte, care nu face uz de relaţia de mostenire se mai numeşte
programare cu tipuri de date abstracte.

108
Concepte fundamentale în programarea orientată/bazată pe obiecte
Fiecare model de programare impune un anumit stil de programare aflat în stransă legatură cu
conceptele fundamentale ce caracterizeaza respectivul model.
Programarea orientată spre obiecte reprezintă un stil de programare nou, care utilizează
concepte şi construcţii noi, modalităţi noi de structurare a datelor, de tratare a colecţiilor de date
şi chiar de programare [4], [14].
Ea impune în centrul atenţiei obiectele, care definesc ca unităţi de program independente, care
cuprind laolaltă datele şi procedurile ce acţionează asupra obiectelor.
Obiectele au posibilitatea de a interacţiona prin intermediul mesajelor primate sau transmise
de acestea.
În cazul programării orientate spre obiecte procedurile de prelucrare şi datele sunt încapsulate
în obiecte, asupra cărora se aplică mesaje care modelează comportamentul sistemului.
Obiectele cu caracteristici similare se grupează în clase; o clasă are capacitatea de a se crea
prin moştenirea claselor şi procedurilor deja existente, ajungându-se chiar la biblioteci de clase
pentru aplicaţiile specifice.
O caracteristică deosebit de importantă a programării orientate spre obiecte o constituie
posibilitatea organizării tipurilor de date abstracte, într-o structură de subtipuri în care se
moştenesc date şi operaţii de la un tip la subtipurile incluse, iar obiectele create pentru o aplicaţie
pot fi utilizate pentru realizarea unor aplicaţii complexe.
Principalele concepte ce stau la baza programării orientate pe obiecte sunt:
- Abstractizarea;
- Încapsularea;
- Modularitatea;
- Ierarhizarea.
Abstractizarea este una din căile fundamentale prin care noi, oamenii, ajungem să înţelegem şi
să cuprindem complexitatea. O abstracţie bună este cea care scoate în evidenţă toate detaliile
semnificative pentru perspectiva din care este analizat un obiect, suprimând sau estopând toate
celelalte caracteristici ale obiectului.
Încapsularea constă în separarea aspectelor externe ale unui obiect care sunt accesibile
altor obiecte, de aspectele interne ale obiectului, care sunt ascunse celorlalte obiecte. Utilizatorul

109
obiectului poate accesa doar anumite operaţii, numite publice, în timp ce alte attribute şi operaţii
rămân inaccesibile(acestea se numesc private).
Încapsularea este un concept complementar abstractizării.
Încapsularea este procesul de compartimentare a elementelor care formează structura şi
comportamentul unei abstractiuni; incapsularea serveşte la separarea interfetei ”contractuale” de
implementare a acesteia.
Ierarhizarea reprezintă o ordonare a abstracţiunilor.
Cele mai importante ierarhii de clase în paradigma obiectuală sunt:
- ierarhia de clase(relaţie de tip “is a”);
- ierarhia de obiecte(relaţie de tip”part of”);
- moştenirea(ierarhia de clase).
Moştenirea defineşte o relatie între clase în care o clasa împărtăşeşte structura şi comportarea
definită în una sau mai multe clase.
Evenimentul este acţiunea săvârşită de sitem atunci când operatorul solicită executarea unei
comenzi. Evenimentele pot fi declanşate interactiv sau programat.
Modele ale proiectării şi programării pe obiecte
Modelul obiectual - este descrierea structurii elastice a obiectelor, claselor de obiecte, a
operaţiilor şi atributelor precum şi a legăturilor şi a relaţiilor dintre ele.
O diagramă de obiecte este un graf ale cărui noduri sunt obiectele şi ale cărui arce sunt
relaţiile dintre obiecte.
Modelul dinamic - descrie interacţiunea dintre obiecte şi este focalizat pe aspecte ce se
schimbă în timp, deoarece orice obiect are un ciclu de viaţă cu un punct de pornire şi unul de
sfârşit; modelul dinamic descrie acest ciclu de viaţă, ce se întâmplă de-a lungul sau şi cum este
influenţat obiectul.
O diagramă de stare este un graf ale cărui noduri sunt stările şi ale cărui arce sunt
tranzacţiile între stări, cauzate de evenimente externe.
Modelul functional - descrie transformările valorilor datelor precizând sursa, transformările şi
destinaţia lor.
O diagramă de flux de date este un graf ale cărui noduri sunt procesele şi ale cărui arce
sunt fluxurile de date.

110
4.2 Algoritmi pentru generarea automată a simbolurilor informaţionale folosite în
proiectarea dispozitivelor mecanice utilizând VBA

În viziunea AutoCAD noţiunea de obiect este utilizată în mod nativ, chiar dacă iniţial nu
în sensul „clasic”. O dată cu apariţia versiunii 14, datorită introducerii interfeţei programate de
tip VBA (Visual Basic for Applications), specifice mediului Microsoft Windows, abordarea
obiectuală a căpătat o consistenţă mai evidentă, prin definirea precisă de obiecte specifice
(Application, „Preferences, Document, Blocks, Block, Dictionaries, Dictionary, DimStyles,
DimStyle, Groups, Group, Layers, Layer, Linetypes, Linetype, RegisteredApps, RegisteredApp,
SelectionSets, SelectionSet, TextStyles, TextStyle, UCSs, UCS, Views, View, Plot, Utility,
ModelSpaceEntities, PaperSpaceEntities, 3dFace, 3dPoly, 3dSolid, Arc, Attribute, AttributeRef,
BlockRef, Circle, DimAligned, DimAngular, DimDiametric, DimOrdinate, DimRadial,
DimRottated, Ellipse, Hatch, Leader, LWPolyline, Line, Mtext, Point, Polyline, Polimesh,
Raster, Ray, Region, Shape, Solid, Spline, Text, Tolerance, Trace, Xline, PViewPort), dispunând
de propriile proprietăţi expuse şi metode expuse, dar chiar şi de evenimente la care utilizatorul
poate răspunde prin rutine particulare de tratare.
În cazul proiectelor AutoCAD [4] demersul orientat spre obiecte ar putea prezenta interes
îndreptat în direcţia realizării de biblioteci de repere complexe (construite pornind de la
primitivele / entităţile AutoCAD , sau de la alte repere de rang inferior), într-o manieră mai
generală decât existenţa blocurilor AutoCAD, în sensul că ar permite:
- particularizarea lor pe baza şi a unor considerente structurale;
- operaţii de manipulare ‘nestandard‘ în sens AutoCAD.
Este necesar să se semnaleze faptul că în viziunea VBA noţiunile de moştenire şi
polimorfism nu sunt implementate într-o manieră ‘clasică‘ din punctul de vedere al standardelor
abordării orientate pe obiecte [3],[23],[24]. O asemenea viziune este mai corect implementată în
medii C++ , care oferă posibilitatea de a construi componente ce permit lucrul cu obiecte
‘CustomObject‘, într-un mod mai transparent pentru utilizator.

Iată modul de implementare a clasei Cerc în VBA:


111
'Clasa Cerc
Private m_x As Integer
Private m_y As Integer
Private m_r As Single
Public Event PozitiaNoua(x As Integer, y As Integer, r As Single)
Private Sub ClasaInitializare()
m_x = 0
m_y = 0
m_r = 500
End Sub
Public Property Get Xcoord() As Integer
Xcoord = m_x
End Property
Public Property Let Xcoord(ByVal vNewValue As Integer)
m_x = vNouaValoare
End Property
Public Property Get Ycoord() As Integer
Ycoord = m_y
End Property
Public Property Let Ycoord(ByVal vNouaValoare As Integer)
m_y = vNouaValoare
End Property
Public Sub Show()
'Deseneza cercul
frmCerc.Circle (m_x, m_y), m_r
End Sub
Public Sub Muta(Dist)
'MutaCercul
m_x = m_x + Dist
m_y = m_y + Dist
RaiseEvent PozitiaNoua(m_x, m_y, m_r)
Call Show
End Sub

112
Fig.93 Crearea clasei Cerc în VBA

Pentru generarea simbolului PUNCT fosim un sistem de axe de coordinate XOYşi fixăm în
mod convenabil coordonatele entităţilor din care este compus acest simbol (linie, cerc) Fig. 94.
În mod analog se procedează cu toate celelalte simboluri.

R0.5
2

1 2 3 X

Fig. 94 Coordonatele simbolului PUNCT


Sub SimbPunct()
'Declarare variabile
Dim lineObj As AcadLine

113
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
' Definirea tipului de umplere
patternName = "CYLINDER"
PatternType = acPreDefinedGradient
bAssociativity = True
Set hatchObj = ThisDrawing.ModelSpace.AddHatch(PatternType, patternName, bAssociativity,
acGradientObject)
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 15: center(1) = 10: center(2) = 0
radius = 0.5
'Crearea cercului
Set outerLoop(0) = ThisDrawing.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate
ThisDrawing.Regen True
startPoint(0) = 10#: startPoint(1) = 10#: startPoint(2) = 0#
endPoint(0) = 20#: endPoint(1) = 10#: endPoint(2) = 0#
' Crearea liniei
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
ZoomAll
End Sub

Sub SimbDreapta()
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
' Definirea tipului de umplere
patternName = "CYLINDER"
PatternType = acPreDefinedGradient
bAssociativity = True
Set hatchObj = ThisDrawing.ModelSpace.AddHatch(PatternType, patternName, bAssociativity,
acGradientObject)
Dim outerLoop(0 To 0) As AcadEntity
hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate
ThisDrawing.Regen True
center(0) = 2#: center(1) = 2#: center(2) = 0#
radius = 0.5
' Crearea cercului
Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
ThisDrawing.Application.ZoomAll
Dim numberOfRows As Long

114
Dim numberOfColumns As Long
Dim numberOfLevels As Long
Dim distanceBwtnRows As Double
Dim distanceBwtnColumns As Double
Dim distanceBwtnLevels As Double
numberOfRows = 1
numberOfColumns = 2
numberOfLevels = 1
distanceBwtnRows = 0
distanceBwtnColumns = 2
distanceBwtnLevels = 0
Dim retObj As Variant

retObj = circleObj.ArrayRectangular(numberOfRows, numberOfColumns, numberOfLevels, distanceBwtnRows,


distanceBwtnColumns, distanceBwtnLevels)
startPoint(0) = 1#: startPoint(1) = 2#: startPoint(2) = 0#
endPoint(0) = 5#: endPoint(1) = 2#: endPoint(2) = 0#
' Crearea liniei
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
ZoomAll
End Sub

Sub SimbPlan()

Dim circleObj As AcadCircle


Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2#: center(1) = 2#: center(2) = 0#
radius = 0.5
Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
ThisDrawing.Application.ZoomAll
Dim numberOfRows As Long
Dim numberOfColumns As Long
Dim numberOfLevels As Long
Dim distanceBwtnRows As Double
Dim distanceBwtnColumns As Double
Dim distanceBwtnLevels As Double
numberOfRows = 1
numberOfColumns = 3
numberOfLevels = 1
distanceBwtnRows = 0
distanceBwtnColumns = 2
distanceBwtnLevels = 0
Dim retObj As Variant
.........
retObj = circleObj.ArrayRectangular (numberOfRows, numberOfColumns, numberOfLevels, distanceBwtnRows,
distanceBwtnColumns, distanceBwtnLevels)
startPoint(0) = 1#: startPoint(1) = 2#: startPoint(2) = 0#
endPoint(0) = 5#: endPoint(1) = 2#: endPoint(2) = 0#
' Crearea liniei
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
ZoomAll
End Sub
.........
Sub Iesire()
End

115
End Sub
În urma rulării modulelor pentru PUNCT, DREAPTA şi PLAN obţinem simbolurile
dorite Fig.95.

Fig. 95 Rezultate în urma rulării modulelor de program punct, dreapta, plan

În continuare se prezintă modul de obţinere a altor simboluri prin rularea unor module de
program.
De exemplu în urma rulării modulelor de program bolt cilindric, dorn cilindric obţinem
rezultatele din Fig. 96.

Fig. 96 Rezultate în urma rulării modulelor de program bolt cilindric, dorn cilindric

În urma rulării modulelor de program punct mobil obţinem rezultatele din Fig. 97.

116
Fig. 97 Rezultate în urma rulării modulelor de program punct mobil

Pachetele de programe pe care le-am realizat folosind limbajele C++, C++, VB şi VBA, sunt
specializate pentru generarea simbolurilor informaţionale folosite în proiectarea dispozitivelor
mecanice..

În VBA toate simbolurile generate se vor salva într-un fişier cu extensia *.dwg care
constituie o colecţie de blocuri (fiecare simbol constituind un block).

4.3 Algoritm de crearea automată a unui block şi a unei colecţii de blocuri


Modulele VBA destinate generării simbolurilor informaţionale utilizate în proiectarea
dispozitivelor mecanice sunt capabile să genereze automat întreg spaţiu de simboluri cunoscute.

Sunt două moduri de utilizare a simbolurilor generate:

- fără salvarea lor într-un fişier special;


- cu salvarea lor într-un fişier special.

Cazul fără salvarea lor într-un fişier special este folosit atunci când cunoaştem schema de
orientare şi fixare.

Cazul în care nu cunoaştem schema de orientare şi fixare vom salva simbolurile într-un fişier
special numit colecţie de blocuri. În acest fel putem să manipulăm mai uşor fiecare block
(simbol) din colecţie în funcţie de anumite condiţii impuse.

117
4.3.1 Modul de realizare a unui block folosind mediul AutoCad

Crearea blocurilor-utilizator. Comenzile BLOCK, BMAKE şi WBLOCK.


Pentru a facilita manipularea unitară a unui grup de obiecte, AutoCAD permite definirea
blocurilor. Un bloc este un obiect complex care include o colecţie de alte obiecte din desen,
simple sau complexe, formând împreună un singur obiect [13],[23],[24]. Utilizarea blocurilor
este comodă şi măreşte viteza de desenare.

AutoCAD cunoaşte două tipuri de blocuri: cele definite opţional de utilizator (“User defined
blocks”), recognoscibile după nume, şi cele anonime (“Unnamed blocks”), create de program la
cotare, haşurare, folosirea unor imagini PostScript.

Comenzile BLOCK, şi BMAKE definesc blocuri-utilizator. Comenzile sunt accesibile prin


tastare, sau din meniul pull-down “Draw”, linia “Block”, opţiunea “Make…”. Pe bara de unelte

“Draw” sunt reprezentate prin butonul . Ca răspuns la aceste comenzi, programul deschide o
casetă de dialog, intitulată “Block Definition” (fig. 5.8), care solicită numele acordat blocului, un
punct de referinţă al acestuia, în raport cu care va fi ulterior manipulat, şi apoi obiectele incluse
în bloc (fig. 8). Componentele blocului pot să dispară ca obiecte de sine stătătoare din desen, sau
nu. Blocul astfel definit se salvează odată cu desenul şi se regăseşte oricând în lista de
blocuri-utilizator din desen.

Rubrica “Name” a casetei de definire a blocurilor permite înscrierea numelui atribuit


blocului. Lista derulantă a rubricii redă denumirile tuturor blocurilor definite anterior. Numele
unui bloc poate să conţină max. 255 de caractere. Pot fi utilizate spaţii. Numele nu trebuie să
coincidă cu un cuvânt rezervat al AutoCAD.

118
Fig. 98 Caseta de dialog “Block Definition”

Punct de inserţie

Punct de inserţie

Fig. 99  Exemple de blocuri-utilizator


Grupul de opţiuni “Base point” este destinat specificării punctului de referinţă al blocului, fie
prin înscrierea coordonatelor în casetă, fie prin indicarea grafică a acestuia, după apăsarea
butonului Pick point.

Grupul de opţiuni “Objects” este destinat alegerii din desen a obiectelor ce urmează să
compună blocul. Obiectele originale indicate la crearea blocului pot fi păstrate în desen ca atare,
prin opţiunea Retain, pot fi convertite într-o instanţiere (inserare) a blocului respectiv, prin
opţiunea Convert to block, sau pot fi eliminate din desen după crearea blocului, prin opţiunea
Delete.

119
Grupul de opţiuni “Preview icon” permite generarea unei imagini de tip icon pentru blocul
definit, care poate fi utilă în aplicaţia internă “AutoCAD Design Center”. După selectarea
obiectelor din bloc, imaginea este vizibilă în casetă.

Rubrica “Insert units” stabileşte unităţile liniare la care este considerat blocul de către
aplicaţia “AutoCAD Design Center”.

Rubrica “Description” permite menţionarea unei scurte descrieri în cuvinte a blocului, astfel
ca un viitor utilizator să îi perceapă rapid destinaţia. Nu este obligatorie descrierea blocului, dar
este recomandată.

Un bloc creat de utilizator poate să includă alte astfel de blocuri, cu condiţia de a nu se


autoinclude (de exemplu, la o redefinire a blocului “b”, acesta să nu conţină chiar o inserare a
sa).

Pentu a modifica definiţia unui bloc-utilizator, din caseta “Block Definition” se deschide
lista numelor de blocuri existente în desen şi se reformulează opţiunile. În final, AutoCAD
avertizează asupra existenţei unei definiţii anterioare a blocului în cauză.

Un bloc-utilizator poate fi salvat şi ca desen independent, deci ca fişier “*.dwg”, cu ajutorul


comenzii WBLOCK. Cerinţele acestei comenzi sunt în majoritatea lor asemănătoare cu ale
comenzii BLOCK.

120
4.3.2 Modul de realizare automată a unui block folosind VBA şi mediul AutoCad
Algoritm de creare a unui block:
CreareBlock()
Declarare variabile
Se introduce numele blocului
Dacă există atunci dăm un alt nume
Setare (iniţializare) punct de inserare
Caută
dacă blocul există deja
dacă da
dă un mesaj
Altfel
crează blocul

Următorul exemplu de program ce are la bază algoritmul de mai sus, crează un block sau o
colecţie de blocuri specificându-se un nume şi punctul de inserţie:

Public Sub AddBlock()

Dim dblOrigin(2) As Double

Dim objBlock As AcadBlock

Dim strNume As String

" introduce numele blocului

strName = InputBox("Nume block: ")

If "" = strNume Then Exit Sub

" initializare origine

dblOrigin(0) = 0: dblOrigin(1) = 0: dblOrigin(2) = 0

"cauta existent blocului

On Error Resume Next

Set objBlock = ThisDrawing.Blocks.Item(strName)

If Not objBlock Is Nothing Then

MsgBox "exista"

Exit Sub

121
End If

" crearea blocului

Set objBlock = ThisDrawing.Blocks.Add(dblOrigin, strName)

" entitatea cerc

objBlock.AddCircle dblOrigin, 10

End Sub

Exemplu de colecţie de blocuri rezultat în urma rulării programului (fig.100):

Fig. 100 Fişier cu colecţie de blocuri

122
4.4 Algoritmi pentru generarea automată a simbolurilor informaţionale folosite în
proiectarea dispozitivelor mecanice utilizând VB

Având o formă geometrică putem să descompunem aceste simboluri în părţi elementare cu


stabilirea coordonatelor punctelor ce le determină geometric. Pentru aceasta fiecărui simbol i se
ataşează un sistem de axe XOY ca în fig. 101.

y
y

x x

-10 5 10
-10 5 10

y
y

-10 -7.5 -2.5 2.5 7.5 10


x -10 10
-5 0 5
y

-5 -2.5 0 2.5 5
x

Fig. 101 Exemple de simboluri informaţionale cu sistemul de axe ataşat

123
Pentru câteva din simbolurile informaţionale prezentăm codul de generare scris în VB, folosind
ca mediu grafic AutoCad-ul. Pentru a se înţelege mai uşor codul program am abordat o scriere a
acstuia, respectând programarea structurată.
Exemplul 1

-2.5

-10 2.5 10

Algoritmul în pseudocod
Se definesc variabilele
Se crează legătura cu AutoCad
Desenarea unei linii din (-10,0,0) in (-2.5,0,0)
Desenarea unei linii din (2.5,0,0) in (10,0,0)
Desenarea cercului

Programul sursă
Private Sub Command1_Click()
Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace
'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double
'Cerc
Dim obCerc As AcadCircle
Dim punctCentru(2) As Double
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace
'Desenarea unei linii din (-10,0,0) in (-2.5,0,0)
' Punctul de inceput
punctInceput(0) = -10
punctInceput(1) = 0

124
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -2.5
punctSfarsit(1) = 0
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea unei linii din (2.5,0,0) in (10,0,0)
' Punctul de inceput
punctInceput (0) = 2.5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 10
punctSfarsit(1) = 0
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput1, punctSfarsit1)
obLinie.Update
'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 0
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 2.5)


obCerc.Update
obAcad.ZoomExtents
End Sub

Exemplul 2

-10 2.5 10

Algoritmul în pseudocod
Se definesc variabilele
Se crează legătura cu AutoCad
Desenarea unei linii din (-10,0,0) in (-2.5,0,0)
Desenarea unei linii din (2.5,0,0) in (10,0,0)
Desenarea cercului plin

Programul sursă
Private Sub Command1_Click()
Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace
'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double
'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long

125
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace
'Desenarea unei linii din (-10,0,0) in (-2.5,0,0)
' Punctul de inceput
punctInceput(0) = -10
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -2.5
punctSfarsit(1) = 0
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea unei linii din (2.5,0,0) in (10,0,0)
' Punctul de inceput
punctInceput(0) = 2.5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 10
punctSfarsit(1) = 0
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput1, punctSfarsit1)
obLinie.Update
'Desenarea cercului plin
patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' Hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' Crearea conturului pentru hasura care este un cerc


Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 0: center(1) = 0: center(2) = 0

126
radius = 2.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' punerea hasurii in contur


hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 3

-10 -7.5 -2.5 2.5 7.5 10


x

Algoritmul în pseudocod
Se definesc variabilele
Se crează legătura cu AutoCad
Desenarea unei linii din (-10,0,0) in (-7.5,0,0)
Desenarea unei linii din (-2.5,0,0) in (2.5,0,0)
Desenarea unei linii din (7.5,0,0) in (10,0,0)
Desenarea cercului plin cu centrul în ( -5,0)
Desenarea cercului plin cu centrul în (5,0)

altfel:
Se definesc variabilele
Se crează legătura cu AutoCad
Desenare linie din (-10,0,0) in (10,0,0)
Desenarea cercului plin cu centrul în ( -5,0)
Definire vector de deplasare din ( -5,0) în ( 5,0)
Copierea cercului plin în punctul (5,0)

În acest caz deosebirea constă în trasarea linei fară segmentarea ei, iar cel de-al doilea cerc plin
se copiază. Mai întâi se defineşte variabila de copiere apoi vectorul de deplasare.

Programul sursă folosind prima variantă


Private Sub Command1_Click()
Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace
'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

127
'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace
'Desenarea unei linii din (-10,0,0) in (-7.5,0,0)
' Punctul de inceput
punctInceput(0) = -10
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -7.5
punctSfarsit(1) = 0
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea unei linii din (-2.5,0,0) in (2.5,0,0)
' Punctul de inceput
punctInceput(0) = -2.5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 2.5
punctSfarsit(1) = 0
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (7.5,0,0) in (10,0,0)


' Punctul de inceput
punctInceput(0) = 7.5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 10
punctSfarsit(1) = 0
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

128
'Desenarea cercului plin
patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura (modelSpace)


Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' crearea conturului pentru hasura care in cazul nostru este un cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = -5: center(1) = 0: center(2) = 0
radius = 2.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
' hasura
hatchObj.AppendOuterLoop (outerLoop)
center(0) = 5: center(1) = 0: center(2) = 0
radius = 2.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' pune hasura in contur


hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 4

x
-10 10
-5 0 5

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace
'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String

129
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace
'Desenarea unei linii din (-10,0,0) in (10,0,0)
' Punctul de inceput
punctInceput(0) = -10
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 10
punctSfarsit(1) = 0
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' Create the outer boundary for the hatch (a circle)


Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = -5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura
hatchObj.AppendOuterLoop (outerLoop)

center(0) = 0: center(1) = 0: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

130
' contur si hasura
hatchObj.AppendOuterLoop (outerLoop)

center(0) = 5: center(1) = 0: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' contur si hasura


hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 5

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace
' cerc

Dim obCerc As AcadCircle


Dim punctCentru(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True

131
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 0
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 5)


obCerc.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' contur
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' contur si hasura


hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

132
Exemplul 6

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace
' cerc

Dim obCerc As AcadCircle


Dim punctCentru(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 0
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 5)


obCerc.Update

'Desenarea cercului plin

133
patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' contur (cerc)


Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' contur si hasura


hatchObj.AppendOuterLoop (outerLoop)

center(0) = -5: center(1) = 0: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' contur si hasura


hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

y
Exemplul 7

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace
' cerc

134
Dim obCerc As AcadCircle
Dim punctCentru(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 0
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 5)


obCerc.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' contur
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

135
center(0) = -5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 0: center(1) = 5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 0: center(1) = -5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents y
End Sub

Exemplul 8
x

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

' cerc

Dim obCerc As AcadCircle


Dim punctCentru(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then

136
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea unei linii din (-5,0,0) in (5,0,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 0
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 0
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 5)


obCerc.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

137
hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 9

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

' cerc

Dim obCerc As AcadCircle


Dim punctCentru(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent

138
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea unei linii din (-5,0,0) in (5,0,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 0
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 0
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 5)


obCerc.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = -5: center(1) = 0: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

139
Exemplul 10

x
-5 -2.5 0 2.5 5

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

140
'Desenarea unei linii din (0,0,0) in (-5,9,0)
' Punctul de inceput
punctInceput(0) = 0
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -5
punctSfarsit(1) = 9
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (0,0,0) in (5,9,0)


' Punctul de inceput
punctInceput(0) = 0
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 9
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = -2.5: center(1) = 4.5: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 2.5: center(1) = 4.5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

141
hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 11

x
-5 -2.5 0 2.5 5

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent

142
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea unei linii din (0,0,0) in (-5,9,0)


' Punctul de inceput
punctInceput(0) = 0
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -5
punctSfarsit(1) = 9
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (0,0,0) in (5,9,0)


' Punctul de inceput
punctInceput(0) = 0
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 9
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = -1.94: center(1) = 3.5: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 1.94: center(1) = 3.5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

143
center(0) = -3.89: center(1) = 7: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 3.89: center(1) = 7: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 12 10

x
-5
0 5

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then

144
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea unei linii din (-5,0,0) in (5,0,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 0
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (-5,0,0) in (-5,10,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -5
punctSfarsit(1) = 10
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (5,0,0) in (5,10,0)


' Punctul de inceput
punctInceput(0) = 5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 10
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor

145
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 0: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 13 10

x
-5
0 5

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then

146
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea unei linii din (-5,0,0) in (5,0,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 0
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (-5,0,0) in (-5,10,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -5
punctSfarsit(1) = 10
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (5,0,0) in (5,10,0)


' Punctul de inceput
punctInceput(0) = 5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 10
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor

147
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 0: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = -5: center(1) = 5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 5: center(1) = 5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 14 y

10

x
-5
0 5

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

148
'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea unei linii din (-5,0,0) in (5,0,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 0
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (-5,0,0) in (-5,10,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -5
punctSfarsit(1) = 10
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (5,0,0) in (5,10,0)


' Punctul de inceput
punctInceput(0) = 5
punctInceput(1) = 0
punctInceput(2) = 0

149
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 10
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = -2.5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 2.5: center(1) = 0: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 15

150
Private Sub Command1_Click()
Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea unei linii din (-5,0,0) in (0,9,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 0
punctSfarsit(1) = 9
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

151
'Desenarea unei linii din (5,0,0) in (0,9,0)
' Punctul de inceput
punctInceput(0) = 5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 0
punctSfarsit(1) = 9
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenare arc

Dim arcObj As AcadArc


Dim centerPoint(0 To 2) As Double
Dim radius As Double
Dim startAngleInDegree As Double
Dim endAngleInDegree As Double

' cerc
centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
radius = 5#
startAngleInDegree = 180#
endAngleInDegree = 0#

' in radiani
Dim startAngleInRadian As Double
Dim endAngleInRadian As Double
startAngleInRadian = startAngleInDegree * 3.141592 / 180#
endAngleInRadian = endAngleInDegree * 3.141592 / 180#

' arc
Set arcObj = obDoc.ModelSpace.AddArc(centerPoint, radius, startAngleInRadian, endAngleInRadian)

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
'Dim radius As Double
center(0) = -5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 0: center(1) = -5: center(2) = 0


radius = 1.5

152
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 5: center(1) = 0: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 16

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0

153
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea unei linii din (-5,0,0) in (0,9,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 0
punctSfarsit(1) = 9
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (5,0,0) in (0,9,0)


' Punctul de inceput
punctInceput(0) = 5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 0
punctSfarsit(1) = 9
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenare arc

Dim arcObj As AcadArc


Dim centerPoint(0 To 2) As Double
Dim radius As Double
Dim startAngleInDegree As Double
Dim endAngleInDegree As Double

' cerc
centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
radius = 5#
startAngleInDegree = 180#
endAngleInDegree = 0#

' in radian
Dim startAngleInRadian As Double
Dim endAngleInRadian As Double
startAngleInRadian = startAngleInDegree * 3.141592 / 180#
endAngleInRadian = endAngleInDegree * 3.141592 / 180#

' arc
Set arcObj = obDoc.ModelSpace.AddArc(centerPoint, radius, startAngleInRadian, endAngleInRadian)

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura

154
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
'Dim radius As Double
center(0) = -5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 0: center(1) = -5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 5: center(1) = 0: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = -2.5: center(1) = 4.5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

center(0) = 2.5: center(1) = 4.5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 17

155
Private Sub Command1_Click()
Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea unei linii din (-5,0,0) in (0,9,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 0
punctSfarsit(1) = 9

156
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (5,0,0) in (0,9,0)


' Punctul de inceput
punctInceput(0) = 5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 0
punctSfarsit(1) = 9
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenare arc

Dim arcObj As AcadArc


Dim centerPoint(0 To 2) As Double
Dim radius As Double
Dim startAngleInDegree As Double
Dim endAngleInDegree As Double

' cerc
centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
radius = 5#
startAngleInDegree = 180#
endAngleInDegree = 0#

' in radian
Dim startAngleInRadian As Double
Dim endAngleInRadian As Double
startAngleInRadian = startAngleInDegree * 3.141592 / 180#
endAngleInRadian = endAngleInDegree * 3.141592 / 180#

' arc
Set arcObj = obDoc.ModelSpace.AddArc(centerPoint, radius, startAngleInRadian, endAngleInRadian)

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
'Dim radius As Double
center(0) = -5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

157
' hasura si contur
hatchObj.AppendOuterLoop (outerLoop)

center(0) = 5: center(1) = 0: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' hasura si contur


hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

'Desenarea unei linii din (0,-5,0) in (-1.5,-7,0)


' Punctul de inceput
punctInceput(0) = 0
punctInceput(1) = -5
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -1.5
punctSfarsit(1) = -7
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (-1.5,-7,0) in (1.5,-7,0)


' Punctul de inceput
punctInceput(0) = -1.5
punctInceput(1) = -7
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 1.5
punctSfarsit(1) = -7
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea unei linii din (1.5,-7,0) in (0,-5,0)
' Punctul de inceput
punctInceput(0) = 1.5
punctInceput(1) = -7
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 0
punctSfarsit(1) = -5
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea unei linii din (0,-7,0) in (0,-17,0)
' Punctul de inceput
punctInceput(0) = 0
punctInceput(1) = -7
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 0
punctSfarsit(1) = -17
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)

158
obLinie.Update
obDoc.Regen True
obAcad.ZoomExtents
End Sub

Exemplul 18 (generare simbol + transformarea lui în block cu nume)


Private Sub Command1_Click()

Dim obAcad As AcadApplication


Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea unei linii din (-5,0,0) in (5,0,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit

159
punctSfarsit(0) = 5
punctSfarsit(1) = 0
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (-5,0,0) in (-5,10,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -5
punctSfarsit(1) = 10
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (5,0,0) in (5,10,0)


' Punctul de inceput
punctInceput(0) = 5
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 10
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' Creare hasura


Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc

160
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 0: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

' cerc plin


hatchObj.AppendOuterLoop (outerLoop)

center(0) = -5: center(1) = 5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

hatchObj.AppendOuterLoop (outerLoop)

center(0) = 5: center(1) = 5: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents

‘crearea simbolului în block

'Declarare variabile
Dim objSS As AcadSelectionSet
Dim varBase As Variant
Dim objBlock As AcadBlock
Dim strName As String
Dim strErase As String
Dim varEnt As Variant
Dim objSourceEnts() As Object
Dim varDestEnts As Variant
Dim dblOrigin(2) As Double
Dim intI As Integer

On Error Resume Next


obDoc.SelectionSets.Item("TempSSet").Delete
Set objSS = obDoc.SelectionSets.Add("TempSSet")
objSS.SelectOnScreen

'nume bloc
With obDoc.Utility
.InitializeUserInput 1
strName = .GetString(True, vbCr & "Nume bloc: ")
.InitializeUserInput 1
varBase = .GetPoint(, vbCr & "punctual de baza: ")
.InitializeUserInput 1, "Yes No"

161
strErase = .GetKeyword(vbCr & "stergeti desenul initial [Da/Nu]? ")
End With

' Sistemul de axe


dblOrigin(0) = 0: dblOrigin(1) = 0: dblOrigin(2) = 0

' creare bloc


Set objBlock = obDoc.Blocks.Add(dblOrigin, strName)

ReDim objSourceEnts(objSS.Count - 1)
For intI = 0 To objSS.Count - 1
Set objSourceEnts(intI) = objSS(intI)
Next

' copiaza blocul


varDestEnts = obDoc.CopyObjects(objSourceEnts, objBlock)

' daca dorim sa lasam desenul initial


For Each varEnt In varDestEnts
varEnt.Move varBase, dblOrigin
Next

' daca stergem orinalul


If strErase = "Yes" Then
objSS.Erase
End If
objSS.Delete
End Sub

Exemplul 19 (Crearea unui sistem de blocuri )

162
Private Sub Command1_Click()
Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace
'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double
'Alta Linie
Dim punctInceput1(2) As Double
Dim punctSfarsit1(2) As Double
'Cerc
Dim obCerc As AcadCircle
Dim punctCentru(2) As Double
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace
'Desenarea unei linii din (-10,0,0) in (-2.5,0,0)
' Punctul de inceput
punctInceput(0) = -10
punctInceput(1) = 0
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -2.5

163
punctSfarsit(1) = 0
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea unei linii din (2.5,0,0) in (10,0,0)
' Punctul de inceput
punctInceput1(0) = 2.5
punctInceput1(1) = 0
punctInceput1(2) = 0
'Punctul de sfarsit
punctSfarsit1(0) = 10
punctSfarsit1(1) = 0
punctSfarsit1(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput1, punctSfarsit1)
obLinie.Update
'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 0
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 1.5)


obCerc.Update
obAcad.ZoomExtents

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace
'Desenarea unei linii din (-10,20,0) in (-2.5,20,0)
' Punctul de inceput
punctInceput(0) = -10
punctInceput(1) = 20
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -2.5
punctSfarsit(1) = 20
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea unei linii din (2.5,20,0) in (10,20,0)

164
' Punctul de inceput
punctInceput1(0) = 2.5
punctInceput1(1) = 20
punctInceput1(2) = 0
'Punctul de sfarsit
punctSfarsit1(0) = 10
punctSfarsit1(1) = 20
punctSfarsit1(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput1, punctSfarsit1)
obLinie.Update
'Desenarea cercului plin
patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 0: center(1) = 20: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents

'Desenarea unei linii din (-10,40,0) in (-7.5,40,0)


' Punctul de inceput
punctInceput(0) = -10
punctInceput(1) = 40
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = -7.5
punctSfarsit(1) = 40
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea unei linii din (-2.5,40,0) in (2.5,40,0)
' Punctul de inceput
punctInceput(0) = -2.5
punctInceput(1) = 40
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 2.5
punctSfarsit(1) = 40
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea unei linii din (7.5,40,0) in (10,40,0)

165
' Punctul de inceput
punctInceput(0) = 7.5
punctInceput(1) = 40
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 10
punctSfarsit(1) = 40
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' Create the associative Hatch object in model space


Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)

Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")


Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2
' Create the outer boundary for the hatch (a circle)

center(0) = -5: center(1) = 40: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
' Append the outerboundary to the hatch object, and display the hatch
hatchObj.AppendOuterLoop (outerLoop)
center(0) = 5: center(1) = 40: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents

'Desenarea unei linii din (-10,60,0) in (10,60,0)


' Punctul de inceput
punctInceput(0) = -10
punctInceput(1) = 60
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 10
punctSfarsit(1) = 60
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)

166
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2
' Create the outer boundary for the hatch (a circle)

center(0) = -5: center(1) = 60: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

hatchObj.AppendOuterLoop (outerLoop)

center(0) = 0: center(1) = 60: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

hatchObj.AppendOuterLoop (outerLoop)

center(0) = 5: center(1) = 60: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents
'Declarare variabile
Dim objSS As AcadSelectionSet
Dim varBase As Variant
Dim objBlock As AcadBlock
Dim strName As String
Dim strErase As String
Dim varEnt As Variant
Dim objSourceEnts() As Object
Dim varDestEnts As Variant
Dim dblOrigin(2) As Double
Dim intI As Integer

On Error Resume Next


obDoc.SelectionSets.Item("TempSSet").Delete
Set objSS = obDoc.SelectionSets.Add("TempSSet")
objSS.SelectOnScreen

'nume system de bloc


With obDoc.Utility
.InitializeUserInput 1
strName = .GetString(True, vbCr & "Nume bloc: ")
.InitializeUserInput 1
varBase = .GetPoint(, vbCr & "punctual de baza: ")
.InitializeUserInput 1, "Yes No"
strErase = .GetKeyword(vbCr & "stergeti desenul initial [Da/Nu]? ")
End With

' Sistemul de axe


dblOrigin(0) = 0: dblOrigin(1) = 0: dblOrigin(2) = 0

' creare bloc


Set objBlock = obDoc.Blocks.Add(dblOrigin, strName)

ReDim objSourceEnts(objSS.Count - 1)
For intI = 0 To objSS.Count - 1
Set objSourceEnts(intI) = objSS(intI)

167
Next

' copiaza blocul


varDestEnts = obDoc.CopyObjects(objSourceEnts, objBlock)

' daca dorim sa lasam desenul initial


For Each varEnt In varDestEnts
varEnt.Move varBase, dblOrigin
Next

' daca stergem orinalul


If strErase = "Yes" Then
objSS.Erase
End If
objSS.Delete

End Sub

Exemplul 20 (Crearea unui sistem de blocuri )

Private Sub Command1_Click()


Dim obAcad As AcadApplication
Dim obDoc As AcadDocument
Dim obMSpace As AcadModelSpace
' cerc

Dim obCerc As AcadCircle


Dim punctCentru(2) As Double

'Cerc plin
Dim hatchObj As AcadHatch
Dim patternName As String

168
Dim PatternType As Long
Dim bAssociativity As Boolean
'Crearea unei noi sesiuni de lucru AutoCAD
On Error Resume Next
Set obAcad = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set obAcad = CreateObject("AutoCAD.Application")
If Err Then
MsgBox "Nu se poate realiza conexiunea cu AutoCAD" & _
"(se poate ca sa nu fi instalat pe calculator)!"
Exit Sub
End If
End If
On Error GoTo 0
'Aplicatia AutoCAD devine vizibila
obAcad.Visible = True
'Se maximizeaza fereastra aplicatiei
obAcad.WindowState = acMax
'Documentul curent
Set obDoc = obAcad.ActiveDocument
'Spatiul de modelare al documentului curent
Set obMSpace = obDoc.ModelSpace

'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 0
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 5)


obCerc.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Dim col1 As AcadAcCmColor, col2 As AcadAcCmColor
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)

169
hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents

'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 15
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 5)


obCerc.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)

Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")


Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' Create the outer boundary for the hatch (a circle)

center(0) = 5: center(1) = 15: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)

center(0) = -5: center(1) = 15: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)

hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents

'Desenarea cercului
punctCentru(0) = 0

170
punctCentru(1) = 30
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 5)


obCerc.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2
center(0) = 5: center(1) = 30: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)

center(0) = -5: center(1) = 30: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)

center(0) = 0: center(1) = 35: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)

center(0) = 0: center(1) = 25: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents

'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double

171
'Desenarea unei linii din (-5,45,0) in (5,45,0)
' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 45
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 45
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 45
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 5)


obCerc.Update

'Desenarea cercului plin


patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True

' hasura
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2
center(0) = 5: center(1) = 45: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents

'Desenarea unei linii din (-5,60,0) in (5,60,0)


' Punctul de inceput
punctInceput(0) = -5
punctInceput(1) = 60

172
punctInceput(2) = 0
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 60
punctSfarsit(2) = 0

'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update

'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 60
punctCentru(2) = 0

Set obCerc = obMSpace.AddCircle(punctCentru, 5)


obCerc.Update
'Desenarea cercului plin
patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True
Set hatchObj = obDoc.ModelSpace.AddHatch(PatternType, patternName, bAssociativity, acGradientObject)
Set col1 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Set col2 = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call col1.SetRGB(0, 0, 0)
Call col2.SetRGB(0, 0, 0)
hatchObj.GradientColor1 = col1
hatchObj.GradientColor2 = col2

' cerc

center(0) = 5: center(1) = 60: center(2) = 0


radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)
center(0) = -5: center(1) = 60: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)

hatchObj.Evaluate

obDoc.Regen True
obAcad.ZoomExtents

'Declarare variabile
Dim objSS As AcadSelectionSet
Dim varBase As Variant
Dim objBlock As AcadBlock
Dim strName As String

173
Dim strErase As String
Dim varEnt As Variant
Dim objSourceEnts() As Object
Dim varDestEnts As Variant
Dim dblOrigin(2) As Double
Dim intI As Integer

On Error Resume Next


obDoc.SelectionSets.Item("TempSSet").Delete
Set objSS = obDoc.SelectionSets.Add("TempSSet")
objSS.SelectOnScreen

'nume bloc
With obDoc.Utility
.InitializeUserInput 1
strName = .GetString(True, vbCr & "Nume bloc: ")
.InitializeUserInput 1
varBase = .GetPoint(, vbCr & "punctual de baza: ")
.InitializeUserInput 1, "Yes No"
strErase = .GetKeyword(vbCr & "stergeti desenul initial [Da/Nu]? ")
End With

' Sistemul de axe


dblOrigin(0) = 0: dblOrigin(1) = 0: dblOrigin(2) = 0

' creare bloc


Set objBlock = obDoc.Blocks.Add(dblOrigin, strName)

ReDim objSourceEnts(objSS.Count - 1)
For intI = 0 To objSS.Count - 1
Set objSourceEnts(intI) = objSS(intI)
Next

' copiaza blocul


varDestEnts = obDoc.CopyObjects(objSourceEnts, objBlock)

' daca dorim sa lasam desenul initial


For Each varEnt In varDestEnts
varEnt.Move varBase, dblOrigin
Next

' daca stergem orinalul


If strErase = "Yes" Then
objSS.Erase
End If
objSS.Delete
End Sub
În continuare vom da un exemplu de generare a unui simbol informaţional (forma geometrică),
căruia îi ataşăm şi informaţii (număr grade de libertate, număr rotaţii, număr translaţii).

174
Algoritmul în pseudocod:
Generare simbol informaţional
Ataşare informaţii
Transformare în block

Propunem următoarele variante de ataşare a informaţiilor simbolului informaţional:


1. prin ataşarea informaţiilor pe forma grafică a simbolului generat
2. scrierea informaţiilor într-un tabel asociat formei grafice a simbolului

Pentru exemplificare am efectuat o aplicaţie numită “Exemplu de ataşare a informaţiilor pe SI”


(fig. 102)

Fig. 102 Modul de ataşare a informaţiilor în mod automat


Aplicaţia funcţionează în felul următor:
- pentru generarea simbolului se apasă pe butonul <<Generare simbol>>;

175
Fig.103 Exemplu de generarea unui symbol

- pentru ataşare informaţii se apasă pe butonul <<atasare informatii>>

Fig. 104 Exemplu de ataşare de informaţii pe simbol


Pseudocodul modulului de ataşare a informaţiilor este:
Legătura cu AutoCad-ul
Declaraţii variabile
Definirea de informaţii
Stabilire înălţime text informaţii

176
Stabilire puncte de inserţie informaţiei
Stabilire valori informaţii
Aducerea informaţiilor pe forma grafică a simbolului
În continuare prezentăm un modul de program cu ajutorul căruia generăm un grup de simboluri,
iar pentru fiecare simbol din acest grup îi ataşăm informaţii. Macheta este prezentată în fig. 105.
Pseudocodul este următorul:
Crearea unei sesiuni de lucru Autocad
Declararea variabilelor
Generare grup de simboluri
Pentru fiecare simbol ataşează informaţii
Pentru fiecare simbol crează câte un bloc
Salvare

Fig. 105 Exemplu de ataşare a informaţiilor fiecărui simbol din grup


În continuare se prezintă o aplicaţie care generează un grup de simboluri care aparţin unui tip de
suprafaţă cu ataşarea informaţiilor pentru fiecare simbol din grup.
La apăsarea pe butonul << Generare grup de simboluri>> se selecteză tipul de suprafaţă după
care se generează simbolurile corespunzătoare (fig. 106).

177
Pentru ataşarea informaţiilor pe fiecare simbol din grup se apasă butonul al doilea care poartă un
nume sugestiv.Programul are posibilitatea să creeze blocuri cu simbolurile generate şi să le
salveze.

Rezultate în urma rulării programului:

Fig. 106 Generare grup simboluri

Fig. 107 Ataşare informaţii

178
4.5 Extragerea informaţiilor ataşate simbolului pentru a putea fi folosite în alte aplicaţii
Valorile informaţiilor ataşate unui simbol informaţional pot fi extrase în baze de date externe al
cărui format poate fi:

- .cvs fişier text, câmpurile de informaţii fiind separate prin virgulă


- .mdb fişier Microsoft Acces
- .xls fişier Microsoft Excel
- . txt fişier text, câmpurile de informaţii fiind separate prin spaţii

Pentru aceasta s-a creat un modul de program în VB cu legătură AutoCad şi Excel

Programul propus extrage valorile informaţiilor într-un fişier .xls

Fig. 108 Extrage valorile informaţiilor într-un fişier .xls

În urma apăsării pe butonul << Extragere de informatii de pe SI>>, se citesc datele (informaţiile)
de pe simbol şi se scriu într-o foaie de calcul de tip Excel (fig. 109 ).

179
Fig. 109 Exemplu de fişier cu informaţiile ataşate simbolului
Pseudocodul modulului de program prezentat:
Legătura cu AutoCad-ul
Legătura cu Microsoft Excel sau cu Microsoft Acces
Citire informaţii de pe simbol
Scrierea informaţiilor într-un fişier Excel sau Acces
Afişare foaie Excel sau Acces
În continuare se prezintă utilizarea acestei aplicaţii în vederea extragerii de informaţii dintr-un
grup de simboluri (fig. 110 şi fig. 111).

Fig. 110 Extragere informaţii

180
Fig. 111 Informaţiile puse într-un fişier Excel
4.6 Aplicaţii folosind generatorul de simboluri

Fig.112 Proiectare machetă generator simboluri


Fie în spaţiu de desenare simbolul bolţ mobil. Acest simbol este format din două elemente
(block-uri). Ne propunem să-l transformăm în con mobil. Transformarea se face prin înlocuirea:

simbolului cu simbolul .

181
Aplicaţia funcţionează astfel: se alege din listă un simbol pe care îl înlocuim cu cel selectat
din lista derulantă, înlocuirea având loc după apăsarea butonului <<Înlocuieste>>, fig. 113 şi fig.
114.

Fig. 113 Exemplu de generare a simbolului con mobil


În acest mod se pot genera toate simbolurile folosite la proiectarea schemelor de orientare şi
fixare .

Fig . 114 Exemplu de generare a simbolului bolţ mobil

182
4.7 Construirea matricei de simboluri informaţionale
Avem spaţiul simbolurilor informaţionale. Cunoaştem faptul că pentru fiecare tip de
suprafaţă i se ataşează simbolurile corespunzătoare. Se pune problema cum accesăm simbolurile
generate pentru fiecare tip de suprafaţă.
Deci avem tipuri de suprafeţe. Fiecărei suprafeţe îi ataşăm un tabel ce conţine simbolurile acelui
tip de suprafeţe. Se impune codificarea tipurilor de suprafeţe.
Propun următoarea codificare a suprafeţelor conform tabelului de mai jos:
Codificare suprafeţe
Nr. crt. Tip suprafaţă CodSUP
1. Suprafaţă plană exterioară întinsă SPEI
2. Suprafaţă plană exterioară îngustă SPEIn
3. Suprafaţă plană exterioară redusă bidimensional SPERBd
4. Suprafaţă cilindrică exterioară lungă SCEL
5. Suprafaţă cilindrică exterioară scurtă SCES
6. Suprafaţă cilindrică interioară lungă SCIL
7. Suprafaţă cilindrică interioară scurtă SCIS
8. Suprafaţă conică exterioară lungă SKEL
9. Suprafaţă conică exterioară scurtă SKES
10. Suprafaţă conică interioară lungă SKIL
11. Suprafaţă conică interioară scurtă SKIS
12. Suprafaţă sferică exterioară SSfE
13. Suprafaţă sferică interioară SSfI
14. Suprafeţe de ghidare pe două suprafeţe plane lungi exterioare SG2SPLE
15. Suprafeţe de ghidare pe două suprafeţe plane lungi interioare SG2SPLI
16. … …

Tabelele ataşate fiecărui tip de suprafaţă sunt:


SPEI
codSimb DenSimbol NrGrade t r
10 3cepsau3plac 3 2 1

SPEIn
codSimb DenSimbol NrGrade t r
20 2cepsau2plac 2 1 1

SPERBd
codSimb DenSimbol NrGrade t r
30 1cepsau1plac 1 1 0

183
SCEL
codSimb DenSimbol NrGrade t r
100 BucsaLungaFixa 4 2 2
200 PrismaLunga 4 2 2
300 MecAutocentrcuBucsaElasticacuFalci 4 2 2
400 MecAutocentrcuPrismeLungi 4 2 2

SCES
codSimb DenSimbol NrGrade t r
500 BucsaScurtaFixa 2 2 0
600 PrismaScurta 2 2 0
700 PrismaScurtaMobila 1 1 0
800 MecAutocentrant 2 2 0
900 MecAutocentrcuPrismeScute 2 2 0

SCIL
codSimb DenSimbol NrGrade t r
1000 BoltLungFix 4 2 2
1100 MecAutocentrant 4 2 2
1200 ConExtScurtFix 3 3 0
1300 ConExtFrezatFix 2 1 1

SCIS
codSimb DenSimbol NrGrade t r
2000 BoltCilScurtFix 2 2 0
2100 BoltCilScurtMobil 2 2 0
2200 BoltScurtFrezatFix 1 1 1
2300 BoltScurtMobilFrezat 1 1 1
2400 MecAutocentrant 2 2 0
2500 ConExtFrezatMobil 1 1 1
2600 ConExtScurtMobil 2 2 0

SKEL
codSimb DenSimbol NrGrade t r
3000 BucsaConicaFixaLunga 5 3 2
3100 BucsaConicaLungaMobila 4 2 2

SKES
codSimb DenSimbol NrGrade t r
4000 BucsaConicaFixaScurta 3 3 0
4100 BucsaConicaScutaMobila 2 2 0

184
SKIL
codSimb DenSimbol NrGrade t r
5000 ConExtFixLung 5 3 2
5100 ConExtLungMobil 4 2 2

SKIS
codSimb DenSimbol NrGrade t r
6000 ConExtFixScurt 3 3 0
6100 ConExtScurtMobil 2 2 0

SSfE
codSimb DenSimbol NrGrade t r
7000 BucsaConicaFixa 3 3 0
7100 BucsaConicaMobila 2 2 0
7200 InelCilFix 3 3 0
7300 InelCilMobil 2 2 0
7400 InelCilfix 2 2 0
7500 ReazemcuSupSfIntFix 3 3 0
7600 MecCentrarecuFalci 1 1 0
7700 MecAutoCentcuConuriInt 3 3 0

SSfI
codSimb DenSimbol NrGrade t r
8000 ReazemFixcuSSfExt 3 3 0
8100 ReazemMobilcuSSfExt 2 2 0

SG2SPLE
codSimb DenSimbol NrGrade t r
9000 GhidajLateralLung 2 1 1
9100 MecCentrarecuFalci 2 1 1

SG2SPLE
codSimb DenSimbol NrGrade t r
10000 PanaLunga 2 1 1

Aceste tabele sunt fişiere externe de tip .xls. având numele tipurilor de suprafeţe. Apelarea
fişierelor se face prin nume.

185
Aceste fişiere pot fi concentrate într-un singur fişier de tip .xls memorate în zone diferite ale foii
de calcul, fiecare zona poartă numele tipului de suprafaţă. Apelarea fişierului se face după
numele fişierului şi numele zonei.

Am creat matricea cu simbolurile în funcţie de tipul suprafeţei. Fiecărei suprafeţe îi ataşăm


un tabel ce conţine simbolurile acelui tip de suprafeţe. Luând în considerare aceste aspecte am
construit un algoritm ce generează matricea cu simboluri. Această matrice de simboluri se
foloseşte în cazul în care este nevoie ca pe schiţa piesei semifabricat să punem simbolurile.

4.8 Concluzii
- S-a făcut o clasificare a reazemelor deoarece aceasta dă corespondent de simboluri.
- Am făcut o referire la esenţa simbolizării informaţionale, deoarece forma grafică,
explicită, frecvent utilizată direct pe schiţele pieselor semifabricat şi forma codificată
implicită este necesară pentru prelucrarea automată a datelor cu ajutorul calculatorului.
- Am făcut exploatarea arhitecturală, pentru că de aici încep ideile de cum să generez
simbolurile informaţionale.
- Arhitectura de simbol înseamnă forme de bază ( Fig. 91) (fără marcaj ; ) adică de
forme geometrice. Al doilea element numărul de puncte: goale (1,2,3), pline (1,2, ...,6).
Se pune problema: cum plasăm bulina (marcajul)?. Grupuri de posibilităţi:
Dacă linie atunci putem să plasăm 1,2,3 marcaje (buline)
Dacă cerc atunci putem să plasăm 1,2,4 marcaje (buline)
........
Continuând cu acest raţionament adică făcând o corelaţie între forma de bază şi numărul
de buline acceptate de o formă construim toate simbolurile.
La fel şi cu operatorii grafici (Fig. 92).
Deci dacă am un fişier de forme, un fişier de buline şi operatorii în alt fişier, atunci pot să
construiesc toate posibilităţile de forme ale simbolurilor (noutate).
Pentru aceasta am prezentat modalităţile de reprezentare a obiectelor grafice cu ajutorul
calculatorului, folosind VBA pentru AutoCad care permit acest mod de programare şi
am proiectat algoritmi pentru generarea automată a acestora.
În C++, obiectele grafice pot fi stocate în fişiere tip text, ceea ce dă posibilitatea
creării sau editării obiectului cu ajutorul unui editor de texte. Operaţia de încărcare are ca

186
efect citirea obiectului din fişierul extern şi transformarea ei în zona de date a aplicaţiei.
Obiectul încărcat devine obiect grafic curent. Operaţia de salvare adaugă descrierea
obiectului grafic curent la sfârşitul fşierului extern.
Algoritmul este:
Deschide fişierul care conţine descrierea obiectului grafic
Deschide fişierul în care se salvează descrierea obiectului grafic curent
Transferă descrierea următorului obiect grafic din fişierul de intrare în obiectul grafic curent
Transferă descrierea obiectului grafic curent la sfârşitul fişierului de ieşire
Transpune pe ecran descrierea obiectului grafic curent (desen)

În cazul proiectelor AutoCAD demersul orientat spre obiecte ar putea prezenta interes
îndreptat în direcţia realizării de biblioteci de repere complexe (construite pornind de la
primitivele / entităţile AutoCAD , sau de la alte repere de rang inferior), într-o manieră mai
generală decât existenţa blocurilor AutoCAD, în sensul că ar permite:
- particularizarea lor pe baza şi a unor considerente structurale;
- operaţii de manipulare ‘nestandard‘ în sens AutoCAD.
Filozofia de lucru în VBA este aceeaşi ca şi cea utilizată la limbajele C++, Object Pascal,
însă este necesar să se semnaleze faptul că în viziunea VBA noţiunile de moştenire nu sunt
implementate într-o manieră ‘clasică‘ din punctul de vedere al standardelor abordării orientate pe
obiecte. O asemenea viziune este mai corect implementată în medii C++ , care oferă posibilitatea
de a construi componente ce permit lucrul cu obiecte „CustomObject”, într-un mod mai
transparent pentru utilizator.
Am construit algoritmi pentru generarea automată a tutoror simbolurilor cu salvarea lor într-
un fişier ca blocuri individuale pe care l-am numit colecţie de blocuri. Pentru transformarea unui
simbol în blocuri şi inserarea lor într-un fişier cu extensia .dwg (colecţia de blocuri) am proiectat
un algoritm care să realizeze în mod automat acest lucru. Această formă de memorare permite
apelul oricărui simbol pentru construirea automată a schemelor de orientare şi fixare a
dispozitivelor mecanice.
Am creat matricea cu simbolurile în funcţie de tipul suprafeţei. Fiecărei suprafeţe îi ataşăm
un tabel ce conţine simbolurile acelui tip de suprafeţe. Luând în considerare aceste aspecte am
construit un algoritm ce generează matricea cu simboluri. Această matrice de simboluri se
foloseşte în cazul în care este nevoie ca pe schiţa piesei semifabricat să punem simbolurile.

187
Capitolul V. GENERAREA AUTOMATĂ A REAZEMELOR PENTRU
CONSTRUCŢIA DISPOZITIVELOR

5. Modelul general constructiv funcţional al blocurilor

Analizând reazemele se constată, după o trecere în revistă a diferitelor variante constructive


ale acestora (conform clasificării generale a reazemelor), că în general putem considera un
reazem ca fiind format dintr-un număr de blocuri-funcţionale (BCF)k (k=1,2,3, …, n).
Fie modelul general constructiv funcţional al blocurilor Fig. 115.

Fig. 115 Modelul general constructiv funcţional al blocurilor

Orice reazem, la modul general e o reuniune de blocuri constructive funcţionale (BCF) k cu


legi de compoziţie specifice (LCS)k (k=1,2,3, …, n). analizăm pe rând fiecare bloc constructiv-
funcţional:
BCF1 – intră în contact direct cu suprafaţa de orientare a piesei semifabricat (PSF); este
alcătuit din toate reazemele fixe simple (de tip bolţ, cep, dorn, etc) singulare, adică e blocul activ
de orientare (BAO).
BCF2 – poate fi:
- Bloc de reglare şi blocare (BRB) atunci când sunt reazeme reglabile;
- Bloc de autoreglare (BAR), când sunt reazeme autoreglabile;
- Bloc de mobilitate (BM) când sunt reazeme mobile.
BCF3 – bloc de legătură la corpul dispozitivului (BLCD)

188
Având modelul general constructiv funcţional putem să generăm toate tipurile de reazem.
De exemplu se poate ajunge la modelul informaţional constructiv-funcţional al reazemului
fix, prin eliminare din modelul general constructiv funcţional al blocurilor BCF 2 şi BCF3
figura 116.

Fig. 116 Modelul constructiv funcţional al reazemului fix

Deci în funcţie de păstrarea sau eliminarea unui bloc constructiv-funcţional din modelul
general constructive-funcţional se obţine mulţimea de reazeme.
Pentru a rezolva problema informatic trebuie să parcurgem următorii paşi:
Pasul 1. Avem desenul reazemului multifuncţional în mediul de proiectare AutoCad.
Pasul 2. Transformarea elementelor componete ale reazemului în blocuri (transformarea
desenului iniţial al reazemului în desen inteligent). Deci necesită proiectarea unui algoritm.
Pasul 3. Obţinerea din modelul general, al tuturor reazemelor. La fel necesită proiectarea
unui algoritm.

5.1 Algoritm de generare automată a entităţilor (componentelor) dintr-un desen de


ansamblu în blocuri

Pentru rezolvarea pasului 2 propun următorul algoritm:


Pentru fiecare desen (componentă) viitor block
Selectează toate entităţile din care este desenată o componentă
Specifică punctul de bază (constituie modul de legătură cu celelalte)
Atribuie un nume
Salvare într-un fişier
Next

În urma rulării acestui program se transformă toate componentele în blocuri ce pot fi


utilizate.

189
Acest cod este pus sub butonul <<Creaza Blocuri>> (Fig. 117 ).
Propun în continuare un program pentru vizualizarea individuală a blocurilor din desen precum
şi crearea structurii de blocuri al întregului reazem după structura modelului general constructiv-
funcţional (Fig. 6.1). Macheta (interfeţa) programului este redată în (Fig. 6.3 ).

Fig. 117 Interfaţa pentru crearea blocurilor, vizualizarea lor precum şi crearea unei structure de
blocuri

Aplicaţia este scrisă în Visual Basic parcurgând următoarele etape:


 Proiectarea interfeţei cu utilizatorul;
 Setarea proprietăţilor, formelor şi controalelor;
 Scrierea codului;
 Testarea aplicaţiei realizate.
Utilizatorul este pus în situaţia să aleagă unul din elementele din mulţime predefinită (mulţimea
elementelor de reazem).

190
Am folosit două controale List Box ce conţin opţiunile posibile, afişate pe o singură coloană în
care elementele listei (reazemele) sunt dispuse una sub alta. Elementele prezentate în control List
Box sunt memorate intern într-un tablou (vector). Afişarea elementelor în control se face
alfabetic deoarece am creat o procedură specială de sortare după nume. Controlul List Box
memorează într-un alt tablou, care din elementele sale sunt selectate.
Dintre proprietăţile controlului List Box am folosit: BackColor, Column, DragItem,
DragMode, Enabled, Index, Left, List, ListCount, ListIndex, Parent, Sorted, TabIndex, Visible,
Tag, Text, Width.
Din evenimentele specifice acestui control am folosit: Click, DblClick, GotFocus, KeyDown,
KeyPress, LostFocus, MouseDown, MouseMove, MouseUp.
Cele mai folosite evenimente sunt Click şi DblClick. Evenimentul tastatură KeyPress l-am folosit
pentru poziţionarea (automată) în listă.
Dintre metodele controalelor List Box am folosit: AddItem, Clear, Drag, Move, Refresh,
SetFocus.
Operaţiile pe care le-am folosit asupra controlului List Box sunt următoarele:
 Adăugarea de elemente în listă (prin apelul metodei AddItem), care permite adăugarea
automată pe poziţia (indicele) care conservă ordinea alfabetică a opţiunilor din listă;
 Adăugatrea de informaţie auxiliară (numerică) asociată elementelor listei în tabelul
ItemData, prin folosirea proprietăţii NewIndex, imediat după adăugarea elementului;
NewIndex conţine indicele elementului cel mai recent introdus în listă:
ItemData(NewIndex) conţine codul numeric asociat opţiunii List(NewIndex), cea mai
recent introdusă în listă cu metoda AddItem;
 Sortarea listei – prin setarea proprietăţii Sorted pe True la proiectare;
 Ştergerea unui element din listă (precizat prin indicele său), prin apelul metodei
RemoveItem;
 Ştergerea tuturor elementelor din listă, prin apelul metodei Clear;
 Accesarea elementului selectat – prin proprietatea Text;
 Accesarea informaţiei numerice ataşate unui element din listă (precizat prin indicele său),
folosind proprietatea ItemData;
 Determinarea numărului de elemente din listă, folosind proprietatea ListCount;

191
 Determinarea poziţiei elementului cel mai recent selectat prin folosirea proprietăţii
ListIndex; dacă ListIndex =-1‚ atunci nu există element selectat
 Determinarea tuturor elementelor selectate prin testarea proprietăţii Selected; un element
de indice I este selectat dacă Selected(I) = True;
 Crearea unei casete cu listă cu o singură coloană şi cu defilare pe orizontală, prin setarea
proprietăţii Columns pe 1.
Din simpla parcurgere a listei de operaţii de mai sus rezultă complexitatea controlului ListBox.
Pentru colimarea imaginii reazemului selectat am folosit controlul Mcad2DSPreview.
Pentru iniţierea acţiunilor am folosit butoanele constituite din controlul standard
CommandButton.
Butoanele de comandă folosite sunt obiecte din clasa CommandButton şi permit iniţierea de
acţiuni prin apăsare. Ele au o formă dreptunghiulară cu colţurile rotunjite, fondul gri (implicit) şi
conţin în interior un text care explică acţiunea iniţiată la apăsare.
Pentru controalele CommandButton am folosit proprietăţile: BackColor, Cancel, Caption,
Default, DragIcon, DragMode, Enabled, FontBold, FontItalic, FontName, FontSize, Height,
Index, Left, Name, Parent, TabIndex, Tag, Top, Value, Visible, Width.
Dintre evenimentele specifice controalelor Command Button am folosit: Click, DragDrop,
DragOver, GotFocus, KeyDown, KeyPress, KeyUp, LostFocus, MouseDown, MouseMove,
MouseUp.
Evenimentul uzual este Click care semnifică apăsarea butonului folosind mousul. Utilizatorul
are senzaţia vizuală de apăsare, controlul schimbându-şi aspectul prin aplatizare. Declanşarea
acestui eveniment este provocată de una din următoarele acţiuni:
 Click Mouse pe buton;
 Apăsarea tastelor Enter sau bară de spaţiu;
 Apăsarea tastei de accesare a butonului (alt+litera subliniată din denumirea butonului);
 Setarea proprietăţii Value si True în cod.
Deci :

- Se crează blocurile ce sunt părţi componente ale reazemului, cu ajutorul algoritmului


descris;

192
- Se crează structura reazemului, ce constituie un arbore, cu rădăcina întregul desen al
reazemului (părintele), iar nodurile constituie părţile componente ale reazemului
(blocurile). Practic am format un nomenclator al reazemului cu o structură arborescentă
(butonul Creare structura);
- Pentru fiecare componentă a reazemului (noduri), dar şi pentru întregul desen de
ansamblu (părinte), am constituit toate vederile (Fig.118) asfel încât să fie complet
definite (butonul Creare vederi).

Fig. 118 Sistemul European de dispunere a proiecţiilor


O modificare într-o vedere a unei component este evidenţiată în toate celelalte vederi.
- Butonul Creare folder este folosit pentru salvarea elementelor într-un folder care are ca
denumire părintele iar conţinut nodurile.
Rezultatele în urma rulării programului:
Avem reazemul multifuncţional Fig. 119:

Fig. 119 Rezem multifuncţional


193
În urma rulării programului folosind interfaţa din Fig. 117 se obţin de exemplu următoarele
blocuri simple Fig. 120:

Fig. 120 Fişierul cu colecţia de blocuri

Deci putem creea baze de date pentru BCF1 – care intră în contact direct cu suprafaţa de
orientare a piesei semifabricat (PSF); alcătuit din toate reazemele fixe simple (de tip bolţ, cep,
dorn, etc) singulare, adică e blocul activ de orientare (BAO);
Bază de date pentru BCF2 – care poate fi:
- Bloc de reglare şi blocare (BRB) atunci când sunt reazeme reglabile;
- Bloc de autoreglare (BAR), când sunt reazeme autoreglabile;
- Bloc de mobilitate (BM) când sunt reazeme mobile.
Bază de date pentru BCF3 – care este bloc de legătură la corpul dispozitivului (BLCD)
Având modelul general constructiv funcţional putem să generăm toate tipurile de reazem.

5.2 Algoritm pentru generarea automată a tuturor reazemelor având la bază modelul
general constructiv-funcţional

Pentru rezolvarea pasului 3 am proiectat macheta (Fig. 121) şi următorul algoritm:

Alege din lista de BCF numele blocului care trebuie înlocuit


Alege din lista Înlocuieşte cu BCF numele noului bloc
Efectuează înlocuirea
Scrirea algoritmului pentru căutarea şi înlocuirea de blocuri s-a efectuat în limbajul VB
parcurgând etapele: proiectarea interfeţei cu utilizatorul, setarea proprietăţilor, formelor şi
controalelor, scrierea codului, testarea aplicaţiei realizate.

194
Fig. 121 Căutare şi înlocuire blocuri constructive funcţionale
La construcţia machetei am folosit în plus controalele Combo Box care constituie o combinaţie
între casetele cu listă şi casetele cu text, moştenind din proprietăţile şi comportamentul ambelor
tipuri de controale.
Proprietăţile folosite pentru controlul Combo Box sunt: BackColor, DragIcon, DragMode,
Enabled, Index, Left, List, ListCount, ListIndex, TabIndex, Visible, Tag, Text, Width.
De asemenea evenimentele folosite pentru controlul Combo Box sunt: Click, DblClick,
GotFocus, KeyDown, KeyPress, LostFocus.
Metodele controalelor Combo Box folosite sunt: AddItem, Clear, Drag, Move, Refresh, SetFocus.
Rezultate obţinute în urma rulării programului propus:
Interfaţa programului este cea din Fig. 122.
Avem desenul din Fig. 119 şi ne propunem să înlocuim :
boltul conic scurt cu bolţul sferic Fig. 123 ;
bolţul sferic cu bolţul conic interior Fig. 124;
bolţul conic interior cu cep de reazem Fig. 125.

195
În mod asemănător pot să fac orice înlocuire.

Fig. 122 Macheta creare reazeme

Fig. 123 Desenul după înlocuire

196
Fig. 124 Rezultate în urma schimbării bolţului sferic cu bolţul conic interior

197
Fig. 125 Rezultatul în urma înlocuirii bolţului conic interior cu un cep de reazem

198
Acest program realizat are o arie mai mare de aplicabilitate:
1. În domeniul echipamentelor tehnologice;
2. În domeniul construcţiilor;
3. În domeniul electronicii şi electrotehnicii;
4. În domeniul aeronauticii etc.
În continuare descriu aplicabilitatea lui în domeniul echipamentelor tehnologice.
Se cunoaşte faptul că dispozitivele pentru orientarea şi fixarea pieselor în vederea prelucrării
pe maşini-unelte, sunt echipamente tehnologice alcătuite ca şi maşinile-unelte, din subansamble
cu rol bine precizat şi, în ultima descompunere, din piese (organe de maşini).
Analizând un echipament tehnologice se constată, după o trecere în revistă a diferitelor
variante constructive ale acestora, că în general putem considera ca şi în cazul reazemelor, ca
fiind formate dintr-un număr de blocuri-funcţionale.(BCF)k (k=1,2,3, …, n).
În acest caz putem considera că, un posibil model general constructiv în cazul
echipamentelor tehnologice ar arăta ca în Fig. 126

BCF 1 BCF5

BCF2 BCF6

BCF3 BCF7

BCF4 BCF8
BCF9

Fig. 126 Modelul general constructiv al echipamentelor tehnologice

Şi în acest caz putem admite că, orice echipament tehnologic, la modul general e o reuniune
de blocuri constructiv funcţionale (BCF) k cu legi de compoziţie specifice (LCS)k (k=1,2,3, …,
n). Luând spre analiză pe rând fiecare bloc constructiv-funcţional al echipamentului tehnologic,
putem spune că, fiecare bloc poate să conţină şi subblocuri (blocuri imbricate).
Deci în funcţie de păstrarea sau înlocuirea unui bloc constructiv-funcţional din modelul general
constructiv-funcţional se obţine mulţimea de echipamente tehnologice.
Având la bază softul utilizat pentru generarea mulţimii reazemelor, s-a proiectat un soft care este
capabil să obţină mulţimea de echipamente tehnologice.

199
Programul are macheta din fig. 121. şi care are următoarele funcţii:
1. De înlocuirea unui element modular din structura unui sistem cu un alt element modular;
2. De inserarea unui element modular în structura unui sistem;
3. De stergerea unui element modular din structura unui sistem;
4. Un element înlocuit sau inserat poate fi rotit sau scalat.
Algoritm Înlocuire:
alege din lista de elemente modulate modulul care trebuie înlocuit
dacă trebuie rotit atunci introduceti unghiul de rotire
dacă trebuie scalat atunci introduceţi mărimile de scalare
alege din lista <Înlocuieste elmente modulate cu:>, numele noului modul
efectuează înlocuirea
Algoritm Inserare:
alege din lista de elemente modulate modulul care trebuie inserat
dacă trebuie rotit atunci introduceti unghiul de rotire
dacă trebuie scalat atunci introduceţi mărimile de scalare
efectuează inserarea
Algoritm Ştergere:
alege din lista de elemente modulate modulul care trebuie şters
efectuează ştergerea
În continuare folosind acest program dăm un exemplu de configurare a unei structuri.
Se porneşte de la structura iniţială (fig. 129) şi în urma utilizării programului obţinem pe rând
structurile din fig. 130, fig. 131, fig. 132.
Dacă avem structura din fig. 132 putem să obţinem structurile din fig. 129, fig. 130, fig. 1131,
folosind funcţiile programului de înlocuire şi stergere.
Prin rularea aceluiaşi program s-au obtinut şi configuraţiile din fig. 133, fig. 134 şi fig. 135
Exemplificare: avem structura din fig. 129 şi dorim să obţinem structura din fig. 130.
Se procedează astfel:
Pas 1. - Selectăm opţiunea <Inserarea unui grup/grupuri de elemente modulate> (fig. 128);
Pas 2. - Din <Lista de elemente modulate > selectăm „Cap multiax cu axe reglabile”;
Pas 3. – Se acţionează cu ajutorul mouse-lui butonul Inserare.
Suntem invitaţi să indicăm punctul de inserare în structura iniţială, după care obiectul ales se
inserează.
Menţionăm că lista conţine numele unor elemente modulate care prin codul scris îi este asociat
Structuri
finale
un desen (block) cu acelaşi
Structurinume.
iniţiale
Elementele din listă sunt memorate intern într-un tablou (vector).
Program
Creare
Structuri Vizualizar
e
Elemente 200
modulate

Listare
Fig. 127 Schema bloc

Fig. 128 Macheta programului

201
Fig. 129 Structura iniţială

Fig.130 Structura după inserarea capului multiax cu axe reglabile cu cardane

202
Fig.131 Structura după inserarea capului multiax cu axe reglabile

Fig.132 O variantă de structură

203
Un alt exemplu de utilizare al programului pentru inlocuirea sculelor pornind de la
structura generală a unui echipament tehnologic flexibil:

Fig. 133 Structura generală a unui echipament tehnologic flexibil

Fig. 134 Exemplu de echipament tehnologic generat din cel general(s-a schimbat 22 cu 26)

204
Fig. 135
Exemplu
de
echipament tehnologic generat din cel general
(s-a schimbat 8 cu 25)

5.3 Concluzii

- S-a pornit de la modelul general constructiv-funcţional;


- S-a proiectat algoritmul de descompunere automată în blocuri a reazemului
multifuncţional;
- S-a proiectat un algoritm care să genereze automat structura arborescentă de blocuri (în
toate vederile), ţinând seama de modelul general constructiv-funcţional;
- S-a proiectat un algoritm de formare automată al tuturor reazemelor prin păstrarea sau
înlocuirea unor blocuri;
- S-a prezentat rezultatele în urma rulării fiecărui program;
- Programele realizate au caracter mult mai general, deoarece au utilitate în generarea
automată a: elementelor de reazem, structurilor pentru construcţia dispozitivelor de
orientare şi fixare, structurilor pentru realizarea echipamentelor mecanice, structurilor
pentru configurarea şi reconfigurarea maşinilor-unelte etc;

205
BIBLIOGRAFIE

1. Albeanu, G., Grafică pe calculator, Editura Universităţii din Bucureşti, 2001.


2. Albeanu, G., Algoritmi şi limbaje de programare, Editura România de Mâine, 2000.
3. Anderson, D.C., Chang, T.C.: Automated Process Planning Using Object-Oriented Feature
Based Design. În: Advanced Geometric Modelling for Engineering Applications, North Holland,
Amsterdam, 1990.
4. Antal, T., A., Visual Basic pentru ingineri, Editura RISOPRINT, 2003,
5. Atanasiu, A., Algoritmi. Reprezentare şi clasificare, Gazeta de Informatică. Nr. 1-2/1991, 1-
3/1992
6. Andonie, R., Gârbacea, I., Algoritmi fundamentali, o perspectivă C++, Ed. Libris, 1995
7. Babă A., Babă, I., Vlase, A. , Automatic generation of the informational symbols and their
insertion on the sketch of the tool, a XXXII-a Conferinţa Naţională de Mecanica Solidelor,
Universitatea din Piteşti, 11-13 septembrie 2008
8. Babă, A., Babă, I., Costea, A., Rachieru, N., Method of Automatic Generation of Props for
Device Construction, a XXXII-a Conferinţa Naţională de Mecanica Solidelor, Universitatea din
Piteşti, 11-13 septembrie 2008
9. Babă, I., Babă A., Vlase, A., An algorithm and program to establish and to geometrize the
determinant conditions from the sketch of the tool for the considered operation, a XXXII-a
Conferinţa Naţională de Mecanica Solidelor, Universitatea din Piteşti, 11-13 septembrie 2008
10. Babă, A., Stadiul actual al cercetărilor şi realizărilor în domeniul proiectării reazemelor din
sistemul organologic al dispozitivelor de orientare şi fixare a semifabricatelor, UPB, 2005
11. Babă, A., Cercetări privind materializarea simbolurilor informaţionale de la forma grafică la
forma fizică a elementelor de reazem din sistemul organologic al dispozitivelor de orientare şi
fixare a semifabricatelor, UPB, 2006
12. Babă, A., Rezultate privind proiectarea asistată de calculator a elementelor de reazem din
sistemul organologic al dispozitivelor de orientare şi fixare a semifabricatelor, UPB, 2008
13. Babă, I., Babă, A., s.a. Limbajul Pascal Culegere de problem Vol I, Vol II, Editura MAN-
DELY, Bucureşti, 2004
14. Bazil, P., Dezvoltarea rapidă a aplicaţiilor cu Visual Basic, Editura GIL, 2003
15. Bazil, P., Interfete Windows, PC-Report, Decembrie 1996.
16. Bazil, P., Visual Basic în serial, PC-Report, ianuarie 1997 - octombrie 1998.
17. Belousov, A.P., Proektirovanie stanocinâh prispoblenii, Moskva: Vâsşaia şkola, 1980
18. Bragaru, A., Pănuş, V., Dulgheru, L., Armeanu, A. - SEFA - DISROM. Sistem de metodă,
Teoria şi practica proiectării dispozitivelor, pentru prelucrări pe maşini-unelte, Editura Tehnică,
Bucureşti,1982
19. Bragaru, A., Picos, C., Ivan, N., Optimizarea proceselor şi echipamentelor tehnologice,
E.D.P., Bucuresti, 1996.
20. Bragaru, A.: Proiectarea dispozitivelor, E.D.P., Bucuresti, 1998
21. Bocu, D., Iniţiere în ingineria sistemelor soft, Editura Albastră, Culj- Napoca, 2002

206
22. Bocu. D., Iniţiere în modelarea obiect orientată a sistemelor soft, Editura Albastră, Culj-
Napoca, 2002
23. Booch, G., Object-Oriented analysis and Desingn 2nd Ed. Benjamin Cummings, redwoord
City, CA, 1994
24. Booch, G., s.a. , The Unified modeling language User Guide, Addison Wesley, 1999
25. Bockmann, C.J., Klander, L., Tang, L., Visual Basic – Ghidul programatorului, Editura
Teora, Bucuresti 1999.
26. Bockmann, C.J., Klander, L., Tang, L., Visual Basic – Biblioteca programatorului,
Editura Teora, Bucuresti 1999.
27. Bollobas, B., Modern Graph Theory, Spriger-Verlag, Berlin, 1998
28. Clayton W., Crearea jocurilor pe calculator în C++-, Bucureşti, Editura Teora, 2000
29. Căzănescu, V., E., Fundamentele limbajelor de programare, Editura Universitaţii din
Bucureşti, 2007
30. Costea, A., Rachieru N., Flexibilitatea şi performanţele echipamentelor de prelucrare –
Optimizarea proiectării dispozitivelor - , Editura BREN,Bucureşti,2005.
31. Costea, A., Babă, I., Metodă de calcul şi program de calculator pentru determinarea
coordonatelor capetelor multiax, A III-a conferinţă Internaţională maşini şi tehnologii modern,
cugir 11-14 octombrie 1995
32. Costea, A., Raghieru, N. – Calculul erorilor de orientare constructive ale reazemelor de
dispozitive – Sesiunea de comunicări ştiinţifice cu participare internaţională, Piteşti, 21-22
noiembrie 1997.
33. Costea, A. – Creşterea performanţelor şi flexibilităţii tehnologice a prelucrărilor prin aşchiere
utilizând module de dispositive. Teză de doctorat. Universitatea Transilvania Braşov, 5
noiembrie 1999.
34. Chartrand, G., Graphs and Diagraphs, Wadswordth and Broks, 1986
35. Crişcotă, Ş., Programarea în Visual Basic for application, Ed. CARMINIS, Piteşti, 2003
36. Dima, G., Dima, M., Informatică aplicată, Editura Teora, Bucureşti, 2002
37. Gherghel, N., Îndrumar pentru lucrări de laborator la Construcţia şi exploatarea
dispozitivelor. Iaşi, 1979.
38. Gherghel, N., Seghedin, N., Proiectarea reazemelor dispozitivelor tehnologice, Iaşi, Editura
Tehnopress, 2002.
39. Gherghel, N., Îndrumar de proiectare a dispozitivelor. Vol. 2. Elaborarea schemelor optime de
orientare în dispositive. Inst. Polit., 1992.
40. Gherghel, N., Seghedin, N., Concepţia şi exploatarea reazemelor dispozitivelor tehnologice,
Editura Tehnopress, Iaşi, 2006
41. Ghionea, I., Proiectarea asistată în Catia V5, Elemente teoretice şi aplicaţii, Ed. BREN,
Bucureşti, 2007
42. Gorohov, V. A., Proektirovanie I rascet prisposoblenii. Minsk: Vâşăişaia şkola, 1986.
43. Jacobson, I., s.a. Object-Oriented Software Engineering, Addison Wesley, Reading, MA,
1992

207
44. Jacobson, I., Jacobson, S., Use-case Engeneering Unlocking the Power, Object Magazine,
october, 1996
45. Niculescu, F., R., Modelarea sistemelor software, Editura Universitaţii din Bucureşti, 2007
46. Niculescu, F., R., Modelarea şi proiectarea sistemelor software, Editura Universitaţii din
Bucureşti, 2005
47. Matuszewski, H., Handbuch Vorrichtungen. Konstruktion und Einsatz. B raunschweig,
Vieweg, 1986.
48. Ornea, L., s.a, O introducere în geometrie, Ed. Theta, Bucureşti, 2000
49. Ivan, N.V., Sisteme CAD/CAM algoritmi şi programe CAD – T, Editura didactică şi
pedagogic, Bucureşti – 2001
50. Popescu, D., R., Combinatorică şi teoria grafurilor , Societatea de stiinţe matematice din
România, Bucureşti, 2005
51. Popovici, D., Popovici, I., Proiectare şi implementare software, Teora, Bucureşti, 1999
52. Popa, G., Iliescu, M., Berbec, F., Ivancenco, V., Andronache, V., Visual Basic, Editura
Cison, Bucuresti, 1999.
53. Popa, G., Iliescu, M., Udrica, M., Baze de date ACCESS – culegere de probleme, Editura
Cicson, Bucuresti, 2000
54. Polovinkin, A.,I., Ciumakov, G., S., Poiskovoe proektirovanie I konstruirovanie stanocinâe
prisposoblenii. Volgograd: Izd-vo Volgogradskogo Politehniceskogo Instituta, 1987.
55. Rădulescu, AL., V., A., NEAGU, C., Bazele tehnologiei maşinilor-unelte, Editura Didactică
şi Pedagogică, Bucureşti, 1982
56. Rakovici, A.G., Osnovî avtomatizaţii proektirovaniia tehnologhiceskih prisposoblenii,
Minsk, Nauka i tehnica, 1985
57. Roşculeţ, V., N., s.a, Proiectarea dispozitivelor, Editura didactică şi pedagogic, 1982
58. Stăncescu, C., Pârvu, C., Doicin, C.,Alupei, O., Album de proiectare 3D cu AutoCad, Editra
fast, Bucureşti, 2004.
59. Stăncescu, C., Pârvu, C., Matei, M.,: Modelarea parametrică 3D cu Mechanical Desktop,
Editura Fast, Bucureşti, 2005.
60. Stănescu, I., Tache, V. – Dispozitive pentru maşini-unelte. Proiectare, construcţie. Editura
Tehnică, Bucureşti, 1979.
61. Simion, I., AutoCAD 2005 pentru ingineri, Editura Teora, 2005
62. Sutphin, J., AutoCad 2004 VBA, Programmer’s Referance
63. Tache, V., Bragaru, A., Dispozitive pentru maşini-unelte,. Proiectarea schemelor de orientare
şi fixare a semifabricatelor. Editura Tehnică, Bucureşti, 1976
64. Tache, V., Ungureanu, I., Stroe, C., Elemente de proiectare a dispozitivelor pentru maşini-
unelte. Bucureşti: Ed. Tehn., 1985.
65. Tache, V., Ungureanu, I., Stroe, C., Proiectare dispozitivelor pentru maşini-unelte. Bucureşti:
Ed. Tehn., 1995.
66. Vlase, A., Sturzu, A., Bercea, I., Mihail, A., Regimuri de aşchiere, adaosuri de prelucrare şi
norme tehnice de timp, Editura Tehnică, Bucureşti, 1983
67. Velicanu, M., s.a. Sisteme de gestiune a bazelor de date, editura Petrion,Bucureşti, 2000
208
68. Stanocinâe prisposobleniia. Spravocinik. Tom 1, Tom 2 (pod red B.N. Vardaşkina I A.A.
Şatilova). Moskva: Maşinostroienie, 1984.
69. Vorrichtungen. Rationelle Planung und Konstruktion. Herausgegeben vom Verein Deutscher
Ingenieure. Dusseldorf: VDI, 1992
70. Wehrhann, K., H., Combinatorics. An Introduction, Carslaw publ., 1992
71. ***Microsoft Visual Basic 6.0. Ghidul programatorului, Teora & Microsoft Press, Bucuresti,
1998.
72. ***Microsoft Corp., Windows Interface Guidelines for Software Design, Microsoft Press,
1995 (inclusa în MSDN Library - Microsoft Visual Studio 6.0)

209

S-ar putea să vă placă și