VTK
dox/Widgets/vtkAbstractPolygonalHandleRepresentation3D.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkAbstractPolygonalHandleRepresentation3D.h
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 =========================================================================*/
00033 #ifndef __vtkAbstractPolygonalHandleRepresentation3D_h
00034 #define __vtkAbstractPolygonalHandleRepresentation3D_h
00035 
00036 #include "vtkHandleRepresentation.h"
00037 
00038 class vtkProperty;
00039 class vtkPolyDataMapper;
00040 class vtkCellPicker;
00041 class vtkTransformPolyDataFilter;
00042 class vtkMatrixToLinearTransform;
00043 class vtkMatrix4x4;
00044 class vtkPolyData;
00045 class vtkAbstractTransform;
00046 class vtkActor;
00047 class vtkFollower;
00048 class vtkVectorText;
00049 
00050 class VTK_WIDGETS_EXPORT vtkAbstractPolygonalHandleRepresentation3D 
00051                            : public vtkHandleRepresentation
00052 {
00053 public:
00054 
00056 
00057   vtkTypeMacro(vtkAbstractPolygonalHandleRepresentation3D,vtkHandleRepresentation);
00058   void PrintSelf(ostream& os, vtkIndent indent);
00060 
00062 
00063   virtual void SetWorldPosition(double p[3]);
00064   virtual void SetDisplayPosition(double p[3]);
00066 
00068 
00069   void SetHandle( vtkPolyData * );
00070   vtkPolyData * GetHandle();
00072 
00074 
00075   void SetProperty(vtkProperty*);
00076   void SetSelectedProperty(vtkProperty*);
00077   vtkGetObjectMacro(Property,vtkProperty);
00078   vtkGetObjectMacro(SelectedProperty,vtkProperty);
00080 
00083   virtual vtkAbstractTransform * GetTransform();
00084 
00086 
00088   virtual void BuildRepresentation();
00089   virtual void StartWidgetInteraction(double eventPos[2]);
00090   virtual void WidgetInteraction(double eventPos[2]);
00091   virtual int ComputeInteractionState(int X, int Y, int modify=0);
00093 
00095 
00096   virtual void ShallowCopy(vtkProp *prop);
00097   virtual void DeepCopy(vtkProp *prop);
00098   virtual void GetActors(vtkPropCollection *);
00099   virtual void ReleaseGraphicsResources(vtkWindow *);
00100   virtual int RenderOpaqueGeometry(vtkViewport *viewport);
00101   virtual int RenderTranslucentPolygonalGeometry(vtkViewport *viewport);
00102   virtual int HasTranslucentPolygonalGeometry();
00103   virtual double *GetBounds();
00105   
00107 
00109   vtkSetMacro( LabelVisibility, int );
00110   vtkGetMacro( LabelVisibility, int );
00111   vtkBooleanMacro( LabelVisibility, int );
00112   virtual void SetLabelText( const char * label );
00113   virtual char * GetLabelText();
00115   
00117 
00118   virtual void SetLabelTextScale( double scale[3] );
00119   void SetLabelTextScale(double x, double y, double z)
00120   {
00121     double scale[3] = {x, y, z};
00122     this->SetLabelTextScale(scale);
00123   }
00124   virtual double * GetLabelTextScale();
00126 
00128 
00129   vtkGetObjectMacro( LabelTextActor, vtkFollower );
00131   
00135   virtual void SetUniformScale( double scale );
00136 
00138 
00139   vtkSetMacro( HandleVisibility, int );
00140   vtkGetMacro( HandleVisibility, int );
00141   vtkBooleanMacro( HandleVisibility, int );
00143 
00144   void Highlight(int highlight);
00145 protected:
00146   vtkAbstractPolygonalHandleRepresentation3D();
00147   ~vtkAbstractPolygonalHandleRepresentation3D();
00148 
00149   vtkActor                   * Actor;
00150   vtkPolyDataMapper          * Mapper;
00151   vtkTransformPolyDataFilter * HandleTransformFilter;
00152   vtkMatrixToLinearTransform * HandleTransform;
00153   vtkMatrix4x4               * HandleTransformMatrix;
00154   vtkCellPicker              * HandlePicker;
00155   double                       LastPickPosition[3];
00156   double                       LastEventPosition[2];
00157   int                          ConstraintAxis;
00158   vtkProperty                * Property;
00159   vtkProperty                * SelectedProperty;
00160   int                          WaitingForMotion;
00161   int                          WaitCount;
00162   int                          HandleVisibility;
00163 
00164 
00165   // Methods to manipulate the cursor
00166   virtual void Translate(double *p1, double *p2);
00167   virtual void Scale(double *p1, double *p2, double eventPos[2]);
00168   virtual void MoveFocus(double *p1, double *p2);
00169   
00170   void CreateDefaultProperties();
00171 
00172   // Given a motion vector defined by p1 --> p2 (p1 and p2 are in 
00173   // world coordinates), the new display position of the handle center is 
00174   // populated into requestedDisplayPos. This is again only a request for the
00175   // new display position. It is up to the point placer to deduce the 
00176   // appropriate world co-ordinates that this display position will map into.
00177   // The placer may even disallow such a movement.
00178   virtual void MoveFocusRequest( 
00179       double *p1, double *p2, double requestedDisplayPos[3] );
00180 
00181   int DetermineConstraintAxis(int constraint, double *x, double *startPickPos);
00182 
00190   virtual void UpdateHandle();
00191 
00193   virtual void UpdateLabel();
00194   
00195   // Handle the label.
00196   int                LabelVisibility;
00197   vtkFollower       *LabelTextActor;
00198   vtkPolyDataMapper *LabelTextMapper;
00199   vtkVectorText     *LabelTextInput;  
00200   bool               LabelAnnotationTextScaleInitialized;
00201 
00202 private:
00203   vtkAbstractPolygonalHandleRepresentation3D(const vtkAbstractPolygonalHandleRepresentation3D&);  //Not implemented
00204   void operator=(const vtkAbstractPolygonalHandleRepresentation3D&);  //Not implemented
00205 };
00206 
00207 #endif
00208 
00209