这是我在做项目时候遇到的一个实际问题,虽然不影响使用,但却实际存在,会为软件使用带来一些不便。
问题描述:使用VTK实现二维图像的坐标点拾取,当切换到下一张图片时候会发现出现一个红色的框框。并且往往导致你当前图片显示位置偏移
出现问题的原因:在切换图片时 调用GetNumberofItems()方法 可以看到当我们没有进行坐标拾取时候 Prop的个数为1,在拾取之后,发现Prop个数变为2;
由此猜想:虽然看上去只有一张图片,但实际上你的前一张图片只是隐藏了,并没有从内存中释放出去,应该是坐标拾取器仍然占用着上一张图片资源导致无法释放。由此也就可以说明为什么会出现红框(表示的是对上一张图片仍处于选中状态)。位置出现偏移也就能解释通了:因为渲染窗口中出现两个Actor(其中一个是隐藏的),所以每次重置相机时是考虑的是维度最大图片如何完全显示在渲染窗口。
问题解决:基本查不到有用资料,只能去看源码,vtkRenderWindowInterator默认的拾取类是vtkPropicker; 再看这个累的源码时候,发现在拾取坐标之前有一个If语句判断,只有是真的情况下才可以调用WorldPointPicker类进行点坐标拾取。
// Have the renderer do the hardware pick
this->SetPath(
renderer->PickPropFrom(selectionX, selectionY, this->PickFromProps));
// If there was a pick then find the world x,y,z for the pick, and invoke
// its pick method.
if ( this->Path )
{
this->WorldPointPicker->Pick(selectionX, selectionY, 0, rend