src/invert.cpp

Tue, 07 Jun 2022 01:37:26 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Tue, 07 Jun 2022 01:37:26 +0300
changeset 201
5d201ee4a9c3
parent 200
ca23936b455b
child 206
654661eab7f3
permissions
-rw-r--r--

Continue giant refactor

/*
 *  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 "model.h"
#include "gl/common.h"
#include "invert.h"
#include "documentmanager.h"

/*
 * Returns a matrix that causes a flip on the given dimension.
 */
glm::mat4 math::flipmatrix(const Axis dimension)
{
	glm::mat4 result = glm::mat4();
	const int k = static_cast<int>(dimension);
	result[k][k] = -1;
	return result;
}

/*
 * Inverts the winding of a polygon.
 */
void gl::invert(gl::Polygon& polygon)
{
	switch (polygon.numPolygonVertices())
	{
	case 2:
	case 3:
		// 0 1 => 1 0
		// 0 1 2 => 1 0 2
		std::swap(polygon.vertices[0], polygon.vertices[1]);
		break;
	case 4:
		// 0 1 2 3 => 0 3 2 1
		std::swap(polygon.vertices[1], polygon.vertices[3]);
		break;
	}
}

mercurial