NifTK  16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
AffineTransformInteractor3D.h
Go to the documentation of this file.
1 /*=============================================================================
2 
3  NifTK: A software platform for medical image computing.
4 
5  Copyright (c) University College London (UCL). All rights reserved.
6 
7  This software is distributed WITHOUT ANY WARRANTY; without even
8  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9  PURPOSE.
10 
11  See LICENSE.txt in the top level directory for details.
12 
13 =============================================================================*/
14 
15 #ifndef AffineTransformInteractor3D_h
16 #define AffineTransformInteractor3D_h
17 
18 #include <mitkInteractor.h>
19 #include <mitkInteractionConst.h>
20 #include <mitkCommon.h>
21 #include <mitkSurface.h>
22 #include <mitkBaseRenderer.h>
23 #include <mitkBoundingObject.h>
24 
25 #include <vtkPolyData.h>
26 #include <vtkType.h>
27 #include <vtkRenderer.h>
28 #include <vtkRenderWindow.h>
29 #include <vtkRenderWindowInteractor.h>
30 #include <vtkInteractorStyle.h>
31 #include <vtkLegendScaleActor.h>
32 #include <vtkAxesActor.h>
33 #include <vtkActor.h>
34 #include <vtkCaptionActor2D.h>
35 #include <vtkObject.h>
36 #include <vtkObjectFactory.h>
37 #include <vtkSmartPointer.h>
38 #include <vtkTextProperty.h>
39 
40 #include <QApplication>
41 
49 class AffineTransformInteractor3D : public QObject, public mitk::Interactor
50 {
51  Q_OBJECT
52 
53 signals:
54  void transformReady();
55 
56 public:
58 
60  mitkNewMacro3Param(Self, const char *, mitk::DataNode *, int)
61  mitkNewMacro2Param(Self, const char *, mitk::DataNode *)
62 
63  void SetInteractionMode( unsigned int interactionMode );
66  unsigned int GetInteractionMode() const;
67 
68  void SetAxesFixed(bool on, int which = 0);
69 
71  void SetPrecision(mitk::ScalarType precision );
72 
79  virtual float CanHandleEvent(mitk::StateEvent const *stateEvent) const override;
80  //vtkRenderer * GetCurrentVTKRenderer() { return m_currentVtkRenderer; }
81 
82  inline void SetBoundingObjectNode(mitk::DataNode * bObj) { m_boundingObjectNode = bObj; }
83 
84 protected:
90  AffineTransformInteractor3D(const char *type, mitk::DataNode *dataNode, int n = -1);
92 
93  bool ColorizeSurface( vtkPolyData *polyData, const mitk::Point3D &pickedPoint, double scalar = 0.0 );
94 
95  //************************************************************************************************************************************/
96  bool GetCurrentRenderer(const mitk::StateEvent * event, vtkRenderWindowInteractor * renderWindowInteractor, mitk::BaseRenderer * renderer);
97  bool UpdateCurrentRendererPointers(const mitk::StateEvent * stateEvent);
98 
99  bool OnAcCheckObject(mitk::Action * action, const mitk::StateEvent * stateEvent);
100  bool OnAcSelectPickedObject(mitk::Action * action, const mitk::StateEvent * stateEvent);
101  bool OnAcDeselectPickedObject(mitk::Action * action, const mitk::StateEvent * stateEvent);
102  bool OnAcInitMove(mitk::Action * action, const mitk::StateEvent * stateEvent);
103  bool OnAcMove(mitk::Action * action, const mitk::StateEvent * stateEvent);
104  bool OnAcAccept(mitk::Action * action, const mitk::StateEvent * stateEvent);
105 
106 private:
107 
109  mitk::ScalarType m_Precision;
110  bool m_InteractionMode;
111  bool m_AxesFixed;
112 
113  mitk::Point3D m_InitialPickedWorldPoint;
114  mitk::Point2D m_InitialPickedDisplayPoint;
115  double m_InitialPickedPointWorld[4];
116 
117  mitk::Point3D m_CurrentlyPickedWorldPoint;
118  mitk::Point2D m_CurrentlyPickedDisplayPoint;
119  double m_CurrentlyPickedPointWorld[4];
120 
121  mitk::BaseGeometry::Pointer m_Geometry;
122 
123  mitk::BaseGeometry::Pointer m_OriginalGeometry;
124 
125  mitk::Vector3D m_ObjectNormal;
126 
127  mitk::BaseRenderer * m_currentRenderer;
128  vtkRenderWindow * m_currentRenderWindow;
129  vtkRenderWindowInteractor * m_currentRenderWindowInteractor;
130  vtkRenderer * m_currentVtkRenderer;
131  vtkCamera * m_currentCamera;
132 
133  vtkLegendScaleActor * m_legendActor;
134  vtkAxesActor * m_axesActor;
135  mitk::DataNode * m_boundingObjectNode;
136 };
137 
138 class CustomVTKAxesActor : public vtkAxesActor
139 {
140 public:
141  inline void SetAxisLabelWidth(double w) { this->XAxisLabel->SetWidth(w); this->YAxisLabel->SetWidth(w); this->ZAxisLabel->SetWidth(w); }
142  inline double GetAxisLabelWidth() { return m_axesLabelWidth;}
143  inline void SetAxisLabelHeight(double h) { this->XAxisLabel->SetHeight(h); this->YAxisLabel->SetHeight(h); this->ZAxisLabel->SetHeight(h);}
144  inline double GetAxisLabelHeight() { return m_axesLabelHeight;}
145 
147 // virtual ~CustomVTKAxesActor();
148 
149 private:
150  double m_axesLabelWidth;
151  double m_axesLabelHeight;
152 };
153 
154 #endif /* MITKAFFINEINTERACTOR3D_H_HEADER_INCLUDED */
bool OnAcDeselectPickedObject(mitk::Action *action, const mitk::StateEvent *stateEvent)
Definition: AffineTransformInteractor3D.cxx:330
virtual ~AffineTransformInteractor3D()
Definition: AffineTransformInteractor3D.cxx:74
bool OnAcAccept(mitk::Action *action, const mitk::StateEvent *stateEvent)
Definition: AffineTransformInteractor3D.cxx:513
void SetPrecision(mitk::ScalarType precision)
Sets the amount of precision.
Definition: AffineTransformInteractor3D.cxx:100
bool UpdateCurrentRendererPointers(const mitk::StateEvent *stateEvent)
Definition: AffineTransformInteractor3D.cxx:225
bool OnAcCheckObject(mitk::Action *action, const mitk::StateEvent *stateEvent)
Definition: AffineTransformInteractor3D.cxx:259
GLuint GLuint GLsizei GLenum type
Definition: glew.h:1237
void SetAxisLabelWidth(double w)
Definition: AffineTransformInteractor3D.h:141
virtual float CanHandleEvent(mitk::StateEvent const *stateEvent) const override
calculates how good the data, this statemachine handles, is hit by the event.
Definition: AffineTransformInteractor3D.cxx:106
Definition: ReceptorMemberCommandTest.cxx:25
Affine interaction with objects in 3D windows.
Definition: AffineTransformInteractor3D.h:49
void SetInteractionModeToRotation()
Definition: AffineTransformInteractor3D.cxx:88
mitkClassMacro(AffineTransformInteractor3D, mitk::Interactor) mitkNewMacro3Param(Self
bool GetCurrentRenderer(const mitk::StateEvent *event, vtkRenderWindowInteractor *renderWindowInteractor, mitk::BaseRenderer *renderer)
GLubyte GLubyte GLubyte GLubyte w
Definition: glew.h:1874
GLenum GLint GLint * precision
Definition: glew.h:3137
bool ColorizeSurface(vtkPolyData *polyData, const mitk::Point3D &pickedPoint, double scalar=0.0)
Definition: AffineTransformInteractor3D.cxx:153
Definition: AffineTransformInteractor3D.h:57
Definition: AffineTransformInteractor3D.h:138
double GetAxisLabelWidth()
Definition: AffineTransformInteractor3D.h:142
GLfloat GLfloat GLfloat GLfloat h
Definition: glew.h:6796
double GetAxisLabelHeight()
Definition: AffineTransformInteractor3D.h:144
void SetBoundingObjectNode(mitk::DataNode *bObj)
Definition: AffineTransformInteractor3D.h:82
void SetAxisLabelHeight(double h)
Definition: AffineTransformInteractor3D.h:143
bool OnAcInitMove(mitk::Action *action, const mitk::StateEvent *stateEvent)
Definition: AffineTransformInteractor3D.cxx:339
Definition: AffineTransformInteractor3D.h:57
GLclampd n
Definition: glew.h:6789
cl_event event
Definition: glew.h:3231
const char mitk::DataNode int mitkNewMacro2Param(Self, const char *, mitk::DataNode *) void SetInteractionMode(unsigned int interactionMode)
bool OnAcMove(mitk::Action *action, const mitk::StateEvent *stateEvent)
Definition: AffineTransformInteractor3D.cxx:379
unsigned int GetInteractionMode() const
Definition: AffineTransformInteractor3D.cxx:94
void SetAxesFixed(bool on, int which=0)
Definition: AffineTransformInteractor3D.cxx:531
AffineTransformInteractor3D(const char *type, mitk::DataNode *dataNode, int n=-1)
Constructor with Param n for limited Set of Points.
Definition: AffineTransformInteractor3D.cxx:44
void SetInteractionModeToTranslation()
Definition: AffineTransformInteractor3D.cxx:83
bool OnAcSelectPickedObject(mitk::Action *action, const mitk::StateEvent *stateEvent)
Definition: AffineTransformInteractor3D.cxx:321