PeriDyno 1.0.0
Loading...
Searching...
No Matches
PScrollBarViewerWidget.h
Go to the documentation of this file.
1#pragma once
2#include <QTableWidgetItem>
3#include "Field.h"
4#include <QResizeEvent>
5#include <QWheelEvent>
6#include <QScrollBar>
7
8#include <QScrollBar>
9#include <QMouseEvent>
10#include <QHBoxLayout>
11#include <QKeyEvent>
12#include "Format.h"
13
16
20
21#include "PSimulationThread.h"
22#include "Topology/TriangleSet.h"
23#include <QCloseEvent>
25
26
27namespace dyno
28{
29 struct Field_Type
30 {
31 Field_Type(std::shared_ptr<FBase> ptr, std::string type)
32 {
33 mPtr = ptr;
34 mType = type;
35 }
36
37 std::shared_ptr<FBase> mPtr;
38 std::string mType = "";
39 };
40
41
42 class PScrollBarViewerWidget : public QWidget
43 {
44 Q_OBJECT
45
46 public:
47 PScrollBarViewerWidget(FBase* field,QWidget* parent = nullptr) : QWidget(parent)
48 {
49 mfield = field;
50 //set Title
51 this->setWindowTitle(FormatFieldWidgetName(field->getObjectName()) + " ( " + FormatFieldWidgetName(field->getTemplateName()) + " )");
52 Qt::WindowFlags m_flags = windowFlags();
53 setWindowFlags(m_flags | Qt::WindowStaysOnTopHint);
54
55
56 // initial widget
57 // Vec3
58
59 if (field->getClassName() == std::string("FVar") || field->getClassName() == std::string("FArray"))
60 {
61 PDataViewerWidget* tableView = NULL;
62
63 if (field->getTemplateName() == std::string(typeid(Vec3f).name()) || field->getTemplateName() == std::string(typeid(Vec3d).name()))
64 tableView = new PVec3FieldViewerWidget(field, NULL);
65
66 // int / uint
67 if (field->getTemplateName() == std::string(typeid(uint).name()) || field->getTemplateName() == std::string(typeid(int).name()))
68 tableView = new PIntegerViewerWidget(field, NULL);
69
70 // Transform3f
71 if (field->getTemplateName() == std::string(typeid(Transform3f).name()))
72 tableView = new PTransform3fViewerWidget(field, NULL);
73
75 if (field->getTemplateName() == std::string(typeid(float).name()) || field->getTemplateName() == std::string(typeid(double).name()))
76 tableView = new PRealViewerWidget(field, NULL);
77
78
79 //construct
80
81 QHBoxLayout* layout = new QHBoxLayout(this);
82 //create ScrollBar
83 QDataViewScrollBar* verticalScrollBar = new QDataViewScrollBar(Qt::Orientation::Vertical);
84
85 if (tableView != NULL)
86 {
87 connect(PSimulationThread::instance(), &PSimulationThread::sceneGraphChanged, tableView, &PDataViewerWidget::close);
88
89 connect(verticalScrollBar, &QScrollBar::valueChanged, tableView, &PDataViewerWidget::updateDataTableTo);
91
92 connect(PSimulationThread::instance(), &PSimulationThread::sceneGraphChanged, tableView, &PDataViewerWidget::close);
93
94 this->setAttribute(Qt::WA_DeleteOnClose, true);
95
96 //verticalScrollBar = new QDataViewScrollBar(Qt::Vertical);
97
98 tableView->setTableScrollBar(verticalScrollBar);
99
100
101 layout->addWidget(tableView);
102 layout->addWidget(verticalScrollBar);
103
104
105 tableView->resize(maximumSize());
106 verticalScrollBar->resize(verticalScrollBar->width(), this->height());
107
108 }
109 else
110 {
111 std::string info = "Unsupported Type : " + field->getTemplateName();//
112 QLabel* errorInfo = new QLabel(QString::fromStdString(info), this);//FormatFieldWidgetName(field->getTemplateName())
113 layout->addWidget(errorInfo);
114
115 }
116
117 this->show();
118 return;
119
120 }
121
122
123 //************************* Instance **************************//
124 {
125 QHBoxLayout* layout = new QHBoxLayout(this);
126 if (field->getClassName() == std::string("FInstance"))
127 {
128 //PointSet
129 if (field->getTemplateName() == std::string(typeid(PointSet<DataType3f>).name()))
130 {
131 updateInstanceData(field);
132
133 std::vector<PDataViewerWidget*> viewers;
134 for (auto it : Name_Field)
135 {
136 auto f = it.second;
137 PDataViewerWidget* temp;
138 if (f->mType == std::string(typeid(Vec3f).name()))
139 {
140 temp = new PVec3FieldViewerWidget(f->mPtr.get());
141 viewers.push_back(temp);
142 }
143
144 QDataViewScrollBar* verticalScrollBar = new QDataViewScrollBar(Qt::Orientation::Vertical);
145 layout->addWidget(temp);
146 layout->addWidget(verticalScrollBar);
147
148 connect(verticalScrollBar, &QScrollBar::valueChanged, temp, &PDataViewerWidget::updateDataTableTo);
150 temp->setTableScrollBar(verticalScrollBar);
151
152 }
153
154
156 for (auto wid : viewers)
157 {
159 }
160 }
161
162 //TriangleSet
163 if (field->getTemplateName() == std::string(typeid(TriangleSet<DataType3f>).name()))
164 {
165
167 std::cout<<std::string(typeid(TopologyModule::Edge).name())<<"\n";
168 std::cout << std::string(typeid(TopologyModule::Triangle).name()) << "\n";
169 std::cout << std::string(typeid(TopologyModule::Edg2Tri).name()) << "\n";
170 std::cout << std::string(typeid(TopologyModule::Tri2Edg).name()) << "\n";
171
172 std::vector<PDataViewerWidget*> viewers;
173 for (auto it : Name_Field)
174 {
175 auto f = it.second;
176 PDataViewerWidget* temp;
177 if (f->mType == std::string(typeid(Vec3f).name()))
178 {
179 temp = new PVec3FieldViewerWidget(f->mPtr.get());
180 viewers.push_back(temp);
181 }
182
183 QDataViewScrollBar* verticalScrollBar = new QDataViewScrollBar(Qt::Orientation::Vertical);
184 layout->addWidget(temp);
185 layout->addWidget(verticalScrollBar);
186
187 connect(verticalScrollBar, &QScrollBar::valueChanged, temp, &PDataViewerWidget::updateDataTableTo);
189 temp->setTableScrollBar(verticalScrollBar);
190 }
191
192
194 for (auto wid : viewers)
195 {
197 }
198
199
200 }
201 //EdgeSet
202 }
203 else
204 {
205 std::string info = "Unsupported Type : " + field->getTemplateName();//
206 QLabel* errorInfo = new QLabel(QString::fromStdString(info), this);//FormatFieldWidgetName(field->getTemplateName())
207 layout->addWidget(errorInfo);
208 }
209
210 this->show();
211 return;
212 }
213
214
215
216 }
217
218
219
220
221
222 Q_SIGNALS:
223
224
226
227 public slots:
228
234
235
236 protected:
237
238 void resizeEvent(QResizeEvent* event)override
239 {
240 QWidget::resizeEvent(event);
241 }
242
243
244
245 void closeEvent(QCloseEvent* event) override
246 {
247 for (auto it : Name_Field)
248 {
249 auto f = it.second;
250 PDataViewerWidget* temp;
251 if (f->mType == std::string(typeid(Vec3f).name()))
252 {
253 temp = new PVec3FieldViewerWidget(f->mPtr.get());
254 temp->clear();
255 delete temp;
256 }
257 }
258 event->accept();
259 }
260
261
262
263 private:
264
265 FBase* mfield = NULL;
266
267 std::map<std::string, std::shared_ptr<Field_Type>> Name_Field;
268
270 {
271 // PointSet
272 {
274
275 //mCoord
276 auto points = ptSet->getDataPtr()->getPoints();
277 static FArray<Vec3f, DeviceType::GPU> f_points;
278 f_points.assign(points);
279
280 static std::shared_ptr<FBase> basePointsPtr = std::static_pointer_cast<FBase>(std::make_shared<FArray<Vec3f, DeviceType::GPU>>(f_points));
281 Name_Field[std::string("mCoord")] = std::make_shared<Field_Type>(Field_Type(basePointsPtr, std::string(typeid(Vec3f).name())));
282 }
283 // PointSet
284 {
285 }
286
287
288 }
289
290 };
291
292
293
294}
void updateScrollValue(int v)
void assign(const T &val)
Definition Field.h:202
std::string getObjectName()
Definition FBase.h:54
virtual const std::string getClassName()
Definition FBase.h:52
virtual const std::string getTemplateName()
Definition FBase.h:51
Pointer of objects.
Definition FInstance.h:50
std::shared_ptr< T > getDataPtr()
Definition FInstance.h:63
void wheelDeltaAngleChange(int value)
virtual void updateDataTableTo(int value)
void setTableScrollBar(QScrollBar *s)
std::map< std::string, std::shared_ptr< Field_Type > > Name_Field
PScrollBarViewerWidget(FBase *field, QWidget *parent=nullptr)
void resizeEvent(QResizeEvent *event) override
void closeEvent(QCloseEvent *event) override
void oneFrameFinished(int frame)
static PSimulationThread * instance()
A PointSet stores the coordinates for a set of independent points.
Definition PointSet.h:8
VectorND< PointType, 2 > Edge
Vector< PointType, 3 > Triangle
VectorND< PointType, 2 > Edg2Tri
VectorND< PointType, 3 > Tri2Edg
TA * cast(TB *b)
Definition Typedef.inl:286
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
QString FormatFieldWidgetName(std::string name)
Definition Format.cpp:9
Vector< double, 3 > Vec3d
Definition Vector3D.h:94
Transform< float, 3 > Transform3f
Vector< float, 3 > Vec3f
Definition Vector3D.h:93
unsigned int uint
Definition VkProgram.h:14
Field_Type(std::shared_ptr< FBase > ptr, std::string type)
std::shared_ptr< FBase > mPtr