Documente Academic
Documente Profesional
Documente Cultură
2
CUPRINS
Introducere 2
Capitolul I CONSIDERAŢII PRIVIND PROIECTAREA ASISTATĂ DE 5
CALCULATOR
1. Prezentarea generală a limbajului de programare, Visual Basic 5
3
3.3 Concluzii 95
4.2 109
Algoritmi pentru generarea automată a simbolurilor informaţionale
folosite în proiectarea dispozitivelor mecanice utilizând VBA
Bibliografie 203
4
Capitolul I. CONSIDERAŢII PRIVIND PROIECTAREA ASISTATĂ DE
CALCULATOR
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] :
6
Fig. 1 Ierarhizarea obiectelor în Autocad
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.
Î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.
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.
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.
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.
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):
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):
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
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
21
2.3 Operaţii de decupare (clipping)
Fig. 7 Elemente grafice conţinute total, exteriore sau se pot intersecta în raport cu fereastra
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.
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ă:
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.
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).
29
Fig. 11 Oglindirea unor obiecte faţă de o axă
ThisDrawing.SetVariable "MIRRTEXT", 0
30
Roteşte elipsa conform imaginii (Fig. 12):
31
Implementarea metodei de scalare (Fig. 13)
32
2.6 Curbe de aproximare şi interpolare: Curbe Bezier
(a) (b)
Fig. 14 Curba obţinută trece prin punctele de control (a) , nu trece prin punctele de control (b)
(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.
(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
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.
37
Iată o implementare în VB (Fig. 19).
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:
‘ 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
39
Fig. 21 Cotă liniară
40
Dimensiunea unghiulară pentru un arc (Fig. 22)
41
Cotarea cercurilor(Fig. 23)
42
Cotarea razei unui arc de cerc sau cerc (Fig. 24)
43
Pentru scrierea toleranţelor (Fig. 25)
Punct de inserţ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
{\Fgdt;b} perpendicularitate
{\Fgdt;c} planeitate
{\Fgdt;e} Circularitate
{\Fgdt;i} Simetrie
44
Codurile pentru generarea automată a toleranţelor
COD SIMBOL
{\Fgdt;n} diametru
S1
S2
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
frmSuprafata.hide
'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
'aduce leaderul
suprafataSimb.AddLeader leaderPuncte
suprafataSimb.LeaderArrowType = ArrowheadType
'adapteaza
suprafataSimb.Update
47
'regenerare
ThisDrawing.Regen acAllViewports
RefreshUserForm
End Sub
End Sub
txtRa.Text = ""
End Sub
'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
Function SageataTip()
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
P1(10,10) P2(30,10)
L
Algoritmul în pseudocod:
51
Salvează datele într-un fişier
STAS
Abateri limita
Desenul în Program
mediul
grafic
.mb .txt
.xls
l
Implementare:
End Sub
Următorul program ilustrează dacă Excelul de pe sistemul de calcul rulează sau nu:
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
În exemplele de mai sus putem face modificări în cod în functie de varianta de Excel existent.
Microsoft versiuni:
Office 95 7 Excel.Application.7
Office 97 8 Excel.Application.8
Office XP 10 Excel.Application.10
53
Microsoft versiuni:
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
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
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
a0
55
P2
P0
P1
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
‘ 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
56
Fig. 36 Rezultatele în urma rulării programului
57
cazul când se completează desenul cu cota liniară dar cu abateri
P1 P2
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
.txt
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)
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)
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 ’
61
Fig. 47 Desenul la început
P1 P2
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
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)
90’
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
.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’
65
Ф8
P1
P2
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
With ThisDrawing.Utility
P1 = .GetPoint(, "p1: ")
ThisDrawing.SetVariable "osmode", 128 ' Per
P2 = .GetPoint(P1, "P2: ")
dblLeader= .GetDistance(P1, "Punct inceput leader: ")
End With
D= objDimDiametru.Measurement
CitireAbateri
objDimDiametric.UnitsFormat = acDimLEngineering
objDimDiametric.PrimaryUnitsPrecision = acDimPrecisionFive
objDimDiametric.FractionFormat = acNotStacked
objDimDiametric.Update
66
Ф8
Ф8
Ф8
P1
P2
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
End Sub
Ф8
68
Fig. 64 Rezultatele în urma rulării programului
i) cazul când pe desen nu este trecută abaterea de la intersecţie
Implementare
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
End Sub
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. 69 Rezultatele în
urma rulării programului
Exemplul 2. Considerăm piesa din fig. 70
Condiţiile determinante sunt:
71
Fig. 70 Desenul propus pentru ex. 2
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ă;
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.
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.
76
În urma rulării modulului de program creăm radăcina (părintele) în cazul nostru piesa test supusă
studiului (fig. 75).
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
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
81
Fig. 80 Relaţia dintre suprafeţe şi simboluri
82
Completarea tabelului Conditii.xls erorilor admisibile
Generare scheme
Calcul erori
Dacă singulare atunci
Calculează eroriSingulare
83
Altfel
Calculează eroriNesingulare
Produsul cartezian A1xA2x...xAn= {(a1, a2, ..., an)|a1 A1,a2 A2, ..., an An}
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
Exemplul2:
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}
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
Scheme.xls
BD cu
Suprafete
SI
Program citire date de pe desen Afişare
87
Fig. 83 Calculul erorilor pentru scheme singulare (BC=BO, Fară 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
89
Fig. 86 Calculul erorilor 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).
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.
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
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
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ţă.
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( GHIDAJ DESCHIS LUNG GHIDAJ DESCHIS SCURT (RUD) GHIDAJ DESCHIS
SCURT (RBD) ……….
3SPI 3SPE GHIDAJ DESCHIS NORMAL GHIDAJ DESCHIS (RUD) GHIDAJ DESCHIS
(RBD) ………
SCI SCE DORN CIL NETED BOLŢ CIL. NETED BOLŢ CIL. NETED ……
1SCaKI 1SCaKE
DORN CONIC CANELAT BOLŢ CONIC CANELAT
2 SP ∝
PRISMĂ SCURTĂ PRISMĂ LUNGĂ
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
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
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.
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.
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.
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
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
Sub SimbPlan()
115
End Sub
În urma rulării modulelor pentru PUNCT, DREAPTA şi PLAN obţinem simbolurile
dorite Fig.95.
Î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).
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
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.
“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.
118
Fig. 98 Caseta de dialog “Block Definition”
Punct de inserţie
Punct de inserţie
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ă.
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ă.
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:
MsgBox "exista"
Exit Sub
121
End If
objBlock.AddCircle dblOrigin, 10
End Sub
122
4.4 Algoritmi pentru generarea automată a simbolurilor informaţionale folosite în
proiectarea dispozitivelor mecanice utilizând VB
y
y
x x
-10 5 10
-10 5 10
y
y
-5 -2.5 0 2.5 5
x
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
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
126
radius = 2.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
Exemplul 3
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.
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
128
'Desenarea cercului plin
patternName = "CYLINDER"
PatternType = acPreDefinedGradient '0
bAssociativity = True
' 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)
Exemplul 4
x
-10 10
-5 0 5
'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
' 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
' hasura
hatchObj.AppendOuterLoop (outerLoop)
130
' contur si hasura
hatchObj.AppendOuterLoop (outerLoop)
obDoc.Regen True
obAcad.ZoomExtents
End Sub
Exemplul 5
'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
' 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)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub
132
Exemplul 6
'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
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
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub
y
Exemplul 7
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
' 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)
135
center(0) = -5: center(1) = 0: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents y
End Sub
Exemplul 8
x
'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double
' cerc
'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 liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 0
punctCentru(2) = 0
' 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)
137
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub
Exemplul 9
'Linie
Dim obLinie As AcadLine
Dim punctInceput(2) As Double
Dim punctSfarsit(2) As Double
' cerc
'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 liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 0
punctCentru(2) = 0
' 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)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub
139
Exemplul 10
x
-5 -2.5 0 2.5 5
'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 liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
' 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)
141
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub
Exemplul 11
x
-5 -2.5 0 2.5 5
'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 liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
' 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)
143
center(0) = -3.89: center(1) = 7: center(2) = 0
radius = 1.5
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub
Exemplul 12 10
x
-5
0 5
'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 liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
' 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)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub
Exemplul 13 10
x
-5
0 5
'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 liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
' 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)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
End Sub
Exemplul 14 y
10
x
-5
0 5
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 liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
149
'Punctul de sfarsit
punctSfarsit(0) = 5
punctSfarsit(1) = 10
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
' 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)
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 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
' 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)
' 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)
152
Set outerLoop(0) = obDoc.ModelSpace.AddCircle(center, radius)
obDoc.Regen True
obAcad.ZoomExtents
End Sub
Exemplul 16
'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 liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenare arc
' 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)
' 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)
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
156
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenare arc
' 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)
' 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)
hatchObj.Evaluate
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'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
'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
159
punctSfarsit(0) = 5
punctSfarsit(1) = 0
punctSfarsit(2) = 0
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
'Desenarea liniei
Set obLinie = obMSpace.AddLine(punctInceput, punctSfarsit)
obLinie.Update
' 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)
hatchObj.AppendOuterLoop (outerLoop)
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
'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
ReDim objSourceEnts(objSS.Count - 1)
For intI = 0 To objSS.Count - 1
Set objSourceEnts(intI) = objSS(intI)
Next
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
'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
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
hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
' 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)
hatchObj.AppendOuterLoop (outerLoop)
hatchObj.AppendOuterLoop (outerLoop)
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
ReDim objSourceEnts(objSS.Count - 1)
For intI = 0 To objSS.Count - 1
Set objSourceEnts(intI) = objSS(intI)
167
Next
End Sub
'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
169
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
'Desenarea cercului
punctCentru(0) = 0
punctCentru(1) = 15
punctCentru(2) = 0
hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate
obDoc.Regen True
obAcad.ZoomExtents
'Desenarea cercului
punctCentru(0) = 0
170
punctCentru(1) = 30
punctCentru(2) = 0
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
' 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
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
' cerc
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
'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
ReDim objSourceEnts(objSS.Count - 1)
For intI = 0 To objSS.Count - 1
Set objSourceEnts(intI) = objSS(intI)
Next
174
Algoritmul în pseudocod:
Generare simbol informaţional
Ataşare informaţii
Transformare în block
175
Fig.103 Exemplu de generarea unui symbol
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
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.
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:
Î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).
180
Fig. 111 Informaţiile puse într-un fişier Excel
4.6 Aplicaţii folosind generatorul de simboluri
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.
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. … …
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.
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
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.
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.
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
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 :
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).
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
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.
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
Ş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
201
Fig. 129 Structura iniţială
202
Fig.131 Structura după inserarea capului multiax cu axe reglabile
203
Un alt exemplu de utilizare al programului pentru inlocuirea sculelor pornind de la
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
205
BIBLIOGRAFIE
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