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
vtkMRMLAnnotationDisplayNode.h
Go to the documentation of this file.
1 // .NAME vtkMRMLAnnotationDisplayNode - MRML node to represent display properties for tractography.
2 // .SECTION Description
3 // vtkMRMLAnnotationDisplayNode nodes store display properties of trajectories
4 // from tractography in diffusion MRI data, including color type (by bundle, by fiber,
5 // or by scalar invariants), display on/off for tensor glyphs and display of
6 // trajectory as a line or tube.
7 //
8 
9 #ifndef __vtkMRMLAnnotationDisplayNode_h
10 #define __vtkMRMLAnnotationDisplayNode_h
11 
12 #include "vtkMRML.h"
14 #include "vtkMRMLDisplayableNode.h"
15 #include "vtkMRMLDisplayNode.h"
16 #include "vtkSlicerAnnotationsModuleMRMLExport.h"
17 
18 #define vtkSetAndPropagateVector3Macro(name,type) \
19 virtual void SetAndPropagateSuper##name (type _arg1, type _arg2, type _arg3) \
20  { \
21  vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting Super" << #name " to (" << _arg1 << "," << _arg2 << "," << _arg3 << ")"); \
22  if ((this->Super##name[0] != _arg1)||(this->Super##name[1] != _arg2)||(this->Super##name[2] != _arg3)) \
23  { \
24  this->name[0] = _arg1; \
25  this->name[1] = _arg2; \
26  this->name[2] = _arg3; \
27  this->Super##name[0] = _arg1; \
28  this->Super##name[1] = _arg2; \
29  this->Super##name[2] = _arg3; \
30  vtkMRMLDisplayableNode *displayableNode = this->GetDisplayableNode(); \
31  if (!displayableNode) \
32  { \
33  return; \
34  } \
35  for (int i=0; i<displayableNode->GetNumberOfDisplayNodes(); i++) \
36  { \
37  vtkMRMLDisplayNode *displayNode = displayableNode->GetNthDisplayNode(i); \
38  if (!displayNode || displayNode==this) \
39  { \
40  continue; \
41  } \
42  displayNode->Set##name(this->Super##name); \
43  } \
44  this->Modified(); \
45  } \
46  }; \
47 virtual void SetAndPropagateSuper##name (type _arg[3]) \
48  { \
49  this->SetAndPropagateSuper##name (_arg[0], _arg[1], _arg[2]);\
50  }
51 
52 #define vtkSetAndPropagateMacro(name,type) \
53 virtual void SetAndPropagateSuper##name (type _arg) \
54  { \
55  vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting Super" << #name " to (" << _arg << ")"); \
56  if (this->Super##name != _arg) \
57  { \
58  this->name = _arg; \
59  this->Super##name = _arg; \
60  vtkMRMLDisplayableNode *displayableNode = this->GetDisplayableNode(); \
61  if (!displayableNode) \
62  { \
63  return; \
64  } \
65  for (int i=0; i<displayableNode->GetNumberOfDisplayNodes(); i++) \
66  { \
67  vtkMRMLDisplayNode *displayNode = displayableNode->GetNthDisplayNode(i); \
68  if (!displayNode || displayNode==this) \
69  { \
70  continue; \
71  } \
72  displayNode->Set##name(this->Super##name); \
73  } \
74  this->Modified(); \
75  } \
76  }; \
77 
78 
80 class VTK_SLICER_ANNOTATIONS_MODULE_MRML_EXPORT vtkMRMLAnnotationDisplayNode : public vtkMRMLModelDisplayNode
81 {
82  public:
85  void PrintSelf ( ostream& os, vtkIndent indent ) override;
86 
87  //--------------------------------------------------------------------------
88  // MRMLNode methods
89  //--------------------------------------------------------------------------
90 
91  vtkMRMLNode* CreateNodeInstance () override;
92 
93  // Description:
94  // Read node attributes from XML (MRML) file
95  void ReadXMLAttributes ( const char** atts ) override;
96 
97  // Description:
98  // Write this node's information to a MRML file in XML format.
99  void WriteXML ( ostream& of, int indent ) override;
100 
101 
102  // Description:
103  // Copy the node's attributes to this object
104  void Copy ( vtkMRMLNode *node ) override;
105 
106  // Description:
107  // Get node XML tag name (like Volume, Annotation)
108  const char* GetNodeTagName() override {return "AnnotationDisplay";}
109 
110  // Description:
111  // Finds the storage node and read the data
112  void UpdateScene(vtkMRMLScene *scene) override;
113 
114  // Description:
115  // alternative method to propagate events generated in Display nodes
116  void ProcessMRMLEvents ( vtkObject * /*caller*/,
117  unsigned long /*event*/,
118  void * /*callData*/ ) override;
119 
120  // Functionality for backups of this node
122  virtual void CreateBackup(){};
123  virtual void RestoreBackup(){};
124  void ClearBackup();
126  vtkMRMLAnnotationDisplayNode * GetBackup();
127 
128  //
129  // Set and propagate attributes to all other displayNodes
130  //
131 
132  vtkSetAndPropagateVector3Macro(Color, double);
133  vtkGetVector3Macro(SuperColor, double);
134 
135  vtkSetAndPropagateVector3Macro(SelectedColor, double);
136  vtkGetVector3Macro(SuperSelectedColor, double);
137 
138  vtkSetAndPropagateMacro(Opacity, double);
139  vtkGetMacro(SuperOpacity, double);
140 
141  vtkSetAndPropagateMacro(Ambient, double);
142  vtkGetMacro(SuperAmbient, double);
143 
144  vtkSetAndPropagateMacro(Diffuse, double);
145  vtkGetMacro(SuperDiffuse, double);
146 
147  vtkSetAndPropagateMacro(Specular, double);
148  vtkGetMacro(SuperSpecular, double);
149 
150  vtkSetAndPropagateMacro(Power, double);
151  vtkGetMacro(SuperPower, double);
152 
153  vtkSetAndPropagateMacro(SelectedAmbient, double);
154  vtkGetMacro(SuperSelectedAmbient, double);
155 
156  vtkSetAndPropagateMacro(SelectedSpecular, double);
157  vtkGetMacro(SuperSelectedSpecular, double);
158 
164  vtkSetMacro(SliceProjection, int);
165  vtkGetMacro(SliceProjection, int);
166 
169  {
170  ProjectionOff = 0x00,
171  ProjectionOn = 0x01
172  };
173 
175  inline void SliceProjectionOn();
176 
178  inline void SliceProjectionOff();
179 
182  vtkSetVector3Macro(ProjectedColor, double);
183  vtkGetVector3Macro(ProjectedColor, double);
184 
187  vtkSetMacro(ProjectedOpacity, double);
188  vtkGetMacro(ProjectedOpacity, double);
189 
190  protected:
192  ~vtkMRMLAnnotationDisplayNode() override;
195 
197 
198  double SuperColor[3];
199  double SuperSelectedColor[3];
200 
201  double SuperOpacity;
202  double SuperAmbient;
203  double SuperDiffuse;
205  double SuperPower;
208 
209 
211  double ProjectedColor[3];
213 };
214 
215 //----------------------------------------------------------------------------
218 {
219  this->SetSliceProjection( this->GetSliceProjection() |
221 }
222 
223 //----------------------------------------------------------------------------
226 {
227  this->SetSliceProjection( this->GetSliceProjection() &
229 }
230 
231 #endif
vtkMRMLNode * CreateNodeInstance() override
Create instance of the default node. Like New only virtual.
static vtkMRMLModelDisplayNode * New()
MRML node to represent a display property of 3D surface model.
void SliceProjectionOn()
Set SliceProjection to On.
void UpdateScene(vtkMRMLScene *scene) override
Finds the storage node and read the data.
virtual void CreateBackup()
Creates a backup of the current MRML state of this node and keeps a reference.
vtkMRMLAnnotationDisplayNode * m_Backup
virtual void Copy(vtkMRMLNode *node)
Copy node contents from another node of the same type. Does not copy node ID and Scene. Performs deep copy - an independent copy is created from all data, including bulk data.
A set of MRML Nodes that supports serialization and undo/redo.
Definition: vtkMRMLScene.h:57
#define vtkSetAndPropagateVector3Macro(name, type)
void SliceProjectionOff()
Set SliceProjection to Off.
void ReadXMLAttributes(const char **atts) override
Read node attributes from XML file
void operator=(const vtkMRMLModelDisplayNode &)
void PrintSelf(ostream &os, vtkIndent indent) override
Abstract Superclass for all specific types of MRML nodes.
Definition: vtkMRMLNode.h:167
void ProcessMRMLEvents(vtkObject *caller, unsigned long event, void *callData) override
const char * GetNodeTagName() override
Get node XML tag name (like Volume, Model)
void WriteXML(ostream &of, int indent) override
Write this node&#39;s information to a MRML file in XML format.
#define vtkSetAndPropagateMacro(name, type)