src/types/vertex.h

Thu, 21 Jun 2018 17:02:58 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Thu, 21 Jun 2018 17:02:58 +0300
changeset 1416
ba63c7286767
parent 1405
d2bf2e59a3ef
permissions
-rw-r--r--

fixed compile errors in some cases, bezier curve now stores the segment count in each object (not editable yet)

1315
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
1 /*
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
2 * LDForge: LDraw parts authoring CAD
1326
69a90bd2dba2 Happy new year 2018
Teemu Piippo <teemu@hecknology.net>
parents: 1324
diff changeset
3 * Copyright (C) 2013 - 2018 Teemu Piippo
1315
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
4 *
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
5 * This program is free software: you can redistribute it and/or modify
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
6 * it under the terms of the GNU General Public License as published by
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
7 * the Free Software Foundation, either version 3 of the License, or
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
8 * (at your option) any later version.
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
9 *
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful,
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
13 * GNU General Public License for more details.
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
14 *
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
17 */
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
18
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
19 #pragma once
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
20 #include <functional>
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
21 #include <QVector3D>
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
22 #include "../basics.h"
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
23
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
24 struct Vertex
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
25 {
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
26 qreal x, y, z;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
27
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
28 using ApplyFunction = std::function<void(Axis, double&)>;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
29 using ApplyConstFunction = std::function<void(Axis, double)>;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
30
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
31 void apply(ApplyFunction func);
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
32 void apply(ApplyConstFunction func) const;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
33 QString toString(bool mangled = false) const;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
34 QVector3D toVector() const;
1403
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1390
diff changeset
35 void transform(const QMatrix4x4& matrix);
7a2d84112983 replaced the Matrix class with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1390
diff changeset
36 void rotate(const QQuaternion& orientation);
1404
16eb4257e662 replaced GLRotationMatrix with QMatrix4x4
Teemu Piippo <teemu@hecknology.net>
parents: 1403
diff changeset
37 Vertex transformed(const QMatrix4x4& matrix) const;
1315
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
38 void setCoordinate(Axis ax, qreal value);
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
39
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
40 Vertex& operator+=(const QVector3D& other);
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
41 Vertex operator+(const QVector3D& other) const;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
42 QVector3D operator-(const Vertex& other) const;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
43 Vertex operator-(const QVector3D& vector) const;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
44 Vertex& operator-=(const QVector3D& vector);
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
45 Vertex& operator*=(qreal scalar);
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
46 Vertex operator*(qreal scalar) const;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
47 bool operator<(const Vertex& other) const;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
48 double& operator[](Axis ax);
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
49 double operator[](Axis ax) const;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
50 bool operator==(const Vertex& other) const;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
51 bool operator!=(const Vertex& other) const;
1390
3eace926af7f added draw plane feature (doesn't work with circle draw quite right yet)
Teemu Piippo <teemu@hecknology.net>
parents: 1371
diff changeset
52
3eace926af7f added draw plane feature (doesn't work with circle draw quite right yet)
Teemu Piippo <teemu@hecknology.net>
parents: 1371
diff changeset
53 static Vertex fromVector(const QVector3D& vector);
1315
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
54 };
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
55
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
56 inline Vertex operator*(qreal scalar, const Vertex& vertex)
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
57 {
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
58 return vertex * scalar;
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
59 }
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
60
1405
d2bf2e59a3ef replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents: 1404
diff changeset
61 /*
d2bf2e59a3ef replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents: 1404
diff changeset
62 * Call 'function' with the x, y and z coordinates of 'vertex'.
d2bf2e59a3ef replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents: 1404
diff changeset
63 */
d2bf2e59a3ef replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents: 1404
diff changeset
64 template<typename Function>
d2bf2e59a3ef replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents: 1404
diff changeset
65 inline void xyz(Function function, const Vertex& vertex)
d2bf2e59a3ef replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents: 1404
diff changeset
66 {
d2bf2e59a3ef replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents: 1404
diff changeset
67 function(vertex.x, vertex.y, vertex.z);
d2bf2e59a3ef replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents: 1404
diff changeset
68 }
d2bf2e59a3ef replaced overloads with a new 'xyz' function
Teemu Piippo <teemu@hecknology.net>
parents: 1404
diff changeset
69
1315
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
70 Q_DECLARE_METATYPE(Vertex)
1371
b8df4748d04e automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents: 1370
diff changeset
71 qreal distance(const Vertex& one, const Vertex& other);
1319
39d7a9642eea reorganized headers
Teemu Piippo <teemu@hecknology.net>
parents: 1315
diff changeset
72 unsigned int qHash(const Vertex& key);
1371
b8df4748d04e automatically center the model in the renderer
Teemu Piippo <teemu@hecknology.net>
parents: 1370
diff changeset
73 Vertex operator-(const Vertex& vertex);
1315
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
74 QDataStream& operator<<(QDataStream& out, const Vertex& vertex);
23d48a709ffc moved Vertex and BoundingBox into new code units
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
75 QDataStream& operator>>(QDataStream& in, Vertex& vertex);

mercurial