2017-03-19 32 views
0

我在SolidWorks中创建了一个立方体并将其导出到STL文件中(Te立方体位于原点右侧50毫米处)然后我使用VTK类vtkSTLReader读取该文件并将其渲染到渲染窗口中。在VTK中,如何获取Prop的世界坐标?

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() 

回答

0

好吧,除非你改变道具(演员)的的位置,它仍将在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类将这些转换形式应用于任何坐标你想在这些转变之后获得他们的“形象”。

相关问题