src/linetypes/quadrilateral.cpp

Thu, 19 Mar 2020 21:06:06 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Thu, 19 Mar 2020 21:06:06 +0200
changeset 86
4bec0525ef1b
parent 81
62373840e33a
child 87
93ec4d630346
permissions
-rw-r--r--

PolygonObjectEditor can now modify the object properly

#include "quadrilateral.h"

ldraw::Quadrilateral::Quadrilateral
(
	const glm::vec3& point_1,
	const glm::vec3& point_2,
	const glm::vec3& point_3,
	const glm::vec3& point_4,
	Color color_index
) :
	ColoredObject{color_index},
	points{point_1, point_2, point_3, point_4}
{
}

ldraw::Quadrilateral::Quadrilateral
(
	const std::array<glm::vec3, 4>& vertices,
	const Color color
) :
	ColoredObject{color},
	points{vertices[0], vertices[1], vertices[2], vertices[3]}
{
}

QVariant ldraw::Quadrilateral::getProperty(const Property id) const
{
	switch (id)
	{
	case Property::Point0:
		return QVariant::fromValue(points[0]);
	case Property::Point1:
		return QVariant::fromValue(points[1]);
	case Property::Point2:
		return QVariant::fromValue(points[2]);
	case Property::Point3:
		return QVariant::fromValue(points[3]);
	default:
		return ColoredObject::getProperty(id);
	}
}

void ldraw::Quadrilateral::setProperty(SetPropertyResult* result, const PropertyKeyValue& pair)
{
	LDRAW_OBJECT_HANDLE_SET_PROPERTY(Point0, {points[0] = value;})
	LDRAW_OBJECT_HANDLE_SET_PROPERTY(Point1, {points[1] = value;})
	LDRAW_OBJECT_HANDLE_SET_PROPERTY(Point2, {points[2] = value;})
	LDRAW_OBJECT_HANDLE_SET_PROPERTY(Point3, {points[3] = value;})
	ColoredObject::setProperty(result, pair);
}

QString ldraw::Quadrilateral::textRepresentation() const
{
	return utility::format("%1 %2 %3 %4",
		utility::vertexToStringParens(points[0]),
		utility::vertexToStringParens(points[1]),
		utility::vertexToStringParens(points[2]),
		utility::vertexToStringParens(points[3]));
}

void ldraw::Quadrilateral::getPolygons(
	std::vector<gl::Polygon>& polygons,
	GetPolygonsContext* context) const
{
	Q_UNUSED(context)
	polygons.push_back(gl::quadrilateral(
		this->points[0],
		this->points[1],
		this->points[2],
		this->points[3],
		this->colorIndex,
			this->id));
}

void ldraw::Quadrilateral::invert()
{
	//    0 1 2 3
	// -> 2 1 0 3
	std::swap(this->points[0], this->points[2]);
}

int ldraw::Quadrilateral::numPoints() const
{
	return 4;
}

const glm::vec3& ldraw::Quadrilateral::getPoint(int index) const
{
	if (index >= 0 and index < 4)
	{
		return points[index];
	}
	else
	{
		return ldraw::ColoredObject::getPoint(index);
	}
}

mercurial