Slicer 5.6
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
vtkMRMLTransformNode.h
Go to the documentation of this file.
1/*=auto=========================================================================
2
3 Portions (c) Copyright 2005 Brigham and Women's Hospital (BWH) All Rights Reserved.
4
5 See COPYRIGHT.txt
6 or http://www.slicer.org/copyright/copyright.txt for details.
7
8 Program: 3D Slicer
9 Module: $RCSfile: vtkMRMLTransformNode.h,v $
10 Date: $Date: 2006/03/19 17:12:29 $
11 Version: $Revision: 1.13 $
12
13=========================================================================auto=*/
14
15#ifndef __vtkMRMLTransformNode_h
16#define __vtkMRMLTransformNode_h
17
19
20class vtkCollection;
21class vtkAbstractTransform;
22class vtkGeneralTransform;
23class vtkMatrix4x4;
24class vtkTransform;
25
33class VTK_MRML_EXPORT vtkMRMLTransformNode : public vtkMRMLDisplayableNode
34{
35public:
38 void PrintSelf(ostream& os, vtkIndent indent) override;
39
41
44 void ReadXMLAttributes( const char** atts) override;
45
48 void WriteXML(ostream& of, int indent) override;
49
53
56 const char* GetNodeTagName() override {return "Transform";};
57
60 void UpdateScene(vtkMRMLScene *scene) override
61 {
62 Superclass::UpdateScene(scene);
63 };
64
67 virtual int IsLinear();
68
71 virtual int IsComposite();
72
75 virtual vtkAbstractTransform* GetTransformToParent();
76
80 virtual int GetMatrixTransformToParent(vtkMatrix4x4* matrix);
81
85 virtual int GetMatrixTransformFromParent(vtkMatrix4x4* matrix);
86
92 virtual vtkMatrix4x4* GetMatrixTransformToParent();
93
99 virtual vtkMatrix4x4* GetMatrixTransformFromParent();
100
103 virtual const char* GetTransformToParentInfo();
104
107 virtual vtkAbstractTransform* GetTransformFromParent();
108
111 virtual const char* GetTransformFromParentInfo();
112
116
120
125 void GetTransformToWorld(vtkGeneralTransform* transformToWorld);
126
131 void GetTransformFromWorld(vtkGeneralTransform* transformFromWorld);
132
138 vtkGeneralTransform* transformToNode);
139
145 vtkGeneralTransform* transformFromNode);
146
152 vtkMRMLTransformNode* targetNode, vtkGeneralTransform* transformSourceToTarget);
153
158 virtual int GetMatrixTransformToWorld(vtkMatrix4x4* transformToWorld);
159
164 virtual int GetMatrixTransformFromWorld(vtkMatrix4x4* transformFromWorld);
165
171 vtkMatrix4x4* transformToNode);
172
178 vtkMatrix4x4* transformFromNode);
179
185 vtkMRMLTransformNode* targetNode, vtkMatrix4x4* transformSourceToTarget);
186
191
195
201
214 virtual int SetMatrixTransformToParent(vtkMatrix4x4 *matrix);
215
219 virtual int SetMatrixTransformFromParent(vtkMatrix4x4 *matrix);
220
230 void ApplyTransformMatrix(vtkMatrix4x4* transformMatrix) override;
231
236 virtual int SetAndObserveMatrixTransformToParent(vtkMatrix4x4 *matrix);
237
242 virtual int SetAndObserveMatrixTransformFromParent(vtkMatrix4x4 *matrix);
243
245 bool CanApplyNonLinearTransforms()const override;
247 void ApplyTransform(vtkAbstractTransform* transform) override;
248
252 virtual int Split();
253
257
261
264
272 vtkGetMacro(ReadAsTransformToParent, int);
273 vtkSetMacro(ReadAsTransformToParent, int);
274 vtkBooleanMacro(ReadAsTransformToParent, int);
275
280 virtual void TransformModified()
281 {
282 this->InvokeCustomModifiedEvent(vtkMRMLTransformableNode::TransformModifiedEvent);
283 }
284
285 bool GetModifiedSinceRead() override;
286
292 vtkAbstractTransform* GetTransformToParentAs(const char* transformType, bool logErrorIfFails = true, bool modifiableOnly = false);
293
299 vtkAbstractTransform* GetTransformFromParentAs(const char* transformType, bool logErrorIfFails = true, bool modifiableOnly = false);
300
306 void SetAndObserveTransformToParent(vtkAbstractTransform *transform);
307
313 void SetAndObserveTransformFromParent(vtkAbstractTransform *transform);
314
316 void ProcessMRMLEvents ( vtkObject * /*caller*/,
317 unsigned long /*event*/,
318 void * /*callData*/ ) override;
319
323 static void FlattenGeneralTransform(vtkCollection* outputTransformList, vtkAbstractTransform* inputTransform);
324
328 static bool AreTransformsEqual(vtkAbstractTransform* transform1, vtkAbstractTransform* transform2);
329
335 static bool IsGeneralTransformLinear(vtkAbstractTransform* inputTransform, vtkTransform* concatenatedLinearTransform=nullptr);
336
341 static bool IsAbstractTransformComputedFromInverse(vtkAbstractTransform* abstractTransform);
342
347 static int DeepCopyTransform(vtkAbstractTransform* dst, vtkAbstractTransform* src);
348
352 void Inverse();
353
356 virtual void InverseName();
357
360
366 const char* GetTransformInfo(vtkAbstractTransform* inputTransform);
367
369 static const char* GetMovingNodeReferenceRole() { return "spatialRegistrationMoving"; };
371 static const char* GetFixedNodeReferenceRole() { return "spatialRegistrationFixed"; };
372
373protected:
378
383 virtual vtkAbstractTransform* GetAbstractTransformAs(vtkAbstractTransform* inputTransform, const char* transformClassName, bool logErrorIfFails);
384
387 virtual void SetAndObserveTransform(vtkAbstractTransform** originalTransformPtr, vtkAbstractTransform** inverseTransformPtr, vtkAbstractTransform *transform);
388
396 vtkAbstractTransform* TransformToParent;
397 vtkAbstractTransform* TransformFromParent;
398
400
401 // Temporary buffers used for returning transform info as char*
402 std::string TransformInfo;
403
408};
409
410#endif
Abstract Superclass for all specific types of MRML nodes.
A set of MRML Nodes that supports serialization and undo/redo.
A superclass for other storage nodes.
MRML node for representing a transformation between this node space and a parent node space.
const char * GetTransformInfo(vtkAbstractTransform *inputTransform)
virtual int Split()
vtkMRMLStorageNode * CreateDefaultStorageNode() override
Create default storage node or nullptr if does not have one.
void ProcessMRMLEvents(vtkObject *, unsigned long, void *) override
alternative method to propagate events generated in Transform nodes
const char * GetNodeTagName() override
Get node XML tag name (like Volume, Model)
vtkMTimeType GetTransformToWorldMTime()
Get the latest modification time of the stored transform.
virtual int GetMatrixTransformFromWorld(vtkMatrix4x4 *transformFromWorld)
virtual void SetAndObserveTransform(vtkAbstractTransform **originalTransformPtr, vtkAbstractTransform **inverseTransformPtr, vtkAbstractTransform *transform)
Sets and observes a transform and deletes the inverse (so that the inverse will be computed automatic...
void SetAndObserveTransformFromParent(vtkAbstractTransform *transform)
virtual int GetMatrixTransformToParent(vtkMatrix4x4 *matrix)
virtual void InverseName()
virtual int IsComposite()
Returns 1 if the transform is a composite transform (a transform that may contain multiple simple tra...
vtkMatrix4x4 * CachedMatrixTransformToParent
bool CanApplyNonLinearTransforms() const override
Reimplemented from vtkMRMLTransformableNode.
static void FlattenGeneralTransform(vtkCollection *outputTransformList, vtkAbstractTransform *inputTransform)
static bool AreTransformsEqual(vtkAbstractTransform *transform1, vtkAbstractTransform *transform2)
void UpdateScene(vtkMRMLScene *scene) override
Finds the storage node and read the data.
static const char * GetMovingNodeReferenceRole()
Reference role name from the transform node to the moving volume or fiducial node that participated i...
vtkMRMLNode * CreateNodeInstance() override
MRMLNode methods.
virtual vtkMatrix4x4 * GetMatrixTransformToParent()
int IsTransformToWorldLinear()
1 if all the transforms to the top are linear, 0 otherwise
vtkMRMLCopyContentMacro(vtkMRMLTransformNode)
int IsTransformToNodeLinear(vtkMRMLTransformNode *node)
1 if all the transforms between nodes are linear, 0 otherwise
static void GetTransformBetweenNodes(vtkMRMLTransformNode *sourceNode, vtkMRMLTransformNode *targetNode, vtkGeneralTransform *transformSourceToTarget)
vtkAbstractTransform * GetTransformFromParentAs(const char *transformType, bool logErrorIfFails=true, bool modifiableOnly=false)
virtual int SetMatrixTransformFromParent(vtkMatrix4x4 *matrix)
virtual int GetMatrixTransformToWorld(vtkMatrix4x4 *transformToWorld)
void SetAndObserveTransformToParent(vtkAbstractTransform *transform)
vtkMRMLTransformNode(const vtkMRMLTransformNode &)
virtual int SetAndObserveMatrixTransformToParent(vtkMatrix4x4 *matrix)
virtual vtkAbstractTransform * GetTransformFromParent()
Transform of this node from parent.
vtkAbstractTransform * TransformToParent
void CreateDefaultDisplayNodes() override
Create and observe default display node.
static int DeepCopyTransform(vtkAbstractTransform *dst, vtkAbstractTransform *src)
vtkMRMLTransformNode * GetFirstCommonParent(vtkMRMLTransformNode *targetNode)
void operator=(const vtkMRMLTransformNode &)
void GetTransformToWorld(vtkGeneralTransform *transformToWorld)
void CreateDefaultSequenceDisplayNodes() override
Creates the most appropriate display node class for storing a sequence of these nodes.
void GetTransformToNode(vtkMRMLTransformNode *node, vtkGeneralTransform *transformToNode)
void GetTransformFromNode(vtkMRMLTransformNode *node, vtkGeneralTransform *transformFromNode)
virtual vtkAbstractTransform * GetTransformToParent()
Transform of this node to parent.
void ApplyTransform(vtkAbstractTransform *transform) override
Reimplemented from vtkMRMLTransformableNode.
virtual int SetAndObserveMatrixTransformFromParent(vtkMatrix4x4 *matrix)
virtual int IsLinear()
Returns 1 if transform is a non-composite linear transform, 0 otherwise (if composite transform or no...
void GetTransformFromWorld(vtkGeneralTransform *transformFromWorld)
vtkAbstractTransform * GetTransformToParentAs(const char *transformType, bool logErrorIfFails=true, bool modifiableOnly=false)
virtual const char * GetTransformFromParentInfo()
Get a human-readable description of the transform.
virtual vtkMatrix4x4 * GetMatrixTransformFromParent()
virtual int GetMatrixTransformFromParent(vtkMatrix4x4 *matrix)
vtkAbstractTransform * TransformFromParent
virtual int SetMatrixTransformToParent(vtkMatrix4x4 *matrix)
vtkMatrix4x4 * CachedMatrixTransformFromParent
~vtkMRMLTransformNode() override
static int GetMatrixTransformBetweenNodes(vtkMRMLTransformNode *sourceNode, vtkMRMLTransformNode *targetNode, vtkMatrix4x4 *transformSourceToTarget)
static const char * GetFixedNodeReferenceRole()
Reference role name from the transform node to the moving volume or fiducial node that participated i...
int IsTransformNodeMyParent(vtkMRMLTransformNode *node)
void PrintSelf(ostream &os, vtkIndent indent) override
bool GetModifiedSinceRead() override
static vtkMRMLTransformNode * New()
int IsTransformNodeMyChild(vtkMRMLTransformNode *node)
Returns 1 if the node is one of the this node's descendants.
static bool IsAbstractTransformComputedFromInverse(vtkAbstractTransform *abstractTransform)
void ApplyTransformMatrix(vtkMatrix4x4 *transformMatrix) override
void WriteXML(ostream &of, int indent) override
Write this node's information to a MRML file in XML format.
virtual vtkAbstractTransform * GetAbstractTransformAs(vtkAbstractTransform *inputTransform, const char *transformClassName, bool logErrorIfFails)
void ReadXMLAttributes(const char **atts) override
Read node attributes from XML file.
virtual int GetMatrixTransformToNode(vtkMRMLTransformNode *node, vtkMatrix4x4 *transformToNode)
static bool IsGeneralTransformLinear(vtkAbstractTransform *inputTransform, vtkTransform *concatenatedLinearTransform=nullptr)
virtual int GetMatrixTransformFromNode(vtkMRMLTransformNode *node, vtkMatrix4x4 *transformFromNode)
virtual const char * GetTransformToParentInfo()
Get a human-readable description of the transform.