00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkAngleWidget.h,v 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00079 #ifndef __vtkAngleWidget_h 00080 #define __vtkAngleWidget_h 00081 00082 #include "vtkAbstractWidget.h" 00083 00084 class vtkAngleRepresentation; 00085 class vtkHandleWidget; 00086 class vtkAngleWidgetCallback; 00087 00088 00089 class VTK_WIDGETS_EXPORT vtkAngleWidget : public vtkAbstractWidget 00090 { 00091 public: 00093 static vtkAngleWidget *New(); 00094 00096 00097 vtkTypeMacro(vtkAngleWidget,vtkAbstractWidget); 00098 void PrintSelf(ostream& os, vtkIndent indent); 00100 00104 virtual void SetEnabled(int); 00105 00107 00110 void SetRepresentation(vtkAngleRepresentation *r) 00111 {this->Superclass::SetWidgetRepresentation(reinterpret_cast<vtkWidgetRepresentation*>(r));} 00113 00115 void CreateDefaultRepresentation(); 00116 00118 00119 vtkAngleRepresentation *GetAngleRepresentation() 00120 {return reinterpret_cast<vtkAngleRepresentation*>(this->WidgetRep);} 00122 00125 int IsAngleValid(); 00126 00129 virtual void SetProcessEvents(int); 00130 00132 00136 enum {Start=0,Define,Manipulate}; 00137 //ETX 00139 00141 00149 virtual void SetWidgetStateToStart(); 00150 virtual void SetWidgetStateToManipulate(); 00152 00154 00155 virtual int GetWidgetState() 00156 {return this->WidgetState;} 00158 00159 protected: 00160 vtkAngleWidget(); 00161 ~vtkAngleWidget(); 00162 00163 // The state of the widget 00164 int WidgetState; 00165 int CurrentHandle; 00166 00167 // Callback interface to capture events when 00168 // placing the widget. 00169 static void AddPointAction(vtkAbstractWidget*); 00170 static void MoveAction(vtkAbstractWidget*); 00171 static void EndSelectAction(vtkAbstractWidget*); 00172 00173 // The positioning handle widgets 00174 vtkHandleWidget *Point1Widget; 00175 vtkHandleWidget *CenterWidget; 00176 vtkHandleWidget *Point2Widget; 00177 vtkAngleWidgetCallback *AngleWidgetCallback1; 00178 vtkAngleWidgetCallback *AngleWidgetCenterCallback; 00179 vtkAngleWidgetCallback *AngleWidgetCallback2; 00180 00181 // Methods invoked when the handles at the 00182 // end points of the widget are manipulated 00183 void StartAngleInteraction(int handleNum); 00184 void AngleInteraction(int handleNum); 00185 void EndAngleInteraction(int handleNum); 00186 00187 //BTX 00188 friend class vtkAngleWidgetCallback; 00189 //ETX 00190 00191 private: 00192 vtkAngleWidget(const vtkAngleWidget&); //Not implemented 00193 void operator=(const vtkAngleWidget&); //Not implemented 00194 }; 00195 00196 #endif