在使用vtkBorderWidget的过程中,需要改变Widget的位置和大小,网上提供的一种方法是:

 

 
  
  1. representation->GetPositionCoordinate()->SetCoordinateSystemToWorld(); 
  2. representation->GetPosition2Coordinate()->SetCoordinateSystemToWorld(); 
  3. representation->SetPosition(pos[0],pos[1]); 
  4. representation->SetPosition(pos1[0],pos1[1]); 

 

   这种方法虽然能设置widget的位置,但是却使widget失去了与鼠标交互的能力,参考vtkBorderReprsentation的源代码发现,在构造函数中,widget位置的初始化采用的是:

 
  
  1. this->PositionCoordinate->SetCoordinateSystemToNormalizedViewport(); 
  2.  this->PositionCoordinate->SetValue(0.05, 0.05); 
  3.  this->Position2Coordinate = vtkCoordinate::New(); 
  4.  this->Position2Coordinate->SetCoordinateSystemToNormalizedViewport(); 
  5.  this->Position2Coordinate->SetValue(0.1, 0.1); 
 
   于是按照这样的思路改写代码如下:
 
  
  1. representation->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport(); 
  2. representation->GetPosition2Coordinate()->SetCoordinateSystemToNormalizedViewport(); 
  3. representation->SetPosition(pos[0],pos[1]); 
  4. representation->SetPosition(pos1[0],pos1[1]); 

   最终的结果是,widget位置按照自己的意愿进行修改,并且能够继续和鼠标进行交互。