00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef GE_PATH_H
00023 #define GE_PATH_H
00024
00025 #include "basetype.h"
00026 #include "xform3d.h"
00027 #include "quatern.h"
00028 #include "vfile.h"
00029
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033
00034
00035
00036 typedef struct _gePath gePath;
00037
00038 #define GE_PATH_ROTATION_CHANNEL 1
00039 #define GE_PATH_TRANSLATION_CHANNEL 2
00040
00041 #define GE_PATH_ALL_CHANNELS (GE_PATH_ROTATION_CHANNEL | GE_PATH_TRANSLATION_CHANNEL)
00042
00043 #ifndef GE_PATH_ENUMS
00044 #define GE_PATH_ENUMS
00045 typedef enum
00046 {
00047 GE_PATH_INTERPOLATE_LINEAR = 0,
00048 GE_PATH_INTERPOLATE_HERMITE,
00049 GE_PATH_INTERPOLATE_SLERP,
00050 GE_PATH_INTERPOLATE_SQUAD,
00051
00052 GE_PATH_INTERPOLATE_HERMITE_ZERO_DERIV = 7
00053 }gePath_Interpolator;
00054 #endif
00055
00056 GENESISAPI void GENESISCC gePath_CreateRef( gePath *P );
00057
00058 GENESISAPI gePath *GENESISCC gePath_Create(
00059 gePath_Interpolator TranslationInterpolation,
00060 gePath_Interpolator RotationInterpolation,
00061 geBoolean Looped);
00062
00063
00064
00065
00066
00067 GENESISAPI gePath *GENESISCC gePath_CreateCopy( const gePath *P );
00068
00069 GENESISAPI void GENESISCC gePath_Destroy(gePath **PP);
00070
00071
00072
00073 GENESISAPI geBoolean GENESISCC gePath_InsertKeyframe(
00074 gePath *P,
00075 int ChannelMask,
00076 geFloat Time,
00077 const geXForm3d *Matrix);
00078
00079
00080 GENESISAPI geBoolean GENESISCC gePath_DeleteKeyframe(
00081 gePath *P,
00082 int Index,
00083 int ChannelMask);
00084
00085
00086 GENESISAPI geBoolean GENESISCC gePath_GetTimeExtents(
00087 const gePath *P,
00088 geFloat *StartTime,
00089 geFloat *EndTime);
00090
00091
00092
00093
00094
00095 GENESISAPI void GENESISCC gePath_GetKeyframe(
00096 const gePath *P,
00097 int Index,
00098 int Channel,
00099 geFloat *Time,
00100 geXForm3d *Matrix);
00101
00102
00103 GENESISAPI int GENESISCC gePath_GetKeyframeCount(const gePath *P,int Channel);
00104
00105
00106 GENESISAPI int GENESISCC gePath_GetKeyframeIndex(const gePath *P, int Channel, geFloat Time);
00107
00108
00109
00110 GENESISAPI void GENESISCC gePath_Sample(const gePath *P, geFloat Time,geXForm3d *Matrix);
00111
00112
00113
00114
00115 void GENESISCC gePath_SampleChannels(
00116 const gePath *P,
00117 geFloat Time,
00118 geQuaternion *Rotation,
00119 geVec3d *Translation);
00120
00121
00122
00123 GENESISAPI geBoolean GENESISCC gePath_OffsetTimes(gePath *P,
00124 int StartingIndex, int ChannelMask, geFloat TimeOffset );
00125
00126
00127 GENESISAPI geBoolean GENESISCC gePath_ModifyKeyframe(
00128 gePath *P,
00129 int Index,
00130 int ChannelMask,
00131 const geXForm3d *Matrix);
00132
00133
00134
00135
00136
00137 GENESISAPI gePath* GENESISCC gePath_CreateFromFile(geVFile *F);
00138
00139
00140 GENESISAPI geBoolean GENESISCC gePath_WriteToFile(const gePath *P, geVFile *F);
00141
00142
00143 GENESISAPI geBoolean GENESISCC gePath_WriteToBinaryFile(const gePath *P, geVFile *F);
00144
00145
00146
00147
00148 #ifdef __cplusplus
00149 }
00150 #endif
00151
00152
00153 #endif