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_MapFacade 21 #define TrenchBroom_MapFacade 22 23 #include "Assets/AssetTypes.h" 24 #include "Model/EntityColor.h" 25 #include "Model/ModelTypes.h" 26 27 namespace TrenchBroom { 28 namespace Model { 29 class BrushFaceAttributes; 30 class ChangeBrushFaceAttributesRequest; 31 class NodeCollection; 32 33 class MapFacade { 34 public: 35 virtual ~MapFacade(); 36 public: // selection 37 virtual bool hasSelection() const = 0; 38 virtual bool hasSelectedNodes() const = 0; 39 virtual bool hasSelectedBrushFaces() const = 0; 40 41 virtual const AttributableNodeList allSelectedAttributableNodes() const = 0; 42 virtual const NodeCollection& selectedNodes() const = 0; 43 virtual const BrushFaceList allSelectedBrushFaces() const = 0; 44 virtual const BrushFaceList& selectedBrushFaces() const = 0; 45 46 virtual const BBox3& referenceBounds() const = 0; 47 virtual const BBox3& lastSelectionBounds() const = 0; 48 virtual const BBox3& selectionBounds() const = 0; 49 virtual const String& currentTextureName() const = 0; 50 51 virtual void selectAllNodes() = 0; 52 virtual void selectSiblings() = 0; 53 virtual void selectTouching(bool del) = 0; 54 virtual void selectInside(bool del) = 0; 55 virtual void selectNodesWithFilePosition(const std::vector<size_t>& positions) = 0; 56 virtual void select(const NodeList& nodes) = 0; 57 virtual void select(Node* node) = 0; 58 virtual void select(const BrushFaceList& faces) = 0; 59 virtual void select(BrushFace* face) = 0; 60 virtual void convertToFaceSelection() = 0; 61 62 virtual void deselectAll() = 0; 63 virtual void deselect(Node* node) = 0; 64 virtual void deselect(const NodeList& nodes) = 0; 65 virtual void deselect(BrushFace* face) = 0; 66 public: // adding, removing, reparenting, and duplicating nodes 67 virtual void addNode(Node* node, Node* parent) = 0; 68 virtual void removeNode(Node* node) = 0; 69 70 virtual NodeList addNodes(const ParentChildrenMap& nodes) = 0; 71 virtual void removeNodes(const NodeList& nodes) = 0; 72 73 virtual void reparentNodes(Node* newParent, const NodeList& children) = 0; 74 virtual void reparentNodes(const ParentChildrenMap& nodes) = 0; 75 virtual bool deleteObjects() = 0; 76 virtual bool duplicateObjects() = 0; 77 public: // modifying transient node attributes 78 virtual void hide(const Model::NodeList nodes) = 0; 79 virtual void show(const Model::NodeList& nodes) = 0; 80 virtual void resetVisibility(const Model::NodeList& nodes) = 0; 81 82 virtual void lock(const Model::NodeList& nodes) = 0; 83 virtual void unlock(const Model::NodeList& nodes) = 0; 84 virtual void resetLock(const Model::NodeList& nodes) = 0; 85 public: // modifying objects 86 virtual bool translateObjects(const Vec3& delta) = 0; 87 virtual bool rotateObjects(const Vec3& center, const Vec3& axis, FloatType angle) = 0; 88 virtual bool flipObjects(const Vec3& center, Math::Axis::Type axis) = 0; 89 public: // modifying entity attributes 90 virtual bool setAttribute(const AttributeName& name, const AttributeValue& value) = 0; 91 virtual bool renameAttribute(const AttributeName& oldName, const AttributeName& newName) = 0; 92 virtual bool removeAttribute(const AttributeName& name) = 0; 93 94 virtual bool convertEntityColorRange(const AttributeName& name, Assets::ColorRange::Type range) = 0; 95 public: // brush resizing 96 virtual bool resizeBrushes(const BrushFaceList& faces, const Vec3& delta) = 0; 97 public: // modifying face attributes 98 virtual bool setTexture(Assets::Texture* texture) = 0; 99 virtual bool setFaceAttributes(const BrushFaceAttributes& attributes) = 0; 100 virtual bool setFaceAttributes(const ChangeBrushFaceAttributesRequest& request) = 0; 101 virtual bool moveTextures(const Vec3f& cameraUp, const Vec3f& cameraRight, const Vec2f& delta) = 0; 102 virtual bool rotateTextures(float angle) = 0; 103 virtual bool shearTextures(const Vec2f& factors) = 0; 104 public: // modifying vertices 105 virtual void rebuildBrushGeometry(const BrushList& brushes) = 0; 106 bool snapVertices(size_t snapTo); 107 virtual bool snapVertices(const VertexToBrushesMap& vertices, size_t snapTo) = 0; 108 virtual bool findPlanePoints() = 0; 109 110 struct MoveVerticesResult { 111 bool success; 112 bool hasRemainingVertices; 113 MoveVerticesResult(bool i_success, bool i_hasRemainingVertices); 114 }; 115 116 virtual MoveVerticesResult moveVertices(const VertexToBrushesMap& vertices, const Vec3& delta) = 0; 117 virtual bool moveEdges(const VertexToEdgesMap& edges, const Vec3& delta) = 0; 118 virtual bool moveFaces(const VertexToFacesMap& faces, const Vec3& delta) = 0; 119 virtual bool splitEdges(const VertexToEdgesMap& edges, const Vec3& delta) = 0; 120 virtual bool splitFaces(const VertexToFacesMap& faces, const Vec3& delta) = 0; 121 }; 122 123 class PushSelection { 124 private: 125 MapFacade* m_facade; 126 NodeList m_nodes; 127 BrushFaceList m_faces; 128 public: 129 PushSelection(MapFacade* facade); 130 ~PushSelection(); 131 }; 132 } 133 } 134 135 #endif /* defined(TrenchBroom_MapFacade) */ 136