2017-03-19 1 views
0

SolidWorksでキューブを作成し、それをSTLファイルにエクスポートしました(Teキューブは原点の右に50mmです)。次にVTKクラスvtkSTLReaderを使用してこのファイルを読み取り、レンダリングウィンドウでレンダリングしました。しかしVTKでは、プロップの世界座標を取得する方法は?

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のままになります。この小道具は、立方体のジオメトリを表します。立方体は、そのうちの1つが50,0,0で定義されていますが、小道具の位置には影響しません。実際には、その一点(小道具の位置)が下にあるジオメトリのいずれかのノードに結ばれる方法はありません。キューブのノードのどれがどのように決定されますか?代わりに参照点であり、0,0,0の場合は、ジオメトリが定義されている座標と全く同じ座標でレンダリングされることを意味します(sr.GetOutputPort().GetPoints()として取得するか、stlファイルを直接調べることができます) 。基本的に、GetPosition()は、あなたのポイントに適用される変換行列の翻訳部分を提供します。

あなたの質問に答えるには、変換が適用されていないと仮定して、そのジオメトリの世界座標であるsr.GetOutputPort().GetPoints()からジオメトリのポイントを取得できます。いくつかの変換が心配な場合は、アクタ(Set/GetUserTransform)で独自の変換を定義するか、カメラのModelMatrix(ren.GetActiveCamera()。GetModelMatrix)を使用してvtkTransformクラスを使用して、それらの変換の後に "イメージ"を得たいと思っています。

関連する問題