Newer
Older
* 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 "actions/OE_actionsStitchs.h"
#include "actions/OE_actionsFillStitchs.h"
#include "OE_document.h"
///////// actionNewFillStitch ///////////////
/// \brief OE_actionNewFillStitch::OE_actionNewFillStitch
/// \param curve
/// \param len
/// \param width
/// \param Pattern
/// \param offset
///
OE_actionNewFillStitch::OE_actionNewFillStitch(OE_document* doc, float len, float width, OE_pattern* pattern) :
OE_actions(doc), action(nullptr), FillStitch(nullptr)
FillStitch = new OE_fillstitch(document->threads.front(), len, width, pattern);
action = new OE_actionNewStitch(document, FillStitch);
if (!active)
{
if (action)
{
delete action;
}
if (FillStitch)
{
delete FillStitch;
}
}
if (active&&action)
{
action->undo();
}
active = false;
if (!active&&action)
{
action->redo();
}
active = true;
}
///////// OE_actionSetFillStitchPattern ///////////////
/// \brief OE_actionSetFillStitchPattern::OE_actionSetFillStitchPattern
/// \param stitch
/// \param pattern
///
OE_actionSetFillStitchPattern::OE_actionSetFillStitchPattern(OE_document* doc, OE_fillstitch* stitch, OE_pattern* pattern) :
OE_actions(doc), actionStitch(nullptr), oldPattern(nullptr), newPattern(nullptr)
oldPattern = actionStitch->getPattern();
newPattern = pattern;
actionStitch->setPattern(pattern);
OE_actionSetFillStitchPattern::~OE_actionSetFillStitchPattern()
{
}
}
///////// OE_actionSetFillStitchLen ///////////////
/// \brief OE_actionSetFillStitchLen::OE_actionSetFillStitchLen
/// \param stitch
/// \param len
///
OE_actionSetFillStitchLen::OE_actionSetFillStitchLen(OE_document* doc, OE_fillstitch* stitch, float len) :
OE_actions(doc), actionStitch(nullptr)
if (document && stitch)
{
actionStitch = stitch;
oldLen = actionStitch->getLen();
OE_actionSetFillStitchLen::~OE_actionSetFillStitchLen()
{
}
if (active)
{
actionStitch->setLen(switchVal(actionStitch->getLen(), &oldLen));
active = false;
}
if (!active)
{
actionStitch->setLen(switchVal(actionStitch->getLen(), &oldLen));
active = true;
}
}
///////// OE_actionSetFillStitchWidth ///////////////
/// \brief OE_actionSetFillStitchWidth::OE_actionSetFillStitchWidth
/// \param stitch
/// \param width
///
OE_actionSetFillStitchWidth::OE_actionSetFillStitchWidth(OE_document* doc, OE_fillstitch* stitch, float width) :
OE_actions(doc), actionStitch(nullptr), oldWidth(0), oldOffset(0)
if (document && stitch)
{
actionStitch = stitch;
oldWidth = actionStitch->getWidth();
OE_actionSetFillStitchWidth::~OE_actionSetFillStitchWidth()
{
}
if (active)
{
actionStitch->setWidth(switchVal(actionStitch->getWidth(), &oldWidth));
active = false;
}
if (!active)
{
actionStitch->setWidth(switchVal(actionStitch->getWidth(), &oldWidth));
active = true;
}
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
}
void OE_actionSetFillStitchWidth::setWidth(float width)
{
if (document)
{
actionStitch->setWidth(width);
}
}
void OE_actionSetFillStitchWidth::offsetWidth(float offset)
{
if (document)
{
actionStitch->setWidth(actionStitch->getWidth()-oldOffset+offset);
}
oldOffset = offset;
}
float OE_actionSetFillStitchWidth::getWidth()
{
if (document)
{
return actionStitch->getWidth();
}
return 0;
}
///////// OE_actionSetSelectedFillStitchWidth ///////////////
/// \brief OE_actionSetSelectedFillStitchWidth::OE_actionSetFillStitchWidth
/// \param scale
///
OE_actionScaleSelectedFillStitchWidth::OE_actionScaleSelectedFillStitchWidth(OE_document* doc, float scale) : OE_actions(doc)
{
if (document)
{
OE_fillstitch* tmpFillStitch;
for(auto selStitch : document->selectedStitchs)
{
tmpFillStitch = dynamic_cast<OE_fillstitch*>(selStitch);
actions.push_back(new OE_actionSetFillStitchWidth(document, tmpFillStitch,tmpFillStitch->getWidth()*scale));
OE_actionScaleSelectedFillStitchWidth::~OE_actionScaleSelectedFillStitchWidth()
{
}
void OE_actionScaleSelectedFillStitchWidth::undo()
{
if (active)
{
for(auto action : actions)
active = false;
}
}
void OE_actionScaleSelectedFillStitchWidth::redo()
{
if (!active)
{
for(auto action : actions)
active = true;
}
}
void OE_actionScaleSelectedFillStitchWidth::scaleWidth(float scale)
{
for(auto action : actions)
{
action->setWidth(action->getWidth()/oldScale*scale);
}
oldScale = scale;
}
///////// OE_actionSetSelectedFillStitchLen///////////////
/// \brief OE_actionSetSelectedFillStitchLen::OE_actionSetSelectedFillStitchLen
/// \param scale
///
OE_actionScaleSelectedFillStitchLen::OE_actionScaleSelectedFillStitchLen(OE_document* doc, float scale) : OE_actions(doc)
{
if (document)
{
OE_fillstitch* tmpFillStitch;
for(auto selStitch : document->selectedStitchs)
{
tmpFillStitch = dynamic_cast<OE_fillstitch*>(selStitch);
actions.push_back(new OE_actionSetFillStitchLen(document, tmpFillStitch, tmpFillStitch->getLen()*scale));
OE_actionScaleSelectedFillStitchLen::~OE_actionScaleSelectedFillStitchLen()
{
}
void OE_actionScaleSelectedFillStitchLen::undo()
{
if (active)
{
for(auto action : actions)
active = false;
}
}
void OE_actionScaleSelectedFillStitchLen::redo()
{
if (!active)
{
for(auto action : actions)
void OE_actionScaleSelectedFillStitchLen::scaleLen(float /*scale*/)
{
}
///////// OE_actionSetSelectedFillStitchPattern ///////////////
/// \brief OE_actionSetSelectedFillStitchPattern::OE_actionSetSelectedFillStitchPattern
/// \param pattern
///
OE_actionSetSelectedFillStitchPattern::OE_actionSetSelectedFillStitchPattern(OE_document* doc, OE_pattern* pattern) : OE_actions(doc)
{
if (document)
{
OE_fillstitch* tmpFillStitch;
for(auto selStitch : document->selectedStitchs)
{
tmpFillStitch = dynamic_cast<OE_fillstitch*>(selStitch);
actions.push_back(new OE_actionSetFillStitchPattern(document, tmpFillStitch, pattern));
OE_actionSetSelectedFillStitchPattern::~OE_actionSetSelectedFillStitchPattern()
{
}
void OE_actionSetSelectedFillStitchPattern::undo()
{
if (active)
{
for(auto action : actions)
active = false;
}
}
void OE_actionSetSelectedFillStitchPattern::redo()
{
if (!active)
{
for(auto action : actions)
///////// OE_actionMovePointFillStitch ///////////////
/// \brief OE_actionMovePointFillStitch::OE_actionMovePointFillStitch
/// \param pos
/// \param offset
OE_actionMovePointFillStitch::OE_actionMovePointFillStitch(OE_document* doc, OE_fillstitch* stitch, int _pos, vector_2d _offset) :
OE_actions(doc), actionStitch(nullptr)
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
{
if (!document || !stitch)
{
return;
}
pos = _pos;
offset = _offset;
actionStitch = stitch;
oldPoint = actionStitch->getGridControlPoint(pos);
actionStitch->setGridControlPoint(pos, oldPoint + offset);
}
OE_actionMovePointFillStitch::~OE_actionMovePointFillStitch()
{
}
void OE_actionMovePointFillStitch::undo()
{
if (active)
{
actionStitch->setGridControlPoint(pos, oldPoint);
active = false;
}
}
void OE_actionMovePointFillStitch::redo()
{
if (!active)
{
actionStitch->setGridControlPoint(pos, oldPoint + offset);
active = true;
}
}
void OE_actionMovePointFillStitch::setOffset(vector_2d _offset)
{
if (!actionStitch || !active)
{
return;
}
offset = _offset;
actionStitch->setGridControlPoint(pos,oldPoint + offset);
}