00001 #ifndef __FBSYSTEM_H__
00002 #define __FBSYSTEM_H__
00003
00004
00005
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
00045 #include <kaydaradef.h>
00046 #ifndef FBSDK_DLL
00047
00050 #define FBSDK_DLL K_DLLIMPORT
00051 #endif
00052
00053
00054 #include <fbsdk/fbcomponent.h>
00055 #include <fbsdk/fbdata.h>
00056
00057 #include <fbsdk/fbio.h>
00058 #include <fbsdk/fbshader.h>
00059 #include <fbsdk/fbmodel.h>
00060
00061
00062 #if !defined(K_NO_AUDIO)
00063 #include <fbsdk/fbaudio.h>
00064 #endif
00065
00066 #if !defined(K_NO_VIDEO)
00067 #include <fbsdk/fbvideo.h>
00068 #endif
00069
00070 #if !defined(K_NO_DECK)
00071 #include <fbsdk/fbdeck.h>
00072 #endif
00073
00074 #if !defined(K_NO_ASSETMNG)
00075 #include <fbsdk/fbassetmng.h>
00076 #endif
00077
00078 #if !defined(K_NO_MANIPULATOR)
00079 #include <fbsdk/fbmanipulator.h>
00080 #endif
00081
00082 #ifdef FBSDKUseNamespace
00083 namespace FBSDKNamespace {
00084 #endif
00085
00086 FB_FORWARD( FBCharacter );
00087
00088 struct FBVideoGrabOptions;
00090 typedef FBVideoGrabOptions* HFBVideoGrabOptions;
00091
00092 struct FBPickInfos;
00094 typedef class FBSDK_DLL FBArrayTemplate<FBPickInfos> FBPickInfosList;
00095
00096 FB_DEFINE_COMPONENT( FBSDK_DLL, Take );
00097 FB_DEFINE_COMPONENT( FBSDK_DLL, Renderer );
00098
00100
00102
00103
00109 FBSDK_DLL HIObject FBGetFBObject( HIObject pObject, bool pAutoCreate=false );
00110
00116 template<class T> inline T* FBCast(HIObject pObject, bool pAutoCreate = false)
00117 {
00118 HIObject lObject = FBGetFBObject(pObject, pAutoCreate);
00119
00120 return (T*)lObject;
00121 }
00122
00124
00126 __FB_FORWARD( FBSystem );
00127
00144 class FBSDK_DLL FBSystem : public FBComponent {
00145 __FBClassDeclare( FBSystem,FBComponent );
00146 public:
00149 FBSystem();
00150
00151 FBPropertyString ApplicationPath;
00152 FBPropertyEventUIIdle OnUIIdle;
00153 FBPropertyEventConnectionNotify OnConnectionNotify;
00154 FBPropertyEventConnectionDataNotify OnConnectionDataNotify;
00155 FBPropertyEventConnectionStateNotify OnConnectionStateNotify;
00156
00157 FBPropertyString ComputerName;
00158 FBPropertyDouble Version;
00159 FBPropertyString BuildId;
00160
00161
00162 FBPropertyTime SystemTime;
00163 FBPropertyTime LocalTime;
00164 FBPropertyTake CurrentTake;
00165
00166 FBPropertyScene Scene;
00167
00168 FBPropertyModel SceneRootModel;
00169 FBPropertyModel RootModel;
00170 FBPropertyString PathImages;
00171 FBPropertyString PathMeshs;
00172
00173 #if !defined(K_NO_AUDIO)
00174 FBPropertyListAudioIn AudioInputs;
00175 FBPropertyListAudioOut AudioOutputs;
00176 #endif
00177
00178 #if !defined(K_NO_VIDEO)
00179 FBPropertyListVideoIn VideoInputs;
00180 FBPropertyListVideoOut VideoOutputs;
00181 #endif
00182
00183 FBPropertyListCommPort CommPorts;
00184 FBPropertyRenderer Renderer;
00185
00186 FBPropertyDouble FrameRate;
00187 FBPropertyDouble ProcessMemory;
00188 FBPropertyDouble ProcessMemoryPeak;
00189 FBPropertyVector2d DesktopSize;
00190 FBPropertyBool FullScreenViewer;
00191
00192 #if !defined(K_NO_ASSETMNG)
00193 FBPropertyAssetMng AssetManager;
00194 #endif
00195
00200 static bool LibraryLoad(char *pPath);
00206 static void* LibraryGetProcAddress(char *pPath, char *pFunctionName);
00211 static bool LibraryFree(char *pPath);
00212 };
00213
00214 #ifndef K_NO_TRIGGER
00216 // FBTriggerManager
00218 __FB_FORWARD( FBTriggerManager );
00219
00222 class FBSDK_DLL FBTriggerManager :public FBComponent
00223 {
00224 __FBClassDeclare( FBTriggerManager, FBComponent );
00225 public:
00228 FBTriggerManager();
00229
00233 int GetGroupCount();
00234
00239 char* GetGroupName( int pIndex );
00240
00245 bool GetGroupActive( int pIndex );
00246
00251 void SetGroupActive( int pIndex, bool pState );
00252
00253 FBPropertyBool Active;
00254 };
00255 #endif
00256
00258
00260 FB_FORWARD( FBBatchOptions );
00261
00263 enum FBBatchProcessType
00264 {
00265 kFBBatchProcessTypeLoad,
00266 kFBBatchProcessTypeSave,
00267 kFBBatchProcessTypeConvert
00268 };
00269 FB_DEFINE_ENUM( FBSDK_DLL, BatchProcessType );
00270
00272 enum FBBatchFileFormat
00273 {
00274 kFBBatchFileFormatTRC,
00275 kFBBatchFileFormatC3D,
00276 kFBBatchFileFormatAMC,
00277 kFBBatchFileFormatBVH,
00278 kFBBatchFileFormatHTR,
00279 kFBBatchFileFormatFBX
00280 };
00281 FB_DEFINE_ENUM( FBSDK_DLL, BatchFileFormat );
00282
00284 enum FBBatchOnTakeExist
00285 {
00286 kFBBatchOnTakeExistOverwrite,
00287 kFBBatchOnTakeExistSkip
00288 };
00289 FB_DEFINE_ENUM( FBSDK_DLL, BatchOnTakeExist );
00290
00292 enum FBBatchOnContainsBatchTakes
00293 {
00294 kFBBatchOnContainsBatchTakesSaveBatchTakesOnly,
00295 kFBBatchOnContainsBatchTakesSaveAllTakes
00296 };
00297 FB_DEFINE_ENUM( FBSDK_DLL, BatchOnContainsBatchTakes );
00298
00300 enum FBBatchStatus
00301 {
00302 kFBBatchStatusSuccess,
00303 kFBBatchStatusError,
00304 kFBBatchStatusCharacterNotSpecified,
00305 kFBBatchStatusCharacterNotCharacterized,
00306 kFBBatchStatusCharacterHasNoReference,
00307 kFBBatchStatusInputActorNotSpecified,
00308 kFBBatchStatusActorInputMarkersetNotSpecified,
00309 kFBBatchStatusActorInputMarkersetHasNoReferenceModel,
00310 kFBBatchStatusActorInputMarkersetNotCorrectlyAssociated,
00311 kFBBatchStatusInputCharacterNotCharacterized,
00312 kFBBatchStatusInputCharacterHasNoReference,
00313 kFBBatchStatusInputDirectoryNotValid,
00314 kFBBatchStatusAsfSkeletonFileNotSpecified,
00315 kFBBatchStatusCantOpenAsfSkeletonFile,
00316 kFBBatchStatusOutputDirectoryNotValid
00317 };
00318
00320 class FBSDK_DLL FBBatchOptions
00321 {
00322 public:
00323
00326 FBBatchOptions();
00327
00328 FBBatchFileFormat mInputFileFormat;
00329 FBBatchFileFormat mOutputFileFormat;
00330
00331 FBBatchProcessType mProcessType;
00332
00333 FBString mInputDirectory;
00334 FBString mOutputDirectory;
00335 FBString mSkeletonFile;
00336
00337 #if !defined(K_NO_CHARACTER)
00338 HFBCharacter mCharacter;
00339 #endif
00340
00341 bool mStartAnimationAtZero;
00342 bool mFrameAnimation;
00343 bool mOverwriteScaling;
00344 bool mKeepDummyBones;
00345 bool mWriteRate;
00346 bool mWriteTranslation;
00347 bool mPlotToCharacter;
00348 bool mPlotToControlSet;
00349 bool mUseSingleTake;
00350 bool mUseBatchSuffix;
00351 bool mKeepCharacterConstraint;
00352
00353 FBBatchOnTakeExist mOnTakeExistAction;
00354 FBBatchOnContainsBatchTakes mOnContainsBatchTakesAction;
00355 };
00356
00357
00359
00361 FB_FORWARD( FBPlotOptions );
00362
00364 enum FBRotationFilter
00365 {
00366 kFBRotationFilterNone,
00367 kFBRotationFilterGimbleKiller,
00368 kFBRotationFilterUnroll
00369 };
00370 FB_DEFINE_ENUM( FBSDK_DLL, RotationFilter );
00371
00373 class FBSDK_DLL FBPlotOptions
00374 {
00375 public:
00376
00379 FBPlotOptions();
00380
00381 bool mPlotAllTakes;
00382 bool mPlotOnFrame;
00383 FBTime mPlotPeriod;
00384 FBRotationFilter mRotationFilterToApply;
00385 bool mUseConstantKeyReducer;
00386 bool mConstantKeyReducerKeepOneKey;
00387 bool mPlotTranslationOnRootOnly;
00388 bool mPreciseTimeDiscontinuities;
00389 };
00390
00391
00392
00393
00395
00397 __FB_FORWARD( FBApplication );
00398 __FB_FORWARD( FBCharacter );
00399 __FB_FORWARD( FBActor );
00400 FB_DEFINE_COMPONENT( FBSDK_DLL, Character );
00401 FB_DEFINE_COMPONENT( FBSDK_DLL, Actor );
00402
00404 enum FBViewerMode {
00405 kFBViewerModeOneWindow,
00406 kFBViewerModeTwoWindow,
00407 kFBViewerModeThreeWindow,
00408 kFBViewerModeFourWindow,
00409 kFBViewerModeSchematic
00410 };
00411
00427 class FBSDK_DLL FBApplication : public FBComponent
00428 {
00429 __FBClassDeclare( FBApplication,FBComponent );
00430 public:
00434 FBApplication(HIObject pObject=NULL);
00435
00436 FBPropertyEvent OnFileNewCompleted;
00437 FBPropertyEvent OnFileNew;
00438 FBPropertyEvent OnFileOpenCompleted;
00439 FBPropertyEvent OnFileOpen;
00440 FBPropertyEvent OnFileMerge;
00441 FBPropertyEvent OnFileSaveCompleted;
00442 FBPropertyEvent OnFileSave;
00443 FBPropertyEvent OnFileExit;
00444
00449 bool Minimize(bool pBlocking=true);
00450
00454 bool Maximize();
00455
00459 bool FileNew();
00460
00468 bool FileOpen( char* pFilename, bool pShowOptions = false, FBFbxOptions* pOptions = NULL );
00469
00477 bool FileMerge( char* pFilename, bool pShowOptions = false, FBFbxOptions* pOptions = NULL );
00478
00486 bool FileAppend( char* pFilename, bool pShowOptions = false, FBFbxOptions* pOptions = NULL );
00487
00493 bool FileSave( char* pFilename = NULL, FBFbxOptions* pOptions = NULL );
00494
00499 void FileExit( bool pSave = false );
00500
00512 bool FileImport( FBString pFilename, bool pMatchModels = false );
00513
00525 bool FileExport( FBString pFilename );
00526
00533 FBBatchStatus FileBatch( HFBBatchOptions pBatchOptions, HFBPlotOptions pPlotOptions = NULL );
00534
00543 bool FileImportBatch( char* pName, HFBBatchOptions pBatchOptions, HFBModel pReference );
00544
00554 bool FileExportBatch( char* pName, HFBTake pTake, HFBBatchOptions pBatchOptions, FBModelList &pExportModels );
00555
00560 bool IsValidBatchFile( char* pFilename );
00561
00568 void FileRender( HFBVideoGrabOptions pRenderOptions = NULL );
00569
00575 bool ExecuteScript(FBString pFilename);
00576
00580 void SwitchViewerCamera( FBCamera &pCamera );
00581
00582
00583
00590 K_DEPRECATED bool FBXFileOpen( char* pFilename, FBFbxOptions* pOptions = NULL );
00591
00598 K_DEPRECATED bool FBXFileMerge( char* pFilename, FBFbxOptions* pOptions = NULL );
00599
00606 K_DEPRECATED bool FBXFileAppend( char* pFilename, FBFbxOptions* pOptions = NULL );
00607
00608
00614 K_DEPRECATED bool FBXFileSave( char* pFilename = NULL, FBFbxOptions* pOptions = NULL );
00615
00616 public:
00617 FBPropertyString FBXFileName;
00618 FBPropertyActor CurrentActor;
00619 FBPropertyCharacter CurrentCharacter;
00620
00621 #if !defined(K_NO_MANIPULATOR)
00622 FBPropertyListManipulator Manipulators;
00623 #endif
00624 };
00625
00626
00628
00630
00631 __FB_FORWARD( FBPlayerControl );
00632
00633
00634
00635
00637 enum FBTransportMode {
00638 kFBTransportPlay, kFBTransportPlayPrepare, kFBTransportPlayReady,
00639 kFBTransportStop, kFBTransportStopPost, kFBTransportStopReady,
00640 kFBTransportShuttle, kFBTransportShuttlePrepare, kFBTransportShuttleReady,
00641 kFBTransportPlayReverse, kFBTransportPlayReversePrepare, kFBTransportPlayReverseReady,
00642 kFBTransportJog, kFBTransportJogPrepare, kFBTransportJogReady,
00643 kFBTransportGoto, kFBTransportGotoPrepare, kFBTransportGotoReady,
00644 kFBTransportStepForward, kFBTransportStepForwardPrepare, kFBTransportStepForwardReady,
00645 kFBTransportStepBackward, kFBTransportStepBackwardPrepare,kFBTransportStepBackwardReady
00646 };
00647 FB_DEFINE_ENUM( FBSDK_DLL, TransportMode );
00648
00650 enum FBTransportTimeFormat
00651 {
00652 kFBTimeFormatTimecode,
00653 kFBTimeFormatFrame,
00654 };
00655
00656 FB_DEFINE_ENUM(FBSDK_DLL, TransportTimeFormat);
00657
00658
00660 enum FBTransportPlaySpeed
00661 {
00662 kFBSpeed_1_10x,
00663 kFBSpeed_1_5x,
00664 kFBSpeed_1_4x,
00665 kFBSpeed_1_3x,
00666 kFBSpeed_1_2x,
00667 kFBSpeed_1x,
00668 kFBSpeed_ALL_FR,
00669 kFBSpeed_2x,
00670 kFBSpeed_3x,
00671 kFBSpeed_4x,
00672 kFBSpeed_5x,
00673 kFBSpeed_10x
00674 };
00675 FB_DEFINE_ENUM( FBSDK_DLL, TransportPlaySpeed);
00676
00678 enum FBTransportSnapMode
00679 {
00680 kFBTransportSnapModeNoSnap,
00681 kFBTransportSnapModeSnapOnFrames,
00682 kFBTransportSnapModePlayOnFrames,
00683 kFBTransportSnapModeSnapAndPlayOnFrames,
00684 };
00685 FB_DEFINE_ENUM( FBSDK_DLL, TransportSnapMode );
00686
00687
00702 class FBSDK_DLL FBPlayerControl : public FBComponent {
00703 __FBClassDeclare( FBPlayerControl,FBComponent );
00704 public:
00705
00709 FBPlayerControl(HIObject pObject=NULL);
00710
00715 bool Play(bool pUseMarkers = false);
00716
00721 bool PlayReverse(bool pUseMarkers = false);
00722
00726 void SetPlaySpeed (FBTransportPlaySpeed pPlaySpeed );
00727
00731 FBTransportPlaySpeed GetPlaySpeed();
00732
00736 bool Stop();
00737
00741 bool GotoStart();
00742
00746 bool GotoEnd();
00747
00752 bool Goto( FBTime pTime );
00753
00757 bool StepForward();
00758
00762 bool StepBackward();
00763
00769 bool Record( bool pOverrideTake=false,bool pCopyData=true );
00770
00774 FBTransportMode GetTransportMode();
00775
00780 void SetTransportFps ( FBTimeMode pTimeMode, double pCustom=0.0);
00781
00785 FBTimeMode GetTransportFps ();
00786
00790 double GetTransportFpsValue ();
00791
00795 void Key();
00796
00799 void GotoNextKey();
00800
00803 void GotoPreviousKey();
00804
00807 void EvaluationPause();
00808
00811 void EvaluationResume();
00812
00813 FBPropertyBool LoopActive;
00814 FBPropertyTime LoopStart;
00815 FBPropertyTime LoopStop;
00816
00817 FBPropertyTime ZoomWindowStart;
00818 FBPropertyTime ZoomWindowStop;
00819
00820 FBPropertyTime NextMarker;
00821 FBPropertyTime PreviousMarker;
00822
00823 FBPropertyBool IsRecording;
00824 FBPropertyBool IsPlaying;
00825 FBPropertyBool IsPlotting;
00826
00827 FBPropertyTransportSnapMode SnapMode;
00828
00829 FBPropertyTransportTimeFormat TransportTimeFormat;
00830
00831 FBPropertyTime RecordingSamplingPeriod;
00832 FBPropertyTime PlotSamplingPeriod;
00833 };
00834
00836
00838 __FB_FORWARD( FBKeyControl );
00839
00843 class FBSDK_DLL FBKeyControl : public FBComponent
00844 {
00845 __FBClassDeclare(FBKeyControl, FBComponent);
00846
00847 public:
00851 FBKeyControl(HIObject pObject=NULL);
00852
00853 FBPropertyBool AutoKey;
00854 };
00855
00857
00859 FB_FORWARD( FBCriticalSection );
00860
00865 class FBSDK_DLL FBCriticalSection
00866 {
00867 void *mPtr;
00868 public:
00870 FBCriticalSection();
00871
00873 ~FBCriticalSection();
00874
00878 bool Init();
00879
00881 void Enter();
00882
00884 void Leave();
00885 };
00886
00888
00890 __FB_FORWARD( FBReferenceTime );
00891
00893 class FBSDK_DLL FBReferenceTime : public FBComponent {
00894 __FBClassDeclare( FBReferenceTime,FBComponent );
00895 public:
00899 FBReferenceTime(HIObject pObject=NULL);
00900
00905 int Add( char *pName );
00906
00910 void Remove( int pIndex );
00911
00917 void SetTime( int pIndex, FBTime pReferenceTime, FBTime pSystem );
00923 FBTime GetTime( int pIndex, FBTime pSystem );
00924
00929 char *operator[](int pIndex);
00930
00931 FBPropertyInt Count;
00932 FBPropertyInt ItemIndex;
00933 };
00934
00936
00938
00939
00946 FBSDK_DLL FBModelList* FBCreateModelList();
00947
00951 FBSDK_DLL void FBDestroyModelList( FBModelList* pModelList );
00952
00959 FBSDK_DLL FBPickInfosList* FBCreatePickInfosList();
00960
00964 FBSDK_DLL void FBDestroyPickInfosList( FBPickInfosList* pPickInfosList );
00965
00972 FBSDK_DLL FBComponentList* FBCreateComponentList();
00973
00977 FBSDK_DLL void FBDestroyComponentList( FBComponentList* pObjectList );
00978
00979
00984 FBSDK_DLL void FBSleep( unsigned long MilliSeconds );
00985
00994 FBSDK_DLL HFBModel FBFindModelByName( char* pModelName, HFBModel pParent=NULL );
00995
01000 FBSDK_DLL HFBModel FBLoadFbxPrimitivesModel( char* pModelName );
01001
01009 FBSDK_DLL void FBFindModelsOfType( FBModelList& pList, int pTypeInfo, HFBModel pParent=NULL );
01010
01020 FBSDK_DLL void FBGetSelectedModels( FBModelList& pList, HFBModel pParent=NULL, bool pSelected=true, bool pSortBySelectOrder = false );
01021
01028 FBSDK_DLL void FBSelectObjectsByNamespace ( char* pNameSpaceName, bool pSelect, bool pSearchExclusive = true );
01029
01037 FBSDK_DLL void FBFindObjectsByName( const char* pNamePattern, FBComponentList& pList, bool pIncludeNamespace = true, bool pModelsOnly = false );
01038
01044 FBSDK_DLL void FBFindObjectsByNamespace( const char* pNamePattern, FBComponentList& pList );
01045
01046
01055 FBSDK_DLL void FBTrace( char* pFormatString, ... );
01056
01057 #if !defined(K_NO_UI)
01058
01063 FBSDK_DLL bool FBPopNormalTool( char* pToolName, bool pSetFocus = true );
01064
01065 #endif
01066
01067 #ifdef FBSDKUseNamespace
01068 }
01069 #endif
01070 #endif
01071