Changes between Version 27 and Version 28 of PythonOcc/primitives
- Timestamp:
- Nov 22, 2013, 1:33:46 PM (11 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
PythonOcc/primitives
v27 v28 57 57 start_display() 58 58 }}} 59 S tem ukazom iniciramo modelno okno. Definicija uporabljenih geometrijskih oblik mora biti podana preden se ukaz izvede.[[Image(display.png, right)]]59 S tem ukazom iniciramo modelno okno. Definicija uporabljenih geometrijskih oblik mora biti podana preden se ukaz izvede.[[Image(display.png, 500, right)]] 60 60 [[BR]][[BR]][[BR]][[BR]] 61 61 … … 93 93 == Preprosti program- Primer izdelave izvleka v prostor (Extrude) == 94 94 95 Primer izdelave kocke z dimenzijami 10x10x10. Postopek modeliranja v [[Image(Kocka.png, right)]]95 Primer izdelave kocke z dimenzijami 10x10x10. Postopek modeliranja v [[Image(Kocka.png, 300, right)]] 96 96 komercialnih modelirnikih (SolidWorks, Catia, NX, ProEngineer, Inventor,...) 97 97 je sledeči: … … 102 102 * določitev parametrov izvleka (smer, dolžina izvleka)[[BR]][[BR]] 103 103 * model je zmodeliran 104 [[BR]][[BR]][[BR]][[BR]] [[BR]][[BR]][[BR]]104 [[BR]][[BR]][[BR]][[BR]] 105 105 106 106 V okolju Python OCC poteka izris objekta nekoliko drugače. Razložen je … … 109 109 običajno določi namesto nas.[[BR]][[BR]] 110 110 111 Korak 01: Izdelava točke v prostoru [[Image(Vozlisca.png, right)]]111 Korak 01: Izdelava točke v prostoru [[Image(Vozlisca.png, 300, right)]] 112 112 Razlaga ukaza za izdelavo točke [http://opencascade.sourcearchive.com/documentation/6.3.0.dfsg.1/classgp__Pnt.html gp__Pnt] 113 113 {{{ … … 125 125 display.DisplayShape(Vozlisce.Shape()) 126 126 }}} 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 130 Korak 02: Izdelava robov iz točk [[Image(Robovi.png, 300, right)]] 131 131 {{{ 132 132 #!python … … 140 140 display.DisplayShape(Rob.Shape()) 141 141 }}} 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 144 Korak 03: Izdelava mrežnega modela iz točk [[Image(Wire.png, 300, right)]] 145 145 {{{ 146 146 #!python … … 158 158 display.DisplayShape(Mreza.Shape()) 159 159 }}} 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 162 Korak 04: Izdelava površine iz obstoječe mreže [[Image(Povrsina.png, 300, right)]] 163 163 {{{ 164 164 #!python … … 172 172 display.DisplayShape(Povrsina.Shape()) 173 173 }}} 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 176 Korak 05: Izdelava izvleka v prostor [[Image(Solid.png, 300, right)]] 177 177 Izdelano površino lahko uporabimo za izdelavo tridimenzionalne oblike. Če hočemo narediti 178 178 izvlek, je potrebno najprej določiti še parametre vičine izvleka. V ta namen določimo vektor, … … 191 191 Izvlek = BRepPrimAPI_MakePrism(Povrsina.Face() , Smer) 192 192 }}} 193 [[BR]][[BR]] [[BR]][[BR]][[BR]]193 [[BR]][[BR]] 194 194 195 195 Barvo modela lhako po želji spremenimo z uporabo ukaza: … … 200 200 [[BR]][[BR]] 201 201 202 Primer programa za izdelavo izvleka:[[Image(Solid-barve.png, right)]]202 Primer programa za izdelavo izvleka:[[Image(Solid-barve.png, 300, right)]] 203 203 {{{ 204 204 #!python … … 252 252 253 253 === Izdelava kvadra === 254 [[Image(Kvader.png, right)]]254 [[Image(Kvader.png, 300, right)]] 255 255 {{{ 256 256 #!python … … 263 263 * (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]] 264 264 * (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]] 266 266 267 267 268 268 === Izdelava izvleka pod kotom nagiba === 269 [[Image(Kvader-nagib.png, right)]]269 [[Image(Kvader-nagib.png, 600, right)]] 270 270 {{{ 271 271 #!python … … 284 284 285 285 === Izdelava valja === 286 [[Image(Valj.png, right)]]286 [[Image(Valj.png, 600, right)]] 287 287 {{{ 288 288 #!python … … 301 301 os = gp_Ax2(Tocka, normala) #definicija osi 302 302 }}} 303 [[BR]][[BR]]304 303 305 304 306 305 === Izdelava stožca === 307 [[Image(Stozec.png, right)]]306 [[Image(Stozec.png, 600, right)]] 308 307 {{{ 309 308 #!python … … 315 314 * (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]] 316 315 * (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]] 318 317 319 318 320 319 === Izdelava sfere === 321 [[Image(Sfera.png, right)]]320 [[Image(Sfera.png, 600, right)]] 322 321 {{{ 323 322 #!python … … 331 330 * (Radij, Kot_a1_rad, Kot_a2_rad) ... izdelave sfere, ki ima odstanjen sredinski del pod kotom 1 in kotom 2[[BR]][[BR]] 332 331 * (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]] 334 333 335 334 === Izdelava torusa === 336 [[Image(Torus.png, right)]]335 [[Image(Torus.png, 600, right)]] 337 336 {{{ 338 337 #!python … … 345 344 * (Radij_torusa, Radij_prereza, Kot_radiani) ... izdelava delnega torusa s središčnim radijem ter polmerom prereza[[BR]][[BR]] 346 345 * (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]] 348 347 349 348 350 349 === Izdelava izvleka === 351 [[Image(Izvlek_2.png, right)]]350 [[Image(Izvlek_2.png, 600, right)]] 352 351 {{{ 353 352 #!python … … 358 357 * (Povrsina , Vektor) ... izberemo obstoječo površino ter jo izvlečemo za velikost vektorja 359 358 * (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]] 361 360 362 361 363 362 === Izdelava krožnega izvleka === 364 [[Image(Izvlek_krozni.png, right)]]363 [[Image(Izvlek_krozni.png, 600, right)]] 365 364 {{{ 366 365 #!python … … 371 370 * (Povrsina , Os) ... zavrtimo izbrano površino okoli osi 372 371 * (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]] 374 373 ---- 375 374 376 375 == Uporaba menijev znotraj prikaznega okna == 377 [[Image(Meniji.png, right)]]376 [[Image(Meniji.png, 600, right)]] 378 377 379 378 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()]. … … 393 392 add_function_to_menu('Ime_menija',Funkcija2) 394 393 }}} 395 [[BR]][[BR]] [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]394 [[BR]][[BR]] 396 395 397 396 … … 404 403 [[BR]][[BR]] 405 404 406 Seštevanje (Fusion) [[Image(20.png, right)]] [[BR]][[BR]]405 Seštevanje (Fusion) [[Image(20.png, 300, right)]] [[BR]][[BR]] 407 406 Operacija 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: 408 407 {{{ … … 410 409 sestevanje = BRepAlgoAPI_Fuse(Oblika1,Oblika2) 411 410 }}} 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 414 Presek (Common) [[Image(21.png, 300, right)]] [[BR]][[BR]] 416 415 Operacija 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: 417 416 {{{ … … 419 418 presek = BRepAlgoAPI_Common(Oblika1,Oblika2) 420 419 }}} 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 423 Odštevanje (Cut) [[Image(22.png, 600, right)]] [[BR]][[BR]] 425 424 Operacija 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! 426 425 {{{ … … 428 427 odstevanje = BRepAlgoAPI_Cut(Objekt1, Objekt2) 429 428 }}} 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]] 431 430 432 431 433 432 == Geometrijske transformacije == 434 Translacija objekta (Transform) [[Image(23.png, right)]] [[BR]][[BR]]433 Translacija objekta (Transform) [[Image(23.png, 600, right)]] [[BR]][[BR]] 435 434 Za 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: 436 435 {{{ … … 441 440 rezultat = BRepBuilderAPI_Transform(Oblika, Translacija).Shape() 442 441 }}} 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 445 Rotacija objekta (Rotation) [[Image(24.png, 600, right)]] [[BR]][[BR]] 447 446 V 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: 448 447 {{{ … … 454 453 rezultat = BRepBuilderAPI_Transform(Oblika, TransfRot).Shape() 455 454 }}} 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 458 Povečava objekta (Scale) [[Image(24a.png, 300, right)]] [[BR]][[BR]] 460 459 Objektu 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: 461 460 {{{ … … 466 465 rezultat = BRepBuilderAPI_Transform(Oblika Povecava).Shape() 467 466 }}} 468 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]] [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]467 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]] 469 468 470 469 … … 485 484 486 485 ==== Zaokrožitev s konstantnim radiem zaokrožitve ==== 487 Prvi korak je izbira objekta, na katerem se izvede zaokrožitev: [[Image(25.png, right)]]486 Prvi korak je izbira objekta, na katerem se izvede zaokrožitev: [[Image(25.png, 600, right)]] 488 487 {{{ 489 488 #!python … … 498 497 # zaokrozitev.Add(Radij_1, Radij_2 , aEdge) 499 498 }}} 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)]] 501 500 Za 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). 502 501 {{{ … … 509 508 }}} 510 509 Pri 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]] 512 511 513 512 514 513 ==== Zaokrožitev z variabilnim radiem zaokrožitve ==== 515 [[Image(27.png, right)]]514 [[Image(27.png, 300, right)]] 516 515 Za 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: 517 516 {{{ … … 543 542 544 543 ==== Zaokrožitev okoli točke ==== 545 [[Image(28.png, right)]]544 [[Image(28.png, 300, right)]] 546 545 Zaokrož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: 547 546 {{{ … … 566 565 zaokrozitev_tocka = vertex_fillet(oblika,tocka1) 567 566 }}} 568 [[BR]][[BR]] [[BR]][[BR]][[BR]][[BR]][[BR]]567 [[BR]][[BR]] 569 568 570 569 571 570 === Izdelava posnetij (Chamfer) === 571 [[Image(29.png,600, right)]] 572 572 Pri izdelavi posnetij v programskem okolju je potrebno predhodno uvesti knjižnico orodij za izdelavo posnetij: 573 573 {{{ … … 609 609 610 610 === Izdelava lupine ( Shell ) === 611 [[Image(30.png, 600, right)]] 611 612 Volumski model lahko pretvorimo tudi v tenkostenski objekt z orodjem za izdelavo lupin. Pri tem uporabimo nabor ukazov iz knjižnice BRepOffsetAPI: 612 613 {{{ … … 619 620 lupina = BRepOffsetAPI_MakeThickSolid(Oblika, Odstr_ploskve, debelina, toleranca) 620 621 }}} 622 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]] 621 623 622 624 === Izdelava odmika ( OffsetShape ) === 625 [[Image(31.png, 300, right)]] 623 626 Z 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: 624 627 {{{ … … 632 635 odmik = BRepOffsetAPI_MakeOffsetShape(Oblika,debelina,toleranca, BRepOffset_Skin, Standard_False, Standard_False, GeomAbs_Intersection) 633 636 }}} 637 [[BR]][[BR]][[BR]][[BR]][[BR]] 638 634 639 === Izdelava kota nagiba ( Draft_Angle ) === 635 640