!XT (BREAK-16) (Sandbox) Remove double-newlines at the end of files.
[CRYENGINE.git] / Code / Sandbox / Plugins / CryDesigner / UVMappingEditor / UVMappingEditor.h
blobe5287ee07dad24126f19a5952b878d9da0cf4f34
1 // Copyright 2001-2018 Crytek GmbH / Crytek Group. All rights reserved.
3 #pragma once
5 #include <QMainWindow>
6 #include "UVMappingEditorCommon.h"
7 #include "Core/PolygonMesh.h"
8 #include "Objects/DesignerObject.h"
9 #include "BaseTool.h"
10 #include "QViewport.h"
11 #include "Core/UVIsland.h"
12 #include "QViewportEvents.h"
13 #include "UVElement.h"
14 #include "UVCursor.h"
15 #include "UVGizmo.h"
16 #include "Tools/ToolCommon.h"
17 #include "DisplayViewportAdapter.h"
18 #include "QtViewPane.h"
20 class QToolbar;
21 class QToolButton;
22 class QBoxLayout;
23 class QGridLayout;
24 class UVIslandManager;
25 class CAxisHelper;
26 struct SRenderContext;
27 class CBaseObject;
28 class QCheckBox;
30 class QMenuComboBox;
32 namespace Designer
34 class QMaterialComboBox;
35 class Model;
36 class ElementSet;
38 namespace UVMapping
40 enum EPivotType
42 ePivotType_Selection,
43 ePivotType_Cursor
46 class UVMappingEditor : public CDockableWindow, public IEditorNotifyListener, public IGizmoTransform, public IDataBaseManagerListener
48 Q_OBJECT
50 public:
52 UVMappingEditor();
53 ~UVMappingEditor();
55 void OnEditModeChanged(CLevelEditorSharedState::EditMode editMode);
56 void OnEditorNotifyEvent(EEditorNotifyEvent event) override;
57 void OnDataBaseItemEvent(IDataBaseItem* pItem, EDataBaseItemEvent event) override;
58 void OnDesignerNotifyHandler(EDesignerNotify notification, void* param);
60 void ApplyPostProcess(int updateType = ePostProcess_Mesh | ePostProcess_SmoothingGroup);
61 void CompileShelf(ShelfID shelf);
62 void ClearSelection();
63 void ClearSharedSelection();
65 UVElementSetPtr GetElementSet() const { return m_ElementSet; }
66 UVElementSetPtr GetSharedElementSet() const { return m_SharedElementSet; }
67 UVCursorPtr GetUVCursor() const { return m_pUVCursor; }
68 UVIslandManager* GetUVIslandMgr() const;
69 UVGizmoPtr GetGizmo() const { return m_pGizmo; }
70 EPivotType GetPivotType() const;
71 IDisplayViewport* GetViewport() const { return m_pViewportAdapter.get(); }
72 EPlaneAxis GetPlaneAxis() const;
73 bool AllIslandsViewed() const { return m_bViewAllUVIslands; }
74 Model* GetModel() const;
75 ElementSet* GetSelectedElements() const;
76 CBaseObject* GetBaseObject() const;
77 const CCamera* Get3DViewportCamera() const;
79 void SetTool(EUVMappingTool tool);
80 EUVMappingTool GetPrevTool() const { return m_PrevTool; }
81 BaseTool* GetCurrentTool() const;
82 int GetSubMatID() const;
83 void SetSubMatID(int nSubMatID);
84 void SelectUVIslands(const std::vector<UVIslandPtr>& uvIslands);
86 void OnGizmoLMBDown(int mode) override;
87 void OnGizmoLMBUp(int mode) override;
88 void OnTransformGizmo(int mode, const Vec3& offset) override;
90 void UpdateGizmoPos();
91 void UpdateSubMatComboBox();
92 void UpdateSelectionFromDesigner();
93 void UpdateSharedSelection();
95 //////////////////////////////////////////////////////////
96 // CDockableWindow implementation
97 virtual const char* GetPaneTitle() const override { return "UV Mapping"; };
98 virtual IViewPaneClass::EDockingDirection GetDockingDirection() const override { return IViewPaneClass::DOCK_FLOAT; }
99 //////////////////////////////////////////////////////////
101 public slots:
103 void OnRender(const SRenderContext& rc);
104 void OnMouseEvent(const SMouseEvent& me);
105 void OnIdle();
107 void OnTranslation();
108 void OnRotation();
109 void OnScale();
110 void OnUndo();
111 void OnRedo();
112 void OnUnmap();
113 void OnRotateCamera();
114 void OnGoto();
115 void OnSelectAll();
116 void OnUpdateUVIslands();
117 void OnViewAll(bool bViewAll);
119 void OnSubMatSelectionChanged(int nSelectedItem);
121 private:
123 void RenderUnwrappedMesh(SDisplayContext& dc);
124 void RenderUnwrappedPolygon(SDisplayContext & dc, UVIslandPtr pUVIsland, PolygonPtr pPolygon, ColorB);
125 void RenderElements(SDisplayContext& dc, ColorB color, UVElementSetPtr pUVElementSet);
126 void UpdateObject();
127 void OrganizeToolbar(QBoxLayout* pTopLayout);
128 void InitializeMaterialComboBox();
129 void RefreshPolygonsInUVIslands();
130 void CreateTexturePanelMesh();
131 void RegisterMenuButtons(EUVMappingToolGroup what, QGridLayout* where, int columnNumber);
132 void RegisterDesignerNotifyCallback();
134 QViewport* m_pViewport;
135 std::shared_ptr<CDisplayViewportAdapter> m_pViewportAdapter;
136 QMenuComboBox* m_pPivotComboBox;
137 QMenuComboBox* m_pPlaneAxisComboBox;
138 QMaterialComboBox* m_pSubMatComboBox;
139 QToolButton* m_pRotationPushBox;
140 QCheckBox* m_pViewAllCheckBox;
142 std::map<EGizmoMode, QAction*> m_TransformActions;
143 std::map<EUVMappingTool, QToolButton*> m_pButtons;
145 _smart_ptr<PolygonMesh> m_pMaterialMesh;
146 _smart_ptr<DesignerObject> m_pObject;
148 EUVMappingTool m_Tool;
149 EUVMappingTool m_PrevTool;
150 EPivotType m_PrevPivotType;
151 std::map<EUVMappingTool, _smart_ptr<BaseTool>> m_ToolMap;
153 bool m_bLButtonDown;
154 bool m_bHitGizmo;
155 float m_CameraZAngle;
156 bool m_bViewAllUVIslands;
158 UVElementSetPtr m_ElementSet;
159 UVElementSetPtr m_SharedElementSet;
160 UVCursorPtr m_pUVCursor;
161 UVGizmoPtr m_pGizmo;
164 UVMappingEditor* GetUVEditor();