tge/lib/maxsdk70/include/CS/AnimationWBImp.h
2017-04-17 06:17:10 -06:00

219 lines
10 KiB
C++
Executable File

#define ANALYZER_INTERFACE Interface_ID(0x14bf34cc, 0x519c0633)
#define FIXER_INTERFACE Interface_ID(0xfcd6b18, 0x6e714e23)
#define FILTER_INTERFACE Interface_ID(0x36ca302f, 0x23d147a6)
#define WORKBENCH_INTERFACE Interface_ID(0x78aa2c29, 0x19a55d39)
class IWorkBench : public FPStaticInterface
{
public:
//these function not only affect workbench but all functions
//outside workbench also!
DECLARE_DESCRIPTOR(IWorkBench);
virtual void Open(); //pops up in viewprt
virtual void ToggleShowX();
virtual BOOL GetShowX();
virtual void ToggleShowY();
virtual BOOL GetShowY();
virtual void ToggleShowZ();
virtual BOOL GetShowZ();
virtual void ToggleLayerEdit();
virtual BOOL GetLayerEdit();
virtual void ToggleDrawDuringMove();
virtual BOOL GetDrawDuringMove();
virtual void ToggleLimit180();
virtual BOOL GetLimit180();
virtual void ShowQuatCurve();
virtual void ShowPosCurve();
virtual void ShowAngSpeedCurve();
virtual void ShowAngAccelCurve();
virtual void ShowAngJerkCurve();
virtual void ShowPosSpeedCurve();
virtual void ShowPosAccelCurve();
virtual void ShowPosJerkCurve();
virtual void PosCurveToWorld();
virtual void PosCurveToBipRoot();
virtual void PosCurveToThisNode(INode *node);
typedef enum {toggleShowX=0,getShowX,toggleShowY,getShowY,toggleShowZ,getShowZ,
toggleLayerEdit,getLayerEdit,toggleDrawDuringMove,getDrawDuringMove,
toggleLimit180,getLimit180,
showQuatCurve,showPosCurve,showAngSpeedCurve,showAngAccelCurve,showAngJerkCurve,
showPosSpeedCurve,showPosAccelCurve,showPosJerkCurve,posCurveToWorld, posCurveToBipRoot,
posCurveToThisNode,open} WorkBenchFunctions;
BEGIN_FUNCTION_MAP
VFN_0(toggleShowX,ToggleShowX);
FN_0(getShowX,TYPE_BOOL,GetShowX);
VFN_0(toggleShowY,ToggleShowY);
FN_0(getShowY,TYPE_BOOL,GetShowY);
VFN_0(toggleShowZ,ToggleShowZ);
FN_0(getShowZ,TYPE_BOOL,GetShowZ);
VFN_0(toggleLayerEdit,ToggleLayerEdit);
FN_0(getLayerEdit,TYPE_BOOL,GetLayerEdit);
VFN_0(toggleDrawDuringMove,ToggleDrawDuringMove);
FN_0(getDrawDuringMove,TYPE_BOOL,GetDrawDuringMove);
VFN_0(toggleLimit180,ToggleLimit180);
FN_0(getLimit180,TYPE_BOOL,GetLimit180);
VFN_0(showQuatCurve,ShowQuatCurve);
VFN_0(showPosCurve,ShowPosCurve);
VFN_0(showAngSpeedCurve,ShowAngSpeedCurve);
VFN_0(showAngAccelCurve,ShowAngAccelCurve);
VFN_0(showAngJerkCurve,ShowAngJerkCurve);
VFN_0(showPosSpeedCurve,ShowPosSpeedCurve);
VFN_0(showPosAccelCurve,ShowPosAccelCurve);
VFN_0(showPosJerkCurve,ShowPosJerkCurve);
VFN_0(posCurveToWorld,PosCurveToWorld);
VFN_0(posCurveToBipRoot,PosCurveToBipRoot);
VFN_1(posCurveToThisNode,PosCurveToThisNode,TYPE_INODE);
VFN_0(open,Open);
END_FUNCTION_MAP
};
class IAnalyzer : public FPStaticInterface
{
public:
DECLARE_DESCRIPTOR(IAnalyzer);
//note for the analysis functions if angular type is TRUE then the passed in parent node value isn't used.
//Otherwise if it's FALSE(it's a position analysis) then the parent node is used to calculate the cooridinate space
// of the resulting calculation.
virtual void DoNoiseDetectorAnalysis(Tab<INode *>&nodesToAnalyze,Interval range,float deviation,BOOL angular,int noiseType,INode *pNode);
virtual void DoSpikeDetectorAnalysis(Tab<INode *>&nodesToAnalyze,Interval range,float deviation);
virtual void DoKneeWobbleAnalysis(Tab<INode *>&nodesToAnalyze,Interval range,float frameThreshold,float fluctuationThreshold);
virtual void DoKneeExtensionAnalysis(Tab<INode *>&nodesToAnalyze,Interval range,float kneeAngle);
virtual Tab<TimeValue > GetResults(INode *node);
virtual void LoadAnalysisFile(char *filename);
virtual void SaveAnalysisFile(Tab<INode *> &nodes,char *filename);
virtual void ClearAnalysisResults();
typedef enum {doNoiseDetectorAnalysis=0,doSpikeDetectorAnalysis,getResults,
loadAnalysisFile,saveAnalysisFile,clearAnalysisResults,
doKneeWobbleAnalysis,doKneeExtensionAnalysis} AnalyzeFunctions;
BEGIN_FUNCTION_MAP
VFN_6(doNoiseDetectorAnalysis, DoNoiseDetectorAnalysis,TYPE_INODE_TAB_BR,TYPE_INTERVAL,TYPE_FLOAT,TYPE_BOOL,TYPE_INT,TYPE_INODE);
VFN_3(doSpikeDetectorAnalysis, DoSpikeDetectorAnalysis,TYPE_INODE_TAB_BR,TYPE_INTERVAL,TYPE_FLOAT);
FN_1(getResults,TYPE_TIMEVALUE_TAB_BV,GetResults,TYPE_INODE);
VFN_1(loadAnalysisFile,LoadAnalysisFile,TYPE_STRING);
VFN_2(saveAnalysisFile,SaveAnalysisFile,TYPE_INODE_TAB_BR,TYPE_STRING);
VFN_0(clearAnalysisResults,ClearAnalysisResults);
VFN_4(doKneeWobbleAnalysis, DoKneeWobbleAnalysis,TYPE_INODE_TAB_BR,TYPE_INTERVAL,TYPE_FLOAT,TYPE_FLOAT);
VFN_3(doKneeExtensionAnalysis, DoKneeExtensionAnalysis,TYPE_INODE_TAB_BR,TYPE_INTERVAL,TYPE_FLOAT);
END_FUNCTION_MAP
};
class IFixer : public FPStaticInterface
{
public:
DECLARE_DESCRIPTOR(IFixer);
virtual void DoAngSmoothing(Tab<INode *>&nodes,int width, float damping);
virtual void DoAngBlurring(Tab<INode *>&nodes,int width, float damping);
virtual void DoAdvAngSmoothing(Tab<INode *>&nodes,int width, float damping);
virtual void DoPosSmoothing(Tab<INode *>&nodes,int width, float damping);
virtual void DoPosBlurring(Tab<INode *>&nodes,int width, float damping);
virtual void DoRemoveKeys(Tab<INode *>&nodes,int intervalWidth,BOOL deleteKeys);
virtual void DoKneeWobbleFix(Tab<INode *>&nodes,float frameThreshold,float fluctuationThreshold);
virtual void DoKneeExtensionFix(Tab<INode *>&nodes,float kneeAngle);
typedef enum {
doAngSmoothing = 0, doAngBlurring, doAdvAngSmoothing,doPosSmoothing,
doPosBlurring,doRemoveKeys,doKneeWobbleFix,doKneeExtensionFix
} FilterFunctions;
BEGIN_FUNCTION_MAP
VFN_3(doAngSmoothing, DoAngSmoothing,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT);
VFN_3(doAngBlurring, DoAngBlurring,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT);
VFN_3(doAdvAngSmoothing, DoAdvAngSmoothing,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT);
VFN_3(doPosSmoothing, DoPosSmoothing,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT);
VFN_3(doPosBlurring, DoPosBlurring,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT);
VFN_3(doRemoveKeys, DoRemoveKeys,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_BOOL);
VFN_3(doKneeWobbleFix, DoKneeWobbleFix,TYPE_INODE_TAB_BR,TYPE_FLOAT,TYPE_FLOAT);
VFN_2(doKneeExtensionFix, DoKneeExtensionFix,TYPE_INODE_TAB_BR,TYPE_FLOAT);
END_FUNCTION_MAP
};
class IFilter : public FPStaticInterface
{
public:
DECLARE_DESCRIPTOR(IFilter);
virtual void DoAngSmoothing(Tab<INode *>&nodes,int width, float damping,Interval range);
virtual void DoAngBlurring(Tab<INode *>&nodes,int width, float damping,Interval range);
virtual void DoAngBoosting(Tab<INode *>&nodes,int width, float damping,Interval range);
virtual void DoAdvAngSmoothing(Tab<INode *>&nodes,int width, float damping,Interval range);
virtual void DoPosSmoothing(Tab<INode *>&nodes,int width, float damping,Interval range);
virtual void DoPosBlurring(Tab<INode *>&nodes,int width, float damping,Interval range);
virtual void DoPosBoosting(Tab<INode *>&nodes,int width, float damping,Interval range);
virtual void DoKeyReduction(Tab<INode *>&nodes,float tolerance,int keySpacing, float COMTolerance,
float COMKeySpacing,Interval range);
virtual void DoKeyPerFrame(Tab<INode *>&nodes);
virtual void EnablePosSubAnim(Tab<INode *> &nodes,BOOL enable);
virtual void EnableRotSubAnim(Tab<INode *> &nodes,BOOL enable);
virtual void EnableScaleSubAnim(Tab<INode *> &nodes,BOOL enable);
virtual void CollapsePosSubAnim(Tab<INode *> &nodes,BOOL perFrame, BOOL deleteSubAnim);
virtual void CollapseRotSubAnim(Tab<INode *> &nodes, BOOL perFrame,BOOL deleteSubAnim);
virtual void CreatePosSubAnim(Tab<INode *> &nodes,Control *toClone,BOOL checkIfOneExists);
virtual void CreateRotSubAnim(Tab<INode *> &nodes,Control *toClone,BOOL checkIfOneExists);
virtual void CreateScaleSubAnim(Tab<INode *> &nodes,Control *toClone,BOOL checkIfOneExists);
virtual void DoKneeWobbleFilter(Tab<INode *>&nodes,float frameThreshold,float fluctuationThreshold,Interval range);
virtual void DoKneeExtensionFilter(Tab<INode *>&nodes,float kneeAngle,Interval range);
typedef enum {
doAngSmoothing = 0, doAngBlurring,doAngBoosting,doAdvAngSmoothing,doPosSmoothing,
doPosBlurring,doPosBoosting,doKeyReduction,doKeyPerFrame,
enablePosSubAnim,enableRotSubAnim,enableScaleSubAnim,
collapsePosSubAnim,collapseRotSubAnim,createPosSubAnim,createRotSubAnim,
createScaleSubAnim,doKneeWobbleFilter,doKneeExtensionFilter
} FilterFunctions;
BEGIN_FUNCTION_MAP
VFN_4(doAngSmoothing, DoAngSmoothing,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT,TYPE_INTERVAL);
VFN_4(doAngBlurring, DoAngBlurring,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT,TYPE_INTERVAL);
VFN_4(doAngBoosting, DoAngBoosting,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT,TYPE_INTERVAL);
VFN_4(doAdvAngSmoothing, DoAdvAngSmoothing,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT,TYPE_INTERVAL);
VFN_4(doPosSmoothing, DoPosSmoothing,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT,TYPE_INTERVAL);
VFN_4(doPosBlurring, DoPosBlurring,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT,TYPE_INTERVAL);
VFN_4(doPosBoosting, DoPosBoosting,TYPE_INODE_TAB_BR,TYPE_INT,TYPE_FLOAT,TYPE_INTERVAL);
VFN_6(doKeyReduction, DoKeyReduction,TYPE_INODE_TAB_BR,TYPE_FLOAT,TYPE_INT,TYPE_FLOAT,TYPE_INT,TYPE_INTERVAL);
VFN_1(doKeyPerFrame, DoKeyPerFrame,TYPE_INODE_TAB_BR);
VFN_2(enablePosSubAnim, EnablePosSubAnim,TYPE_INODE_TAB_BR,TYPE_BOOL);
VFN_2(enableRotSubAnim, EnableRotSubAnim,TYPE_INODE_TAB_BR,TYPE_BOOL);
VFN_2(enableScaleSubAnim, EnableScaleSubAnim,TYPE_INODE_TAB_BR,TYPE_BOOL);
VFN_3(collapsePosSubAnim, CollapsePosSubAnim,TYPE_INODE_TAB_BR,TYPE_BOOL,TYPE_BOOL);
VFN_3(collapseRotSubAnim, CollapseRotSubAnim,TYPE_INODE_TAB_BR,TYPE_BOOL,TYPE_BOOL);
VFN_3(createPosSubAnim, CreatePosSubAnim,TYPE_INODE_TAB_BR,TYPE_CONTROL,TYPE_BOOL);
VFN_3(createRotSubAnim, CreateRotSubAnim,TYPE_INODE_TAB_BR,TYPE_CONTROL,TYPE_BOOL);
VFN_3(createScaleSubAnim, CreateScaleSubAnim,TYPE_INODE_TAB_BR,TYPE_CONTROL,TYPE_BOOL);
VFN_4(doKneeWobbleFilter, DoKneeWobbleFilter,TYPE_INODE_TAB_BR,TYPE_FLOAT,TYPE_FLOAT,TYPE_INTERVAL);
VFN_3(doKneeExtensionFilter, DoKneeExtensionFilter,TYPE_INODE_TAB_BR,TYPE_FLOAT,TYPE_INTERVAL);
END_FUNCTION_MAP
};