具有多个组合 STL 文件的 VTK
VTK with multiple combined STL files
我正在使用 python 和 VTK 进行一个项目。我成功地将三个 STL 文件与一个 python STL 库组合在一起。之后,我在 VTK 中可视化这个 combined.stl 文件,如下所示:
stl_reader = vtk.vtkSTLReader()
stl_reader.SetFileName(PATH)
stl_mapper = vtk.vtkPolyDataMapper()
stl_mapper.SetInputConnection(stl_reader.GetOutputPort())
stl_actor = vtk.vtkActor()
stl_actor.SetMapper(stl_mapper)
...add actor on renderer, renderer on window etc.
到目前为止一切顺利。但现在我想 colorize/highlight 这些 STL 对象之一。 (所有STL一起组成一个更大的对象,所以定位很重要,必须保持不变。所以整个事情最后需要保留一个vtkActor。)
我认为合并后的STL文件中无法进行着色,因为合并后的文件没有跟踪原始对象(也许这里也有解决方案,如果我错了请指正).所以我想我需要一个不同的解决方案。
我已经使用这个 CompositePolyDataMapper 示例 (https://lorensen.github.io/VTKExamples/site/Python/CompositeData/CompositePolyDataMapper/) 进行了尝试,但我不知道如何从 vtkSTLReader 获取可以放入 vtkMultiBlockDataSet 的对象。
有人知道我的问题的解决方案吗?
提前致谢。
好的,我可以自己解决问题。
如果有人遇到类似问题,解决方案非常简单:
assembly = vtk.vtkAssembly()
filenames = ["example1.stl","example2.stl","example3.stl"]
for filename in filenames:
stl_reader = vtk.vtkSTLReader()
stl_reader.SetFileName(filename)
stl_mapper = vtk.vtkPolyDataMapper()
stl_mapper.SetInputConnection(stl_reader.GetOutputPort())
stl_actor = vtk.vtkActor()
if filename == "example1.stl":
stl_actor.GetProperty().SetColor(0.86,0.08,0.24)
else:
stl_actor.GetProperty().SetOpacity(0.4)
stl_actor.SetMapper(stl_mapper)
assembly.AddPart(stl_actor)
scene_renderer.AddActor(assembly)
vtkAssembly class 允许您向其中添加演员,如果您与它互动,它就像一个演员一样工作。
我正在使用 python 和 VTK 进行一个项目。我成功地将三个 STL 文件与一个 python STL 库组合在一起。之后,我在 VTK 中可视化这个 combined.stl 文件,如下所示:
stl_reader = vtk.vtkSTLReader()
stl_reader.SetFileName(PATH)
stl_mapper = vtk.vtkPolyDataMapper()
stl_mapper.SetInputConnection(stl_reader.GetOutputPort())
stl_actor = vtk.vtkActor()
stl_actor.SetMapper(stl_mapper)
...add actor on renderer, renderer on window etc.
到目前为止一切顺利。但现在我想 colorize/highlight 这些 STL 对象之一。 (所有STL一起组成一个更大的对象,所以定位很重要,必须保持不变。所以整个事情最后需要保留一个vtkActor。)
我认为合并后的STL文件中无法进行着色,因为合并后的文件没有跟踪原始对象(也许这里也有解决方案,如果我错了请指正).所以我想我需要一个不同的解决方案。
我已经使用这个 CompositePolyDataMapper 示例 (https://lorensen.github.io/VTKExamples/site/Python/CompositeData/CompositePolyDataMapper/) 进行了尝试,但我不知道如何从 vtkSTLReader 获取可以放入 vtkMultiBlockDataSet 的对象。
有人知道我的问题的解决方案吗?
提前致谢。
好的,我可以自己解决问题。 如果有人遇到类似问题,解决方案非常简单:
assembly = vtk.vtkAssembly()
filenames = ["example1.stl","example2.stl","example3.stl"]
for filename in filenames:
stl_reader = vtk.vtkSTLReader()
stl_reader.SetFileName(filename)
stl_mapper = vtk.vtkPolyDataMapper()
stl_mapper.SetInputConnection(stl_reader.GetOutputPort())
stl_actor = vtk.vtkActor()
if filename == "example1.stl":
stl_actor.GetProperty().SetColor(0.86,0.08,0.24)
else:
stl_actor.GetProperty().SetOpacity(0.4)
stl_actor.SetMapper(stl_mapper)
assembly.AddPart(stl_actor)
scene_renderer.AddActor(assembly)
vtkAssembly class 允许您向其中添加演员,如果您与它互动,它就像一个演员一样工作。