PeriDyno 1.2.1
Loading...
Searching...
No Matches
WSimulationCanvas.h
Go to the documentation of this file.
1#pragma once
2
3#include <Wt/WContainerWidget.h>
4
5#include <memory>
6
9
10#include <ImWidgets/ImWindow.h>
11#include <RenderWindow.h>
12
13namespace dyno
14{
15 class Camera;
16 class SceneGraph;
17 class GLRenderEngine;
18
19 struct RenderParams;
20};
21
22struct GLFWwindow;
23class ImageEncoder;
24class ImGuiBackendWt;
25
27 : public Wt::WContainerWidget
28 , public dyno::RenderWindow
29{
30public:
33
34 void setScene(std::shared_ptr<dyno::SceneGraph> scene);
35
36 void update();
37
38public:
39 //Mouse interaction
40 void onMousePressed(const Wt::WMouseEvent& evt);
41 void onMouseDrag(const Wt::WMouseEvent& evt);
42 void onMouseReleased(const Wt::WMouseEvent& evt);
43 void onMouseWheeled(const Wt::WMouseEvent& evt);
44
45 //Keyboard interaction
46 void onKeyWentDown(const Wt::WKeyEvent& evt);
47 void onKeyWentUp(const Wt::WKeyEvent& evt);
48
49 void selectNode(std::shared_ptr<dyno::Node> node);
50
51 Wt::Signal<std::shared_ptr<dyno::Node>>& selectNodeSignal() { return _selectNodeSignal; };
52
53 void setDefaultAnimationOption(bool op) override {};
54
55protected:
56 void initializeGL();
57 void makeCurrent();
58 void doneCurrent();
59
60 void render(Wt::WFlags<Wt::RenderFlag> flags) override;
61 void layoutSizeChanged(int width, int height) override;
62
63 int width = 800;
64 int height = 600;
65
66private:
67 Wt::WImage* mImage;
68 Wt::WApplication* mApp;
69
70 GLFWwindow* mContext;
72
74
75 std::vector<unsigned char> mImageData; // raw image
76 std::vector<unsigned char> mJpegBuffer; // jpeg data
77 std::unique_ptr<ImageEncoder> mJpegEncoder; // jpeg encoder
78 std::unique_ptr<Wt::WMemoryResource> mJpegResource; // Wt resource for jpeg image
79
80 std::shared_ptr<dyno::SceneGraph> mScene = nullptr;
81 //std::shared_ptr<dyno::Camera> mCamera;
82
83 // internal framebuffer
86
87 bool mMouseButtonDown = false;
88
89 int mCursorX = -1;
90 int mCursorY = -1;
91 int mtempCursorX = -1;
92
93 Wt::Signal<std::shared_ptr<dyno::Node>> _selectNodeSignal;
94};
void selectNode(std::shared_ptr< dyno::Node > node)
std::unique_ptr< Wt::WMemoryResource > mJpegResource
void render(Wt::WFlags< Wt::RenderFlag > flags) override
dyno::ImWindow mImWindow
Wt::Signal< std::shared_ptr< dyno::Node > > _selectNodeSignal
std::vector< unsigned char > mImageData
ImGuiBackendWt * mImGuiCtx
void onMouseDrag(const Wt::WMouseEvent &evt)
void setDefaultAnimationOption(bool op) override
void onMouseWheeled(const Wt::WMouseEvent &evt)
std::shared_ptr< dyno::SceneGraph > mScene
Wt::WApplication * mApp
void layoutSizeChanged(int width, int height) override
std::vector< unsigned char > mJpegBuffer
void onKeyWentUp(const Wt::WKeyEvent &evt)
dyno::Texture2D mFrameColor
void onMouseReleased(const Wt::WMouseEvent &evt)
Wt::Signal< std::shared_ptr< dyno::Node > > & selectNodeSignal()
std::unique_ptr< ImageEncoder > mJpegEncoder
void setScene(std::shared_ptr< dyno::SceneGraph > scene)
void onKeyWentDown(const Wt::WKeyEvent &evt)
dyno::Framebuffer mFramebuffer
void onMousePressed(const Wt::WMouseEvent &evt)
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25