src/linetypes/quadrilateral.cpp

Wed, 22 Jan 2020 22:41:17 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Wed, 22 Jan 2020 22:41:17 +0200
changeset 28
c92c1daf735f
parent 26
3a9e761e4faa
child 33
4c41bfe2ec6e
permissions
-rw-r--r--

modelview matrix set up

#include "quadrilateral.h"

linetypes::Quadrilateral::Quadrilateral(
	const Point3D& point_1,
	const Point3D& point_2,
	const Point3D& point_3,
	const Point3D& point_4,
	Color color_index) :
	ColoredObject{color_index},
	points{point_1, point_2, point_3, point_4}
{
}

linetypes::Quadrilateral::Quadrilateral(const QVector<Point3D>& vertices, const Color color) :
	ColoredObject{color},
	points{vertices[0], vertices[1], vertices[2], vertices[3]}
{
}

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

auto linetypes::Quadrilateral::setProperty(
	const Property id,
	const QVariant& value)
	-> SetPropertyResult
{
	switch (id)
	{
	case Property::Point1:
		points[0] = value.value<Point3D>();
		return SetPropertyResult::Success;
	case Property::Point2:
		points[1] = value.value<Point3D>();
		return SetPropertyResult::Success;
	case Property::Point3:
		points[2] = value.value<Point3D>();
		return SetPropertyResult::Success;
	case Property::Point4:
		points[3] = value.value<Point3D>();
		return SetPropertyResult::Success;
	default:
		return ColoredObject::setProperty(id, value);
	}
}

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

void linetypes::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 linetypes::Quadrilateral::invert()
{
	//    0 1 2 3
	// -> 2 1 0 3
	std::swap(this->points[0], this->points[2]);
}

mercurial