C++ VTK6-不使用管道转换vtkPolyData

C++ VTK6-不使用管道转换vtkPolyData,c++,vtk,C++,Vtk,我正在尝试使用vtkTransform来转换vtkPolyData对象。 但是,我发现的教程使用的是管道,例如: 但是,我使用的VTK 6.1删除了独立数据对象的GetOutputPort方法,如下所述: 我已尝试替换该行: transformFilter->SetInputConnection() 与 不幸的是,数据读取不正确(因为管道设置不正确?) 您知道如何在不使用VTK6中的管道的情况下正确转换独立的vtkPolyData吗 谢谢大家! GetOutputPort从来不是数据对

我正在尝试使用vtkTransform来转换vtkPolyData对象。 但是,我发现的教程使用的是管道,例如:

但是,我使用的VTK 6.1删除了独立数据对象的GetOutputPort方法,如下所述:

我已尝试替换该行:

transformFilter->SetInputConnection()

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

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


谢谢大家!

GetOutputPort从来不是数据对象上的方法。它一直是vtkAlgorithm上的一个方法,现在仍然存在于vtkAlgorithm(和子类)上。polydata_对象来自哪里?如果是读卡器的输出,则有两个选项:

// 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();

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

Hi-Utkarsh,感谢您的回答。由于我是VTK新手,您能告诉我data.GetPointer()或仅使用数据的区别吗?我认为这两种方法都适用于我的情况。这在(参见向函数传递智能指针)Hi JohnnyQ中得到了很好的解释,如果我正确理解了本文,我认为没有区别。与本例一样,数据是一个智能指针,而data.GetPointer()返回指向对象的原始指针。是的,在本例中,您可以同样轻松地传递数据。在这种情况下,这主要是一种时尚。
// 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());