#ifndef STROKE_DEFORMATION_H #define STROKE_DEFORMATION_H /** * @author Fabrizio Morciano */ #include "tcommon.h" #undef DVAPI #undef DVVAR #ifdef TNZEXT_EXPORTS #define DVAPI DV_EXPORT_API #define DVVAR DV_EXPORT_VAR #else #define DVAPI DV_IMPORT_API #define DVVAR DV_IMPORT_VAR #endif #include "tgeometry.h" //#include "ext/TriParam.h" #include "ext/Types.h" #include "ext/ContextStatus.h" #include // forward declarations class TStroke; #if defined(_WIN32) && (_MSC_VER <= 1200) // to avoid annoying warning #pragma warning(push) #pragma warning(disable : 4251) #endif namespace ToonzExt { class Designer; class Potential; class StrokeParametricDeformer; class StrokeDeformationImpl; //=========================================================================== /** * @brief This class is the interface for manipulation * algorihms. * * StrokeDeformation is a wrapper for for StrokeDeformationImpl, * its function is to verify state and parameteres before * to call the implementation methods of deformation. * * There is an internal status to verify that actions: * @arg @c CREATED on constructor * @arg @c ACTIVE on active * @arg @c UPDATING on updating * @arg @c DEACTIVE on deactive * * If some error of state occurs @c reset method is called. * ContextStatus contains information about deformation parameter, * and it occurs to reduce the number of parameters required. */ class DVAPI StrokeDeformation { private: StrokeDeformationImpl * deformationImpl_; /** * @brief Internal status. */ enum StrokeDeformationState { CREATED, ACTIVE, UPDATING, DEACTIVE, RESETTED }; StrokeDeformationState state_; /** * @brief Recover from an invalid state */ void recover(); /** * @brief Retrieve the current deformator. */ StrokeDeformationImpl * retrieveDeformator(const ContextStatus *status); public: StrokeDeformation(); ~StrokeDeformation(); /** * @brief Init deformation and add control points. */ void activate(const ContextStatus *); /** * @brief Modify stroke. */ void update(const TPointD &delta); /** * @brief Return a stroke deformed. * @return A stroke deformed. */ TStroke * deactivate(); /** * @brief Clear inner status of Deformation. */ void reset(); /** * @brief Just select correct Deformation. */ void check(const ContextStatus *); /** * @brief Apply a designer on current deformation. */ void draw(Designer *); /** * @brief Retrieve valid extremes for current manipulator/deformator. */ ToonzExt::Interval getExtremes() const; /** * @brief Return the stroke selected from user. */ const TStroke * getStroke() const; /** * @brief Return the stroke selected from user. */ const TStroke * getCopiedStroke() const; /** * @brief Return a reference to the stroke created to be manipulated. * @note This stroke is different from stroke selected by user. * @sa getStroke */ const TStroke * getTransformedStroke() const; /** * @brief Return the internal status of current deformation. * @sa ContextStatus */ const ContextStatus * getStatus() const; /** * @brief Retrieve cursor associated to current deformator. */ int getCursorId() const; #ifdef _DEBUG /** * @brief Return the potential used in implementation. * @note This is useful just for debug, please do not use directly. * @sa Potential */ const Potential * getPotential() const; /** * @brief Return the potential used in implementation. * @note This is useful just for debug, please do not use directly. * @sa Potential */ const StrokeDeformationImpl * getDeformationImpl() const; #endif }; } #if defined(_WIN32) && (_MSC_VER <= 1200) #pragma warning(pop) #endif #endif /* STROKE_DEFORMATION_H */ //----------------------------------------------------------------------------- // End Of File //-----------------------------------------------------------------------------