Computer Assited Medical Intervention Tool Kit  version 5.0
RendererWidget.h
Go to the documentation of this file.
1/*****************************************************************************
2 * $CAMITK_LICENCE_BEGIN$
3 *
4 * CamiTK - Computer Assisted Medical Intervention ToolKit
5 * (c) 2001-2021 Univ. Grenoble Alpes, CNRS, Grenoble INP, TIMC, 38000 Grenoble, France
6 *
7 * Visit http://camitk.imag.fr for more information
8 *
9 * This file is part of CamiTK.
10 *
11 * CamiTK is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
14 *
15 * CamiTK is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public License
21 * version 3 along with CamiTK. If not, see <http://www.gnu.org/licenses/>.
22 *
23 * $CAMITK_LICENCE_END$
24 ****************************************************************************/
25
26#ifndef RENDERERWIDGET_H
27#define RENDERERWIDGET_H
28
29#ifdef CAMITK_ERROR
30#error "Header Error: headers reordering required. Please include Log.h after including RendererWidget.h and InteractiveViewer.h or any OpenGL window based class."
31#endif
32
33// -- Core stuff
34#include "CamiTKAPI.h"
36
37// -- VTK stuff
38#include <vtkVersion.h>
39// disable warning generated by clang about the surrounded headers
40#include <CamiTKDisableWarnings>
41#include <QVTKInteractor.h>
42#include <CamiTKReEnableWarnings>
43
44#if VTK_MAJOR_VERSION == 6
45#include <QVTKWidget2.h>
46// additional needed headers for QVTKWidget2
47#include <vtkGenericOpenGLRenderWindow.h>
48
49#elif VTK_MAJOR_VERSION == 7
50#include <QVTKWidget.h>
51#include <vtkSmartPointer.h>
52
53
54#elif VTK_MAJOR_VERSION == 8
55#include <QVTKOpenGLWidget.h>
56#include <vtkSmartPointer.h>
57
58#else
59#error "Invalid VTK version: not (yet) supported."
60
61#endif
62
63// -- VTK stuff classes
64class vtkInteractorStyle;
65class vtkRenderer;
66class vtkPicker;
67class vtkProp;
68class vtkActor;
69class vtkActor2D;
70class vtkScalarBarActor;
71class vtkEventQtSlotConnect;
72class vtkCallbackCommand;
73class vtkCamera;
74class vtkAxesActor;
75class vtkAnnotatedCubeActor;
76class vtkScalarBarWidget;
77class vtkTextMapper;
78class vtkAbstractPropPicker;
79class vtkLogoWidget;
80
81namespace camitk {
82
83class vtkInteractorStylePick;
84
103#if VTK_MAJOR_VERSION == 6
104class CAMITK_API RendererWidget : public QVTKWidget2 {
105
106#elif VTK_MAJOR_VERSION == 7
107class CAMITK_API RendererWidget : public QVTKWidget {
108
109#elif VTK_MAJOR_VERSION == 8
110class CAMITK_API RendererWidget : public QVTKOpenGLWidget {
111
112#else
113#error "Invalid VTK version: not (yet) supported."
114#endif
115 Q_OBJECT
116
117public :
118
136 };
137 Q_ENUM(CameraOrientation) // so that it can be used in property editor
138
139
140 enum ControlMode {
141 JOYSTICK,
142 TRACKBALL,
143 TRACKBALL_2D,
144 NONE
145 };
146 Q_ENUM(ControlMode)
147
148
154 };
155
168 RendererWidget(QWidget* parent = nullptr, ControlMode mode = RendererWidget::TRACKBALL);
169
171 ~RendererWidget() override;
172
175
176 void setAreaPicking(bool areaPicking);
177
179 ControlMode getControlMode() const;
180
182 void setControlMode(ControlMode mode);
183
187 void setPicker(vtkSmartPointer<vtkAbstractPropPicker> woodyWood);
188
190 void pick();
191
193 void pickActor(int, int);
194
196 void keyPressEvent(QKeyEvent* e) override;
197
201 void screenshot(QString filename);
202
204 void refresh();
206
211
213 bool getBackfaceCulling() const;
214
217
220
223
226
228 void setPointSize(double size);
229
231 double getPointSize() const;
232
234 void rotateCamera(double angle, int axe);
235
241
243 void resetCamera(double* bounds);
244
246 void getCameraSettings(double* position, double* focalPoint, double* viewUp);
247
249 void setActiveCamera(vtkCamera* cam);
250
252 vtkCamera* getActiveCamera();
253
255 void getMouse3DCoordinates(double& x, double& y, double& z);
256
258 void setBackgroundColor(double, double, double);
259
261 void getBackgroundColor(double&, double&, double&);
262
265
268
271
273 void toggleLogo(bool);
274
276 void toggleAxes(bool);
277
280
283
285 void setOrientationDecorationsLetters(QString letters[4]);
286
287
289 void setColorScale(bool);
290
292 bool getColorScale() const;
293
298 void setColorScaleMinMax(double m, double M);
299
303 void setColorScaleTitle(QString t);
304
306 void computeVisiblePropBounds(double* bounds);
307
311 void resetClippingPlanes(double* bounds = nullptr);
313
316
325 void addProp(vtkSmartPointer<vtkProp> p, bool refresh = false);
326
328 bool containsProp(vtkSmartPointer<vtkProp>);
329
334 void removeProp(vtkSmartPointer<vtkProp> p, bool refresh = false);
335
337 void actorTransform(vtkSmartPointer<vtkActor>, double*, int, double**, double*, double*);
339
340protected slots:
345
348
350
351signals :
352
356 void actorPicked(vtkSmartPointer<vtkPicker>);
357
361
362protected:
363
365 void mousePressEvent(QMouseEvent* event) override;
366
368 void mouseReleaseEvent(QMouseEvent* event) override;
369
371 void mouseMoveEvent(QMouseEvent* event) override;
372
373protected :
374
378 vtkSmartPointer<QVTKInteractor> interactor;
379
381 vtkSmartPointer<vtkInteractorStyle> controlInteractorStyle;
382
384 //InteractionMode interactionMode;
385
387 ControlMode controlMode;
388
390
395
397 vtkSmartPointer<vtkRenderer> renderer;
398
400 bool backfaceCulling;
401
404
407
409 double pointSize;
410
414
418 //vtkSmartPointer<vtkEventQtSlotConnect> connector;
419
421 static void divertionCallback(vtkObject*, unsigned long, void*, void*) {};
422
424 vtkSmartPointer<vtkCallbackCommand> pickingButtonDiverter;
425
427 bool pickingDiverter;
428
430 vtkSmartPointer<vtkInteractorStylePick> pickInteractorStyle;
431
433
437 bool displayGradient;
438
440 bool displayLogo;
441
443 vtkSmartPointer<vtkLogoWidget> logoWidget;
444
447
449 vtkSmartPointer<vtkScalarBarActor> colorScale;
450
452 vtkSmartPointer<vtkScalarBarWidget> colorBarWidget;
453
455 vtkSmartPointer<vtkAxesActor> axes;
456
458 vtkSmartPointer<vtkAnnotatedCubeActor> annotatedCube;
459
461 vtkSmartPointer<vtkActor2D> orientationDecorationActors[4];
462
464 vtkSmartPointer<vtkTextMapper> orientationDecorationsTextMapper[4];
465
467
468};
469
470}
471
472#endif //RENDERERWIDGET_H
473
#define CAMITK_API
Definition: CamiTKAPI.h:49
CameraOrientation
RendererWidget implements all support methods to use camiTK with Qt interface.
Definition: RendererWidget.h:130
Definition: Action.cpp:35
void toogle3DRedBlue()
toggle stereo 3D red/blue rendering (you will need red/blue glasses)
void setBackfaceCulling(bool)
void pick()
Perform picking using the current mouse position.
void setPicker(vtkSmartPointer< vtkAbstractPropPicker > woodyWood)
set the picker to handle the action
void setColorScale(bool)
display the color scale in the viewport, use setColorScaleMinMax to change the displayed values
void resetCameraSettings()
void setGradientBackground(bool)
set the gradient background
interactor
Definition: RendererWidget.cpp:273
void setColorScaleMinMax(double m, double M)
set the min and max values.
void getBackgroundColor(double &, double &, double &)
get the background color (rgb)
setControlMode(mode)
void setAreaPicking(bool areaPicking)
RendererWidget::CameraOrientation getCameraOrientation() const
Return the current axes mode.
logoWidget
logo widget
Definition: RendererWidget.cpp:453
rendering3DRedBlue
is rendering in 3D stereo red/blue
Definition: RendererWidget.cpp:252
bool getBackfaceCulling() const
Get the current state of backface culling.
vtkSmartPointer< vtkActor2D > orientationDecorationActors[4]
annotated cube text actors
Definition: RendererWidget.h:461
void actorPicked(vtkSmartPointer< vtkPicker >)
ControlMode getControlMode() const
get the current control mode
pickInteractorStyle
picking interactor
Definition: RendererWidget.cpp:276
void setPointSize(double size)
set the default point size
vtkSmartPointer< vtkScalarBarActor > colorScale
the color scale displaying the lookup table + values
Definition: RendererWidget.h:449
pickingButtonDiverter
the callback to remove left button interaction while in picking mode
Definition: RendererWidget.cpp:289
void removeProp(vtkSmartPointer< vtkProp > p, bool refresh=false)
remove the given vtkProp (e.g.
void computeVisiblePropBounds(double *bounds)
get the bounding box of all visible actors [xmin,xmax, ymin,ymax, zmin,zmax]
renderer
The current renderer.
Definition: RendererWidget.cpp:260
void mouseReleaseEvent(QMouseEvent *event) override
mouse release handler overriden to manage different version of VTK
void setColorScaleTitle(QString t)
set the color scale title.
displayGradient
Definition: RendererWidget.cpp:492
setBackgroundColor(0.0, 0.0, 0.0)
void toggleLogo(bool)
toggle logo
void toggleOrientationDecorations(bool)
display orientation decorations
cameraOrientation
state of the initial camera orientation
Definition: RendererWidget.cpp:283
annotatedCube
annotated cube actor
Definition: RendererWidget.cpp:339
void mouseMoveEvent(QMouseEvent *event) override
mouse move handler overriden to manage different version of VTK
void toggleAxes(bool)
display the axes
void resetClippingPlanes(double *bounds=nullptr)
reset the camera clipping plane to a given bounding box If no bounds are given, reset to show all vis...
void setLightFollowCamera(bool)
Set/unset the light to follow the camera.
void rightButtonPressed()
send when the mouse right button is clicked
void keyPressEvent(QKeyEvent *e) override
key events (do nothing but pass on e to the parent widget), please do not add any shortcut management...
bool getLightFollowCamera() const
Get the current state of the property.
RendererWidget(QWidget *parent=nullptr, ControlMode mode=RendererWidget::TRACKBALL)
constructors.
bool getColorScale() const
get the color display state
void mousePressEvent(QMouseEvent *event) override
mouse press handler overriden to manage different version of VTK
displayColorScale
is the color scale currently displayed
Definition: RendererWidget.cpp:253
~RendererWidget() override
destructor
displayLogo
is the logo displayed
Definition: RendererWidget.cpp:251
double getPointSize() const
get the current value of point size
controlMode
current control mode
Definition: RendererWidget.cpp:282
void pickActor(int, int)
Perform picking from screen coordinates.
pointSize
default point size
Definition: RendererWidget.cpp:254
void rotateCamera(double angle, int axe)
Rotate the camera around param "axe" of "angle" degrees.
void refresh()
refresh the display
void startPicking()
axes
axes actor
Definition: RendererWidget.cpp:297
colorBarWidget
the scalar bar widget
Definition: RendererWidget.cpp:471
bool lightFollowCamera
Is the light following the camera.
Definition: RendererWidget.h:406
void updateAxes()
update the axes sizes
void setOrientationDecorationsLetters(QString letters[4])
give the lettres for orientation decoration: Left, Right, Top, Down
void resetCamera()
reset the camera to the default position, default FOV.
static void divertionCallback(vtkObject *, unsigned long, void *, void *)
a diverter observer callback (to be used to divert undesired events)
Definition: RendererWidget.h:421
addProp(axes)
void getMouse3DCoordinates(double &x, double &y, double &z)
get the mouse coordinates in 3D
vtkSmartPointer< vtkTextMapper > orientationDecorationsTextMapper[4]
annotated cube text
Definition: RendererWidget.h:464
setCameraOrientation(cameraOrientation)
controlInteractorStyle
for the interaction with the scene
Definition: RendererWidget.cpp:284
void getCameraSettings(double *position, double *focalPoint, double *viewUp)
get camera settings information (position, what is looked at and how) in world coordinates
void endPicking()
end picking
bool containsProp(vtkSmartPointer< vtkProp >)
is the given vtkProp (e.g. vtkActor or vtkActor2D) in this renderer
void actorTransform(vtkSmartPointer< vtkActor >, double *, int, double **, double *, double *)
perform the transformation of the actor
MouseButtonState
state of the pressed button (for 3 buttons mouse)
Definition: RendererWidget.h:149
@ LEFT_BUTTON
the mouse left button is currently pressed
Definition: RendererWidget.h:151
@ RIGHT_BUTTON
the mouse right button is currently pressed
Definition: RendererWidget.h:153
@ NO_BUTTON
no buttons are currently pressed
Definition: RendererWidget.h:150
@ MIDDLE_BUTTON
the mouse middle button is currently pressed (or 3rd button emulation)
Definition: RendererWidget.h:152
void screenshot(QString filename)
save the screenshot in a file
vtkCamera * getActiveCamera()
get the active camera
bool getGradientBackground()
get the current state of the gradient background
pickingDiverter
is the picking diverter used
Definition: RendererWidget.cpp:292
backfaceCulling
Is back face culling on?
Definition: RendererWidget.cpp:250
void setActiveCamera(vtkCamera *cam)
set active camera
@ RIGHT_UP
World axes are seen so that x points to the right, y points upward.
Definition: RendererWidget.h:133
@ RIGHT_DOWN
World axes are seen so that x points to the right, y points downward.
Definition: RendererWidget.h:131
@ BACK_DOWN
< World axes are seen so that x points to the left, y points backward. For Medical Images Coronal Vie...
Definition: RendererWidget.h:135
@ LEFT_BACK
Definition: RendererWidget.h:134
@ LEFT_UP
World axes are seen so that x points to the left, y points upward.
Definition: RendererWidget.h:132