Changes between Version 27 and Version 28 of PythonOcc/primitives


Ignore:
Timestamp:
Nov 22, 2013, 1:33:46 PM (10 years ago)
Author:
ptomsic
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • PythonOcc/primitives

    v27 v28  
    5757start_display()
    5858}}}
    59 S tem ukazom iniciramo modelno okno. Definicija uporabljenih geometrijskih oblik mora biti podana preden se ukaz izvede.[[Image(display.png, right)]]
     59S tem ukazom iniciramo modelno okno. Definicija uporabljenih geometrijskih oblik mora biti podana preden se ukaz izvede.[[Image(display.png, 500, right)]]
    6060[[BR]][[BR]][[BR]][[BR]]
    6161
     
    9393== Preprosti program- Primer izdelave izvleka v prostor (Extrude) ==
    9494
    95 Primer izdelave kocke z dimenzijami 10x10x10. Postopek modeliranja v [[Image(Kocka.png, right)]]
     95Primer izdelave kocke z dimenzijami 10x10x10. Postopek modeliranja v [[Image(Kocka.png, 300, right)]]
    9696komercialnih modelirnikih (SolidWorks, Catia, NX, ProEngineer, Inventor,...)
    9797je sledeči:
     
    102102 * določitev parametrov izvleka (smer, dolžina izvleka)[[BR]][[BR]]
    103103 * model je zmodeliran
    104 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     104[[BR]][[BR]][[BR]][[BR]]
    105105
    106106V okolju Python OCC poteka izris objekta nekoliko drugače. Razložen je
     
    109109običajno določi namesto nas.[[BR]][[BR]]
    110110
    111 Korak 01: Izdelava točke v prostoru [[Image(Vozlisca.png, right)]]
     111Korak 01: Izdelava točke v prostoru [[Image(Vozlisca.png, 300, right)]]
    112112Razlaga ukaza za izdelavo točke [http://opencascade.sourcearchive.com/documentation/6.3.0.dfsg.1/classgp__Pnt.html gp__Pnt]
    113113{{{
     
    125125display.DisplayShape(Vozlisce.Shape())
    126126}}}
    127 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    128 
    129 
    130 Korak 02: Izdelava robov iz točk [[Image(Robovi.png, right)]]
     127[[BR]][[BR]][[BR]]
     128
     129
     130Korak 02: Izdelava robov iz točk [[Image(Robovi.png, 300, right)]]
    131131{{{
    132132#!python
     
    140140display.DisplayShape(Rob.Shape())
    141141}}}
    142 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    143 
    144 Korak 03: Izdelava mrežnega modela iz točk [[Image(Wire.png, right)]]
     142[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     143
     144Korak 03: Izdelava mrežnega modela iz točk [[Image(Wire.png, 300, right)]]
    145145{{{
    146146#!python
     
    158158display.DisplayShape(Mreza.Shape())
    159159}}}
    160 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    161 
    162 Korak 04: Izdelava površine iz obstoječe mreže [[Image(Povrsina.png, right)]]
     160[[BR]][[BR]][[BR]][[BR]]
     161
     162Korak 04: Izdelava površine iz obstoječe mreže [[Image(Povrsina.png, 300, right)]]
    163163{{{
    164164#!python
     
    172172display.DisplayShape(Povrsina.Shape())
    173173}}}
    174 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    175 
    176 Korak 05: Izdelava izvleka v prostor [[Image(Solid.png, right)]]
     174[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     175
     176Korak 05: Izdelava izvleka v prostor [[Image(Solid.png, 300, right)]]
    177177Izdelano površino lahko uporabimo za izdelavo tridimenzionalne oblike. Če hočemo narediti
    178178izvlek, je potrebno najprej določiti še parametre vičine izvleka. V ta namen določimo vektor,
     
    191191Izvlek = BRepPrimAPI_MakePrism(Povrsina.Face() , Smer)
    192192}}}
    193 [[BR]][[BR]][[BR]][[BR]][[BR]]
     193[[BR]][[BR]]
    194194
    195195Barvo modela lhako po želji spremenimo z uporabo ukaza:
     
    200200[[BR]][[BR]]
    201201
    202 Primer programa za izdelavo izvleka:[[Image(Solid-barve.png, right)]]
     202Primer programa za izdelavo izvleka:[[Image(Solid-barve.png, 300, right)]]
    203203{{{
    204204#!python
     
    252252
    253253=== Izdelava kvadra ===
    254 [[Image(Kvader.png, right)]]
     254[[Image(Kvader.png, 300, right)]]
    255255{{{
    256256#!python
     
    263263 * (Tocka1, dolzina_X, dolzina_Y, dolzina_Z) ... kvader se prične izrisovati od točke 1 (X,Y,Z) dalje inje določen z razdaljami posameznih robov[[BR]][[BR]]
    264264 * (Tocka 1, Tocka2) ... kvader določimo s koordinatami dveh točk, ki ježita v nasproti ležečih ogliščih
    265 [[BR]][[BR]][[BR]][[BR]]
     265[[BR]]
    266266
    267267
    268268=== Izdelava izvleka pod kotom nagiba ===
    269 [[Image(Kvader-nagib.png, right)]]
     269[[Image(Kvader-nagib.png, 600, right)]]
    270270{{{
    271271#!python
     
    284284
    285285=== Izdelava valja ===
    286 [[Image(Valj.png, right)]]
     286[[Image(Valj.png, 600, right)]]
    287287{{{
    288288#!python
     
    301301os = gp_Ax2(Tocka, normala)     #definicija osi
    302302}}}
    303 [[BR]][[BR]]
    304303
    305304
    306305=== Izdelava stožca ===
    307 [[Image(Stozec.png, right)]]
     306[[Image(Stozec.png, 600, right)]]
    308307{{{
    309308#!python
     
    315314 * (Radij_1, Radij_2, Visina, Kot_radiani) ... izdelamo delni stožec, določen s kotom, z osnovo radija 1 ter na višini H z radijem 2[[BR]][[BR]]
    316315 * (Os, Radij_1, Radij_2, Visina, Kot_radiani) ... izdelamo delni stožec okoli izbrane osi, določen s kotom, z osnovo radija 1 ter na višini H z radijem 2
    317 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     316[[BR]][[BR]][[BR]][[BR]][[BR]]
    318317
    319318
    320319=== Izdelava sfere ===
    321 [[Image(Sfera.png, right)]]
     320[[Image(Sfera.png, 600, right)]]
    322321{{{
    323322#!python
     
    331330 * (Radij, Kot_a1_rad, Kot_a2_rad) ... izdelave sfere, ki ima odstanjen sredinski del pod kotom 1 in kotom 2[[BR]][[BR]]
    332331 * (Radij, Kot_a1_rad, Kot_a2_rad, Kot_radiani) ... izdelave delne sfere, ki ima odstanjen sredinski del pod kotom 1 in kotom 2
    333 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     332[[BR]][[BR]][[BR]][[BR]][[BR]]
    334333
    335334=== Izdelava torusa ===
    336 [[Image(Torus.png, right)]]
     335[[Image(Torus.png, 600, right)]]
    337336{{{
    338337#!python
     
    345344 * (Radij_torusa, Radij_prereza, Kot_radiani) ... izdelava delnega torusa s središčnim radijem ter polmerom prereza[[BR]][[BR]]
    346345 * (Radij_torusa, Radij_prereza, Kot_a1_rad, Kot_a2_rad) ... izdelava delnega torusa, ki ima odstanjen sredinski del pod kotom 1 in kotom 2
    347 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     346[[BR]][[BR]][[BR]][[BR]]
    348347
    349348
    350349=== Izdelava izvleka ===
    351 [[Image(Izvlek_2.png, right)]]
     350[[Image(Izvlek_2.png, 600, right)]]
    352351{{{
    353352#!python
     
    358357 * (Povrsina , Vektor) ... izberemo obstoječo površino ter jo izvlečemo za velikost vektorja
    359358 * (Povrsina , Smer) ... izberemo obstoječo površino ter jo izvlečemo v željeni smeri
    360 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     359[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    361360
    362361
    363362=== Izdelava krožnega izvleka ===
    364 [[Image(Izvlek_krozni.png, right)]]
     363[[Image(Izvlek_krozni.png, 600, right)]]
    365364{{{
    366365#!python
     
    371370 * (Povrsina , Os) ... zavrtimo izbrano površino okoli osi
    372371 * (Povrsina , Os, Kot_radiani) ... zavrtimo izbrano površino za kot okoli osi
    373 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     372[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    374373----
    375374
    376375== Uporaba menijev znotraj prikaznega okna ==
    377 [[Image(Meniji.png, right)]]
     376[[Image(Meniji.png, 600, right)]]
    378377
    379378Najprej 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()].
     
    393392add_function_to_menu('Ime_menija',Funkcija2)
    394393}}}
    395 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     394[[BR]][[BR]]
    396395
    397396
     
    404403[[BR]][[BR]]
    405404
    406 Seštevanje (Fusion) [[Image(20.png, right)]]  [[BR]][[BR]]
     405Seštevanje (Fusion) [[Image(20.png, 300, right)]]  [[BR]][[BR]]
    407406Operacija seštevanja objektov se izvaja z uporabo ukaza [http://opencascade.sourcearchive.com/documentation/6.3.0.dfsg.1/classBRepAlgoAPI__Fuse.html BRepAlgoAPI__Fuse], kjer dodamo kot argumente 3D obliki, ki ju želimo združiti:
    408407{{{
     
    410409sestevanje = BRepAlgoAPI_Fuse(Oblika1,Oblika2)
    411410}}}
    412 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    413 
    414 
    415 Presek (Common) [[Image(21.png, right)]]  [[BR]][[BR]]
     411[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     412
     413
     414Presek (Common) [[Image(21.png, 300, right)]]  [[BR]][[BR]]
    416415Operacija izdelave preseka objektov se izvaja z uporabo ukaza [http://opencascade.sourcearchive.com/documentation/6.3.0.dfsg.1/classBRepAlgoAPI__Common.html BRepAlgoAPI__Common], kjer dodamo kot argumente 3D obliki, med katerimi želimo poiskati skupni volumen:
    417416{{{
     
    419418presek = BRepAlgoAPI_Common(Oblika1,Oblika2)
    420419}}}
    421 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    422 
    423 
    424 Odštevanje (Cut) [[Image(22.png, right)]]  [[BR]][[BR]]
     420[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     421
     422
     423Odštevanje (Cut) [[Image(22.png, 600, right)]]  [[BR]][[BR]]
    425424Operacija odštevanjaobjektov se izvaja z uporabo ukaza [http://opencascade.sourcearchive.com/documentation/6.3.0.dfsg.1/classBRepAlgoAPI__Cut.html BRepAlgoAPI__Cut], kjer dodamo kot argumente 3D obliki. Prvi argument predstavlja osnovno obliko, drugi argument pa predstavlja geometrijo, ki jo odštevamo. Vrstni red je v tem primeru pomemben!
    426425{{{
     
    428427odstevanje = BRepAlgoAPI_Cut(Objekt1, Objekt2)
    429428}}}
    430 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     429[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    431430
    432431
    433432== Geometrijske transformacije ==
    434 Translacija objekta (Transform) [[Image(23.png, right)]] [[BR]][[BR]]
     433Translacija objekta (Transform) [[Image(23.png, 600, right)]] [[BR]][[BR]]
    435434Za premik objekta v prostoru se uporabi funkcija za translacijo. Pri tem je potrebno najprej določiti vektor premika, nato pa izberemo obliko, ki jo želimo premakniti v prostoru. Preprosta koda je zapisana:
    436435{{{
     
    441440rezultat = BRepBuilderAPI_Transform(Oblika, Translacija).Shape()
    442441}}}
    443 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    444 
    445 
    446 Rotacija objekta (Rotation) [[Image(24.png, right)]]  [[BR]][[BR]]
     442[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     443
     444
     445Rotacija objekta (Rotation) [[Image(24.png, 600, right)]]  [[BR]][[BR]]
    447446V kolikor želimo obstoječi objekt rotirati, je potrebno določiti najprej referenčno točko, ki služi kot lokacija osi vrtenja, ter nato določiti še rotacijsko os s smerjo vektorja. Potrebno je tudi določiti kot rotacije, ki ga določimo v radianih. Nazadnje izberemeo obliko, ki jo hočemo zavrteti okoli izbrane osi. Preprosti algoritem je zapisan:
    448447{{{
     
    454453rezultat = BRepBuilderAPI_Transform(Oblika, TransfRot).Shape()
    455454}}}
    456 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    457 
    458 
    459 Povečava objekta (Scale) [[Image(24a.png, right)]]  [[BR]][[BR]]
     455[[BR]][[BR]][[BR]][[BR]]
     456
     457
     458Povečava objekta (Scale) [[Image(24a.png, 300, right)]]  [[BR]][[BR]]
    460459Objektu lahko spremmenimo  velikost tudi po tem, ko je le ta enkrat že narejen. To napravimo z uporabo orodja za povečavo. Pri tem rabimo določiti referenčno točko za izvajanje geometrijske operacije ter merilo (povečavo objekta). Nazadnje izberemeo obliko, ki ji hočemo spremeniti merilo. Preprosti algoritem je zapisan:
    461460{{{
     
    466465rezultat = BRepBuilderAPI_Transform(Oblika Povecava).Shape()
    467466}}}
    468 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     467[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    469468
    470469
     
    485484
    486485==== Zaokrožitev s konstantnim radiem zaokrožitve ====
    487 Prvi korak je izbira objekta, na katerem se izvede zaokrožitev: [[Image(25.png, right)]]
     486Prvi korak je izbira objekta, na katerem se izvede zaokrožitev: [[Image(25.png, 600, right)]]
    488487{{{
    489488#!python
     
    498497#    zaokrozitev.Add(Radij_1, Radij_2 , aEdge)
    499498}}}
    500 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]] [[Image(26.png, right)]]
     499[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]] [[Image(26.png, 300, right)]]
    501500Za izbiro točno določenih robov, na katerih hočemo izvesti zakrožitve, je potrebno vpeljati različne geometrijske teste. Primer, ko hočemo zakrožiti zgolj vertikalne robove kocke. Vpeljemo preprosti test, ki nam pove, če točki robova ležita na isti ravnini (X,Y).
    502501{{{
     
    509508}}}
    510509Pri izdelavi zaokrožitev moramo biti pozorni na velikost zaokrožitve. Vrednost zaokrožitve mora biti dovolj majhna da lahko normalno zaokrožimo robove.
    511 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     510[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    512511
    513512
    514513==== Zaokrožitev z variabilnim radiem zaokrožitve ====
    515 [[Image(27.png, right)]]
     514[[Image(27.png, 300, right)]]
    516515Za apliciranje variabilnega radija zaokrožitve na modelu je potrebno razdeliti izbrani rob na intervale ter nato določiti radij zaokrožitve na določenem intervalu. Primer razdelitve robu na 6 intervalov ter določitev parametrov:
    517516{{{
     
    543542
    544543==== Zaokrožitev okoli točke ====
    545 [[Image(28.png, right)]]
     544[[Image(28.png, 300, right)]]
    546545Zaokrožitev lahko izvedemo tudi okoli točke. V tem primeru je potrebno najprej izbrati točko, okoli katere hočemo izvesti zaokrožitev. Nato določimo vse robove, ki imajo začetno ali končno vozlišče v izbrani točki, ter izvedemo zaokrožitev na teh robovih. To lahko naredimo z uvedbo nove funkcije:
    547546{{{
     
    566565zaokrozitev_tocka = vertex_fillet(oblika,tocka1)
    567566}}}
    568 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     567[[BR]][[BR]]
    569568
    570569
    571570=== Izdelava posnetij (Chamfer) ===
     571[[Image(29.png,600, right)]]
    572572Pri izdelavi posnetij v programskem okolju je potrebno predhodno uvesti knjižnico orodij za izdelavo posnetij:
    573573{{{
     
    609609
    610610=== Izdelava lupine ( Shell ) ===
     611[[Image(30.png, 600, right)]]
    611612Volumski model lahko pretvorimo tudi v tenkostenski objekt z orodjem za izdelavo lupin. Pri tem uporabimo nabor ukazov iz knjižnice BRepOffsetAPI:
    612613{{{
     
    619620lupina = BRepOffsetAPI_MakeThickSolid(Oblika, Odstr_ploskve, debelina, toleranca)
    620621}}}
     622[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    621623
    622624=== Izdelava odmika ( OffsetShape ) ===
     625[[Image(31.png, 300, right)]]
    623626Z orodjem za izdelavo odmika lahko napravimo nov objekt, ki bazira na obstoječi geometriji, le da je nekoliko večji ali pa manjši. Za uporabo ukaza je potrebno v program uvesti knjižnico:
    624627{{{
     
    632635odmik = BRepOffsetAPI_MakeOffsetShape(Oblika,debelina,toleranca, BRepOffset_Skin, Standard_False, Standard_False, GeomAbs_Intersection)
    633636}}}
     637[[BR]][[BR]][[BR]][[BR]][[BR]]
     638
    634639=== Izdelava kota nagiba ( Draft_Angle ) ===
    635640