Skip to content
OE_joincurve.cpp 2.06 KiB
Newer Older
/*
 * Copyright (c) 2015 Tricoire Sebastien 3dsman@free.fr
 *
 * This software is provided 'as-is', without any express or implied
 * warranty.  In no event will the authors be held liable for any damages
 * arising from the use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you must not
 * claim that you wrote the original software. If you use this software
 * in a product, an acknowledgment in the product documentation would be
 * appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 * misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 *
 */

#include "OE_joincurve.h"
#include <iostream>

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>

OE_joincurve::OE_joincurve(OE_curve* curve1, OE_curve* curve2)
{
	curves.push_back(curve1);
	curves.push_back(curve2);
	refresh();
	needRefresh = true;
}


OE_joincurve::~OE_joincurve()
{
}


/** \brief check if the curve is valid.	 */
bool OE_joincurve::check()
{
	if (curves.size())
	{
		for(unsigned i=0; i<curves.size()-1; i++)
		{
			if (!(curves.at(i)->check())) return false;
		}
		return true;
	}
	return false;
}
		
/** \brief refresh the discPts array.	 */
bool OE_joincurve::refresh()
{
	if (check())
	{
		pts.clear();
		for(unsigned i=0; i<curves.size(); i++)
		{
			//pts.push_back((pts.end()+curves.at(i)->pts.begin())/2.0);
			//pts.push_back((pts.end()+curves.at(i)->pts.begin())/2.0);
			if (pts.size()&&curves.at(i)->pts.size())
			{
				pts.push_back((curves.at(i)->pts.at(0)-pts.at(pts.size()-1)) /3.0f+pts.at(pts.size()-1));
				pts.push_back((curves.at(i)->pts.at(0)-pts.at(pts.size()-1))*2.0f /3.0f+pts.at(pts.size()-1));

			}
			pts.insert(pts.end(), curves.at(i)->pts.begin(), curves.at(i)->pts.end());
		}
		return true;
	}
		return false;
}