/* * This file is part of project OpenEmbroidery. It's copyrighted by * the contributors recorded in the version control history of the file. * Original project location https://code.electrolab.fr/openEmbroidery/openEmbroidery_software * * SPDX-License-Identifier: CECILL-2.1 * License-Filename: Licence_CeCILL_V2.1-en.txt */ #include "curves/OE_subcurve.h" #include "Archive.h" #include #include #include #include #include OE_subcurve::OE_subcurve() : curve(nullptr), start(0), end(0), reverse(false) { } OE_subcurve::OE_subcurve(OE_curve* curve, float curveStart, float curveEnd, bool reverse) : start(-1), end(-1) { this->curve = curve; curve->addDependency(this); start = curveStart; end = curveEnd; this->reverse = reverse; //refresh(); } OE_subcurve::~OE_subcurve() { curve->removeDependency(this); } void OE_subcurve::persist(Pakal::Archive* archive) { archive->refer("curve", curve); archive->value("start", start); archive->value("end", end); archive->value("reverse", reverse); } /** \brief check if the curve is valid. */ bool OE_subcurve::check() { return curve != 0; } /** \brief refresh the discPts array. */ void OE_subcurve::refresh(float dpi, bool force) { if (!check() || !(needRefresh||force)) { return; } curve->refresh(dpi, force); float tmpStart = start; float tmpEnd = end; if (start == -1) { tmpStart = 0; } if (end == -1) { tmpEnd = (curve->getNpts()-1)/3; } pts.clear(); pts = curve->subCurve(tmpStart, tmpEnd, reverse); OE_curve::refresh(dpi); } void OE_subcurve::delDependency(OE_base* object) { if (curve == object) { curve = 0; } } void OE_subcurve::refreshDependency() { if(curve) { curve->refreshDependency(); curve->addDependency(this); } } bool OE_subcurve::setStart(float curveStart) { start = curveStart; setNeedRefresh(); return true; } bool OE_subcurve::setEnd(float curveEnd) { end = curveEnd; setNeedRefresh(); return true; } bool OE_subcurve::setReverse(bool curveReverse) { reverse = curveReverse; setNeedRefresh(); return true; } OE_curve* OE_subcurve::getCurve() { return curve; } float OE_subcurve::getStart() { return start; } float OE_subcurve::getEnd() { return end; } bool OE_subcurve::getReverse() { return reverse; }