fbsdk/fbmodel.h Source File
 
 
 
fbsdk/fbmodel.h
Go to the documentation of this file.
00001 #ifndef __FBMODEL_H__
00002 #define __FBMODEL_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/fbcore.h>
00052 #include <fbsdk/fbcomponent.h>
00053 #include <fbsdk/fbshader.h>    // FBPropertyListShader
00054 #include <fbsdk/fbtexture.h>
00055 #include <fbsdk/fbgeometry.h>
00056 #include <fbsdk/fbmaterial.h>
00057 #include <fbsdk/fbtexture.h>
00058 
00059 #ifdef FBSDKUseNamespace
00060 namespace FBSDKNamespace {
00061 #endif
00062 
00066 #define FBStorableCustomModelImplementation(ClassName, Desc)\
00067     const char* ClassName::FbxGetObjectSubType(){ return #ClassName; }\
00068     HIObject RegisterStorable##ClassName##Create(HIObject /*pOwner*/, const char* pName, void* /*pData*/){\
00069     ClassName* Class = new ClassName(pName);\
00070     Class->mAllocated = true;\
00071     if( Class->FBCreate() ){\
00072     __FBRemoveModelFromScene( Class->GetHIObject() ); /* Hack in MoBu2013, we shouldn't add object to the scene/entity automatically*/\
00073     return Class->GetHIObject();\
00074     } else {\
00075     delete Class;\
00076     return NULL;}}\
00077     FBLibraryModule(ClassName##Storable){\
00078     FBString lGroup = "FbxStorable/Model";\
00079     FBRegisterObject(ClassName##R2, lGroup, #ClassName, Desc, RegisterStorable##ClassName##Create, true, NULL);\
00080     FBSetStoreableCustomModelRegistered();}\
00081 
00082 
00083     typedef class FBSDK_DLL FBArrayTemplate<FBModel*> FBModelList;
00084 
00085     FB_DEFINE_COMPONENT( FBSDK_DLL, Model            );
00086     FB_DEFINE_COMPONENT( FBSDK_DLL, Cluster          );
00087     FB_DEFINE_COMPONENT( FBSDK_DLL, ModelVertexData  );
00088     FB_DEFINE_COMPONENT( FBSDK_DLL, PointCacheFile   );
00089 
00093     FBSDK_DLL void FBModelTransactionBegin();
00094 
00098     FBSDK_DLL void FBModelTransactionEnd();
00099 
00101     // FBPropertyListModel
00103     __FB_FORWARD( FBModel ); 
00104     __FB_FORWARD( FBPropertyListModel );
00105     FB_DEFINE_LIST( FBSDK_DLL, Model );
00106 
00108     class FBSDK_DLL FBPropertyListModel : public FBPropertyListComponentBase
00109     {
00110     public:
00115         int     Add    ( FBModel* pItem );
00116 
00121         int  Remove    ( FBModel* pItem );
00122 
00126         virtual void RemoveAt( int pIndex );
00127 
00132         FBModel* operator[](int pIndex);
00133 
00137         virtual int  GetCount();
00138 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00139         inline virtual FBComponent* GetAt(int pIndex) { return (FBComponent*)operator[](pIndex); }
00140     private:
00141         inline virtual int Add    ( FBComponent* pItem ) { return Add((FBModel*)pItem); }
00142         inline virtual int Remove    ( FBComponent* pItem ) { return Remove((FBModel*)pItem); }
00143 #endif
00144     };
00145 
00147     // FBPropertyListDeformer
00150     __FB_FORWARD( FBDeformer );
00151 
00152     class FBSDK_DLL FBPropertyListDeformer : public FBPropertyListComponent
00153     {
00154     public:
00155         FBPropertyListDeformer();
00162         virtual int Add( FBDeformer* pItem );
00167         FBDeformer* operator[](int pIndex);
00168 
00169     private:
00170         inline virtual int Add    ( FBComponent* pItem ) { return Add((FBDeformer*)pItem); }
00171     };
00172 
00174     // FBModel
00176     __FB_FORWARD( FBModel        );
00177 
00179     enum FBModelTransformationType {   
00180         kModelTransformation,                   
00181         kModelRotation,                         
00182         kModelTranslation,                      
00183         kModelScaling,                          
00184         kModelTransformation_Geometry,          
00185         kModelInverse_Transformation,           
00186         kModelInverse_Rotation,                 
00187         kModelInverse_Translation,              
00188         kModelInverse_Scaling,                  
00189         kModelInverse_Transformation_Geometry   
00190     };
00191 
00193     enum FBModelShadingMode {    
00194         kFBModelShadingDefault,         
00195         kFBModelShadingWire,            
00196         kFBModelShadingFlat,            
00197         kFBModelShadingLight,           
00198         kFBModelShadingHard,            
00199         kFBModelShadingTexture,         
00200         kFBModelShadingAll,             
00201     };
00202 
00204     enum FBModelRenderPass {    
00205         kFBModelRenderPassStandard,     
00206         kFBModelRenderPassPick,         
00207     };
00208 
00210     enum FBModelRotationOrder {    
00211         kFBEulerXYZ = 0,    
00212         kFBEulerXZY,        
00213         kFBEulerYZX,        
00214         kFBEulerYXZ,        
00215         kFBEulerZXY,        
00216         kFBEulerZYX,        
00217         kFBSphericXYZ        
00218     };
00219 
00221     enum FBModelCullingMode {
00222         kFBCullingOff,      
00223         kFBCullingOnCCW,    
00224         kFBCullingOnCW      
00225     };
00226 
00227     enum FBModelEvaluationTaskType {
00228         kFBModelEvaluationTranform, 
00229         kFBModelEvaluationBBox,     
00230         kFBModelEvaluationDeform    
00231     };
00232 
00233     FB_DEFINE_ENUM( FBSDK_DLL, ModelShadingMode       ); 
00234     FB_DEFINE_ENUM( FBSDK_DLL, ModelTransformationType);
00235     FB_DEFINE_ENUM( FBSDK_DLL, ModelRotationOrder     ); 
00236 
00237     FB_FORWARD( FBCamera );
00238 
00269     class FBSDK_DLL FBModel : public FBBox 
00270     {
00271         __FBClassDeclareGroup( FBModel,FBBox );
00272     public:
00277         FBModel(const char* pName, HIObject pObject=NULL);
00278         virtual void    FBDelete();
00279 
00280         IQuery_Declare       (K_IMPLEMENTATION);                
00281         ICallback_Declare    (K_IMPLEMENTATION);                
00282 
00283         FBPropertyListModel             Children;               
00284 
00285         FBPropertyListShader            Shaders;                
00286         FBPropertyListMaterial          Materials;              
00287         FBPropertyListTexture           Textures;               
00288         FBPropertyListDeformer          Deformers;              
00289         FBPropertyBool                  Icon3D;                 
00290         FBPropertyBool                  SoftSelected;           
00291         FBPropertyBool                  IsDeformable;           
00292         FBPropertyBool                  IsConstrained;          
00293         FBPropertyBool                  SkeletonDeformable;     
00294         FBPropertyBool                  BlendShapeDeformable;   
00295         FBPropertyBool                  ConstrainDeformable;    
00296         FBPropertyBool                  PointCacheDeformable;   
00297         FBPropertyBool                  PointCacheRecord;       
00298         FBPropertyModel                 Parent;                 
00299         FBPropertyModel                 LookAt;                 
00300         FBPropertyModel                 UpVector;               
00301         FBPropertyGeometry              Geometry;               
00302         FBPropertyInt                   GeometryUpdateId;       
00303         FBPropertyMesh                  TessellatedMesh;        
00304         FBPropertyModelVertexData       ModelVertexData;        
00305         FBPropertyCluster               Cluster;                
00306         FBPropertyScene                 Scene;                  
00307         FBPropertyModelShadingMode      ShadingMode;            
00308         FBPropertyAnimationNode         AnimationNode;          
00309 
00310         FBPropertyModelRotationOrder    RotationOrder;          
00311 
00312         // Limits
00313         FBPropertyBool                  RotationSpaceForLimitOnly; 
00314         FBPropertyBool                  RotationActive;         
00315         FBPropertyVector3d              PreRotation;            
00316         FBPropertyVector3d              PostRotation;           
00317         FBPropertyVector3d              RotationMin;            
00318         FBPropertyVector3d              RotationMax;            
00319         FBPropertyBool                  RotationMinX;           
00320         FBPropertyBool                  RotationMinY;           
00321         FBPropertyBool                  RotationMinZ;           
00322         FBPropertyBool                  RotationMaxX;           
00323         FBPropertyBool                  RotationMaxY;           
00324         FBPropertyBool                  RotationMaxZ;           
00325 
00326         FBPropertyBool                  TranslationActive;      
00327         FBPropertyVector3d              TranslationMin;         
00328         FBPropertyVector3d              TranslationMax;         
00329         FBPropertyBool                  TranslationMinX;        
00330         FBPropertyBool                  TranslationMinY;        
00331         FBPropertyBool                  TranslationMinZ;        
00332         FBPropertyBool                  TranslationMaxX;        
00333         FBPropertyBool                  TranslationMaxY;        
00334         FBPropertyBool                  TranslationMaxZ;        
00335 
00336         // Animatable
00337         FBPropertyAnimatableBool                Visibility;             
00338         FBPropertyBool                  VisibilityInheritance;  
00339         FBPropertyAnimatableVector3d    Translation;            
00340         FBPropertyAnimatableVector3d    Rotation;               
00341         FBPropertyAnimatableVector3d    Scaling;                
00342 
00343         FBPropertyVector3d              GeometricTranslation;   
00344         FBPropertyVector3d              GeometricRotation;      
00345         FBPropertyVector3d              GeometricScaling;       
00346 
00347         FBPropertyBool                  QuaternionInterpolate;  
00348 
00349         FBPropertyBool                  Show;                   
00350         FBPropertyBool                  Pickable;               
00351         FBPropertyBool                  Transformable;          
00352         FBPropertyColor                 UniqueColorId;          
00353 
00354         FBPropertyBool                                  PrimaryVisibility;          
00355         FBPropertyBool                                  CastsShadows;               
00356         FBPropertyBool                                  ReceiveShadows;             
00357 
00362         virtual FBModel* Clone();
00363 
00371         void SetMatrix(FBMatrix pMatrix, FBModelTransformationType pWhat=kModelTransformation,    bool pGlobalInfo=true, bool pPushUndo = false, FBEvaluateInfo* pEvaluateInfo=NULL);
00372 
00379         void GetMatrix(FBMatrix &pMatrix, FBModelTransformationType pWhat=kModelTransformation,    bool pGlobalInfo=true, FBEvaluateInfo* pEvaluateInfo=NULL);
00380 
00388         void SetVector(FBVector3d pVector, FBModelTransformationType pWhat=kModelTranslation,    bool pGlobalInfo=true, bool pPushUndo = false, FBEvaluateInfo* pEvaluateInfo=NULL);
00389 
00396         void GetVector(FBVector3d &pVector,    FBModelTransformationType pWhat=kModelTranslation,    bool pGlobalInfo=true, FBEvaluateInfo* pEvaluateInfo=NULL);
00397 
00403         bool IsEvaluationReady(FBModelEvaluationTaskType pWhat, FBEvaluateInfo* pEvaluateInfo=NULL) const;
00404 
00409                 void MatrixToRotation(FBRVector &pRotation, const FBMatrix &pMatrix);
00410 
00415                 void RotationToMatrix( FBMatrix &pMatrix, const FBRVector &pRotation);
00416                 
00423                 void LRMToDof(FBRVector &pDof, const FBMatrix &pLM);
00424 
00431                 void DofToLRM(FBMatrix &pLM, const FBRVector &pDof);
00432 
00437         void SetSchematicPosition(int pX,int pY);
00438 
00442         void SetSchematicPosition(FBVector2d pVector2d);
00443 
00447         FBVector2d GetSchematicPosition();
00448 
00454         void GetBoundingBox( FBVector3d& pMin, FBVector3d& pMax );
00455 
00466         bool IsVisible(FBEvaluateInfo* pEvaluateInfo = NULL);
00467 
00471         FBModelCullingMode GetCullingMode() const;
00472 
00476         void SetCullingMode(FBModelCullingMode pCullingMode);
00477 
00482         void ForceAlwaysEvaluate();
00483 
00486         bool IsForceAlwaysEvaluate();
00487 
00491         int NoFrustumCullingRequire();
00492 
00496         int NoFrustumCullingRelease();
00497 
00501         bool UseFrustumCulling();
00502 
00506         virtual bool HasCustomDisplay() { return false; }
00507 
00515         virtual void CustomModelDisplay( FBCamera* pCamera, FBModelShadingMode pShadingMode, FBModelRenderPass pRenderPass, float pPickingAreaWidth, float pPickingAreaHeight) {}
00516 
00530         virtual bool CustomModelPicking(    int pNbHits, unsigned int *pSelectBuffer, FBCamera* pCamera, 
00531             int pMouseX,int pMouseY,
00532             FBTVector* pLocalRaySrc, FBTVector* pLocalRayDir,
00533             FBTVector* pWorldRaySrc, FBTVector* pWorldRayDir,
00534             FBMatrix* pGlobalInverseMatrix,
00535             FBTVector* pOutPickedPoint)    { return false; }
00536 
00545         virtual bool ClosestRayIntersection(const FBTVector& pRayOrigin, const FBTVector& pRayEnd, FBTVector& pIntersectPos, FBNormal& pIntersectNormal);
00546 
00550         unsigned char* GetSelectedPoints();
00551 
00555         int GetSelectedPointsCount();
00556 
00571         bool SetAdditionalUniqueColorIDCount(unsigned int pCount);
00572 
00576         unsigned int GetAdditionalUniqueColorIDCount() const;
00577 
00582         FBColor GetAdditionalUniqueColorID(unsigned int pIndex) const;
00583 
00584         /*
00585         * @}
00586         */
00587 
00592         virtual bool FbxStore(FBFbxObject* pFbxObject, kFbxObjectStore pStoreWhat);
00593         virtual bool FbxRetrieve(FBFbxObject* pFbxObject, kFbxObjectStore pStoreWhat);
00594 
00602         void SetupPropertiesForShapes();
00603 
00606         virtual const char*    FbxGetObjectType() override;
00607 
00610         virtual const char*    FbxGetObjectSubType() override;
00611 
00612     };
00613 
00615     // FBModelNull
00617     __FB_FORWARD( FBModelNull);
00618 
00620     class FBSDK_DLL FBModelNull : public FBModel {
00621         __FBClassDeclare( FBModelNull,FBModel );
00622     public:
00627         FBModelNull(const char* pName, HIObject pObject=NULL);
00628 
00629         FBPropertyDouble    Size;    
00630 
00635         virtual bool FbxStore(FBFbxObject* pFbxObject, kFbxObjectStore pStoreWhat);
00636         virtual bool FbxRetrieve(FBFbxObject* pFbxObject, kFbxObjectStore pStoreWhat);
00637 
00640         virtual const char* FbxGetObjectType() override;
00641 
00644         virtual const char* FbxGetObjectSubType() override;
00645     };
00646 
00648     // FBModelRoot
00650     __FB_FORWARD( FBModelRoot);
00651 
00653     class FBSDK_DLL FBModelRoot : public FBModel {
00654         __FBClassDeclare( FBModelRoot,FBModel );
00655     public:
00660         FBModelRoot(const char* pName, HIObject pObject=NULL);
00661 
00662         FBPropertyDouble    Size;    
00663     };
00664 
00666     // FBModelMarker
00668     __FB_FORWARD( FBModelMarker);
00669 
00671     enum FBMarkerResolutionLevel
00672     {
00673         kFBMarkerLowResolution,        
00674         kFBMarkerMediumResolution,    
00675         kFBMarkerHighResolution        
00676     };
00677 
00679     enum FBMarkerLook
00680     {
00681         kFBMarkerLookCube,            
00682         kFBMarkerLookHardCross,        
00683         kFBMarkerLookLightCross,    
00684         kFBMarkerLookSphere,        
00685         kFBMarkerLookCapsule,        
00686         kFBMarkerLookSquare,        
00687         kFBMarkerLookCircle,        
00688         kFBMarkerLookBone,            
00689         kFBMarkerLookStick,            
00690         kFBMarkerLookBox,            
00691         kFBMarkerLookNone,            
00692         kFBMarkerLookRigidGoal,            
00693         kFBMarkerLookRotationGoal,            
00694         kFBMarkerLookAimRollGoal,            
00695     };
00696 
00698     enum FBMarkerType
00699     {
00700         kFBMarkerTypeStandard,        
00701         kFBMarkerTypeOptical,        
00702         kFBMarkerTypeFKEffector,    
00703         kFBMarkerTypeIKEffector        
00704     };
00705 
00706     FB_DEFINE_ENUM( FBSDK_DLL, MarkerResolutionLevel );
00707     FB_DEFINE_ENUM( FBSDK_DLL, MarkerLook );
00708     FB_DEFINE_ENUM( FBSDK_DLL, MarkerType );
00709 
00711     class FBSDK_DLL FBModelMarker : public FBModel {
00712         __FBClassDeclare( FBModelMarker,FBModel );
00713     public:
00718         FBModelMarker(const char* pName, HIObject pObject=NULL);
00719 
00720         FBPropertyDouble    Size;    
00721         FBPropertyDouble    Length;    
00722         FBPropertyMarkerResolutionLevel ResLevel; 
00723         FBPropertyMarkerLook Look;    
00724         FBPropertyMarkerType Type;    
00725         FBPropertyColor        Color;    
00726         FBPropertyVector3d  IKPivot;   
00727         FBPropertyBool      IKSync;    
00728 
00732         void SetFKOpacity(double pValue);
00733 
00738         virtual bool FbxStore(FBFbxObject* pFbxObject, kFbxObjectStore pStoreWhat);
00739         virtual bool FbxRetrieve(FBFbxObject* pFbxObject, kFbxObjectStore pStoreWhat);
00740 
00743         virtual const char* FbxGetObjectType() override;
00744 
00747         virtual const char* FbxGetObjectSubType() override;
00748     };
00749 
00750 
00752     // FBModelSkeleton
00754     __FB_FORWARD( FBModelSkeleton);
00755 
00757     class FBSDK_DLL FBModelSkeleton : public FBModel {
00758         __FBClassDeclare( FBModelSkeleton,FBModel );
00759     public:
00764         FBModelSkeleton(const char* pName, HIObject pObject=NULL);
00765 
00766         FBPropertyDouble    Size;    
00767         FBPropertyColor        Color;    
00768         FBPropertyBool        DrawLink;    
00769 
00774         void GetSkinModelList(FBModelList& pSkinModelList); 
00775     };
00776 
00777 
00779     // FBPropertyListModelSkeleton
00781     FB_DEFINE_LIST( FBSDK_DLL, ModelSkeleton );
00782     FB_FORWARD( FBPropertyListModelSkeleton );
00783 
00785     class FBSDK_DLL FBPropertyListModelSkeleton : public FBPropertyListComponent
00786     {
00787     public:
00788         FBPropertyListModelSkeleton();
00793         FBModelSkeleton* operator[](int pIndex);
00794     };
00795 
00796 
00798     // FBModelCube
00800     __FB_FORWARD( FBModelCube );
00801 
00803     class FBSDK_DLL FBModelCube : public FBModel {
00804         __FBClassDeclare( FBModelCube, FBModel );
00805     public:
00810         FBModelCube(const char* pName, HIObject pObject=NULL);
00811     };
00812 
00814     // FBModelPlane
00816     __FB_FORWARD( FBModelPlane );
00817 
00819     class FBSDK_DLL FBModelPlane : public FBModel {
00820         __FBClassDeclare( FBModelPlane, FBModel );
00821     public:
00826         FBModelPlane(const char* pName, HIObject pObject=NULL);
00827     };
00828 
00829 
00831     // FBCluster
00834     enum FBClusterMode    {
00835         kFBClusterNormalize,            
00836         kFBClusterAdditive,             
00837         kFBClusterTotal100              
00838     };
00839     FB_DEFINE_ENUM( FBSDK_DLL, ClusterMode );
00840 
00841     __FB_FORWARD( FBCluster );
00842 
00846     class FBSDK_DLL FBCluster : public FBComponent {
00847         __FBClassDeclare( FBCluster,FBComponent );
00848 
00849     protected:
00853         FBCluster(FBModel* pModel);
00854         friend class DataFBModel;
00855 
00856     public:
00857 
00858         //--- Cluster-level operations
00863         int ClusterBegin(int pIndex = -1);
00864 
00868         int ClusterEnd();
00869 
00870         //--- Link-level operations
00875         void        LinkSetName(const char *pName, int pLinkNumber);
00880         const char* LinkGetName(int pLinkNumber);
00884         void        LinkRemove(int pLinkNumber);
00888         int         LinkGetCount();
00892         void        LinkSetModel(FBModel* pModel);
00897         FBModel*    LinkGetModel(int pLinkNumber);
00902         FBModel*    LinkGetAssociateModel(int pLinkNumber);
00906         void        LinkClearUnused( double pThreshold = -1.0 );
00911         void        LinkSetCurrentVertex(int pLinkIndex,int pPointIndex);
00916         int            LinkGetVertexIndex(int pIndex);
00917 
00918         //--- Vertex level operations.
00924         void        VertexSetTransform(FBVector3d pPosition,FBVector3d pRotation, FBVector3d pScaling);
00930         void        VertexGetTransform(FBVector3d& pPosition,FBVector3d& pRotation, FBVector3d& pScaling);
00935         void        VertexAdd(int pVertexIndex,double pWeight);
00939         void        VertexRemove(int pVertexIndex);
00943         int            VertexGetCount();
00948         int            VertexGetNumber(int pIndex);
00953         double        VertexGetWeight(int pIndex);
00958         void        VertexSetWeight(double pWeight,int pIndex);
00961         void        VertexClear();
00962 
00963         FBPropertyClusterMode   ClusterMode;        
00964         FBPropertyDouble        ClusterAccuracy;    
00965     };
00966 
00968     // FBModelVertexData
00970     __FB_FORWARD( FBModelVertexData );
00971 
00972     class FBSDK_DLL FBModelVertexData : public FBComponent {
00973         __FBClassDeclare( FBModelVertexData,FBComponent );
00974 
00975     protected:
00976         FBModelVertexData(FBModel* pModel);
00977         friend class DataFBModel;
00978 
00979     public:
00980 
00982         bool IsDeformable();        
00983 
00988         bool IsDrawable();
00989 
00991         int GetVertexCount();
00992 
00997 
00999         int GetSubPatchCount();
01000 
01002         int GetSubPatchMaterialId(int pSubPatchIndex);
01003 
01005         FBMaterial* GetSubPatchMaterial(int pSubPatchIndex);
01006 
01013         FBGeometryPrimitiveType GetSubPatchPrimitiveType(int pSubPatchIndex, bool* pIsOptimized = NULL);
01014 
01016         int GetSubPatchIndexOffset(int pSubPatchIndex);
01017 
01019         int GetSubPatchIndexSize(int pSubPatchIndex);
01020 
01025         void DrawSubPatch(int pSubPatchIndex, bool pWireFrame = false);
01026 
01028 
01034 
01036         int GetSubRegionCount();
01037 
01041         FBMaterial* GetSubRegionMaterial(int pSubRegionIndex);
01042 
01047         void DrawSubRegion(int pSubRegionIndex, bool pWireFrame = false);
01048 
01050 
01056         void PushZDepthClipOverride();
01057         
01062         void PopZDepthClipOverride();
01063 
01070         void EnableOGLVertexData(bool pAfterdeform = true);
01071 
01073         void DisableOGLVertexData();
01074 
01080         void VertexArrayMappingRequest();
01081 
01086         void VertexArrayMappingRelease();
01087 
01097         const int* GetVertexArrayDuplicationMap(unsigned int& pDuplicatedVertexCound);
01098 
01100         int* GetIndexArray();
01101 
01103         unsigned int GetIndexArrayVBOId();
01104 
01111         FBGeometryArrayElementType GetVertexArrayType(FBGeometryArrayID pArrayId, bool pAfterDeform = true);
01112 
01119         void* GetVertexArray(FBGeometryArrayID pArrayId, bool pAfterDeform = true);
01120 
01127         unsigned int GetVertexArrayVBOId(FBGeometryArrayID pArrayId, bool pAfterDeform = true);
01128 
01135         void* GetVertexArrayVBOOffset(FBGeometryArrayID pArrayId, bool pAfterDeform = true);
01136 
01138 
01145         void EnableOGLUVSet(FBTextureMapping pTextureMapping = kFBTextureMappingUV, const char* pUVSet = NULL);
01146 
01148         void DisableOGLUVSet();
01149 
01155         FBGeometryArrayElementType GetUVSetArrayFormat(FBTextureMapping pTextureMapping = kFBTextureMappingUV, const char* pUVSet = NULL);
01156 
01162         void* GetUVSetArray(FBTextureMapping pTextureMapping = kFBTextureMappingUV, const char* pUVSet = NULL);
01163 
01169         unsigned int GetUVSetVBOId(FBTextureMapping pTextureMapping = kFBTextureMappingUV, const char* pUVSet = NULL);
01170 
01176         void* GetUVSetVBOOffset(FBTextureMapping pTextureMapping = kFBTextureMappingUV, const char* pUVSet = NULL);
01177 
01179     };
01180 
01182     // FBDeformer
01184 
01195     enum FBDeformerType    
01196     {
01197         kFBDeformerUnkown,
01198         kFBDeformerSkeleton,
01199         kFBDeformerPointCache
01200     };
01201 
01202     FB_DEFINE_ENUM( FBSDK_DLL, DeformerType                ); 
01203 
01204     __FB_FORWARD( FBDeformer );
01205 
01207     class FBSDK_DLL FBDeformer : public FBComponent {
01208         __FBClassDeclare( FBDeformer,FBComponent );
01209 
01210     public:
01215         FBDeformer(const char* pName, HIObject pObject=NULL);
01216 
01217         FBPropertyDeformerType DeformerType;    
01218     };
01219 
01221     // FBDeformerPointCache
01223     __FB_FORWARD( FBDeformerPointCache );
01224 
01226     class FBSDK_DLL FBDeformerPointCache : public FBDeformer {
01227         __FBClassDeclare( FBDeformerPointCache,FBDeformer );
01228 
01229     public:
01234         FBDeformerPointCache(const char* pName, HIObject pObject=NULL);
01235 
01236         FBPropertyPointCacheFile   PointCacheFile;  
01237 
01238         FBPropertyBool      Active;                  
01239 
01240         FBPropertyInt       ChannelIndex;            
01241         FBPropertyString    ChannelName;             
01242 
01243         FBPropertyInt       ChannelCount;            
01244         FBPropertyTime      ChannelStart;            
01245         FBPropertyTime      ChannelEnd;              
01246         FBPropertyBool      ChannelSampleRegular;    
01247         FBPropertyDouble    ChannelFrameRate;        
01248         FBPropertyInt       ChannelPointCount;       
01249     };
01250 
01252     // FBPointCacheFile
01254     __FB_FORWARD( FBPointCacheFile );
01255 
01257     class FBSDK_DLL FBPointCacheFile : public FBComponent {
01258         __FBClassDeclare( FBPointCacheFile,FBComponent );
01259 
01260     public:
01265         FBPointCacheFile(const char* pName, HIObject pObject=NULL);
01266 
01267         FBPropertyString    CacheFileName;           
01268         FBPropertyInt       ChannelCount;            
01269 
01270         FBPropertyTime      StartTime;               
01271         FBPropertyTime      StopTime;                
01272         FBPropertyDouble    PlaySpeed;               
01273         FBPropertyTime      Offset;                  
01274         FBPropertyBool      FreeRunning;             
01275         FBPropertyBool      Loop;                    
01276     };
01277 
01278 #ifdef FBSDKUseNamespace
01279 }
01280 #endif
01281 #endif