def add_polyhedron(self, neighbors, center, color, opacity=0.4, draw_edges=False, edges_color=[0.0, 0.0, 0.0], edges_linewidth=2): """ Adds a polyhedron. Args: neighbors: Neighbors of the polyhedron (the vertices). center: The atom in the center of the polyhedron. color: Color for text as RGB. opacity: Opacity of the polyhedron draw_edges: If set to True, the a line will be drawn at each edge edges_color: Color of the line for the edges edges_linewidth: Width of the line drawn for the edges """ points = vtk.vtkPoints() conv = vtk.vtkConvexPointSet() for i in range(len(neighbors)): x, y, z = neighbors[i].coords points.InsertPoint(i, x, y, z) conv.GetPointIds().InsertId(i, i) grid = vtk.vtkUnstructuredGrid() grid.Allocate(1, 1) grid.InsertNextCell(conv.GetCellType(), conv.GetPointIds()) grid.SetPoints(points) dsm = vtk.vtkDataSetMapper() polysites = [center] polysites.extend(neighbors) self.mapper_map[dsm] = polysites if vtk.VTK_MAJOR_VERSION <= 5: dsm.SetInputConnection(grid.GetProducerPort()) else: dsm.SetInputData(grid) ac = vtk.vtkActor() #ac.SetMapper(mapHull) ac.SetMapper(dsm) ac.GetProperty().SetOpacity(opacity) if color == 'element': # If partial occupations are involved, the color of the specie with # the highest occupation is used myoccu = 0.0 for specie, occu in center.species_and_occu.items(): if occu > myoccu: myspecie = specie myoccu = occu color = [i / 255 for i in self.el_color_mapping[myspecie.symbol]] ac.GetProperty().SetColor(color) else: ac.GetProperty().SetColor(color) if draw_edges: ac.GetProperty().SetEdgeColor(edges_color) ac.GetProperty().SetLineWidth(edges_linewidth) ac.GetProperty().EdgeVisibilityOn() self.ren.AddActor(ac)
def add_polyhedron(self, neighbors, center, color): """ Adds a polyhedron. Args: neighbors: Neighbors of the polyhedron (the vertices). center: The atom in the center of the polyhedron. color: Color for text as RGB. """ points = vtk.vtkPoints() conv = vtk.vtkConvexPointSet() for i in range(len(neighbors)): x, y, z = neighbors[i].coords points.InsertPoint(i, x, y, z) conv.GetPointIds().InsertId(i, i) grid = vtk.vtkUnstructuredGrid() grid.Allocate(1, 1) grid.InsertNextCell(conv.GetCellType(), conv.GetPointIds()) grid.SetPoints(points) dsm = vtk.vtkDataSetMapper() polysites = [center] polysites.extend(neighbors) self.mapper_map[dsm] = polysites dsm.SetInput(grid) ac = vtk.vtkActor() #ac.SetMapper(mapHull) ac.SetMapper(dsm) ac.GetProperty().SetOpacity(0.4) ac.GetProperty().SetColor(color) self.ren.AddActor(ac)
def add_polyhedron(self, neighbors, center, color, opacity=1.0, draw_edges=False, edges_color=[0.0, 0.0, 0.0], edges_linewidth=2): """ Adds a polyhedron. Args: neighbors: Neighbors of the polyhedron (the vertices). center: The atom in the center of the polyhedron. color: Color for text as RGB. opacity: Opacity of the polyhedron draw_edges: If set to True, the a line will be drawn at each edge edges_color: Color of the line for the edges edges_linewidth: Width of the line drawn for the edges """ points = vtk.vtkPoints() conv = vtk.vtkConvexPointSet() for i in range(len(neighbors)): x, y, z = neighbors[i].coords points.InsertPoint(i, x, y, z) conv.GetPointIds().InsertId(i, i) grid = vtk.vtkUnstructuredGrid() grid.Allocate(1, 1) grid.InsertNextCell(conv.GetCellType(), conv.GetPointIds()) grid.SetPoints(points) dsm = vtk.vtkDataSetMapper() polysites = [center] polysites.extend(neighbors) self.mapper_map[dsm] = polysites if vtk.VTK_MAJOR_VERSION <= 5: dsm.SetInputConnection(grid.GetProducerPort()) else: dsm.SetInputData(grid) ac = vtk.vtkActor() #ac.SetMapper(mapHull) ac.SetMapper(dsm) ac.GetProperty().SetOpacity(opacity) if color == 'element': # If partial occupations are involved, the color of the specie with # the highest occupation is used myoccu = 0.0 for specie, occu in center.species_and_occu.items(): if occu > myoccu: myspecie = specie myoccu = occu color = [i / 255 for i in self.el_color_mapping[myspecie.symbol]] ac.GetProperty().SetColor(color) else: ac.GetProperty().SetColor(color) if draw_edges: ac.GetProperty().SetEdgeColor(edges_color) ac.GetProperty().SetLineWidth(edges_linewidth) ac.GetProperty().EdgeVisibilityOn() self.ren.AddActor(ac)
def _2ugrid(e, ugrid=None): """ Convert element e to an unstructured grid """ # n, g, idx -- name, group and index in the group # p -- array (Ns, Np, 3) of points (n, g, idx), p = e Ns, Np, _ = p.shape if ugrid is None: # Points pl = vtk.vtkPoints() # Grid ug = vtk.vtkUnstructuredGrid() # ug.Allocate(Ns - 1, 1) ug.SetPoints(pl) i0 = 0 else: ug = ugrid pl = ug.GetPoints() i0 = pl.GetNumberOfPoints() i = 0 for Is in range(Ns): for Ip in range(Np): pl.InsertPoint(i0 + i, p[Is, Ip, :]) i += 1 # Ns - 1 elements of the grid for Is in range(Ns - 1): ps = vtk.vtkConvexPointSet() pids = ps.GetPointIds() for i in range(2 * Np): pids.InsertId(i, i0 + Is * Np + i) ug.InsertNextCell(ps.GetCellType(), pids) # Name and group to the Fields if ugrid is None: f = ug.GetFieldData() f.AddArray(wrapStr(n, 'name')) f.AddArray(wrapStr(g, 'group')) return ug
attrs['associated_shape'] # delayed mappers[shape_name] = (x for x in [mappers[associated_shape]()]) else: reader = step_reader(str(io.shapes()[shape_name][:])) readers[shape_name] = reader mapper = vtk.vtkDataSetMapper() add_compatiblity_methods(mapper) mapper.SetInputConnection(reader.GetOutputPort()) mappers[shape_name] = (x for x in [mapper]) elif shape_type == 'convex': # a convex shape points = vtk.vtkPoints() convex = vtk.vtkConvexPointSet() data = io.shapes()[shape_name][:] convex.GetPointIds().SetNumberOfIds(data.shape[0]) for id_, vertice in enumerate(io.shapes()[shape_name][:]): points.InsertNextPoint(vertice[0], vertice[1], vertice[2]) convex.GetPointIds().SetId(id_, id_) convex_grid = vtk.vtkUnstructuredGrid() convex_grid.Allocate(1, 1) convex_grid.InsertNextCell(convex.GetCellType(), convex.GetPointIds()) convex_grid.SetPoints(points) source = vtk.vtkProgrammableSource() def sourceExec(): output = source.GetUnstructuredGridOutput() output.Allocate(1, 1)
# try to find an associated shape if 'associated_shape' in io.shapes()[shape_name].attrs: associated_shape = \ io.shapes()[shape_name].\ attrs['associated_shape'] # delayed else: reader = step_reader(str(io.shapes()[shape_name][:])) readers[shape_name] = reader elif shape_type == 'convex': # a convex shape points = vtk.vtkPoints() convex = vtk.vtkConvexPointSet() data = io.shapes()[shape_name][:] convex.GetPointIds().SetNumberOfIds(data.shape[0]) for id_, vertice in enumerate(io.shapes()[shape_name][:]): points.InsertNextPoint(vertice[0], vertice[1], vertice[2]) convex.GetPointIds().SetId(id_, id_) readers[shape_name] = ConvexSource(convex, points) else: assert shape_type == 'primitive' primitive = io.shapes()[shape_name].attrs['primitive'] attrs = io.shapes()[shape_name][:][0] if primitive == 'Sphere': source = vtk.vtkSphereSource()
def main(): cps = vtk.vtkConvexPointSet() points = vtk.vtkPoints() points.InsertNextPoint(0, 0, 0) points.InsertNextPoint(1, 0, 0) points.InsertNextPoint(1, 1, 0) points.InsertNextPoint(0, 1, 0) points.InsertNextPoint(0, 0, 1) points.InsertNextPoint(1, 0, 1) points.InsertNextPoint(1, 1, 1) points.InsertNextPoint(0, 1, 1) points.InsertNextPoint(0.5, 0, 0) points.InsertNextPoint(1, 0.5, 0) points.InsertNextPoint(0.5, 1, 0) points.InsertNextPoint(0, 0.5, 0) points.InsertNextPoint(0.5, 0.5, 0) for i in range(0, 13): cps.GetPointIds().InsertId(i, i) ug = vtk.vtkUnstructuredGrid() ug.Allocate(1, 1) ug.InsertNextCell(cps.GetCellType(), cps.GetPointIds()) ug.SetPoints(points) colors = vtk.vtkNamedColors() mapper = vtk.vtkDataSetMapper() mapper.SetInputData(ug) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetColor(colors.GetColor3d("Tomato")) actor.GetProperty().SetLineWidth(3) actor.GetProperty().EdgeVisibilityOn() # Glyph the points sphere = vtk.vtkSphereSource() sphere.SetPhiResolution(21) sphere.SetThetaResolution(21) sphere.SetRadius(.03) # Create a polydata to store everything in polyData = vtk.vtkPolyData() polyData.SetPoints(points) pointMapper = vtk.vtkGlyph3DMapper() pointMapper.SetInputData(polyData) pointMapper.SetSourceConnection(sphere.GetOutputPort()) pointActor = vtk.vtkActor() pointActor.SetMapper(pointMapper) pointActor.GetProperty().SetColor(colors.GetColor3d("Peacock")) # Create a renderer, render window, and interactor renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.SetWindowName("ConvexPointSet") renderWindow.AddRenderer(renderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) # Add the actors to the scene renderer.AddActor(actor) renderer.AddActor(pointActor) renderer.SetBackground(colors.GetColor3d("Silver")) renderer.ResetCamera() renderer.GetActiveCamera().Azimuth(210) renderer.GetActiveCamera().Elevation(30) renderer.ResetCameraClippingRange() # Render and interact renderWindow.SetSize(640, 480) renderWindow.Render() renderWindowInteractor.Start()