PeriDyno 1.2.1
Loading...
Searching...
No Matches
WSimulationControl.cpp
Go to the documentation of this file.
2#include <Wt/WApplication.h>
3#include <Wt/WHBoxLayout.h>
4#include <Wt/WPanel.h>
5#include <Wt/WPushButton.h>
6#include <Wt/WVBoxLayout.h>
7
9{
10 // vertical layout
11 auto layout = this->setLayout(std::make_unique<Wt::WVBoxLayout>());
12 layout->setContentsMargins(0, 0, 0, 0);
13 this->setMargin(0);
14
15 // simulation control
16 auto panel3 = layout->addWidget(std::make_unique<Wt::WPanel>());
17 panel3->setTitle("Simulation Control");
18 panel3->setCollapsible(false);
19 //panel3->setHeight(50);
20 auto widget2 = panel3->setCentralWidget(std::make_unique<Wt::WContainerWidget>());
21 auto layout2 = widget2->setLayout(std::make_unique<Wt::WHBoxLayout>());
22 //widget2->setHeight(5);
23 layout2->setContentsMargins(0, 0, 0, 0);
24 auto startButton = layout2->addWidget(std::make_unique<Wt::WPushButton>("Start"));
25 auto stopButton = layout2->addWidget(std::make_unique<Wt::WPushButton>("Stop"));
26 auto stepButton = layout2->addWidget(std::make_unique<Wt::WPushButton>("Step"));
27 auto resetButton = layout2->addWidget(std::make_unique<Wt::WPushButton>("Reset"));
28
29 startButton->setId("startButton");
30 stopButton->setId("stopButton");
31 stepButton->setId("stepButton");
32 resetButton->setId("resetButton");
33
34 // actions
35 startButton->clicked().connect(this, &WSimulationControl::start);
36 stopButton->clicked().connect(this, &WSimulationControl::stop);
37 stepButton->clicked().connect(this, &WSimulationControl::step);
38 resetButton->clicked().connect(this, &WSimulationControl::reset);
39
40 stopButton->clicked().connect([=] {
41 stopButton->doJavaScript("var stopButton = document.getElementById('stopButton');"
42 "stopButton.blur();");
43 });
44
45 stepButton->clicked().connect([=] {
46 stepButton->doJavaScript("var stepButton = document.getElementById('stepButton');"
47 "stepButton.blur();");
48 });
49
50 resetButton->clicked().connect([=] {
51 resetButton->doJavaScript("var resetButton = document.getElementById('resetButton');"
52 "resetButton.blur();");
53 });
54}
55
57
59{
60 //startButton->doJavaScript("var startButton = document.getElementById('startButton');"
61 // "startButton.blur();");
62 if (mScene != nullptr && mSceneCanvas != nullptr)
63 {
64 mSceneCanvas->setFocus();
65 if (mReset)
66 {
67 mScene->reset();
68 mReset = false;
69 }
70 this->bRunFlag = true;
71
72 Wt::WApplication* app = Wt::WApplication::instance();
73
74 while (this->bRunFlag)
75 {
76 mScene->takeOneFrame();
77 mSceneCanvas->update();
78 Wt::log("info") << "Step!!!";
79 Wt::log("info") << mScene->getFrameNumber();
80 app->processEvents();
81 }
82 }
83}
84
86{
87 if (mSceneCanvas != nullptr)
88 {
89 mSceneCanvas->setFocus(true);
90 this->bRunFlag = false;
91 }
92}
93
95{
96 if (mScene != nullptr && mSceneCanvas != nullptr)
97 {
98 stop();
99 mScene->takeOneFrame();
100 mSceneCanvas->update();
101 }
102
103 Wt::log("info") << "Step!!!";
104 Wt::log("info") << mScene->getFrameNumber();
105}
106
108{
109 if (mScene != nullptr && mSceneCanvas != nullptr)
110 {
111 this->bRunFlag = false;
112
113 mScene->setFrameNumber(0);
114 mScene->reset();
115 mSceneCanvas->update();
116
117 mSceneCanvas->update();
118
119 mReset = true;
120 }
121
122 Wt::log("info") << mScene->getFrameNumber();
123}
std::shared_ptr< dyno::SceneGraph > mScene
WSimulationCanvas * mSceneCanvas