xsi_fcurve.h
Go to the documentation of this file.

    00001 //*****************************************************************************
    00011 //*****************************************************************************
    00012
    00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
    00014 #pragma once
    00015 #endif
    00016
    00017 #ifndef __XSIFCURVE_H__
    00018 #define __XSIFCURVE_H__
    00019
    00020 #include <xsi_animsource.h>
    00021 #include <xsi_fcurvekey.h>
    00022 #include <xsi_time.h>
    00023 #include <xsi_value.h>
    00024 #include <xsi_longarray.h>
    00025 #include <xsi_doublearray.h>
    00026
    00027 namespace XSI {
    00028
    00029 //*****************************************************************************
    00077 //*****************************************************************************
    00078
    00079 class SICPPSDKDECL FCurve : public AnimationSource
    00080 {
    00081 public:
    00083     FCurve();
    00084
    00086     ~FCurve();
    00087
    00091     FCurve(const CRef& in_ref);
    00092
    00096     FCurve(const FCurve& in_obj);
    00097
    00102     bool IsA( siClassID in_ClassID) const;
    00103
    00107     siClassID GetClassID() const;
    00108
    00114     FCurve& operator=(const FCurve& in_obj);
    00115
    00121     FCurve& operator=(const CRef& in_ref);
    00122
    00126     CValue::DataType        GetValueType() const;
    00127
    00131     siFCurveType            GetFCurveType(void) const;
    00132
    00138     CStatus                 PutFCurveType(siFCurveType in_type);
    00139
    00143     bool                    GetLocked(void) const;
    00144
    00150     CStatus                 PutLocked(bool in_value);
    00151
    00166     bool                    GetDependsOnFrameRate(void) const;
    00167
    00184     CStatus                 PutDependsOnFrameRate(bool in_value);
    00185
    00189     CValue                  GetNoKeyValue(void) const;
    00190
    00196     CStatus                 PutNoKeyValue(const CValue& in_value);
    00197
    00203     siFCurveExtrapolation   GetExtrapolation(void) const;
    00204
    00212     CStatus                 PutExtrapolation(siFCurveExtrapolation in_type);
    00213
    00219     siFCurveInterpolation   GetInterpolation(void) const;
    00220
    00228     CStatus                 PutInterpolation(siFCurveInterpolation in_type);
    00229
    00233     CValue                  GetLowClamp(void) const;
    00234
    00240     CStatus                 PutLowClamp(const CValue& in_value);
    00241
    00245     CValue                  GetHighClamp(void) const;
    00246
    00252     CStatus                 PutHighClamp(const CValue& in_value);
    00253
    00258     CValue                  Eval(const CTime& in_frame) const;
    00259
    00264     CValue                  Eval(const double& in_frame) const;
    00265
    00269     CFCurveKeyRefArray      GetKeys(void) const;
    00270
    00277     CFCurveKeyRefArray      GetKeysBetween(const CTime&in_startframe = CTime(DBL_MAX,CTime::CUSTOM), const CTime &in_endframe = CTime(DBL_MAX,CTime::CUSTOM)) const;
    00278
    00283     bool                    GetSelected(void) const;
    00284
    00289     CFCurveKeyRefArray      GetSelectedKeys() const;
    00290
    00298     CStatus                 SetKeys(
    00299     const CTimeArray& in_timearray,
    00300     const CValueArray& in_valuearray,
    00301     bool in_keepexistingkeys = false );
    00302
    00324     CStatus                 SetKeys(
    00325     const CTimeArray&   in_timearray,
    00326     const CDoubleArray& in_valuearray,
    00327     const CLongArray&   in_keyinterpolationarray,
    00328     const CTimeArray& in_lefttanxarray = CTimeArray(),
    00329     const CDoubleArray& in_lefttanyarray = CDoubleArray(),
    00330     const CTimeArray& in_righttanxarray = CTimeArray(),
    00331     const CDoubleArray& in_righttanyarray = CDoubleArray(),
    00332     bool                in_keepexistingkeys = false );
    00333
    00340     CStatus                 SetKeyTangents( const CDoubleArray& in_array );
    00341
    00345     bool GetSI3DStyle(void) const;
    00346
    00352     CStatus PutSI3DStyle(bool in_value);
    00353
    00373     LONG AddKey(
    00374             const CTime& in_frame,
    00375             const CValue& in_value,
    00376             siFCurveKeyInterpolation in_interp = siDefaultKeyInterpolation,
    00377             double in_ltx = DBL_MAX,
    00378             double in_lty = DBL_MAX,
    00379             double in_rtx = DBL_MAX,
    00380             double in_rty = DBL_MAX,
    00381             double in_tol = DBL_MAX,
    00382             bool in_okl = false );
    00383
    00408     CStatus Resample(
    00409                 const CTime& in_startframe = CTime(DBL_MAX,CTime::CUSTOM),
    00410                 const CTime& in_endframe = CTime(DBL_MAX,CTime::CUSTOM),
    00411                 double in_step = 1,
    00412                 bool in_keepexistingkeys = false,
    00413                 bool in_overridekeylock = false );
    00414
    00443     CStatus Smooth( const CTime& in_start = CTime(DBL_MAX,CTime::CUSTOM),
    00444                     const CTime& in_end = CTime(DBL_MAX,CTime::CUSTOM),
    00445                     double in_dFilterSize=5,
    00446                     double in_dSamplingStep=1,
    00447                     siFCurveSmoothFilterType in_filterType=siFCurveAverageFilterType,
    00448                     double in_dGaussianVariance=1 );
    00449
    00471     CStatus Fit(    const CTime& in_start = CTime(DBL_MAX,CTime::CUSTOM),
    00472                     const CTime& in_end = CTime(DBL_MAX,CTime::CUSTOM),
    00473                     double in_dFittingTolerance = 0.1);
    00474
    00530     CStatus Set( const FCurve& in_fcurve );
    00531
    00540     CStatus RemoveKey( const CTime& in_frame, double in_tolerance = DBL_MAX, bool in_overridekeylock = false );
    00541
    00550     CStatus RemoveKeyAtIndex( LONG in_index, bool in_overridekeylock = false );
    00551
    00562     CStatus RemoveKeysAtIndex( LONG in_index, LONG in_count, bool in_overridekeylock = false );
    00563
    00572     LONG RemoveKeys( const CTime& in_startframe = CTime(DBL_MAX,CTime::CUSTOM), const CTime& in_endframe = CTime(DBL_MAX,CTime::CUSTOM), bool in_overridekeylock = false );
    00573
    00579     bool KeyExists( const CTime& in_frame, double in_tolerance = DBL_MAX ) const;
    00580
    00587     FCurveKey GetKey( const CTime& in_frame, double in_tolerance = DBL_MAX ) const;
    00588
    00595     LONG GetNumKeys( const CTime& in_startframe = CTime(DBL_MAX,CTime::CUSTOM), const CTime& in_endframe = CTime(DBL_MAX,CTime::CUSTOM) ) const;
    00596
    00602     FCurveKey GetKeyAtIndex( LONG in_index ) const;
    00603
    00610     LONG GetKeyIndex( const CTime& in_frame, double in_tolerance = DBL_MAX ) const;
    00611
    00617     CTime GetKeyTime( LONG in_index ) const;
    00618
    00624     CValue GetKeyValue( LONG in_index ) const;
    00625
    00636     CStatus SetKey( LONG in_index, const CTime& in_frame, const CValue& in_value, bool in_overridekeylock = false );
    00637
    00641     bool IsEditing(void) const;
    00642
    00652     CStatus BeginEdit(void);
    00653
    00662     CStatus EndEdit(void);
    00663
    00670     CStatus UndoEdit(void);
    00671
    00677     bool GetMute(void) const;
    00678
    00686     CStatus PutMute(bool in_value);
    00687
    00695     CStatus Offset( const CTime& in_frameOffset, const CValue& in_valueOffset );
    00696
    00706     CStatus OffsetKeys( const CFCurveKeyRefArray& in_Keys, const CTime& in_frameOffset, const CValue& in_valueOffset );
    00707
    00719     CStatus Scale( double in_frameFactor, double in_valueFactor, const CTime& in_frameAnchor, const CValue& in_valueAnchor );
    00720
    00733     CStatus ScaleKeys( const CFCurveKeyRefArray& in_Keys, double in_frameFactor, double in_valueFactor, const CTime& in_frameAnchor, const CValue& in_valueAnchor, bool in_ripple = false );
    00734
    00743     CStatus ExtendCycle( LONG in_CyclesBefore, LONG in_CyclesAfter );
    00744
    00751     CStatus SnapToNearestFrame(void);
    00752
    00758     CStatus MakeRotationsContinuous(void);
    00759
    00765     CTime GetMinKeyFrame(void) const;
    00766
    00772     CTime GetMidKeyFrame(void) const;
    00773
    00779     CTime GetMaxKeyFrame(void) const;
    00780
    00786     CValue GetMinKeyValue(void) const;
    00787
    00793     CValue GetMidKeyValue(void) const;
    00794
    00800     CValue GetMaxKeyValue(void) const;
    00801
    00809     bool InsertKeyAtFrame(const CTime& in_frame);
    00810
    00811 private:
    00812     FCurve * operator&() const;
    00813     FCurve * operator&();
    00814 };
    00815
    00816 }; // namespace XSI
    00817
    00818 #endif // __XSIFCURVE_H__