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 */