2014-09-02 71 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