fbsdk/fboptical.h Source File
 
 
 
fbsdk/fboptical.h
Go to the documentation of this file.
00001 #ifndef __FBOPTICAL_H__
00002 #define __FBOPTICAL_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 #ifndef FB_KERNEL
00052 
00053 #include <fbsdk/fbcomponent.h>
00054 #include <fbsdk/fbmodel.h>
00055 
00056 #ifdef FBSDKUseNamespace
00057 namespace FBSDKNamespace {
00058 #endif
00059 
00060     __FB_FORWARD( FBModelOptical );
00061 
00062     FB_DEFINE_COMPONENT( FBSDK_DLL, ModelOptical                        );
00063     FB_DEFINE_COMPONENT( FBSDK_DLL, ModelMarkerOptical  );
00064     FB_DEFINE_COMPONENT( FBSDK_DLL, RigidBody                   );
00065     FB_DEFINE_COMPONENT( FBSDK_DLL, Take );
00066 
00068     // FBOpticalSegement
00070     __FB_FORWARD( FBOpticalSegment );
00072     class FBSDK_DLL FBOpticalSegment : public FBComponent
00073     {
00074         __FBClassDeclare( FBOpticalSegment, FBComponent );
00075     public:
00079         FBOpticalSegment(FBModelOptical* pOptical=NULL);
00080 
00084         FBOpticalSegment( const FBOpticalSegment &pSegment );
00085 
00090         bool operator==(const FBOpticalSegment &pValue) const;
00091 
00096         FBOpticalSegment& operator=(const FBOpticalSegment& pValue);
00097 
00100         virtual void Reset();
00101 
00105         virtual void Cut( FBTime& pTime );
00106 
00110         virtual bool IsValid();
00111 
00112         // original
00113         FBPropertyTimeSpan                              OriginalTimeSpan;       
00114         FBPropertyTimeSpan                              TimeSpan;                       
00115         FBPropertyAnimationNode                 Data;                           
00116         FBPropertyBool                                  Used;                           
00117 
00118         // from marker
00119         FBPropertyModelMarkerOptical    Marker;                         
00120         FBPropertyTimeSpan                              MarkerTimeSpan;         
00121 
00122         friend class FBPropertyListOpticalSegment;
00123         friend class FBPropertyListMarkerSegment;
00124 
00125     private:
00126         void FBOpticalSegmentInitProperties();
00127     };
00128     FB_DEFINE_COMPONENT ( FBSDK_DLL, OpticalSegment );
00129     FB_DEFINE_ARRAY             ( FBSDK_DLL, OpticalSegment );
00130     FB_DEFINE_LIST              ( FBSDK_DLL, OpticalSegment );
00131 
00133     // FBPropertyListMarkerSegment
00135     FB_FORWARD( FBPropertyListMarkerSegment );
00136 
00138     class FBSDK_DLL FBPropertyListMarkerSegment : public FBPropertyBaseList< FBOpticalSegment >
00139     {
00140     private:
00141         FBArrayTemplate< FBOpticalSegment* > mItems;
00142         virtual int Add( FBOpticalSegment pItem );
00143         virtual void Refresh();
00144     public:
00145         FBPropertyListMarkerSegment();
00146         virtual ~FBPropertyListMarkerSegment();
00150         virtual void RemoveAt ( int pIndex );
00151 
00156         virtual FBOpticalSegment operator[]( int pIndex );
00157 
00161         virtual int GetCount();
00162 
00167         virtual int GetIndexAt( FBTime& pTime );
00168     };
00169 
00171     // FBPropertyListOpticalSegment
00173     FB_FORWARD( FBPropertyListOpticalSegment );
00174     FB_DEFINE_LIST( FBSDK_DLL, OpticalSegment );
00175 
00177     class FBSDK_DLL FBPropertyListOpticalSegment : public FBPropertyBaseList< FBOpticalSegment >
00178     {
00179     private:
00180         FBArrayTemplate< FBOpticalSegment* > mItems;
00181         virtual int Add( FBOpticalSegment pItem );
00182         virtual void Refresh();
00183     public:
00184         FBPropertyListOpticalSegment();
00185         virtual ~FBPropertyListOpticalSegment();
00189         virtual void RemoveAt( int pIndex );
00190 
00195         virtual FBOpticalSegment operator[]( int pIndex );
00196 
00200         virtual int GetCount();
00201 
00206         virtual int Add( FBAnimationNode* pData );
00207     };
00208 
00210     // Gap mode
00213     enum FBGapMode      {
00214         kFBGapRigidBody,        
00215         kFBGapConstant,         
00216         kFBGapLinear,           
00217         kFBGapBezier,           
00218         kFBGapCurve,            
00219         kFBGapSample            
00220     };
00221     FB_DEFINE_ENUM( FBSDK_DLL, GapMode );
00222 
00224     // FBOpticalGap
00226     __FB_FORWARD( FBOpticalGap );
00228     class FBSDK_DLL FBOpticalGap : public FBComponent
00229     {
00230         __FBClassDeclare( FBOpticalGap, FBComponent );
00231     public:
00235         FBOpticalGap(FBModelMarkerOptical* pMarker=NULL);
00236 
00240         FBOpticalGap(const FBOpticalGap& pGap);
00241 
00246         bool operator==(const FBOpticalGap &pValue) const;
00247 
00252         FBOpticalGap& operator=(const FBOpticalGap& pValue);
00253 
00257         virtual void InsertControlKey( FBTime& pTime );
00258 
00262         virtual bool IsValid();
00263 
00264         FBPropertyTimeSpan                      TimeSpan;                       
00265         FBPropertyGapMode                       Interpolation;          
00266         FBPropertyAnimationNode         Data;                           
00267 
00268         friend class FBPropertyListOpticalGap;
00269 
00270     private:
00271         void FBOpticalGapInitProperties();
00272     };
00273     FB_DEFINE_COMPONENT ( FBSDK_DLL, OpticalGap );
00274     FB_DEFINE_ARRAY             ( FBSDK_DLL, OpticalGap );
00275     FB_DEFINE_LIST              ( FBSDK_DLL, OpticalGap );
00276 
00278     // FBPropertyListOpticalGap
00280     FB_FORWARD( FBPropertyListOpticalGap );
00281 
00283     class FBSDK_DLL FBPropertyListOpticalGap : public FBPropertyBaseList< FBOpticalGap >
00284     {
00285     private:
00286         FBArrayTemplate< FBOpticalGap* > mItems;
00287         virtual int             Add( FBOpticalGap pItem );
00288         virtual void    RemoveAt( int pIndex );
00289         virtual void    Refresh();
00290     public:
00291         FBPropertyListOpticalGap();
00292         virtual ~FBPropertyListOpticalGap();
00297         virtual FBOpticalGap operator[]( int pIndex );
00298 
00302         virtual int GetCount();
00303     };
00304 
00306     // FBModelMarkerOptical
00308     __FB_FORWARD( FBModelMarkerOptical);
00310     class FBSDK_DLL FBModelMarkerOptical : public FBModelMarker 
00311     {
00312         __FBClassDeclare( FBModelMarkerOptical,FBModelMarker );
00313     public:
00320         FBModelMarkerOptical(const char *pName = NULL, FBModelOptical* pOptical=NULL, HIObject pObject=NULL );
00321 
00327         virtual int ImportBegin();
00328 
00336         virtual bool ImportKey( double pX, double pY, double pZ=0.0, double pOcclusion=0.0 );
00337 
00342         virtual bool ImportEnd();
00343 
00349         virtual int  ExportBegin();
00350 
00358         virtual bool ExportKey( double *pX, double *pY, double *pZ=NULL, double *pOcclusion=NULL );
00359 
00363         virtual bool ExportEnd();
00364 
00368         virtual void SetModelOptical( FBModelOptical* pOptical );
00369 
00374         virtual void InsertSegmentedData( FBAnimationNode* pTData, FBAnimationNode* pOData );
00375 
00379         virtual FBRigidBody     GetRigidBody();
00380 
00381         FBPropertyModelOptical                  Optical;                
00382         FBPropertyListMarkerSegment             Segments;               
00383         FBPropertyListOpticalGap                Gaps;                   
00384         FBPropertyColor                                 Color;                  
00385         FBPropertyBool                                  Done;                   
00386         FBPropertyAnimationNode                 Data;                   
00387     private:
00388         void FBModelMarkerOpticalInitProperties();
00389     };
00390     FB_DEFINE_ARRAY     ( FBSDK_DLL, ModelMarkerOptical );
00391     FB_DEFINE_LIST      ( FBSDK_DLL, ModelMarkerOptical );
00392 
00394     // FBPropertyListModelMarkerOptical
00396     FB_FORWARD( FBPropertyListModelMarkerOptical );
00397 
00399     class FBSDK_DLL FBPropertyListModelMarkerOptical : public FBPropertyBaseList< FBModelMarkerOptical* >
00400     {
00401     private:
00402         FBArrayTemplate< FBModelMarkerOptical* > mItems;
00403     public:
00404         FBPropertyListModelMarkerOptical();
00405         virtual ~FBPropertyListModelMarkerOptical();
00407         virtual void Refresh ();
00408 
00412         virtual void RemoveAt( int pIndex );
00413 
00418         virtual FBModelMarkerOptical* operator[]( int pIndex );
00419 
00423         virtual int GetCount ();
00424 
00428         virtual int Add( const char* pName = NULL );
00429 
00433         virtual int     Add( FBModelMarkerOptical* pItem );
00434     };
00435 
00437     // FBPropertyListRigidBodyMarkers
00439     FB_FORWARD( FBPropertyListRigidBodyMarkers );
00440     FB_DEFINE_LIST( FBSDK_DLL, ModelMarkerOptical );
00441 
00443     class FBSDK_DLL FBPropertyListRigidBodyMarkers : public FBPropertyBaseList< FBModelMarkerOptical* >
00444     {
00445     private:
00446         FBArrayTemplate< FBModelMarkerOptical* > mItems;
00447     public:
00448         FBPropertyListRigidBodyMarkers();
00449         virtual ~FBPropertyListRigidBodyMarkers();
00451         virtual void Refresh();
00452 
00456         virtual void RemoveAt( int pIndex );
00457 
00462         virtual FBModelMarkerOptical* operator[]( int pIndex );
00463 
00467         virtual int GetCount ();
00468 
00469     public:
00473         virtual int Add( const char* pName = NULL );
00478         virtual int     Add( FBModelMarkerOptical* pItem );
00479     };
00480 
00482     // Rigid body mode
00485     enum FBRigidBodyMode {
00486         kFBRigidBodyFast,       
00487         kFBRigidBodyBest        
00488     };
00489     FB_DEFINE_ENUM( FBSDK_DLL, RigidBodyMode );
00490 
00492     // FBRigidBody
00494     __FB_FORWARD( FBRigidBody );
00496     class FBSDK_DLL FBRigidBody : public FBComponent
00497     {
00498         __FBClassDeclare( FBRigidBody, FBComponent );
00499     public:
00503         FBRigidBody(FBModelOptical* pOptical=NULL);
00504 
00508         FBRigidBody( const FBRigidBody &pRigidBody );
00509 
00514         bool operator==(const FBRigidBody &pValue) const;
00515 
00520         FBRigidBody& operator=(const FBRigidBody& pValue);
00521 
00524         virtual void Snap();
00525 
00528         virtual void ComputeAnimation();
00529 
00533         virtual bool IsValid();
00534 
00535         FBPropertyListRigidBodyMarkers          Markers;                
00536         FBPropertyModel                                         Model;                  
00537         FBPropertyAnimationNode                         QualityData;    
00538         FBPropertyBool                                          Done;                   
00539         FBPropertyRigidBodyMode                         Mode;                   
00540         FBPropertyInt                                           SmoothWidth;    
00541 
00542         friend class FBPropertyListRigidBody;
00543     private:
00544         void FBRigidBodyInitProperties();
00545 
00546     };
00547     FB_DEFINE_ARRAY     ( FBSDK_DLL, RigidBody  );
00548     FB_DEFINE_LIST      ( FBSDK_DLL, RigidBody );
00549 
00551     // FBPropertyListRigidBody
00553     FB_FORWARD( FBPropertyListRigidBody );
00554 
00556     class FBSDK_DLL FBPropertyListRigidBody : public FBPropertyBaseList< FBRigidBody >
00557     {
00558     private:
00559         FBArrayTemplate< FBRigidBody* > mItems;
00560         virtual int             Add             ( FBRigidBody pItem );
00561         virtual void    Refresh ();
00562     public:
00563         FBPropertyListRigidBody();
00564         virtual ~FBPropertyListRigidBody();
00568         virtual void RemoveAt( int pIndex );
00569 
00574         virtual FBRigidBody operator[]( int pIndex );
00575 
00579         virtual int GetCount();
00580 
00586         virtual int Add( FBModelList& pList, const char* pName=NULL);
00587     };
00588 
00590     // FBModelOptical
00592     __FB_FORWARD( FBModelOptical );
00594     class FBSDK_DLL FBModelOptical : public FBModel 
00595     {
00596         __FBClassDeclare( FBModelOptical,FBModel );
00597     public:
00602         FBModelOptical(const char * pName, HIObject pObject=NULL);
00603 
00607         virtual bool ImportSetup();
00608 
00612         virtual bool ExportSetup();
00613 
00617         virtual void ClearSegments( bool pUnUsedOnly = true );
00618 
00619         FBPropertyDouble                                        MarkerSize;                     
00620         FBPropertyTime                                          SamplingStart;          
00621         FBPropertyTime                                          SamplingStop;           
00622         FBPropertyTime                                          SamplingPeriod;         
00623 
00624         FBPropertyListModelMarkerOptical        Markers;                        
00625         FBPropertyListOpticalSegment            Segments;                       
00626         FBPropertyListRigidBody                         RigidBodies;            
00627     };
00628 
00629 
00631     // FBPropertyListModelOptical
00633     FB_DEFINE_LIST( FBSDK_DLL, ModelOptical );
00634     FB_FORWARD( FBPropertyListModelOptical );
00635 
00637     class FBSDK_DLL FBPropertyListModelOptical : public FBPropertyListComponent
00638     {
00639     public:
00640         FBPropertyListModelOptical();
00645         FBModelOptical* operator[](int pIndex);
00646     };
00647 
00648 
00650     // FBGenerationMode
00653     enum FBGenerationMode       {
00654         kFBGenerationNone,      
00655         kFBGenerationFast       
00656     };
00657     FB_DEFINE_ENUM( FBSDK_DLL, GenerationMode );
00658 
00660     // FBControllerMode
00663     enum FBControllerMode       {
00664         kFBControllerNone,                      
00665         kFBControllerLabelling,         
00666         kFBControllerSegment,           
00667         kFBControllerRigidBody          
00668     };
00669     FB_DEFINE_ENUM( FBSDK_DLL, ControllerMode );
00670 
00672     // FBSegmentMode
00675     enum FBSegmentMode  {
00676         kFBSegmentMarker,                       
00677         kFBSegmentRigidBody,            
00678         kFBSegmentAll                           
00679     };
00680     FB_DEFINE_ENUM( FBSDK_DLL, SegmentMode );
00681 
00683     // FBInsertSegmentMode
00686     enum FBInsertSegmentMode    {
00687         kFBInsertSegmentWhole,          
00688         kFBInsertSegmentToEnd,          
00689         kFBInsertSegmentFromStart       
00690     };
00691     FB_DEFINE_ENUM( FBSDK_DLL, InsertSegmentMode );
00692 
00694     // FBModelOpticalAdvanced
00696     __FB_FORWARD( FBModelOpticalAdvanced );
00698     class FBSDK_DLL FBModelOpticalAdvanced : public FBComponent
00699     {
00700         __FBClassDeclare( FBModelOpticalAdvanced,FBComponent );
00701     public:
00705         FBModelOpticalAdvanced( FBModelOptical* pOptical );
00706 
00708         virtual void AcceptAllSegments();
00709 
00711         virtual void AcceptSegment();
00712 
00714         virtual void SkipSegment();
00715 
00717         virtual void AutomaticBuild();
00718 
00720         virtual void CropSegmentsAnimation();
00721 
00722         FBPropertyAnimationNode                 Quality;                                
00723         FBPropertyBool                                  ShowRigidQuality;               
00724         FBPropertyGenerationMode                GenerationMode;                 
00725         FBPropertyControllerMode                ControllerMode;                 
00726         FBPropertySegmentMode                   SegmentMode;                    
00727         FBPropertyInsertSegmentMode             InsertSegmentMode;              
00728         FBPropertyBool                                  PlayToNextSegment;              
00729         FBPropertyBool                                  AutoPlayToNextSegment;  
00730         FBPropertyDouble                                MaxMatchDistance;               
00731         FBPropertyBool                                  Active;                                 
00732         FBPropertyTake                                  UsedTake;                               
00733     };
00734 
00736     // FBDeviceOpticalMarker
00738     __FB_FORWARD( FBDeviceOpticalMarker );
00744     class FBSDK_DLL FBDeviceOpticalMarker : public FBComponent {
00745         __FBClassDeclare( FBDeviceOpticalMarker,FBComponent );
00746     public:
00750         FBDeviceOpticalMarker(const char *pName);
00751 
00758         void SetData(double pX, double pY, double pZ=0.0, double pOcclusion=0.0);
00759 
00760         FBPropertyBool                  IsUsed;                 
00761         FBPropertyVector3d              Position;               
00762         FBPropertyDouble                Occlusion;              
00763         FBPropertyModel                 Model;                  
00764     };
00765     FB_DEFINE_ARRAY     ( FBSDK_DLL, DeviceOpticalMarker );
00766     FB_DEFINE_LIST      ( FBSDK_DLL, DeviceOpticalMarker );
00767 
00769     // FBPropertyListDeviceOpticalMarker
00771     FB_FORWARD( FBPropertyListDeviceOpticalMarker );
00772 
00774     class FBSDK_DLL FBPropertyListDeviceOpticalMarker : public FBPropertyBaseList< FBDeviceOpticalMarker* >
00775     {
00776         FBArrayTemplate<FBDeviceOpticalMarker*> mItems;                 
00777         virtual int      Add    ( FBDeviceOpticalMarker* pItem );       
00778     public:
00779         FBPropertyListDeviceOpticalMarker();
00780         virtual ~FBPropertyListDeviceOpticalMarker();
00784         virtual void RemoveAt( int pIndex );
00789         virtual FBDeviceOpticalMarker* operator[](int pIndex);
00793         virtual int GetCount();
00794 
00799         virtual int     Add( const char *pName=NULL );
00800     };
00801 
00803     // FBDeviceOptical
00805     __FB_FORWARD( FBDeviceOptical );
00807     class FBSDK_DLL FBDeviceOptical : public FBDevice 
00808     {
00809         __FBClassDeclare( FBDeviceOptical,FBDevice );
00810     public:
00811         friend class FBDeviceOpticalLayout;
00812         //IObject_Declare                                               ( K_IMPLEMENTATION );
00817         FBDeviceOptical(const char* pName, HIObject pObject=NULL);
00818 
00819         FBPropertyListDeviceOpticalMarker       Markers;                                        
00820         FBPropertyBool                                          SupportOcclusion;                       
00821         FBPropertyBool                                          AutoAntialiasing;                       
00822         FBPropertyDouble                                        DampingTime;                            
00823         FBPropertyModel                                         ModelOptical;                           
00824 
00825         FBPropertyBool                                          ForceOpticalSamplingRate;       
00826         FBPropertyDouble                                        OpticalSamplingRate;            
00827         FBPropertyBool                                          UseMarkerTimeStamp;                     
00828 
00829         FBPropertyBool                                          SkipFrame;                                      
00830         FBPropertyTime                                          MarkerTimeStamp;                        
00831 
00832         //----Does marker management----
00834         void DeviceOpticalBeginSetup();         
00836         void DeviceOpticalEndSetup();           
00837 
00843         virtual void DeviceOpticalEvalAllMarkers(FBDeviceNotifyInfo &pDeviceNotifyInfo);
00844 
00850         virtual void DeviceOpticalRecordFrame(FBTime &pTime,FBDeviceNotifyInfo &pDeviceNotifyInfo);
00851 
00852         //--- See base class ---
00853 
00854         // Standard FBX interface functions
00855         virtual bool FbxStore(FBFbxObject* pFbxObject,kFbxObjectStore pStoreWhat);
00856         virtual bool FbxRetrieve(FBFbxObject* pFbxObject,kFbxObjectStore pStoreWhat);
00857 
00858         // Standard device virtual functions creation/destruction
00859         virtual bool FBCreate();
00860         virtual void FBDestroy();
00861 
00862         // Standard device virtual function device operation notify
00863         virtual bool DeviceOperation( kDeviceOperations pOperation );
00864 
00865         // Standard device virtual functions evaluation
00866         virtual bool AnimationNodeNotify(FBAnimationNode* pAnimationNode,FBEvaluateInfo* pEvaluateInfo);
00867         virtual void DeviceIONotify(kDeviceIOs pAction,FBDeviceNotifyInfo &pDeviceNotifyInfo);
00868 
00869         // Standard device virtual functions recording for animation.
00870         virtual void RecordingInitAnimation(FBAnimationNode* pAnimationNode);
00871         virtual void RecordingDoneAnimation(FBAnimationNode* pAnimationNode);
00872     };
00873 
00874 #ifdef FBSDKUseNamespace
00875 }
00876 #endif
00877 
00878 #endif
00879 #endif