Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
qMRMLSegmentEditorWidget.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Program: 3D Slicer
4
5 Copyright (c) Laboratory for Percutaneous Surgery (PerkLab)
6 Queen's University, Kingston, ON, Canada. All Rights Reserved.
7
8 See COPYRIGHT.txt
9 or http://www.slicer.org/copyright/copyright.txt for details.
10
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16
17 This file was originally developed by Csaba Pinter, PerkLab, Queen's University
18 and was supported through the Applied Cancer Research Unit program of Cancer Care
19 Ontario with funds provided by the Ontario Ministry of Health and Long-Term Care
20
21==============================================================================*/
22
23#ifndef __qMRMLSegmentEditorWidget_h
24#define __qMRMLSegmentEditorWidget_h
25
26// Segmentations includes
27#include "qSlicerSegmentationsModuleWidgetsExport.h"
28
29// MRMLWidgets includes
30#include "qMRMLWidget.h"
31
32// Qt includes
33#include <QDebug>
34#include <QVariant>
35
36// CTK includes
37#include <ctkVTKObject.h>
38
39// STD includes
40#include <cstdlib>
41
42class vtkMRMLNode;
47class vtkObject;
48class QItemSelection;
49class QAbstractButton;
50class qMRMLSegmentEditorWidgetPrivate;
53
65class Q_SLICER_MODULE_SEGMENTATIONS_WIDGETS_EXPORT qMRMLSegmentEditorWidget : public qMRMLWidget
66{
67 Q_OBJECT
68 QVTK_OBJECT
79 Q_PROPERTY(bool undoEnabled READ undoEnabled WRITE setUndoEnabled)
81 Q_PROPERTY(bool readOnly READ readOnly WRITE setReadOnly)
82 Q_PROPERTY(Qt::ToolButtonStyle effectButtonStyle READ effectButtonStyle WRITE setEffectButtonStyle)
88
89public:
92 explicit qMRMLSegmentEditorWidget(QWidget* parent = nullptr);
95
98
100 Q_INVOKABLE vtkMRMLNode* segmentationNode() const;
102 Q_INVOKABLE QString segmentationNodeID() const;
104 Q_INVOKABLE vtkMRMLNode* sourceVolumeNode() const;
106 Q_INVOKABLE QString sourceVolumeNodeID() const;
107
109 Q_INVOKABLE vtkMRMLNode* masterVolumeNode() const
110 {
111 qWarning("qMRMLSegmentEditorWidget::masterVolumeNode is deprecated, use sourceVolumeNode() method instead.");
112 return this->sourceVolumeNode();
113 };
114
115 Q_INVOKABLE QString masterVolumeNodeID() const
116 {
117 qWarning("qMRMLSegmentEditorWidget::masterVolumeNodeID is deprecated, use sourceVolumeNodeID() method instead.");
118 return this->sourceVolumeNodeID();
119 };
120
121 Q_INVOKABLE QString currentSegmentID() const;
122
129
132 Q_INVOKABLE qSlicerSegmentEditorAbstractEffect* effectByName(const QString& name);
133
135 Q_INVOKABLE QStringList availableEffectNames();
136
139 Q_INVOKABLE void setEffectNameOrder(const QStringList& effectNames);
140
144 Q_INVOKABLE QStringList effectNameOrder() const;
145
149 void setUnorderedEffectsVisible(bool visible);
150
154
157 Q_INVOKABLE int effectCount();
158
162
167 Q_INVOKABLE void setupViewObservations();
168
172 Q_INVOKABLE void removeViewObservations();
173
182
185 {
186 qWarning("qMRMLSegmentEditorWidget::masterVolumeNodeSelectorVisible is deprecated, use sourceVolumeNodeSelectorVisible() method instead.");
187 return this->sourceVolumeNodeSelectorVisible();
188 };
189
191 {
192 qWarning("qMRMLSegmentEditorWidget::autoShowMasterVolumeNode is deprecated, use autoShowSourceVolumeNode() method instead.");
193 return this->autoShowSourceVolumeNode();
194 };
195
198
201
204
207
211 bool undoEnabled() const;
215 bool readOnly() const;
216
219 Qt::ToolButtonStyle effectButtonStyle() const;
220
223 int effectColumnCount() const;
224
227 Q_INVOKABLE void segmentationNodeSelectorAddAttribute(const QString& nodeType, const QString& attributeName, const QVariant& attributeValue = QVariant());
230 Q_INVOKABLE void segmentationNodeSelectorRemoveAttribute(const QString& nodeType, const QString& attributeName);
231
234 Q_INVOKABLE void sourceVolumeNodeSelectorAddAttribute(const QString& nodeType, const QString& attributeName, const QVariant& attributeValue = QVariant());
237 Q_INVOKABLE void sourceVolumeNodeSelectorRemoveAttribute(const QString& nodeType, const QString& attributeName);
238
240 Q_INVOKABLE void masterVolumeNodeSelectorAddAttribute(const QString& nodeType, const QString& attributeName, const QVariant& attributeValue = QVariant())
241 {
242 qWarning("qMRMLSegmentEditorWidget::masterVolumeNodeSelectorAddAttribute is deprecated, use sourceVolumeNodeSelectorAddAttribute method instead.");
243 this->sourceVolumeNodeSelectorAddAttribute(nodeType, attributeName, attributeValue);
244 }
245
246 Q_INVOKABLE void masterVolumeNodeSelectorRemoveAttribute(const QString& nodeType, const QString& attributeName)
247 {
248 qWarning("qMRMLSegmentEditorWidget::masterVolumeNodeSelectorRemoveAttribute is deprecated,"
249 " use sourceVolumeNodeSelectorRemoveAttribute instead.");
250 this->sourceVolumeNodeSelectorRemoveAttribute(nodeType, attributeName);
251 }
252
256
265 void setDefaultTerminologyEntrySettingsKey(const QString& terminologyEntrySettingsKey);
269
272 void setDefaultTerminologyEntry(const QString& terminologyEntry);
276
279
282
283public slots:
285 void setMRMLScene(vtkMRMLScene* newScene) override;
286
289
291 virtual void updateWidgetFromMRML();
292
296 void setSegmentationNodeID(const QString& nodeID);
302 void setSourceVolumeNodeID(const QString& nodeID);
303
306 {
307 qWarning("qMRMLSegmentEditorWidget::setMasterVolumeNode is deprecated, use setSourceVolumeNode method instead.");
308 this->setSourceVolumeNode(node);
309 }
310
311 void setMasterVolumeNodeID(const QString& nodeID)
312 {
313 qWarning("qMRMLSegmentEditorWidget::setMasterVolumeNodeID is deprecated, use setSourceVolumeNodeID method instead.");
314 this->setSourceVolumeNodeID(nodeID);
315 }
316
318 void setCurrentSegmentID(const QString& segmentID);
319
321 void setActiveEffectByName(const QString& effectName);
322
326
328 void updateVolume(void* volumePtr, bool& success);
329
353 void setUndoEnabled(bool);
357 void setReadOnly(bool aReadOnly);
360
363 {
364 qWarning("qMRMLSegmentEditorWidget::setMasterVolumeNodeSelectorVisible is deprecated, use setSourceVolumeNodeSelectorVisible method instead.");
366 }
367
368 void setAutoShowMasterVolumeNode(bool autoShow)
369 {
370 qWarning("qMRMLSegmentEditorWidget::setAutoShowMasterVolumeNode is deprecated, use setAutoShowSourceVolumeNode method instead.");
371 this->setAutoShowSourceVolumeNode(autoShow);
372 }
373
375 {
376 qWarning("qMRMLSegmentEditorWidget::toggleMasterVolumeIntensityMaskEnabled is deprecated, use toggleSourceVolumeIntensityMaskEnabled method instead.");
378 }
379
381 void undo();
382
384 void redo();
385
389 void installKeyboardShortcuts(QWidget* parent = nullptr);
390
393
398 {
399 qWarning() << "qMRMLSegmentEditorWidget::turnOffLightboxes is deprecated and it not needed.";
400 return false;
401 }
402
405
408 void setEffectButtonStyle(Qt::ToolButtonStyle toolButtonStyle);
409
411 void setEffectColumnCount(int columnCount);
412
417
422 void showSourceVolumeInSliceViewers(bool forceShowInBackground = false, bool fitSlice = false);
423
424 // Deprecated. Use showSourceVolumeInSliceViewers method instead.
425 void showMasterVolumeInSliceViewers(bool forceShowInBackground = false, bool fitSlice = false)
426 {
427 qWarning("qMRMLSegmentEditorWidget::showMasterVolumeInSliceViewers is deprecated, use showSourceVolumeInSliceViewers method instead.");
428 this->showSourceVolumeInSliceViewers(forceShowInBackground, fitSlice);
429 }
430
434
438
441
444
448 void selectSegmentAtOffset(int offset);
449
453
456
457signals:
459 void currentSegmentIDChanged(const QString&);
460
464
467
471
472protected slots:
478 void onSegmentSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
479
482
484 void onEffectButtonClicked(QAbstractButton* button);
485
490
493
507 void onLayoutChanged(int layoutIndex);
510
513
517 void onSourceVolumeIntensityMaskRangeChanged(double low, double high);
518
521
524
527
530
533
536
543
546
549
552
553 static void pauseRender();
554 static void resumeRender();
555
556protected:
558 static void processEvents(vtkObject* caller, unsigned long eid, void* clientData, void* callData);
559
563
567
570
571protected:
572 QScopedPointer<qMRMLSegmentEditorWidgetPrivate> d_ptr;
573
574private:
575 Q_DECLARE_PRIVATE(qMRMLSegmentEditorWidget);
576 Q_DISABLE_COPY(qMRMLSegmentEditorWidget);
577};
578
579#endif
Q_INVOKABLE qSlicerSegmentEditorAbstractEffect * effectByName(const QString &name)
void setMasterVolumeNodeID(const QString &nodeID)
Deprecated. Use setSourceVolumeNodeID method instead.
int maximumNumberOfUndoStates() const
Get maximum number of saved undo/redo states.
void setMRMLScene(vtkMRMLScene *newScene) override
Set the MRML scene associated with the widget.
void onOverwriteModeChanged(int)
Changed selected overwritable segments.
void initializeParameterSetNode()
Set default parameters in parameter set node (after setting or closing scene)
void onMRMLSceneEndBatchProcessEvent()
Updates needed after batch processing is done.
int effectColumnCount() const
bool switchToSegmentationsButtonVisible() const
Show/hide the switch to Segmentations module button.
void updateWidgetFromSegmentationNode()
Q_INVOKABLE void setEffectCursor(qSlicerSegmentEditorAbstractEffect *effect)
Set cursor for effect. If effect is nullptr then the cursor is reset to default.
QString defaultTerminologyEntry()
void updateVolume(void *volumePtr, bool &success)
Update modifierLabelmap, maskLabelmap, or alignedSourceVolumeNode.
bool maskingSectionVisible() const
Show/hide the masking section.
bool show3DButtonVisible() const
Show/hide the 3D button.
void setAddRemoveSegmentButtonsVisible(bool)
void setJumpToSelectedSegmentEnabled(bool enable)
Enables automatic jumping to current segment when selection is changed.
void toggleMasterVolumeIntensityMaskEnabled()
Deprecated. Use toggleSourceVolumeIntensityMaskEnabled method instead.
void setCurrentSegmentID(const QString &segmentID)
Set selected segment by its ID.
Q_INVOKABLE QString currentSegmentID() const
Get segment ID of selected segment.
bool specifyGeometryButtonVisible() const
Show/hide the specify geometry button.
void updateWidgetFromSourceVolumeNode()
void onSourceVolumeNodeChanged(vtkMRMLNode *node)
Handles changing of the current source volume MRML node.
void selectNextSegment()
Select the segment below the currently selected one in the table (skipping segments that are not visi...
Q_INVOKABLE QStringList effectNameOrder() const
void updateSliceRotateWarningButtonVisibility()
Show slice rotation warning button if slice views are rotated, hide otherwise.
void selectSegmentAtOffset(int offset)
QScopedPointer< qMRMLSegmentEditorWidgetPrivate > d_ptr
void setActiveEffectByName(const QString &effectName)
Set active effect by name.
bool readOnly() const
Get whether widget is read-only.
void hideLabelLayer()
Unselect labelmap layer in all slice views in the active layout.
Q_INVOKABLE vtkMRMLNode * masterVolumeNode() const
Deprecated. Use sourceVolumeNode() method instead.
void setEffectColumnCount(int columnCount)
Request displaying effects in the grid layout with the specified column count.
void onSourceVolumeIntensityMaskChecked(bool checked)
Enable/disable threshold when checkbox is toggled.
void onSwitchToSegmentations()
Edit segmentation properties in Segmentations module.
Q_INVOKABLE void masterVolumeNodeSelectorRemoveAttribute(const QString &nodeType, const QString &attributeName)
Deprecated use sourceVolumeNodeSelectorRemoveAttribute method instead.
void setSourceVolumeNodeSelectorVisible(bool)
Show/hide the source volume node selector widget.
void setSourceVolumeNodeID(const QString &nodeID)
Set source volume MRML node by its ID.
void undo()
Restores previous saved state of the segmentation.
void onExportToFilesActionClicked()
Open Export to files dialog.
void onInteractionNodeModified()
Handles mouse mode changes (view / place markups)
void setSegmentationNodeSelectorVisible(bool)
Show/hide the segmentation node selector widget.
void segmentationNodeChanged(vtkMRMLSegmentationNode *)
bool jumpToSelectedSegmentEnabled() const
Returns true if automatic jump to current segment is enabled.
void redo()
Restores next saved state of the segmentation.
Q_INVOKABLE QStringList availableEffectNames()
Get list of all registered effect names that can be displayed in the widget.
QVTK_OBJECTbool segmentationNodeSelectorVisible
void setMasterVolumeNode(vtkMRMLNode *node)
Deprecated. Use setSourceVolumeNode method instead.
void setMasterVolumeNodeSelectorVisible(bool visible)
Deprecated. Use setSourceVolumeNodeSelectorVisible method instead.
static qSlicerAbstractModuleWidget * switchToSegmentationsModule()
Switches to Segmentations module and returns the module widget.
void showSourceVolumeInSliceViewers(bool forceShowInBackground=false, bool fitSlice=false)
void onSegmentationHistoryChanged()
Update GUI if segmentation history is changed (e.g., undo/redo button states)
void setReadOnly(bool aReadOnly)
Set whether the widget is read-only.
void onExportToColorTableActionClicked()
Export segment color and terminology information to a new color table.
bool setSourceRepresentationToBinaryLabelmap()
void sourceVolumeNodeChanged(vtkMRMLVolumeNode *)
bool undoEnabled() const
Undo/redo enabled.
void setMaskingSectionVisible(bool)
void setShow3DButtonVisible(bool)
bool sourceVolumeNodeSelectorVisible() const
Show/hide the source volume node selector widget.
void setSpecifyGeometryButtonVisible(bool)
bool autoShowMasterVolumeNode() const
Deprecated. Use autoShowSourceVolumeNode() method instead.
void toggleSourceVolumeIntensityMaskEnabled()
Enable/disable masking using source volume intensity.
void onSelectSegmentShortcut()
Segment selection shortcut is activated.
void setUnorderedEffectsVisible(bool visible)
bool addRemoveSegmentButtonsVisible() const
Show/hide the add/remove segment buttons.
Q_INVOKABLE void sourceVolumeNodeSelectorAddAttribute(const QString &nodeType, const QString &attributeName, const QVariant &attributeValue=QVariant())
void onMRMLSceneEndCloseEvent()
Clean up when scene is closed.
bool segmentationNodeSelectorVisible() const
Show/hide the segmentation node selector widget.
Q_INVOKABLE void segmentationNodeSelectorAddAttribute(const QString &nodeType, const QString &attributeName, const QVariant &attributeValue=QVariant())
void onRemoveSegment()
Remove selected segment.
void onSourceVolumeImageDataModified()
Called if source volume image data is changed.
Q_INVOKABLE void setupViewObservations()
Q_INVOKABLE void segmentationNodeSelectorRemoveAttribute(const QString &nodeType, const QString &attributeName)
Q_INVOKABLE void removeViewObservations()
Q_INVOKABLE QString segmentationNodeID() const
Get ID of currently selected segmentation node.
void currentSegmentIDChanged(const QString &)
Emitted if different segment is selected in the segment list.
void setSwitchToSegmentationsButtonVisible(bool)
Show/hide the switch to Segmentations module button.
void updateMaskingSection()
Update masking section on the UI.
QString defaultTerminologyEntrySettingsKey() const
void onAddSegment()
Add empty segment.
Qt::ToolButtonStyle effectButtonStyle() const
bool autoShowSourceVolumeNode() const
void installKeyboardShortcuts(QWidget *parent=nullptr)
Q_INVOKABLE void sourceVolumeNodeSelectorRemoveAttribute(const QString &nodeType, const QString &attributeName)
void onEffectButtonClicked(QAbstractButton *button)
Activate effect on clicking its button.
Q_INVOKABLE vtkMRMLNode * segmentationNode() const
Get currently selected segmentation MRML node.
static void resumeRender()
void setMRMLSegmentEditorNode(vtkMRMLSegmentEditorNode *newSegmentEditorNode)
Set the segment editor parameter set node.
void updateUndoRedoButtonsState()
Update undo/redo button states.
void selectPreviousSegment()
Select the segment above the currently selected one in the table (skipping segments that are not visi...
void onCreateSurfaceToggled(bool on)
Create/remove closed surface model for the segmentation that is automatically updated when editing.
void setSourceVolumeNode(vtkMRMLNode *node)
void uninstallKeyboardShortcuts()
Uninstall previously installed keyboard shortcuts.
void onSegmentationNodeChanged(vtkMRMLNode *node)
Handles changing of current segmentation MRML node.
void setInteractionNode(vtkMRMLInteractionNode *interactionNode)
virtual void updateWidgetFromMRML()
Update widget state from the MRML scene.
static void pauseRender()
void setEffectButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
bool masterVolumeNodeSelectorVisible() const
Deprecated. Use sourceVolumeNodeSelectorVisible() method instead.
Q_INVOKABLE QString masterVolumeNodeID() const
Deprecated. Use sourceVolumeNodeID() method instead.
bool unorderedEffectsVisible() const
void onLayoutChanged(int layoutIndex)
Handle layout changes.
void onSegmentSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
Handles segment selection changes.
Q_INVOKABLE void setEffectNameOrder(const QStringList &effectNames)
void setAutoShowSourceVolumeNode(bool)
Q_INVOKABLE void masterVolumeNodeSelectorAddAttribute(const QString &nodeType, const QString &attributeName, const QVariant &attributeValue=QVariant())
Deprecated use sourceVolumeNodeSelectorAddAttribute method instead.
Q_INVOKABLE qSlicerSegmentEditorAbstractEffect * activeEffect() const
void setSegmentationNodeID(const QString &nodeID)
Set segmentation MRML node by its ID.
void setDefaultTerminologyEntrySettingsKey(const QString &terminologyEntrySettingsKey)
void onSegmentAddedRemoved()
Called if a segment or representation is added or removed.
void setMaximumNumberOfUndoStates(int)
Set maximum number of saved undo/redo states.
Q_INVOKABLE vtkMRMLSegmentEditorNode * mrmlSegmentEditorNode() const
Get the segment editor parameter set node.
Q_INVOKABLE qSlicerSegmentEditorAbstractEffect * effectByIndex(int index)
Q_INVOKABLE QString sourceVolumeNodeID() const
Get ID of currently selected source volume node.
void setUndoEnabled(bool)
Undo/redo enabled.
void setAutoShowMasterVolumeNode(bool autoShow)
Deprecated. Use setAutoShowSourceVolumeNode method instead.
void showSegmentationGeometryDialog()
Show segmentation geometry dialog to specify labelmap geometry.
void showMasterVolumeInSliceViewers(bool forceShowInBackground=false, bool fitSlice=false)
void onMaskModeChanged(int)
Changed selected editable segment area.
Q_INVOKABLE vtkMRMLInteractionNode * interactionNode() const
void setDefaultTerminologyEntry(const QString &terminologyEntry)
Q_INVOKABLE int effectCount()
Q_INVOKABLE void setActiveEffect(qSlicerSegmentEditorAbstractEffect *effect)
Qt::ToolButtonStyle effectButtonStyle
Q_INVOKABLE vtkMRMLNode * sourceVolumeNode() const
Get currently selected source volume MRML node.
void onSourceVolumeIntensityMaskRangeChanged(double low, double high)
Handles threshold values changed event.
void masterVolumeNodeChanged(vtkMRMLVolumeNode *)
Deprecated. Use sourceVolumeNodeChanged signal instead.
void onSegmentationDisplayModified()
Handle display node view ID changes.
static void processEvents(vtkObject *caller, unsigned long eid, void *clientData, void *callData)
Callback function invoked when interaction happens.
void setSegmentationNode(vtkMRMLNode *node)
Set segmentation MRML node.
void onImportExportActionClicked()
Switch to Segmentations module and jump to Import/Export section.
qMRMLSegmentEditorWidget(QWidget *parent=nullptr)
Constructor.
qMRMLWidget(QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags())
Abstract class for segment editor effects.
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 volume (image stack).