vtkResliceImageViewer在视图中获取边界图像

时间:2016-11-23 12:54:12

标签: c++ vtk

情况: 我正在使用vtkresliceimageviewer来显示三个MPR视图,基于这个例子。

所以我可以旋转光标在所有三个屏幕上生成一个新视图。

问题: 即使在旋转了一些光标后,我想知道观察者的图像界限。

OBS 我试图从imageActor获取值并询问我的渲染器位置,但这只有在我没有与其他游标的交互时才有效。 轴向示例:

void UpdatePointWordToViewer(vtkRenderer* rend, double p[4])
{
    rend->SetWorldPoint(p);
    rend->WorldToDisplay();
    rend->GetDisplayPoint(p);
}

void UpdateBoxAxial()
{
    auto bounds = pMPR->GetViewer(2)->GetImageActor()->GetBounds();
    auto ren = pMPR->GetViewer(2)->GetRenderer();
    auto size = pMPR->GetViewer(2)->GetInteractor()->GetSize();

    double pIni1[]{ 0,0,0,1 };
    double pIni2[]{ 0,0,0,1 };
    double pIni3[]{ 0,0,0,1 };
    double pIni4[]{ 0,0,0,1 };
    double pConvert1[]{ 0,0,0 };
    double pConvert2[]{ 0,0,0 };

    //check the bounds
    pIni1[0] = bounds[0];
    pIni1[1] = bounds[3];
    pIni1[2] = bounds[4];

    pIni2[0] = bounds[1];
    pIni2[1] = bounds[3];
    pIni2[2] = bounds[4];

    pIni3[0] = bounds[0];
    pIni3[1] = bounds[2];
    pIni3[2] = bounds[4];

    pIni4[0] = bounds[1];
    pIni4[1] = bounds[2];
    pIni4[2] = bounds[4];

    //convert the points for viewer coordinates
    UpdatePointWordToViewer(ren, pIni1);
    UpdatePointWordToViewer(ren, pIni2);
    UpdatePointWordToViewer(ren, pIni3);
    UpdatePointWordToViewer(ren, pIni4);

    //P1
    if (pIni1[0] < pIni3[0])
        pConvert1[0] = pIni1[0];
    else
        pConvert1[0] = pIni3[0];

    if (pIni3[1] < pIni4[1])
        pConvert1[1] = pIni3[1];
    else
        pConvert1[1] = pIni4[1];

    //P2
    if (pIni2[0] > pIni4[0])
        pConvert2[0] = pIni2[0];
    else
        pConvert2[0] = pIni4[0];

    if (pIni1[1] > pIni2[1])
        pConvert2[1] = pIni1[1];
    else
        pConvert2[1] = pIni2[1];
}

所以我知道最小点(左 - 下)和最大点(右 - 上)

0 个答案:

没有答案