Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef POTENTIAL_H
Toshihiro Shimizu 890ddd
#define POTENTIAL_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/**
Toshihiro Shimizu 890ddd
 * @author  Fabrizio Morciano <fabrizio.morciano@gmail.com>
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tcommon.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TNZEXT_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <assert.h>
Toshihiro Shimizu 890ddd
#include <stdexcept>
Toshihiro Shimizu 890ddd
#include <string>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TStroke;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#if defined(_WIN32) && (_MSC_VER <= 1200)
Toshihiro Shimizu 890ddd
// to avoid annoying warning
Toshihiro Shimizu 890ddd
#pragma warning(push)
Toshihiro Shimizu 890ddd
#pragma warning(disable : 4290)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
namespace ToonzExt
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
/**
Toshihiro Shimizu 890ddd
  * @brief Potential is an abstraction to maintain a 
Toshihiro Shimizu 890ddd
  * mathematical potential function. 
Toshihiro Shimizu 890ddd
  *
Toshihiro Shimizu 890ddd
  * It is used from StrokeDeformation to change 
Toshihiro Shimizu 890ddd
  * the behaviour of deformation that user need to do.
Toshihiro Shimizu 890ddd
  */
Toshihiro Shimizu 890ddd
class DVAPI
Toshihiro Shimizu 890ddd
	Potential
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	bool isValid_;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Toshihiro Shimizu 890ddd
	/**
Toshihiro Shimizu 890ddd
     * @brief The value of potential at parameter w on
Toshihiro Shimizu 890ddd
     *  the stroke.
Toshihiro Shimizu 890ddd
     * @param w The parameter on stroke.
Toshihiro Shimizu 890ddd
     */
Toshihiro Shimizu 890ddd
	virtual double
Toshihiro Shimizu 890ddd
	value_(double w) const = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/**
Toshihiro Shimizu 890ddd
     * @brief Change the parameter of object that has been created.
Toshihiro Shimizu 890ddd
     *
Toshihiro Shimizu 890ddd
     * This method is the real implementation that a potential
Toshihiro Shimizu 890ddd
     * needs to implement.
Toshihiro Shimizu 890ddd
     * @param theStroke The stroke to change.
Toshihiro Shimizu 890ddd
     * @param w The parameter on stroke.
Toshihiro Shimizu 890ddd
     * @param actionLength How many stroke to change.
Toshihiro Shimizu 890ddd
     */
Toshihiro Shimizu 890ddd
	virtual void
Toshihiro Shimizu 890ddd
	setParameters_(const TStroke *theStroke,
Toshihiro Shimizu 890ddd
				   double w,
Toshihiro Shimizu 890ddd
				   double actionLength) = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	Potential();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/**
Toshihiro Shimizu 890ddd
     * @brief Just a wrapper for setParameters_.
Toshihiro Shimizu 890ddd
     * @sa setParameters_
Toshihiro Shimizu 890ddd
     */
Toshihiro Shimizu 890ddd
	void
Toshihiro Shimizu 890ddd
	setParameters(const TStroke *ref,
Toshihiro Shimizu 890ddd
				  double w,
Toshihiro Shimizu 890ddd
				  double actionLength);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/**
Toshihiro Shimizu 890ddd
     * @brief Just a wrapper for value_.
Toshihiro Shimizu 890ddd
     * @sa value_
Toshihiro Shimizu 890ddd
     */
Toshihiro Shimizu 890ddd
	double
Toshihiro Shimizu 890ddd
	value(double at) const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	/**
Toshihiro Shimizu 890ddd
     * @brief This is method required to use a Prototype Pattern.
Toshihiro Shimizu 890ddd
     */
Toshihiro Shimizu 890ddd
	virtual Potential *clone() = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual ~Potential() {}
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#if defined(_WIN32) && (_MSC_VER <= 1200)
Toshihiro Shimizu 890ddd
#pragma warning(pop)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif /* POTENTIAL_H */
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
//  End Of File
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------