def spline_from_polyline(pol): from OCC.Extend.ShapeFactory import point_list_to_TColgp_Array1OfPnt, make_face from OCC.Core.GeomAPI import GeomAPI_PointsToBSpline array = [] for p in pol: array.append(gp_Pnt(p[0], p[1], p[2])) pt_list1 = point_list_to_TColgp_Array1OfPnt(array) SPL1 = GeomAPI_PointsToBSpline(pt_list1).Curve() SPL1 = GeomAPI_PointsToBSpline(pt_list1) edge = BRepBuilderAPI_MakeEdge(SPL1.Curve()) wire = BRepBuilderAPI_MakeWire(edge.Edge()) return edge.Shape(), wire
def display_assembly(self, assembly, transparency=0.): r"""Display an assembly of parts and assemblies Parameters ---------- assembly : AssemblyGeometryNode transparency : float from 0 to 1 """ assembly.build() for i, node in enumerate(assembly.nodes()): # display a sphere at the barycentre from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeSphere sphere = BRepPrimAPI_MakeSphere( _centre_of_mass(node.node_shape.shape), _characteristic_dimension(node.node_shape.shape) / 10.) sphere.Build() self.display_shape( sphere.Shape(), # color_=colour_wx_to_occ((randint(0, 255), # randint(0, 255), # randint(0, 255))), color_=colour_wx_to_occ(color_from_sequence(i, "colors")), transparency=transparency) # self._display_anchors(assembly.anchors) for edge in assembly.edges(data=True): start = _centre_of_mass(edge[0].node_shape.shape) # gp_Pnt end = _centre_of_mass(edge[1].node_shape.shape) # gp_Pnt vec = gp_Vec(end.X() - start.X(), end.Y() - start.Y(), end.Z() - start.Z()) from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge e = BRepBuilderAPI_MakeEdge(start, end) self.display_shape(e.Shape()) edge_constraint = assembly.get_edge_data(edge[0], edge[1])["object"] self.display_message( gp_Pnt((start.X() + 2 * end.X()) / 3, (start.Y() + 2 * end.Y()) / 3, (start.Z() + 2 * end.Z()) / 3), text_to_write=edge_constraint.__class__.__name__, height=13, message_color=(0, 0, 0)) # black self.viewer_display.FitAll()
def constrained_filling(event=None): # left pts1 = point_list_to_TColgp_Array1OfPnt((gp_Pnt(0, 0, 0.0), gp_Pnt(0, 1, 0.3), gp_Pnt(0, 2, -0.3), gp_Pnt(0, 3, 0.15), gp_Pnt(0, 4, 0))) # front pts2 = point_list_to_TColgp_Array1OfPnt((gp_Pnt(0, 0, 0.0), gp_Pnt(1, 0, -0.3), gp_Pnt(2, 0, 0.15), gp_Pnt(3, 0, 0), gp_Pnt(4, 0, 0))) # back pts3 = point_list_to_TColgp_Array1OfPnt((gp_Pnt(0, 4, 0), gp_Pnt(1, 4, 0.3), gp_Pnt(2, 4, -0.15), gp_Pnt(3, 4, 0), gp_Pnt(4, 4, 1))) # rechts pts4 = point_list_to_TColgp_Array1OfPnt((gp_Pnt(4, 0, 0), gp_Pnt(4, 1, 0), gp_Pnt(4, 2, 2), gp_Pnt(4, 3, -0.15), gp_Pnt(4, 4, 1))) spl1, b1 = get_simple_bound(pts1) spl2, b2 = get_simple_bound(pts2) spl3, b3 = get_simple_bound(pts3) spl4, b4 = get_simple_bound(pts4) # build the constrained surface bConstrainedFilling = GeomFill_ConstrainedFilling(8, 2) bConstrainedFilling.Init(b1, b2, b3, b4, False) srf1 = bConstrainedFilling.Surface() display.EraseAll() for i in [spl1, spl2, spl3, spl4]: edg = BRepBuilderAPI_MakeEdge(i) edg.Build() _edg = edg.Shape() display.DisplayShape(_edg) f = BRepBuilderAPI_MakeFace(srf1, 1e-6) f.Build() shp = f.Shape() return shp
def test_check_shape(): r"""check_shape() tests""" # Null shapes should raise a ValueError with pytest.raises(ValueError): check_shape(TopoDS_Shape()) with pytest.raises(ValueError): check_shape(TopoDS_Shell()) builderapi_makeedge = BRepBuilderAPI_MakeEdge(gp_Pnt(), gp_Pnt(10, 10, 10)) shape = builderapi_makeedge.Shape() # a ValueError should be raised is check_shape() is not give # a TopoDS_Shape or subclass with pytest.raises(ValueError): check_shape(gp_Pnt()) with pytest.raises(ValueError): check_shape(builderapi_makeedge) # a TopoDS_Shape should pass the check without raising any exception check_shape(shape) # a subclass of shape should not raise any exception check_shape(Topo(shape, return_iter=False).edges[0])
def DisplayShape(self, shapes, material=None, texture=None, color=None, transparency=None, update=False): """ display one or a set of displayable objects """ ais_shapes = [] # the list of all displayed shapes if issubclass(shapes.__class__, gp_Pnt): # if a gp_Pnt is passed, first convert to vertex vertex = BRepBuilderAPI_MakeVertex(shapes) shapes = [vertex.Shape()] elif isinstance(shapes, gp_Pnt2d): vertex = BRepBuilderAPI_MakeVertex( gp_Pnt(shapes.X(), shapes.Y(), 0)) shapes = [vertex.Shape()] elif isinstance(shapes, Geom_Surface): bounds = True toldegen = 1e-6 face = BRepBuilderAPI_MakeFace() face.Init(shapes, bounds, toldegen) face.Build() shapes = [face.Shape()] elif isinstance(shapes, Geom_Curve): edge = BRepBuilderAPI_MakeEdge(shapes) shapes = [edge.Shape()] elif isinstance(shapes, Geom2d_Curve): edge2d = BRepBuilderAPI_MakeEdge2d(shapes) shapes = [edge2d.Shape()] # if only one shapes, create a list with a single shape if not isinstance(shapes, list): shapes = [shapes] # build AIS_Shapes list for shape in shapes: if material or texture: if texture: shape_to_display = AIS_TexturedShape(shape) filename, toScaleU, toScaleV, toRepeatU, toRepeatV, originU, originV = texture.GetProperties( ) shape_to_display.SetTextureFileName( TCollection_AsciiString(filename)) shape_to_display.SetTextureMapOn() shape_to_display.SetTextureScale(True, toScaleU, toScaleV) shape_to_display.SetTextureRepeat(True, toRepeatU, toRepeatV) shape_to_display.SetTextureOrigin(True, originU, originV) shape_to_display.SetDisplayMode(3) elif material: shape_to_display = AIS_Shape(shape) shape_to_display.SetMaterial( Graphic3d_MaterialAspect(material)) else: # TODO: can we use .Set to attach all TopoDS_Shapes # to this AIS_Shape instance? shape_to_display = AIS_Shape(shape) ais_shapes.append(shape_to_display) # if not SOLO: # # computing graphic properties is expensive # # if an iterable is found, so cluster all TopoDS_Shape under # # an AIS_MultipleConnectedInteractive # #shape_to_display = AIS_MultipleConnectedInteractive() # for ais_shp in ais_shapes: # # TODO : following line crashes with oce-0.18 # # why ? fix ? # #shape_to_display.Connect(i) # self.Context.Display(ais_shp, False) # set the graphic properties if material is None: #The default material is too shiny to show the object #color well, so I set it to something less reflective for shape_to_display in ais_shapes: shape_to_display.SetMaterial( Graphic3d_MaterialAspect(Graphic3d_NOM_NEON_GNC)) if color: if isinstance(color, str): color = get_color_from_name(color) elif isinstance(color, int): color = Quantity_Color(color) for shp in ais_shapes: self.Context.SetColor(shp, color, False) if transparency: for shape_to_display in ais_shapes: shape_to_display.SetTransparency(transparency) # display the shapes for shape_to_display in ais_shapes: self.Context.Display(shape_to_display, False) if update: # especially this call takes up a lot of time... self.FitAll() self.Repaint() return ais_shapes
def make_edge(shape): spline = BRepBuilderAPI_MakeEdge(shape) spline.Build() return spline.Shape()
def DisplayShape(self, shapes, material=None, texture=None, color=None, transparency=None, update=False): """ display one or a set of displayable objects """ SOLO = False # assume multiple instances by default # if a gp_Pnt is passed, first convert to vertex if issubclass(shapes.__class__, gp_Pnt): vertex = BRepBuilderAPI_MakeVertex(shapes) shapes = [vertex.Shape()] SOLO = True elif isinstance(shapes, gp_Pnt2d): vertex = BRepBuilderAPI_MakeVertex( gp_Pnt(shapes.X(), shapes.Y(), 0)) shapes = [vertex.Shape()] SOLO = True # if a Geom_Curve is passed elif callable(getattr(shapes, "GetHandle", None)): handle = shapes.GetHandle() if issubclass(handle.__class__, Handle_Geom_Curve): edge = BRepBuilderAPI_MakeEdge(handle) shapes = [edge.Shape()] SOLO = True elif issubclass(handle.__class__, Handle_Geom2d_Curve): edge2d = BRepBuilderAPI_MakeEdge2d(handle) shapes = [edge2d.Shape()] SOLO = True elif issubclass(handle.__class__, Handle_Geom_Surface): bounds = True toldegen = 1e-6 face = BRepBuilderAPI_MakeFace() face.Init(handle, bounds, toldegen) face.Build() shapes = [face.Shape()] SOLO = True elif isinstance(shapes, Handle_Geom_Surface): bounds = True toldegen = 1e-6 face = BRepBuilderAPI_MakeFace() face.Init(shapes, bounds, toldegen) face.Build() shapes = [face.Shape()] SOLO = True elif isinstance(shapes, Handle_Geom_Curve): edge = BRepBuilderAPI_MakeEdge(shapes) shapes = [edge.Shape()] SOLO = True elif isinstance(shapes, Handle_Geom2d_Curve): edge2d = BRepBuilderAPI_MakeEdge2d(shapes) shapes = [edge2d.Shape()] SOLO = True elif issubclass(shapes.__class__, TopoDS_Shape): shapes = [shapes] SOLO = True ais_shapes = [] for shape in shapes: if material or texture: if texture: self.View.SetSurfaceDetail(V3d_TEX_ALL) shape_to_display = AIS_TexturedShape(shape) filename, toScaleU, toScaleV, toRepeatU, toRepeatV, originU, originV = texture.GetProperties( ) shape_to_display.SetTextureFileName( TCollection_AsciiString(filename)) shape_to_display.SetTextureMapOn() shape_to_display.SetTextureScale(True, toScaleU, toScaleV) shape_to_display.SetTextureRepeat(True, toRepeatU, toRepeatV) shape_to_display.SetTextureOrigin(True, originU, originV) shape_to_display.SetDisplayMode(3) elif material: shape_to_display = AIS_Shape(shape) shape_to_display.SetMaterial(material) else: # TODO: can we use .Set to attach all TopoDS_Shapes # to this AIS_Shape instance? shape_to_display = AIS_Shape(shape) ais_shapes.append(shape_to_display.GetHandle()) if not SOLO: # computing graphic properties is expensive # if an iterable is found, so cluster all TopoDS_Shape under # an AIS_MultipleConnectedInteractive #shape_to_display = AIS_MultipleConnectedInteractive() for ais_shp in ais_shapes: # TODO : following line crashes with oce-0.18 # why ? fix ? #shape_to_display.Connect(i) self.Context.Display(ais_shp, False) shape_to_display = ais_shapes return shape_to_display # set the graphic properties if material is None: #The default material is too shiny to show the object #color well, so I set it to something less reflective shape_to_display.SetMaterial(Graphic3d_NOM_NEON_GNC) if color: if isinstance(color, str): color = get_color_from_name(color) for shp in ais_shapes: self.Context.SetColor(shp, color, False) if transparency: shape_to_display.SetTransparency(transparency) if update: # only update when explicitely told to do so self.Context.Display(shape_to_display.GetHandle(), False) # especially this call takes up a lot of time... self.FitAll() self.Repaint() else: self.Context.Display(shape_to_display.GetHandle(), False) if SOLO: return ais_shapes[0] else: return shape_to_display