2017-03-19 70 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類將這些轉換形式應用於任何座標你想在這些轉變之後獲得他們的「形象」。

相關問題