-
Notifications
You must be signed in to change notification settings - Fork 11
/
admeshcontroller.h
529 lines (443 loc) · 11.3 KB
/
admeshcontroller.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
// (c) 2015 David Vyvlečka, AGPLv3
#ifndef ADMESHCONTROLLER_H
#define ADMESHCONTROLLER_H
#include <QGLShaderProgram>
#include <QLabel>
#include <QListView>
#include <QStringListModel>
#include <QStandardItemModel>
#include <QObject>
#include <vector>
#include <QList>
#include <iostream>
#include <cstdio>
#include <ctime>
#include "data.h"
#include "meshobject.h"
#include "historylist.h"
using namespace std;
/*!
* \brief Controls loaded MeshObjects and drawing
*/
class admeshController : public QObject
{
Q_OBJECT
public:
/*!
* \brief Default constructor
*/
explicit admeshController(QObject *parent = 0);
/*!
* \brief Destructs holded MeshObjects
*/
~admeshController();
/*!
* \brief Draws all MeshObjects to the scene
* \param program Shader program used to draw objects
*/
void drawAll(QGLShaderProgram *program);
/*!
* \brief Sets drawing colors
*
* Sets both default color and different color used to draw backfaces
*
* \param argc color Default color
* \param args badColor Backfaces color
*/
void setDrawColor(QColor color,QColor badColor);
/*!
* \brief Set history limit to history list used.
*
* \param lim Limit in MB.
*/
void setHistoryLimit(int lim);
/*!
* \brief Get info about all selected meshes.
* \return string containing formated info.
*/
QString getInfo();
/*!
* \brief Add UI items pointers to be accessible from controller.
* \param l Status bar label
* \param v ListView for selection
*/
void addUIItems(QLabel *l,QListView *v);
/*!
* \brief Write settings to config.
*/
void writeSettings();
signals:
/*!
* \brief Sends signal to rendering widget to redraw
*
* Sent always after manipulation with STL files
*/
void reDrawSignal();
/*!
* \brief Sends signal to recalculate view according to model size.
*/
void reCalculatePosition();
/*!
* \brief Sends signal to enable or disable edit panel.
*
* 0 objects in scene = disabled edit
*/
void enableEdit(bool);
/*!
* \brief Sends signal to set all scale spinboxes to same value.
*/
void scaleSignal(double);
/*!
* \brief Sends signal to enable or disable Undo in menu and in toolbar.
*/
void allowUndo(bool);
/*!
* \brief Sends signal to enable or disable Redo in menu and in toolbar.
*/
void allowRedo(bool);
/*!
* \brief Sends signal to enable or disable Save in menu and in toolbar.
*/
void allowSave(bool);
/*!
* \brief Sends signal to enable or disable Save as in menu.
*/
void allowSaveAs(bool);
/*!
* \brief Sends signal to enable or disable Export in menu.
*/
void allowExport(bool);
/*!
* \brief Sends signal to enable or disable Close in menu and in toolbar.
*/
void allowClose(bool);
public slots:
/*!
* \brief Handle selection in ListView.
*
* Toggle active state of item under given index.
*
* \param modelindex index of item to change.
*/
void handleSelectionChanged(QItemSelection selection, QItemSelection deselection);
/*!
* \brief Set rendering mode.
*
* Sets solid/wireframe or solid mode with thick edges.
*
* \param m Mode selected.
*/
void setMode(int m);
/*!
* \brief Get count of selected objects.
*
* \return count
*/
int selectedCount();
/*!
* \brief Draw into picking offsreen buffer.
*
* Draws all objects into scene. Each object with own different color used to determine which one was clicked.
*
* \param program Shader program used.
*/
void drawPicking(QGLShaderProgram *program);
/*!
* \brief Set object active by given index.
* \param id Index to be selected.
*/
void setActiveByIndex(GLuint id);
/*!
* \brief Set all objects active.
*/
void setAllActive();
/*!
* \brief Set all objects ainctive.
*/
void setAllInactive();
/*!
* \brief Inverse all objects active state.
*/
void setAllInverseActive();
/*!
* \brief Hide all selected items.
*/
void hide();
/*!
* \brief Unhide all selected items.
*/
void unhide();
/*!
* \brief Unhide all items.
*/
void unhideAll();
/*!
* \brief Open dialog window to open STL file
*/
void openSTL();
/*!
* \brief Open STL file given by parameter
*/
void openSTLbyName(const char* file);
/*!
* \brief Close selected objects
*/
void closeSTL();
/*!
* \brief Save STL file as binary or ascii
*/
void saveAs();
/*!
* \brief Save selected STL files in default format
*/
void save();
/*!
* \brief Save one MeshObject. Native save if filename is valid, otherwise save as.
*
* \param object Pointer to MeshObject to save
*/
void saveObject(MeshObject* object);
/*!
* \brief Ask for save of unsaved files upon application close.
*/
bool saveOnClose();
/*!
* \brief Export STL file as OFF, VRML, DXF or OBJ
*/
void exportSTL();
/*!
* \brief Get maximal diameter of last object in list. Called by RenderingWidget once new file is loaded.
*
* \return diameter
*/
float getMaxDiameter();
/*!
* \brief Set scale versor X factor.
* \param factor Factor
*/
void setVersorX(double factor);
/*!
* \brief Set scale versor Y factor.
* \param factor Factor
*/
void setVersorY(double factor);
/*!
* \brief Set scale versor Z factor.
* \param factor Factor
*/
void setVersorZ(double factor);
/*!
* \brief Use versor or not.
*/
void setVersor();
/*!
* \brief Scale selected model by scale factor.
*/
void scale();
/*!
* \brief Mirror selected model by XY plane.
*/
void mirrorXY();
/*!
* \brief Mirror selected model by YZ plane.
*/
void mirrorYZ();
/*!
* \brief Mirror selected model by XZ plane.
*/
void mirrorXZ();
/*!
* \brief Set rotation angle.
* \param angle Angle of rotation.
*/
void setRot(double angle);
/*!
* \brief Rotate selected model by angle along X axis.
*/
void rotateX();
/*!
* \brief Rotate selected model by angle along Y axis.
*/
void rotateY();
/*!
* \brief Rotate selected model by angle along Z axis.
*/
void rotateZ();
/*!
* \brief Set X translation factor.
* \param factor Factor of translation.
*/
void setXTranslate(double factor);
/*!
* \brief Set Y translation factor.
* \param factor Factor of translation.
*/
void setYTranslate(double factor);
/*!
* \brief Set Z translation factor.
* \param factor Factor of translation.
*/
void setZTranslate(double factor);
/*!
* \brief Switch between relative and non-relative translation.
*/
void setRelativeTranslate();
/*!
* \brief Translate selected model with factors given.
*/
void translate();
/*!
* \brief Translate selected model to be centered around origin.
*/
void center();
/*!
* \brief Snap selected model to zero Z coordinate.
*/
void snapZ();
/*!
* \brief Reverse all facets orientation of selected models.
*/
void reverseAll();
/*!
* \brief Set fix all flag.
*/
void setFixAllFlag();
/*!
* \brief Set exact flag.
*/
void setExactFlag();
/*!
* \brief Set tolerance flag.
*/
void setToleranceFlag();
/*!
* \brief Set tolerance.
* \param val Tolerance value.
*/
void setTolerance(double val);
/*!
* \brief Set increment flag.
*/
void setIncrementFlag();
/*!
* \brief Set increment.
* \param val Increment value;
*/
void setIncrement(double val);
/*!
* \brief Set nearby flag.
*/
void setNearbyFlag();
/*!
* \brief Set iterations.
* \param val Number of iterations.
*/
void setIterations(int val);
/*!
* \brief Set remove unconnected vertices flag.
*/
void setRemoveUnconnectedFlag();
/*!
* \brief Set fill holes flag.
*/
void setFillHolesFlag();
/*!
* \brief Set repair normal directions flag.
*/
void setNormalDirFlag();
/*!
* \brief Set repair normal values flag.
*/
void setNormalValFlag();
/*!
* \brief Repair selected model according to selected flags.
*/
void repair();
/*!
* \brief Merge all active models into one.
*/
void merge();
/*!
* \brief Split all active models by shells if possible.
*/
void split();
/*!
* \brief Duplicate all active models.
*/
void duplicate();
/*!
* \brief Undo last operation.
*/
void undo();
/*!
* \brief Redo last undoed operation.
*/
void redo();
private:
/*!
* \brief Add current items state into history list.
*/
void pushHistory();
/*!
* \brief Prepare items for next operation.
*
* Active items are deep copied.
* Reference for each inactive item is raised.
*/
void renewList();
/*!
* \brief Update listView of items according to current item list.
*/
void renewListView();
/*!
* \brief Add name of given item at the end of ListView.
*
* \param item Item to be processed.
*/
void addItemToView(MeshObject* item);
/*!
* \brief Allow use of selected actions based on scene state.
*
* E.g. allow undo/redo.
*/
void allowFunctions();
/*!
* \brief Allow use of selected actions based on selection.
*
* E.g. allow save as/export.
*/
void allowSelectionFunctions();
historyList history; ///< History list
QList <MeshObject*> objectList; ///< List of currently drawn objects.
QVector3D color; ///< Default color
QVector3D badColor; ///< Backface color
QLabel* statusBar; ///< Status bar pointer.
QListView *listView; ///< ListView pointer.
QStandardItemModel *listModel; ///< Model to be displayed in ListView.
QList <MeshObject*>::size_type count; ///< Count of all objects.
QIcon hiddenIcon; ///< Hidden icon
QIcon visibleIcon; ///< Visible icon
QString openPath; ///< Last path used for file open
int mode; ///< Solid or wireframe or both mode
float versor[3]; ///< Scale versor
bool useVersor; ///< Use versor or not
float rot; ///< Rotation angle
float x_translate; ///< X translation factor
float y_translate; ///< Y translation factor
float z_translate; ///< Z translation factor
bool rel_translate; ///< Relative translation
bool fixall_flag;
bool exact_flag;
bool tolerance_flag;
float tolerance;
bool increment_flag;
float increment;
bool nearby_flag;
int iterations;
bool remove_unconnected_flag;
bool fill_holes_flag;
bool normal_directions_flag;
bool normal_values_flag;
clock_t start_time;
};
#endif // ADMESHCONTROLLER_H