具有多个组合STL文件的VTK

2024-05-15 03:00:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python和VTK做一个项目。我成功地将三个STL文件与pythonstllibraray相结合。在那之后,我想象这个组合.stl在VTK中的文件如下:

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.

到目前为止还不错。但现在我想给其中一个STL对象着色/高亮显示。(所有STL一起形成一个更大的对象,因此定位很重要,必须保持不变。所以整个过程需要在最后保持一个vtkActor。)

我觉得不可能在合并的STL文件中进行着色,因为合并后的文件无法跟踪原始对象(也许这里也有解决方案,如果我错了,请纠正我)。所以我想我需要一个不同的解决方案。在

我已经用这个CompositePolyDataMapper示例(https://lorensen.github.io/VTKExamples/site/Python/CompositeData/CompositePolyDataMapper/)尝试过了,但是我不知道如何从vtkSTLReader获取可以放入vtkmultiplockDataSet的对象。在

有人知道解决我问题的办法吗?在

提前谢谢你。在


Tags: 文件对象on解决方案readerrendereractormapper
1条回答
网友
1楼 · 发布于 2024-05-15 03:00:31

好吧,我可以自己解决这个问题。 如果有人有类似的问题,解决办法很简单:

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类允许您向它添加参与者,如果您与它交互,它的工作方式就像一个actor。在

相关问题 更多 >

    热门问题