Difference between revisions of "Documentation/Nightly/Developers/Tutorials/MigrationGuide/Slicer"
(Created page with " ===MRML: Slicer 4.5: Introduction of vtkMRMLLabelMapVolumeNode=== Before <tt>vtkMRMLScalarVolumeNode</tt> was used for both scalar and label map volumes and the LabelMap cu...") |
|||
Line 2: | Line 2: | ||
===MRML: Slicer 4.5: Introduction of vtkMRMLLabelMapVolumeNode=== | ===MRML: Slicer 4.5: Introduction of vtkMRMLLabelMapVolumeNode=== | ||
+ | |||
+ | <b>Rational:</b> | ||
Before <tt>vtkMRMLScalarVolumeNode</tt> was used for both scalar and label map | Before <tt>vtkMRMLScalarVolumeNode</tt> was used for both scalar and label map | ||
Line 12: | Line 14: | ||
Now a new <tt>vtkMRMLLabelMapVolumeNode</tt> class is used for storing segmentation | Now a new <tt>vtkMRMLLabelMapVolumeNode</tt> class is used for storing segmentation | ||
− | information (still using vtkMRMLScalarVolume used as base class for backward | + | information (still using <tt>vtkMRMLScalarVolume</tt> used as base class for backward |
compatibility; but in the future the base class may be changed to reflect | compatibility; but in the future the base class may be changed to reflect | ||
that segmentation can be represented in various ways, not just as volumes). | that segmentation can be represented in various ways, not just as volumes). | ||
+ | |||
+ | <b>Error message similar to:</b> | ||
+ | |||
+ | error: ‘class vtkMRMLScalarVolumeNode’ has no member named ‘SetLabelMap’ | ||
+ | outputVolumeNode->SetLabelMap(1); | ||
+ | ^ | ||
+ | |||
+ | <b>Solution (Update node selector configuration):</b> | ||
+ | |||
+ | Replace lines like: | ||
+ | |||
+ | nodeSelector.setNodeTypes(QStringList("vtkMRMLScalarVolumeNode")); | ||
+ | nodeSelector.addAttribute("vtkMRMLScalarVolumeNode", "LabelMap", "1"); | ||
+ | |||
+ | with: | ||
+ | |||
+ | nodeSelector.setNodeTypes(QStringList("vtkMRMLLabelMapVolumeNode")); | ||
+ | |||
+ | |||
+ | <b>Solution (Update UI file):</b> | ||
+ | |||
+ | Replace lines like: | ||
+ | |||
+ | <widget class="qMRMLNodeComboBox" name="InputLabelVolumeMRMLNodeComboBox"> | ||
+ | <property name="nodeTypes"> | ||
+ | <stringlist> | ||
+ | <string>vtkMRMLScalarVolumeNode</string> | ||
+ | </stringlist> | ||
+ | </property> | ||
+ | [...] | ||
+ | </widget> | ||
+ | |||
+ | with: | ||
+ | |||
+ | <widget class="qMRMLNodeComboBox" name="InputLabelVolumeMRMLNodeComboBox"> | ||
+ | <property name="nodeTypes"> | ||
+ | <stringlist> | ||
+ | <string>vtkMRMLLabelMapVolumeNode</string> <------------- Update Here | ||
+ | </stringlist> | ||
+ | </property> | ||
+ | [...] | ||
+ | </widget> | ||
+ | |||
<b>References:</b> | <b>References:</b> | ||
+ | * http://www.slicer.org/slicerWiki/index.php/Documentation/Labs/Segmentations#vtkMRMLLabelMapVolumeNode_integration | ||
* http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&revision=24291 | * http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&revision=24291 |
Revision as of 04:47, 30 August 2017
Home < Documentation < Nightly < Developers < Tutorials < MigrationGuide < Slicer
MRML: Slicer 4.5: Introduction of vtkMRMLLabelMapVolumeNode
Rational:
Before vtkMRMLScalarVolumeNode was used for both scalar and label map volumes and the LabelMap custom MRML node attribute was used for distinguishing between them (0=scalar; 1=label map volume).
This made conversion between labelmap/scalar volumes very easy but made it difficult to customize behavior, display, processing of segmentation information.
Now a new vtkMRMLLabelMapVolumeNode class is used for storing segmentation information (still using vtkMRMLScalarVolume used as base class for backward compatibility; but in the future the base class may be changed to reflect that segmentation can be represented in various ways, not just as volumes).
Error message similar to:
error: ‘class vtkMRMLScalarVolumeNode’ has no member named ‘SetLabelMap’ outputVolumeNode->SetLabelMap(1); ^
Solution (Update node selector configuration):
Replace lines like:
nodeSelector.setNodeTypes(QStringList("vtkMRMLScalarVolumeNode")); nodeSelector.addAttribute("vtkMRMLScalarVolumeNode", "LabelMap", "1");
with:
nodeSelector.setNodeTypes(QStringList("vtkMRMLLabelMapVolumeNode"));
Solution (Update UI file):
Replace lines like:
<widget class="qMRMLNodeComboBox" name="InputLabelVolumeMRMLNodeComboBox"> <property name="nodeTypes"> <stringlist> <string>vtkMRMLScalarVolumeNode</string> </stringlist> </property> [...] </widget>
with:
<widget class="qMRMLNodeComboBox" name="InputLabelVolumeMRMLNodeComboBox"> <property name="nodeTypes"> <stringlist> <string>vtkMRMLLabelMapVolumeNode</string> <------------- Update Here </stringlist> </property> [...] </widget>
References: