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