#ifndef STROKE_PARAMETRIC_DEFORMER_H #define STROKE_PARAMETRIC_DEFORMER_H /** * @author Fabrizio Morciano */ #include "tcommon.h" #include "tstrokedeformations.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 #if defined(_WIN32) && (_MSC_VER <= 1200) // to avoid annoying warning #pragma warning(push) #pragma warning(disable : 4290) #endif class TStroke; namespace ToonzExt { class Potential; /** * @brief This class implements new deformer. * * New stroke deformer doesn't change last point of stroke. */ class DVAPI StrokeParametricDeformer : public TStrokeDeformation { public: StrokeParametricDeformer(double actionLenght, double startParameter, TStroke *s, Potential *); ~StrokeParametricDeformer(); /** * @brief Set mouse movement from last valid position. * @param vx horyzontal * @param vy vertical */ void setMouseMove(double vx, double vy); /** * @brief Return displacement to use with function increaseControlPoints * @param stroke to test * @param w stroke parameter * @return displacement to apply to obtain deformation * @sa increaseControlPoints */ TThickPoint getDisplacement(const TStroke &stroke, double w) const; /** * @brief Return displacement to use with function modifyControlPoints * @param stroke to test * @param n control point to get * @return displacement to apply to obtain deformation * @sa modifyControlPoints */ TThickPoint getDisplacementForControlPoint(const TStroke &stroke, UINT n) const; TThickPoint getDisplacementForControlPointLen(const TStroke &stroke, double cpLen) const; /** * @brief This method compute the delta (gradient) referred to stroke in * at parameter w. * * This value is the result of \f$ \frac{getDisplacement(stroke,w)}{dw} \f$. * @note Sometimes this value can be approximated. * @param stroke Stroke to test * @param w Stroke parameter * @return the @b gradient in w */ double getDelta(const TStroke &stroke, double w) const; /** * @brief Max diff of delta (This value indicates when it's necessary * to insert control point) * @return max displacement permitted */ double getMaxDiff() const; // just for debug const Potential * getPotential() const { return pot_; } /** * @brief Change sensibility of deformer (just for debug). */ void setDiff(double diff) { diff_ = diff; } /** * @brief Retrieve the parameters range where is applied deformation. */ void getRange(double &from, double &to); private: StrokeParametricDeformer(const StrokeParametricDeformer &); StrokeParametricDeformer &operator=(const StrokeParametricDeformer &); // mouse incremental movement double vx_, vy_; // parameter where is applicated action double startParameter_; // like startParameter_ but recover lenght double startLenght_; // how many traits move double actionLenght_; // deformation shape Potential *pot_; // sensibility of deformer // Indica il valore minimo a partire dal quale // l'inseritore comincia a mettere punti di controllo double diff_; TStroke *ref_copy_; }; } #if defined(_WIN32) && (_MSC_VER <= 1200) #pragma warning(pop) #endif #endif /* STROKE_PARAMETRIC_DEFORMER_H */ //----------------------------------------------------------------------------- // End Of File //-----------------------------------------------------------------------------