python-3.x - vtkOBJReader 将 OBJ 作为单独的 vtkPolyData 对象导入

标签 python-3.x vtk vtk.js

我的目的是让 vtkPolyData(通过 vtk OBJ 导入实现理想的颜色/纹理)传递给 k3d 查看器:

k3d.vtk_poly_data(<vtkPolyData>)

vtkGLTFReader 提供了一个 vtkMultiBlock,可以轻松迭代它以访问多个 vtkPolyData 对象,如图 here

另一方面,vtkOBJReader 返回一个 vtkPolyData 对象,该对象包含一个 obj 中的所有对象。所以我失去了对单个对象及其 guid/ids 的引用;

reader = vtk.vtkOBJReader() 
reader.SetFileName('Sample.obj')
reader.Update() 
vtkPolyData = reader.GetOutput() #Problem! all .OBJ elements in one vtkPolyData instance
  1. 是否可以访问各个 vtkPolyData 对象 从 .OBJ 中获取而不将 .OBJ 拆分为多个文件?
  2. 是可从 vtk python 访问的数据的 vtkMultiBlock 版本 模块?或者这只能通过 js 版本的 vtk 实现,如所述here

由于 vtkImporter 类取代了 vtkReader 类并且已经正确显示带有 Material (.mtl) 的对象,我怀疑有一种方法可以通过 Render_Window 对象访问几何图形,但我无法管理它。

解决方案

importer = vtk.vtkOBJImporter()
importer.SetFileName('Sample.obj')
importer.SetFileNameMTL('Sample.mtl')

#preview with material using the importer
importer.Read()
importer.InitializeObjectBase()
importer.GetRenderer()
vtkRenderWindowInteractor = vtk.vtkRenderWindowInteractor()
Render_Window = importer.GetRenderWindow()
vtkRenderWindowInteractor.SetRenderWindow(Render_Window)

actors = Renderer.GetActors()
actors.InitTraversal() #Unpacks OBJ !

#Iterate over actors to get PolyData!
pds = []
for a in range(actors.GetNumberOfItems()):
    actor = actors.GetNextActor()

    # OBJImporter turns texture interpolation off
    if actor.GetTexture():
        actor.GetTexture().InterpolateOn()

    pd = actor.GetMapper().GetInput()
    
    #mapper = vtk.vtkPolyDataMapper(actor.GetMapper()) #Throws TypeError: Method requires a string argument!
    mapper = actor.GetMapper() #use this in python
    mapper.SetInputData(pd)
    pds.append(pd)

vtkRenderWindowInteractor.Start() 

最佳答案

您正在寻找导入器和渲染器的正确方向。 渲染器对象包含参与者,每个参与者都有一个包含多数据作为输入的映射器。

请参阅此 cxx 示例(Python API 相同,但您可以直接迭代 renderer.GetActors()):https://lorensen.github.io/VTKExamples/site/Cxx/IO/OBJImporter/

关于python-3.x - vtkOBJReader 将 OBJ 作为单独的 vtkPolyData 对象导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63813140/

相关文章:

angular - 在 Angular CLI 应用程序中使用 vtk.js/glsl 文件

python - 在 Python 3 中使用在 exec'ed 字符串中定义的函数

python - numpy boolean 数组内存溢出

python - 即使在 pygame 中释放 key 后,我的 Sprite 仍然继续移动

c++ - 在VTK下保存一个Mesh文件

python - 在 Python 中动态创建列表和字典。我正在尝试用 Python 创建数组

binary - 如何理解vtk二进制文件格式的base64编码

c++ - VTK 定位相机以用对象填充视口(viewport)

javascript - 可以在没有服务器端的情况下通过 paraviewweb 或 vtk.js 渲染 .pvd 文档/场景吗?