2014-09-02 70 views
1

我想通過使用變換vtkPolyData對象通過使用vtkTransform。 然而,教程,我發現正在使用的管道,例如:http://www.vtk.org/Wiki/VTK/Examples/Cxx/Filters/TransformPolyDataVTK6 - 變換vtkPolyData沒有管道

不過,我使用VTK 6.1已thge GetOutputPort方法去除獨立的數據對象這裏提到: http://www.vtk.org/Wiki/VTK/VTK_6_Migration/Replacement_of_SetInput

我有試圖替換行:

transformFilter->SetInputConnection() 

transformFilter->SetInputData(polydata_object); 

不幸的是,數據讀取不正確(因爲管道設置不正確?)

你知道如何正確轉換一個獨立的vtkPolyData而不使用VTK6中的管道嗎?

謝謝!

回答

3

GetOutputPort從來不是數據對象的一種方法。它始終是vtkAlgorithm上的一種方法,它仍然存在於vtkAlgorithm(和子類)上。 polydata_object來自哪裏?如果它是一個閱讀器的輸出,你有兩個選擇:

// update the reader to ensure it executes and reads data. 
reader->UpdatePipeline() 

// now you can get access to the data object. 
vtkSmartPointer<vtkPolyData> data = vtkPolyData::SafeDownCast(reader->GetOutputDataObject(0)); 

// pass that to the transform filter. 
transformFilter->SetInputData(data.GetPointer()); 
transformFilter->Update(); 

第二個選擇是簡單地連接管道:

transformFilter->SetInputConnection(reader->GetOutputPort()); 

關鍵是要確保數據的更新/讀者傳遞前它在不使用管道時轉換過濾器。

+0

嗨Utkarsh,謝謝你的回答。因爲我是VTK的新手,你能告訴我data.GetPointer()有什麼區別,或者只是使用數據?我認爲兩者都適用於我的情況。 – 2014-09-03 09:12:32

+0

這是很好解釋在http://www.vtk.org/Wiki/VTK/Tutorials/SmartPointers(見智能指針傳遞給函數) – JohnnyQ 2014-09-03 10:55:22

+0

嗨JohnnyQ,如果我正確理解文章,我認爲沒有區別。正如在這種情況下,數據是一個智能指針,而data.GetPointer()將原始指針返回給該對象。 – 2014-09-03 16:01:06