一:主要的知识点
1、说明
本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程------逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①vtkDelaunay3D模型生成,②模型连通性分析
二:代码及注释
python
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersCore import vtkAppendFilter, vtkConnectivityFilter, vtkDelaunay3D
from vtkmodules.vtkFiltersSources import vtkSphereSource
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkDataSetMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
def main():
colors = vtkNamedColors()
sphereSource1 = vtkSphereSource()
sphereSource1.Update()
"""
vtkDelaunay3D 用于执行 三维 Delaunay 三角剖分(或称为三维 Delaunay 网格划分)的一个类
主要作用是:根据给定的点集,生成一个 Delaunay 三维网格,即将这些点组织成一个由三角形、四面体等构成的多面体网格
这里的作用类似于用另外一种数据形式去表示这个球体
"""
delaunay1 = vtkDelaunay3D()
# delaunay1.SetInputData(sphereSource1.GetOutput())
delaunay1.SetInputConnection(sphereSource1.GetOutputPort())
delaunay1.Update()
sphereSource2 = vtkSphereSource()
sphereSource2.SetCenter(5, 0, 0)
delaunay2 = vtkDelaunay3D()
# delaunay2.SetInputData(sphereSource2.GetOutput())
delaunay2.SetInputConnection(sphereSource2.GetOutputPort())
delaunay2.Update()
appendFilter = vtkAppendFilter()
appendFilter.AddInputConnection(delaunay1.GetOutputPort())
appendFilter.AddInputConnection(delaunay2.GetOutputPort())
appendFilter.Update()
"""
vtkConnectivityFilter 拓扑连通性分析过滤器
根据几何或拓扑连通性,把输入数据 划分成若干个连通区域(connected regions),并且可以提取其中的一个或多个区域
"""
connectivityFilter = vtkConnectivityFilter()
connectivityFilter.SetInputConnection(appendFilter.GetOutputPort())
"""
SetExtractionModeToAllRegions 提取所有的连通域
"""
connectivityFilter.SetExtractionModeToAllRegions()
"""
ColorRegionsOn
给不同的连通区域分配不同的 RegionId 标量值
并把它作为输出数据中的一个数组附加到每个单元(Cell)的属性上
"""
connectivityFilter.ColorRegionsOn()
connectivityFilter.Update()
mapper = vtkDataSetMapper()
mapper.SetInputConnection(connectivityFilter.GetOutputPort())
mapper.Update()
actor = vtkActor()
actor.SetMapper(mapper)
renderer = vtkRenderer()
renderer.AddActor(actor)
renWindow = vtkRenderWindow()
renWindow.AddRenderer(renderer)
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(renWindow)
iren.Initialize()
renWindow.Render()
renWindow.SetWindowName('ConnectivityFilter')
renderer.SetBackground(colors.GetColor3d('deep_ochre'))
renderer.GetActiveCamera().Zoom(0.9)
renWindow.Render()
iren.Start()
if __name__ == '__main__':
main()