fbsdk/fbstory.h Source File
 
 
 
fbsdk/fbstory.h
Go to the documentation of this file.
00001 #ifndef __FBSTORY_H__
00002 #define __FBSTORY_H__
00003 /**************************************************************************
00004  Copyright (c) 1994 - 2009 Autodesk, Inc. and/or its licensors.
00005  All Rights Reserved.
00006  
00007  The coded instructions, statements, computer programs, and/or related 
00008  material (collectively the "Data") in these files contain unpublished 
00009  information proprietary to Autodesk, Inc. and/or its licensors, which is 
00010  protected by Canada and United States of America federal copyright law 
00011  and by international treaties.
00012  
00013  The Data may not be disclosed or distributed to third parties, in whole 
00014  or in part, without the prior written consent of Autodesk, Inc. 
00015  ("Autodesk").
00016  
00017  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00018  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO 
00019  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR 
00020  ARISING BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES 
00021  OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR 
00022  PURPOSE OR USE. WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT 
00023  WARRANT THAT THE OPERATION OF THE DATA WILL BE UNINTERRUPTED OR ERROR 
00024  FREE.
00025  
00026  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS 
00027  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR 
00028  EXPENSES OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE 
00029  DAMAGES OR OTHER SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS 
00030  OF PROFITS, REVENUE OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR 
00031  DAMAGES OF ANY KIND), HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF 
00032  LIABILITY, WHETHER DERIVED FROM CONTRACT, TORT (INCLUDING, BUT NOT 
00033  LIMITED TO, NEGLIGENCE), OR OTHERWISE, ARISING OUT OF OR RELATING TO THE 
00034  DATA OR ITS USE OR ANY OTHER PERFORMANCE, WHETHER OR NOT AUTODESK HAS 
00035  BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE.
00036  
00037 **************************************************************************/
00038 
00043 #include <kaydaradef.h>
00044 #ifndef FBSDK_DLL 
00045 
00048         #define FBSDK_DLL K_DLLIMPORT
00049 #endif
00050 
00051 #include <fbsdk/fbcomponent.h>
00052 #include <fbsdk/fbcore.h>
00053 #include <fbsdk/fbvideo.h>
00054 #include <fbsdk/fbmodel.h>
00055 #include <fbsdk/fbcamera.h>
00056 
00057 #include <fbxsdk/fbxsdk_nsbegin.h>
00058         class FbxScene;
00059 #include <fbxsdk/fbxsdk_nsend.h>
00060 
00061 #ifdef FBSDKUseNamespace
00062         namespace FBSDKNamespace {
00063 #endif
00064 
00065 __FB_FORWARD( FBStory );
00066 __FB_FORWARD( FBStoryFolder );
00067 __FB_FORWARD( FBStoryTrack );
00068 __FB_FORWARD( FBStoryClip );
00069 FB_DEFINE_COMPONENT( FBSDK_DLL, Story );
00070 FB_DEFINE_COMPONENT( FBSDK_DLL, StoryFolder );
00071 FB_DEFINE_COMPONENT( FBSDK_DLL, StoryTrack );
00072 FB_DEFINE_COMPONENT( FBSDK_DLL, StoryClip );
00073 FB_DEFINE_COMPONENT( FBSDK_DLL, AnimationNode );
00074 FB_DEFINE_COMPONENT( FBSDK_DLL, Video );
00075 FB_DEFINE_COMPONENT( FBSDK_DLL, AudioClip );
00076 
00078 enum FBStoryTrackType {
00079         kFBStoryTrackAnimation,         
00080         kFBStoryTrackCamera,            
00081         kFBStoryTrackCharacter,         
00082         kFBStoryTrackConstraint,        
00083         kFBStoryTrackCommand,           
00084         kFBStoryTrackShot,                      
00085         kFBStoryTrackAudio,                     
00086         kFBStoryTrackVideo                      
00087 };
00088 
00090 enum FBStoryTrackRefMode {
00091         kFBStoryTrackOverride,  
00092         kFBStoryTrackAdditive   
00093 };
00094 
00096 enum FBStoryTrackBodyPart {
00097         kFBStoryTrackBodyPartNone = 0,
00098 
00099         kFBStoryTrackBodyPartHead                       = 1 << 0,
00100 
00101         kFBStoryTrackBodyPartLeftShoulder       = 1 << 1,
00102         kFBStoryTrackBodyPartLeftHand           = 1 << 2,
00103         kFBStoryTrackBodyPartLeftArm            = 1 << 3 | kFBStoryTrackBodyPartLeftShoulder | kFBStoryTrackBodyPartLeftHand,
00104         kFBStoryTrackBodyPartRightShoulder      = 1 << 4,
00105         kFBStoryTrackBodyPartRightHand          = 1 << 5,
00106         kFBStoryTrackBodyPartRightArm           = 1 << 6 | kFBStoryTrackBodyPartRightShoulder | kFBStoryTrackBodyPartRightHand,
00107 
00108         kFBStoryTrackBodyPartUpperBody          = kFBStoryTrackBodyPartHead | 
00109                                                                                   kFBStoryTrackBodyPartLeftArm | kFBStoryTrackBodyPartLeftShoulder | kFBStoryTrackBodyPartLeftHand |
00110                                                                                   kFBStoryTrackBodyPartRightArm | kFBStoryTrackBodyPartRightShoulder | kFBStoryTrackBodyPartRightHand,
00111 
00112         kFBStoryTrackBodyPartLeftFoot           = 1 << 7,
00113         kFBStoryTrackBodyPartLeftLeg            = 1 << 8 | kFBStoryTrackBodyPartLeftFoot,
00114         kFBStoryTrackBodyPartRightFoot          = 1 << 9,
00115         kFBStoryTrackBodyPartRightLeg           = 1 << 10| kFBStoryTrackBodyPartRightFoot,
00116 
00117         kFBStoryTrackBodyPartLowerBody          = kFBStoryTrackBodyPartLeftLeg | kFBStoryTrackBodyPartLeftFoot | kFBStoryTrackBodyPartRightLeg | kFBStoryTrackBodyPartRightFoot,
00118 
00119         kFBStoryTrackBodyPartAll                        = kFBStoryTrackBodyPartUpperBody | kFBStoryTrackBodyPartLowerBody,
00120 
00121         kFBStoryTrackBodyPartProps                      = 1 << 11,
00122     kFBStoryTrackBodyPartExtensions             = 1 << 12
00123 };
00124 
00126 enum FBStoryClipShowGhostMode {
00127         kFBStoryClipAlways,             
00128         kFBStoryClipTimeCursor  
00129 };
00130 
00132 enum FBStoryClipSolveMode {
00133         kFBStoryClipRetargetSkeleton,   
00134         kFBStoryClipAnimSkeleton,               
00135         kFBStoryClipAnimFkIk,                   
00136         kFBStoryClipAnimSkeletonIk              
00137 };
00138 
00140 enum FBStoryClipCompMode {
00141         kFBStoryClipOff,        
00142         kFBStoryClipAuto,       
00143         kFBStoryClipUser        
00144 };
00145 
00146 FB_DEFINE_ENUM(FBSDK_DLL, StoryTrackType);
00147 FB_DEFINE_ENUM(FBSDK_DLL, StoryTrackRefMode);
00148 FB_DEFINE_ENUM(FBSDK_DLL, StoryClipShowGhostMode);
00149 FB_DEFINE_ENUM(FBSDK_DLL, StoryClipSolveMode);
00150 FB_DEFINE_ENUM(FBSDK_DLL, StoryClipCompMode);
00151 
00152 FB_FORWARD( FBPropertyListStoryFolder );
00154 class FBSDK_DLL FBPropertyListStoryFolder : public FBPropertyListComponentBase
00155 {
00156 public:
00162         virtual int Add(FBStoryFolder* pItem);
00163 
00169     virtual int Remove(FBStoryFolder* pItem);
00170 
00174     virtual void RemoveAt(int pIndex);
00175 
00180         virtual FBStoryFolder* operator[](int pIndex);
00181 
00185         virtual int GetCount();
00186 
00187 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00188         inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00189 private:
00190         inline virtual int Add  ( FBComponent* pItem ) { return Add((FBStoryFolder*)pItem); }
00191 #endif
00192 };
00193 
00194 FB_FORWARD( FBPropertyListStoryTrack );
00196 class FBSDK_DLL FBPropertyListStoryTrack : public FBPropertyListComponentBase
00197 {
00198 public:
00204         virtual int Add(FBStoryTrack* pItem);
00205 
00211     virtual int Remove(FBStoryTrack* pItem);
00212 
00216     virtual void RemoveAt(int pIndex);
00217 
00222         virtual FBStoryTrack* operator[](int pIndex);
00223 
00227         virtual int GetCount();
00228 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00229         inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00230 private:
00231         inline virtual int Add  ( FBComponent* pItem ) { return Add((FBStoryTrack*)pItem); }
00232 #endif
00233 };
00234 
00235 FB_FORWARD( FBPropertyListStorySubTrack );
00237 class FBSDK_DLL FBPropertyListStorySubTrack : public FBPropertyListComponentBase
00238 {
00239 public:
00245         virtual int Add(FBStoryTrack* pItem);
00246 
00252     virtual int Remove(FBStoryTrack* pItem);
00253 
00257     virtual void RemoveAt(int pIndex);
00258 
00263         virtual FBStoryTrack* operator[](int pIndex);
00264 
00268         virtual int GetCount();
00269 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00270         inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00271 private:
00272         inline virtual int Add  ( FBComponent* pItem ) { return Add((FBStoryTrack*)pItem); }
00273 #endif
00274 };
00275 
00276 FB_FORWARD( FBPropertyListStoryClip );
00278 class FBSDK_DLL FBPropertyListStoryClip : public FBPropertyListComponentBase
00279 {
00280 public:
00285         virtual int Add(FBStoryClip* pItem);
00286 
00291     virtual int Remove(FBStoryClip* pItem);
00292 
00296     virtual void RemoveAt(int pIndex);
00297 
00302         virtual FBStoryClip* operator[](int pIndex);
00303 
00307         virtual int GetCount();
00308 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00309         inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00310 private:
00311         inline virtual int Add  ( FBComponent* pItem ) { return Add((FBStoryClip*)pItem); }
00312 #endif
00313 };
00314 
00315 FB_FORWARD( FBPropertyListStoryDetails );
00317 class FBSDK_DLL FBPropertyListStoryDetails : public FBPropertyListComponentBase
00318 {
00319 public:
00324         virtual int Add(FBComponent* pItem);
00325 
00330     virtual int Remove(FBComponent* pItem);
00331 
00335     virtual void RemoveAt(int pIndex);
00336 
00341         virtual FBComponent* operator[](int pIndex);
00342 
00346         virtual int GetCount();
00347 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00348         inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00349 #endif
00350 };
00351 
00352 FB_FORWARD( FBPropertyListPivot );
00354 class FBSDK_DLL FBPropertyListPivot : public FBPropertyListComponentBase
00355 {
00356 public:
00361         virtual int Add(FBModel* pItem);
00362 
00367     virtual int Remove(FBModel* pItem);
00368 
00372     virtual void RemoveAt(int pIndex);
00373 
00378         virtual FBModel* operator[](int pIndex);
00379 
00383         virtual int GetCount();
00384 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00385         inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00386 private:
00387         inline virtual int Add  ( FBComponent* pItem ) { return Add((FBModel*)pItem); }
00388 #endif
00389 };
00390 
00392 // FBStory
00394 
00397 class FBSDK_DLL FBStory : public FBComponent 
00398 {
00399         //--- Open Reality declaration.
00400         __FBClassDeclare(FBStory, FBComponent);
00401 
00404         FBStory();
00405 
00406 public:
00407 
00408         FBPropertyBool                  Mute;                                           
00409         FBPropertyBool                  LockedShot;                                     
00410         FBPropertyBool                  SummaryClip;                            
00411         FBPropertyBool                  RecordToDisk;                           
00412         FBPropertyBool                  NoneBlockingPostprocess;        
00413         FBPropertyStoryFolder   RootFolder;                                     
00414         FBPropertyStoryFolder   RootEditFolder;                         
00415 
00419     static FBStory& TheOne();
00420 
00421 };
00422 
00424 // FBStoryFolder
00426 
00429 class FBSDK_DLL FBStoryFolder : public FBComponent
00430 {
00431         //--- Open Reality declaration.
00432         __FBClassDeclare(FBStoryFolder, FBComponent);
00433 public:
00434 
00440         FBStoryFolder(FBStoryFolder* pParentFolder=NULL, HIObject pObject=NULL);
00441 
00444         virtual void FBDelete();
00445 
00449         void Load(bool pLoad);
00450 
00451         FBPropertyString                        Label;                          
00452     FBPropertyBool                              Collapsed;                      
00453         FBPropertyBool                          Solo;                           
00454         FBPropertyBool                          Mute;                           
00455         FBPropertyString                        RecordClipPath;         
00456         FBPropertyStoryFolder           Parent;                         
00457         FBPropertyListStoryFolder       Childs;                         
00458         FBPropertyListStoryTrack        Tracks;                         
00459 };
00460 
00462 // FBStoryTrack
00464 
00467 class FBSDK_DLL FBStoryTrack : public FBConstraint
00468 {
00469         //--- Open Reality declaration.
00470         __FBClassDeclare(FBStoryTrack, FBConstraint);
00471 public:
00472 
00478         FBStoryTrack(FBStoryTrackType pTrackType, FBStoryFolder* pFolder=NULL, HIObject pObject=NULL);
00479 
00485         FBStoryTrack(FBComponent* pSource, FBStoryFolder* pFolder=NULL, HIObject pObject=NULL);
00486 
00489         virtual void FBDelete();
00490 
00494         void ChangeDetailsBegin();
00495 
00499         void ChangeDetailsEnd();
00500 
00501         //--- Animation track functions -----------------------------------------------------------------------------------------------------
00510         FBStoryClip* CopyTakeIntoTrack(FBTimeSpan& pTimeSpan, FBTake* pTake, FBTime pOutputOffset = 0, bool pMakeUndoable = false);
00511 
00512         //--- Character track functions -----------------------------------------------------------------------------------------------------
00518         void EnableBodyPart(FBStoryTrackBodyPart pPart, bool pEnable);
00519 
00523         bool IsBodyPartEnabled(FBStoryTrackBodyPart pPart);
00524 
00528         void AddClip(FBComponent* pClip, FBTime pTime);
00529 
00533         void Load(bool pLoad);
00534 
00535         //--- All track properties ----------------------------------------------------------------------------------------------------------
00536         FBPropertyStoryTrackType        Type;                   
00537         FBPropertyString                        Label;                  
00538         FBPropertyBool                          Mute;                   
00539         FBPropertyBool                          Solo;                   
00540         FBPropertyString                        RecordClipPath; 
00541         FBPropertyString                        ClipNameConvention;
00542         FBPropertyBool                          RecordTrack;    
00543         FBPropertyStoryFolder           ParentFolder;   
00544         FBPropertyStoryTrack            ParentTrack;    
00545         FBPropertyListStorySubTrack     SubTracks;              
00546         FBPropertyListStoryClip         Clips;                  
00547         FBPropertyListStoryDetails      Details;                
00548 
00549         //--- Animation and Constraint track properties -------------------------------------------------------------------------------------
00550         FBPropertyAnimatableDouble      Weight;                 
00551 
00552         //--- Animation track properties ----------------------------------------------------------------------------------------------------
00553         FBPropertyBool                          Ghost;                  
00554         FBPropertyBool                          GhostModel;             
00555         FBPropertyBool                          GhostTravelling;
00556         FBPropertyBool                          GhostPivot;             
00557         FBPropertyBool                          AcceptKey;              
00558         FBPropertyStoryTrackRefMode     ReferenceMode;  
00559         FBPropertyBool                          OffsetEnable;   
00560         FBPropertyBool                          PassThrough;    
00561 
00562         //--- Character track properties ----------------------------------------------------------------------------------------------------
00563     FBPropertyCharacter                 Character;          
00564     FBPropertyInt                               CharacterIndex; 
00565 
00566         //--- Shot track properties ---------------------------------------------------------------------------------------------------------
00567         FBPropertyBool                          ShowBackplate;  
00568         FBPropertyBool                          ShowFrontplate; 
00569 
00570         //--- Audio track properties --------------------------------------------------------------------------------------------------------
00571         FBPropertyInt                           AudioOutIndex;  
00572 
00573         //--- Video track properties --------------------------------------------------------------------------------------------------------
00574         FBPropertyVideo                         TrackVideo;             
00575 private:
00576         void FBStoryTrackInitProperties();
00577 };
00578 
00580 // FBStoryClip
00582 
00594 class FBSDK_DLL FBStoryClip : public FBComponent
00595 {
00596         //--- Open Reality declaration.
00597         __FBClassDeclare(FBStoryClip, FBComponent);
00598 public:
00599 
00606         FBStoryClip(FBComponent* pClipObject, FBStoryTrack* pTrack, FBTime pTime, HIObject pObject=NULL);
00607 
00614         FBStoryClip(const char* pFilePath, FBStoryTrack* pTrack, FBTime pTime, HIObject pObject=NULL);
00615 
00618         virtual void FBDelete();
00619 
00622         FBStoryClip* Clone();
00623 
00630         FBTime Move(FBTime pDelta, bool pForce=true);
00631 
00638         FBTime MoveTo(FBTime pTime, bool pForce=true);
00639 
00645         FBStoryClip* Razor(FBTime pTime);
00646 
00647         //--- Animation clip functions ------------------------------------------------------------------------------------------------------
00651         void Match();
00652 
00658         bool ExportToFile(FBString pOutputFile);
00659 
00664         bool MakeWritable();
00665 
00673         void GetAffectedObjects( FBArrayTemplate<FBComponent*>* pAffectedObjects );
00674 
00683         void GetAffectedAnimationNodes( FBArrayTemplate<FBAnimationNode*>* pAffectedAnimationNodes, FBComponent* pClipObject );
00684 
00688         FBXSDK_NAMESPACE::FbxScene* GetFbxScene();
00689 
00690         //--- All clip properties -----------------------------------------------------------------------------------------------------------
00691         FBPropertyColor         Color;                  
00692         FBPropertyTime          Start;                  
00693         FBPropertyTime          Stop;                   
00694         FBPropertyTime          MarkIn;                 
00695         FBPropertyTime          MarkOut;                
00696         FBPropertyTimeSpan      PreBlend;               
00697         FBPropertyTimeSpan      PostBlend;              
00698         FBPropertyTime          Offset;                 
00699         FBPropertyDouble        Speed;                  
00700 
00701         //--- Shot clip properties ----------------------------------------------------------------------------------------------------------
00702         FBPropertyCamera        ShotCamera;             
00703         FBPropertyVideo         ShotBackplate;  
00704         FBPropertyVideo         ShotFrontplate; 
00705         FBPropertyBool          ShowBackplate;  
00706         FBPropertyBool          ShowFrontplate; 
00707         FBPropertyTime          ShotActionStart;
00708         FBPropertyTime          ShotActionStop; 
00709 
00710         //--- Audio clip properties ---------------------------------------------------------------------------------------------------------
00711         FBPropertyAudioClip     AudioClip;              
00712 
00713         //--- Video clip properties ---------------------------------------------------------------------------------------------------------
00714     FBPropertyBool          ImageSequence;   
00715         FBPropertyBool          UseSystemFrameRate;   
00716         FBPropertyDouble        FrameRate;            
00717 
00718         //--- Animation clip properties -----------------------------------------------------------------------------------------------------
00719         FBPropertyDouble                                        Scale;                          
00720         FBPropertyVector3d                                      Translation;            
00721         FBPropertyVector3d                                      Rotation;                       
00722         FBPropertyVector3d                                      LoopTranslation;        
00723         FBPropertyBool                                          AutoLoop;                       
00724         FBPropertyBool                                          Loop;                           
00725         FBPropertyBool                                          Ghost;                          
00726         FBPropertyBool                                          GhostModel;                     
00727         FBPropertyBool                                          GhostTravelling;        
00728         FBPropertyBool                                          GhostPivot;                     
00729         FBPropertyStoryClipShowGhostMode        ShowGhostClipMode;      
00730         FBPropertyAnimationNode                         PreBlendData;           
00731         FBPropertyAnimationNode                         PostBlendData;          
00732         FBPropertyListPivot                                     Pivots;                         
00733         FBPropertyBool                                          Loaded;                         
00734 
00735         //--- Character clip properties -----------------------------------------------------------------------------------------------------
00736         FBPropertyStoryClipSolveMode            SolvingMode;            
00737 private:
00738         void FBStoryClipInitProperties();
00739 };
00740 
00741 #ifdef FBSDKUseNamespace
00742         }
00743 #endif
00744 #endif /* this must be the last line of this file */