如何组合vtkImageData的多个实例?

时间:2014-08-19 11:53:56

标签: vtk

我有多个vtkImageData实例,表示一个大型数据集的窗口。实例是相邻的且不重叠的。

我想用单个vtkPlaneWidget切换所有imageData,所以我必须以某种方式将imageData组合成单个输入连接。我还希望能够从连接中有效地添加或删除任何vtkImageData实例。

现在我在vtkMultiBlockDataSet中有vtkImageData。我想我可以使用带有执行vtkCompositeDataPipeline的过滤器过滤数据,如下面的Tcl片段所示。

# propogate the multiblock
MultiBlockDataSet mb
mb SetNumberOfBlocks [llength $image_data_list]
for {set i 0} {$i < [llength $image_data_list]} {incr i} {
    mb SetBlock $i [lindex $image_data_list $i]}
}

vtkSimpleToSimpleImageFilter fltr
vtkCompositeDataPipeline cdp
fltr SetExecutive cdp
fltr SetInput cdp

vtkImagePlaneWidget plane
plane SetInputConnection [fltr GetOutputPort]

然而,飞机似乎不是输入连接,而且我对Vtk并不十分熟悉,所以我想知道这是否是最合适的方法。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

通过不了解您的代码以及您如何读取数据......一种可能的方法是初始化新的vtkImageData对象并添加切片数据。

(假设有三个vtkImageData对象mySlice1,mySlice2和myTotalSlices的快速示例)

myTotalSlices->GetPointData->AddArray(mySlice1->GetPointData()->GetScalars());
myTotalSlices->GetPointData->AddArray(mySlice2->GetPointData()->GetScalars());

myTotalSlices->SetExtent(0, 511, 0, 511, 0, 1);
myTotalSlices->Update();

SetExtent中的值只是一个示例,当然您需要调整它们以适合您的数据范围。 还可以删除数组,即基于索引的

myTotalSlices->GetPointData->RemoveArray(0);