在使用vtkBorderWidget的过程中,需要改变Widget的位置和大小,网上提供的一种方法是:
- representation->GetPositionCoordinate()->SetCoordinateSystemToWorld();
- representation->GetPosition2Coordinate()->SetCoordinateSystemToWorld();
- representation->SetPosition(pos[0],pos[1]);
- representation->SetPosition(pos1[0],pos1[1]);
这种方法虽然能设置widget的位置,但是却使widget失去了与鼠标交互的能力,参考vtkBorderReprsentation的源代码发现,在构造函数中,widget位置的初始化采用的是:
- this->PositionCoordinate->SetCoordinateSystemToNormalizedViewport();
- this->PositionCoordinate->SetValue(0.05, 0.05);
- this->Position2Coordinate = vtkCoordinate::New();
- this->Position2Coordinate->SetCoordinateSystemToNormalizedViewport();
- this->Position2Coordinate->SetValue(0.1, 0.1);
- representation->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport();
- representation->GetPosition2Coordinate()->SetCoordinateSystemToNormalizedViewport();
- representation->SetPosition(pos[0],pos[1]);
- representation->SetPosition(pos1[0],pos1[1]);
最终的结果是,widget位置按照自己的意愿进行修改,并且能够继续和鼠标进行交互。
转载于:https://blog.51cto.com/2845385/1071943