Pioneer
Loading...
Searching...
No Matches
ModelViewerWidget.h
Go to the documentation of this file.
1// Copyright © 2008-2024 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#pragma once
5
6#include "ViewportWindow.h"
7
8#include "Color.h"
9#include "Input.h"
10#include "core/Log.h"
11
12#include "vector2.h"
13#include "vector3.h"
14#include "matrix3x3.h"
15#include "matrix4x4.h"
16
17#include <string_view>
18
19class NavLights;
20
21namespace SceneGraph {
22 class Model;
23 class Animation;
24}
25
26namespace Graphics {
27 class MeshObject;
28 class Material;
29
30 namespace Drawables {
31 class GridLines;
32 }
33}
34
35namespace Editor
36{
37 using UIDelegate = sigc::signal<void>;
38
40 public:
41 struct Options {
44 bool hideUI;
45
49
56
58
59 uint32_t lightPreset;
60 };
61
62 enum class CameraPreset : uint8_t {
63 Front,
64 Back,
65 Left,
66 Right,
67 Top,
68 Bottom
69 };
70
71 public:
74
75 bool LoadModel(std::string_view path);
76 void ClearModel();
77
78 void OnAppearing() override;
79 void OnDisappearing() override;
80
81 void SetDecals(std::string_view decalPath);
82 void SetRandomColors();
83
84 const char *GetWindowName() override;
85
86 Options &GetOptions() { return m_options; }
87
89
90 const matrix4x4f &GetModelViewMat() const { return m_modelViewMat; }
91
92 // Extend to render in-world using Graphics::Renderer
94 // Extend to render on top of the viewport surface using ImDrawList
96 // Extend to add additional viewport menu buttons
98 // Extend to add additional viewport control widgets
100
101 protected:
102
103 void OnUpdate(float deltaTime) override;
104 void OnRender(Graphics::Renderer *r) override;
105 void OnHandleInput(bool clicked, bool released, ImVec2 mousePos) override;
106 void OnDraw() override;
107
108 bool OnCloseRequested() override { return true; };
109
114
115 private:
116 struct Inputs : Input::InputFrame {
117 using InputFrame::InputFrame;
118
119 Axis *moveForward;
120 Axis *moveLeft;
121 Axis *moveUp;
122 Axis *zoomAxis;
123
124 Axis *rotateViewLeft;
125 Axis *rotateViewUp;
126
127 Action *viewTop;
128 Action *viewLeft;
129 Action *viewFront;
130 } m_bindings;
131
132 // Initialization
133 void SetupInputAxes();
134 void CreateTestResources();
135 void OnModelLoaded();
136
137 // Input controls
138 void ChangeCameraPreset(CameraPreset preset);
139 void ToggleViewControlMode();
140 void ResetCamera();
141 void HandleCameraInput(float deltaTime);
142
143 // Interface drawing
144 void DrawMenus();
145 void DrawViewportControls();
146
147 // Viewport rendering
148 void UpdateCamera();
149 void UpdateLights();
150 void DrawBackground();
151 void DrawModel(matrix4x4f modelViewMat);
152 void DrawGrid(Graphics::Renderer *r, float clipRadius);
153
154 Input::Manager *m_input;
155 Graphics::Renderer *m_renderer;
156
157 std::unique_ptr<SceneGraph::Model> m_model;
158 std::unique_ptr<NavLights> m_navLights;
159
160 std::unique_ptr<Graphics::MeshObject> m_bgMesh;
161 std::unique_ptr<Graphics::Material> m_bgMaterial;
162
163 std::unique_ptr<Graphics::Drawables::GridLines> m_gridLines;
164 std::unique_ptr<SceneGraph::Model> m_scaleModel;
165
166 std::vector<SceneGraph::Animation *> m_animations;
167 SceneGraph::Animation *m_currentAnimation = nullptr;
168
169 bool m_modelSupportsPatterns = false;
170 std::vector<std::string> m_patterns;
171 uint32_t m_currentPattern = 0;
172
173 Graphics::Texture *m_decalTexture;
174
175 Options m_options;
176
177 // Model pattern colors
178 std::vector<Color> m_colors;
179
180 std::string m_windowName;
181 std::string m_windowID;
182
183 float m_baseDistance;
184 float m_gridDistance;
185 float m_landingMinOffset;
186 float m_zoom;
187 vector2f m_rot;
188 vector3f m_viewPos;
189 matrix3x3f m_viewRot;
190 matrix4x4f m_modelViewMat;
191 };
192}
Definition: EditorApp.h:20
Definition: ModelViewerWidget.h:39
const matrix4x4f & GetModelViewMat() const
Definition: ModelViewerWidget.h:90
UIDelegate & GetUIExtViewportControls()
Definition: ModelViewerWidget.h:99
void OnHandleInput(bool clicked, bool released, ImVec2 mousePos) override
Definition: ModelViewerWidget.cpp:289
SceneGraph::Model * GetModel()
Definition: ModelViewerWidget.cpp:85
void OnDisappearing() override
Definition: ModelViewerWidget.cpp:284
void OnDraw() override
Definition: ModelViewerWidget.cpp:642
void OnAppearing() override
Definition: ModelViewerWidget.cpp:279
void OnUpdate(float deltaTime) override
Definition: ModelViewerWidget.cpp:446
UIDelegate & GetUIExtMenu()
Definition: ModelViewerWidget.h:97
CameraPreset
Definition: ModelViewerWidget.h:62
void OnRender(Graphics::Renderer *r) override
Definition: ModelViewerWidget.cpp:470
Options & GetOptions()
Definition: ModelViewerWidget.h:86
void ClearModel()
Definition: ModelViewerWidget.cpp:152
const char * GetWindowName() override
Definition: ModelViewerWidget.cpp:224
~ModelViewerWidget()
Definition: ModelViewerWidget.cpp:82
bool OnCloseRequested() override
Definition: ModelViewerWidget.h:108
UIDelegate m_extOverlay
Definition: ModelViewerWidget.h:111
UIDelegate & GetUIExtPostRender()
Definition: ModelViewerWidget.h:93
UIDelegate & GetUIExtOverlay()
Definition: ModelViewerWidget.h:95
void SetDecals(std::string_view decalPath)
Definition: ModelViewerWidget.cpp:196
UIDelegate m_extPostRender
Definition: ModelViewerWidget.h:110
bool LoadModel(std::string_view path)
Definition: ModelViewerWidget.cpp:90
UIDelegate m_extMenus
Definition: ModelViewerWidget.h:112
void SetRandomColors()
Definition: ModelViewerWidget.cpp:210
UIDelegate m_extViewportControls
Definition: ModelViewerWidget.h:113
Definition: ViewportWindow.h:21
Definition: Renderer.h:45
Definition: Texture.h:103
Definition: Input.h:124
Definition: NavLights.h:21
Definition: Animation.h:19
Definition: Model.h:87
Definition: ActionBinder.h:14
sigc::signal< void > UIDelegate
Definition: ModelViewerWidget.h:37
Definition: Background.h:14
Definition: CityOnPlanet.h:32
Definition: ModelViewerWidget.h:41
bool showCollMesh
Definition: ModelViewerWidget.h:51
bool showTags
Definition: ModelViewerWidget.h:52
bool showGrid
Definition: ModelViewerWidget.h:46
bool wireframe
Definition: ModelViewerWidget.h:55
bool showDockingLocators
Definition: ModelViewerWidget.h:53
bool showLandingPad
Definition: ModelViewerWidget.h:57
bool showAabb
Definition: ModelViewerWidget.h:50
bool mouselookEnabled
Definition: ModelViewerWidget.h:43
bool hideUI
Definition: ModelViewerWidget.h:44
uint32_t lightPreset
Definition: ModelViewerWidget.h:59
bool showGeomBBox
Definition: ModelViewerWidget.h:54
float gridInterval
Definition: ModelViewerWidget.h:48
bool showVerticalGrids
Definition: ModelViewerWidget.h:47
bool orthoView
Definition: ModelViewerWidget.h:42
Definition: Input.h:48
InputBindings::Action Action
Definition: Input.h:50
InputBindings::Axis Axis
Definition: Input.h:49