00001 #ifndef __vtkSlicermiAnnotationModuleLogic_h
00002 #define __vtkSlicermiAnnotationModuleLogic_h
00003
00004
00005 #include "vtkSlicerModuleLogic.h"
00006
00007
00008 #include <qCTKPimpl.h>
00009
00010 #include "qSlicermiAnnotationModuleExport.h"
00011 #include "vtkSlicerNodeSelectorWidget.h"
00012 #include "vtkKWUserInterfacePanel.h"
00013 #include "vtkSlicerModuleGUI.h"
00014
00015 class vtkSlicerFiducialListWidget;
00016 class vtkSlicermiAnnotationModuleLogicPrivate;
00017 class vtkMeasurementsAngleWidget;
00018 class vtkMeasurementsRulerWidget;
00019 class vtkMRMLMeasurementsAngleNode;
00020 class vtkMRMLAnnotationRulerNode;
00021 class vtkMRMLAnnotationAngleNode;
00022 class vtkSlicerViewerWidget;
00023 class vtkSlicerApplicationGUI;
00024 class vtkMeasurementsDistanceWidgetClass;
00025 class vtkMeasurementsAngleWidgetClass;
00026 class vtkMRMLAnnotationFiducialNode;
00027 class vtkMRMLAnnotationFiducialNode;
00028 class vtkMRMLAnnotationNode;
00029 class vtkMRMLAnnotationPointDisplayNode;
00030 class vtkMRMLAnnotationLineDisplayNode;
00031 class vtkMRMLAnnotationLinesNode;
00032 class vtkMRMLAnnotationControlPointsNode;
00033 class vtkMRMLAnnotationDisplayNode;
00034 class vtkMRMLAnnotationTextDisplayNode;
00035 class vtkMRMLAnnotationStickyNode;
00036 class vtkSlicerAnnotationRulerManager;
00037 class vtkSlicerAnnotationAngleManager;
00038
00039
00040 class Q_SLICER_QTMODULES_ANNOTATIONS_EXPORT vtkSlicermiAnnotationModuleLogic :
00041 public vtkSlicerModuleLogic
00042 {
00043 public:
00044 typedef enum { VALUE=0,
00045 TEXT,
00046 LOCK,
00047 TEXT_COLOR,
00048 TEXT_SELECTED_COLOR,
00049 TEXT_OPACITY,
00050 TEXT_AMBIENT,
00051 TEXT_DIFFUSE,
00052 TEXT_SPECULAR,
00053 TEXT_SCALE,
00054 POINT_COLOR,
00055 POINT_SELECTED_COLOR,
00056 POINT_OPACITY,
00057 POINT_AMBIENT,
00058 POINT_DIFFUSE,
00059 POINT_SPECULAR,
00060 POINT_SIZE,
00061 LINE_COLOR,
00062 LINE_SELECTED_COLOR,
00063 LINE_OPACITY,
00064 LINE_AMBIENT,
00065 LINE_DIFFUSE,
00066 LINE_SPECULAR,
00067 LINE_WIDTH} PropertyType;
00068
00069 enum
00070 {
00071 AddAngleCompletedEvent = 19020,
00072 };
00073
00074 static vtkSlicermiAnnotationModuleLogic *New();
00075 vtkTypeRevisionMacro(vtkSlicermiAnnotationModuleLogic,vtkSlicerModuleLogic);
00076 virtual void PrintSelf(ostream& os, vtkIndent indent);
00077
00078
00079 const char* AddFiducial();
00080 double GetFiducialValue(const char* cpID);
00081 std::vector<double> GetFiducialPositionsByNodeID(const char* cpID);
00082 void SetFiducialPositionsByNodeID(const char* cpID, std::vector<double> positions);
00083 void RemoveFiducial(const char* id);
00084 vtkMRMLAnnotationFiducialNode* GetFiducialNodeByID(const char* id);
00085 void Update3DFiducial(vtkMRMLAnnotationFiducialNode *activeCPNode);
00086 void StartAddingFiducials();
00087 void StopAddingFiducials();
00088
00089
00090 const char* AddRuler();
00091 void RemoveRuler(const char* id);
00092 vtkMRMLAnnotationRulerNode* GetRulerNodeByID(const char* id);
00093
00094
00095 const char* AddAngle();
00096 void RemoveAngle(const char* id);
00097 vtkMRMLAnnotationAngleNode* GetAngleNodeByID(const char* id);
00098 void AddAngleCompleted();
00099
00100
00101 const char* AddStickyNode();
00102
00103
00104 void ModifyPropertiesAndWidget(vtkMRMLNode* node, int type, void*data);
00105 vtkSlicerViewerWidget* GetViewerWidget();
00106 void SetAnnotationSelectedByIDs(std::vector<const char*> selectedIDs, std::vector<const char*> allIDs);
00107 void RemoveAnnotationByID(const char* id);
00108
00109
00110 void SetAnnotationControlPointsProperties(vtkMRMLAnnotationControlPointsNode* node, int type, void* data);
00111 void SetAnnotationLinesProperties(vtkMRMLAnnotationLinesNode* node, int type, void* data);
00112 void SetAnnotationProperties(vtkMRMLAnnotationNode* node, int type, void* data);
00113 int SetAnnotationDisplayProperties(vtkMRMLAnnotationDisplayNode* node, int type, void* data);
00114 int SetAnnotationTextDisplayProperties(vtkMRMLAnnotationTextDisplayNode* node, int type, void* data);
00115 int SetAnnotationPointDisplayProperties(vtkMRMLAnnotationPointDisplayNode* node, int type, void* data);
00116 int SetAnnotationLineDisplayProperties(vtkMRMLAnnotationLineDisplayNode* node, int type, void* data);
00117 vtkStdString GetAnnotationTextProperty(vtkMRMLNode* node);
00118 const char* GetAnnotationTextFormatProperty(vtkMRMLNode* node);
00119 double GetAnnotationMeasurement(vtkMRMLNode* node);
00120 int GetNumberOfControlPoints(vtkMRMLNode* mrmlnode);
00121 double* GetAnnotationControlPointsCoordinate(vtkMRMLNode* mrmlnode, vtkIdType coordId);
00122 int SetAnnotationControlPointsCoordinate(vtkMRMLNode* mrmlnode, double* pos, vtkIdType coordId);
00123
00124 int GetAnnotationLinesPropertiesDouble(vtkMRMLNode* node, int type, double &result);
00125 int GetAnnotationLineDisplayPropertiesDouble(vtkMRMLAnnotationLineDisplayNode* node, int type, double& result);
00126 int GetAnnotationControlPointsPropertiesDouble(vtkMRMLAnnotationControlPointsNode* node, int type, double &result);
00127 int GetAnnotationPropertiesDouble(vtkMRMLAnnotationNode* node, int type, double& result);
00128 int GetAnnotationDisplayPropertiesDouble(vtkMRMLAnnotationDisplayNode* node, int type, double& result);
00129 int GetAnnotationTextDisplayPropertiesDouble(vtkMRMLAnnotationTextDisplayNode* node, int type, double& result);
00130 int GetAnnotationPointDisplayPropertiesDouble(vtkMRMLAnnotationPointDisplayNode* node, int type, double& result);
00131
00132 double* GetAnnotationLinesPropertiesColor(vtkMRMLNode* mrmlnode, int type);
00133 double* GetAnnotationLineDisplayPropertiesColor(vtkMRMLAnnotationLineDisplayNode* node, int type);
00134 double* GetAnnotationControlPointsPropertiesColor(vtkMRMLAnnotationControlPointsNode* node, int type);
00135 double* GetAnnotationPropertiesColor(vtkMRMLAnnotationNode* node, int type);
00136 double* GetAnnotationDisplayPropertiesColor(vtkMRMLAnnotationDisplayNode* node, int type);
00137 double* GetAnnotationTextDisplayPropertiesColor(vtkMRMLAnnotationTextDisplayNode* node, int type);
00138 double* GetAnnotationPointDisplayPropertiesColor(vtkMRMLAnnotationPointDisplayNode* node, int type);
00139
00140
00141 void ProcessLogicEvents(vtkObject *caller, unsigned long event, void *callData );
00142 vtkSlicerApplicationGUI* GetApplicationGUI();
00143 vtkImageData* SaveScreenShot();
00144 void SaveMRMLScene();
00145 const char* GetIconName(vtkMRMLNode* node, bool isEdit=false);
00146
00147 void AddRulerNodeObserver(vtkMRMLAnnotationRulerNode* rnode) ;
00148
00149 int TestReceivedMessage;
00150
00151 protected:
00152 vtkSlicermiAnnotationModuleLogic();
00153 ~vtkSlicermiAnnotationModuleLogic();
00154
00155 vtkSlicermiAnnotationModuleLogic(const vtkSlicermiAnnotationModuleLogic&);
00156 void operator=(const vtkSlicermiAnnotationModuleLogic&);
00157
00158
00159 private:
00160 QCTK_DECLARE_PRIVATE(vtkSlicermiAnnotationModuleLogic);
00161
00162
00163 vtkSlicerFiducialListWidget* GetFiducialWidget(const char *nodeID);
00164 void AddFiducialWidget(vtkMRMLAnnotationFiducialNode *cpNode);
00165 void RemoveFiducialWidget(vtkMRMLAnnotationFiducialNode *cpNode);
00166
00167 vtkSlicerAnnotationRulerManager *m_RulerManager;
00168 vtkSlicerAnnotationAngleManager *m_AngleManager;
00169
00170 };
00171
00172 #endif