--- a/src/vertex.cpp Sun Jan 26 01:06:27 2020 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,221 +0,0 @@ -/* - * LDForge: LDraw parts authoring CAD - * Copyright (C) 2013 - 2020 Teemu Piippo - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "main.h" -#include "vertex.h" - -/* -void Vertex::transform(const Matrix& matrix, const Vertex& pos) -{ - double x2 = (matrix(0, 0) * x) + (matrix(0, 1) * y) + (matrix(0, 2) * z) + pos.x; - double y2 = (matrix(1, 0) * x) + (matrix(1, 1) * y) + (matrix(1, 2) * z) + pos.y; - double z2 = (matrix(2, 0) * x) + (matrix(2, 1) * y) + (matrix(2, 2) * z) + pos.z; - this->x = x2; - this->y = y2; - this->z = z2; -} -*/ - -Point3D::CoordinateType& Point3D::get(Axis axis) -{ - switch (axis) - { - case X: - return this->x; - case Y: - return this->y; - case Z: - return this->z; - default: - throw std::runtime_error("Non-axis given to Vertex::operator[]"); - } -} - -Point3D::CoordinateType Point3D::get(Axis axis) const -{ - switch (axis) - { - case X: - return this->x; - case Y: - return this->y; - case Z: - return this->z; - default: - return 0; - } -} - -Point3D::operator QVariant() const -{ - return QVariant::fromValue(*this); -} - -void Point3D::assign(Axis axis, CoordinateType value) -{ - this->get(axis) = value; -} - -Point3D VertexFromVector(const QVector3D& vector) -{ - return {vector.x(), vector.y(), vector.z()}; -} - -Point3D operator*(const Point3D& point, Point3D::CoordinateType scalar) -{ - return {point.x * scalar, point.y * scalar, point.z * scalar}; -} - -Point3D& operator+=(Point3D& point, const QVector3D& other) -{ - point.x += other.x(); - point.y += other.y(); - point.z += other.z(); - return point; -} - -Point3D operator+(Point3D point, const QVector3D& other) -{ - point += other; - return point; -} - - -QVector3D vertexToVector(const Point3D& vertex) -{ - return { - static_cast<float>(vertex.x), - static_cast<float>(vertex.y), - static_cast<float>(vertex.z) - }; -} - -Point3D operator-(Point3D point, const QVector3D& vector) -{ - point -= vector; - return point; -} - -Point3D& operator-=(Point3D& point, const QVector3D& vector) -{ - point.x -= vector.x(); - point.y -= vector.y(); - point.z -= vector.z(); - return point; -} - -QVector3D operator-(const Point3D& point, const Point3D& other) -{ - return { - static_cast<float>(point.x - other.x), - static_cast<float>(point.y - other.y), - static_cast<float>(point.z - other.z) - }; -} - -Point3D& operator*=(Point3D& point, Point3D::CoordinateType scalar) -{ - point.x *= scalar; - point.y *= scalar; - point.z *= scalar; - return point; -} - -bool operator==(const Point3D& point, const Point3D& other) -{ - return point.x == other.x and point.y == other.y and point.z == other.z; -} - -bool operator!=(const Point3D& point, const Point3D& other) -{ - return not (point == other); -} - -bool operator<(const Point3D& point, const Point3D& other) -{ - if (not qFuzzyCompare(point.x, other.x)) - return point.x < other.x; - else if (not qFuzzyCompare(point.y, other.y)) - return point.y < other.y; - else - return point.z < other.z; -} - -/* - * Transforms the specified vertex with a transformation matrix - */ -Point3D math::transform(const Point3D& point, const Matrix4x4& matrix) -{ - return { - matrix(0, 0) * point.x - + matrix(0, 1) * point.y - + matrix(0, 2) * point.z - + matrix(0, 3), - matrix(1, 0) * point.x - + matrix(1, 1) * point.y - + matrix(1, 2) * point.z - + matrix(1, 3), - matrix(2, 0) * point.x - + matrix(2, 1) * point.y - + matrix(2, 2) * point.z - + matrix(2, 3), - }; -} - -/* - * Returns the distance from one vertex to another. - */ -qreal math::distance(const Point3D& one, const Point3D& other) -{ - return (one - other).length(); -} - -/* - * Returns a vertex with all coordinates inverted. - */ -Point3D operator-(const Point3D& vertex) -{ - return {-vertex.x, -vertex.y, -vertex.z}; -} - -/* - * Inserts this vertex into a data stream. This is needed for vertices to be - * stored in QSettings. - */ -QDataStream& operator<<(QDataStream& out, const Point3D& vertex) -{ - return out << vertex.x << vertex.y << vertex.z; -} - -/* - * Takes a vertex from a data stream. - */ -QDataStream& operator>>(QDataStream& in, Point3D& vertex) -{ - return in >> vertex.x >> vertex.y >> vertex.z; -} - -unsigned int qHash(const Point3D& key) -{ - return qHash(key.x) ^ utility::rotl10(qHash(key.y)) ^ utility::rotl20(qHash(key.z)); -} - -QString vertexToStringParens(const Point3D& vertex) -{ - return utility::format("(%1, %2, %3)", vertex.x, vertex.y, vertex.z); -}