19 #pragma once |
19 #pragma once |
20 #include <functional> |
20 #include <functional> |
21 #include <QVector3D> |
21 #include <QVector3D> |
22 #include "basics.h" |
22 #include "basics.h" |
23 |
23 |
24 struct Vertex |
24 struct Point3D |
25 { |
25 { |
26 using ValueType = double; |
26 double x, y, z; |
27 ValueType x; |
27 using CoordinateType = decltype(x); |
28 ValueType y; |
28 void assign(Axis axis, CoordinateType value); |
29 ValueType z; |
29 CoordinateType& get(Axis ax); |
30 // void transform(const class Matrix& matrix, const Vertex& pos); |
30 CoordinateType get(Axis ax) const; |
31 Vertex transformed(const GLRotationMatrix& matrix) const; |
|
32 void setCoordinate(Axis ax, ValueType value); |
|
33 Vertex& operator+=(const QVector3D& other); |
|
34 Vertex operator+(const QVector3D& other) const; |
|
35 QVector3D operator-(const Vertex& other) const; |
|
36 Vertex operator-(const QVector3D& vector) const; |
|
37 Vertex& operator-=(const QVector3D& vector); |
|
38 Vertex& operator*=(ValueType scalar); |
|
39 Vertex operator*(ValueType scalar) const; |
|
40 bool operator<(const Vertex& other) const; |
|
41 ValueType& operator[](Axis ax); |
|
42 ValueType operator[](Axis ax) const; |
|
43 bool operator==(const Vertex& other) const; |
|
44 bool operator!=(const Vertex& other) const; |
|
45 operator QVariant() const; |
|
46 }; |
31 }; |
47 |
32 |
48 inline Vertex operator*(qreal scalar, const Vertex& vertex) |
33 namespace math |
|
34 { |
|
35 Point3D transform(const Point3D point, const GLRotationMatrix& matrix); |
|
36 qreal distance(const Point3D& one, const Point3D& other); |
|
37 } |
|
38 |
|
39 Point3D& operator+=(Point3D &point, const QVector3D& other); |
|
40 Point3D operator+(Point3D point, const QVector3D& other); |
|
41 QVector3D operator-(const Point3D& point, const Point3D& other); |
|
42 Point3D operator-(Point3D point, const QVector3D& vector); |
|
43 Point3D& operator-=(Point3D &point, const QVector3D& vector); |
|
44 Point3D& operator*=(Point3D &point, Point3D::CoordinateType scalar); |
|
45 Point3D operator*(const Point3D &point, Point3D::CoordinateType scalar); |
|
46 bool operator<(const Point3D &point, const Point3D& other); |
|
47 bool operator==(const Point3D &point, const Point3D& other); |
|
48 bool operator!=(const Point3D &point, const Point3D& other); |
|
49 |
|
50 inline Point3D operator*(qreal scalar, const Point3D& vertex) |
49 { |
51 { |
50 return vertex * scalar; |
52 return vertex * scalar; |
51 } |
53 } |
52 |
54 |
53 Q_DECLARE_METATYPE(Vertex) |
55 Q_DECLARE_METATYPE(Point3D) |
54 qreal distance(const Vertex& one, const Vertex& other); |
56 Point3D vertexFromVector(const QVector3D& vector); |
55 Vertex vertexFromVector(const QVector3D& vector); |
57 QVector3D vertexToVector(const Point3D &vertex); |
56 QVector3D vertexToVector(const Vertex &vertex); |
58 QString vertexToStringParens(const Point3D& vertex); |
57 QString vertexToStringParens(const Vertex& vertex); |
59 unsigned int qHash(const Point3D& key); |
58 unsigned int qHash(const Vertex& key); |
60 Point3D operator-(const Point3D& vertex); |
59 Vertex operator-(const Vertex& vertex); |
61 QDataStream& operator<<(QDataStream& out, const Point3D& vertex); |
60 QDataStream& operator<<(QDataStream& out, const Vertex& vertex); |
62 QDataStream& operator>>(QDataStream& in, Point3D& vertex); |
61 QDataStream& operator>>(QDataStream& in, Vertex& vertex); |
|