00001
00004 #ifndef FBXFILESDK_COMPONENTS_KFCURVE_KFCURVEGLOBAL_H
00005 #define FBXFILESDK_COMPONENTS_KFCURVE_KFCURVEGLOBAL_H
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include <fbxfilesdk/fbxfilesdk_def.h>
00042
00043 #include <fbxfilesdk/components/kbaselib/klib/karrayul.h>
00044 #include <fbxfilesdk/components/kbaselib/klib/ktime.h>
00045
00046 #include <fbxfilesdk/components/kfcurve/kfcurve.h>
00047
00048 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00049
00050 class KSet;
00051
00052 KFBX_FORWARD_HI(KFCurve);
00053 KFBX_FORWARD_HI(KFCurveNode);
00054
00055 #define KFCURVE_INTEPOLATION_INFINITE 1000
00056 #define KFCURVE_OVERSHOOT_INTERPOLATION 500.0
00057
00060 KFBX_FORWARD(KSmartPlotOptions)
00061
00062 class KFBX_DLL KSmartPlotOptions
00063 {
00064
00065 public:
00066
00068 bool mUseSmartPlot;
00069
00071 bool mUseBreakTangent;
00072 double mBreakTangentThreshold;
00073 KTime mEpsilonTime;
00074
00076 bool mUseIncreaseFidelity;
00077 double mFidelityTolerance;
00078 bool mFidelityUseBreakTangent;
00079 int mFidelitySegmentCount;
00080 bool mFidelitySyncAddedKeys;
00081
00083 bool mShowReferenceCurve;
00084
00086 KSmartPlotOptions();
00087 };
00088
00091 KFBX_FORWARD(KMergeLayerOptions)
00092
00093 class KFBX_DLL KMergeLayerOptions
00094 {
00095
00096 public:
00097
00099 KTime mStart;
00100
00102 KTime mStop;
00103
00105 KTime mPlotPeriod;
00106
00108 KSmartPlotOptions mSmartPlotOptions;
00109
00111 KMergeLayerOptions();
00112 };
00113
00114
00115
00117 KFBX_DLL void KFCurve_SetTWSet (KSet* pSet);
00118
00120 KFBX_DLL HKFCurveNode KFCurve_FindTWFromNickNumber (int pNickNumber);
00121
00123 KFBX_DLL bool KFCurve_FindNickNumberFromTW (int& pNickNumber, HKFCurveNode pTWNode);
00124
00125
00126
00127 enum
00128 {
00129
00130 eKFCURVE_PLOT_SourceCurvesDestroy = 1<<1 ,
00131 eKFCURVE_PLOT_SourceCurvesZeroDuringPlotTime = 1<<2 ,
00132 eKFCURVE_PLOT_DestinationCurveMergeWithResult = 1<<3 ,
00133 eKFCURVE_PLOT_DestinationCurveReplaceByResult = 1<<4 ,
00134 eKFCURVE_PLOT_ForCache = 1<<5 ,
00135 };
00136
00154 KFBX_DLL void KFCurve_PlotInLayers
00155 (
00156 HKFCurveNode pParentNode,
00157 KArrayTemplate<int> *pSourceLayers,
00158 int pDestLayer,
00159 kUInt pOptions,
00160 KTime pStart,
00161 KTime pStop,
00162 KTime pPlotPeriod,
00163 HKFCurveNode pDestinationNode,
00164 HKFCurveNode pTotalNode,
00165 bool pUseTimeWarp,
00166 HKSmartPlotOptions pSmartPlotOptions = NULL
00167 );
00168
00169
00170
00171
00172
00173
00174
00175
00176
00184 KFBX_DLL bool AxisAlignmentInEulerAngle(double pAB[3], double pA[3], double pB[3], double pAngles[3]);
00185
00186
00187 KFBX_DLL KTime KFCURVE_GetPlotPeriod();
00188 KFBX_DLL void KFCURVE_SetPlotPeriod(KTime pPlotPeriod);
00189
00190
00191
00192
00193 KFBX_DLL bool KFCURVE_GetPlotOnFrame();
00194 KFBX_DLL void KFCURVE_SetPlotOnFrame( bool pPlotOnFrame );
00195
00196
00197
00198
00199 enum { KFCurveApplyNone = 0, KFCurveApplyGimbleKiller, KFCurveApplyUnroll };
00200
00201 KFBX_DLL int KFCURVE_GetRotationFilterToApply();
00202 KFBX_DLL void KFCURVE_SetRotationFilterToApply(int pRotationFilterToApply);
00203 KFBX_DLL void KFCURVE_ApplyRotationFilter( HKFCurveNode pCurveNode, KTime pStart = KTIME_MINUS_INFINITE, KTime pStop = KTIME_INFINITE );
00204
00205 KFBX_DLL double KFCURVE_GetRotationFilterUnrollQuality();
00206 KFBX_DLL void KFCURVE_SetRotationFilterUnrollQuality( double pQuality );
00207
00208 KFBX_DLL bool KFCURVE_GetRotationFilterUnrollTestForPath();
00209 KFBX_DLL void KFCURVE_SetRotationFilterUnrollTestForPath( bool pTestForPath );
00210
00211 KFBX_DLL double KFCURVE_GetButterworthFilterInternalRate();
00212 KFBX_DLL void KFCURVE_SetButterworthFilterInternalRate( double pButterworthFilterInternalRate );
00213
00214
00215
00216
00217 KFBX_DLL bool KFCURVE_GetUseConstantKeyReducer();
00218 KFBX_DLL void KFCURVE_SetUseConstantKeyReducer( bool pUseConstantKeyReducer );
00219 KFBX_DLL void KFCURVE_ApplyConstantKeyReducer( HKFCurveNode pCurveNode, KTime pStart = KTIME_MINUS_INFINITE, KTime pStop = KTIME_INFINITE );
00220
00221
00222
00223 KFBX_DLL bool KFCURVE_GetConstantKeyReducerKeepOneKey();
00224 KFBX_DLL void KFCURVE_SetConstantKeyReducerKeepOneKey( bool pConstantKeyReducerKeepOneKey );
00225
00226
00227
00228
00229 KFBX_DLL bool KFCURVE_GetUseConstantKeyReducerOnDevices();
00230 KFBX_DLL void KFCURVE_SetUseConstantKeyReducerOnDevices( bool pUseConstantKeyReducerOnDevices );
00231
00232
00233 KFBX_DLL double KFCURVE_GetUseConstantKeyReducerTranslationThreshold();
00234 KFBX_DLL void KFCURVE_SetUseConstantKeyReducerTranslationThreshold( double pConstantKeyReducerTranslationThreshold );
00235
00236
00237 KFBX_DLL double KFCURVE_GetUseConstantKeyReducerRotationThreshold();
00238 KFBX_DLL void KFCURVE_SetUseConstantKeyReducerRotationThreshold( double pConstantKeyReducerRotationThreshold );
00239
00240
00241 KFBX_DLL double KFCURVE_GetUseConstantKeyReducerScalingThreshold();
00242 KFBX_DLL void KFCURVE_SetUseConstantKeyReducerScalingThreshold( double pConstantKeyReducerScalingThreshold );
00243
00244
00245 KFBX_DLL double KFCURVE_GetUseConstantKeyReducerDefaultThreshold();
00246 KFBX_DLL void KFCURVE_SetUseConstantKeyReducerDefaultThreshold( double pConstantKeyReducerDefaultThreshold );
00247
00248
00249
00250
00251 KFBX_DLL bool KFCURVE_GetPlotTranslationOnRootOnly();
00252 KFBX_DLL void KFCURVE_SetPlotTranslationOnRootOnly( bool pPlotTranslationOnRootOnly );
00253
00254
00255 KFBX_DLL bool KFCURVE_GetPreciseTimeDiscontinuities();
00256 KFBX_DLL void KFCURVE_SetPreciseTimeDiscontinuities( bool pPreciseTimeDiscontinuities );
00257
00258
00259 KFBX_DLL bool KFCURVE_GetTCB4051EvalMode();
00260 KFBX_DLL void KFCURVE_SetTCB4051EvalMode( bool pTCB4051EvalMode );
00261
00262
00263 KFBX_DLL void KFCURVE_ComputeAutoFromBezier(double &pLeftParam, double &pRightParam, double &pLeftTan, double &pRightTan, double &pToLeftKey, double &pToRightKey);
00264 KFBX_DLL void KFCURVE_ComputeBezierFromAuto(double &pLeftTan, double &pRightTan, double &pLeftParam, double &pRightParam, double &pToLeftKey, double &pToRightKey);
00265
00266 KFBX_DLL void KFCURVE_ComputeLeftAutoFromBezier(double &pLeftParam, double &pLeftTan, double &pToLeftKey, double &pToRightKey);
00267 KFBX_DLL void KFCURVE_ComputeLeftBezierFromAuto(double &pLeftTan, double &pLeftParam, double &pToLeftKey, double &pToRightKey);
00268
00269 KFBX_DLL void KFCURVE_ComputeRightAutoFromBezier(double &pRightParam, double &pRightTan, double &pToLeftKey, double &pToRightKey);
00270 KFBX_DLL void KFCURVE_ComputeRightBezierFromAuto(double &pRightTan, double &pRightParam, double &pToLeftKey, double &pToRightKey);
00271
00272 KFBX_DLL void KFCURVE_ComputeAutoFromBezierForKey(double &pLeftParam, double &pRightParam, double &pLeftTan, double &pRightTan, HKFCurve pCurve, int pIndex);
00273 KFBX_DLL void KFCURVE_ComputeBezierFromAutoForKey(double &pLeftTan, double &pRightTan , double &pLeftParam, double &pRightParam, HKFCurve pCurve, int pIndex);
00274
00275 KFBX_DLL void KFCURVE_ComputeLeftAutoFromBezierForKey(double &pLeftParam, double &pLeftTan, HKFCurve pCurve, int pIndex);
00276 KFBX_DLL void KFCURVE_ComputeLeftBezierFromAutoForKey(double &pLeftTan, double &pLeftParam, HKFCurve pCurve, int pIndex);
00277
00278 KFBX_DLL void KFCURVE_ComputeRightAutoFromBezierForKey(double &pRightParam, double &pRightTan, HKFCurve pCurve, int pIndex);
00279 KFBX_DLL void KFCURVE_ComputeRightBezierFromAutoForKey(double &pRightTan , double &pRightParam, HKFCurve pCurve, int pIndex);
00280
00281 KFBX_DLL void KFCURVE_ComputeToLeftAndToRight(double &pToLeft, double &pToRight, HKFCurve pCurve , int pIndex);
00282 KFBX_DLL void KFCURVE_ComputeProgressiveClampedTangents(double& pLeftTangent, double& pRightTangent, HKFCurve pCurve, int pIndex);
00283
00290 KFBX_DLL void KFCURVE_BreakTangents( HKFCurveNode pFCurveNode, HKFCurveNode pReferenceFCurveNode, KTime pEpsilonTime, double pTangentThreshold );
00291
00292 KFBX_DLL void KFCURVE_ComputeTCBFromBezierForKey( double &pT, double &pC ,double &pB , double pLTan, double pRTan, HKFCurve pCurve, int pIndex );
00293
00306 KFBX_DLL void KFCURVE_IncreaseFidelity( HKFCurveNode pFCurveNode, HKFCurveNode pReferenceFCurveNode, double pFidelityThreshold, int pSegmentCount, bool pBreakTangents, KTime pEpsilonTime, double pTangentThreshold, bool pSyncAddedKeys = false, KArrayTemplate<HKFCurve>* pSyncWithFCurves = NULL, KArrayTemplate<HKFCurve>* pSyncWithReferenceFCurves = NULL );
00307
00308
00315 KFBX_DLL bool KFCURVE_IsAllSameInterpolation( HKFCurveNode pFCurveNode, kFCurveInterpolation pInterpolation, bool pAllLayer);
00316
00324 KFBX_DLL void KFCURVE_ConstantCurveMerge(HKFCurveNode pDstNode,HKFCurveNode pSrcNode, KTime pStart, KTime pStop);
00325
00326 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00327
00328 #endif // FBXFILESDK_COMPONENTS_KFCURVE_KFCURVEGLOBAL_H
00329