Version 14 (modified by 11 years ago) (diff) | ,
---|
Python OCC
Struktura programa v Python OCC
Rabimo uvoziti uporabniški vmesnik, ki nam omogoči preprosto manipulacijo predstavljenega objekta (glava dokumenta):
from OCC.Display.SimpleGui import *
Z ukazno vrstico uvozimo v program knjižnico, ki vsebuje modelno okno ter preprosti uporabniški vmesnik, ki ga lahko uporabimo za prikaz različnih geometrijskih oblik v 3D okolju.
Uvedba funkcij za iniciacijo prikaza:
display, start_display, add_menu, add_function_to_menu = init_display()
Z ukazno vrstico uvedemo v program prikaz v modelnem oknu ter možnost uporabe preprostega menija.
Iniciacija prikaznega okna:
start_display()
S tem ukazom iniciramo modelno okno. Definicija uporabljenih geometrijskih oblik mora biti podana preden se ukaz izvede.
Uporaba miške v uporabniškem vmesniku:
- Rotacija objekta: levi gumb na miški
- Translacija objekta: srednji gumb na miški
- Povečava objekta: desni gumb na miški, premik levo-desno
Uporaba tipkovnice v uporabniškem vmesniku:
- Tipka'w'- prikaz žičnega modela
- Tipka 'e'- prikaz vidnih robov
- Tipka 's'- prikaz volumskega modela
- Tipka 'f'- prikaz celega objekta v prikaznem oknu
- Tipka 'q'- prikaz vidnih robov
Za izdelavo modela v okolju Python OCC je potrebna predhodna uvedba knjižnic OpenCascade (OCC), ki vsebujejo različne nabore ukazov:
from OCC.Display.SimpleGui import * # Knjižnica z modelnim oknom ter uporabniškim vmesnikom (GUI) from OCC.gp import * # Knjižnica z naborom osnovnih gradnikov -točk from OCC.GC import * # from OCC.TopoDS import * # Knjižnica z naborom topoloških gradnikov (krivulje,...) from OCC.BRepBuilderAPI import * # Knjižnica z naborom osnovnih gradnikov skice (vozlišča, robovi, segmenti, mreže ...) from OCC.BRepPrimAPI import * # Knjižnica z naborom osnovnih geometrijskih primitivov from OCC.BRepFilletAPI import * # Knjižnica z naborom orodij za izdelavo zaokrožitev
V program uvedemo zgolj knjižnice, ki jih tudi rabimo za učinkovito delovanje.
Preprosti program- Primer izdelave izvleka v prostor (Extrude)
Primer izdelave kocke z dimenzijami 10x10x10. Postopek modeliranja v komercialnih modelirnikih (SolidWorks?, Catia, NX, ProEngineer?, Inventor,...) je sledeči:
- izbira ravnine, na katero se nariše skica
- izris oblike skice (kvadrat)
- definiranje skice (dimenzije, geometrijske relacije, pozicija v prostoru)
- izbira ustrezne značilke za izdelavo 3D objekta (Izvlek- Extrude)
- določitev parametrov izvleka (smer, dolžina izvleka)
- model je zmodeliran
V okolju Python OCC poteka izris objekta nekoliko drugače. Razložen je
preprosti postopek izdelave kocke, ki poteka v večih korakih. Pri izdelavi
je potrebno manualno določiti vse parametre, ki jih komercialni modelirnik
običajno določi namesto nas.
Korak 01: Izdelava točke v prostoru Razlaga ukaza za izdelavo točke gp__Pnt
Tocka = gp_Pnt(x_1 , y_1 , z_1)
Iz določenih točk lahko naredimo vozlišča. Detajlna razlaga uporabljenega ukaza: BRepBuilderAPI__MakeVertex.
Vozlisce = BRepBuilderAPI_MakeVertex(Tocka)
Če hočemo prikazati vozlišča v modelnem oknu, potem je potrebno napisati ukaz za prikaz oblike:
display.DisplayShape(Vozlisce.Shape())
Korak 02: Izdelava robov iz točk
Rob = BRepBuilderAPI_MakeEdge(Zacetna_tocka, Koncna_tocka)
Za izdelavo roba rabimo dva podatka, to je začetna točka ter končna točka robu. Detajlna razlaga uporabljenega ukaza: BRepBuilderAPI__MakeEdge. Če hočemo prikazati izdelani rob v modelnem oknu, je potrebno zapisati ukaz:
display.DisplayShape(Rob.Shape())
Korak 03: Izdelava mrežnega modela iz točk
Mreza = BRepBuilderAPI_MakeWire(Rob1.Edge() , Rob2.Edge() ,Rob3.Edge(), Rob4.Edge()) Mreza2 = BRepBuilderAPI_MakeWire(Mreza.Wire(), Rob1.Edge())
Vsak rob predstavlja svojo geometrijsko obliko v prostoru. Zato moramo, preden naredimo površino te robove združiti v eno samo geometrijo. Pozorni moramo biti, da robovi tvorijo zaprto obliko. Ukaz nam dovoli sočasno uporabo štirih argumentov- robov. Pri tem moramo označiti, da gre za obliko roba [Rob.Edge()]. Kot rezultat dobimo združeno mrežo. Detajlna razlaga uporabljenega ukaza: BRepBuilderAPI__MakeWire Če hočemo prikazati izdelani rob v modelnem oknu, je potrebno zapisati ukaz:
display.DisplayShape(Mreza.Shape())
Korak 04: Izdelava površine iz obstoječe mreže
Povrsina = BRepBuilderAPI_MakeFace(Mreza.Wire())
Iz obstoječega zaprtega lika, ki je planaren lahko tvorimo površino. Detajlna razlaga uporabljenega ukaza: BRepBuilderAPI__MakeFace Če hočemo prikazati izdelani rob v modelnem oknu, je potrebno zapisati ukaz:
display.DisplayShape(Povrsina.Shape())
Korak 05: Izdelava izvleka v prostor Izdelano površino lahko uporabimo za izdelavo tridimenzionalne oblike. Če hočemo narediti izvlek, je potrebno najprej določiti še parametre vičine izvleka. V ta namen določimo vektor, ki vsebuje podatek o velikosti in smeri izvleka. Razlaga uporabljenega ukaza: gp_Vec.
Vektor = gp_Vec(Velikost_X , Velikost_Y, Velikost_Z)
Sledi uporaba ukaza za izdelavo izvleka. Pri tem je potrebno uporabiti podatek o površini ter izdelani vektor. Če hočemo, lahko naredimo tudi neskončno dolgi izvlek v prostor, tako da uporabimo zgolj podatek o izbrani smeri namesto določenega vektorja (uporaba pri Boolovi operaciji odštevanja). Razlaga uporabljenega ukaza: BRepFeat__MakePrism.
Izvlek = BRepPrimAPI_MakePrism(Povrsina.Face() , Vektor) Izvlek = BRepPrimAPI_MakePrism(Povrsina.Face() , Smer)
Barvo modela lhako po želji spremenimo z uporabo ukaza:
display.DisplayColoredShape(Oblika.Shape(), 'BARVA')
Primer programa za izdelavo izvleka:
## Izdelava Izvleka from OCC.Display.SimpleGui import * from OCC.BRepPrimAPI import * from OCC.gp import * from OCC.GC import * from OCC.BRepBuilderAPI import * display, start_display, add_menu, add_function_to_menu = init_display() #Izdelava točk v prostoru T1 = gp_Pnt(0 , 0 , 0) T2 = gp_Pnt(10 , 0, 0) T3 = gp_Pnt(10 , 10 , 0) T4 = gp_Pnt(0, 10 , 0) #izdelava robov na podlagi definiranih tock E1 = BRepBuilderAPI_MakeEdge(T1, T2) E2 = BRepBuilderAPI_MakeEdge(T2, T3) E3 = BRepBuilderAPI_MakeEdge(T3, T4) E4 = BRepBuilderAPI_MakeEdge(T4, T1) #izdelava mreznega modela Mreza = BRepBuilderAPI_MakeWire(E1.Edge() , E2.Edge() ,E3.Edge(), E4.Edge()) #Izdelava povrsine Povrsina = BRepBuilderAPI_MakeFace(Mreza.Wire()) #Izdelava vektorja za izvlek v prostor Vektor1 = gp_Vec(0 , 0, 10) #Izdelava priznaticnega telesa- izvlek povrsine v smeri vektorja Izvlek = BRepPrimAPI_MakePrism(Povrsina.Face() , Vektor1) #Prikaz izvleka v prikaznem oknu display.DisplayShape(Izvlek.Shape()) #Sprememba barve modela display.DisplayColoredShape(Izvlek.Shape(), 'RED') display.View_Iso() #izometricni prikaz start_display()
Uporaba geometrijskih primitivov
Izdelava kvadra
kvader = BRepPrimAPI_MakeBox(dolzina_X, dolzina_Y, dolzina_Z) kvader = BRepPrimAPI_MakeBox(Tocka1, dolzina_X, dolzina_Y, dolzina_Z) kvader = BRepPrimAPI_MakeBox(Tocka1, Tocka2)
Izdelava izvleka pod kotom nagiba
kvader= BRepPrimAPI_MakeWedge(dolzina_X, dolzina_Y, dolzina_Z, dolzina_X2) kvader= BRepPrimAPI_MakeWedge(dolzina_X, dolzina_Y, dolzina_Z, dolzina_Xmin, dolzina_Zmin, dolzina_Xmax, dolzina_Zmax) kvader= BRepPrimAPI_MakeWedge(dolzina_X, dolzina_Y, dolzina_Z, dolzina_X/2, 0, dolzina_X/2, dolzina_Z) kvader= BRepPrimAPI_MakeWedge(dolzina_X, dolzina_Y, dolzina_Z, dolzina_X/2, dolzina_Z/2, dolzina_X/2, dolzina_Z/2)
Izdelava valja
valj= BRepPrimAPI_MakeCylinder(Radij, Visina, Kot_radiani) valj= BRepPrimAPI_MakeCylinder(Os, Radij, Visina, Kot_radiani)
Izdelava stožca
stozec= BRepPrimAPI_MakeCone(Radij_1, Radij_2, Visina, Kot_radiani) stozec= BRepPrimAPI_MakeCone(Os, Radij_1, Radij_2, Visina, Kot_radiani)
Izdelava sfere
sphere= BRepPrimAPI_MakeSphere(Radij, Kot_radiani) sphere= BRepPrimAPI_MakeSphere(Radij, Kot_a1_rad, Kot_a2_rad)
Izdelava torusa
torus= BRepPrimAPI_MakeTorus(Radij_torusa, Radij_prereza) torus= BRepPrimAPI_MakeTorus(Radij_torusa, Radij_prereza, Kot_radiani) torus= BRepPrimAPI_MakeTorus(Radij_torusa, Radij_prereza, Kot_a1_rad, Kot_a2_rad)
Izdelava izvleka
Izvlek = BRepPrimAPI_MakePrism(Povrsina.Face() , Vektor) Izvlek = BRepPrimAPI_MakePrism(Povrsina.Face() , Smer)
Izdelava krožnega izvleka
Vrtenina = BRepPrimAPI_MakeRevol(Povrsina.Face() , Os) Vrtenina = BRepPrimAPI_MakeRevol(Povrsina.Face() , Os, Kot_radiani)
Uporaba menijev znotraj prikaznega okna
Najprej je potrebno definirati funkcije, ki izvršijo ukaz (izdelajo neko obliko). Pri tem pred izrisom oblike počistimo modelno okno obstoječih oblik z ukazom [display.EraseAll?()].
def Funkcija(event=None): display.EraseAll() #definicija prikazane oblike display.DisplayShape(Oblika.Shape())
Izdelava menija
add_menu('Ime_menija') add_function_to_menu('Ime_menija',Funkcija1) add_function_to_menu('Ime_menija',Funkcija2)
Attachments (38)
-
Python OCC.pdf (1.1 MB) - added by 11 years ago.
predstavitev primitivov
- display.png (18.3 KB) - added by 11 years ago.
- Kocka.png (17.8 KB) - added by 11 years ago.
- Vozlisca.png (15.6 KB) - added by 11 years ago.
- Robovi.png (19.3 KB) - added by 11 years ago.
- Solid.png (19.5 KB) - added by 11 years ago.
- Solid-barve.png (20.5 KB) - added by 11 years ago.
- Vozlisca.2.png (15.6 KB) - added by 11 years ago.
- Wire.png (19.6 KB) - added by 11 years ago.
- Povrsina.png (17.8 KB) - added by 11 years ago.
- Izvlek_2.png (73.2 KB) - added by 11 years ago.
- Izvlek_krozni.png (117.7 KB) - added by 11 years ago.
- Kvader.png (17.6 KB) - added by 11 years ago.
- Kvader-nagib.png (50.6 KB) - added by 11 years ago.
- Meniji.png (75.6 KB) - added by 11 years ago.
- Sfera.png (102.5 KB) - added by 11 years ago.
- Stozec.png (96.9 KB) - added by 11 years ago.
- Torus.png (181.0 KB) - added by 11 years ago.
- Valj.png (80.3 KB) - added by 11 years ago.
- 20.png (53.3 KB) - added by 11 years ago.
- 21.png (45.0 KB) - added by 11 years ago.
- 22.png (124.1 KB) - added by 11 years ago.
- 23.png (51.3 KB) - added by 11 years ago.
- 24.png (49.6 KB) - added by 11 years ago.
- 25.png (90.7 KB) - added by 11 years ago.
- 26.png (21.6 KB) - added by 11 years ago.
- 27.png (27.5 KB) - added by 11 years ago.
- 28.png (34.9 KB) - added by 11 years ago.
- 29.png (64.7 KB) - added by 11 years ago.
- 30.png (65.7 KB) - added by 11 years ago.
- 31.png (35.0 KB) - added by 11 years ago.
- 32.png (19.6 KB) - added by 11 years ago.
- 33.png (22.8 KB) - added by 11 years ago.
- 24a.png (27.9 KB) - added by 11 years ago.
- 34.png (45.1 KB) - added by 11 years ago.
- 35.png (20.5 KB) - added by 11 years ago.
-
Izdelava_zaokrozitev_in_posnetij_krajse.py (2.2 KB) - added by 9 years ago.
Primer iz vaj KT 9.11.2015
-
Izdelava_zaokrozitev_in_posnetij.py (11.1 KB) - added by 9 years ago.
Primeri zaokroževanj in posnetij kocke z uporabo menijev in funkcijo za spremembo radija.