|   | 464 |  | 
                  
                          |   | 465 | === Uporaba funkcije zaokrožitve, pozicioniranje valja na izbrano mesto, združevanje CAD modelov ter izvoz v STEP format === | 
                  
                          |   | 466 |  | 
                  
                          |   | 467 | V naslednjem primeru so prikazane naslednje funkcije: | 
                  
                          |   | 468 | * zaokrožitve | 
                  
                          |   | 469 | * pozicioniranje elementa | 
                  
                          |   | 470 | * združevanje CAD modelov | 
                  
                          |   | 471 | * enostaven izvoz CAD modela v STEP format | 
                  
                          |   | 472 |  | 
                  
                          |   | 473 | {{{ | 
                  
                          |   | 474 | #!python | 
                  
                          |   | 475 | ##Copyright 2011 Simon Kulovec (simon.kulovec@lecad.si) | 
                  
                          |   | 476 | ##This file is part of pythonOCC. | 
                  
                          |   | 477 |  | 
                  
                          |   | 478 | ## Importanje razlicnih knjiznic | 
                  
                          |   | 479 |  | 
                  
                          |   | 480 | # Uporabniski vmesnik GUI | 
                  
                          |   | 481 | from OCC.Display.SimpleGui import * | 
                  
                          |   | 482 |  | 
                  
                          |   | 483 | # OpenCascade | 
                  
                          |   | 484 | from OCC.gp import * | 
                  
                          |   | 485 | from OCC.TopoDS import * | 
                  
                          |   | 486 | from OCC.GC import * | 
                  
                          |   | 487 | from OCC.BRepBuilderAPI import * | 
                  
                          |   | 488 | from OCC.BRepPrimAPI import * | 
                  
                          |   | 489 | from OCC.BRepFilletAPI import * | 
                  
                          |   | 490 | from OCC.BRepAlgoAPI import * | 
                  
                          |   | 491 | from OCC.Utils.Topology import * | 
                  
                          |   | 492 | from OCC.BRep import * | 
                  
                          |   | 493 | from OCC.Utils.DataExchange.STEP import STEPExporter | 
                  
                          |   | 494 |  | 
                  
                          |   | 495 | # OCC.Display.SimpleGui.init_display() returns multiple | 
                  
                          |   | 496 | # values which are assigned here | 
                  
                          |   | 497 | display, start_display, add_menu, add_function_to_menu = \ | 
                  
                          |   | 498 | init_display() | 
                  
                          |   | 499 |  | 
                  
                          |   | 500 | # Definiranje spremenljivk | 
                  
                          |   | 501 | myWidth = 50.0 | 
                  
                          |   | 502 | myThickness = 30.0 | 
                  
                          |   | 503 | myHeight = 70.0 | 
                  
                          |   | 504 |  | 
                  
                          |   | 505 | # Definiranje zacetnih tock | 
                  
                          |   | 506 | aPnt1 = gp_Pnt(-myWidth / 2. , 0 , 0) | 
                  
                          |   | 507 | aPnt2 = gp_Pnt(-myWidth / 2. , -myThickness / 4. , 0) | 
                  
                          |   | 508 | aPnt3 = gp_Pnt(0 , -myThickness / 2. , 0) | 
                  
                          |   | 509 | aPnt4 = gp_Pnt(myWidth / 2. , -myThickness / 4. , 0) | 
                  
                          |   | 510 | aPnt5 = gp_Pnt(myWidth / 2. , 0 , 0) | 
                  
                          |   | 511 |  | 
                  
                          |   | 512 | # Definiranje geometrije | 
                  
                          |   | 513 | aArcOfCircle = GC_MakeArcOfCircle(aPnt2,aPnt3 ,aPnt4) | 
                  
                          |   | 514 | aSegment1 = GC_MakeSegment(aPnt1 , aPnt2) | 
                  
                          |   | 515 | aSegment2 = GC_MakeSegment(aPnt4 , aPnt5) | 
                  
                          |   | 516 |  | 
                  
                          |   | 517 | # Definiranje topologije | 
                  
                          |   | 518 | aEdge1 = BRepBuilderAPI_MakeEdge(aSegment1.Value()) | 
                  
                          |   | 519 | aEdge2 = BRepBuilderAPI_MakeEdge(aArcOfCircle.Value()) | 
                  
                          |   | 520 | aEdge3 = BRepBuilderAPI_MakeEdge(aSegment2.Value()) | 
                  
                          |   | 521 | aWire  = BRepBuilderAPI_MakeWire(aEdge1.Edge() , aEdge2.Edge() ,\ | 
                  
                          |   | 522 |                                          aEdge3.Edge()) | 
                  
                          |   | 523 |  | 
                  
                          |   | 524 | # Izdelava celotnega profila - mirror | 
                  
                          |   | 525 |  | 
                  
                          |   | 526 | xAxis = gp_OX() | 
                  
                          |   | 527 | aTrsf = gp_Trsf() | 
                  
                          |   | 528 | aTrsf.SetMirror(xAxis) | 
                  
                          |   | 529 | aBRepTrsf = BRepBuilderAPI_Transform(aWire.Shape() , aTrsf) | 
                  
                          |   | 530 | aMirroredShape = aBRepTrsf.Shape() | 
                  
                          |   | 531 | aMirroredWire = TopoDS_wire(aMirroredShape) | 
                  
                          |   | 532 | mkWire = BRepBuilderAPI_MakeWire() | 
                  
                          |   | 533 | mkWire.Add(aWire.Wire()) | 
                  
                          |   | 534 | mkWire.Add(aMirroredWire) | 
                  
                          |   | 535 | myWireProfile = mkWire.Wire() | 
                  
                          |   | 536 |  | 
                  
                          |   | 537 | # Telo: Iz profila se izdela telo | 
                  
                          |   | 538 | myFaceProfile = BRepBuilderAPI_MakeFace(myWireProfile) | 
                  
                          |   | 539 | aPrismVec = gp_Vec(0 , 0 , myHeight) | 
                  
                          |   | 540 | myBody = BRepPrimAPI_MakePrism(myFaceProfile.Face() , aPrismVec) | 
                  
                          |   | 541 |  | 
                  
                          |   | 542 | # Telo: Dodamo zaokrozitve (fillet) | 
                  
                          |   | 543 | mkFillet = BRepFilletAPI_MakeFillet(myBody.Shape()) | 
                  
                          |   | 544 | topology_traverser = Topo(myBody.Shape()) | 
                  
                          |   | 545 | for aEdge in topology_traverser.edges(): | 
                  
                          |   | 546 |     mkFillet.Add(myThickness / 12. , aEdge) | 
                  
                          |   | 547 | myBody = mkFillet.Shape() | 
                  
                          |   | 548 |  | 
                  
                          |   | 549 | # Dodajanje grla na steklenico (valj) | 
                  
                          |   | 550 | neckLocation = gp_Pnt(0, 0, myHeight) #Določitev lokacije valja | 
                  
                          |   | 551 | neckNormal = gp_DZ() #smer normale, v katero bomo valj izvlekli | 
                  
                          |   | 552 | neckAx2 = gp_Ax2(neckLocation, neckNormal)  | 
                  
                          |   | 553 |  | 
                  
                          |   | 554 | myNeckRadius = myThickness / 4 #radij valja | 
                  
                          |   | 555 | myNeckHeight = myHeight / 10 # višina valja | 
                  
                          |   | 556 |  | 
                  
                          |   | 557 | mkCylinder = BRepPrimAPI_MakeCylinder(neckAx2 , myNeckRadius , \ | 
                  
                          |   | 558 |                                           myNeckHeight) | 
                  
                          |   | 559 | myNeck = mkCylinder.Shape(); | 
                  
                          |   | 560 |  | 
                  
                          |   | 561 | myBody = BRepAlgoAPI_Fuse(myBody, myNeck) #dodajanje valja k obliki myBody | 
                  
                          |   | 562 |  | 
                  
                          |   | 563 | # Izdelava sestava | 
                  
                          |   | 564 | aRes = TopoDS_Compound() #Določitev spremenljivke za sestav | 
                  
                          |   | 565 | aBuilder = BRep_Builder() | 
                  
                          |   | 566 | aBuilder.MakeCompound (aRes) | 
                  
                          |   | 567 | aBuilder.Add (aRes, myBody.Shape()) #Dodajanje različnih oblik v sestav aRes | 
                  
                          |   | 568 |  | 
                  
                          |   | 569 | # Export to STEP () | 
                  
                          |   | 570 | my_step_exporter = STEPExporter("export_step_file.stp") #Določevanje imena STEP file.a  | 
                  
                          |   | 571 | my_step_exporter.add_shape(aRes) #Dodajanje oblike v STEP file | 
                  
                          |   | 572 | my_step_exporter.write_file() | 
                  
                          |   | 573 |  | 
                  
                          |   | 574 | # Izris oblike | 
                  
                          |   | 575 | display.EraseAll() | 
                  
                          |   | 576 | print dir(display) | 
                  
                          |   | 577 | display.DisplayShape(aRes) | 
                  
                          |   | 578 |  | 
                  
                          |   | 579 | start_display() | 
                  
                          |   | 580 | }}} |