00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00038 #ifndef __vtkBoxRepresentation_h
00039 #define __vtkBoxRepresentation_h
00040 
00041 #include "vtkWidgetRepresentation.h"
00042 
00043 class vtkActor;
00044 class vtkPolyDataMapper;
00045 class vtkLineSource;
00046 class vtkSphereSource;
00047 class vtkCellPicker;
00048 class vtkProperty;
00049 class vtkPolyData;
00050 class vtkPoints;
00051 class vtkPolyDataAlgorithm;
00052 class vtkPointHandleRepresentation3D;
00053 class vtkTransform;
00054 class vtkPlanes;
00055 class vtkBox;
00056 class vtkDoubleArray;
00057 class vtkMatrix4x4;
00058 
00059 
00060 class VTK_WIDGETS_EXPORT vtkBoxRepresentation : public vtkWidgetRepresentation
00061 {
00062 public:
00064   static vtkBoxRepresentation *New();
00065 
00067 
00068   vtkTypeMacro(vtkBoxRepresentation,vtkWidgetRepresentation);
00069   void PrintSelf(ostream& os, vtkIndent indent);
00071 
00078   void GetPlanes(vtkPlanes *planes);
00079 
00081 
00085   vtkSetMacro(InsideOut,int);
00086   vtkGetMacro(InsideOut,int);
00087   vtkBooleanMacro(InsideOut,int);
00089 
00095   virtual void GetTransform(vtkTransform *t);
00096 
00101   virtual void SetTransform(vtkTransform* t);
00102 
00112   void GetPolyData(vtkPolyData *pd);
00113 
00115 
00117   vtkGetObjectMacro(HandleProperty,vtkProperty);
00118   vtkGetObjectMacro(SelectedHandleProperty,vtkProperty);
00120 
00122 
00124   vtkGetObjectMacro(FaceProperty,vtkProperty);
00125   vtkGetObjectMacro(SelectedFaceProperty,vtkProperty);
00127   
00129 
00131   vtkGetObjectMacro(OutlineProperty,vtkProperty);
00132   vtkGetObjectMacro(SelectedOutlineProperty,vtkProperty);
00134   
00136 
00138   void SetOutlineFaceWires(int);
00139   vtkGetMacro(OutlineFaceWires,int);
00140   void OutlineFaceWiresOn() {this->SetOutlineFaceWires(1);}
00141   void OutlineFaceWiresOff() {this->SetOutlineFaceWires(0);}
00143 
00145 
00148   void SetOutlineCursorWires(int);
00149   vtkGetMacro(OutlineCursorWires,int);
00150   void OutlineCursorWiresOn() {this->SetOutlineCursorWires(1);}
00151   void OutlineCursorWiresOff() {this->SetOutlineCursorWires(0);}
00153 
00155 
00157   virtual void HandlesOn();
00158   virtual void HandlesOff();
00160   
00162 
00163   virtual void PlaceWidget(double bounds[6]);
00164   virtual void BuildRepresentation();
00165   virtual int  ComputeInteractionState(int X, int Y, int modify=0);
00166   virtual void StartWidgetInteraction(double e[2]);
00167   virtual void WidgetInteraction(double e[2]);
00168   virtual double *GetBounds();
00170   
00172 
00173   virtual void ReleaseGraphicsResources(vtkWindow*);
00174   virtual int  RenderOpaqueGeometry(vtkViewport*);
00175   virtual int  RenderTranslucentPolygonalGeometry(vtkViewport*);
00176   virtual int  HasTranslucentPolygonalGeometry();
00178   
00179 
00180   enum {Outside=0,MoveF0,MoveF1,MoveF2,MoveF3,MoveF4,MoveF5,Translating,Rotating,Scaling};
00181 
00182 
00190   void SetInteractionState(int state);
00191 
00192 protected:
00193   vtkBoxRepresentation();
00194   ~vtkBoxRepresentation();
00195 
00196   
00197   double LastEventPosition[3];
00198   
00199   
00200   vtkActor          *HexActor;
00201   vtkPolyDataMapper *HexMapper;
00202   vtkPolyData       *HexPolyData;
00203   vtkPoints         *Points;  
00204   double             N[6][3]; 
00205 
00206   
00207   vtkActor          *HexFace;
00208   vtkPolyDataMapper *HexFaceMapper;
00209   vtkPolyData       *HexFacePolyData;
00210 
00211   
00212   vtkActor          **Handle;
00213   vtkPolyDataMapper **HandleMapper;
00214   vtkSphereSource   **HandleGeometry;
00215   virtual void PositionHandles();
00216   int HighlightHandle(vtkProp *prop); 
00217   void HighlightFace(int cellId);
00218   void HighlightOutline(int highlight);
00219   virtual void ComputeNormals();
00220   virtual void SizeHandles();
00221   
00222   
00223   vtkActor          *HexOutline;
00224   vtkPolyDataMapper *OutlineMapper;
00225   vtkPolyData       *OutlinePolyData;
00226 
00227   
00228   vtkCellPicker *HandlePicker;
00229   vtkCellPicker *HexPicker;
00230   vtkActor *CurrentHandle;
00231   int      CurrentHexFace;
00232   vtkCellPicker *LastPicker;
00233   
00234   
00235   vtkTransform *Transform;
00236   
00237   
00238   vtkBox *BoundingBox;
00239   
00240   
00241   
00242   vtkProperty *HandleProperty;
00243   vtkProperty *SelectedHandleProperty;
00244   vtkProperty *FaceProperty;
00245   vtkProperty *SelectedFaceProperty;
00246   vtkProperty *OutlineProperty;
00247   vtkProperty *SelectedOutlineProperty;
00248   virtual void CreateDefaultProperties();
00249   
00250   
00251   int InsideOut;
00252   int OutlineFaceWires;
00253   int OutlineCursorWires;
00254   void GenerateOutline();
00255   
00256   
00257   virtual void Translate(double *p1, double *p2);
00258   virtual void Scale(double *p1, double *p2, int X, int Y);
00259   virtual void Rotate(int X, int Y, double *p1, double *p2, double *vpn);
00260   void MovePlusXFace(double *p1, double *p2);
00261   void MoveMinusXFace(double *p1, double *p2);
00262   void MovePlusYFace(double *p1, double *p2);
00263   void MoveMinusYFace(double *p1, double *p2);
00264   void MovePlusZFace(double *p1, double *p2);
00265   void MoveMinusZFace(double *p1, double *p2);
00266 
00267   
00268   vtkPoints      *PlanePoints;
00269   vtkDoubleArray *PlaneNormals;
00270   vtkMatrix4x4   *Matrix;
00271 
00272   
00273   
00274   void MoveFace(double *p1, double *p2, double *dir, 
00275                 double *x1, double *x2, double *x3, double *x4,
00276                 double *x5);
00277   
00278   
00279   void GetDirection(const double Nx[3],const double Ny[3], 
00280                     const double Nz[3], double dir[3]);
00281 
00282 
00283 private:
00284   vtkBoxRepresentation(const vtkBoxRepresentation&);  
00285   void operator=(const vtkBoxRepresentation&);  
00286 };
00287 
00288 #endif