PeriDyno 1.0.0
Loading...
Searching...
No Matches
PSettingEditor.cpp
Go to the documentation of this file.
1#include "PSettingEditor.h"
2
3#include <QHBoxLayout>
4#include <QDebug>
5
6#include <QHBoxLayout>
7#include <QVBoxLayout>
8#include <QPainter>
9#include <QPushButton>
10#include <QToolButton>
11#include <QSvgRenderer>
12#include <QGridLayout>
13#include <QFormLayout>
14#include <QComboBox>
15#include <QCheckBox>
16#include <QFileDialog>
17#include <QMessageBox>
18#include <QSlider>
19
20#include "PDockWidget.h"
22
23#include "ToolBar/Group.h"
26
27#include "qscrollarea.h"
29#include "SceneGraphFactory.h"
30#include "SceneGraph.h"
31
32#include <GLRenderEngine.h>
33
34
35
36namespace dyno
37{
39 : QMainWindow(nullptr)
40
41 {
42
43 this->setWindowTitle(QString("Setting"));
44
45 QDockWidget* Docker = new QDockWidget();
46 this->addDockWidget(Qt::LeftDockWidgetArea, Docker);
47 Docker->setMinimumSize(QSize(200, 600));
48 Docker->setMaximumWidth(200);
49 auto titleBar1 = Docker->titleBarWidget();
50 Docker->setTitleBarWidget(new QWidget());
51 delete titleBar1;
52
53 QLabel* SelectLabel = new QLabel("Cateory");
54 SelectLabel->setAlignment(Qt::AlignCenter);
55 PPushButton* SceneSettingbtr = new PPushButton("SceneSetting");
56 PPushButton* RenderSettingbtr = new PPushButton("RenderSetting");
57 PPushButton* OtherSettingbtr = new PPushButton("Other");
58 QWidget* selectWidget = new QWidget();
59 QVBoxLayout* selectVLayout = new QVBoxLayout();
60
61 settingWidget = new PSceneSetting(this, "Scene Setting");
62 settingWidget->updateData();
63
64 renderSettingWidget = new PRenderSetting(this, "Render Setting");
65
66 this->connect(SceneSettingbtr, SIGNAL(active(QString)), this, SLOT(buildSceneSettingWidget()));
67 this->connect(OtherSettingbtr, SIGNAL(active(QString)), this, SLOT(buildOtherSettingWidget()));
68 this->connect(RenderSettingbtr, SIGNAL(active(QString)), this, SLOT(showRenderSettingWidget()));
69
70 selectVLayout->addWidget(SelectLabel);
71 selectVLayout->addWidget(SceneSettingbtr);
72 selectVLayout->addWidget(RenderSettingbtr);
73 selectVLayout->addWidget(OtherSettingbtr);
74 selectVLayout->addStretch();
75
76 selectWidget->setLayout(selectVLayout);
77 Docker->setWidget(selectWidget);
78
79 DockerRight = new QDockWidget();
80 this->addDockWidget(Qt::RightDockWidgetArea, DockerRight);
81 auto titleBar2 = DockerRight->titleBarWidget();
82 DockerRight->setMinimumSize(QSize(500,600));
83 DockerRight->setTitleBarWidget(new QWidget());
84 delete titleBar2;
85 DockerRight->setWidget(settingWidget);
86
87 }
88
89 void PSettingEditor::setRenderEngine(std::shared_ptr<RenderEngine> engine)
90 {
91 ((PRenderSetting*)this->renderSettingWidget)->setRenderEngine(engine);
92 }
93
95 {
96 if (settingWidget != nullptr)
97 {
98 delete settingWidget;
99 settingWidget = nullptr;
100 }
101
102 settingWidget = new PSceneSetting(this,"Scene Setting");
103 settingWidget->updateData();
104 DockerRight->setWidget(settingWidget);
105 }
106
107
108
110 {
111 if (settingWidget != nullptr)
112 {
113 delete settingWidget;
114 settingWidget = nullptr;
115 }
116
117 settingWidget = new POtherSetting(this,"Other");
118 settingWidget->updateData();
119 DockerRight->setWidget(settingWidget);
120 }
121
123 {
124
125 renderSettingWidget->updateData();
127 }
128
129
131 {
132 Editor = editor;
133
134 layoutRight = new QGridLayout;
135
136 mMainLayout = new QVBoxLayout;
137 mScrollArea = new QScrollArea;
138
139 mMainLayout->setContentsMargins(0, 0, 0, 0);
140 mMainLayout->setSpacing(0);
141
142 mTitle = new QLabel(title.c_str());
143 int detailLabelHeight = 40;
144 mTitle->setMinimumHeight(detailLabelHeight);
145 mTitle->setMaximumHeight(detailLabelHeight);
146 mTitle->setAlignment(Qt::AlignCenter);
147 mMainLayout->addWidget(mTitle);
148
149 mMainLayout->addWidget(mScrollArea);
150
151 mScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
152 mScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
153 mScrollArea->setWidgetResizable(true);
154
155 mScrollLayout = new QGridLayout;
156 mScrollLayout->setAlignment(Qt::AlignTop);
157 mScrollLayout->setContentsMargins(0, 0, 0, 0);
158
159 QWidget* m_scroll_widget = new QWidget;
160 m_scroll_widget->setLayout(mScrollLayout);
161 mScrollArea->setWidget(m_scroll_widget);
162 mScrollArea->setContentsMargins(0, 0, 0, 0);
163
164 setLayout(mMainLayout);
165 };
166
167
169 {
170
171 auto scn = SceneGraphFactory::instance()->active();
172 Vec3f gValue = scn->getGravity();
173 Vec3f lowerBValue = scn->getLowerBound();
174 Vec3f upperBValue = scn->getUpperBound();
175
176 gravityWidget = new QVector3FieldWidget(QString("Gravity"), gValue);
177 lowerBoundWidget= new QVector3FieldWidget(QString("Lower Bound"), lowerBValue);
178 upperBoundWidget = new QVector3FieldWidget(QString("Upper Bound"), upperBValue);
179
180 QObject::connect(gravityWidget, SIGNAL(vec3fChange(double, double, double)), this, SLOT(setGravity(double, double, double)));
181 QObject::connect(lowerBoundWidget, SIGNAL(vec3fChange(double, double, double)), this, SLOT(setLowerBound(double, double, double)));
182 QObject::connect(upperBoundWidget, SIGNAL(vec3fChange(double, double, double)), this, SLOT(setUpperBound(double, double, double)));
183
184 getScrollLayout()->addWidget(gravityWidget, 0, 0);
185 getScrollLayout()->addWidget(lowerBoundWidget, 1, 0);
186 getScrollLayout()->addWidget(upperBoundWidget, 2, 0);
187
188 }
189
190 void PSceneSetting::setGravity(double v0, double v1, double v2)
191 {
192 auto scn = SceneGraphFactory::instance()->active();
193 scn->setGravity(Vec3f(float(v0), float(v1), float(v2)));
194 }
195 void PSceneSetting::setLowerBound(double v0, double v1, double v2)
196 {
197 auto scn = SceneGraphFactory::instance()->active();
198 scn->setLowerBound(Vec3f(float(v0), float(v1), float(v2)));
199 }
200 void PSceneSetting::setUpperBound(double v0, double v1, double v2)
201 {
202 auto scn = SceneGraphFactory::instance()->active();
203 scn->setUpperBound(Vec3f(float(v0), float(v1), float(v2)));
204 }
205
207 : PSettingWidget(editor, title)
208 {
209 QFormLayout* layout = new QFormLayout();
210 this->getScrollLayout()->addLayout(layout, 0, 0);
211
212 fxaaEnabled = new QCheckBox(this);
213
214 msaaSamples = new QComboBox(this);
215 msaaSamples->addItems({"Disable", "2", "4", "8"});
216
217 shadowMapSize = new QComboBox(this);
218 shadowMapSize->addItems({ "256", "512", "1024", "2048" });
219
220 shadowBlurIters = new QSpinBox(this);
221 shadowBlurIters->setRange(0, 10);
222
223 layout->addRow(tr("Enable FXAA"), fxaaEnabled);
224 layout->addRow(tr("MSAA Samples"), msaaSamples);
225 layout->addRow(tr("ShadowMap Size"), shadowMapSize);
226 layout->addRow(tr("ShadowMap Blur"), shadowBlurIters);
227
228
229 QHBoxLayout* hLayout = new QHBoxLayout;
230 hLayout->setContentsMargins(0, 0, 0, 0);
231 hLayout->setSpacing(0);
232
233 mLineEdit = new QLineEdit;
234 mLineEdit->setText(QString::fromStdString(""));
235
236 QPushButton* open = new QPushButton("Open");
237 // open->setStyleSheet("QPushButton{color: black; border-radius: 10px; border: 1px groove black;background-color:white; }"
238 // "QPushButton:hover{background-color:white; color: black;}"
239 // "QPushButton:pressed{background-color:rgb(85, 170, 255); border-style: inset; }" );
240 open->setFixedSize(60, 24);
241
242 hLayout->addWidget(mLineEdit, 0);
243 hLayout->addWidget(open, 1);
244 hLayout->setSpacing(3);
245
246 layout->addRow("Env Map", hLayout);
247
248 connect(open, &QPushButton::clicked, this, [=]() {
249 QString path = QFileDialog::getOpenFileName(this, tr("Open File"), QString::fromStdString(getAssetPath()), tr("Text Files(*.hdr)"));
250 if (!path.isEmpty()) {
251 //Windows: "\\"; Linux: "/"
252 path = QDir::toNativeSeparators(path);
253 QFile file(path);
254 if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
255 QMessageBox::warning(this, tr("Read File"),
256 tr("Cannot open file:\n%1").arg(path));
257 return;
258 }
259 mLineEdit->setText(path);
260 if (mRenderEngine != nullptr)
261 {
262 mRenderEngine->setEnvmap(path.toStdString());
263 }
264 file.close();
265 }
266 else {
267 QMessageBox::warning(this, tr("Path"), tr("You do not select any file."));
268 }
269 });
270 }
271
276
277 void PRenderSetting::setRenderEngine(std::shared_ptr<RenderEngine> engine) {
278 mRenderEngine = std::dynamic_pointer_cast<GLRenderEngine>(engine);
279 if (mRenderEngine)
280 {
281 // update values
282 fxaaEnabled->setChecked(mRenderEngine->getFXAA());
283 msaaSamples->setCurrentText(QString::number(mRenderEngine->getMSAA()));
284 shadowMapSize->setCurrentText(QString::number(mRenderEngine->getShadowMapSize()));
285 shadowBlurIters->setValue(mRenderEngine->getShadowBlurIters());
286 mLineEdit->setText(QString::fromStdString(mRenderEngine->getEnvmapFilePath()));
287
288 // connection
289 connect(fxaaEnabled, &QCheckBox::toggled, [=]() {
290 mRenderEngine->setFXAA(fxaaEnabled->isChecked());
291 });
292
293 connect(msaaSamples, SIGNAL(currentIndexChanged(int)), this, SLOT(setMSAA(int)));
294
295
296 connect(shadowMapSize, SIGNAL(currentIndexChanged(int)), this, SLOT(setShadowMapSize(int)));
297
298
299 connect(shadowBlurIters, SIGNAL(valueChanged(int)), this, SLOT(setShadowBlurIters(int)));
300 }
301 }
302
304 {
305 if (mRenderEngine)
306 {
307 // ??
308 }
309 }
310
312 {
313 mRenderEngine->setFXAA(fxaaEnabled->isChecked());
314 }
315
317 {
318 mRenderEngine->setShadowMapSize((256 << idx));
319 }
320
322 {
323 mRenderEngine->setShadowBlurIters(iters);
324 }
325}
PRenderSetting(PSettingEditor *editor, std::string title)
void setShadowBlurIters(int iters)
void setShadowMapSize(int idx)
std::shared_ptr< GLRenderEngine > mRenderEngine
void updateData() override
void setRenderEngine(std::shared_ptr< RenderEngine > engine)
QVector3FieldWidget * upperBoundWidget
void setLowerBound(double v0, double v1, double v2)
QVector3FieldWidget * lowerBoundWidget
void updateData() override
void setGravity(double v0, double v1, double v2)
QVector3FieldWidget * gravityWidget
void setUpperBound(double v0, double v1, double v2)
PSettingWidget * renderSettingWidget
PSettingWidget * settingWidget
PSettingEditor(QWidget *widget=nullptr)
void setRenderEngine(std::shared_ptr< RenderEngine > engine)
QDockWidget * DockerRight
PSettingEditor * Editor
QGridLayout * mScrollLayout
QVBoxLayout * mMainLayout
QGridLayout * getScrollLayout()
QGridLayout * layoutRight
PSettingWidget(PSettingEditor *editor, std::string title)
QScrollArea * mScrollArea
static SceneGraphFactory * instance()
std::shared_ptr< SceneGraph > active()
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
DYN_FUNC Real arg(const Complex< Real > &)
Definition Complex.inl:273
Vector< float, 3 > Vec3f
Definition Vector3D.h:93