Difference between revisions of "Documentation/Nightly/Modules/Transforms"

From Slicer Wiki
Jump to: navigation, search
(Prepend documentation/versioncheck template. See http://na-mic.org/Mantis/view.php?id=2887)
(Moved to readthedocs)
Tags: 2017 source edit, Replaced
 
(26 intermediate revisions by 6 users not shown)
Line 1: Line 1:
<noinclude>{{documentation/versioncheck}}</noinclude>
+
<noinclude>{{documentation/versioncheck}}
<!-- ---------------------------- -->
+
</noinclude>
{{documentation/{{documentation/version}}/module-header}}
 
<!-- ---------------------------- -->
 
  
<!-- ---------------------------- -->
+
{{documentation/banner
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}
+
| text  = [https://slicer.readthedocs.io/en/latest/user_guide/modules/transforms.html This page has been moved to read-the-docs.]
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}
+
| background-color = 8FBC8F }}
{{documentation/{{documentation/version}}/module-introduction-row}}
 
:'''Author(s)/Contributor(s):''' Alex Yarmarkovich (Isomics, SPL), Jean-Christophe Fillion-Robin (Kitware), Julien Finet (Kitware)<br>
 
:'''Acknowledgements:''' This work is part of the [http://www.na-mic.org/ National Alliance for Medical Image Computing] (NA-MIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149.<br>
 
:'''Contact:''' Alex Yarmarkovich, <email>alexy@bwh.harvard.edu</email><br>
 
{{documentation/{{documentation/version}}/module-introduction-row}}
 
{{documentation/{{documentation/version}}/module-introduction-logo-gallery
 
|{{collaborator|logo|isomics}}|{{collaborator|longname|isomics}}
 
|{{collaborator|logo|kitware}}|{{collaborator|longname|kitware}}
 
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}
 
|{{collaborator|logo|nac}}|{{collaborator|longname|nac}}
 
}}
 
{{documentation/{{documentation/version}}/module-introduction-end}}
 
 
 
 
 
<!-- ---------------------------- -->
 
{{documentation/{{documentation/version}}/module-section|Module Description}}
 
{{documentation/{{documentation/version}}/module-description}}
 
 
 
<!-- ---------------------------- -->
 
{{documentation/{{documentation/version}}/module-section|Use Cases}}
 
Most frequently Transform module is used for these scenarios:
 
 
 
* Manual Registration: You can insert a transformation node into your scene, and in the Data module drag a volume or a model under it,
 
making them children of the transformation node. After that any changes to the transformation matrix of this node will be applied to the display of children volumes and models.
 
 
 
* To concatenate transforms: You can combine (affine) transforms in the Data module. Drag them onto eachother to nest. Order of nesting matters. Then right click and select "Harden Trasnform", which should move the nested one back to the top. Rename the node and save as new file.
 
 
 
<!-- ---------------------------- -->
 
{{documentation/{{documentation/version}}/module-section|Tutorials}}
 
* Please use tutorial about [http://www.slicer.org/slicerWiki/index.php/Documentation/4.0/Training loading and viewing data].
 
 
 
<!-- ---------------------------- -->
 
{{documentation/{{documentation/version}}/module-section|Panels and their use}}
 
 
 
{|
 
|-
 
| [[Image:TransformsModule-43.png|thumb|280px|Transforms module panel]]
 
| [[Image:QSlicerTransformsModule.png|thumb|660px|''LinearTransform'' applied to ''Meningioma2''<br>Rotations: IS 45º<br>Translations: LR -41mm, IS 36mm]]
 
|}
 
 
 
{{documentation/{{documentation/version}}/module-parametersdescription}}
 
 
 
<!-- ---------------------------- -->
 
{{documentation/{{documentation/version}}/module-section|Similar Modules}}
 
* Related modules: [[Documentation/{{documentation/version}}/Modules/Data|Data module]], [[:Category:Documentation/{{documentation/version}}/Modules/Registration|Registration modules]].
 
 
 
<!-- ---------------------------- -->
 
{{documentation/{{documentation/version}}/module-section|References}}
 
N/A
 
 
 
<!-- ---------------------------- -->
 
{{documentation/{{documentation/version}}/module-section|Information for Developers}}
 
===Key [[Documentation/{{documentation/version}}/Developers/MRML|MRML]] nodes===
 
* [http://slicer.org/doc/html/classvtkMRMLTransformableNode.html vtkMRMLTransformableNode]
 
* [http://slicer.org/doc/html/classvtkMRMLTransformNode.html vtkMRMLTransformNode]
 
** [http://slicer.org/doc/html/classvtkMRMLLinearTransformNode.html vtkMRMLLinearTransformNode]
 
** [http://slicer.org/doc/html/classvtkMRMLBSplineTransformNode.html vtkMRMLBSplineTransformNode]
 
** [http://slicer.org/doc/html/classvtkMRMLGridTransformNode.html vtkMRMLGridTransformNode]
 
How to programmatically apply a transform to a transformable node:
 
vtkNew<[http://slicer.org/doc/html/classvtkMRMLLinearTransformNode.html vtkMRMLLinearTransformNode]> transformNode;
 
scene->AddNode(transformNode.GetPointer());
 
...
 
vtkNew<vtkMatrix4x4> matrix;
 
...
 
transform->SetAndObserveMatrixTransformToParent( matrix.GetPointer() );
 
...
 
vtkMRMLVolumeNode* transformableNode = ...; // or vtkMRMLModelNode*...
 
transformableNode->SetAndObserveTransformNodeID( transformNode->GetID() );
 
 
 
Because a ''transform'' node is also a ''transformable'' node, it is possible to concatenate transforms with each others:
 
[http://slicer.org/doc/html/classvtkMRMLLinearTransformNode.html vtkMRMLLinearTransformNode*] transformNode = ...;
 
[http://slicer.org/doc/html/classvtkMRMLLinearTransformNode.html vtkMRMLLinearTransformNode*] transformNode2 = ...;
 
transformNode2->SetAndObserveTransformNodeID( transformNode->GetID() );
 
...
 
transformable->SetAndObserveTransformNodeID( transformNode2->GetID() );
 
 
 
===Events===
 
When a transform  node is observed by a transformable node, [http://slicer.org/doc/html/classvtkMRMLTransformableNode.html#ace1c30fc9df552543f00d51a20c038a6a4993bf6e23a6dfc138cb2efc1b9ce43b vtkMRMLTransformableNode::TransformModifiedEvent] is fired on the transformable node at observation time.
 
Anytime a transform is modified, vtkCommand::ModifiedEvent is fired on the transform node and  [http://slicer.org/doc/html/classvtkMRMLTransformableNode.html#ace1c30fc9df552543f00d51a20c038a6a4993bf6e23a6dfc138cb2efc1b9ce43b vtkMRMLTransformableNode::TransformModifiedEvent] is fired on the transformable node.
 
 
 
<!-- ---------------------------- -->
 
{{documentation/{{documentation/version}}/module-footer}}
 
<!-- ---------------------------- -->
 

Latest revision as of 03:18, 3 January 2021

Home < Documentation < Nightly < Modules < Transforms