Skip to content
OE_actionsCurves.cpp 8.71 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 "actions/OE_actionsCurves.h"
#include "OE_document.h"


///////// actionNewCurve ///////////////
/// \brief OE_actionNewCurve::OE_actionNewCurve
/// \param curve
///

OE_actionNewCurve::OE_actionNewCurve(OE_pointcurve* curve)
{
    if (document)
    {
        actionCurve = curve;
        document->addCurve( curve);
    }
}

OE_actionNewCurve::~OE_actionNewCurve()
{
}

void OE_actionNewCurve::undo()
{
    if (actionCurve && active) document->removeCurve(actionCurve);
    active = false;
}

void OE_actionNewCurve::redo()
{
    if (actionCurve && !active) document->addCurve( actionCurve);
    active = true;
}


///////// actionDelCurve ///////////////
/// \brief OE_actionDelCurve::OE_actionDelCurve
/// \param curve
///

OE_actionDelCurve::OE_actionDelCurve(OE_pointcurve* curve)
{
    if (document)
    {
        actionCurve = curve;
        document->removeCurve( curve);
    }
}

OE_actionDelCurve::~OE_actionDelCurve()
{
}

void OE_actionDelCurve::undo()
{
    if (actionCurve && active) document->addCurve( actionCurve);
    active = false;
}

void OE_actionDelCurve::redo()
{
    if (actionCurve && !active) document->removeCurve( actionCurve);
    active = true;
}



///////// actionNewCurve ///////////////
/// \brief OE_actionNewCurve::OE_actionNewCurve
/// \param curve
///

OE_actionNewSubCurve::OE_actionNewSubCurve(OE_curve* curve,float curveStart,float curveEnd, bool reverse)
{
    if (document)
    {
        actionCurve = new OE_subcurve(curve, curveStart, curveEnd, reverse);
        document->addCurve( actionCurve);
    }
}

OE_actionNewSubCurve::~OE_actionNewSubCurve()
{
    if (actionCurve && !active)
        delete actionCurve;
}

void OE_actionNewSubCurve::undo()
{
    if (actionCurve && active) document->removeCurve(actionCurve);
    active = false;
}

void OE_actionNewSubCurve::redo()
{
    if (actionCurve && !active) document->addCurve( actionCurve);
    active = true;
}



