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>   // FBBox
00053 #include <fbsdk/fbvideo.h>  // FBPropertyVideo
00054 #include <fbsdk/fbmodel.h>  // FBPropertyCamera
00055 
00056 
00057 #ifdef FBSDKUseNamespace
00058     namespace FBSDKNamespace {
00059 #endif
00060 
00061 __FB_FORWARD( FBStory );
00062 __FB_FORWARD( FBStoryFolder );
00063 __FB_FORWARD( FBStoryTrack );
00064 __FB_FORWARD( FBStoryClip );
00065 FB_DEFINE_COMPONENT( FBSDK_DLL, Story );
00066 FB_DEFINE_COMPONENT( FBSDK_DLL, StoryFolder );
00067 FB_DEFINE_COMPONENT( FBSDK_DLL, StoryTrack );
00068 FB_DEFINE_COMPONENT( FBSDK_DLL, StoryClip );
00069 FB_DEFINE_COMPONENT( FBSDK_DLL, AnimationNode );
00070 FB_DEFINE_COMPONENT( FBSDK_DLL, Video );
00071 FB_DEFINE_COMPONENT( FBSDK_DLL, AudioClip );
00072 
00074 enum FBStoryTrackType {
00075     kFBStoryTrackAnimation,     
00076     kFBStoryTrackCamera,        
00077     kFBStoryTrackCharacter,     
00078     kFBStoryTrackConstraint,    
00079     kFBStoryTrackCommand,       
00080     kFBStoryTrackShot,          
00081     kFBStoryTrackAudio,         
00082     kFBStoryTrackVideo          
00083 };
00084 
00086 enum FBStoryTrackRefMode {
00087     kFBStoryTrackOverride,  
00088     kFBStoryTrackAdditive   
00089 };
00090 
00092 enum FBStoryTrackBodyPart {
00093     kFBStoryTrackBodyPartNone = 0,
00094 
00095     kFBStoryTrackBodyPartHead           = 1 << 0,
00096 
00097     kFBStoryTrackBodyPartLeftShoulder   = 1 << 1,
00098     kFBStoryTrackBodyPartLeftHand       = 1 << 2,
00099     kFBStoryTrackBodyPartLeftArm        = 1 << 3 | kFBStoryTrackBodyPartLeftShoulder | kFBStoryTrackBodyPartLeftHand,
00100     kFBStoryTrackBodyPartRightShoulder  = 1 << 4,
00101     kFBStoryTrackBodyPartRightHand      = 1 << 5,
00102     kFBStoryTrackBodyPartRightArm       = 1 << 6 | kFBStoryTrackBodyPartRightShoulder | kFBStoryTrackBodyPartRightHand,
00103 
00104     kFBStoryTrackBodyPartUpperBody      = kFBStoryTrackBodyPartHead | 
00105                                           kFBStoryTrackBodyPartLeftArm | kFBStoryTrackBodyPartLeftShoulder | kFBStoryTrackBodyPartLeftHand |
00106                                           kFBStoryTrackBodyPartRightArm | kFBStoryTrackBodyPartRightShoulder | kFBStoryTrackBodyPartRightHand,
00107 
00108     kFBStoryTrackBodyPartLeftFoot       = 1 << 7,
00109     kFBStoryTrackBodyPartLeftLeg        = 1 << 8 | kFBStoryTrackBodyPartLeftFoot,
00110     kFBStoryTrackBodyPartRightFoot      = 1 << 9,
00111     kFBStoryTrackBodyPartRightLeg       = 1 << 10| kFBStoryTrackBodyPartRightFoot,
00112 
00113     kFBStoryTrackBodyPartLowerBody      = kFBStoryTrackBodyPartLeftLeg | kFBStoryTrackBodyPartLeftFoot | kFBStoryTrackBodyPartRightLeg | kFBStoryTrackBodyPartRightFoot,
00114 
00115     kFBStoryTrackBodyPartAll            = kFBStoryTrackBodyPartUpperBody | kFBStoryTrackBodyPartLowerBody,
00116 
00117     kFBStoryTrackBodyPartProps          = 1 << 11,
00118     kFBStoryTrackBodyPartExtensions     = 1 << 12
00119 };
00120 
00122 enum FBStoryClipShowGhostMode {
00123     kFBStoryClipAlways,     
00124     kFBStoryClipTimeCursor  
00125 };
00126 
00128 enum FBStoryClipSolveMode {
00129     kFBStoryClipRetargetSkeleton,   
00130     kFBStoryClipAnimSkeleton,       
00131     kFBStoryClipAnimFkIk,           
00132     kFBStoryClipAnimSkeletonIk      
00133 };
00134 
00136 enum FBStoryClipCompMode {
00137     kFBStoryClipOff,    
00138     kFBStoryClipAuto,   
00139     kFBStoryClipUser    
00140 };
00141 
00142 FB_DEFINE_ENUM(FBSDK_DLL, StoryTrackType);
00143 FB_DEFINE_ENUM(FBSDK_DLL, StoryTrackRefMode);
00144 FB_DEFINE_ENUM(FBSDK_DLL, StoryClipShowGhostMode);
00145 FB_DEFINE_ENUM(FBSDK_DLL, StoryClipSolveMode);
00146 FB_DEFINE_ENUM(FBSDK_DLL, StoryClipCompMode);
00147 
00148 FB_FORWARD( FBPropertyListStoryFolder );
00150 class FBSDK_DLL FBPropertyListStoryFolder : public FBPropertyListComponentBase
00151 {
00152 public:
00158     virtual int Add(HFBStoryFolder pItem);
00159 
00165     virtual int Remove(HFBStoryFolder pItem);
00166 
00170     virtual void RemoveAt(int pIndex);
00171 
00176     virtual HFBStoryFolder operator[](int pIndex);
00177 
00181     virtual int GetCount();
00182 
00183 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00184     inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00185 private:
00186     inline virtual int Add  ( FBComponent* pItem ) { return Add((FBStoryFolder*)pItem); }
00187 #endif
00188 };
00189 
00190 FB_FORWARD( FBPropertyListStoryTrack );
00192 class FBSDK_DLL FBPropertyListStoryTrack : public FBPropertyListComponentBase
00193 {
00194 public:
00200     virtual int Add(HFBStoryTrack pItem);
00201 
00207     virtual int Remove(HFBStoryTrack pItem);
00208 
00212     virtual void RemoveAt(int pIndex);
00213 
00218     virtual HFBStoryTrack operator[](int pIndex);
00219 
00223     virtual int GetCount();
00224 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00225     inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00226 private:
00227     inline virtual int Add  ( FBComponent* pItem ) { return Add((FBStoryTrack*)pItem); }
00228 #endif
00229 };
00230 
00231 FB_FORWARD( FBPropertyListStorySubTrack );
00233 class FBSDK_DLL FBPropertyListStorySubTrack : public FBPropertyListComponentBase
00234 {
00235 public:
00241     virtual int Add(HFBStoryTrack pItem);
00242 
00248     virtual int Remove(HFBStoryTrack pItem);
00249 
00253     virtual void RemoveAt(int pIndex);
00254 
00259     virtual HFBStoryTrack operator[](int pIndex);
00260 
00264     virtual int GetCount();
00265 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00266     inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00267 private:
00268     inline virtual int Add  ( FBComponent* pItem ) { return Add((FBStoryTrack*)pItem); }
00269 #endif
00270 };
00271 
00272 FB_FORWARD( FBPropertyListStoryClip );
00274 class FBSDK_DLL FBPropertyListStoryClip : public FBPropertyListComponentBase
00275 {
00276 public:
00281     virtual int Add(HFBStoryClip pItem);
00282 
00287     virtual int Remove(HFBStoryClip pItem);
00288 
00292     virtual void RemoveAt(int pIndex);
00293 
00298     virtual HFBStoryClip operator[](int pIndex);
00299 
00303     virtual int GetCount();
00304 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00305     inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00306 private:
00307     inline virtual int Add  ( FBComponent* pItem ) { return Add((FBStoryClip*)pItem); }
00308 #endif
00309 };
00310 
00311 FB_FORWARD( FBPropertyListStoryDetails );
00313 class FBSDK_DLL FBPropertyListStoryDetails : public FBPropertyListComponentBase
00314 {
00315 public:
00320     virtual int Add(FBComponent* pItem);
00321 
00326     virtual int Remove(FBComponent* pItem);
00327 
00331     virtual void RemoveAt(int pIndex);
00332 
00337     virtual FBComponent* operator[](int pIndex);
00338 
00342     virtual int GetCount();
00343 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00344     inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00345 #endif
00346 };
00347 
00348 FB_FORWARD( FBPropertyListPivot );
00350 class FBSDK_DLL FBPropertyListPivot : public FBPropertyListComponentBase
00351 {
00352 public:
00357     virtual int Add(FBModel* pItem);
00358 
00363     virtual int Remove(FBModel* pItem);
00364 
00368     virtual void RemoveAt(int pIndex);
00369 
00374     virtual FBModel* operator[](int pIndex);
00375 
00379     virtual int GetCount();
00380 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00381     inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00382 private:
00383     inline virtual int Add  ( FBComponent* pItem ) { return Add((FBModel*)pItem); }
00384 #endif
00385 };
00386 
00388 // FBStory
00390 
00393 class FBSDK_DLL FBStory : public FBComponent 
00394 {
00395     //--- Open Reality declaration.
00396     __FBClassDeclare(FBStory, FBComponent);
00397 
00400     FBStory();
00401 
00402 public:
00403 
00404     FBPropertyBool          Mute;                       
00405     FBPropertyBool          LockedShot;                 
00406     FBPropertyBool          SummaryClip;                
00407     FBPropertyBool          RecordToDisk;               
00408     FBPropertyBool          NoneBlockingPostprocess;    
00409     FBPropertyStoryFolder   RootFolder;                 
00410     FBPropertyStoryFolder   RootEditFolder;             
00411 
00415     static FBStory& TheOne();
00416 
00417 };
00418 
00420 // FBStoryFolder
00422 
00425 class FBSDK_DLL FBStoryFolder : public FBComponent
00426 {
00427     //--- Open Reality declaration.
00428     __FBClassDeclare(FBStoryFolder, FBComponent);
00429 public:
00430 
00436     FBStoryFolder(HFBStoryFolder pParentFolder=NULL, HIObject pObject=NULL);
00437 
00440     virtual void FBDelete();
00441 
00445     void Load(bool pLoad);
00446 
00447     FBPropertyString            Label;              
00448     FBPropertyBool              Solo;               
00449     FBPropertyBool              Mute;               
00450     FBPropertyString            RecordClipPath;     
00451     FBPropertyStoryFolder       Parent;             
00452     FBPropertyListStoryFolder   Childs;             
00453     FBPropertyListStoryTrack    Tracks;             
00454 };
00455 
00457 // FBStoryTrack
00459 
00462 class FBSDK_DLL FBStoryTrack : public FBConstraint
00463 {
00464     //--- Open Reality declaration.
00465     __FBClassDeclare(FBStoryTrack, FBConstraint);
00466 public:
00467 
00473     FBStoryTrack(FBStoryTrackType pTrackType, HFBStoryFolder pFolder=NULL, HIObject pObject=NULL);
00474 
00480     FBStoryTrack(FBComponent* pSource, HFBStoryFolder pFolder=NULL, HIObject pObject=NULL);
00481 
00484     virtual void FBDelete();
00485 
00489     void ChangeDetailsBegin();
00490 
00494     void ChangeDetailsEnd();
00495 
00496     //--- Animation track functions -----------------------------------------------------------------------------------------------------
00505     FBStoryClip* CopyTakeIntoTrack(FBTimeSpan& pTimeSpan, FBTake* pTake, FBTime pOutputOffset = 0, bool pMakeUndoable = false);
00506 
00507     //--- Character track functions -----------------------------------------------------------------------------------------------------
00513     void EnableBodyPart(FBStoryTrackBodyPart pPart, bool pEnable);
00514 
00518     bool IsBodyPartEnabled(FBStoryTrackBodyPart pPart);
00519 
00523     void AddClip(FBComponent* pClip, FBTime pTime);
00524 
00528     void Load(bool pLoad);
00529 
00530     //--- All track properties ----------------------------------------------------------------------------------------------------------
00531     FBPropertyStoryTrackType    Type;           
00532     FBPropertyString            Label;          
00533     FBPropertyBool              Mute;           
00534     FBPropertyBool              Solo;           
00535     FBPropertyString            RecordClipPath; 
00536     FBPropertyString            ClipNameConvention;
00537     FBPropertyBool              RecordTrack;    
00538     FBPropertyStoryFolder       ParentFolder;   
00539     FBPropertyStoryTrack        ParentTrack;    
00540     FBPropertyListStorySubTrack SubTracks;      
00541     FBPropertyListStoryClip     Clips;          
00542     FBPropertyListStoryDetails  Details;        
00543 
00544     //--- Animation and Constraint track properties -------------------------------------------------------------------------------------
00545     FBPropertyAnimatableDouble  Weight;         
00546 
00547     //--- Animation track properties ----------------------------------------------------------------------------------------------------
00548     FBPropertyBool              Ghost;          
00549     FBPropertyBool              GhostModel;     
00550     FBPropertyBool              GhostTravelling;
00551     FBPropertyBool              GhostPivot;     
00552     FBPropertyBool              AcceptKey;      
00553     FBPropertyStoryTrackRefMode ReferenceMode;  
00554     FBPropertyBool              OffsetEnable;   
00555     FBPropertyBool              PassThrough;    
00556 
00557     //--- Character track properties ----------------------------------------------------------------------------------------------------
00558     FBPropertyCharacter         Character;      
00559     FBPropertyInt               CharacterIndex; 
00560 
00561     //--- Shot track properties ---------------------------------------------------------------------------------------------------------
00562     FBPropertyBool              ShowBackplate;  
00563     FBPropertyBool              ShowFrontplate; 
00564 
00565     //--- Audio track properties --------------------------------------------------------------------------------------------------------
00566     FBPropertyInt               AudioOutIndex;  
00567 
00568     //--- Video track properties --------------------------------------------------------------------------------------------------------
00569     FBPropertyVideo             TrackVideo;     
00570 private:
00571     void FBStoryTrackInitProperties();
00572 };
00573 
00575 // FBStoryClip
00577 
00580 class FBSDK_DLL FBStoryClip : public FBComponent
00581 {
00582     //--- Open Reality declaration.
00583     __FBClassDeclare(FBStoryClip, FBComponent);
00584 public:
00585 
00592     FBStoryClip(FBComponent* pClipObject, HFBStoryTrack pTrack, FBTime pTime, HIObject pObject=NULL);
00593 
00600     FBStoryClip(const char* pFilePath, HFBStoryTrack pTrack, FBTime pTime, HIObject pObject=NULL);
00601 
00604     virtual void FBDelete();
00605 
00608     HFBStoryClip Clone();
00609 
00616     FBTime Move(FBTime pDelta, bool pForce=true);
00617 
00624     FBTime MoveTo(FBTime pTime, bool pForce=true);
00625 
00631     HFBStoryClip Razor(FBTime pTime);
00632 
00633     //--- Animation clip functions ------------------------------------------------------------------------------------------------------
00637     void Match();
00638 
00644     bool ExportToFile(FBString pOutputFile);
00645 
00653     void GetAffectedObjects( FBArrayTemplate<FBComponent*>* pAffectedObjects );
00654 
00663     void GetAffectedAnimationNodes( FBArrayTemplate<FBAnimationNode*>* pAffectedAnimationNodes, FBComponent* pClipObject );
00664 
00665 
00666     //--- All clip properties -----------------------------------------------------------------------------------------------------------
00667     FBPropertyColor     Color;          
00668     FBPropertyTime      Start;          
00669     FBPropertyTime      Stop;           
00670     FBPropertyTime      MarkIn;         
00671     FBPropertyTime      MarkOut;        
00672     FBPropertyTimeSpan  PreBlend;       
00673     FBPropertyTimeSpan  PostBlend;      
00674     FBPropertyTime      Offset;         
00675     FBPropertyDouble    Speed;          
00676 
00677     //--- Shot clip properties ----------------------------------------------------------------------------------------------------------
00678     FBPropertyCamera    ShotCamera;             
00679     FBPropertyVideo     ShotBackplate;          
00680     FBPropertyVideo     ShotFrontplate;         
00681     FBPropertyBool      ShowBackplate;          
00682     FBPropertyBool      ShowFrontplate;         
00683     FBPropertyTime      ShotActionStart;        
00684     FBPropertyTime      ShotActionStop;         
00685 
00686     //--- Audio clip properties ---------------------------------------------------------------------------------------------------------
00687     FBPropertyAudioClip AudioClip;              
00688 
00689     //--- Animation clip properties -----------------------------------------------------------------------------------------------------
00690     FBPropertyDouble                    Scale;              
00691     FBPropertyVector3d                  Translation;        
00692     FBPropertyVector3d                  Rotation;           
00693     FBPropertyVector3d                  LoopTranslation;    
00694     FBPropertyBool                      AutoLoop;           
00695     FBPropertyBool                      Loop;               
00696     FBPropertyBool                      Ghost;              
00697     FBPropertyBool                      GhostModel;         
00698     FBPropertyBool                      GhostTravelling;    
00699     FBPropertyBool                      GhostPivot;         
00700     FBPropertyStoryClipShowGhostMode    ShowGhostClipMode;  
00701     FBPropertyAnimationNode             PreBlendData;       
00702     FBPropertyAnimationNode             PostBlendData;      
00703     FBPropertyListPivot                 Pivots;             
00704     FBPropertyBool                      Loaded;             
00705 
00706     //--- Character clip properties -----------------------------------------------------------------------------------------------------
00707     FBPropertyStoryClipSolveMode        SolvingMode;        
00708 private:
00709     void FBStoryClipInitProperties();
00710 };
00711 
00712 #ifdef FBSDKUseNamespace
00713     }
00714 #endif
00715 #endif /* this must be the last line of this file */