diff -r a5111f4e6412 -r 918b6c0f8b5b src/vertex.h --- a/src/vertex.h Fri Dec 13 15:55:56 2019 +0200 +++ b/src/vertex.h Fri Dec 13 21:35:59 2019 +0200 @@ -21,41 +21,42 @@ #include #include "basics.h" -struct Vertex +struct Point3D { - using ValueType = double; - ValueType x; - ValueType y; - ValueType z; - // void transform(const class Matrix& matrix, const Vertex& pos); - Vertex transformed(const GLRotationMatrix& matrix) const; - void setCoordinate(Axis ax, ValueType value); - Vertex& operator+=(const QVector3D& other); - Vertex operator+(const QVector3D& other) const; - QVector3D operator-(const Vertex& other) const; - Vertex operator-(const QVector3D& vector) const; - Vertex& operator-=(const QVector3D& vector); - Vertex& operator*=(ValueType scalar); - Vertex operator*(ValueType scalar) const; - bool operator<(const Vertex& other) const; - ValueType& operator[](Axis ax); - ValueType operator[](Axis ax) const; - bool operator==(const Vertex& other) const; - bool operator!=(const Vertex& other) const; - operator QVariant() const; + double x, y, z; + using CoordinateType = decltype(x); + void assign(Axis axis, CoordinateType value); + CoordinateType& get(Axis ax); + CoordinateType get(Axis ax) const; }; -inline Vertex operator*(qreal scalar, const Vertex& vertex) +namespace math +{ + Point3D transform(const Point3D point, const GLRotationMatrix& matrix); + qreal distance(const Point3D& one, const Point3D& other); +} + +Point3D& operator+=(Point3D &point, const QVector3D& other); +Point3D operator+(Point3D point, const QVector3D& other); +QVector3D operator-(const Point3D& point, const Point3D& other); +Point3D operator-(Point3D point, const QVector3D& vector); +Point3D& operator-=(Point3D &point, const QVector3D& vector); +Point3D& operator*=(Point3D &point, Point3D::CoordinateType scalar); +Point3D operator*(const Point3D &point, Point3D::CoordinateType scalar); +bool operator<(const Point3D &point, const Point3D& other); +bool operator==(const Point3D &point, const Point3D& other); +bool operator!=(const Point3D &point, const Point3D& other); + +inline Point3D operator*(qreal scalar, const Point3D& vertex) { return vertex * scalar; } -Q_DECLARE_METATYPE(Vertex) -qreal distance(const Vertex& one, const Vertex& other); -Vertex vertexFromVector(const QVector3D& vector); -QVector3D vertexToVector(const Vertex &vertex); -QString vertexToStringParens(const Vertex& vertex); -unsigned int qHash(const Vertex& key); -Vertex operator-(const Vertex& vertex); -QDataStream& operator<<(QDataStream& out, const Vertex& vertex); -QDataStream& operator>>(QDataStream& in, Vertex& vertex); +Q_DECLARE_METATYPE(Point3D) +Point3D vertexFromVector(const QVector3D& vector); +QVector3D vertexToVector(const Point3D &vertex); +QString vertexToStringParens(const Point3D& vertex); +unsigned int qHash(const Point3D& key); +Point3D operator-(const Point3D& vertex); +QDataStream& operator<<(QDataStream& out, const Point3D& vertex); +QDataStream& operator>>(QDataStream& in, Point3D& vertex);