具有连接信息的 VTK 着色管过滤器
VTK coloring tube filter with connectivity information
我有一个分子,我想用连接它们的球体和管子来表示。我想根据连接信息给管子上色。这意味着我有各种断开连接的区域或断开连接的组件,我想对每个区域进行不同的着色。到目前为止,我在 python 中有这个并且它有效。我已经评论了我为实现这一目标所做的努力。变量 data
是一个 PolyData 数组,其中包含具有连接信息的点、标量和单元格。
tube = vtk.vtkTubeFilter()
tube.SetInput(data)
tube.SetNumberOfSides(5);
#tube.SetVaryRadiusToVaryRadiusByAbsoluteScalar()
tube.SetVaryRadiusToVaryRadiusOff()
tube.SetRadius(0.1)
"""appendFilter = vtk.vtkAppendPolyData()
appendFilter.AddInputConnection(tube.GetOutputPort())
appendFilter.Update()
connectivityFilter = vtk.vtkPolyDataConnectivityFilter()
connectivityFilter.SetInputConnection(appendFilter.GetOutput())
connectivityFilter.ScalarConnectivityOn()
connectivityFilter.FullScalarConnectivityOn()
connectivityFilter.SetExtractionModeToAllRegions()
connectivityFilter.ColorRegionsOn()
connectivityFilter.Update()
"""
#print (connectivityFilter.GetNumberOfExtractedRegions())
tubeMapper = vtk.vtkPolyDataMapper()
tubeMapper.SetInputConnection(tube.GetOutputPort())
tubeMapper.Update()
这是目前的样子
我确实有一些东西在工作,但我不确定连接定义是否有问题。我只是忘记了 getOutputPort
中的 "port" 这个词。无论如何,这就是答案(我省略了原子和管半径以及其他不相关的选项)
tube = vtk.vtkTubeFilter()
tube.SetInput(data)
tube.SetVaryRadiusToVaryRadiusOff()
tube.SetRadius(tuberad)
appendFilter = vtk.vtkAppendPolyData()
appendFilter.AddInputConnection(tube.GetOutputPort())
appendFilter.Update()
connectivityFilter = vtk.vtkPolyDataConnectivityFilter()
connectivityFilter.SetInputConnection(appendFilter.GetOutputPort())
connectivityFilter.SetExtractionModeToAllRegions()
connectivityFilter.ColorRegionsOn()
connectivityFilter.Update()
tubeMapper = vtk.vtkPolyDataMapper()
tubeMapper.SetInputConnection(connectivityFilter.GetOutputPort())
tubeMapper.SetScalarRange(connectivityFilter.GetOutput().GetPointData().GetArray("RegionId").GetRange())
tubeMapper.Update()
它最终看起来不错,但您可能会注意到一些明显连接的组件仍然有不同的颜色,我仍然想知道为什么。
我有一个分子,我想用连接它们的球体和管子来表示。我想根据连接信息给管子上色。这意味着我有各种断开连接的区域或断开连接的组件,我想对每个区域进行不同的着色。到目前为止,我在 python 中有这个并且它有效。我已经评论了我为实现这一目标所做的努力。变量 data
是一个 PolyData 数组,其中包含具有连接信息的点、标量和单元格。
tube = vtk.vtkTubeFilter()
tube.SetInput(data)
tube.SetNumberOfSides(5);
#tube.SetVaryRadiusToVaryRadiusByAbsoluteScalar()
tube.SetVaryRadiusToVaryRadiusOff()
tube.SetRadius(0.1)
"""appendFilter = vtk.vtkAppendPolyData()
appendFilter.AddInputConnection(tube.GetOutputPort())
appendFilter.Update()
connectivityFilter = vtk.vtkPolyDataConnectivityFilter()
connectivityFilter.SetInputConnection(appendFilter.GetOutput())
connectivityFilter.ScalarConnectivityOn()
connectivityFilter.FullScalarConnectivityOn()
connectivityFilter.SetExtractionModeToAllRegions()
connectivityFilter.ColorRegionsOn()
connectivityFilter.Update()
"""
#print (connectivityFilter.GetNumberOfExtractedRegions())
tubeMapper = vtk.vtkPolyDataMapper()
tubeMapper.SetInputConnection(tube.GetOutputPort())
tubeMapper.Update()
这是目前的样子
我确实有一些东西在工作,但我不确定连接定义是否有问题。我只是忘记了 getOutputPort
中的 "port" 这个词。无论如何,这就是答案(我省略了原子和管半径以及其他不相关的选项)
tube = vtk.vtkTubeFilter()
tube.SetInput(data)
tube.SetVaryRadiusToVaryRadiusOff()
tube.SetRadius(tuberad)
appendFilter = vtk.vtkAppendPolyData()
appendFilter.AddInputConnection(tube.GetOutputPort())
appendFilter.Update()
connectivityFilter = vtk.vtkPolyDataConnectivityFilter()
connectivityFilter.SetInputConnection(appendFilter.GetOutputPort())
connectivityFilter.SetExtractionModeToAllRegions()
connectivityFilter.ColorRegionsOn()
connectivityFilter.Update()
tubeMapper = vtk.vtkPolyDataMapper()
tubeMapper.SetInputConnection(connectivityFilter.GetOutputPort())
tubeMapper.SetScalarRange(connectivityFilter.GetOutput().GetPointData().GetArray("RegionId").GetRange())
tubeMapper.Update()
它最终看起来不错,但您可能会注意到一些明显连接的组件仍然有不同的颜色,我仍然想知道为什么。