Choreonoid  1.1
VrmlWriter.h
説明を見る。
1 
6 #ifndef CNOID_UTIL_VRML_WRITER_INCLUDED
7 #define CNOID_UTIL_VRML_WRITER_INCLUDED
8 
9 #include "VrmlNodes.h"
10 #include <map>
11 #include <string>
12 #include <ostream>
13 #include "exportdecl.h"
14 
15 namespace cnoid {
16 
17  class VrmlWriter;
18 
20  {
21  public:
22  VrmlWriter(std::ostream& out);
23 
24  void writeHeader();
25  bool writeNode(VrmlNodePtr node);
26 
27  struct TIndent {
28  void clear() { n = 0; spaces.resize(n); }
29  inline TIndent& operator++() { n += 2; spaces.resize(n, ' '); return *this; }
30  inline TIndent& operator--() {
31  n -= 2;
32  if(n < 0) { n = 0; }
33  spaces.resize(n, ' '); return *this;
34  }
35  std::string spaces;
36  int n;
37  };
38 
39  private:
40  std::ostream& out;
41 
42  TIndent indent;
43 
44  void registerNodeMethodMap();
45  template <class MFValues> void writeMFValues(MFValues values, int numColumn);
46  void writeMFInt32SeparatedByMinusValue(MFInt32& values);
47  void writeNodeIter(VrmlNodePtr node);
48  void beginNode(const char* nodename, VrmlNodePtr node);
49  void endNode();
50  void writeGroupNode(VrmlNodePtr node);
51  void writeGroupFields(VrmlGroupPtr group);
52  void writeTransformNode(VrmlNodePtr node);
53  void writeShapeNode(VrmlNodePtr node);
54  void writeAppearanceNode(VrmlAppearancePtr appearance);
55  void writeMaterialNode(VrmlMaterialPtr material);
56  void writeIndexedFaceSetNode(VrmlNodePtr node);
57  void writeCoordinateNode(VrmlCoordinatePtr coord);
58 
59  };
60 
61 };
62 
63 
64 #endif