def ngon_to_face(points: NGon) -> TopoDS_Face: """Convert a Ngon to a BRep face with an underlying best-fit surface. Parameters ---------- points : sequence[point] Points defining a polygon. Returns ------- TopoDS_Face """ points = [gp_Pnt(*point) for point in points] poly = BRepBuilderAPI_MakePolygon() for point in points: poly.Add(point) poly.Build() poly.Close() edges = TopologyExplorer(poly.Wire()).edges() nsided = BRepFill_Filling() for edge in edges: nsided.Add(edge, GeomAbs_C0) nsided.Build() return nsided.Face()
def make_closed_polygon(*args): poly = BRepBuilderAPI_MakePolygon() for pt in args: if isinstance(pt, list) or isinstance(pt, tuple): for i in pt: poly.Add(i) else: poly.Add(pt) poly.Build() poly.Close() result = poly.Wire() return result
def make_closed_polygon(*args): poly = BRepBuilderAPI_MakePolygon() for pt in args: if isinstance(pt, list) or isinstance(pt, tuple): for i in pt: poly.Add(i) else: poly.Add(pt) poly.Build() poly.Close() with assert_isdone(poly, 'failed to produce wire'): result = poly.Wire() return result
def make_polygon(args, closed=False): poly = BRepBuilderAPI_MakePolygon() for pt in args: # support nested lists if isinstance(pt, list) or isinstance(pt, tuple): for i in pt: poly.Add(i) else: poly.Add(pt) if closed: poly.Close() poly.Build() result = poly.Wire() return result
def make_polygon(args, closed=False): poly = BRepBuilderAPI_MakePolygon() for pt in args: # support nested lists if isinstance(pt, list) or isinstance(pt, tuple): for i in pt: poly.Add(i) else: poly.Add(pt) if closed: poly.Close() poly.Build() with assert_isdone(poly, 'failed to produce wire'): result = poly.Wire() return result
R = Rotation.from_axis_and_angle([1, 1, 0], math.radians(30)) polygon = Polygon.from_sides_and_radius_xy(5, 2) polygon.transform(R) # ============================================================================== # BRep Polygon # ============================================================================== points = [gp_Pnt(*point) for point in polygon] poly = BRepBuilderAPI_MakePolygon() for point in points: poly.Add(point) poly.Build() poly.Close() # ============================================================================== # BRep Filling # ============================================================================== edges = list(TopologyExplorer(poly.Wire()).edges()) nsided = BRepFill_Filling() for edge in edges: nsided.Add(edge, GeomAbs_C0) nsided.Add(gp_Pnt(*(polygon.centroid + normal_polygon(polygon)))) nsided.Build() # ==============================================================================