def get_faceted_L_shape(x, y, z): pnt_A = gp_Pnt(x + 0, y + 0, z + 0) pnt_B = gp_Pnt(x + 20, y + 0, z + 0) pnt_C = gp_Pnt(x + 20, y + 10, z + 0) pnt_D = gp_Pnt(x + 0, y + 10, z + 0) pnt_E = gp_Pnt(x + 0, y + 0, z + 20) pnt_F = gp_Pnt(x + 10, y + 0, z + 20) pnt_G = gp_Pnt(x + 10, y + 10, z + 20) pnt_H = gp_Pnt(x + 0, y + 10, z + 20) pnt_I = gp_Pnt(x + 10, y + 0, z + 10) pnt_J = gp_Pnt(x + 10, y + 10, z + 10) pnt_K = gp_Pnt(x + 20, y + 0, z + 10) pnt_L = gp_Pnt(x + 20, y + 10, z + 10) face_1 = make_face_from_4_points(pnt_A, pnt_B, pnt_C, pnt_D) face_2 = make_face_from_4_points(pnt_B, pnt_C, pnt_L, pnt_K) face_3 = make_face_from_4_points(pnt_E, pnt_F, pnt_G, pnt_H) face_4 = make_face_from_4_points(pnt_A, pnt_E, pnt_H, pnt_D) face_5 = make_face_from_4_points(pnt_G, pnt_F, pnt_I, pnt_J) face_6 = make_face_from_4_points(pnt_I, pnt_K, pnt_L, pnt_J) polygon_1 = BRepBuilderAPI_MakePolygon() polygon_1.Add(pnt_A) polygon_1.Add(pnt_B) polygon_1.Add(pnt_K) polygon_1.Add(pnt_I) polygon_1.Add(pnt_F) polygon_1.Add(pnt_E) polygon_1.Close() face_7 = BRepBuilderAPI_MakeFace(polygon_1.Wire()).Face() polygon_2 = BRepBuilderAPI_MakePolygon() polygon_2.Add(pnt_D) polygon_2.Add(pnt_H) polygon_2.Add(pnt_G) polygon_2.Add(pnt_J) polygon_2.Add(pnt_L) polygon_2.Add(pnt_C) polygon_2.Close() face_8 = BRepBuilderAPI_MakeFace(polygon_2.Wire()).Face() sew = BRepBuilderAPI_Sewing() for face in [ face_1, face_2, face_3, face_4, face_5, face_6, face_7, face_8 ]: sew.Add(face) sew.Perform() return sew.SewedShape()
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 triangle_to_face(points: Triangle) -> TopoDS_Face: """Convert a triangle to a BRep face. Parameters ---------- points : [point, point, point] Three points defining a triangle. Returns ------- TopoDS_Face Raises ------ AssertionError If the number of points is not 3. """ assert len(points) == 3, "The number of input points should be three." polygon = BRepBuilderAPI_MakePolygon() for point in points: polygon.Add(gp_Pnt(*point)) polygon.Close() wire = polygon.Wire() return BRepBuilderAPI_MakeFace(wire).Face()
def __init__(self, pnts, close=False): builder = BRepBuilderAPI_MakePolygon() for p in pnts: p = CheckGeom.to_point(p) builder.Add(p) if close: builder.Close() self._w = Wire(builder.Wire())
def makeFace(pntList) : from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakePolygon from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeFace wire = BRepBuilderAPI_MakePolygon() for i in pntList : wire.Add(i) wire.Close() face = BRepBuilderAPI_MakeFace(wire.Wire()).Face() return 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 _polygon(pnts, wire=False): pnts = points(pnts) if wire: return wire_module._polysegment(pnts, closed=True) mk = BRepBuilderAPI_MakePolygon() for i in range(len(pnts)): mk.Add(pnts[i].Pnt()) mk.Close() return Shape(BRepBuilderAPI_MakeFace(mk.Shape()).Face())
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
def by_points(pnts, close=False): """ Create polygonal wire by connecting points. :param collections.Sequence(point_like) pnts: The ordered points. :param bool close: Option to close the wire. :return: The new wire. :rtype: afem.topology.entities.Wire """ builder = BRepBuilderAPI_MakePolygon() for p in pnts: p = CheckGeom.to_point(p) builder.Add(p) if close: builder.Close() return Wire(builder.Wire())
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() # ============================================================================== # Surface from BRep Filling Face
# ============================================================================== shell = TopoDS_Shell() builder = BRep_Builder() builder.MakeShell(shell) pointdict = [ gp_Pnt(*tubemesh.vertex_attributes(vertex, 'xyz')) for vertex in tubemesh.vertices() ] for face in tubemesh.faces(): polygon = BRepBuilderAPI_MakePolygon() for vertex in tubemesh.face_vertices(face): polygon.Add(pointdict[vertex]) polygon.Close() wire = polygon.Wire() face = BRepBuilderAPI_MakeFace(wire).Face() builder.Add(shell, face) # ============================================================================== # Explore # ============================================================================== polygons = [] tool = BRep_Tool() wires = TopExp_Explorer(shell, TopAbs_WIRE) while wires.More(): wire = topods_Wire(wires.Current())