#pragma once #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 //-----------------------------------------------------------------------------