Slicer 5.9
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
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// VTK includes
35#include "vtkWeakPointer.h"
36
37class qSlicerSegmentEditorAbstractEffectPrivate;
38
39class vtkActor2D;
41class vtkMRMLNode;
42class vtkMRMLScene;
47class vtkSegment;
48class vtkRenderer;
49class vtkRenderWindow;
50class vtkRenderWindowInteractor;
52class vtkProp3D;
53class qMRMLWidget;
55class QColor;
56class QFormLayout;
57class QFrame;
58class QLayout;
59
61class Q_SLICER_SEGMENTATIONS_EFFECTS_EXPORT qSlicerSegmentEditorAbstractEffect : public QObject
62{
63public:
64 Q_OBJECT
65 Q_ENUMS(ConfirmationResult)
66 Q_ENUMS(ModificationMode)
67
68
71 Q_PROPERTY(QString name READ name WRITE setName)
72
75 Q_PROPERTY(QString title READ title WRITE setTitle)
76
81 Q_PROPERTY(bool perSegment READ perSegment WRITE setPerSegment)
82
88
92
96
97public:
98 typedef QObject Superclass;
99 qSlicerSegmentEditorAbstractEffect(QObject* parent = nullptr);
101
102// API: Methods that are to be reimplemented in the effect subclasses
103public:
104
112
119
121 virtual QIcon icon() { return QIcon(); };
122
124 Q_INVOKABLE virtual const QString helpText()const { return QString(); };
125
128
131 Q_INVOKABLE virtual void activate();
132
135 Q_INVOKABLE virtual void deactivate();
136
138 Q_INVOKABLE virtual bool active();
139
141 ModificationMode modificationMode, const int modificationExtent[6],bool bypassMasking = false);
143 ModificationMode modificationMode, bool bypassMasking = false);
145 ModificationMode modificationMode, QList<int> extent, bool bypassMasking = false);
146 Q_INVOKABLE virtual void modifySegmentByLabelmap(vtkMRMLSegmentationNode* segmentationNode, const char* segmentID,
147 vtkOrientedImageData* modifierLabelmap, ModificationMode modificationMode, bool bypassMasking = false);
148 Q_INVOKABLE virtual void modifySegmentByLabelmap(vtkMRMLSegmentationNode* segmentationNode, const char* segmentID,
149 vtkOrientedImageData* modifierLabelmap, ModificationMode modificationMode, const int modificationExtent[6], bool bypassMasking = false);
150
154 Q_INVOKABLE static void applyImageMask(vtkOrientedImageData* input, vtkOrientedImageData* mask, double fillValue, bool notMask = false);
155
158 virtual void setupOptionsFrame() { };
159
161 virtual QCursor createCursor(qMRMLWidget* viewWidget);
162
168 virtual bool processInteractionEvents(vtkRenderWindowInteractor* callerInteractor, unsigned long eid, qMRMLWidget* viewWidget)
169 { Q_UNUSED(callerInteractor); Q_UNUSED(eid); Q_UNUSED(viewWidget); return false; };
170
175 virtual void processViewNodeEvents(vtkMRMLAbstractViewNode* callerViewNode, unsigned long eid, qMRMLWidget* viewWidget)
176 { Q_UNUSED(callerViewNode); Q_UNUSED(eid); Q_UNUSED(viewWidget); };
177
180 virtual void setMRMLDefaults() = 0;
181
184 virtual void referenceGeometryChanged() { };
187 virtual void sourceVolumeNodeChanged() { };
189 virtual void masterVolumeNodeChanged() { };
191 virtual void layoutChanged() { };
194 virtual void interactionNodeModified(vtkMRMLInteractionNode* interactionNode);
202 Q_INVOKABLE virtual void cleanup() { };
203
204public slots:
207 virtual void updateGUIFromMRML() = 0;
208
211 virtual void updateMRMLFromGUI() = 0;
212
213// Get/set methods
214public:
219
221 Q_INVOKABLE vtkMRMLScene* scene();
222
224 Q_INVOKABLE QFrame* optionsFrame();
225
227 Q_INVOKABLE QFormLayout* optionsLayout();
228
231 Q_INVOKABLE void addActor2D(qMRMLWidget* viewWidget, vtkActor2D* actor);
232
234 Q_INVOKABLE void removeActor2D(qMRMLWidget* viewWidget, vtkActor2D* actor);
235
238 Q_INVOKABLE void addActor3D(qMRMLWidget* viewWidget, vtkProp3D* actor);
239
241 Q_INVOKABLE void removeActor3D(qMRMLWidget* viewWidget, vtkProp3D* actor);
242
246 Q_INVOKABLE void addOptionsWidget(QWidget* newOptionsWidget);
247 Q_INVOKABLE void addOptionsWidget(QLayout* newOptionsWidget);
248
249 Q_INVOKABLE QWidget* addLabeledOptionsWidget(QString label, QWidget* newOptionsWidget);
250 Q_INVOKABLE QWidget* addLabeledOptionsWidget(QString label, QLayout* newOptionsWidget);
251
255 virtual QString name()const;
258 virtual void setName(QString name);
259
263 virtual QString title()const;
265 virtual void setTitle(QString title);
266
268 virtual bool perSegment()const;
271 virtual void setPerSegment(bool perSegment);
272
274 virtual bool requireSegments()const;
277
278
280 Q_INVOKABLE void cursorOff(qMRMLWidget* viewWidget);
282 Q_INVOKABLE void cursorOn(qMRMLWidget* viewWidget);
283
286 Q_INVOKABLE void selectEffect(QString effectName);
287
292 void setCallbackSlots(QObject* receiver, const char* selectEffectSlot, const char* updateVolumeSlot, const char* saveStateForUndoSlot);
293
297
298// Effect parameter functions
299public:
301 Q_INVOKABLE QString parameter(QString name);
302
304 Q_INVOKABLE int integerParameter(QString name);
305
307 Q_INVOKABLE double doubleParameter(QString name);
308
310 Q_INVOKABLE vtkMRMLNode* nodeReference(QString name);
311
315 Q_INVOKABLE void setParameter(QString name, QString value);
318 Q_INVOKABLE void setParameterDefault(QString name, QString value);
325 Q_INVOKABLE void setCommonParameter(QString name, QString value);
328 Q_INVOKABLE void setCommonParameterDefault(QString name, QString value);
329
333 Q_INVOKABLE void setParameter(QString name, int value);
336 Q_INVOKABLE void setParameterDefault(QString name, int value);
338 Q_INVOKABLE void setCommonParameter(QString name, int value);
341 Q_INVOKABLE void setCommonParameterDefault(QString name, int value);
342
346 Q_INVOKABLE void setParameter(QString name, double value);
349 Q_INVOKABLE void setParameterDefault(QString name, double value);
351 Q_INVOKABLE void setCommonParameter(QString name, double value);
354 Q_INVOKABLE void setCommonParameterDefault(QString name, double value);
355
359 Q_INVOKABLE void setNodeReference(QString name, vtkMRMLNode* node);
361 Q_INVOKABLE void setCommonNodeReference(QString name, vtkMRMLNode* node);
362
363// Utility functions
364public:
366 Q_INVOKABLE bool parameterDefined(QString name);
367
369 Q_INVOKABLE bool commonParameterDefined(QString name);
370
377
379
383
385
387
389
392
395
399
402
405 Q_INVOKABLE void saveStateForUndo();
406
408 Q_INVOKABLE static vtkRenderWindow* renderWindow(qMRMLWidget* viewWidget);
410 Q_INVOKABLE static vtkRenderer* renderer(qMRMLWidget* viewWidget);
412 Q_INVOKABLE static vtkMRMLAbstractViewNode* viewNode(qMRMLWidget* viewWidget);
413
415 static QPoint rasToXy(double ras[3], qMRMLSliceWidget* sliceWidget);
417 Q_INVOKABLE static QPoint rasToXy(QVector3D ras, qMRMLSliceWidget* sliceWidget);
422 static void xyzToRas(double inputXyz[3], double outputRas[3], qMRMLSliceWidget* sliceWidget);
424 Q_INVOKABLE static QVector3D xyzToRas(QVector3D inputXyz, qMRMLSliceWidget* sliceWidget);
426 static void xyToRas(QPoint xy, double outputRas[3], qMRMLSliceWidget* sliceWidget);
428 static void xyToRas(double xy[2], double outputRas[3], qMRMLSliceWidget* sliceWidget);
430 Q_INVOKABLE static QVector3D xyToRas(QPoint xy, qMRMLSliceWidget* sliceWidget);
432 static void xyzToIjk(double inputXyz[3], int outputIjk[3], qMRMLSliceWidget* sliceWidget, vtkOrientedImageData* image, vtkMRMLTransformNode* parentTransform = nullptr);
434 Q_INVOKABLE static QVector3D xyzToIjk(QVector3D inputXyz, qMRMLSliceWidget* sliceWidget, vtkOrientedImageData* image, vtkMRMLTransformNode* parentTransform = nullptr);
436 static void xyToIjk(QPoint xy, int outputIjk[3], qMRMLSliceWidget* sliceWidget, vtkOrientedImageData* image, vtkMRMLTransformNode* parentTransform = nullptr);
438 static void xyToIjk(double xy[2], int outputIjk[3], qMRMLSliceWidget* sliceWidget, vtkOrientedImageData* image, vtkMRMLTransformNode* parentTransform = nullptr);
440 Q_INVOKABLE static QVector3D xyToIjk(QPoint xy, qMRMLSliceWidget* sliceWidget, vtkOrientedImageData* image, vtkMRMLTransformNode* parentTransform = nullptr);
441
442 Q_INVOKABLE static void forceRender(qMRMLWidget* viewWidget);
443 Q_INVOKABLE static void scheduleRender(qMRMLWidget* viewWidget);
444
445 Q_INVOKABLE static double sliceSpacing(qMRMLSliceWidget* sliceWidget);
446
448
449protected:
450 QString m_Name;
451 bool m_Active{false};
452 QString m_Title;
453
458 bool m_PerSegment{true};
459
461
464
465 double m_FillValue{1.0};
466 double m_EraseValue{0.0};
467
470 vtkWeakPointer<vtkSegment> m_AlreadyConfirmedSegmentVisible;
471
472protected:
473 QScopedPointer<qSlicerSegmentEditorAbstractEffectPrivate> d_ptr;
474
475private:
476 Q_DECLARE_PRIVATE(qSlicerSegmentEditorAbstractEffect);
478};
479
480#endif
Base class for any widget that requires a MRML Scene.
Definition qMRMLWidget.h:36
static void xyToRas(QPoint xy, double outputRas[3], qMRMLSliceWidget *sliceWidget)
Convert XY in-slice position to RAS position.
static Q_INVOKABLE void forceRender(qMRMLWidget *viewWidget)
Q_INVOKABLE vtkOrientedImageData * defaultModifierLabelmap()
virtual Q_INVOKABLE void modifySelectedSegmentByLabelmap(vtkOrientedImageData *modifierLabelmap, ModificationMode modificationMode, bool bypassMasking=false)
Q_INVOKABLE void setParameterDefault(QString name, double value)
virtual Q_INVOKABLE void modifySelectedSegmentByLabelmap(vtkOrientedImageData *modifierLabelmap, ModificationMode modificationMode, QList< int > extent, bool bypassMasking=false)
virtual Q_INVOKABLE void deactivate()
void setVolumes(vtkOrientedImageData *alignedSourceVolume, vtkOrientedImageData *modifierLabelmap, vtkOrientedImageData *maskLabelmap, vtkOrientedImageData *selectedSegmentLabelmap, vtkOrientedImageData *referenceGeometryImage)
Called by the editor widget.
Q_INVOKABLE void setCommonParameterDefault(QString name, double value)
Q_INVOKABLE void setCommonNodeReference(QString name, vtkMRMLNode *node)
Convenience function to set node reference common parameter.
static Q_INVOKABLE double sliceSpacing(qMRMLSliceWidget *sliceWidget)
virtual qSlicerSegmentEditorAbstractEffect * clone()=0
Clone editor effect. Override to return a new instance of the effect sub-class.
Q_INVOKABLE bool commonParameterDefined(QString name)
Returns true if the common parameter is already defined.
virtual void setRequireSegments(bool requireSegments)
If this property is set to true then this effect is enabled only when the segmentation has segment(s)...
Q_INVOKABLE void setParameter(QString name, QString value)
virtual Q_INVOKABLE void modifySelectedSegmentByLabelmap(vtkOrientedImageData *modifierLabelmap, ModificationMode modificationMode, const int modificationExtent[6], bool bypassMasking=false)
Q_INVOKABLE void removeActor3D(qMRMLWidget *viewWidget, vtkProp3D *actor)
Remove actor from the renderer of the widget.
void setShowEffectCursorInThreeDView(bool show)
Q_INVOKABLE void removeActor2D(qMRMLWidget *viewWidget, vtkActor2D *actor)
Remove actor from the renderer of the widget.
Q_INVOKABLE void setCommonParameter(QString name, int value)
Convenience function to set integer common parameter.
Q_INVOKABLE void setParameterDefault(QString name, QString value)
Q_INVOKABLE void saveStateForUndo()
Q_INVOKABLE QWidget * addLabeledOptionsWidget(QString label, QLayout *newOptionsWidget)
Q_INVOKABLE QFrame * optionsFrame()
Get effect options frame.
Q_INVOKABLE void selectEffect(QString effectName)
virtual bool perSegment() const
Get flag indicating whether effect operates on segments (true) or the whole segmentation (false).
Q_INVOKABLE void setParameterDefault(QString name, int value)
Q_INVOKABLE QWidget * addLabeledOptionsWidget(QString label, QWidget *newOptionsWidget)
Q_INVOKABLE double doubleParameter(QString name)
Get effect-specific or common double type parameter from effect parameter set node.
Q_INVOKABLE void setParameterSetNode(vtkMRMLSegmentEditorNode *node)
Set segment editor parameter set node.
virtual bool processInteractionEvents(vtkRenderWindowInteractor *callerInteractor, unsigned long eid, qMRMLWidget *viewWidget)
void setShowEffectCursorInSliceView(bool show)
virtual void masterVolumeNodeChanged()
Deprecated. Override sourceVolumeNodeChanged() method instead.
Q_INVOKABLE vtkMRMLScene * scene()
Get MRML scene (from parameter set node)
Q_INVOKABLE bool segmentationDisplayableInView(vtkMRMLAbstractViewNode *viewNode)
Q_INVOKABLE void setParameter(QString name, int value)
virtual Q_INVOKABLE void modifySegmentByLabelmap(vtkMRMLSegmentationNode *segmentationNode, const char *segmentID, vtkOrientedImageData *modifierLabelmap, ModificationMode modificationMode, bool bypassMasking=false)
static Q_INVOKABLE vtkRenderWindow * renderWindow(qMRMLWidget *viewWidget)
Get render window for view widget.
static Q_INVOKABLE vtkRenderer * renderer(qMRMLWidget *viewWidget)
Get renderer for view widget.
Q_INVOKABLE vtkOrientedImageData * modifierLabelmap()
Q_INVOKABLE bool parameterDefined(QString name)
Returns true if the effect-specific parameter is already defined.
Q_INVOKABLE vtkOrientedImageData * sourceVolumeImageData()
Q_INVOKABLE QFormLayout * optionsLayout()
Get layout of options frame.
Q_INVOKABLE int integerParameter(QString name)
Get effect-specific or common integer type parameter from effect parameter set node.
virtual Q_INVOKABLE const QString helpText() const
Get help text for effect to be displayed in the help box.
virtual void setTitle(QString title)
Set the title of the effect.
Q_INVOKABLE void addActor2D(qMRMLWidget *viewWidget, vtkActor2D *actor)
Q_INVOKABLE int confirmCurrentSegmentVisible()
Q_INVOKABLE vtkOrientedImageData * referenceGeometryImage()
virtual QCursor createCursor(qMRMLWidget *viewWidget)
Create a cursor customized for the given effect, potentially for each view.
Q_INVOKABLE void setCommonParameter(QString name, QString value)
static Q_INVOKABLE QVector3D xyzToIjk(QVector3D inputXyz, qMRMLSliceWidget *sliceWidget, vtkOrientedImageData *image, vtkMRMLTransformNode *parentTransform=nullptr)
Convert XYZ slice view position to image IJK position, python accessor method,.
static Q_INVOKABLE QVector3D xyToRas(QPoint xy, qMRMLSliceWidget *sliceWidget)
Convert XY in-slice position to RAS position, python accessor method.
Q_INVOKABLE vtkMRMLNode * nodeReference(QString name)
Get effect-specific or common node reference type parameter from effect parameter set node.
vtkWeakPointer< vtkSegment > m_AlreadyConfirmedSegmentVisible
virtual void processViewNodeEvents(vtkMRMLAbstractViewNode *callerViewNode, unsigned long eid, qMRMLWidget *viewWidget)
static Q_INVOKABLE QVector3D xyzToRas(QVector3D inputXyz, qMRMLSliceWidget *sliceWidget)
Convert XYZ slice view position to RAS position, python accessor method.
static QPoint rasToXy(double ras[3], qMRMLSliceWidget *sliceWidget)
Convert RAS position to XY in-slice position.
Q_INVOKABLE void setCommonParameterDefault(QString name, QString value)
static void xyToRas(double xy[2], double outputRas[3], qMRMLSliceWidget *sliceWidget)
Convert XY in-slice position to RAS position.
Q_INVOKABLE void setParameter(QString name, double value)
virtual void setPerSegment(bool perSegment)
static Q_INVOKABLE QPoint rasToXy(QVector3D ras, qMRMLSliceWidget *sliceWidget)
Convert RAS position to XY in-slice position, python accessor method.
static Q_INVOKABLE vtkMRMLAbstractViewNode * viewNode(qMRMLWidget *viewWidget)
Get node for view widget.
virtual void setName(QString name)
Q_INVOKABLE void cursorOn(qMRMLWidget *viewWidget)
Restore saved cursor.
Q_INVOKABLE void addActor3D(qMRMLWidget *viewWidget, vtkProp3D *actor)
virtual Q_INVOKABLE void activate()
virtual QIcon icon()
Get icon for effect to be displayed in segment editor.
Q_INVOKABLE void setCommonParameterDefault(QString name, int value)
virtual void interactionNodeModified(vtkMRMLInteractionNode *interactionNode)
Q_INVOKABLE vtkOrientedImageData * maskLabelmap()
virtual void layoutChanged()
Simple mechanism to let the effects know that the layout has changed.
static Q_INVOKABLE void scheduleRender(qMRMLWidget *viewWidget)
Q_INVOKABLE void cursorOff(qMRMLWidget *viewWidget)
Turn off cursor and save cursor to restore later.
Q_INVOKABLE vtkMRMLSegmentEditorNode * parameterSetNode()
Get segment editor parameter set node.
Q_INVOKABLE void setNodeReference(QString name, vtkMRMLNode *node)
static void xyzToRas(double inputXyz[3], double outputRas[3], qMRMLSliceWidget *sliceWidget)
Q_INVOKABLE void addOptionsWidget(QWidget *newOptionsWidget)
Q_INVOKABLE QString parameter(QString name)
Get effect-specific or common string type parameter from effect parameter set node.
virtual QString name() const
QScopedPointer< qSlicerSegmentEditorAbstractEffectPrivate > d_ptr
static void xyzToIjk(double inputXyz[3], int outputIjk[3], qMRMLSliceWidget *sliceWidget, vtkOrientedImageData *image, vtkMRMLTransformNode *parentTransform=nullptr)
Convert XYZ slice view position to image IJK position,.
static void xyToIjk(double xy[2], int outputIjk[3], qMRMLSliceWidget *sliceWidget, vtkOrientedImageData *image, vtkMRMLTransformNode *parentTransform=nullptr)
Convert XY in-slice position to image IJK position.
static Q_INVOKABLE void applyImageMask(vtkOrientedImageData *input, vtkOrientedImageData *mask, double fillValue, bool notMask=false)
static void xyToIjk(QPoint xy, int outputIjk[3], qMRMLSliceWidget *sliceWidget, vtkOrientedImageData *image, vtkMRMLTransformNode *parentTransform=nullptr)
Convert XY in-slice position to image IJK position.
void setCallbackSlots(QObject *receiver, const char *selectEffectSlot, const char *updateVolumeSlot, const char *saveStateForUndoSlot)
Q_INVOKABLE vtkOrientedImageData * masterVolumeImageData()
Deprecated. Use sourceVolumeImageData method instead.
static Q_INVOKABLE QVector3D xyToIjk(QPoint xy, qMRMLSliceWidget *sliceWidget, vtkOrientedImageData *image, vtkMRMLTransformNode *parentTransform=nullptr)
Convert XY in-slice position to image IJK position, python accessor method.
virtual Q_INVOKABLE bool active()
Returns true if the effect is currently active (activated and has not deactivated since then)
Q_INVOKABLE void addOptionsWidget(QLayout *newOptionsWidget)
virtual QString title() const
virtual bool requireSegments() const
If this property is set to true then this effect is enabled only when the segmentation has segment(s)...
Q_INVOKABLE void setCommonParameter(QString name, double value)
Convenience function to set double common parameter.
qSlicerSegmentEditorAbstractEffect(QObject *parent=nullptr)
virtual Q_INVOKABLE void modifySegmentByLabelmap(vtkMRMLSegmentationNode *segmentationNode, const char *segmentID, vtkOrientedImageData *modifierLabelmap, ModificationMode modificationMode, const int modificationExtent[6], bool bypassMasking=false)
Q_INVOKABLE vtkOrientedImageData * selectedSegmentLabelmap()
Abstract MRML node to represent a view. The class holds the properties common to any view type (3D,...
Abstract Superclass for all specific types of MRML nodes.
A set of MRML Nodes that supports serialization and undo/redo.
Parameter set node for the segment editor widget.
MRML node containing segmentations.
MRML node for representing a transformation between this node space and a parent node space.
Image data containing orientation information.
This class encapsulates a segment that is part of a segmentation.
Definition vtkSegment.h:45