/* * 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. * */ #pragma once #include "OE_display.h" #include "OE_utils.h" #include "curves/OE_joincurve.h" #include "curves/OE_subcurve.h" #include "curves/OE_pointcurve.h" #include "stitchs/OE_linestitch.h" #include "stitchs/OE_birailstitch.h" #include "stitchs/OE_fillstitch.h" #include "stitchs/OE_staticstitch.h" #include "stitchs/OE_linkstitch.h" #include "instructions/OE_waitcolor.h" #include "instructions/OE_start.h" #include "actions/OE_actions.h" class OE_document; class Machine; class OE_controller { public: /** Default constructor */ OE_controller(OE_display* display, OE_document* document); /** Default destructor */ virtual ~OE_controller(); /** \brief to initialise a new document. */ bool initNewDocument(); /** \brief Helpers */ void newBirailStitch(bool reverse1, bool reverse2, float offset1, float offset2, float len); void newLineStitch(float len, float width, OE_pattern* pattern, unsigned patternSteps=1, float xOffset=0, float yOffset=0); void newFillStitch(float len, float width, OE_pattern* pattern); void setStitchThread(OE_stitchs* stitch, OE_thread* thread); void setStitchThread(int nstitch, int nthread); void setCloseCurve(OE_curve* curve, bool closed); void setCloseCurve(int ncurve, bool closed); void toggleCloseSelectedCurve(); bool setDefault(); void setDocument(OE_document* document); OE_curve* getCurve(int index); OE_pointcurve* getPointcurve(int index); OE_subcurve* getSubcurve(int index); OE_joincurve* getJoincurve(int index); /** \brief return linestitch if the index is pointing on a linestitch, else return null */ OE_stitchs* getStitch(int index); OE_linestitch* getLineStitch(int index); OE_birailstitch* getBirailStitch(int index); OE_fillstitch* getFillStitch(int index); OE_linkstitch* getLinkStitch(int index); OE_thread* getThread(int index); OE_pattern* getPattern(int index); void clearUndoActionStack(); void addAction(OE_actions* action); void undoAction(); void redoAction(); bool selectCurve(OE_pointcurve* curve, bool replace); bool selectCurves(std::list curves, bool replace); bool unselectCurves(std::list curves); bool clearSelectCurves(); bool selectStitch(OE_stitchs* stitch, bool replace); bool selectStitches(std::list stitches, bool replace); bool selectStitches(std::list stitchesId, bool replace); bool unselectStitches(std::list stitches); bool clearSelectStitches(); bool clearSelection(); BoundingBox getSelectionBoundingBox(); bool moveInListSelectedStitches(int posPrevious); OE_actions* getLastAction(); bool editActionMovePointCurve(vector_2d offset); bool editActionMovePointLinkStitch(vector_2d offset); bool editActionMoveGridPointFillStitch(vector_2d offset); bool editActionMoveSelection(vector_2d offset); bool editActionScaleSelection(vector_2d ratio); bool editActionSetSubcurvePos(float val); bool editActionSetSubcurvePosSwitchDir(); bool editActionAddSubcurvePosEnd(float val); bool editActionAddSubcurvePosSwitchDir(); bool editActionSetLinestitchWidth(float val, bool offset); bool refreshStitchs(float dpi, bool force=false); bool setsubcurvePos(int index, float start, float end); vector_2dt getClosestPoint(OE_curve* curve, vector_2d point); OE_curve* getClosestCurve(vector_2d point, vector_2dt& closestPoint); bool generateInstructions(); void sendInstPoint(Machine* machine); protected: OE_display* display; OE_document* document; };