Difference between revisions of "Documentation/Nightly/Developers/FAQ/MRML"
From Slicer Wiki
(5 intermediate revisions by 2 users not shown) | |||
Line 8: | Line 8: | ||
* Generic pattern | * Generic pattern | ||
− | < | + | <pre> |
− | + | vtkNew<vtkMRML???Node> nodeToAdd; | |
− | + | ... | |
− | + | mrmlScene->AddNode(nodeToAdd.GetPointer()); | |
− | </ | + | </pre> |
* Add a polydata to the scene | * Add a polydata to the scene | ||
− | < | + | <pre> |
− | + | vtkNew<vtkMRMLModelNode> modelNode; | |
− | + | modelNode->SetPolyData(polyData); | |
− | + | mrmlScene->AddNode(modelNode.GetPointer()); | |
− | </ | + | </pre> |
* Load a polyData from file | * Load a polyData from file | ||
− | < | + | <pre> |
− | + | vtkSlicerModelsLogic* modelsLogic = ...; | |
− | + | //modelsLogic->SetMRMLScene(mrmlScene); | |
− | + | modelsLogic->AddModel(polyDataFileName); | |
− | </ | + | </pre> |
== What to do if you get 'No LookupTable was set but number of components in input doesn't match OutputFormat' when loading a MRML scene ? == | == What to do if you get 'No LookupTable was set but number of components in input doesn't match OutputFormat' when loading a MRML scene ? == | ||
Line 45: | Line 45: | ||
Make sure the <code>colorNodeRef</code> attribute is set on each <code>VolumeDisplay</code> node. | Make sure the <code>colorNodeRef</code> attribute is set on each <code>VolumeDisplay</code> node. | ||
+ | |||
+ | == How to change the volumes in the 2D views ? == | ||
+ | |||
+ | <pre> | ||
+ | appLogic = slicer.app.applicationLogic() | ||
+ | selectionNode = appLogic.GetSelectionNode() | ||
+ | selectionNode.SetReferenceActiveVolumeID(bg) | ||
+ | selectionNode.SetReferenceSecondaryVolumeID(fg) | ||
+ | appLogic.PropagateVolumeSelection() | ||
+ | </pre> | ||
+ | |||
+ | Source: https://github.com/fedorov/ChangeTrackerPy/blob/master/Wizard/Helper.py#L82 | ||
+ | |||
+ | == How to know the min/max offset of a slice view ? == | ||
+ | <pre> | ||
+ | vtkMRMLSliceNode* redSliceNode = vtkMRMLSliceNode::SafeDownCast( this->GetMRMLScene()->GetNodeByID( "vtkMRMLSliceNodeRed" )); | ||
+ | vtkMRMLSliceLogic* sliceLogic = this->GetMRMLApplicationLogic()->GetSliceLogic( redSliceNode ); | ||
+ | |||
+ | double sliceBounds[6] = {0, -1, 0, -1, 0, -1}; | ||
+ | sliceLogic->GetLowestVolumeSliceBounds(sliceBounds); | ||
+ | double min = sliceBounds[4]; | ||
+ | double max = sliceBounds[5]; | ||
+ | </pre> | ||
+ | |||
+ | Source: https://github.com/Slicer/Slicer/blob/master/Libs/MRML/Widgets/qMRMLSliceControllerWidget.cxx#L1267-L1276 |
Latest revision as of 22:14, 22 September 2017
Home < Documentation < Nightly < Developers < FAQ < MRML
For the latest Slicer documentation, visit the read-the-docs. |
Contents
MRML
How to add a MRML node into the scene ?
- Generic pattern
vtkNew<vtkMRML???Node> nodeToAdd; ... mrmlScene->AddNode(nodeToAdd.GetPointer());
- Add a polydata to the scene
vtkNew<vtkMRMLModelNode> modelNode; modelNode->SetPolyData(polyData); mrmlScene->AddNode(modelNode.GetPointer());
- Load a polyData from file
vtkSlicerModelsLogic* modelsLogic = ...; //modelsLogic->SetMRMLScene(mrmlScene); modelsLogic->AddModel(polyDataFileName);
What to do if you get 'No LookupTable was set but number of components in input doesn't match OutputFormat' when loading a MRML scene ?
If you get the following error messages:
ERROR: In /path/to/VTK/Imaging/vtkImageMapToColors.cxx, line 153 vtkImageMapToColors (0x268f190): RequestInformation: No LookupTable was set but number of components in input doesn't match OutputFormat, therefore input can't be passed through! ERROR: In /path/to/VTK/Imaging/vtkImageExtractComponents.cxx, line 239 vtkImageExtractComponents (0x26947e0): Execute: Component 1 is not in input. ERROR: In /path/to/VTK/Imaging/vtkImageExtractComponents.cxx, line 239 vtkImageExtractComponents (0x26947e0): Execute: Component 1 is not in input. [...]
Make sure the colorNodeRef
attribute is set on each VolumeDisplay
node.
How to change the volumes in the 2D views ?
appLogic = slicer.app.applicationLogic() selectionNode = appLogic.GetSelectionNode() selectionNode.SetReferenceActiveVolumeID(bg) selectionNode.SetReferenceSecondaryVolumeID(fg) appLogic.PropagateVolumeSelection()
Source: https://github.com/fedorov/ChangeTrackerPy/blob/master/Wizard/Helper.py#L82
How to know the min/max offset of a slice view ?
vtkMRMLSliceNode* redSliceNode = vtkMRMLSliceNode::SafeDownCast( this->GetMRMLScene()->GetNodeByID( "vtkMRMLSliceNodeRed" )); vtkMRMLSliceLogic* sliceLogic = this->GetMRMLApplicationLogic()->GetSliceLogic( redSliceNode ); double sliceBounds[6] = {0, -1, 0, -1, 0, -1}; sliceLogic->GetLowestVolumeSliceBounds(sliceBounds); double min = sliceBounds[4]; double max = sliceBounds[5];