def __init__(self, renderer): self.__renderer = renderer self.__reader = vtkStructuredGridReader() self.__mapper = vtkDataSetMapper() self.__lookup_table = vtkLookupTable() self.__property = vtkProperty() self.__actor = vtkActor()
def __init__(self, renderer): """"init setting up variables""" self.__renderer = renderer self.__gridReader = vtkUnstructuredGridReader() self.__mapper = vtkDataSetMapper() self.__property = vtkProperty() self.__actor = vtkActor()
def __init__(self, renderer): self.__renderer = renderer self.__reader = vtkStructuredGridReader() self.__mapper = vtkDataSetMapper() self.__lookup_table = vtkLookupTable() self.__property = vtkProperty() self.__actor = vtkActor() self.__points = vtkPointSource() self.__rungeKutta = vtkRungeKutta4() self.__streamer = vtkStreamTracer()
def DrawDelaunay3D(data: DB.VolumeData, n: int): """ 从规则网格数据data中随机抽取n个点组成非结构化网格数据,然后进行Delaunay三角剖分,绘制出四面体网格 :param data:体数据 :param n:抽取的散乱点个数 :return: """ # unstructuredDataSet = data.RandomUnstructuredDataSet(n) # unstructuredDataSet = unstructuredDataSet[:, 0:3] # # points = vtk.vtkPoints() # points.SetData(numpy2vtk(num_array=unstructuredDataSet, deep=True)) # # polyData = vtk.vtkPolyData() # polyData.SetPoints(points) # 生成一个UnstructuredGrid uGrid = data.GenTetraUnstructuredGrid(n) # uGrid = data.ExtractVoxelsToUnstructuredGrid(n) # 抽取体素 delaunay3d = vtk.vtkDelaunay3D() delaunay3d.SetInputData(uGrid) delaunay3d.Update() # uGrid = vtk.vtkUnstructuredGrid() # uGrid = delaunay3d.GetOutput() dataSetMapper = vtk.vtkDataSetMapper() # dataSetMapper.SetInputConnection(delaunay3d.GetOutputPort()) dataSetMapper.SetInputData(delaunay3d.GetOutput()) dataSetMapper.Update() actor = vtk.vtkActor() actor.SetMapper(dataSetMapper) actor.GetProperty().SetColor(0.5, 0.5, 0.5) actor.GetProperty().EdgeVisibilityOn() # 文本显示actor textActor = vtk.vtkTextActor() textActor.SetInput("points count:" + str(uGrid.GetPoints().GetNumberOfPoints())) textActor.SetDisplayPosition(20, 30) textProp = textActor.GetTextProperty() textProp.BoldOn() textProp.SetFontSize(50) textProp.ShadowOn() textProp.SetColor(0, 0, 0) renderer = vtk.vtkRenderer() renderer.AddActor(actor) renderer.AddActor(textActor) renderer.SetBackground(0.9, 0.9, 0.9) renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindow.SetSize(3000, 3000) itr = vtk.vtkRenderWindowInteractor() itr.SetRenderWindow(renderWindow) renderWindow.Render() itr.Initialize() itr.Start()
def DrawVTKMarshingCubes(data: DB.VolumeData, t): # # 1. 读取数据 # cube = vtk.vtkCubeSource() # cube.Update() # 记得加这句不加看不到模型 # # 2. 建图(将点拼接成立方体) # cube_mapper = vtk.vtkPolyDataMapper() # cube_mapper.SetInputData(cube.GetOutput()) # # 3. 根据2创建执行单元 # cube_actor = vtk.vtkActor() # cube_actor.SetMapper(cube_mapper) # # cube_actor.GetProperty().SetColor(1.0, 0.0, 0.0) # # 4. 渲染(将执行单元和背景组合在一起按照某个视角绘制) # renderer = vtk.vtkRenderer() # renderer.SetBackground(0.0, 0.0, 0.0) # 背景只有一个所以是Set() # renderer.AddActor(cube_actor) # 因为actor有可能为多个所以是add() # # # 5. 显示渲染窗口 # render_window = vtk.vtkRenderWindow() # render_window.SetWindowName("My First Cube") # render_window.SetSize(400, 400) # render_window.AddRenderer(renderer) # 渲染也会有可能有多个渲染把他们一起显示 # # 6. 创建交互控键(可以用鼠标拖来拖去看三维模型) # interactor = vtk.vtkRenderWindowInteractor() # interactor.SetRenderWindow(render_window) # interactor.Initialize() # render_window.Render() # interactor.Start() # 从numpy得到vtk的数组数据类型 vtkdataArray = numpy2vtk(num_array=data.dataMatrix.ravel(), deep=True, array_type=vtk.VTK_FLOAT) # 定义一种source,vtkImageData vtkImageData = vtk.vtkImageData() # 定义vtkImageData的各种属性 vtkImageData.SetDimensions(np.shape(data.dataMatrix)) vtkImageData.SetSpacing(1, 1, 1) vtkImageData.GetPointData().SetScalars(vtkdataArray) # 从vtkImageData返回numpy数组的过程 # vtkPointData_temp=vtkImageData.GetPointData() # vtkFloatArray_temp=vtkPointData_temp.GetScalars() # numpy_temp=vtk2numpy(vtkFloatArray_temp) # res=numpy_temp==self.dataMatrix.flatten() # print(res) # 定义vtkMarchingCubes这个filter vtkMC = vtk.vtkMarchingCubes() vtkMC.SetInputData(vtkImageData) # 设置输入数据(vtkImageData) vtkMC.SetNumberOfContours(1) # 设置等值面的数量 vtkMC.SetValue(0, t) # 设置等值面的值(等值面索引,等值面值) # 1原始版本 vtkMC.ComputeGradientsOn() # 计算梯度 vtkMC.ComputeNormalsOff() # 计算法向量时,绘图质量反而下降 vtkMC.ComputeScalarsOff() # 开关无影响 vtkNorm = vtk.vtkVectorNorm() # vtkNorm.SetInputConnection(vtkMC.GetOutputPort()) vtkNorm.Update() cubeMapper = vtk.vtkDataSetMapper() cubeMapper.SetInputConnection(vtkNorm.GetOutputPort()) # 2使用vtkMarchingCubes计算标量值 # vtkMC.ComputeGradientsOn() # vtkMC.ComputeNormalsOff() # vtkMC.ComputeScalarsOn() # # cubeMapper = vtk.vtkDataSetMapper() # cubeMapper.SetInputConnection(vtkMC.GetOutputPort()) # 3不计算标量值 # vtkMC.ComputeGradientsOn() # vtkMC.ComputeNormalsOn() # vtkMC.ComputeScalarsOff() # # cubeMapper = vtk.vtkDataSetMapper() # cubeMapper.SetInputConnection(vtkMC.GetOutputPort()) cubeActor = vtk.vtkActor() cubeActor.SetMapper(cubeMapper) cubeCamera = vtk.vtkCamera() cubeCamera.SetPosition(1, 1, 1) cubeCamera.SetFocalPoint(0, 0, 0) Render = vtk.vtkRenderer() Render.AddActor(cubeActor) Render.SetActiveCamera(cubeCamera) Render.ResetCamera() Render.SetBackground(0.7, 0.7, 0.7) Win = vtk.vtkRenderWindow() Win.AddRenderer(Render) Win.SetSize(3000, 3000) Inter = vtk.vtkRenderWindowInteractor() Inter.SetRenderWindow(Win) # 设置小的坐标系,跟随交互改变 axes = vtk.vtkAxesActor() widet = vtk.vtkOrientationMarkerWidget() widet.SetOrientationMarker(axes) # 设置谁讲被在挂件中显示 widet.SetOutlineColor(0.5, 0.5, 0.5) # 挂件被选中时的外框颜色 widet.SetInteractor(Inter) # 选择vtkRenderWindowInteractor widet.SetViewport(0, 0, 0.3, 0.3) # 挂件显示的位置和大小,(xmin,ymin,xmax,ymax) widet.SetEnabled(1) # 使能 widet.InteractiveOn() # 交互开 # Win.Render() Inter.Start()
__unstructured_grid = vtkUnstructuredGrid() __points = vtkPoints() # Set Data in points __points.SetData(nptovtk(__coordinaten)) #__points.SetVectors(nptovtk(__vectors)) # set Points in Grid __unstructured_grid.SetPoints(__points) print(__points) #add array __unstructured_grid.GetPointData().SetVectors(nptovtk(__vectors)) __actor = vtkActor() __reader = vtkUnstructuredGridReader() __mapper = vtkDataSetMapper() __mapper.SetInputData(__unstructured_grid) __actor.SetMapper(__mapper) #region arrow __arrow = vtkArrowSource() __arrow.SetTipLength(0.25) __arrow.SetTipRadius(0.1) __arrow.SetTipResolution(10) __glyph = vtkGlyph3D() __glyph.SetSourceConnection(__arrow.GetOutputPort()) __glyph.SetInputData(__unstructured_grid) __glyph.SetVectorModeToUseVector() __glyph.SetColorModeToColorByScalar()