Slicer  5.0
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
vtkMRMLAnnotationRulerNode.h
Go to the documentation of this file.
1 #ifndef __vtkMRMLAnnotationRulerNode_h
2 #define __vtkMRMLAnnotationRulerNode_h
3 
4 #include "vtkSlicerAnnotationsModuleMRMLExport.h"
6 
7 class vtkMatrix4x4;
8 class vtkAbstractTransform;
9 class vtkMRMLScene;
10 
12 class VTK_SLICER_ANNOTATIONS_MODULE_MRML_EXPORT vtkMRMLAnnotationRulerNode : public vtkMRMLAnnotationLinesNode
13 {
14 public:
17  // Description:
18  // Just prints short summary
19  void PrintAnnotationInfo(ostream& os, vtkIndent indent, int titleFlag = 1) override;
20 
21  //--------------------------------------------------------------------------
22  // MRMLNode methods
23  //--------------------------------------------------------------------------
24 
25  vtkMRMLNode* CreateNodeInstance() override;
26  // Description:
27  // Get node XML tag name (like Volume, Model)
28  const char* GetNodeTagName() override {return "AnnotationRuler";}
29 
30  const char* GetIcon() override {return ":/Icons/AnnotationDistance.png";}
31 
32  // Description:
33  // Read node attributes from XML file
34  void ReadXMLAttributes( const char** atts) override;
35 
36  // Description:
37  // Write this node's information to a MRML file in XML format.
38  void WriteXML(ostream& of, int indent) override;
39 
40 
41  // Description:
42  // Copy the node's attributes to this object
43  void Copy(vtkMRMLNode *node) override;
44 
45  void UpdateScene(vtkMRMLScene *scene) override;
46 
47  // Description:
48  // alternative method to propagate events generated in Display nodes
49  void ProcessMRMLEvents ( vtkObject * /*caller*/,
50  unsigned long /*event*/,
51  void * /*callData*/ ) override;
52 
53 
54 
55  // Get position of the first point
56  void GetPosition1(double position[3]);
57 
58  // Get position of the first point in world coordinates, including parent transforms
59  void GetPositionWorldCoordinates1(double position[4])
60  {
61  double p[4]={0,0,0,1};
62  this->GetPosition1(p);
63  this->TransformPointToWorld(p,position);
64  }
65 
66  // Legacy code
67  // Description:
68  // get/set the first point position
69  double* GetPosition1()
70  {
71  return this->GetControlPointCoordinates(0);
72  }
73 
74  int SetPosition1(double newControl[3])
75  {
76  return this->SetControlPoint(0, newControl) ;
77  }
78 
79  int SetPositionWorldCoordinates1(double newControl[4])
80  {
81  double locPoint[4]={0,0,0,1};
82  this->TransformPointFromWorld(newControl, locPoint);
83  return this->SetPosition1(locPoint) ;
84  }
85 
86  int SetPosition1(double nC1, double nC2, double nC3)
87  {
88  double newControl[3] = {nC1,nC2,nC3};
89  return this->SetPosition1(newControl) ;
90  }
91 
92 
93  // Get position of the second point
94  void GetPosition2(double position[3]);
95 
96  // Get position of the second point in world coordinates, including parent transforms
97  void GetPositionWorldCoordinates2(double position[4])
98  {
99  double p[4]={0,0,0,1};
100  this->GetPosition2(p);
101  this->TransformPointToWorld(p,position);
102  }
103 
104  double* GetPosition2()
105  {
106  return this->GetControlPointCoordinates(1);
107  }
108 
109  int SetPosition2(double newControl[3])
110  {
111  return this->SetControlPoint(1, newControl);
112  }
113 
114  int SetPositionWorldCoordinates2(double newControl[4])
115  {
116  double locPoint[4]={0,0,0,1};
117  this->TransformPointFromWorld(newControl, locPoint);
118  return this->SetPosition2(locPoint) ;
119  }
120 
121  int SetPosition2(double nC1, double nC2, double nC3)
122  {
123  double newControl[3] = {nC1,nC2,nC3};
124  return this->SetPosition2(newControl) ;
125  }
126 
127  // Description:
128  // get/set the distance annotation format, it's in standard sprintf notation
129  vtkGetStringMacro(DistanceAnnotationFormat);
130  vtkSetStringMacro(DistanceAnnotationFormat);
131 
132  // Description:
133  // KP Define - should be part of AnnotationRulerDisplayNode
134  double GetDistanceAnnotationScale();
135  void SetDistanceAnnotationScale(double init);
136 
137  // Description:
138  // get/set the distance annotation visbility
139  int GetDistanceAnnotationVisibility();
140  void SetDistanceAnnotationVisibility(int flag);
141 
142  int SetRuler(vtkIdType line1Id, int sel, int vis);
143 
144  // Description:
145  // get/set the point representation color
146  double *GetPointColor();
147  void SetPointColor( double initColor[3]);
148 
149  // Description:
150  // get/set the line representation color
151  double *GetLineColor();
152  void SetLineColor(double newColor[3]);
153 
154  // Description:
155  // get/set the distance annotation text color
156  double *GetDistanceAnnotationTextColor();
157  void SetDistanceAnnotationTextColor(double initColor[3]);
158 
159  // Description:
160  // transform utility functions
161  void ApplyTransform(vtkAbstractTransform* transform) override;
162 
163  // Description:
164  // Create default storage node or nullptr if does not have one
166 
167 // void Initialize(vtkMRMLScene* mrmlScene);
168 
170  double GetDistanceMeasurement();
171 
172 
174  vtkGetStringMacro(ModelID1);
175  vtkSetStringMacro(ModelID1);
176  vtkGetStringMacro(ModelID2);
177  vtkSetStringMacro(ModelID2);
178 
179  enum
180  {
181  RulerNodeAddedEvent = 20010,
183  };
184 
185 
186 protected:
188  ~vtkMRMLAnnotationRulerNode() override;
191 
192  // Description:
193  // The format string that defines the text showing the distance
195 
196  int SetControlPoint(int id, double newControl[3]);
197 
198  int AddControlPoint(double newControl[3],int selectedFlag, int visibleFlag);
199 
202  char *ModelID1;
203  char *ModelID2;
204 };
205 
206 #endif
void GetPositionWorldCoordinates1(double position[4])
int AddControlPoint(double newControl[3], int selectedFlag, int visibleFlag)
void ProcessMRMLEvents(vtkObject *, unsigned long, void *) override
alternative method to propagate events generated in Display nodes
void operator=(const vtkMRMLAnnotationLinesNode &)
void PrintAnnotationInfo(ostream &os, vtkIndent indent, int titleFlag=1) override
void ApplyTransform(vtkAbstractTransform *transform) override
void UpdateScene(vtkMRMLScene *scene) override
Finds the storage node and read the data
void GetPositionWorldCoordinates2(double position[4])
vtkMRMLNode * CreateNodeInstance() override
MRMLNode methods.
int SetPosition2(double newControl[3])
int SetControlPoint(int id, double newControl[3], int selectedFlag, int visibleFlag)
virtual void TransformPointToWorld(const double inLocal[3], double outWorld[3])
A set of MRML Nodes that supports serialization and undo/redo.
Definition: vtkMRMLScene.h:57
int SetPosition2(double nC1, double nC2, double nC3)
void Copy(vtkMRMLNode *node) override
Copy the node's attributes to this object
int SetPosition1(double newControl[3])
A superclass for other storage nodes.
double * GetControlPointCoordinates(vtkIdType id)
int SetPosition1(double nC1, double nC2, double nC3)
static vtkMRMLAnnotationLinesNode * New()
vtkMRMLStorageNode * CreateDefaultStorageNode() override
void WriteXML(ostream &of, int indent) override
Write this node's information to a MRML file in XML format.
const char * GetNodeTagName() override
Get node XML tag name (like Volume, Model)
Abstract Superclass for all specific types of MRML nodes.
Definition: vtkMRMLNode.h:167
int SetPositionWorldCoordinates2(double newControl[4])
void ReadXMLAttributes(const char **atts) override
Read node attributes from XML file
virtual void TransformPointFromWorld(const double inWorld[3], double outLocal[3])
int SetPositionWorldCoordinates1(double newControl[4])