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   virtual double * GetLabelTextScale();
00121 
00123 
00124   vtkGetObjectMacro( LabelTextActor, vtkFollower );
00126   
00130   virtual void SetUniformScale( double scale );
00131 
00133 
00134   vtkSetMacro( HandleVisibility, int );
00135   vtkGetMacro( HandleVisibility, int );
00136   vtkBooleanMacro( HandleVisibility, int );
00138   
00139 protected:
00140   vtkAbstractPolygonalHandleRepresentation3D();
00141   ~vtkAbstractPolygonalHandleRepresentation3D();
00142 
00143   vtkActor                   * Actor;
00144   vtkPolyDataMapper          * Mapper;
00145   vtkTransformPolyDataFilter * HandleTransformFilter;
00146   vtkMatrixToLinearTransform * HandleTransform;
00147   vtkMatrix4x4               * HandleTransformMatrix;
00148   vtkCellPicker              * HandlePicker;
00149   double                       LastPickPosition[3];
00150   double                       LastEventPosition[2];
00151   int                          ConstraintAxis;
00152   vtkProperty                * Property;
00153   vtkProperty                * SelectedProperty;
00154   int                          WaitingForMotion;
00155   int                          WaitCount;
00156   int                          HandleVisibility;
00157 
00158   void Highlight(int highlight);
00159 
00160   // Methods to manipulate the cursor
00161   virtual void Translate(double *p1, double *p2);
00162   virtual void Scale(double *p1, double *p2, double eventPos[2]);
00163   virtual void MoveFocus(double *p1, double *p2);
00164   
00165   void CreateDefaultProperties();
00166 
00167   // Given a motion vector defined by p1 --> p2 (p1 and p2 are in 
00168   // world coordinates), the new display position of the handle center is 
00169   // populated into requestedDisplayPos. This is again only a request for the
00170   // new display position. It is up to the point placer to deduce the 
00171   // appropriate world co-ordinates that this display position will map into.
00172   // The placer may even disallow such a movement.
00173   virtual void MoveFocusRequest( 
00174       double *p1, double *p2, double requestedDisplayPos[3] );
00175 
00176   int DetermineConstraintAxis(int constraint, double *x, double *startPickPos);
00177 
00185   virtual void UpdateHandle();
00186 
00188   virtual void UpdateLabel();
00189   
00190   // Handle the label.
00191   int                LabelVisibility;
00192   vtkFollower       *LabelTextActor;
00193   vtkPolyDataMapper *LabelTextMapper;
00194   vtkVectorText     *LabelTextInput;  
00195   bool               LabelAnnotationTextScaleInitialized;
00196 
00197 private:
00198   vtkAbstractPolygonalHandleRepresentation3D(const vtkAbstractPolygonalHandleRepresentation3D&);  //Not implemented
00199   void operator=(const vtkAbstractPolygonalHandleRepresentation3D&);  //Not implemented
00200 };
00201 
00202 #endif
00203 
00204