00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00018
00019 #ifndef __vtkMRMLFiducialListNode_h
00020 #define __vtkMRMLFiducialListNode_h
00021
00022 #include <string>
00023
00024 #include "vtkMatrix4x4.h"
00025 #include "vtkCollection.h"
00026
00027 #include "vtkMRML.h"
00028 #include "vtkMRMLNode.h"
00029 #include "vtkMRMLFiducial.h"
00030 #include "vtkMRMLStorableNode.h"
00031 #include "vtkMRMLFiducialListStorageNode.h"
00032
00036 typedef struct
00037 {
00038 int first;
00039 int second;
00040 } FiducialListSwappedIndices;
00041
00042 class VTK_MRML_EXPORT vtkMRMLFiducialListNode : public vtkMRMLStorableNode
00043 {
00044 public:
00045 static vtkMRMLFiducialListNode *New();
00046 vtkTypeMacro(vtkMRMLFiducialListNode,vtkMRMLStorableNode);
00047 void PrintSelf(ostream& os, vtkIndent indent);
00048
00052
00053 virtual vtkMRMLNode* CreateNodeInstance();
00054
00056 virtual void ReadXMLAttributes( const char** atts);
00057
00059 virtual void WriteXML(ostream& of, int indent);
00060
00061
00063 virtual void Copy(vtkMRMLNode *node);
00064
00066 virtual const char* GetNodeTagName() {return "FiducialList";};
00067
00069 virtual void UpdateScene(vtkMRMLScene *scene);
00070
00072 void UpdateReferences();
00073
00076 void SetSymbolScale(double scale);
00077 vtkGetMacro(SymbolScale,double);
00078
00079
00082 void SetVisibility(int visible);
00083 vtkGetMacro(Visibility,int);
00084
00087 void SetTextScale(double scale);
00088 vtkGetMacro(TextScale,double);
00089
00092 void SetColor(double r, double g, double b);
00093 void SetColor(double c[3]);
00094 vtkGetVectorMacro(Color,double,3);
00095
00097 void SetSelectedColor(double r, double g, double b);
00098 void SetSelectedColor(double c[3]);
00099 vtkGetVectorMacro(SelectedColor,double,3);
00100
00101
00103 int GetNumberOfFiducials();
00104
00107 int SetNthFiducialXYZ(int n, float x, float y, float z);
00108 int SetNthFiducialOrientation(int n, float w, float x, float y, float z);
00109 int SetNthFiducialLabelText(int n, const char *text);
00110 int SetNthFiducialSelected(int n, int flag);
00111 int SetNthFiducialSelectedNoModified(int n, int flag);
00112 int SetNthFiducialVisibility(int n, int flag);
00113 int SetNthFiducialVisibilityNoModified(int n, int flag);
00114 int SetNthFiducialID(int n, const char *id);
00115
00119 int SetNthFiducialXYZWorld(int n, float x, float y, float z);
00120
00123
00124 int SetFiducialXYZ(std::string fiducialID, float x, float y, float z);
00128 int GetFiducialIndex(std::string fiducialID);
00129
00130
00132 int SetAllFiducialsSelected(int flag);
00133
00135 int SetAllFiducialsVisibility(int flag);
00136
00139 float *GetNthFiducialXYZ(int n);
00140
00145 int GetNthFiducialXYZWorld(int n, double *worldxyz);
00147 float *GetNthFiducialOrientation(int n);
00149 const char *GetNthFiducialLabelText(int n);
00151 int GetNthFiducialSelected(int n);
00153 int GetNthFiducialVisibility(int n);
00155 const char *GetNthFiducialID(int n);
00156
00158 int AddFiducial( );
00159
00161 int AddFiducialWithXYZ(float x, float y, float z, int selected);
00163 int AddFiducialWithLabelXYZSelectedVisibility(const char *label, float x, float y, float z, int selected, int visibility);
00164
00166 void RemoveFiducial(vtkMRMLFiducial *o);
00168 void RemoveFiducial(int i);
00170 void RemoveAllFiducials();
00172 int IsFiducialPresent(vtkMRMLFiducial *o);
00173
00175 void ProcessMRMLEvents ( vtkObject *caller, unsigned long event, void *callData );
00176
00177
00180 enum
00181 {
00182 DisplayModifiedEvent = 19000,
00183 PolyDataModifiedEvent = 19001,
00184 FiducialModifiedEvent = 19002,
00185 FiducialIndexModifiedEvent = 19003
00186 };
00187
00188
00190 void SetOpacity(double opacity);
00191 vtkGetMacro(Opacity, double);
00192
00194 void SetAmbient(double val);
00195 vtkGetMacro(Ambient, double);
00196
00198 void SetDiffuse(double val);
00199 vtkGetMacro(Diffuse, double);
00200
00202 void SetSpecular(double val);
00203 vtkGetMacro(Specular, double);
00204
00206 void SetPower(double val);
00207 vtkGetMacro(Power, double);
00208
00210 void SetLocked(int locked);
00211 vtkGetMacro(Locked, int);
00212
00213
00216 enum GlyphShapes
00217 {
00218 GlyphMin = 1,
00219 Vertex2D = GlyphMin,
00220 Dash2D,
00221 Cross2D,
00222 ThickCross2D,
00223 Triangle2D,
00224 Square2D,
00225 Circle2D,
00226 Diamond2D,
00227 Arrow2D,
00228 ThickArrow2D,
00229 HookedArrow2D,
00230 StarBurst2D,
00231 Sphere3D,
00232 Diamond3D,
00233 GlyphMax = Diamond3D
00234 };
00235
00237 int GetMinimumGlyphType() { return vtkMRMLFiducialListNode::GlyphMin; };
00238 int GetMaximumGlyphType() { return vtkMRMLFiducialListNode::GlyphMax; };
00239
00241 void SetGlyphType(int type);
00242 vtkGetMacro(GlyphType, int);
00244 int GlyphTypeIs3D(int glyphType);
00245 int GlyphTypeIs3D() { return this->GlyphTypeIs3D(this->GlyphType); };
00246
00248 const char* GetGlyphTypeAsString();
00249 const char* GetGlyphTypeAsString(int g);
00250 void SetGlyphTypeFromString(const char *glyphString);
00251
00253 virtual bool CanApplyNonLinearTransforms() { return true; }
00254 virtual void ApplyTransform(vtkMatrix4x4* transformMatrix);
00255 virtual void ApplyTransform(vtkAbstractTransform* transform);
00256
00258 virtual vtkMRMLStorageNode* CreateDefaultStorageNode()
00259 {
00260 return vtkMRMLFiducialListStorageNode::New();
00261 };
00262
00266 int MoveFiducialUp(int fidIndex);
00267 int MoveFiducialDown(int fidIndex);
00268
00272 void RenumberFiducials(int startFrom = 0);
00273
00276 void RenameFiducials(const char *newName);
00277
00278
00280 enum NumberingSchemes
00281 {
00282 SchemeMin = 0,
00283 UseID = SchemeMin,
00284 UseIndex,
00285 UsePrevious,
00286 SchemeMax = UsePrevious
00287 };
00288
00289
00291 vtkSetMacro(NumberingScheme, int);
00292 vtkGetMacro(NumberingScheme, int);
00293
00295 const char* GetNumberingSchemeAsString();
00296 const char* GetNumberingSchemeAsString(int g);
00297 void SetNumberingSchemeFromString(const char *schemeString);
00298
00306 void SetFiducialLabelTextFromID(vtkMRMLFiducial *fid);
00307
00308 protected:
00309 vtkMRMLFiducialListNode();
00310 ~vtkMRMLFiducialListNode();
00311 vtkMRMLFiducialListNode(const vtkMRMLFiducialListNode&);
00312 void operator=(const vtkMRMLFiducialListNode&);
00313
00316 vtkMRMLFiducial* GetNthFiducial(int n);
00317
00318 double SymbolScale;
00319 double TextScale;
00320 int Visibility;
00321 double Color[3];
00322 double SelectedColor[3];
00323
00325 vtkCollection *FiducialList;
00326
00328 double Opacity;
00329 double Ambient;
00330 double Diffuse;
00331 double Specular;
00332 double Power;
00333 int Locked;
00334 int GlyphType;
00335
00337 int NumberingScheme;
00338 };
00339
00340 #endif