在VTK中,如何获取道具的世界坐标?



我在SolidWorks中创建了一个立方体并将其导出到STL文件。Te 立方体在原点右侧 50mm) 然后我使用 VTK 类 vtkSTLReader 读取此文件并在渲染窗口中渲染它。

截图

但是,当我调用函数 GetPosition() 时,它总是返回 (0,0,0)。在我看来,应该是(50,0,0)。VTK 类参考解释说,此函数是"获取 Prop3D 在世界坐标中的位置"。这让我感到困惑。我不知道问题出在哪里。

import vtk
sr = vtk.vtkSTLReader()
sr.SetFileName("cube.stl")
stlMapper = vtk.vtkPolyDataMapper()
stlMapper.SetInputConnection(sr.GetOutputPort())
stlActor = vtk.vtkLODActor()
stlActor.SetMapper(stlMapper)
# Create the Renderer, RenderWindow, and RenderWindowInteractor
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# Add the actors to the render; set the background and size
ren.AddActor(stlActor)
ren.SetBackground(0.1, 0.1, 0.1)
renWin.SetSize(500, 500)
print stlActor.GetPosition()
iren.Initialize()
renWin.Render()
iren.Start()

好吧,除非您更改道具(演员)的位置,否则它将保持在 0,0,0。这个道具表示几何体,在你的例子中是一个立方体,它的一个节点定义为 50,0,0,但这对道具的位置无关紧要。事实上,没有办法将那一个点(道具的位置)绑定到底层几何体的任何一个节点——它将如何决定它是立方体的哪个节点?相反,它是一个参考点,如果它是 0,0,0,则意味着您的几何图形将以定义几何图形的完全相同的坐标渲染(您可以sr.GetOutputPort().GetPoints()获取或直接查看您的 stl 文件)。基本上,GetPosition() 为您提供应用于您的点的转换矩阵的翻译部分。

为了回答您的问题,正如我已经说过的,您可以从sr.GetOutputPort().GetPoints()中获取几何图形的点,这些点是该几何图形的世界坐标,假设没有应用变换。如果您担心某些变换,可以在Actor上定义自己的变换(Set/GetUserTransform),也可以使用摄像机的ModelMatrix(ren.GetActiveCamera().GetModelMatrix),然后使用 vtkTransform 类将这些转换应用于您希望在这些转换后获取其"图像"的任何坐标。

最新更新