Так что когда вы нажимаете на один из хексарских элементов, вы перемещаете и вращаются. /> Что должна быть стратегия рендеринга?
Этот объект состоит из множества маленьких гексахедров < /p>
vtkassembly. Может быть, тысяча актеров проведет время < /p>
def open_node_data(self):
# options = QFileDialog.Options()
files, _ = QFileDialog.getOpenFileNames(self, "Select Files", "", "All Files (*);;Text Files (*.txt)")
if len(files) == 2:
self.points, self.uPoints, self.heatmaps = read_Nodes(files[0] if "Node" in files[0] else files[1])
self.cells = read_Triangles(files[0] if "Element" in files[0] else files[1])
num_hex = len(self.cells) // 6
for i in range(num_hex):
hex_faces = self.cells[i * 6:(i + 1) * 6]
self.create_mesh(self.points, hex_faces, color=[0.31, 0.51, 0.9], bounding=False)
< /code>
Прочитайте все точки и лица гексаэдрона, затем разделите их на независимые полидаты, храните их в актере, а затем добавьте их в vtkassmbly. Цель этого состоит в том, чтобы нажать на отдельные подразделения гексаэдрона, когда мышь выбирается и работает на них, но взаимодействие слишком громоздко < /p>
def create_mesh(self, points, cells, color, bounding=False, num=0):
points_vtk = vtk.vtkPoints()
for point in points:
points_vtk.InsertNextPoint(point)
cells_vtk = vtk.vtkCellArray()
for cell in cells:
cells_vtk.InsertNextCell(4, cell[1:])
polydata = vtk.vtkPolyData()
polydata.SetPoints(points_vtk)
polydata.SetPolys(cells_vtk)
featureEdges = vtk.vtkFeatureEdges()
featureEdges.SetInputData(polydata)
featureEdges.BoundaryEdgesOn()
featureEdges.Update()
boundary = featureEdges.GetOutput()
points_list = []
for i in range(boundary.GetNumberOfPoints()):
p = boundary.GetPoint(i)
points_list.append(p)
pointColors = vtk.vtkUnsignedCharArray()
pointColors.SetNumberOfComponents(3)
pointColors.SetName("PointColors")
numPts = polydata.GetNumberOfPoints()
for i in range(numPts):
pointColors.InsertNextTuple3(color[0]*255,color[1]*255,color[2]*255)
polydata.GetPointData().SetScalars(pointColors)
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(polydata)
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetColor(color)
self.interactor_style.register_actor_polydata(actor, polydata)
self.assembly.AddPart(actor)
self.renderer.AddActor(self.assembly)
Так что когда вы нажимаете на один из хексарских элементов, вы перемещаете и вращаются. /> Что должна быть стратегия рендеринга? Этот объект состоит из множества маленьких гексахедров < /p> vtkassembly. Может быть, тысяча актеров проведет время < /p> [code]def open_node_data(self): # options = QFileDialog.Options() files, _ = QFileDialog.getOpenFileNames(self, "Select Files", "", "All Files (*);;Text Files (*.txt)") if len(files) == 2: self.points, self.uPoints, self.heatmaps = read_Nodes(files[0] if "Node" in files[0] else files[1]) self.cells = read_Triangles(files[0] if "Element" in files[0] else files[1]) num_hex = len(self.cells) // 6 for i in range(num_hex): hex_faces = self.cells[i * 6:(i + 1) * 6] self.create_mesh(self.points, hex_faces, color=[0.31, 0.51, 0.9], bounding=False) < /code> Прочитайте все точки и лица гексаэдрона, затем разделите их на независимые полидаты, храните их в актере, а затем добавьте их в vtkassmbly. Цель этого состоит в том, чтобы нажать на отдельные подразделения гексаэдрона, когда мышь выбирается и работает на них, но взаимодействие слишком громоздко < /p> def create_mesh(self, points, cells, color, bounding=False, num=0): points_vtk = vtk.vtkPoints() for point in points: points_vtk.InsertNextPoint(point)
cells_vtk = vtk.vtkCellArray() for cell in cells: cells_vtk.InsertNextCell(4, cell[1:])
points_list = [] for i in range(boundary.GetNumberOfPoints()): p = boundary.GetPoint(i) points_list.append(p)
pointColors = vtk.vtkUnsignedCharArray() pointColors.SetNumberOfComponents(3) pointColors.SetName("PointColors") numPts = polydata.GetNumberOfPoints() for i in range(numPts): pointColors.InsertNextTuple3(color[0]*255,color[1]*255,color[2]*255) polydata.GetPointData().SetScalars(pointColors)
mapper = vtk.vtkPolyDataMapper() mapper.SetInputData(polydata) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.GetProperty().SetColor(color) self.interactor_style.register_actor_polydata(actor, polydata) self.assembly.AddPart(actor) self.renderer.AddActor(self.assembly) [/code] Я не знаю, что делать.