/* * 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 "curves/OE_joincurve.h" #include #include #include #include #include OE_joincurve::OE_joincurve(OE_curve* curve1, OE_curve* curve2) { curves.push_back(curve1); curve1->addDependency(this); curves.push_back(curve2); curve2->addDependency(this); refresh(); } OE_joincurve::~OE_joincurve() { std::list::iterator i = curves.begin(); while (i != curves.end()) { (*i)->removeDependency(this); i++; } } /** \brief check if the curve is valid. */ bool OE_joincurve::check() { if (curves.size()) { std::list::iterator i = curves.begin(); while (i != curves.end()) { if (!((*i)->check())) return false; i++; } return true; } return false; } /** \brief refresh the discPts array. */ void OE_joincurve::refresh() { if (check()&&needRefresh) { pts.clear(); std::list::iterator i = curves.begin(); while (i != curves.end()) { (*i)->refresh(); //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()&&(*i)->pts.size()) { pts.push_back(((*i)->pts.at(0)-pts.at(pts.size()-1)) /3.0f+pts.at(pts.size()-1)); pts.push_back(((*i)->pts.at(0)-pts.at(pts.size()-1))*2.0f /3.0f+pts.at(pts.size()-1)); } pts.insert(pts.end(), (*i)->pts.begin(), (*i)->pts.end()); i++; } } } void OE_joincurve::delDependency(OE_base * object) { if (curves.size()) { curves.remove((OE_curve*)object); } }