我有多个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并不十分熟悉,所以我想知道这是否是最合适的方法。有什么建议吗?
答案 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);