VTK6 - 在没有管道的情况下转换vtkPolyData

时间:2014-09-02 20:02:58

标签: c++ vtk

我正在尝试使用vtkTransform来转换vtkPolyData对象。 但是,我发现的教程使用的是管道,例如:http://www.vtk.org/Wiki/VTK/Examples/Cxx/Filters/TransformPolyData

但是,我正在使用VTK 6.1,它已经为这里提到的独立数据对象删除了一个GetOutputPort方法: http://www.vtk.org/Wiki/VTK/VTK_6_Migration/Replacement_of_SetInput

我试图更换这一行:

transformFilter->SetInputConnection()

transformFilter->SetInputData(polydata_object);

不幸的是,数据未正确读取(因为管道设置不正确?)

您是否知道如何在不使用VTK6管道的情况下正确转换独立的vtkPolyData?

谢谢!

1 个答案:

答案 0 :(得分: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());

关键是确保在不使用管道时将数据传递给变换过滤器之前更新/读取数据。