soc-2008-mxcurioni: first version of lib3ds code. It does NOT work yet and has to...
[blender.git] / source / blender / freestyle / intern / scene_graph / ScenePrettyPrinter.h
1 //
2 //  Filename         : ScenePrettyPrinter.h
3 //  Author(s)        : Stephane Grabli, Emmanuel Turquin
4 //  Purpose          : Class to display textual information
5 //                     about a scene graph.
6 //  Date of creation : 26/04/2003
7 //
8 ///////////////////////////////////////////////////////////////////////////////
9
10
11 //
12 //  Copyright (C) : Please refer to the COPYRIGHT file distributed 
13 //   with this source distribution. 
14 //
15 //  This program is free software; you can redistribute it and/or
16 //  modify it under the terms of the GNU General Public License
17 //  as published by the Free Software Foundation; either version 2
18 //  of the License, or (at your option) any later version.
19 //
20 //  This program is distributed in the hope that it will be useful,
21 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
22 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23 //  GNU General Public License for more details.
24 //
25 //  You should have received a copy of the GNU General Public License
26 //  along with this program; if not, write to the Free Software
27 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
28 //
29 ///////////////////////////////////////////////////////////////////////////////
30
31 #ifndef  SCENE_PRETTY_PRINTER_H
32 # define SCENE_PRETTY_PRINTER_H
33
34 # include <iostream>
35 # include <fstream>
36 # include <string>
37 # include "SceneVisitor.h"
38
39 using namespace std;
40
41 class ScenePrettyPrinter : public SceneVisitor
42 {
43 public:
44
45   ScenePrettyPrinter(const string filename = "SceneLog.txt")
46     : SceneVisitor() {
47     if (!filename.empty())
48       _ofs.open(filename.c_str());
49     if (!_ofs.is_open())
50       cerr << "Warning, unable to open file \"" << filename << "\"" << endl;
51     _space = "";
52   }
53
54   virtual ~ScenePrettyPrinter() {
55     if (_ofs.is_open())
56       _ofs.close();
57   }
58
59
60   //
61   // visitClass methods
62   //
63   //////////////////////////////////////////////
64
65   VISIT_DECL(Node)
66   VISIT_DECL(NodeShape)
67   VISIT_DECL(NodeGroup)
68   VISIT_DECL(NodeLight)
69   VISIT_DECL(NodeDrawingStyle)
70   VISIT_DECL(NodeTransform)
71
72   VISIT_DECL(LineRep)
73   VISIT_DECL(OrientedLineRep)
74   VISIT_DECL(TriangleRep)
75   VISIT_DECL(VertexRep)
76   VISIT_DECL(IndexedFaceSet)
77
78   virtual void visitNodeShapeBefore(NodeShape&);
79   virtual void visitNodeShapeAfter(NodeShape&);
80   virtual void visitNodeGroupBefore(NodeGroup&);
81   virtual void visitNodeGroupAfter(NodeGroup&);
82   virtual void visitNodeDrawingStyleBefore(NodeDrawingStyle&);
83   virtual void visitNodeDrawingStyleAfter(NodeDrawingStyle&);
84   virtual void visitNodeTransformBefore(NodeTransform&);
85   virtual void visitNodeTransformAfter(NodeTransform&);
86
87  protected:
88   
89   void increaseSpace()
90   {
91     _space += "  ";
92   }
93
94   void decreaseSpace()
95   {
96     _space.erase(0, 2);
97   }
98
99  private:
100
101   ofstream      _ofs;
102   string        _space;
103 };
104
105 #endif // SCENE_PRETTY_PRINTER_H