1 /*
2  Copyright (C) 2010-2014 Kristian Duske
3 
4  This file is part of TrenchBroom.
5 
6  TrenchBroom is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  TrenchBroom is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with TrenchBroom. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef TrenchBroom_NodeWriter
21 #define TrenchBroom_NodeWriter
22 
23 #include "IO/NodeSerializer.h"
24 #include "Model/MapFormat.h"
25 #include "Model/ModelTypes.h"
26 
27 #include <cstdio>
28 
29 namespace TrenchBroom {
30     namespace IO {
31         class Path;
32         class NodeSerializer;
33 
34         class NodeWriter {
35         private:
36             typedef std::map<Model::Entity*, Model::BrushList> EntityBrushesMap;
37             class CollectEntityBrushesStrategy;
38             class WriteNode;
39 
40             Model::World* m_world;
41             NodeSerializer::Ptr m_serializer;
42         public:
43             NodeWriter(Model::World* world, FILE* stream);
44             NodeWriter(Model::World* world, std::ostream& stream);
45 
46             void writeMap();
47         private:
48             void writeDefaultLayer();
49             void writeCustomLayers();
50             void writeCustomLayer(Model::Layer* layer);
51         public:
52             void writeNodes(const Model::NodeList& nodes);
53         private:
54             void writeWorldBrushes(const Model::BrushList& brushes);
55             void writeEntityBrushes(const EntityBrushesMap& entityBrushes);
56         public:
57             void writeBrushFaces(const Model::BrushFaceList& faces);
58         };
59     }
60 }
61 
62 #endif /* defined(TrenchBroom_NodeWriter) */
63