在VTK中,如何获得Prop的世界坐标?

时间:2017-03-19 11:32:02

标签: python vtk

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

screenshot

然而,当我调用函数GetPosition()时,它总是返回(0,0,0)。在我看来,它应该是(50,0,0)。 The VTK class reference解释此功能是“获取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()

1 个答案:

答案 0 :(得分:0)

好吧,除非你改变道具(演员)的位置,否则它将保持在0,0,0。此prop表示几何体,在您的情况下是一个立方体,其中一个节点定义为50,0,0,但这对于道具的位置没有影响。实际上,没有办法将这一点(道具的位置)绑定到底层几何体的任何一个节点 - 它将如何决定立方体的哪个节点?相反,它是一个参考点,如果它是0,0,0,则意味着您的几何体将在几何体定义的完全相同的坐标处呈现(您可以获得sr.GetOutputPort().GetPoints()或查看stl文件直接)。基本上,GetPosition()为您提供应用于您的点的转换矩阵的转换部分。

要回答您的问题,正如我已经说过的那样,您可以从sr.GetOutputPort().GetPoints()获取几何点,这是您几何体的世界坐标,假设没有应用任何变换。如果您关注某些转换,可以在actor上定义自己的转换(Set / GetUserTransform)或使用相机的ModelMatrix(ren.GetActiveCamera()。GetModelMatrix)然后使用vtkTransform类来应用这些转换transofrmations到你想要获得他们的"图像"在那些转变之后。