|
Toshihiro Shimizu |
890ddd |
#ifndef TDOUBLEPARAM_H
|
|
Toshihiro Shimizu |
890ddd |
#define TDOUBLEPARAM_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
262a92 |
#include <memory></memory>
|
|
Shinya Kitaoka |
262a92 |
|
|
Toshihiro Shimizu |
890ddd |
// TnzCore includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tgeometry.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tfilepath.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// TnzBase includes
|
|
Toshihiro Shimizu |
890ddd |
#include "tparam.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tparamchange.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// STD includes
|
|
Toshihiro Shimizu |
890ddd |
#include <set></set>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#undef DVAPI
|
|
Toshihiro Shimizu |
890ddd |
#undef DVVAR
|
|
Toshihiro Shimizu |
890ddd |
#ifdef TPARAM_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 |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Forward declarations
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TDoubleParam;
|
|
Toshihiro Shimizu |
890ddd |
class TDoubleKeyframe;
|
|
Toshihiro Shimizu |
890ddd |
class TMeasure;
|
|
Toshihiro Shimizu |
890ddd |
class TExpression;
|
|
Toshihiro Shimizu |
890ddd |
class TDoubleKeyframe;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
namespace TSyntax
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
class Grammar;
|
|
Toshihiro Shimizu |
890ddd |
class CalculatorNodeVisitor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef WIN32
|
|
Toshihiro Shimizu |
890ddd |
template class DVAPI TPersistDeclarationT<tdoubleparam>;</tdoubleparam>
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=========================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//**************************************************************************
|
|
Toshihiro Shimizu |
890ddd |
// TDoubleParam declaration
|
|
Toshihiro Shimizu |
890ddd |
//**************************************************************************
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class DVAPI TDoubleParam : public TParam
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
PERSIST_DECLARATION(TDoubleParam)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class Imp;
|
|
Shinya Kitaoka |
262a92 |
std::unique_ptr<imp> m_imp;</imp>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
TDoubleParam(double v = 0.0);
|
|
Toshihiro Shimizu |
890ddd |
TDoubleParam(const TDoubleParam &src);
|
|
Toshihiro Shimizu |
890ddd |
~TDoubleParam();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TDoubleParam &operator=(const TDoubleParam &);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TParam *clone() const { return new TDoubleParam(*this); }
|
|
Toshihiro Shimizu |
890ddd |
void copy(TParam *src);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
string getMeasureName() const;
|
|
Toshihiro Shimizu |
890ddd |
void setMeasureName(string name);
|
|
Toshihiro Shimizu |
890ddd |
TMeasure *getMeasure() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setValueRange(double min, double max, double step = 1.0);
|
|
Toshihiro Shimizu |
890ddd |
bool getValueRange(double &min, double &max, double &step) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
double getDefaultValue() const;
|
|
Toshihiro Shimizu |
890ddd |
void setDefaultValue(double value);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
double getValue(double frame, bool leftmost = false) const;
|
|
Toshihiro Shimizu |
890ddd |
// note: if frame is a keyframe separating two segments of different types
|
|
Toshihiro Shimizu |
890ddd |
// (e.g. expression and linear) then getValue(frame,true) can be != getValue(frame,false)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool setValue(double frame, double value);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// returns the incoming speed vector for keyframe kIndex. kIndex-1 must be speedinout
|
|
Toshihiro Shimizu |
890ddd |
// if kIndex is not speedinout and handle are linked then recomputes speed.y taking
|
|
Toshihiro Shimizu |
890ddd |
// in account the next segment
|
|
Toshihiro Shimizu |
890ddd |
TPointD getSpeedIn(int kIndex) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// returns the outcoming speed vector for keyframe kIndex. kIndex must be speedinout
|
|
Toshihiro Shimizu |
890ddd |
TPointD getSpeedOut(int kIndex) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//TPointD getSpeed(double frame);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// a specific grammar defines expressions as 'peg2.ns' and allows to
|
|
Toshihiro Shimizu |
890ddd |
// create a link to the appropriate data source (e.g.
|
|
Toshihiro Shimizu |
890ddd |
// the correct stageobject tree)
|
|
Toshihiro Shimizu |
890ddd |
const TSyntax::Grammar *getGrammar() const;
|
|
Toshihiro Shimizu |
890ddd |
void setGrammar(const TSyntax::Grammar *grammar); // doesn't get ownership.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void accept(TSyntax::CalculatorNodeVisitor &visitor);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//! cycle controls extrapolation after the last keyframe
|
|
Toshihiro Shimizu |
890ddd |
void enableCycle(bool enabled);
|
|
Toshihiro Shimizu |
890ddd |
bool isCycleEnabled() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int getKeyframeCount() const;
|
|
Toshihiro Shimizu |
890ddd |
void getKeyframes(std::set<double> &frames) const;</double>
|
|
Toshihiro Shimizu |
890ddd |
double keyframeIndexToFrame(int index) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
const TDoubleKeyframe &getKeyframe(int index) const;
|
|
Toshihiro Shimizu |
890ddd |
const TDoubleKeyframe &getKeyframeAt(double frame) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//! assign k to the kIndex-th keyframe; postcondition: m_frame order is maintained
|
|
Toshihiro Shimizu |
890ddd |
void setKeyframe(int kIndex, const TDoubleKeyframe &k);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//! call setKeyframe(it.first,it.second) for each it in ks; postcondition: m_frame order is maintained
|
|
Toshihiro Shimizu |
890ddd |
void setKeyframes(const std::map<int, tdoublekeyframe=""> &ks);</int,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//! create a keyframe in k.m_frame (if is needed) and assign k to it
|
|
Toshihiro Shimizu |
890ddd |
void setKeyframe(const TDoubleKeyframe &k);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool isKeyframe(double frame) const;
|
|
Toshihiro Shimizu |
890ddd |
bool hasKeyframes() const;
|
|
Toshihiro Shimizu |
890ddd |
void deleteKeyframe(double frame);
|
|
Toshihiro Shimizu |
890ddd |
void clearKeyframes();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
int getClosestKeyframe(double frame) const;
|
|
Toshihiro Shimizu |
890ddd |
int getNextKeyframe(double frame) const;
|
|
Toshihiro Shimizu |
890ddd |
int getPrevKeyframe(double frame) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void assignKeyframe(
|
|
Toshihiro Shimizu |
890ddd |
double frame,
|
|
Toshihiro Shimizu |
890ddd |
const TParamP &src, double srcFrame,
|
|
Toshihiro Shimizu |
890ddd |
bool changedOnly);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
bool isAnimatable() const { return true; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void addObserver(TParamObserver *observer);
|
|
Toshihiro Shimizu |
890ddd |
void removeObserver(TParamObserver *observer);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
const std::set<tparamobserver *=""> &observers() const;</tparamobserver>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//! no keyframes, default value not changed
|
|
Toshihiro Shimizu |
890ddd |
bool isDefault() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void loadData(TIStream &is);
|
|
Toshihiro Shimizu |
890ddd |
void saveData(TOStream &os);
|
|
Toshihiro Shimizu |
890ddd |
string getStreamTag() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
string getValueAlias(double frame, int precision);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
DEFINE_PARAM_SMARTPOINTER(TDoubleParam, double)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif // TDOUBLEPARAM_H
|