source: GTP/trunk/Lib/Vis/Preprocessing/src/X3dParserXerces.h @ 801

Revision 801, 8.1 KB checked in by mattausch, 19 years ago (diff)

debug version for testing subdivision

RevLine 
[180]1#ifndef _X3D_PARSER_XERCES__H
2#define _X3D_PARSER_XERCES__H
3
4// ---------------------------------------------------------------------------
5//  Includes
6// ---------------------------------------------------------------------------
7#include <xercesc/sax/HandlerBase.hpp>
[261]8#include "Mesh.h"
[712]9#include <stack>
[180]10
11XERCES_CPP_NAMESPACE_USE
12XERCES_CPP_NAMESPACE_BEGIN
13class AttributeList;
14XERCES_CPP_NAMESPACE_END
15
16class SceneGraphNode;
17class Mesh;
18class Material;
[439]19class ViewCellsManager;
[180]20
[752]21struct ltstr
22{
23  bool operator()(const string &s1, const string &s2) const
24  {
25    return s1 < s2;
26  }
27};
28
29typedef map<string, Mesh *, ltstr> MeshDefinitions;
30typedef map<string, Material *, ltstr> MaterialDefinitions;
31
[180]32class X3dParseHandlers : public HandlerBase
33{
34public:
35  // -----------------------------------------------------------------------
36  //  Constructors and Destructor
37  // -----------------------------------------------------------------------
[657]38  X3dParseHandlers(SceneGraphNode *root, const bool loadPolygonsAsMeshes = false);
[180]39  ~X3dParseHandlers();
40 
41 
42  // -----------------------------------------------------------------------
43  //  Getter methods
44  // -----------------------------------------------------------------------
45  unsigned int GetElementCount()
46  {
47    return mElementCount;
48  }
49 
50  unsigned int GetAttrCount()
51  {
52    return mAttrCount;
53  }
54 
55  unsigned int GetCharacterCount()
56  {
57    return mCharacterCount;
58  }
59 
60  unsigned int GetSpaceCount()
61  {
62    return mSpaceCount;
63  }
64
65
66  // -----------------------------------------------------------------------
67  //  Handlers for the SAX DocumentHandler interface
68  // -----------------------------------------------------------------------
69  void endElement(const XMLCh* const name);
70  void startElement(const XMLCh* const name, AttributeList& attributes);
71  void characters(const XMLCh* const chars, const unsigned int length);
72  void ignorableWhitespace(const XMLCh* const chars, const unsigned int length);
73  void resetDocument();
74
75  SceneGraphNode *mCurrentNode;
76  Mesh *mCurrentMesh;
[658]77  vector<VertexIndexContainer> mCurrentVertexIndices;
78  VertexContainer mCurrentVertices;
[752]79  string mCurrentMeshName;
[658]80
[180]81  Material *mCurrentMaterial;
[752]82 
[657]83  bool mLoadPolygonsAsMeshes;
[490]84
[712]85  typedef stack<Matrix4x4> TrafoStack;
86
[752]87  bool mUsingMeshDefinition;
[712]88  // stack of accumulated transformations
89  TrafoStack mTransformations;
90
[752]91  MaterialDefinitions mMaterialDefinitions;
92  MeshDefinitions mMeshDefinitions;
93
[801]94  // TODO: for storing meshes
95  MeshContainer *mMeshes;
[752]96  bool mIsMeshDefinition;
[180]97  // Handlers for X3D
98  void
99  StartIndexedFaceSet(
100                      AttributeList&  attributes);
101 
102  void
103  EndShape();
104
[712]105  void EndTransform();
106  void StartTransform(AttributeList&  attributes);
107
[180]108  void
109  StartCoordinate(
110                  AttributeList&  attributes);
111
112  void
113  StartMaterial(
114                AttributeList&  attributes);
115 
[712]116  /// applies transformation m to this mesh
117  void ApplyTransformation(Mesh *mesh, const Matrix4x4 &m) const;
118
119  /// transforms mesh using the given transformations
120  void ApplyTransformations(TrafoStack trafos, Mesh *mesh) const;
121
122
[180]123  // -----------------------------------------------------------------------
124  //  Handlers for the SAX ErrorHandler interface
125  // -----------------------------------------------------------------------
126  void warning(const SAXParseException& exc);
127  void error(const SAXParseException& exc);
128  void fatalError(const SAXParseException& exc);
129 
130 
131private:
132  // -----------------------------------------------------------------------
133  //  Private data members
134  //
135  //  fAttrCount
136  //  fCharacterCount
137  //  fElementCount
138  //  fSpaceCount
139  //      These are just counters that are run upwards based on the input
140  //      from the document handlers.
141  // -----------------------------------------------------------------------
142  unsigned int    mAttrCount;
143  unsigned int    mCharacterCount;
144  unsigned int    mElementCount;
145  unsigned int    mSpaceCount;
146};
147
[260]148/** Parser handlers for view cell x3d files.
149*/
150class X3dViewCellsParseHandlers : public HandlerBase
151{
152public:
153  // -----------------------------------------------------------------------
154  //  Constructors and Destructor
155  // -----------------------------------------------------------------------
[439]156  X3dViewCellsParseHandlers(ViewCellsManager *viewCellsManager,
[657]157                                                        const float viewCellHeight);
[260]158  ~X3dViewCellsParseHandlers();
159 
160 
161  // -----------------------------------------------------------------------
162  //  Getter methods
163  // -----------------------------------------------------------------------
164  unsigned int GetElementCount()
165  {
166    return mElementCount;
167  }
168 
169  unsigned int GetAttrCount()
170  {
171    return mAttrCount;
172  }
173 
174  unsigned int GetCharacterCount()
175  {
176    return mCharacterCount;
177  }
178 
179  unsigned int GetSpaceCount()
180  {
181    return mSpaceCount;
182  }
[180]183
[260]184
185  // -----------------------------------------------------------------------
186  //  Handlers for the SAX DocumentHandler interface
187  // -----------------------------------------------------------------------
188  void endElement(const XMLCh* const name);
189  void startElement(const XMLCh* const name, AttributeList& attributes);
190  void characters(const XMLCh* const chars, const unsigned int length);
191  void ignorableWhitespace(const XMLCh* const chars, const unsigned int length);
192  void resetDocument();
193
[439]194  ViewCellsManager *mViewCellsManager;
[312]195  float mViewCellHeight;
[657]196 
[312]197
[261]198  VertexIndexContainer mCurrentVertexIndices;
[658]199 
[260]200  // Handlers for X3D
201  void
202  StartIndexedFaceSet(
203                      AttributeList&  attributes);
204 
205  void
206  EndShape();
207
208  void
209  StartCoordinate(
210                  AttributeList&  attributes);
211
212  void
213  StartMaterial(
214                AttributeList&  attributes);
215 
216 
217  // -----------------------------------------------------------------------
218  //  Handlers for the SAX ErrorHandler interface
219  // -----------------------------------------------------------------------
220  void warning(const SAXParseException& exc);
221  void error(const SAXParseException& exc);
222  void fatalError(const SAXParseException& exc);
223 
224 
225private:
226  // -----------------------------------------------------------------------
227  //  Private data members
228  //
229  //  fAttrCount
230  //  fCharacterCount
231  //  fElementCount
232  //  fSpaceCount
233  //      These are just counters that are run upwards based on the input
234  //      from the document handlers.
235  // -----------------------------------------------------------------------
236  unsigned int    mAttrCount;
237  unsigned int    mCharacterCount;
238  unsigned int    mElementCount;
239  unsigned int    mSpaceCount;
240};
241
242
[180]243// ---------------------------------------------------------------------------
244//  This is a simple class that lets us do easy (though not terribly efficient)
245//  trancoding of XMLCh data to local code page for display.
246// ---------------------------------------------------------------------------
247class StrX
248{
249public :
250  // -----------------------------------------------------------------------
251  //  Constructors and Destructor
252  // -----------------------------------------------------------------------
253  StrX(const XMLCh* const toTranscode)
254  {
255    // Call the private transcoding method
256    mLocalForm = XMLString::transcode(toTranscode);
257  }
258 
259  ~StrX()
260  {
261    XMLString::release(&mLocalForm);
262  }
263 
264  // -----------------------------------------------------------------------
265  //  Getter methods
266  // -----------------------------------------------------------------------
267  const char* LocalForm() const
268  {
269    return mLocalForm;
270  }
271 
272private :
273  // -----------------------------------------------------------------------
274  //  Private data members
275  //
276  //  fLocalForm
277  //      This is the local code page form of the string.
278  // -----------------------------------------------------------------------
279  char*   mLocalForm;
280};
281
282inline XERCES_STD_QUALIFIER ostream&
283operator<<(XERCES_STD_QUALIFIER ostream& target, const StrX& toDump)
284{
285  target << toDump.LocalForm();
286  return target;
287}
288
289#endif
Note: See TracBrowser for help on using the repository browser.