def build_plate(polygon, points): ''' build a surface from a constraining polygon(s) and point(s) @param polygon: list of polygons ( TopoDS_Shape) @param points: list of points ( gp_Pnt ) ''' # plate surface bpSrf = GeomPlate_BuildPlateSurface(3, 15, 2) # add curve constraints for poly in polygon: for edg in WireExplorer(poly).ordered_edges(): c = BRepAdaptor_HCurve() c.ChangeCurve().Initialize(edg) constraint = BRepFill_CurveConstraint(c.GetHandle(), 0) bpSrf.Add(constraint.GetHandle()) # add point constraint for pt in points: bpSrf.Add(GeomPlate_PointConstraint(pt, 0).GetHandle()) bpSrf.Perform() maxSeg, maxDeg, critOrder = 9, 8, 0 tol = 1e-4 dmax = max([tol, 10 * bpSrf.G0Error()]) srf = bpSrf.Surface() plate = GeomPlate_MakeApprox(srf, tol, maxSeg, maxDeg, dmax, critOrder) uMin, uMax, vMin, vMax = srf.GetObject().Bounds() return make_face(plate.Surface(), uMin, uMax, vMin, vMax, 1e-4)
def build_geom_plate(edges): bpSrf = GeomPlate_BuildPlateSurface(3, 9, 12) # add curve constraints for edg in edges: c = BRepAdaptor_HCurve() print('edge:', edg) c.ChangeCurve().Initialize(edg) constraint = BRepFill_CurveConstraint(c.GetHandle(), 0) bpSrf.Add(constraint.GetHandle()) # add point constraint try: bpSrf.Perform() except RuntimeError: print('Failed to build the geom plate surface') maxSeg, maxDeg, critOrder = 9, 8, 0 srf = bpSrf.Surface() plate = GeomPlate_MakeApprox(srf, 1e-04, 100, 9, 1e-03, 0) uMin, uMax, vMin, vMax = srf.GetObject().Bounds() face = make_face(plate.Surface(), uMin, uMax, vMin, vMax, 1e-6) return face
def make_constrained_surface_from_edges(edges): ''' DOESNT RESPECT BOUNDARIES ''' from OCC.Core.GeomPlate import GeomPlate_MakeApprox, GeomPlate_BuildPlateSurface from OCC.Core.Core.BRepFill import BRepFill_CurveConstraint bpSrf = GeomPlate_BuildPlateSurface(3, 15, 2) for edg in edges: c = BRepAdaptor_HCurve() c.ChangeCurve().Initialize(edg) constraint = BRepFill_CurveConstraint(c.GetHandle(), 0) bpSrf.Add(constraint.GetHandle()) bpSrf.Perform() maxSeg, maxDeg, critOrder = 9, 8, 0 tol = 1e-4 srf = bpSrf.Surface() plate = GeomPlate_MakeApprox(srf, tol, maxSeg, maxDeg, tol, critOrder) uMin, uMax, vMin, vMax = srf.GetObject().Bounds() face = make_face(plate.Surface(), uMin, uMax, vMin, vMax) return face