00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00046 #ifndef __vtkAffineRepresentation2D_h
00047 #define __vtkAffineRepresentation2D_h
00048 
00049 #include "vtkAffineRepresentation.h"
00050 
00051 class vtkProperty2D;
00052 class vtkActor2D;
00053 class vtkPolyDataMapper2D;
00054 class vtkPolyData;
00055 class vtkPoints;
00056 class vtkCellArray;
00057 class vtkTextProperty;
00058 class vtkLeaderActor2D;
00059 class vtkTextMapper;
00060 class vtkActor2D;
00061 
00062 
00063 class VTK_WIDGETS_EXPORT vtkAffineRepresentation2D : public vtkAffineRepresentation
00064 {
00065 public:
00067   static vtkAffineRepresentation2D *New();
00068 
00070 
00071   vtkTypeMacro(vtkAffineRepresentation2D,vtkAffineRepresentation);
00072   void PrintSelf(ostream& os, vtkIndent indent);
00074 
00076 
00081   vtkSetClampMacro(BoxWidth,int,10,VTK_LARGE_INTEGER);
00082   vtkGetMacro(BoxWidth,int);
00083   vtkSetClampMacro(CircleWidth,int,10,VTK_LARGE_INTEGER);
00084   vtkGetMacro(CircleWidth,int);
00085   vtkSetClampMacro(AxesWidth,int,10,VTK_LARGE_INTEGER);
00086   vtkGetMacro(AxesWidth,int);
00088 
00090 
00093   void SetOrigin(double o[3]) {this->SetOrigin(o[0],o[1],o[2]);}
00094   void SetOrigin(double ox, double oy, double oz);
00095   vtkGetVector3Macro(Origin,double);
00097 
00104   virtual void GetTransform(vtkTransform *t);
00105 
00107 
00108   void SetProperty(vtkProperty2D*);
00109   void SetSelectedProperty(vtkProperty2D*);
00110   void SetTextProperty(vtkTextProperty*);
00111   vtkGetObjectMacro(Property,vtkProperty2D);
00112   vtkGetObjectMacro(SelectedProperty,vtkProperty2D);
00113   vtkGetObjectMacro(TextProperty,vtkTextProperty);
00115   
00117 
00121   vtkSetMacro(DisplayText,int);
00122   vtkGetMacro(DisplayText,int);
00123   vtkBooleanMacro(DisplayText,int);
00125 
00127 
00132   virtual void PlaceWidget(double bounds[6]);
00133   virtual void StartWidgetInteraction(double eventPos[2]);
00134   virtual void WidgetInteraction(double eventPos[2]);
00135   virtual void EndWidgetInteraction(double eventPos[2]);
00136   virtual int ComputeInteractionState(int X, int Y, int modify=0);
00137   virtual void BuildRepresentation();
00139 
00141 
00142   virtual void ShallowCopy(vtkProp *prop);
00143   virtual void GetActors2D(vtkPropCollection *);
00144   virtual void ReleaseGraphicsResources(vtkWindow *);
00145   virtual int RenderOverlay(vtkViewport *viewport);
00147   
00148 protected:
00149   vtkAffineRepresentation2D();
00150   ~vtkAffineRepresentation2D();
00151 
00152   
00153   void Translate(double eventPos[2]);
00154   void Scale(double eventPos[2]);
00155   void Rotate(double eventPos[2]);
00156   void Shear(double eventPos[2]);
00157   void Highlight(int highlight);
00158   void UpdateText(const char *text, double eventPos[2]);
00159 
00160   
00161   int BoxWidth;
00162   int CircleWidth;
00163   int AxesWidth;
00164 
00165   
00166   int DisplayText;
00167   
00168   
00169   double CurrentWidth;
00170   double CurrentRadius;
00171   double CurrentAxesWidth;
00172 
00173   
00174   vtkTransform *CurrentTransform;
00175   vtkTransform *TotalTransform;
00176   vtkTransform *TempTransform;
00177   double Origin[4]; 
00178   double DisplayOrigin[3]; 
00179   double CurrentTranslation[3]; 
00180   double StartWorldPosition[4]; 
00181   double StartAngle; 
00182   double CurrentAngle;
00183   double CurrentScale[2];
00184   double CurrentShear[2];
00185   void   ApplyShear(); 
00186   
00187   
00188   
00189   vtkProperty2D   *Property;
00190   vtkProperty2D   *SelectedProperty;
00191   vtkTextProperty *TextProperty;
00192   void             CreateDefaultProperties();
00193   double           Opacity;
00194   double           SelectedOpacity;
00195   
00196   
00197   double LastEventPosition[2];
00198   
00199   
00200   
00201   vtkTextMapper *TextMapper;
00202   vtkActor2D    *TextActor;
00203   
00204   
00205   vtkPoints           *BoxPoints;
00206   vtkCellArray        *BoxCellArray;
00207   vtkPolyData         *Box;
00208   vtkPolyDataMapper2D *BoxMapper;
00209   vtkActor2D          *BoxActor;
00210 
00211   vtkPoints           *HBoxPoints;
00212   vtkCellArray        *HBoxCellArray;
00213   vtkPolyData         *HBox;
00214   vtkPolyDataMapper2D *HBoxMapper;
00215   vtkActor2D          *HBoxActor;
00216 
00217   
00218   vtkPoints           *CirclePoints;
00219   vtkCellArray        *CircleCellArray;
00220   vtkPolyData         *Circle;
00221   vtkPolyDataMapper2D *CircleMapper;
00222   vtkActor2D          *CircleActor;
00223 
00224   vtkPoints           *HCirclePoints;
00225   vtkCellArray        *HCircleCellArray;
00226   vtkPolyData         *HCircle;
00227   vtkPolyDataMapper2D *HCircleMapper;
00228   vtkActor2D          *HCircleActor;
00229   
00230   
00231   vtkLeaderActor2D    *XAxis;
00232   vtkLeaderActor2D    *YAxis;
00233   vtkLeaderActor2D    *HXAxis;
00234   vtkLeaderActor2D    *HYAxis;
00235 
00236 private:
00237   vtkAffineRepresentation2D(const vtkAffineRepresentation2D&);  
00238   void operator=(const vtkAffineRepresentation2D&);  
00239 };
00240 
00241 #endif