根据http://www.vislab.cn/bbs/viewthread.php?tid=223中提供的代码,实现了其效果。

 
  
  1. #include "vtkDistanceWidget.h" 
  2. #include "vtkSphereSource.h" 
  3. #include "vtkPolyDataMapper.h" 
  4. #include "vtkActor.h" 
  5. #include "vtkRenderer.h" 
  6. #include "vtkRenderWindow.h" 
  7. #include "vtkRenderWindowInteractor.h" 
  8. #include "vtkCommand.h" 
  9. #include "vtkInteractorEventRecorder.h" 
  10. #include "vtkRegressionTestImage.h" 
  11. #include "vtkDebugLeaks.h" 
  12. #include "vtkCoordinate.h" 
  13. #include "vtkMath.h" 
  14. #include "vtkHandleWidget.h" 
  15. #include "vtkPointHandleRepresentation2D.h" 
  16. #include "vtkAxisActor2D.h" 
  17. #include "vtkProperty2D.h" 
  18. #include "vtkDistanceRepresentation2D.h" 
  19. /// 
  20. #include "vtkTIFFReader.h" 
  21. #include "vtkImageDataGeometryFilter.h" 
  22.  
  23. class vtkDistanceCallback : public vtkCommand 
  24. public: 
  25.     static vtkDistanceCallback *New()  
  26.     { return new vtkDistanceCallback; } 
  27.     virtual void Execute(vtkObject *caller, unsigned long, void*); 
  28.     vtkDistanceCallback():Renderer(0),RenderWindow(0),DistanceWidget(0),Distance(0) {} 
  29.     vtkRenderer *Renderer; 
  30.     vtkRenderWindow *RenderWindow; 
  31.     vtkDistanceWidget *DistanceWidget; 
  32.     vtkDistanceRepresentation2D *Distance; 
  33. }; 
  34.  
  35.  
  36. void vtkDistanceCallback::Execute(vtkObject*, unsigned long eid, void* callData) 
  37.     if ( eid == vtkCommand::InteractionEvent || 
  38.         eid == vtkCommand::EndInteractionEvent ) 
  39.     { 
  40.         double pos1[3], pos2[3]; 
  41.         // Modify the measure axis 
  42.         this->Distance->