Thu, 07 Feb 2019 13:45:07 +0200
stuff
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
1326 | 3 | * Copyright (C) 2013 - 2018 Teemu Piippo |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
4 | * |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
1006
a6b462051ae0
Copyright header fix, some minor stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1000
diff
changeset
|
8 | * (at your option) any later version. |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
9 | * |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
13 | * GNU General Public License for more details. |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
14 | * |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
17 | */ |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
18 | |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
19 | #pragma once |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
20 | #include <QGLWidget> |
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
21 | #include "main.h" |
1098
0b837bed121d
LDGLData merged into GLRenderer since it only deals with one document now. GLRenderer generalised from rendering documents to models.
Teemu Piippo <teemu@hecknology.net>
parents:
1097
diff
changeset
|
22 | #include "model.h" |
706
d79083b9f74d
Merge ../ldforge into gl
Santeri Piippo <crimsondusk64@gmail.com>
parents:
655
diff
changeset
|
23 | #include "glShared.h" |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
24 | #include "glcamera.h" |
1159
6ad8cdcd88d9
print() is no longer a global function but is tied to HierarchyElement.
Teemu Piippo <teemu@hecknology.net>
parents:
1158
diff
changeset
|
25 | #include "hierarchyelement.h" |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
26 | |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
27 | // The main renderer object, draws the brick on the screen, manages the camera and selection picking. |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
28 | class gl::Renderer : public QGLWidget, protected QOpenGLFunctions, public HierarchyElement |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
29 | { |
802
2e220b9083bf
- refactor glRenderer.h
Santeri Piippo <crimsondusk64@gmail.com>
parents:
790
diff
changeset
|
30 | Q_OBJECT |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
31 | |
802
2e220b9083bf
- refactor glRenderer.h
Santeri Piippo <crimsondusk64@gmail.com>
parents:
790
diff
changeset
|
32 | public: |
1437
1a77c6156db7
commit work done on mdi
Teemu Piippo <teemu@hecknology.net>
parents:
1436
diff
changeset
|
33 | Renderer(const Model* model, gl::CameraType cameraType, QWidget* parent = nullptr); |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
34 | ~Renderer(); |
1278
6e1ea24e5a5e
moved LDObject indices from a global array into Model
Santeri Piippo
parents:
1251
diff
changeset
|
35 | |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
36 | gl::CameraType camera() const; |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
37 | GLCamera& currentCamera(); |
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
38 | const GLCamera& currentCamera() const; |
1306
be85306198a2
red/green view rework complete
Teemu Piippo <teemu@hecknology.net>
parents:
1278
diff
changeset
|
39 | Q_SLOT void fullUpdate(); |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
40 | Qt::KeyboardModifiers keyboardModifiers() const; |
1113
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1111
diff
changeset
|
41 | const Model* model() const; |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
42 | QPoint const& mousePosition() const; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
43 | QPointF const& mousePositionF() const; |
1247 | 44 | QPersistentModelIndex objectAtCursor() const; |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
45 | QItemSelection pick(const QRect& range); |
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
46 | QModelIndex pick(int mouseX, int mouseY); |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
47 | void resetAngles(); |
1171
430ffa371d2a
Turned GLRenderer::pixelCapture to GLRenderer::screenCapture() which encapsulates screen capturing properly and returns a ready image.
Teemu Piippo <teemu@hecknology.net>
parents:
1170
diff
changeset
|
48 | QImage screenCapture(); |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
49 | void setBackground(); |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
50 | QPen textPen() const; |
1251
e75cc5bff076
Converted magic wand mode and other selection stuff to mvc
Santeri Piippo
parents:
1247
diff
changeset
|
51 | QItemSelectionModel* selectionModel() const; |
1246 | 52 | void setSelectionModel(QItemSelectionModel* selectionModel); |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
53 | |
1113
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1111
diff
changeset
|
54 | signals: |
1438 | 55 | void closed(); |
1247 | 56 | void objectHighlightingChanged(const QModelIndex& oldIndex, const QModelIndex& newIndex); |
1113
5f3139c802bf
Cleaned up GLCompiler. Among other changes, the compiler no longer has to be told what to compile.
Teemu Piippo <teemu@hecknology.net>
parents:
1111
diff
changeset
|
57 | |
802
2e220b9083bf
- refactor glRenderer.h
Santeri Piippo <crimsondusk64@gmail.com>
parents:
790
diff
changeset
|
58 | protected: |
1438 | 59 | void closeEvent(QCloseEvent* event) override; |
60 | void initializeGL() override; | |
1178
3a88e7a60b63
At long last, the grid is finally now rendered onto the viewport. Woop!
Teemu Piippo <teemu@hecknology.net>
parents:
1176
diff
changeset
|
61 | virtual void drawFixedCameraBackdrop(); |
1438 | 62 | void keyPressEvent(QKeyEvent* event) override; |
63 | void keyReleaseEvent(QKeyEvent* event) override; | |
64 | void leaveEvent(QEvent* event) override; | |
65 | void mousePressEvent(QMouseEvent* event) override; | |
66 | void mouseMoveEvent(QMouseEvent* ev) override; | |
67 | void mouseReleaseEvent(QMouseEvent* ev) override; | |
68 | void paintEvent(QPaintEvent*) override; | |
69 | void resizeGL(int w, int h) override; | |
70 | void wheelEvent(QWheelEvent* ev) override; | |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
71 | |
1170
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
72 | QColor backgroundColor() const; |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
73 | virtual bool freeCameraAllowed() const; |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
74 | bool isDrawingSelectionScene() const; |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
75 | Qt::MouseButtons lastButtons() const; |
1170
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
76 | bool mouseHasMoved() const; |
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
77 | virtual void overpaint(QPainter& painter); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
78 | double panning (Axis ax) const; |
1129
2b20261dc511
Exported GLRenderer cameras into a new class, GLCamera.
Teemu Piippo <teemu@hecknology.net>
parents:
1123
diff
changeset
|
79 | double zoom(); |
1104
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
80 | |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
81 | template<typename... Args> |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
82 | QString format (QString fmtstr, Args... args) |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
83 | { |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
84 | return ::format (fmtstr, args...); |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
85 | } |
edddb9b0db9e
Moved document editing methods from GLRenderer to Canvas
Teemu Piippo <teemu@hecknology.net>
parents:
1100
diff
changeset
|
86 | |
802
2e220b9083bf
- refactor glRenderer.h
Santeri Piippo <crimsondusk64@gmail.com>
parents:
790
diff
changeset
|
87 | private: |
1109
a55b2608a395
Made GLRenderer's Model pointer const
Teemu Piippo <teemu@hecknology.net>
parents:
1108
diff
changeset
|
88 | const Model* const m_model; |
1437
1a77c6156db7
commit work done on mdi
Teemu Piippo <teemu@hecknology.net>
parents:
1436
diff
changeset
|
89 | gl::CameraType const m_camera; |
1436
241d3e452b32
moved GL stuff into a new gl namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1404
diff
changeset
|
90 | gl::Compiler* m_compiler; |
1247 | 91 | QPersistentModelIndex m_objectAtCursor; |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
92 | QTimer* m_toolTipTimer; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
93 | Qt::MouseButtons m_lastButtons; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
94 | Qt::KeyboardModifiers m_currentKeyboardModifiers; |
1393
f0fe7ea82b81
changed rotation matrix to quaternion in GLRenderer
Teemu Piippo <teemu@hecknology.net>
parents:
1369
diff
changeset
|
95 | QQuaternion m_rotation; |
1437
1a77c6156db7
commit work done on mdi
Teemu Piippo <teemu@hecknology.net>
parents:
1436
diff
changeset
|
96 | GLCamera m_cameraInfo; |
1061 | 97 | bool m_useDarkBackground = false; |
98 | bool m_panning = false; | |
99 | bool m_initialized = false; | |
100 | bool m_isDrawingSelectionScene = false; | |
101 | bool m_isCameraMoving = false; | |
1098
0b837bed121d
LDGLData merged into GLRenderer since it only deals with one document now. GLRenderer generalised from rendering documents to models.
Teemu Piippo <teemu@hecknology.net>
parents:
1097
diff
changeset
|
102 | bool m_needZoomToFit = true; |
1169
3da9287b4aff
Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents:
1168
diff
changeset
|
103 | bool m_axesInitialized = false; |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
104 | QPoint m_mousePosition; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
105 | QPoint m_globalpos; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
106 | QPointF m_mousePositionF; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
107 | GLuint m_axeslist; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
108 | int m_totalMouseMove; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
109 | QColor m_backgroundColor; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
110 | GLuint m_axesVbo; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
111 | GLuint m_axesColorVbo; |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
112 | |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
113 | void calcCameraIcons(); |
1170
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
114 | void drawGLScene(); |
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
115 | void drawVbos(VboClass surface, VboSubclass colors); |
1169
3da9287b4aff
Cleanup GLRenderer::initializeAxes()
Teemu Piippo <teemu@hecknology.net>
parents:
1168
diff
changeset
|
116 | void freeAxes(); |
1170
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
117 | void highlightCursorObject(); |
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
118 | void initializeAxes(); |
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
119 | void initializeLighting(); |
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
120 | void initGLData(); |
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
121 | void needZoomToFit(); |
2045a395213a
Hardened the GLRenderer interface, made methods more private.
Teemu Piippo <teemu@hecknology.net>
parents:
1169
diff
changeset
|
122 | void setPicking(bool picking); |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
123 | void zoomToFit(); |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
984
diff
changeset
|
124 | void zoomAllToFit(); |
655
b376645315ab
- renamed files to camelCase
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
125 | }; |