您的位置:首页 > 其它

02 - 替换SetInput方法 VTK 6.0 迁移 (2013-06-30 16:22)

2013-07-02 08:44 507 查看
VTK6 引入了许多不兼容的变化,这其中就包括用SetInputData()和SetInputConnection()替换SetInput()方法。在先前的版本中,VTK4 引入了SetInput()方法,VTK5中引入了SetInputConnection()。

下面举一些例子:在如下例子中,虽然我只演示了替换SetInput(),读者可以类比替换SetSource()。在例子中,读者可以搜索相应的替换方法SetSourceConnection() or SetSourceData()。

例子1

anotherFilter->SetInput(aFilter->GetOutput()); 变成 anotherFilter->SetInputConnection(aFilter->GetOutputPort());

例子2


vtkDataObject* output = aFilter->GetOutput();
anotherFilter->SetInput(output);


应该变成:anotherFilter->SetInputConnection(aFilter->GetOutputPort());

例子3

vtkPolyData *pd = vtkPolyData::New();
aFilter->SetInput(pd);


变成:

vtkPolyData *pd = vtkPolyData::New();
aFilter->SetInputData(pd);  


例子4

vtkDataObject* output = aFilter->GetOutput();
aFilter->Update();
anotherFilter->SetInput(output);


这个该法分两种情况,如果aFilter在以后的更新流中不在被修改的话,我们可以简单的用SetInputData(不建立管道)

vtkDataObject* output = aFilter->GetOutput();
aFilter->Update();
anotherFilter->SetInputData(output);


另外一种情况就是建立管道连接。

例子5

void myfunction(vtkDataObject* dobj)
{
vtkAFilter* aFilter = vtkAFilter::New();
aFilter->SetInput(dobj);
aFilter->Update();
// …
}


对于上面这个方法需要改写,分两种情况,如果调用者传入的是myfunction(aFilter->GetOutput());,则需要传入方法的参数变成算法,如下:

void myfunction(vtkAlgorithm* alg, int port)
{
vtkAFilter* aFilter = vtkAFilter::New();
aFilter->SetInputConnection(alg->GetOutputPort(port));
aFilter->Update();
// …
}


另一种情况是vtkPolyData* pd = vtkPolyData::New(); myfunction(pd);则,仅仅需要替换为SetInputData()

void myfunction(vtkDataObject* dobj)
{
vtkAFilter* aFilter = vtkAFilter::New();
aFilter->SetInputData(dobj);
aFilter->Update();
// …
}


例子6

class foo
{
vtkDataObject* DataObject;
void Process()
{
vtkAFilter* aFilter = vtkAFilter::New();
aFilter->SetInput(this->DataObject);
aFilter->Update();
// …
}
};


这个和例子5的修改方式一样,需要决定vtkDataObject的产生式通过polydata还是algorithm。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: