ModelViewer 0.1
Template for CPP projects
Loading...
Searching...
No Matches
ModelManager.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** ModelManager.hpp
4** File description:
5** ModelManager.hpp
6*/
7
8#ifndef MODELVIEWER_MODELMANAGER_HPP
9#define MODELVIEWER_MODELMANAGER_HPP
10
11#include <QtConcurrent/QtConcurrentRun>
12
14
15namespace model_viewer {
16
20class ModelManager final : public QObject {
21 Q_OBJECT
22 Q_PROPERTY(QQuick3DGeometry *geometry READ geometry NOTIFY geometryChanged)
23 Q_PROPERTY(model_viewer::material::MTLMaterial *material READ material
24 NOTIFY materialChanged)
25 Q_PROPERTY(bool loading READ isLoading NOTIFY loadingChanged)
26 Q_PROPERTY(bool ready READ isReady NOTIFY readyChanged)
27 public:
28 private:
30 loaders::ObjLoader _objLoader;
31
33 std::unordered_map<std::string, loaders::ILoader *> _loaders;
34
36 loaders::ILoader *_lastLoaded = &_objLoader;
37
39 std::unique_ptr<geometry::ObjGeometry> _geometry;
40
42 bool _loading = false;
43
45 bool _ready = false;
46
47 signals:
50
53
56
59
60 public:
65 explicit ModelManager(QObject *parent = nullptr);
66
68 ~ModelManager() override = default;
69
74 QQuick3DGeometry *geometry() const { return _lastLoaded->geometry(); };
75
81
88 Q_INVOKABLE void loadModel(const QString &filepath);
89
94 bool isLoading() const { return _loading; };
95
100 void setLoading(bool isLoading);
101
106 bool isReady() const { return _ready; };
107
112 void setReady(bool isReady);
113
114 const std::unordered_map<std::string, loaders::ILoader *> &getLoaders()
115 const {
116 return _loaders;
117 };
118};
119
120} // namespace model_viewer
121
122#endif // MODELVIEWER_MODELMANAGER_HPP
Class for managing model loading and providing geometry and material.
Definition ModelManager.hpp:20
void geometryChanged()
Signal emitted when the geometry changes.
QQuick3DGeometry * geometry
Definition ModelManager.hpp:22
void materialChanged()
Signal emitted when the material changes.
loaders::ObjLoader _objLoader
OBJ loader instance.
Definition ModelManager.hpp:30
model_viewer::material::MTLMaterial * material
Definition ModelManager.hpp:24
void setLoading(bool isLoading)
Set the loading state, emits loadingChanged signal.
Definition ModelManager.cpp:36
bool loading
Definition ModelManager.hpp:25
bool isLoading() const
Check if a model is currently loading.
Definition ModelManager.hpp:94
std::unordered_map< std::string, loaders::ILoader * > _loaders
Map of file extensions to their respective loaders.
Definition ModelManager.hpp:33
void loadingChanged()
Signal emitted when the loading state changes.
bool _ready
Boolean indicating if a model is ready.
Definition ModelManager.hpp:45
material::MTLMaterial * material() const
Get the material of the loaded model.
Definition ModelManager.hpp:80
Q_INVOKABLE void loadModel(const QString &filepath)
Load a model from a file asynchronously.
Definition ModelManager.cpp:20
bool _loading
Boolean indicating if a model is currently loading.
Definition ModelManager.hpp:42
std::unique_ptr< geometry::ObjGeometry > _geometry
Geometry of the currently loaded model.
Definition ModelManager.hpp:39
bool ready
Definition ModelManager.hpp:26
void readyChanged()
Signal emitted when the ready state changes.
void setReady(bool isReady)
Set the ready state, emits readyChanged signal.
Definition ModelManager.cpp:41
bool isReady() const
Check if a model is ready.
Definition ModelManager.hpp:106
const std::unordered_map< std::string, loaders::ILoader * > & getLoaders() const
Definition ModelManager.hpp:114
loaders::ILoader * _lastLoaded
Pointer to the last used loader.
Definition ModelManager.hpp:36
virtual material::MTLMaterial * material() const =0
Get the material of the loaded model.
virtual QQuick3DGeometry * geometry() const =0
Get the geometry of the loaded model.
Class representing a material parsed from an MTL file.
Definition Material.hpp:29
Definition ObjGeometry.cpp:10