SDFormat Editor
Loading...
Searching...
No Matches
model_viewer.h
1/*
2* sdformat-editor
3* Copyright 2025 sdformat-editor
4*
5* Licensed under the Apache License, Version 2.0 (the "License");
6* you may not use this file except in compliance with the License.
7* You may obtain a copy of the License at
8*
9* http://www.apache.org/licenses/LICENSE-2.0
10*
11* Unless required by applicable law or agreed to in writing, software
12* distributed under the License is distributed on an "AS IS" BASIS,
13* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14* See the License for the specific language governing permissions and
15* limitations under the License.
16*
17* Developer: Zaid Duraid, Ean Wheeler, Evan Vokey
18*/
19
20#ifndef SDFORMAT_EDITOR_MODEL_VIEWER_HH_
21#define SDFORMAT_EDITOR_MODEL_VIEWER_HH_
22
23#include <interfaces/model_viewer_interface.h>
24
25// Ogre dependencies
26#include "Ogre.h"
27#include "OgreApplicationContext.h"
28#include "OgreInput.h"
29#include "OgreRTShaderSystem.h"
30#include "OgreWindowEventUtilities.h"
31#include "OgreAssimpLoader.h"
32#include "OgreCameraMan.h"
33
34// GLM (for vector math)
35#include <glm/glm.hpp>
36#include <glm/gtc/quaternion.hpp>
37
38#include <string>
39#include <vector>
40#include <filesystem>
41#include <queue>
42
45{
46
48 public: ModelViewer() : ctx("SDFormat Editor Model Viewer") // Initialize ctx here
49 {
50 }
51
53 private: void Initialize() override;
54
56 private: void RenderFrame() override;
57
60 private: void Quit() override;
61
65 public: bool IsRunning() override;
66
69 private: void Deinitialize() ;
70
72 private: std::mutex model_viewer_mutex;
73
75 private: bool should_quit = false;
76
78 private: bool is_running = false;
79
82 public: void AddModel(ModelInfo model_info) override;
83
86 public: void AddModel(PresetModelInfo model_info) override;
87
89 public: void ResetModels() override;
90
92 private: std::mutex& GetMutex() override;
93
95 private: void HandleAddModelQueue();
96
98 private: void HandleResetModelsFlag();
99
101 private: OgreBites::ApplicationContext ctx;
102
104 private: Ogre::Root* ogreRoot;
105
107 private: Ogre::SceneManager* scnMgr;
108
110 private: Ogre::RTShader::ShaderGenerator *shadergen;
111
113 private: Ogre::Light *sceneLight;
114
116 private: Ogre::SceneNode *sceneLightNode;
117
119 private: Ogre::Camera *sceneCamera;
120
122 private: Ogre::SceneNode* sceneCameraNode;
123
125 private: OgreBites::CameraMan* cameraController;
126
128 private: std::queue<ModelInfo> add_model_queue;
129
131 private:
132 class ModelViewerKeyHandler : public OgreBites::InputListener
133 {
134 private: ModelViewer *m;
135 public:void addModelViewerContext(ModelViewer *m);
136 public: bool keyPressed(const OgreBites::KeyboardEvent &evt) override;
137 public: bool mouseWheelRolled(const OgreBites::MouseWheelEvent &evt) override;
138 public: bool mouseMoved(const OgreBites::MouseMotionEvent& evt) override;
139 public: bool mousePressed(const OgreBites::MouseButtonEvent& evt) override;
140 public: bool mouseReleased(const OgreBites::MouseButtonEvent& evt) override;
141 };
142
145
146 // private: ModelViewerWindowEventHandler windowEventHandler;
147
148 // private:
149 // class ModelViewerWindowEventHandler : public OgreBites::WindowEventListener
150 // {
151 // private: ModelViewer *m;
152 // public: void addModelViewerContext(ModelViewer *m);
153 // public: void windowClosed(Ogre::RenderWindow* rw) override;
154 // public: void windowMoved(Ogre::RenderWindow* rw) override;
155 // };
156
157 private: unsigned long long unique_naming_counter = 0;
158
160 private: Ogre::ColourValue color_list[6] = {
161 Ogre::ColourValue(3.3699f, 3.1256f, 0.633f),
162 Ogre::ColourValue(0.549f, 3.1569f, 0.1569f),
163 Ogre::ColourValue(4.1325f, 1.1339f, 0.234f),
164 Ogre::ColourValue(1.0f, 0.5f, 0.0f),
165 Ogre::ColourValue(0.0f, 0.5f, 1.0f),
166 Ogre::ColourValue(0.5f, 0.0f, 0.5f)
167 };
168
170 private: unsigned int color_list_index = 0;
171
173 private: std::atomic<bool> reset_models_flag;
174};
175
176#endif
Interface for the SDFormat Editor's 3D Model Vewer.
Definition model_viewer_interface.h:34
class for handling inputs to the model viewer
Definition model_viewer.h:133
Implementation of SDFormatParserI.
Definition model_viewer.h:45
Ogre::ColourValue color_list[6]
list of random colours to assign model
Definition model_viewer.h:160
Ogre::SceneNode * sceneCameraNode
Pointer to the main scene camera node.
Definition model_viewer.h:122
ModelViewerKeyHandler keyHandler
instance of ModelViewerKeyHandler
Definition model_viewer.h:144
Ogre::Camera * sceneCamera
Pointer to the main scene camera.
Definition model_viewer.h:119
void HandleResetModelsFlag()
private method to handle reset models flag
Definition model_viewer.cpp:273
void Deinitialize()
Deallocates memory and quits the model viewer.
Definition model_viewer.cpp:148
std::atomic< bool > reset_models_flag
if true, reset model on next frame and set false
Definition model_viewer.h:173
void RenderFrame() override
Implementation of interface method.
Definition model_viewer.cpp:107
unsigned int color_list_index
A counter to keeps track of the current colour.
Definition model_viewer.h:170
OgreBites::CameraMan * cameraController
Pointer to the main camera controller.
Definition model_viewer.h:125
Ogre::Root * ogreRoot
Pointer to the ogre root.
Definition model_viewer.h:104
Ogre::SceneNode * sceneLightNode
Pointer to the main scene light node.
Definition model_viewer.h:116
std::mutex model_viewer_mutex
Mutex for thread safety.
Definition model_viewer.h:72
bool is_running
Indicates if the model viewer is running.
Definition model_viewer.h:78
bool IsRunning() override
Indicates if the model view is running.
Definition model_viewer.cpp:136
bool should_quit
Indicates if the model viewer should quit on the next iteration.
Definition model_viewer.h:75
void HandleAddModelQueue()
private method which pops ModelInfo's off the model queue and creates their OGRE entities.
Definition model_viewer.cpp:183
std::mutex & GetMutex() override
Implementation of interface method.
Definition model_viewer.cpp:131
void AddModel(ModelInfo model_info) override
Implementation of interface method.
Definition model_viewer.cpp:231
void Quit() override
Implementation of interface method.
Definition model_viewer.cpp:142
void Initialize() override
Implementation of interface method.
Definition model_viewer.cpp:60
Ogre::SceneManager * scnMgr
Pointer to the ogre scene manager.
Definition model_viewer.h:107
Ogre::Light * sceneLight
Pointer to the main scene light.
Definition model_viewer.h:113
void ResetModels() override
Implementation of the interface method.
Definition model_viewer.cpp:287
Ogre::RTShader::ShaderGenerator * shadergen
Pointer to the ogre shader generator singleton.
Definition model_viewer.h:110
ModelViewer()
Constructor.
Definition model_viewer.h:48
std::queue< ModelInfo > add_model_queue
queue to add models to model viewer
Definition model_viewer.h:128
OgreBites::ApplicationContext ctx
The ogre application context, which gives access to attributes from the render window.
Definition model_viewer.h:101
Struct representing information of a model's visual information.
Definition model_viewer_interface.h:36
Struct representing information of a model's visual information for pre-defined shapes.
Definition model_viewer_interface.h:52