1 // Copyright 2001-2018 Crytek GmbH / Crytek Group. All rights reserved.
6 #include "UVMappingEditorCommon.h"
7 #include "Core/PolygonMesh.h"
8 #include "Objects/DesignerObject.h"
10 #include "QViewport.h"
11 #include "Core/UVIsland.h"
12 #include "QViewportEvents.h"
13 #include "UVElement.h"
16 #include "Tools/ToolCommon.h"
17 #include "DisplayViewportAdapter.h"
18 #include "QtViewPane.h"
24 class UVIslandManager
;
26 struct SRenderContext
;
34 class QMaterialComboBox
;
46 class UVMappingEditor
: public CDockableWindow
, public IEditorNotifyListener
, public IGizmoTransform
, public IDataBaseManagerListener
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 //////////////////////////////////////////////////////////
103 void OnRender(const SRenderContext
& rc
);
104 void OnMouseEvent(const SMouseEvent
& me
);
107 void OnTranslation();
113 void OnRotateCamera();
116 void OnUpdateUVIslands();
117 void OnViewAll(bool bViewAll
);
119 void OnSubMatSelectionChanged(int nSelectedItem
);
123 void RenderUnwrappedMesh(SDisplayContext
& dc
);
124 void RenderUnwrappedPolygon(SDisplayContext
& dc
, UVIslandPtr pUVIsland
, PolygonPtr pPolygon
, ColorB
);
125 void RenderElements(SDisplayContext
& dc
, ColorB color
, UVElementSetPtr pUVElementSet
);
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
;
155 float m_CameraZAngle
;
156 bool m_bViewAllUVIslands
;
158 UVElementSetPtr m_ElementSet
;
159 UVElementSetPtr m_SharedElementSet
;
160 UVCursorPtr m_pUVCursor
;
164 UVMappingEditor
* GetUVEditor();