2016-03-07 8 views
0

Я пытаюсь деформировать сферу, а затем отображать ее на vtk.Функция обновления ITK

У меня возникли проблемы с функцией Update(), потому что я не уверен, должен ли я использовать его после каждого создаваемого фильтра.

typedef itk::TriangleMeshToSimplexMeshFilter< TMesh, TSimplex > TConvert; 
typedef itk::SimplexMeshToTriangleMeshFilter< TSimplex, TMesh > TReverseConvert; 
typedef itk::DeformableSimplexMesh3DBalloonForceFilter< TSimplex, TSimplex > TDeform; 

TConvert::Pointer convertSimplex = TConvert::New(); 
convertSimplex->SetInput(sphere->GetOutput()); 
//If I use Update the next line then I'm having errors at execution 
convertSimplex->Update(); 

TDeform::Pointer balloon = TDeform::New(); 
balloon->SetInput(convertSimplex->GetOutput()); 
//....Some deform values i.e. alpha and beta 
balloon->SetRigidity(0); 
balloon->Update(); //Again the same problem 

TReverseConvert::Pointer reverse = TReverseConvert::New(); 
reverse->SetInput(ballon->GetOutputPort()); 
reverse->Update(); 

Должен ли я сделать это только в конце всех фильтров? Что делать, если я добавляю все больше фильтров, и я не знаю их порядок? (Предположим, что порядок зависит от действий пользователя)

ответ

2

Вам нужно только позвонить Update() на последнем фильтре в вашем конвейере. Остальная часть этого ответа объясняется.

ITK использует инфраструктуру выполнения трубопроводов для фильтров. Предположим, у нас есть три фильтра, которые последовательно соединены следующим образом:

вход -> | фильтр1 | -> | фильтр2 | -> | фильтр3 | -> выход

Если вы вызываете Update() на filter3, ITK запускается с фильтра 3 и проверяет, изменились ли входные данные каждого фильтра. Если они есть, ITK называет обновление по очереди. См. Слайд 5 этого link.

 Смежные вопросы

  • Нет связанных вопросов^_^