kfcurveglobal.h

Go to the documentation of this file.
00001 
00004 #ifndef FBXFILESDK_COMPONENTS_KFCURVE_KFCURVEGLOBAL_H
00005 #define FBXFILESDK_COMPONENTS_KFCURVE_KFCURVEGLOBAL_H
00006 
00007 /**************************************************************************************
00008 
00009  Copyright (C) 2001 - 2009 Autodesk, Inc. and/or its licensors.
00010  All Rights Reserved.
00011 
00012  The coded instructions, statements, computer programs, and/or related material 
00013  (collectively the "Data") in these files contain unpublished information 
00014  proprietary to Autodesk, Inc. and/or its licensors, which is protected by 
00015  Canada and United States of America federal copyright law and by international 
00016  treaties. 
00017  
00018  The Data may not be disclosed or distributed to third parties, in whole or in
00019  part, without the prior written consent of Autodesk, Inc. ("Autodesk").
00020 
00021  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00022  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO
00023  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING
00024  BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE, 
00025  NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE. 
00026  WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT THE OPERATION
00027  OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE. 
00028  
00029  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS
00030  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES
00031  OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE DAMAGES OR OTHER
00032  SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE
00033  OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND),
00034  HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED
00035  FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE), OR OTHERWISE,
00036  ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE,
00037  WHETHER OR NOT AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS
00038  OR DAMAGE. 
00039 
00040 **************************************************************************************/
00041    
00042 #include <fbxfilesdk/components/kfcurve/kfcurve_h.h>
00043 
00044 #include <fbxfilesdk/components/kbaselib/kaydara.h>
00045 
00046 #include <fbxfilesdk/components/kbaselib/klib/karrayul.h>
00047 #include <fbxfilesdk/components/kbaselib/klib/ktime.h>
00048 
00049 #include <fbxfilesdk/components/kfcurve/kfcurve_forward.h>
00050 
00051 #include <fbxfilesdk/components/kfcurve/kfcurve.h>
00052 
00053 
00054 
00055 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00056     KFBX_FORWARD_HI(KFCurve);
00057     KFBX_FORWARD_HI(KFCurveNode);
00058 
00059     #define KFCURVE_INTEPOLATION_INFINITE 1000
00060     #define KFCURVE_OVERSHOOT_INTERPOLATION 500.0 
00061 
00064     KFBX_FORWARD(KSmartPlotOptions)
00065 
00066     class KFBX_DLL KSmartPlotOptions
00067     {
00068 
00069     public: 
00070 
00072         bool    mUseSmartPlot;
00073 
00075         bool    mUseBreakTangent;
00076         double  mBreakTangentThreshold;
00077         KTime   mEpsilonTime;
00078 
00080         bool    mUseIncreaseFidelity;
00081         double  mFidelityTolerance;
00082         bool    mFidelityUseBreakTangent;
00083         int     mFidelitySegmentCount;
00084         bool    mFidelitySyncAddedKeys;
00085 
00087         bool    mShowReferenceCurve;
00088 
00090         KSmartPlotOptions();
00091     };
00092 
00095     KFBX_FORWARD(KMergeLayerOptions)
00096 
00097     class KFBX_DLL KMergeLayerOptions
00098     {
00099 
00100     public: 
00101 
00103         KTime mStart;
00104 
00106         KTime mStop;
00107         
00109         KTime mPlotPeriod;
00110 
00112         KSmartPlotOptions mSmartPlotOptions;
00113 
00115         KMergeLayerOptions();
00116     };
00117 
00118     // TimeWarp Utility
00119 
00121     KFBX_DLL void KFCurve_SetTWSet (KSet* pSet);
00122 
00124     KFBX_DLL HKFCurveNode KFCurve_FindTWFromNickNumber (int pNickNumber);
00125 
00127     KFBX_DLL bool KFCurve_FindNickNumberFromTW (int& pNickNumber, HKFCurveNode pTWNode);
00128 
00129     // ControlCurve Utility
00130 
00131     enum 
00132     {   
00133     //  eKFCURVE_PLOT_SourceCurvesKeep                  = 1<<0 ,
00134         eKFCURVE_PLOT_SourceCurvesDestroy               = 1<<1 ,
00135         eKFCURVE_PLOT_SourceCurvesZeroDuringPlotTime    = 1<<2 ,
00136         eKFCURVE_PLOT_DestinationCurveMergeWithResult   = 1<<3 ,
00137         eKFCURVE_PLOT_DestinationCurveReplaceByResult   = 1<<4 ,
00138         eKFCURVE_PLOT_ForCache                          = 1<<5 ,
00139     };
00140 
00158     KFBX_DLL void KFCurve_PlotInLayers 
00159     (   
00160         HKFCurveNode pParentNode, 
00161         KArrayTemplate<int> *pSourceLayers, // if pointer is NULL, all layers are considered
00162         int pDestLayer,
00163         kUInt pOptions, 
00164         KTime pStart, 
00165         KTime pStop, 
00166         KTime pPlotPeriod,
00167         HKFCurveNode pDestinationNode,
00168         HKFCurveNode pTotalNode,    // If this node is set, function calculates layer to 
00169         bool pUseTimeWarp,
00170         HKSmartPlotOptions pSmartPlotOptions = NULL
00171     );
00172 
00173     /******************************************************************/
00174     //
00175     //  Helpers
00176     //
00177     /******************************************************************/
00178 
00179     // Vectorial conversions tools
00180 
00188     KFBX_DLL bool AxisAlignmentInEulerAngle(double pAB[3], double pA[3], double pB[3], double pAngles[3]);
00189 
00190     // bob 23-05-2001 - old call found in kmodelutility are forwarded to those one
00191     KFBX_DLL KTime  KFCURVE_GetPlotPeriod();
00192     KFBX_DLL void   KFCURVE_SetPlotPeriod(KTime pPlotPeriod);
00193 
00194     //
00195     //  For plotting to be on frame or free... i.e. start at the beginning of the take or on frame.
00196     //
00197     KFBX_DLL bool   KFCURVE_GetPlotOnFrame();
00198     KFBX_DLL void   KFCURVE_SetPlotOnFrame( bool pPlotOnFrame );
00199 
00200     //
00201     // bob 23-05-2001 - the rotation correction filter that should be applied after a plot
00202     //
00203     enum { KFCurveApplyNone = 0, KFCurveApplyGimbleKiller, KFCurveApplyUnroll };
00204 
00205     KFBX_DLL int        KFCURVE_GetRotationFilterToApply();
00206     KFBX_DLL void   KFCURVE_SetRotationFilterToApply(int pRotationFilterToApply);
00207     KFBX_DLL void   KFCURVE_ApplyRotationFilter( HKFCurveNode pCurveNode, KTime pStart  = KTIME_MINUS_INFINITE, KTime pStop = KTIME_INFINITE );
00208 
00209     KFBX_DLL double KFCURVE_GetRotationFilterUnrollQuality();
00210     KFBX_DLL void   KFCURVE_SetRotationFilterUnrollQuality( double pQuality );
00211 
00212     KFBX_DLL bool   KFCURVE_GetRotationFilterUnrollTestForPath();
00213     KFBX_DLL void   KFCURVE_SetRotationFilterUnrollTestForPath( bool pTestForPath );
00214 
00215     KFBX_DLL double KFCURVE_GetButterworthFilterInternalRate();
00216     KFBX_DLL void   KFCURVE_SetButterworthFilterInternalRate( double pButterworthFilterInternalRate );
00217 
00218     //
00219     // the constant key reducer to be applied on Plot
00220     //
00221     KFBX_DLL bool   KFCURVE_GetUseConstantKeyReducer();
00222     KFBX_DLL void   KFCURVE_SetUseConstantKeyReducer( bool pUseConstantKeyReducer );
00223 
00224     //
00225     // keep at least one key after applying the filter (else, there will only be a candidate on the curve)
00226     //
00227     KFBX_DLL bool   KFCURVE_GetConstantKeyReducerKeepOneKey();
00228     KFBX_DLL void   KFCURVE_SetConstantKeyReducerKeepOneKey( bool pConstantKeyReducerKeepOneKey );
00229 
00230     //
00231     // the constant key reducer to be applied on Device record
00232     //
00233     KFBX_DLL bool   KFCURVE_GetUseConstantKeyReducerOnDevices();
00234     KFBX_DLL void   KFCURVE_SetUseConstantKeyReducerOnDevices( bool pUseConstantKeyReducerOnDevices );
00235 
00236     //
00237     KFBX_DLL double KFCURVE_GetUseConstantKeyReducerTranslationThreshold();
00238     KFBX_DLL void   KFCURVE_SetUseConstantKeyReducerTranslationThreshold( double pConstantKeyReducerTranslationThreshold );
00239 
00240     //
00241     KFBX_DLL double KFCURVE_GetUseConstantKeyReducerRotationThreshold();
00242     KFBX_DLL void   KFCURVE_SetUseConstantKeyReducerRotationThreshold( double pConstantKeyReducerRotationThreshold );
00243 
00244     //
00245     KFBX_DLL double KFCURVE_GetUseConstantKeyReducerScalingThreshold();
00246     KFBX_DLL void   KFCURVE_SetUseConstantKeyReducerScalingThreshold( double pConstantKeyReducerScalingThreshold );
00247 
00248     //
00249     KFBX_DLL double KFCURVE_GetUseConstantKeyReducerDefaultThreshold();
00250     KFBX_DLL void   KFCURVE_SetUseConstantKeyReducerDefaultThreshold( double pConstantKeyReducerDefaultThreshold );
00251 
00252     //
00253     // tell if we should "Plot Translation On Root Only" or not (Antoine 2003-05-02)
00254     //
00255     KFBX_DLL bool   KFCURVE_GetPlotTranslationOnRootOnly();
00256     KFBX_DLL void   KFCURVE_SetPlotTranslationOnRootOnly( bool pPlotTranslationOnRootOnly );
00257 
00258     //
00259     KFBX_DLL bool KFCURVE_GetPreciseTimeDiscontinuities();
00260     KFBX_DLL void KFCURVE_SetPreciseTimeDiscontinuities( bool pPreciseTimeDiscontinuities );
00261 
00262     //
00263     KFBX_DLL bool KFCURVE_GetTCB4051EvalMode();
00264     KFBX_DLL void KFCURVE_SetTCB4051EvalMode( bool pTCB4051EvalMode );
00265 
00266     // Functions to convert bezier tan to the new automatic parametrisation
00267     KFBX_DLL void KFCURVE_ComputeAutoFromBezier(double &pLeftParam, double &pRightParam, double &pLeftTan,   double &pRightTan,   double &pToLeftKey, double &pToRightKey);
00268     KFBX_DLL void KFCURVE_ComputeBezierFromAuto(double &pLeftTan,   double &pRightTan,   double &pLeftParam, double &pRightParam, double &pToLeftKey, double &pToRightKey);
00269 
00270     KFBX_DLL void KFCURVE_ComputeLeftAutoFromBezier(double &pLeftParam, double &pLeftTan,   double &pToLeftKey, double &pToRightKey);
00271     KFBX_DLL void KFCURVE_ComputeLeftBezierFromAuto(double &pLeftTan,   double &pLeftParam, double &pToLeftKey, double &pToRightKey);
00272 
00273     KFBX_DLL void KFCURVE_ComputeRightAutoFromBezier(double &pRightParam, double &pRightTan,   double &pToLeftKey, double &pToRightKey);
00274     KFBX_DLL void KFCURVE_ComputeRightBezierFromAuto(double &pRightTan,   double &pRightParam, double &pToLeftKey, double &pToRightKey);
00275 
00276     KFBX_DLL void KFCURVE_ComputeAutoFromBezierForKey(double &pLeftParam, double &pRightParam, double &pLeftTan,   double &pRightTan,   HKFCurve pCurve, int pIndex);
00277     KFBX_DLL void KFCURVE_ComputeBezierFromAutoForKey(double &pLeftTan,   double &pRightTan  , double &pLeftParam, double &pRightParam, HKFCurve pCurve, int pIndex);
00278 
00279     KFBX_DLL void KFCURVE_ComputeLeftAutoFromBezierForKey(double &pLeftParam, double &pLeftTan,   HKFCurve pCurve, int pIndex);
00280     KFBX_DLL void KFCURVE_ComputeLeftBezierFromAutoForKey(double &pLeftTan,   double &pLeftParam, HKFCurve pCurve, int pIndex);
00281 
00282     KFBX_DLL void KFCURVE_ComputeRightAutoFromBezierForKey(double &pRightParam, double &pRightTan,   HKFCurve pCurve, int pIndex);
00283     KFBX_DLL void KFCURVE_ComputeRightBezierFromAutoForKey(double &pRightTan  , double &pRightParam, HKFCurve pCurve, int pIndex);
00284 
00285     KFBX_DLL void KFCURVE_ComputeToLeftAndToRight(double &pToLeft, double &pToRight, HKFCurve pCurve , int pIndex);
00286 
00293     KFBX_DLL void KFCURVE_BreakTangents( HKFCurveNode pFCurveNode, HKFCurveNode pReferenceFCurveNode, KTime pEpsilonTime, double pTangentThreshold );
00294 
00295 KFBX_DLL void KFCURVE_ComputeTCBFromBezierForKey( double &pT, double &pC ,double &pB , double pLTan, double pRTan, HKFCurve pCurve, int pIndex );
00296 
00309     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 );
00310 
00311 
00318     KFBX_DLL bool KFCURVE_IsAllSameInterpolation( HKFCurveNode pFCurveNode, kFCurveInterpolation pInterpolation, bool pAllLayer);
00319 
00327     KFBX_DLL void KFCURVE_ConstantCurveMerge(HKFCurveNode pDstNode,HKFCurveNode pSrcNode, KTime pStart, KTime pStop);
00328 
00329 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00330 
00331 #endif // FBXFILESDK_COMPONENTS_KFCURVE_KFCURVEGLOBAL_H
00332