src/vertex.h

changeset 18
918b6c0f8b5b
parent 17
a5111f4e6412
child 20
cef43609a374
equal deleted inserted replaced
17:a5111f4e6412 18:918b6c0f8b5b
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);

mercurial