Fri, 01 Jan 2016 23:41:55 +0200
Happy new year 2016!
| 
829
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
1 | /* | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
2 | * LDForge: LDraw parts authoring CAD | 
| 
1014
 
f0a8ecb6a357
Happy new year 2016!
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
1006 
diff
changeset
 | 
3 | * Copyright (C) 2013 - 2016 Teemu Piippo | 
| 
829
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
4 | * | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
5 | * This program is free software: you can redistribute it and/or modify | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
6 | * it under the terms of the GNU General Public License as published by | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
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. | 
| 
829
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
9 | * | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
10 | * This program is distributed in the hope that it will be useful, | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
13 | * GNU General Public License for more details. | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
14 | * | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
15 | * You should have received a copy of the GNU General Public License | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
17 | */ | 
| 
 
bb903e89e23c
- now with license headers
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
827 
diff
changeset
 | 
18 | |
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
19 | #pragma once | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
20 | #include "../main.h" | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
21 | |
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
22 | class QPainter; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
23 | class GLRenderer; | 
| 827 | 24 | class QMouseEvent; | 
| 
875
 
ce8e9b37d44f
- finished line loop mode
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
874 
diff
changeset
 | 
25 | class QKeyEvent; | 
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
26 | |
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
27 | enum class EditModeType | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
28 | { | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
29 | Select, | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
30 | Draw, | 
| 
841
 
1243abd47381
- split the rectangle ability out of the draw mode into its own edit mode
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
830 
diff
changeset
 | 
31 | Rectangle, | 
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
32 | Circle, | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
33 | MagicWand, | 
| 
876
 
f040f0fb3795
- renamed line loop to line path, updated changelog
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
875 
diff
changeset
 | 
34 | LinePath, | 
| 
1000
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
35 | Curve, | 
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
36 | }; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
37 | |
| 
970
 
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
968 
diff
changeset
 | 
38 | class AbstractEditMode : public QObject, public HierarchyElement | 
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
39 | { | 
| 
970
 
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
968 
diff
changeset
 | 
40 | Q_OBJECT | 
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
41 | |
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
42 | public: | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
43 | struct MouseEventData | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
44 | { | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
45 | QMouseEvent* ev; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
46 | Qt::KeyboardModifiers keymods; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
47 | bool mouseMoved; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
48 | Qt::MouseButtons releasedButtons; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
49 | }; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
50 | |
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
51 | AbstractEditMode (GLRenderer* renderer); | 
| 827 | 52 | virtual ~AbstractEditMode(); | 
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
53 | |
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
54 | virtual bool allowFreeCamera() const = 0; | 
| 
866
 
4951b737f8cb
- now able to spawn partial circular primitives
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
861 
diff
changeset
 | 
55 | virtual void render (QPainter&) const {} | 
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
56 | GLRenderer* renderer() const; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
57 | virtual EditModeType type() const = 0; | 
| 
825
 
f7649c9bfd9a
- more work on edit modes
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
824 
diff
changeset
 | 
58 | virtual bool mousePressed (QMouseEvent*) { return false; } | 
| 
 
f7649c9bfd9a
- more work on edit modes
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
824 
diff
changeset
 | 
59 | virtual bool mouseReleased (MouseEventData const&) { return false; } | 
| 
 
f7649c9bfd9a
- more work on edit modes
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
824 
diff
changeset
 | 
60 | virtual bool mouseDoubleClicked (QMouseEvent*) { return false; } | 
| 
 
f7649c9bfd9a
- more work on edit modes
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
824 
diff
changeset
 | 
61 | virtual bool mouseMoved (QMouseEvent*) { return false; } | 
| 
875
 
ce8e9b37d44f
- finished line loop mode
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
874 
diff
changeset
 | 
62 | virtual bool keyReleased (QKeyEvent*) { return false; } | 
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
63 | |
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
64 | static AbstractEditMode* createByType (GLRenderer* renderer, EditModeType type); | 
| 
970
 
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
968 
diff
changeset
 | 
65 | |
| 
 
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
968 
diff
changeset
 | 
66 | private: | 
| 
 
c8aae45afd85
Commit configuration rework (doesn't work yet, more than most probably doesn't compile either)
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
968 
diff
changeset
 | 
67 | GLRenderer* m_renderer; | 
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
68 | }; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
69 | |
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
70 | // | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
71 | // Base class for draw-like edit modes | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
72 | // | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
73 | class AbstractDrawMode : public AbstractEditMode | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
74 | { | 
| 827 | 75 | DEFINE_CLASS (AbstractDrawMode, AbstractEditMode) | 
| 76 | ||
| 77 | protected: | |
| 
861
 
83426c5fa732
- major identifier renaming
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
844 
diff
changeset
 | 
78 | QList<Vertex> m_drawedVerts; | 
| 
 
83426c5fa732
- major identifier renaming
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
844 
diff
changeset
 | 
79 | QBrush m_polybrush; | 
| 
824
 
6add2126e7ff
- more work on edit modes
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
823 
diff
changeset
 | 
80 | |
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
81 | public: | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
82 | AbstractDrawMode (GLRenderer* renderer); | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
83 | |
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
84 | void addDrawnVertex (const Vertex& pos); | 
| 
1000
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
85 | virtual bool allowFreeCamera() const override final { return false; } | 
| 
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
86 | virtual void endDraw() {} | 
| 
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
87 | void drawLength (QPainter& painter, | 
| 
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
88 | const Vertex& v0, const Vertex& v1, | 
| 
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
89 | const QPointF& v0p, const QPointF& v1p) const; | 
| 
841
 
1243abd47381
- split the rectangle ability out of the draw mode into its own edit mode
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
830 
diff
changeset
 | 
90 | void finishDraw (const LDObjectList& objs); | 
| 
1000
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
91 | Vertex getCursorVertex() const; | 
| 
875
 
ce8e9b37d44f
- finished line loop mode
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
874 
diff
changeset
 | 
92 | bool keyReleased (QKeyEvent* ev) override; | 
| 
1000
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
93 | virtual int maxVertices() const { return 0; } | 
| 
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
94 | bool mouseReleased (const AbstractEditMode::MouseEventData& data) override; | 
| 
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
95 | virtual bool preAddVertex (Vertex const&) { return false; } | 
| 
 
c064cc048f14
Begin work on Bézier curve support. They can be drawn but don't render in 3D and they load as comments.
 
Teemu Piippo <crimsondusk64@gmail.com> 
parents: 
970 
diff
changeset
 | 
96 | void renderPolygon (QPainter& painter, const QVector<Vertex>& poly3d, bool withlengths, bool withangles) const; | 
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
97 | }; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
98 | |
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
99 | // | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
100 | // Base class for select-like edit modes | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
101 | // | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
102 | class AbstractSelectMode : public AbstractEditMode | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
103 | { | 
| 
824
 
6add2126e7ff
- more work on edit modes
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
823 
diff
changeset
 | 
104 | DEFINE_CLASS (AbstractSelectMode, AbstractEditMode) | 
| 
 
6add2126e7ff
- more work on edit modes
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents: 
823 
diff
changeset
 | 
105 | |
| 
823
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
106 | public: | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
107 | AbstractSelectMode (GLRenderer* renderer); | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
108 | |
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
109 | virtual bool allowFreeCamera() const override | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
110 | { | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
111 | return true; | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
112 | } | 
| 
 
1a2f593f0c02
- saving work done on edit mode revamp
 
Santeri Piippo <crimsondusk64@gmail.com> 
parents:  
diff
changeset
 | 
113 | }; |