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 #include "CreateBrushToolBase.h"
21 #include "Polyhedron.h"
22 #include "PreferenceManager.h"
23 #include "Preferences.h"
24 #include "Model/Brush.h"
25 #include "Model/BrushBuilder.h"
26 #include "Model/Layer.h"
27 #include "Model/World.h"
28 #include "Renderer/BrushRenderer.h"
29 #include "Renderer/RenderService.h"
30 #include "Renderer/SelectionBoundsRenderer.h"
31 #include "View/MapDocument.h"
32 
33 namespace TrenchBroom {
34     namespace View {
CreateBrushToolBase(const bool initiallyActive,MapDocumentWPtr document)35         CreateBrushToolBase::CreateBrushToolBase(const bool initiallyActive, MapDocumentWPtr document) :
36         Tool(initiallyActive),
37         m_document(document),
38         m_brush(NULL),
39         m_brushRenderer(new Renderer::BrushRenderer(false)) {}
40 
~CreateBrushToolBase()41         CreateBrushToolBase::~CreateBrushToolBase() {
42             delete m_brushRenderer;
43             delete m_brush;
44         }
45 
grid() const46         const Grid& CreateBrushToolBase::grid() const {
47             return lock(m_document)->grid();
48         }
49 
createBrush()50         void CreateBrushToolBase::createBrush() {
51             if (m_brush != NULL) {
52                 MapDocumentSPtr document = lock(m_document);
53                 const Transaction transaction(document, "Create Brush");
54                 document->deselectAll();
55                 document->addNode(m_brush, document->currentParent());
56                 document->select(m_brush);
57                 m_brush = NULL;
58                 doBrushWasCreated();
59             }
60         }
61 
cancel()62         void CreateBrushToolBase::cancel() {
63             delete m_brush;
64             m_brush = NULL;
65         }
66 
render(Renderer::RenderContext & renderContext,Renderer::RenderBatch & renderBatch)67         void CreateBrushToolBase::render(Renderer::RenderContext& renderContext, Renderer::RenderBatch& renderBatch) {
68             if (m_brush != NULL)
69                 renderBrush(renderContext, renderBatch);
70 
71         }
72 
renderBrush(Renderer::RenderContext & renderContext,Renderer::RenderBatch & renderBatch)73         void CreateBrushToolBase::renderBrush(Renderer::RenderContext& renderContext, Renderer::RenderBatch& renderBatch) {
74             assert(m_brush != NULL);
75 
76             m_brushRenderer->setFaceColor(pref(Preferences::FaceColor));
77             m_brushRenderer->setEdgeColor(pref(Preferences::SelectedEdgeColor));
78             m_brushRenderer->setShowEdges(true);
79             m_brushRenderer->setShowOccludedEdges(true);
80             m_brushRenderer->setOccludedEdgeColor(pref(Preferences::OccludedSelectedEdgeColor));
81             m_brushRenderer->setTint(true);
82             m_brushRenderer->setTintColor(pref(Preferences::SelectedFaceColor));
83             m_brushRenderer->setTransparencyAlpha(0.7f);
84 
85             m_brushRenderer->setBrushes(Model::BrushList(1, m_brush));
86             m_brushRenderer->render(renderContext, renderBatch);
87 
88             Renderer::SelectionBoundsRenderer boundsRenderer(m_brush->bounds());
89             boundsRenderer.render(renderContext, renderBatch);
90         }
91 
updateBrush(Model::Brush * brush)92         void CreateBrushToolBase::updateBrush(Model::Brush* brush) {
93             delete m_brush;
94             m_brush = brush;
95         }
96 
doBrushWasCreated()97         void CreateBrushToolBase::doBrushWasCreated() {}
98     }
99 }
100