Slicer  4.10
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
qSlicerSegmentEditorAbstractEffect.h
Go to the documentation of this file.
1 /*==============================================================================
2 
3  Copyright (c) Laboratory for Percutaneous Surgery (PerkLab)
4  Queen's University, Kingston, ON, Canada. All Rights Reserved.
5 
6  See COPYRIGHT.txt
7  or http://www.slicer.org/copyright/copyright.txt for details.
8 
9  Unless required by applicable law or agreed to in writing, software
10  distributed under the License is distributed on an "AS IS" BASIS,
11  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  See the License for the specific language governing permissions and
13  limitations under the License.
14 
15  This file was originally developed by Csaba Pinter, PerkLab, Queen's University
16  and was supported through the Applied Cancer Research Unit program of Cancer Care
17  Ontario with funds provided by the Ontario Ministry of Health and Long-Term Care
18 
19 ==============================================================================*/
20 
21 #ifndef __qSlicerSegmentEditorAbstractEffect_h
22 #define __qSlicerSegmentEditorAbstractEffect_h
23 
24 // Segmentations Editor Effects includes
25 #include "qSlicerSegmentationsEditorEffectsExport.h"
26 
27 // Qt includes
28 #include <QCursor>
29 #include <QIcon>
30 #include <QPoint>
31 #include <QList>
32 #include <QVector3D>
33 
34 class qSlicerSegmentEditorAbstractEffectPrivate;
35 
36 class vtkActor2D;
38 class vtkMRMLScene;
42 class vtkSegment;
43 class vtkRenderer;
44 class vtkRenderWindow;
45 class vtkRenderWindowInteractor;
47 class vtkProp3D;
48 class qMRMLWidget;
49 class qMRMLSliceWidget;
50 class QColor;
51 class QFormLayout;
52 class QFrame;
53 class QLayout;
54 
57 class Q_SLICER_SEGMENTATIONS_EFFECTS_EXPORT qSlicerSegmentEditorAbstractEffect : public QObject
58 {
59 public:
60  Q_OBJECT
61  Q_ENUMS(ModificationMode)
62 
63 
64  Q_PROPERTY(QString name READ name WRITE setName)
67 
68 
69  Q_PROPERTY(bool perSegment READ perSegment WRITE setPerSegment)
73 
74 
75  Q_PROPERTY(bool showEffectCursorInSliceView READ showEffectCursorInSliceView WRITE setShowEffectCursorInSliceView)
77 
78 
79  Q_PROPERTY(bool showEffectCursorInThreeDView READ showEffectCursorInThreeDView WRITE setShowEffectCursorInThreeDView)
81 
82 public:
83  typedef QObject Superclass;
84  qSlicerSegmentEditorAbstractEffect(QObject* parent = NULL);
86 
87 // API: Methods that are to be reimplemented in the effect subclasses
88 public:
89 
91  {
95  ModificationModeRemoveAll
96  };
97 
99  virtual QIcon icon() { return QIcon(); };
100 
102  Q_INVOKABLE virtual const QString helpText()const { return QString(); };
103 
105  virtual qSlicerSegmentEditorAbstractEffect* clone() = 0;
106 
109  Q_INVOKABLE virtual void activate();
110 
113  Q_INVOKABLE virtual void deactivate();
114 
116  Q_INVOKABLE virtual bool active();
117 
118  Q_INVOKABLE virtual void modifySelectedSegmentByLabelmap(vtkOrientedImageData* modifierLabelmap, ModificationMode modificationMode, const int modificationExtent[6]);
119  Q_INVOKABLE virtual void modifySelectedSegmentByLabelmap(vtkOrientedImageData* modifierLabelmap, ModificationMode modificationMode);
120  Q_INVOKABLE virtual void modifySelectedSegmentByLabelmap(vtkOrientedImageData* modifierLabelmap, ModificationMode modificationMode, QList<int> extent);
121 
125  Q_INVOKABLE static void applyImageMask(vtkOrientedImageData* input, vtkOrientedImageData* mask, double fillValue, bool notMask = false);
126 
129  virtual void setupOptionsFrame() { };
130 
132  virtual QCursor createCursor(qMRMLWidget* viewWidget);
133 
139  virtual bool processInteractionEvents(vtkRenderWindowInteractor* callerInteractor, unsigned long eid, qMRMLWidget* viewWidget)
140  { Q_UNUSED(callerInteractor); Q_UNUSED(eid); Q_UNUSED(viewWidget); return false; };
141 
146  virtual void processViewNodeEvents(vtkMRMLAbstractViewNode* callerViewNode, unsigned long eid, qMRMLWidget* viewWidget)
147  { Q_UNUSED(callerViewNode); Q_UNUSED(eid); Q_UNUSED(viewWidget); };
148 
151  virtual void setMRMLDefaults() = 0;
152 
155  virtual void referenceGeometryChanged() { };
158  virtual void masterVolumeNodeChanged() { };
160  virtual void layoutChanged() { };
163  virtual void interactionNodeModified(vtkMRMLInteractionNode* interactionNode);
164 
165 public slots:
168  virtual void updateGUIFromMRML() = 0;
169 
172  virtual void updateMRMLFromGUI() = 0;
173 
174 // Get/set methods
175 public:
177  Q_INVOKABLE vtkMRMLSegmentEditorNode* parameterSetNode();
179  Q_INVOKABLE void setParameterSetNode(vtkMRMLSegmentEditorNode* node);
180 
182  Q_INVOKABLE vtkMRMLScene* scene();
183 
185  Q_INVOKABLE QFrame* optionsFrame();
186 
188  Q_INVOKABLE QFormLayout* optionsLayout();
189 
192  Q_INVOKABLE void addActor2D(qMRMLWidget* viewWidget, vtkActor2D* actor);
193 
195  Q_INVOKABLE void removeActor2D(qMRMLWidget* viewWidget, vtkActor2D* actor);
196 
199  Q_INVOKABLE void addActor3D(qMRMLWidget* viewWidget, vtkProp3D* actor);
200 
202  Q_INVOKABLE void removeActor3D(qMRMLWidget* viewWidget, vtkProp3D* actor);
203 
207  Q_INVOKABLE void addOptionsWidget(QWidget* newOptionsWidget);
208  Q_INVOKABLE void addOptionsWidget(QLayout* newOptionsWidget);
209 
210  Q_INVOKABLE QWidget* addLabeledOptionsWidget(QString label, QWidget* newOptionsWidget);
211  Q_INVOKABLE QWidget* addLabeledOptionsWidget(QString label, QLayout* newOptionsWidget);
212 
214  virtual QString name()const;
217  virtual void setName(QString name);
218 
220  virtual bool perSegment()const;
223  virtual void setPerSegment(bool perSegment);
224 
226  Q_INVOKABLE void cursorOff(qMRMLWidget* viewWidget);
228  Q_INVOKABLE void cursorOn(qMRMLWidget* viewWidget);
229 
232  Q_INVOKABLE void selectEffect(QString effectName);
233 
238  void setCallbackSlots(QObject* receiver, const char* selectEffectSlot, const char* updateVolumeSlot, const char* saveStateForUndoSlot);
239 
241  void setVolumes(vtkOrientedImageData* alignedMasterVolume, vtkOrientedImageData* modifierLabelmap,
242  vtkOrientedImageData* maskLabelmap, vtkOrientedImageData* selectedSegmentLabelmap, vtkOrientedImageData* referenceGeometryImage);
243 
244 // Effect parameter functions
245 public:
247  Q_INVOKABLE QString parameter(QString name);
248 
250  Q_INVOKABLE int integerParameter(QString name);
251 
253  Q_INVOKABLE double doubleParameter(QString name);
254 
258  Q_INVOKABLE void setParameter(QString name, QString value);
261  Q_INVOKABLE void setParameterDefault(QString name, QString value);
268  Q_INVOKABLE void setCommonParameter(QString name, QString value);
271  Q_INVOKABLE void setCommonParameterDefault(QString name, QString value);
272 
276  Q_INVOKABLE void setParameter(QString name, int value);
279  Q_INVOKABLE void setParameterDefault(QString name, int value);
281  Q_INVOKABLE void setCommonParameter(QString name, int value);
284  Q_INVOKABLE void setCommonParameterDefault(QString name, int value);
285 
289  Q_INVOKABLE void setParameter(QString name, double value);
292  Q_INVOKABLE void setParameterDefault(QString name, double value);
294  Q_INVOKABLE void setCommonParameter(QString name, double value);
297  Q_INVOKABLE void setCommonParameterDefault(QString name, double value);
298 
299 // Utility functions
300 public:
302  Q_INVOKABLE bool parameterDefined(QString name);
303 
305  Q_INVOKABLE bool commonParameterDefined(QString name);
306 
307  Q_INVOKABLE vtkOrientedImageData* modifierLabelmap();
308 
311  Q_INVOKABLE vtkOrientedImageData* defaultModifierLabelmap();
312 
313  Q_INVOKABLE vtkOrientedImageData* maskLabelmap();
314 
315  Q_INVOKABLE vtkOrientedImageData* selectedSegmentLabelmap();
316 
317  Q_INVOKABLE vtkOrientedImageData* referenceGeometryImage();
318 
319  void setShowEffectCursorInSliceView(bool show);
320  void setShowEffectCursorInThreeDView(bool show);
321 
322  bool showEffectCursorInSliceView();
323  bool showEffectCursorInThreeDView();
324 
327  Q_INVOKABLE vtkOrientedImageData* masterVolumeImageData();
328 
331  Q_INVOKABLE void saveStateForUndo();
332 
334  Q_INVOKABLE static vtkRenderWindow* renderWindow(qMRMLWidget* viewWidget);
336  Q_INVOKABLE static vtkRenderer* renderer(qMRMLWidget* viewWidget);
338  Q_INVOKABLE static vtkMRMLAbstractViewNode* viewNode(qMRMLWidget* viewWidget);
339 
341  static QPoint rasToXy(double ras[3], qMRMLSliceWidget* sliceWidget);
343  Q_INVOKABLE static QPoint rasToXy(QVector3D ras, qMRMLSliceWidget* sliceWidget);
348  static void xyzToRas(double inputXyz[3], double outputRas[3], qMRMLSliceWidget* sliceWidget);
350  Q_INVOKABLE static QVector3D xyzToRas(QVector3D inputXyz, qMRMLSliceWidget* sliceWidget);
352  static void xyToRas(QPoint xy, double outputRas[3], qMRMLSliceWidget* sliceWidget);
354  static void xyToRas(double xy[2], double outputRas[3], qMRMLSliceWidget* sliceWidget);
356  Q_INVOKABLE static QVector3D xyToRas(QPoint xy, qMRMLSliceWidget* sliceWidget);
358  static void xyzToIjk(double inputXyz[3], int outputIjk[3], qMRMLSliceWidget* sliceWidget, vtkOrientedImageData* image);
360  Q_INVOKABLE static QVector3D xyzToIjk(QVector3D inputXyz, qMRMLSliceWidget* sliceWidget, vtkOrientedImageData* image);
362  static void xyToIjk(QPoint xy, int outputIjk[3], qMRMLSliceWidget* sliceWidget, vtkOrientedImageData* image);
364  static void xyToIjk(double xy[2], int outputIjk[3], qMRMLSliceWidget* sliceWidget, vtkOrientedImageData* image);
366  Q_INVOKABLE static QVector3D xyToIjk(QPoint xy, qMRMLSliceWidget* sliceWidget, vtkOrientedImageData* image);
367 
368  Q_INVOKABLE static void forceRender(qMRMLWidget* viewWidget);
369  Q_INVOKABLE static void scheduleRender(qMRMLWidget* viewWidget);
370 
371  Q_INVOKABLE static double sliceSpacing(qMRMLSliceWidget* sliceWidget);
372 
373  Q_INVOKABLE bool segmentationDisplayableInView(vtkMRMLAbstractViewNode* viewNode);
374 
375 protected:
377  QString m_Name;
378  bool m_Active;
379 
385 
388 
389  double m_FillValue;
390  double m_EraseValue;
391 
392 protected:
393  QScopedPointer<qSlicerSegmentEditorAbstractEffectPrivate> d_ptr;
394 
395 private:
396  Q_DECLARE_PRIVATE(qSlicerSegmentEditorAbstractEffect);
397  Q_DISABLE_COPY(qSlicerSegmentEditorAbstractEffect);
398 };
399 
400 #endif
This class encapsulates a segment that is part of a segmentation.
Definition: vtkSegment.h:45
virtual bool processInteractionEvents(vtkRenderWindowInteractor *callerInteractor, unsigned long eid, qMRMLWidget *viewWidget)
virtual Q_INVOKABLE const QString helpText() const
Get help text for effect to be displayed in the help box.
Abstract class for segment editor effects.
Image data containing orientation information.
Abstract MRML node to represent a view. The class holds the properties common to any view type (3D...
A set of MRML Nodes that supports serialization and undo/redo.
Definition: vtkMRMLScene.h:54
Parameter set node for the segment editor widget.
Base class for any widget that requires a MRML Scene.
Definition: qMRMLWidget.h:35
QScopedPointer< qSlicerSegmentEditorAbstractEffectPrivate > d_ptr
virtual void processViewNodeEvents(vtkMRMLAbstractViewNode *callerViewNode, unsigned long eid, qMRMLWidget *viewWidget)
virtual QIcon icon()
Get icon for effect to be displayed in segment editor.
virtual void layoutChanged()
Simple mechanism to let the effects know that the layout has changed.
MRML node containing segmentationsSegmentation node stores a set of segments (also known as contours ...