Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 {
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
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
374 virtual void SetCenterOfTransformation(double x, double y, double z);
375 virtual void SetCenterOfTransformation(const double xyz[3]);
376 vtkGetVector3Macro(CenterOfTransformation, double);
377
378protected:
383
388 virtual vtkAbstractTransform* GetAbstractTransformAs(vtkAbstractTransform* inputTransform, const char* transformClassName, bool logErrorIfFails);
389
392 virtual void SetAndObserveTransform(vtkAbstractTransform** originalTransformPtr, vtkAbstractTransform** inverseTransformPtr, vtkAbstractTransform *transform);
393
401 vtkAbstractTransform* TransformToParent;
402 vtkAbstractTransform* TransformFromParent;
403
405
406 // Temporary buffers used for returning transform info as char*
407 std::string TransformInfo;
408
413
414 double CenterOfTransformation[3] {0.0, 0.0, 0.0};
415};
416
417#endif
Abstract Superclass for all specific types of MRML nodes.
virtual void InvokeCustomModifiedEvent(int eventId, void *callData=nullptr)
This method allows the node to compress events.
virtual void UpdateScene(vtkMRMLScene *)
A set of MRML Nodes that supports serialization and undo/redo.
A superclass for other storage nodes.
const char * GetTransformInfo(vtkAbstractTransform *inputTransform)
virtual int Split()
vtkMRMLStorageNode * CreateDefaultStorageNode() override
Create default storage node or nullptr if does not have one.
virtual void SetCenterOfTransformation(double x, double y, double z)
The transformation center (rotation/scaling) that is rotated/scaled around.
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
virtual void SetCenterOfTransformation(const double xyz[3])
~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.