///////// actionNewJoinCurve ///////////////
/// \brief OE_actionNewJoinCurve::OE_actionNewJoinCurve
/// \param curve1
/// \param curve2
///
3dsman's avatar
3dsman committed
/*
OE_actionNewJoinCurve::OE_actionNewJoinCurve(OE_subcurve* curve1, OE_subcurve* curve2)
{
    if (document)
    {
        actionCurve = new OE_joincurve(curve1, curve2);
        document->addCurve( actionCurve);
    }
}

OE_actionNewJoinCurve::~OE_actionNewJoinCurve()
{
    if (actionCurve && !active)
        delete actionCurve;
}

void OE_actionNewJoinCurve::undo()
{
    if (actionCurve && active) document->removeCurve(actionCurve);
    active = false;
}

void OE_actionNewJoinCurve::redo()
{
    if (actionCurve && !active) document->addCurve( actionCurve);
    active = true;
}
OE_actionJoincurveAddSubCurve::OE_actionJoincurveAddSubCurve(OE_joincurve* joincurve, int index, OE_curve* curve, float start, float end, bool reverse)
{
    if (joincurve)
    {
        actionCurve = joincurve;
        id = index;
        subcurve = new OE_subcurve(curve, start, end, reverse);
        actionCurve->addCurve(subcurve, index);
    }
}

OE_actionJoincurveAddSubCurve::~OE_actionJoincurveAddSubCurve()
{
    if (actionCurve && subcurve && !active)
    {
        actionCurve->removeCurve(subcurve);
        delete subcurve;
    }
}

void OE_actionJoincurveAddSubCurve::undo()
{
    if (actionCurve && subcurve && active) actionCurve->removeCurve(subcurve);
    active = false;
}

void OE_actionJoincurveAddSubCurve::redo()
{
    if (actionCurve && subcurve && !active)
        actionCurve->addCurve(subcurve, id);
    active = true;
}

bool OE_actionJoincurveAddSubCurve::getDir()
{
    if ( subcurve)
        return subcurve->getReverse();
    return false;
}

void OE_actionJoincurveAddSubCurve::setEnd(float end)
{
    if ( subcurve)
        subcurve->setEnd(end);
}

void OE_actionJoincurveAddSubCurve::setStart(float start)
{
    if ( subcurve)
        subcurve->setStart(start);
}

void OE_actionJoincurveAddSubCurve::setDir(bool dir)
{
    if ( subcurve)
        subcurve->setReverse(dir);
}

OE_actionSetPointCurve::OE_actionSetPointCurve(OE_pointcurve* curve, uint16_t idPoint, vector_2d coord)
{
    if (document&&curve)
    {
        actionCurve = curve;
        if (actionCurve->getPoint(idPoint, oldCoord))
        {
            this->idPoint = idPoint;
            newCoord = coord;
            actionCurve->setPoint(idPoint, newCoord);
        }

    }
}

OE_actionSetPointCurve::~OE_actionSetPointCurve()
{
}

void OE_actionSetPointCurve::undo()
{
    if (actionCurve && active)
        actionCurve->setPoint(idPoint, oldCoord);
    active = false;
}

void OE_actionSetPointCurve::redo()
{
    if (actionCurve && !active)
        actionCurve->setPoint(idPoint, newCoord);
    active = true;
}

void OE_actionSetPointCurve::setCoord(vector_2d coord)
{
    if (actionCurve)
    {
        newCoord = coord;
        if (active)
                    actionCurve->setPoint(idPoint, newCoord);
    }
}

OE_actionMovePointCurve::OE_actionMovePointCurve(OE_pointcurve* curve, uint16_t idPoint, vector_2d offset)
{
    if (document&&curve)
    {
        actionCurve = curve;
        if (actionCurve->getPoint(idPoint, oldCoord))
        {
            this->idPoint = idPoint;
            this->offset = offset;
            actionCurve->setPoint(idPoint, oldCoord + offset);
        }

    }
}

OE_actionMovePointCurve::~OE_actionMovePointCurve()
{
}

void OE_actionMovePointCurve::undo()
{
    if (actionCurve && active)
        actionCurve->setPoint(idPoint, oldCoord);
    active = false;
}

void OE_actionMovePointCurve::redo()
{
    if (actionCurve && !active)
        actionCurve->setPoint(idPoint, oldCoord + offset);
    active = true;
}

void OE_actionMovePointCurve::setMove(vector_2d offset)
{
    if (actionCurve)
    {
        this->offset = offset;
        if (active)
                    actionCurve->setPoint(idPoint, oldCoord + offset);
    }
}

OE_actionSetCloseCurve::OE_actionSetCloseCurve(OE_curve* curve, bool closed)
{
    if (document&&curve)
    {
        actionCurve = curve;
        this->closed = closed;
        this->oldClosed = actionCurve->getClosed();
        actionCurve->setClosed(closed);
    }
}

OE_actionSetCloseCurve::~OE_actionSetCloseCurve()
{
}

void OE_actionSetCloseCurve::undo()
{
    if (actionCurve && active)
        actionCurve->setClosed(oldClosed);
    active = false;
}

void OE_actionSetCloseCurve::redo()
{
    if (actionCurve && !active)
        actionCurve->setClosed(closed);
    active = true;
}



OE_actionSetSubcurvePos::OE_actionSetSubcurvePos(OE_subcurve* curve, bool start, double pos)
{
    if (document&&curve)
    {
        actionCurve = curve;
        this->start = start;
        this->pos = pos;
        if (start)
        {
            oldPos = actionCurve->getStart();
            actionCurve->setStart(pos);
        }
        else
        {
            oldPos = actionCurve->getEnd();
            actionCurve->setEnd(pos);
        }
    }
}

OE_actionSetSubcurvePos::~OE_actionSetSubcurvePos(){}

void OE_actionSetSubcurvePos::undo()
{
    if (active)
    {
        if (start)
            actionCurve->setStart(oldPos);
        else
            actionCurve->setEnd(oldPos);

        if (invert) actionCurve->setReverse(!actionCurve->getReverse());
        active = false;
    }
}

void OE_actionSetSubcurvePos::redo()
{
    if (!active)
    {
        if (start)
            actionCurve->setStart(pos);
        else
            actionCurve->setEnd(pos);

        if (invert) actionCurve->setReverse(!actionCurve->getReverse());
        active = true;
    }
}

void OE_actionSetSubcurvePos::setPos(double pos)
{
    this->pos = pos;
    if (active)
    {
        if (start)
            actionCurve->setStart(pos);
        else
            actionCurve->setEnd(pos);
    }
}


void OE_actionSetSubcurvePos::setInvertDir(bool invert)
{
    if (active)
    {
        if (this->invert != invert) actionCurve->setReverse(!actionCurve->getReverse());
    }
    this->invert = invert;
}

bool OE_actionSetSubcurvePos::getInvertDir()
{
    return invert;
}