Slicer 5.9
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 { Superclass::UpdateScene(scene); };
61
64 virtual int IsLinear();
65
68 virtual int IsComposite();
69
72 virtual vtkAbstractTransform* GetTransformToParent();
73
77 virtual int GetMatrixTransformToParent(vtkMatrix4x4* matrix);
78
82 virtual int GetMatrixTransformFromParent(vtkMatrix4x4* matrix);
83
89 virtual vtkMatrix4x4* GetMatrixTransformToParent();
90
96 virtual vtkMatrix4x4* GetMatrixTransformFromParent();
97
100 virtual const char* GetTransformToParentInfo();
101
104 virtual vtkAbstractTransform* GetTransformFromParent();
105
108 virtual const char* GetTransformFromParentInfo();
109
113
117
122 void GetTransformToWorld(vtkGeneralTransform* transformToWorld);
123
128 void GetTransformFromWorld(vtkGeneralTransform* transformFromWorld);
129
134 void GetTransformToNode(vtkMRMLTransformNode* node, vtkGeneralTransform* transformToNode);
135
140 void GetTransformFromNode(vtkMRMLTransformNode* node, vtkGeneralTransform* transformFromNode);
141
146 static void GetTransformBetweenNodes(vtkMRMLTransformNode* sourceNode, vtkMRMLTransformNode* targetNode, vtkGeneralTransform* transformSourceToTarget);
147
152 virtual int GetMatrixTransformToWorld(vtkMatrix4x4* transformToWorld);
153
158 virtual int GetMatrixTransformFromWorld(vtkMatrix4x4* transformFromWorld);
159
164 virtual int GetMatrixTransformToNode(vtkMRMLTransformNode* node, vtkMatrix4x4* transformToNode);
165
170 virtual int GetMatrixTransformFromNode(vtkMRMLTransformNode* node, vtkMatrix4x4* transformFromNode);
171
176 static int GetMatrixTransformBetweenNodes(vtkMRMLTransformNode* sourceNode, vtkMRMLTransformNode* targetNode, vtkMatrix4x4* transformSourceToTarget);
177
182
186
192
205 virtual int SetMatrixTransformToParent(vtkMatrix4x4* matrix);
206
210 virtual int SetMatrixTransformFromParent(vtkMatrix4x4* matrix);
211
221 void ApplyTransformMatrix(vtkMatrix4x4* transformMatrix) override;
222
227 virtual int SetAndObserveMatrixTransformToParent(vtkMatrix4x4* matrix);
228
233 virtual int SetAndObserveMatrixTransformFromParent(vtkMatrix4x4* matrix);
234
236 bool CanApplyNonLinearTransforms() const override;
238 void ApplyTransform(vtkAbstractTransform* transform) override;
239
243 virtual int Split();
244
248
252
255
263 vtkGetMacro(ReadAsTransformToParent, int);
264 vtkSetMacro(ReadAsTransformToParent, int);
265 vtkBooleanMacro(ReadAsTransformToParent, int);
266
272
273 bool GetModifiedSinceRead() override;
274
280 vtkAbstractTransform* GetTransformToParentAs(const char* transformType, bool logErrorIfFails = true, bool modifiableOnly = false);
281
287 vtkAbstractTransform* GetTransformFromParentAs(const char* transformType, bool logErrorIfFails = true, bool modifiableOnly = false);
288
294 void SetAndObserveTransformToParent(vtkAbstractTransform* transform);
295
301 void SetAndObserveTransformFromParent(vtkAbstractTransform* transform);
302
304 void ProcessMRMLEvents(vtkObject* /*caller*/, unsigned long /*event*/, void* /*callData*/) override;
305
309 static void FlattenGeneralTransform(vtkCollection* outputTransformList, vtkAbstractTransform* inputTransform);
310
314 static bool AreTransformsEqual(vtkAbstractTransform* transform1, vtkAbstractTransform* transform2);
315
321 static bool IsGeneralTransformLinear(vtkAbstractTransform* inputTransform, vtkTransform* concatenatedLinearTransform = nullptr);
322
327 static bool IsAbstractTransformComputedFromInverse(vtkAbstractTransform* abstractTransform);
328
333 static int DeepCopyTransform(vtkAbstractTransform* dst, vtkAbstractTransform* src);
334
338 void Inverse();
339
342 virtual void InverseName();
343
346
352 const char* GetTransformInfo(vtkAbstractTransform* inputTransform);
353
355 static const char* GetMovingNodeReferenceRole() { return "spatialRegistrationMoving"; };
357 static const char* GetFixedNodeReferenceRole() { return "spatialRegistrationFixed"; };
358
360 virtual void SetCenterOfTransformation(double x, double y, double z);
361 virtual void SetCenterOfTransformation(const double xyz[3]);
362 vtkGetVector3Macro(CenterOfTransformation, double);
363
364protected:
369
374 virtual vtkAbstractTransform* GetAbstractTransformAs(vtkAbstractTransform* inputTransform, const char* transformClassName, bool logErrorIfFails);
375
378 virtual void SetAndObserveTransform(vtkAbstractTransform** originalTransformPtr, vtkAbstractTransform** inverseTransformPtr, vtkAbstractTransform* transform);
379
387 vtkAbstractTransform* TransformToParent;
388 vtkAbstractTransform* TransformFromParent;
389
391
392 // Temporary buffers used for returning transform info as char*
393 std::string TransformInfo;
394
399
400 double CenterOfTransformation[3]{ 0.0, 0.0, 0.0 };
401};
402
403#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.