>

Hi Bryan,

You know I really fancy your involvement in pythonOCC, but I ask you  
kindly to be very precise in replying.
Thing is that noisy and incorrect statements like below than need  
correction etc etc.

> The documentation is primarily meant for the Windows platform, so
> you'll have to use some sort of CHM-viewer thingy.

Cheers mate!

Oh, btw; I noticed your interest in BrepFeat.
A neat little trick is to use ShapeFix before performing a BrepFeat.
That way you're wires are ordered in the correct sense, so you don't  
have to handle it yourself ( I dont get much joy out of that, and I'm  
lazy, so I like it ;')

Here's a nice function to make an open cube that does this.

def open_unit_cube(ratio, scale=None):
     S = BRepPrimAPI_MakeBox(1.,1.,1.).Shape()
     topo = Topo(S)


     def make_wire(face, ratio):
         # 0.5 should be an additional argument: ratio from 0 to 1
         topo = Topo(face)
         wire = topo.wires().next()
         edges, verts = [], []
         te, bt = TopExp(), BRep_Tool()

         _verts = [bt.Pnt(v) for v in  
topo.ordered_vertices_from_wire(wire)]
         center_vec = gp_Vec(_verts[0].XYZ()) +  
gp_Vec(_verts[0],_verts[2])/2.
         center_pnt = gp_Pnt(center_vec.XYZ())

         for e in topo.ordered_edges_from_wire(wire):
             verts.append([ bt.Pnt(te.FirstVertex(e)),
                            bt.Pnt(te.LastVertex(e))
                            ]
                          )
             edges.append(e)

         _wire = BRepBuilderAPI_MakeWire()
         for edg in verts:
             pnts = []
             for v in edg:
                 vec = gp_Vec(v.XYZ()) + gp_Vec(v, center_pnt)*ratio
                 pnts.append(gp_Pnt(vec.XYZ()))

             _wire.Add(BRepBuilderAPI_MakeEdge(pnts[0], pnts[1]).Edge())

         _wire.Build()
         return _wire.Wire()

     def prism(_shape, _face, _wire):

         surf = BRep_Tool().Surface(_face)
         pln  = Handle_Geom_Plane().DownCast(surf).GetObject()
         D2   = pln.Pln().Axis().Direction().Reversed()

         MKF2 = BRepBuilderAPI_MakeFace()
         MKF2.Init(surf,False)
         MKF2.Add(_wire)
         MKF2.Build()
         FP = MKF2.Face()
         BRepLib().BuildCurves3d(FP)

         sfs = ShapeFix_Shape()
         sfs.Init(FP)
         sfs.Perform()
         FP = TopoDS.TopoDS().Face(sfs.Shape())

         MKP2 = BRepFeat_MakePrism(_shape,FP,_face,D2,0,True)
         MKP2.PerformThruAll()
         return MKP2.Shape()

     vert = topo.vertices().next()
     for face in topo.faces_from_vertex(vert):
         _wire = make_wire(face, ratio)
         S = prism(S, face, _wire)

     if scale is not None:
         print 'run scale', scale
         tr = gp_Trsf()
         tr.SetScale(gp_Pnt(), scale)
         gtr = gp_GTrsf()
         gtr.SetTrsf(tr)


         return BRepBuilderAPI_Transform(S, tr, False).Shape()
     else:
         return S

How is the shape mating coming along?
Any screenshots to share buddy ;')

Cheers,

-jelle

_______________________________________________
Pythonocc-users mailing list
Pythonocc-users@gna.org
https://mail.gna.org/listinfo/pythonocc-users

Reply via email to