Difference between revisions of "Documentation/Nightly/Developers/Tutorials/MigrationGuide/Slicer"

From Slicer Wiki
Jump to: navigation, search
(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: