]> Creatis software - creaContours.git/blob - lib/kernel_ManagerContour_NDimensions/ParserOsirix/OsirixParser.h
Parser Osirix
[creaContours.git] / lib / kernel_ManagerContour_NDimensions / ParserOsirix / OsirixParser.h
1 #ifndef __OsirixParser__
2 #define __OsirixParser__
3
4
5 #if defined(_WIN32)
6 #include "Windows.h"
7   #ifdef kernelParserOsirix_BUILD_SHARED
8     #define kernelParserOsirix_EXPORT __declspec( dllexport )
9   #else
10     #define kernelParserOsirix_EXPORT __declspec( dllimport )
11   #endif
12   #define kernelParserOsirix_CDECL __cdecl
13 #else
14   #define kernelParserOsirix_EXPORT
15   #define kernelParserOsirix_CDECL
16 #endif // defined(_WIN32)
17
18 //------------------------------------------------------------------------------------------------------------
19 // Includes
20 //------------------------------------------------------------------------------------------------------------
21
22 #include <iostream>
23 #include <vector>
24 #include <map>
25 #include <xercesc/parsers/XercesDOMParser.hpp>
26 #include <xercesc/dom/DOM.hpp>
27 #include <xercesc/dom/DOMErrorHandler.hpp>
28 #include <xercesc/dom/DOMLocator.hpp>
29 #include <xercesc/sax/HandlerBase.hpp>
30 #include <xercesc/util/XMLString.hpp>
31 #include <xercesc/util/PlatformUtils.hpp>
32
33
34 using namespace std;
35 using namespace xercesc;
36
37
38
39 class OsirixParser{
40
41 //------------------------------------------------------------------------------------------------------------
42 // Constructors & Destructors
43 //------------------------------------------------------------------------------------------------------------
44 public:
45
46         /**
47         ** Constructor for the parser, with the information of the pixel spacing and image dimensions
48         **/
49         OsirixParser(std::string xsdfile = "", double* spacing = NULL, int* extent = NULL);
50         /**
51         ** Desctructor by defect
52         **/
53         ~OsirixParser();        
54
55         int ParseFile(const char* xmlfile);
56         
57         
58         std::string getErrorLine();
59
60         std::string getContoursFileName();
61
62 private:
63
64         std::string schema;
65
66         std::string errorline;  
67
68         int _imageindex;
69
70         const char* OSIRIX_DICT;
71         const char* OSIRIX_KEY;
72         const char* OSIRIX_IMAGES;
73         const char* OSIRIX_ARRAY;
74         const char* OSIRIX_IMAGEINDEX;
75         const char* OSIRIX_INTEGER;
76         const char* OSIRIX_NUMBEROFROIS;
77         const char* OSIRIX_ROIS;
78         const char* OSIRIX_POINT_MM;
79         const char* OSIRIX_POINT_PX;
80         const char* OSIRIX_STRING;              
81         
82         const char* CREACONTOUR;
83         const char* CREACONTOUR_VERSION;
84         const char* CREACONTOUR_IMAGEDIMENSIONS;
85         const char* CREACONTOUR_IMAGESPACING;
86         const char* CREACONTOUR_NUMBEROFCONTOURS;
87
88         const char* CREACONTOUR_INSTANT;
89         const char* CREACONTOUR_TYPEMODEL;
90         const char* CREACONTOUR_NUMBEROFCONTROLPOINTS;
91         const char* CREACONTOUR_TYPEVIEW;       
92         
93         const char* CREACONTOUR_NUMBEROFCONTOURSSTATIC;
94
95         std::string TEMPIMPORTOSIRIXFILE;
96
97         double _spacing[3];
98         int _extent[6];
99
100         typedef vector<vector<double>> vectorXYZ;
101         std::map<int, vectorXYZ> contoursmapMM; 
102         std::map<int, vectorXYZ> contoursmapPX;
103
104         void saveCreaContoursFormat();
105
106         void writeHeader(FILE* pFile);
107         void writeContours(FILE* pFile);
108         void writeContoursStatic(FILE* pFile);
109
110         void setErrorLine(DOMNodeList* list);   
111
112         void getUserData(DOMElement* element);  
113
114         void getData(DOMNodeList* list, std::vector<std::string>& vect, std::string tagname);
115
116         DOMNode* getLastNode(DOMNodeList* list);
117
118         void parseOSIRIX_DICT(DOMNodeList* list);
119         void parseOSIRIX_POINT_MM(DOMNodeList* list);
120         void parseOSIRIX_POINT_PX(DOMNodeList* list);
121
122         
123
124         
125 };
126
127 class OsirixParserErrorHandler : public ErrorHandler{
128
129 //------------------------------------------------------------------------------------------------------------
130 // Constructors & Destructors
131 //------------------------------------------------------------------------------------------------------------
132 public:
133
134         /**
135         ** Default Constructor
136         **/
137         OsirixParserErrorHandler();
138         /**
139         ** Desctructor by defect
140         **/
141         ~OsirixParserErrorHandler();    
142
143         virtual void    warning (const SAXParseException &exc);         
144
145         virtual void    error (const SAXParseException &exc);           
146
147         virtual void    fatalError (const SAXParseException &exc);              
148
149         virtual void    resetErrors ();
150
151         std::string getErrorMsg();
152
153 private:
154
155         
156         std::string errormsg;
157
158         
159
160         
161         
162 };
163 #endif