Slicer  4.8
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
vtkAnnotationROIRepresentation.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: $RCSfile: vtkAnnotationROIRepresentation.h,v $
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
21 //
24 //
29 
32 
33 
34 #ifndef __vtkAnnotationROIRepresentation_h
35 #define __vtkAnnotationROIRepresentation_h
36 
37 // Annotations includes
38 #include "vtkSlicerAnnotationsModuleVTKWidgetsExport.h"
39 
40 // VTK includes
41 #include "vtkWidgetRepresentation.h"
42 
43 class vtkActor;
44 class vtkBox;
45 class vtkCellPicker;
46 class vtkDoubleArray;
47 class vtkLineSource;
48 class vtkMatrix4x4;
49 class vtkPlanes;
50 class vtkPointHandleRepresentation3D;
51 class vtkPoints;
52 class vtkPolyData;
53 class vtkPolyDataAlgorithm;
54 class vtkPolyDataMapper;
55 class vtkProperty;
56 class vtkSphereSource;
57 class vtkTransform;
58 
59 class VTK_SLICER_ANNOTATIONS_MODULE_VTKWIDGETS_EXPORT
61  : public vtkWidgetRepresentation
62 {
63 public:
66  static vtkAnnotationROIRepresentation *New();
67 
70  vtkTypeMacro(vtkAnnotationROIRepresentation,vtkWidgetRepresentation);
71  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
72 
73  static const int NUMBER_HANDLES = 7;
74 
82  void GetPlanes(vtkPlanes *planes);
83 
89  vtkSetMacro(InsideOut,int);
90  vtkGetMacro(InsideOut,int);
91  vtkBooleanMacro(InsideOut,int);
92 
94  void SetWorldToLocalMatrix(vtkMatrix4x4 *worldToLocalMatrix);
95  vtkGetObjectMacro(WorldToLocalMatrix,vtkMatrix4x4);
96 
103  virtual void GetTransform(vtkTransform *t);
104 
110  virtual void SetTransform(vtkTransform* t);
111 
121  void GetPolyData(vtkPolyData *pd);
122 
127  //vtkGetObjectMacro(HandleProperty,vtkProperty);
128  vtkGetObjectMacro(SelectedHandleProperty,vtkProperty);
129 
134  vtkGetObjectMacro(FaceProperty,vtkProperty);
135  vtkGetObjectMacro(SelectedFaceProperty,vtkProperty);
136 
141  vtkGetObjectMacro(OutlineProperty,vtkProperty);
142  vtkGetObjectMacro(SelectedOutlineProperty,vtkProperty);
143 
147  void SetOutlineFaceWires(int);
148  vtkGetMacro(OutlineFaceWires,int);
149  void OutlineFaceWiresOn() {this->SetOutlineFaceWires(1);}
150  void OutlineFaceWiresOff() {this->SetOutlineFaceWires(0);}
151 
156  void SetOutlineCursorWires(int);
157  vtkGetMacro(OutlineCursorWires,int);
158  void OutlineCursorWiresOn() {this->SetOutlineCursorWires(1);}
159  void OutlineCursorWiresOff() {this->SetOutlineCursorWires(0);}
160 
164  void HandlesOn();
165  void HandlesOff();
166 
169  virtual void PlaceWidget(double bounds[6]) VTK_OVERRIDE;
170  virtual void BuildRepresentation() VTK_OVERRIDE;
171  virtual int ComputeInteractionState(int X, int Y, int modify=0) VTK_OVERRIDE;
172  virtual void StartWidgetInteraction(double e[2]) VTK_OVERRIDE;
173  virtual void WidgetInteraction(double e[2]) VTK_OVERRIDE;
174  virtual double *GetBounds() VTK_OVERRIDE;
175 
178  virtual void ReleaseGraphicsResources(vtkWindow*) VTK_OVERRIDE;
179  virtual int RenderOpaqueGeometry(vtkViewport*) VTK_OVERRIDE;
180  virtual int RenderTranslucentPolygonalGeometry(vtkViewport*) VTK_OVERRIDE;
181  virtual int HasTranslucentPolygonalGeometry() VTK_OVERRIDE;
182 
183  enum {Outside=0,MoveF0,MoveF1,MoveF2,MoveF3,MoveF4,MoveF5,Translating,Rotating,Scaling};
184 
193  virtual void SetInteractionState(int state);
194 
197  void GetCenter(double center[]);
198 
201  void GetExtents(double bounds[]);
202 
203  virtual void GetActors(vtkPropCollection *actors) VTK_OVERRIDE;
204 
205 
206 protected:
209 
211  double LastEventPosition[4];
212 
214  vtkActor *HexActor;
215  vtkPolyDataMapper *HexMapper;
216  vtkPolyData *HexPolyData;
217  vtkPoints *Points; //used by others as well
218  double N[6][3]; //the normals of the faces
219 
221  vtkActor *HexFace;
222  vtkPolyDataMapper *HexFaceMapper;
223  vtkPolyData *HexFacePolyData;
224 
226  vtkActor **Handle;
227  vtkPolyDataMapper **HandleMapper;
228  vtkSphereSource **HandleGeometry;
229  virtual void PositionHandles();
230  virtual int HighlightHandle(vtkProp *prop); //returns cell id
231  virtual void HighlightFace(int cellId);
232  void HighlightOutline(int highlight);
233  void ComputeNormals();
234  virtual void SizeHandles();
235 
237  vtkActor *HexOutline;
238  vtkPolyDataMapper *OutlineMapper;
239  vtkPolyData *OutlinePolyData;
240 
242  vtkCellPicker *HandlePicker;
243  //vtkCellPicker *HexPicker;
244  vtkActor *CurrentHandle;
246  vtkCellPicker *LastPicker;
247 
249  vtkTransform *Transform;
250 
252  vtkBox *BoundingBox;
253 
256  //vtkProperty *HandleProperty;
257  vtkProperty *HandleProperties[NUMBER_HANDLES];
259  vtkProperty *FaceProperty;
260  vtkProperty *SelectedFaceProperty;
261  vtkProperty *OutlineProperty;
263  virtual void CreateDefaultProperties();
264 
269  void GenerateOutline();
270 
272  virtual void Translate(double *p1, double *p2);
273  virtual void Scale(double *p1, double *p2, int X, int Y);
274  virtual void Rotate(int X, int Y, double *p1, double *p2, double *vpn);
275  void MovePlusXFace(double *p1, double *p2);
276  void MoveMinusXFace(double *p1, double *p2);
277  void MovePlusYFace(double *p1, double *p2);
278  void MoveMinusYFace(double *p1, double *p2);
279  void MovePlusZFace(double *p1, double *p2);
280  void MoveMinusZFace(double *p1, double *p2);
281 
283  vtkPoints *PlanePoints;
284  vtkDoubleArray *PlaneNormals;
285  vtkMatrix4x4 *Matrix;
286 
287  vtkMatrix4x4 *WorldToLocalMatrix;
288 
289  //"dir" is the direction in which the face can be moved i.e. the axis passing
290  //through the center
291  void MoveFace(double *p1, double *p2, double *dir,
292  double *x1, double *x2, double *x3, double *x4,
293  double *x5);
294  //Helper method to obtain the direction in which the face is to be moved.
295  //Handles special cases where some of the scale factors are 0.
296  void GetDirection(const double Nx[3],const double Ny[3],
297  const double Nz[3], double dir[3]);
298 
299 
300 private:
302  void operator=(const vtkAnnotationROIRepresentation&); //Not implemented
303 };
304 
305 #endif
int InsideOut
Control the orientation of the normals.
vtkActor * HexActor
the hexahedron (6 faces)
vtkBox * BoundingBox
Support GetBounds() method.
vtkActor ** Handle
glyphs representing hot spots (e.g., handles)
vtkPoints * PlanePoints
Internal ivars for performance.
vtkCellPicker * HandlePicker
Do the picking.
vtkTransform * Transform
Transform the hexahedral points (used for rotations)
vtkActor * HexFace
A face of the hexahedron.