#ifndef URDE_MODEL_VIEWER_HPP #define URDE_MODEL_VIEWER_HPP #include "Space.hpp" #include "ViewManager.hpp" #include "Camera.hpp" namespace URDE { class ModelViewer : public ViewerSpace { struct State : Space::State { DECL_YAML enum class Mode { Solid, Material, Wireframe }; Value renderMode = Mode::Material; Value cameraPosition; Value cameraOrientation; } m_state; const Space::State& spaceState() const { return m_state; } struct View : Specter::View { ModelViewer& m_mv; View(ModelViewer& mv, Specter::ViewResources& res) : Specter::View(res, mv.m_vm.rootView()), m_mv(mv) {} }; Camera m_camera; std::unique_ptr m_view; public: ModelViewer(ViewManager& vm, Space* parent) : ViewerSpace(vm, Class::ModelViewer, parent) { reloadState(); } ModelViewer(ViewManager& vm, Space* parent, const ModelViewer& other) : ModelViewer(vm, parent) { m_state = other.m_state; reloadState(); } ModelViewer(ViewManager& vm, Space* parent, ConfigReader& r) : ModelViewer(vm, parent) { m_state.read(r); reloadState(); } void reloadState() { m_camera.setPosition(m_state.cameraPosition); m_camera.setOrientation(m_state.cameraOrientation); } Space* copy(Space *parent) const { return new ModelViewer(m_vm, parent, *this); } virtual Specter::View* buildContentView(Specter::ViewResources& res) { m_view.reset(new View(*this, res)); return m_view.get(); } bool usesToolbar() const { return true; } }; } #endif // URDE_MODEL_VIEWER_HPP