Changes between Version 22 and Version 23 of PythonOcc/primitives


Ignore:
Timestamp:
Nov 13, 2013, 9:57:48 PM (6 years ago)
Author:
ptomsic
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • PythonOcc/primitives

    v22 v23  
    449449
    450450== Aplicirane značilke ==
     451Podobno kot pri komercialno dostopnih modelirnikih, lahko obstoječo geometrijo naknadno preoblikujemo z uporabo apliciranih značilk. Glavna lastnost apliciranih značilk je, da ne morejo obstajati kot samostojni predmet, ampak rabijo neko predhodno zmodelirano 3D geometrijo, ki jo nato spremenimo. Poznamo mnogo različnih apliciranih značilk. Nekatere izmed njih bomo razložili v tem poglavju.
     452[[BR]][[BR]]
     453
     454=== Izdelava zaokrožitev (Fillet) ===
     455Poznamo dve vrsti zaokrožitve; zaokrožitev s konstantnim radiem zaokrožitve ter zaokrožitev s sprejemljivim radiem zaokrožitve.
     456Knjižnica ukazov za izdelavo zaokrožitev se nahaja v viru BRepFilletAPI in jo je potrebno vključiti v program pred uporabo ukaza:
     457{{{
     458#!python
     459from OCC.TopExp import*       
     460from OCC.BRepFilletAPI import *
     461from OCC.Utils.Topology import *
     462}}}
     463Pri apliciranju vseh vrst zaokrožitev je potrebno imeti podatek o robu oziroma točki kamor hočemo izvesti zaokrožitev ter o parametrih zaokrožitve (radij zaokrožitve).
     464
     465==== Zaokrožitev s konstantnim radiem zaokrožitve ====
     466Prvi korak je izbira objekta, na katerem se izvede zaokrožitev:
     467{{{
     468#!python
     469zaokrozitev = BRepFilletAPI_MakeFillet(Oblika)
     470}}}
     471Sledi izbira robov ter parametrov zaokrožitve. Primer, ko izvedemo zaokrožitev na vseh robovih elementa:
     472{{{
     473#!python
     474topology_traverser = Topo(Oblika)
     475for aEdge in topology_traverser.edges():
     476    zaokrozitev.Add(Radij , aEdge)
     477#    zaokrozitev.Add(Radij_1, Radij_2 , aEdge)
     478}}}
     479Za 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).
     480{{{
     481#!python
     482for aEdge in topology_traverser.edges():
     483    first, last = TopExp().FirstVertex(aEdge), TopExp().LastVertex(aEdge)
     484    first_vert, last_vert = BRep_Tool().Pnt(first), BRep_Tool().Pnt(last)
     485    if first_vert.Z() != last_vert.Z():
     486        zaokrozitev.Add(Radij, aEdge)
     487}}}
     488Pri izdelavi zaokrožitev moramo biti pozorni na velikost zaokrožitve. Vrednost zaokrožitve mora biti dovolj majhna da lahko normalno zaokrožimo robove.
     489
     490==== Zaokrožitev z variabilnim radiem zaokrožitve ====
     491Za 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:
     492{{{
     493#!python
     494TabPoint = TColgp_Array1OfPnt2d(1,6)
     495P1 = gp_Pnt2d(0.,8.)
     496P2 = gp_Pnt2d(0.2,16.)
     497P3 = gp_Pnt2d(0.4,25.)
     498P4 = gp_Pnt2d(0.6,55.)
     499P5 = gp_Pnt2d(0.8,28.)
     500P6 = gp_Pnt2d(1.,20.)
     501TabPoint.SetValue(1,P1)
     502TabPoint.SetValue(2,P2)
     503TabPoint.SetValue(3,P3)
     504TabPoint.SetValue(4,P4)
     505TabPoint.SetValue(5,P5)
     506TabPoint.SetValue(6,P6)
     507}}}
     508Določitev izbranega robu na katerem izvedemo ukaz poteka:
     509{{{
     510#!python
     511exp = TopExp_Explorer(Oblika,TopAbs_EDGE)
     512exp.Next()
     513exp.Next()
     514exp.Next()
     515exp.Next()
     516}}}
     517
     518==== Zaokrožitev okoli točke ====
     519Zaokrož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:
     520{{{
     521#!python
     522def vertex_fillet(oblika, tocka):
     523    afillet = BRepFilletAPI_MakeFillet(oblika)
     524    cnt = 0
     525    for edg in topo.edges_from_vertex(tocka):
     526        first, last = TopExp().FirstVertex(edg), TopExp().LastVertex(edg)
     527        vertex, first_vert, last_vert = BRep_Tool().Pnt(tocka), BRep_Tool().Pnt(first), BRep_Tool().Pnt(last)
     528        if edg.Orientation():
     529            if not vertex.IsEqual(first_vert, 0.001):
     530                afillet.Add(Radij_1, Radij_2, Rob)
     531            else:
     532                afillet.Add(Radij_1, Radij_2, Rob)
     533            cnt+=1
     534    afillet.Build()
     535    if afillet.IsDone():
     536        return afillet.Shape()
     537
     538#izvedba zaokrozitve okoli tocke
     539zaokrozitev_tocka = vertex_fillet(oblika,tocka1)
     540}}}
     541
     542=== Izdelava posnetij (Chamfer) ===
     543
     544=== Izdelava lupine (Shell) ===
     545
     546=== Izdelava odmika (OffsetShape) ===
     547
     548=== Izdelava kota nagiba (Draft_Angle) ===
     549
     550=== Izdelava rebra (MakeLinerForm) ===