vtkImageRectilinearWipe棋盘格

基本介绍

在前一篇文章中,我们使用了vtkImageCheckerboard创建棋盘格,在鼠标移动时,围绕鼠标中心点同步显示指定大小的棋盘格。
这一章中,我们采用vtkImageRectilinearWipe实现棋盘格,更加贴近实际的使用效果。

基本流程

假设两组数据分别为image1和image2:

1、首先计算两组数据的大小包围盒((vtkImageData* image1)() 仅作为表示)

        double imageBoundingBox[3];
        imageBoundingBox[0] = (vtkImageData* image1)()->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[1];
        imageBoundingBox[1] = (vtkImageData* image1)()->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[3];
        imageBoundingBox[2] = (vtkImageData* image1)()->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[5];

        double overlayBoundingBox[3];
        overlayBoundingBox[0] = (vtkImageData* image2)()->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[1];
        overlayBoundingBox[1] = (vtkImageData* image2)()->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[3];
        overlayBoundingBox[2] = (vtkImageData* image2)()->GetInformation()->Get(vtkDataObject::DATA_EXTENT())[5];

2、创建vtkExtractVOIvtkImageRectilinearWipe

        vtkSmartPointer<vtkExtractVOI> extractVOI1 = vtkSmartPointer<vtkExtractVOI>::New();
        vtkSmartPointer<vtkExtractVOI> extractVOI2 = vtkSmartPointer<vtkExtractVOI>::New();  
        vtkSmartPointer<vtkImageRectilinearWipe> imageRectWipe = vtkSmartPointer<vtkImageRectilinearWipe>::New();

        extractVOI1->SetInputConnection(data1);
        extractVOI2->SetInputConnection(data2);

3、根据鼠标点击,判断视图和位置,并获取VOI数据

 int currentSlicePosition[3] = { 0, 0, 0 }; //鼠标当前移动的位置(XYZ)

  switch (GetSliceOrientation())
  {
    case vtkImageViewer2::SLICE_ORIENTATION_XY:
         imageRectWipe->SetPosition(currentSlicePosition[0], currentSlicePosition[1]);
         //VOI1
         extractVOI1->SetVOI(0, imageBoundingBox[0], 0, imageBoundingBox[1], currentSlicePixel[2], currentSlicePixel[2]);
         //VOI2
         extractVOI2->SetVOI(0, imageBoundingBox[0], 0, imageBoundingBox[1], currentSlicePixel[2], currentSlicePixel[2]);
         break;
    case vtkImageViewer2::SLICE_ORIENTATION_XZ:
         imageRectWipe->SetPosition(currentSlicePosition[0], currentSlicePosition[2]);
          //VOI1
          extractVOI1->SetVOI(0, imageBoundingBox[0], currentSlicePosition[1], currentSlicePosition[1], 0,imageBoundingBox[2]);
          //VOI2
          extractVOI2->SetVOI(0, imageBoundingBox[0], currentSlicePosition[1], currentSlicePosition[1], 0, imageBoundingBox[2]);
          break;
    case vtkImageViewer2::SLICE_ORIENTATION_YZ:
         imageRectWipe->SetPosition(currentSlicePosition[1], currentSlicePosition[2]);
          //VOI1
          extractVOI1->SetVOI(currentSlicePosition[0], currentSlicePosition[0], 0, imageBoundingBox[1], 0, imageBoundingBox[2]);
          //VOI2
          extractVOI2->SetVOI(currentSlicePosition[0], currentSlicePosition[0], 0, imageBoundingBox[1], 0, imageBoundingBox[2]);
          break;
         
}

 extractVOI1->Update();
 extractVOI2->Update();
 imageRectWipe->SetInputConnection(0, extractVOI1->GetOutputPort());
 imageRectWipe->SetInputConnection(1, extractVOI2->GetOutputPort());

4、 设置 wipe axes位置

//Set the location of the wipe axes
 switch (orientation)
      {
        case 0:
            imageRectWipe->SetAxis(0,1);
            break;
        case 1:
            imageRectWipe->SetAxis(0, 2);
            break;
        case 2:
            imageRectWipe->SetAxis(1, 2);
            break;
       }

5、将imageRectWipe 赋值给 vtkImageActor

(vtkImageActor*)()->GetMapper()->SetInputConnection(imageRectWipe->GetOutputPort());

6、由 vtkImageActor设置显示属性

图例

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三人行-Team

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值