Template.h

Go to the documentation of this file.
00001 //***************************************************************************************
00002 // File supervisor: Crosswalk team
00012 //***************************************************************************************
00013 
00014 #ifndef _TEMPLATE_H
00015 #define _TEMPLATE_H
00016 
00017 #if defined(_WIN32) || defined(_WIN32_WCE) || defined(_XBOX)
00018 
00019 // Disable "identifier was truncated to '255' characters in the debug information" warning.
00020 #pragma warning( disable : 4786 )
00021 
00022 // Disable warnings on extern before template instantiation.
00023 #pragma warning( disable : 4231 )
00024 
00025 #endif // defined(_WIN32) || defined(_WIN32_WCE)  || defined(_XBOX)
00026 
00027 // Include files
00028 #include "SLTypes.h"
00029 #include <XSIParser.h>
00030 #include <dotXSIDefines.h>
00031 
00032 
00033 // Forward class declaration
00034 class CSLScene;
00035 class CSLModel;
00036 class CSLCustomPSet;
00037 class CSLUserDataBlob;
00038 class CSLFCurve;
00039 class CSLXSIUserKeyword;
00040 
00053 class XSIEXPORT CSLTemplate : public CSIBCNode
00054 {
00055 public:
00058     enum ETemplateType
00059     {
00060         SI_ACTION_FCURVE,                           
00061         SI_ANGLE,                                   
00062         SI_AMBIENCE,                                
00063         SI_BASE_SHAPE,                              
00064         SI_CAMERA,                                  
00065         SI_CLUSTER,                                 
00066         SI_CONSTRAINT,                              
00067         SI_COORDINATE_SYSTEM,                       
00068         SI_CURVE_LIST,                              
00069         SI_CUSTOM_PSET,                             
00070         SI_CUSTOM_PARAM_INFO,                       
00071         SI_DIRECTIONAL_LIGHT,                       
00072         SI_ENVELOPE,                                
00073         SI_ENVELOPE_LIST,                           
00074         SI_FCURVE,                                  
00075         SI_FILE_INFO,                               
00076         SI_FOG,                                     
00077         SI_GLOBAL_MATERIAL,                         
00078         SI_IK_EFFECTOR,                             
00079         SI_IK_JOINT,                                
00080         SI_IK_ROOT,                                 
00081         SI_INFINITE_LIGHT,                          
00082         SI_INSTANCE,                                
00083         SI_LIGHT_INFO,                              
00084         SI_MATERIAL,                                
00085         SI_MATERIAL_LIBRARY,                        
00086         SI_MESH,                                    
00087         SI_MODEL,                                   
00088         SI_NULL_OBJECT,                             
00089         SI_NURBS_CURVE,                             
00090         SI_NURBS_SURFACE,                           
00091         SI_POINT_LIGHT,                             
00092         SI_POLYGON_LIST,                            
00093         SI_SCENE_INFO,                              
00094         SI_SHAPE,                                   
00095         SI_SHAPE35,                                 
00096         SI_SHAPE_ANIMATION,                         
00097         SI_SPOT_LIGHT,                              
00098         SI_SURFACE_MESH,                            
00099         SI_TEXTURE_2D,                              
00100         SI_TRANSFORM,                               
00101         SI_TRIANGLE_LIST,                           
00102         SI_TRIANGLE_STRIP,                          
00103         SI_TRIANGLE_STRIP_LIST,                     
00104         SI_VISIBILITY,                              
00105         XSI_ACTION,                                 
00106         XSI_ACTIONCLIP,                             
00107         XSI_CUSTOM_PARAM_INFO,                      
00108         XSI_EXTRAPOLATION,                          
00109         XSI_FXOPERATOR,                             
00110         XSI_FXTREE,                                 
00111         XSI_IMAGE,                                  
00112         XSI_IMAGE_DATA,                             
00113         XSI_IMAGE_FX,                               
00114         XSI_IMAGE_LIBRARY,                          
00115         XSI_MATERIAL,                               
00116         XSI_MATERIAL_INFO,                          
00117         XSI_MIXER,                                  
00118         XSI_NURBS_PROJECTION,                       
00119         XSI_NURBS_TRIM,                             
00120         XSI_SHADER,                                 
00121         XSI_SHADER_INSTANCE_DATA,                   
00122         XSI_STATIC_VALUES,                          
00123         XSI_TIMECONTROL,                            
00124         XSI_TRACK,                                  
00125         XSI_USER_DATA,                              
00126         XSI_USER_DATA_LIST,                         
00127         XSI_SUB_COMPONENT_ATTRIBUTE_LIST,           
00128         XSI_TRIANGLE_STRIP_LIST,                    
00129         XSI_TRIANGLE_LIST,                          
00130         XSI_POLYGON_LIST,                           
00131         XSI_VERTEX_LIST,                            
00132         XSI_SHAPE,                                  
00133         XSI_MESH,                                   
00134         XSI_SHAPE_ANIMATION,                        
00135         XSI_CLUSTER_INFO,                           
00136         XSI_USER_DATA_BLOB,                         
00137         XSI_TRANSFORM,                              
00138         XSI_LIMIT,                                  
00139         XSI_BASEPOSE,                               
00140         COLLADA_MATERIAL,                           
00141         COLLADA_EFFECT_LIBRARY,                     
00142         COLLADA_EFFECT,                             
00143         COLLADA_EFFECT_COMMON_PROFILE,              
00144         COLLADA_EFFECT_CG_PROFILE,                  
00145         COLLADA_EFFECT_COMMON_PARAM,                
00146         COLLADA_EFFECT_COMMON_FLOAT,                
00147         COLLADA_EFFECT_COMMON_COLOR,                
00148         COLLADA_EFFECT_COMMON_TEXTURE,              
00149         COLLADA_EFFECT_COMMON_FLOAT_OR_PARAM,       
00150         COLLADA_EFFECT_COMMON_COLOR_OR_TEXTURE,     
00151         COLLADA_EFFECT_COMMON_SHADER,               
00152         COLLADA_EFFECT_SETPARAM,                    
00153         XSI_IK_RESOLUTIONPLANE,                     
00154         XSI_CAMERA,                                 
00155         XSI_POLYMATRICKS,                           
00156         XSI_TRANSLATE,                              
00157         XSI_ROTATE,                                 
00158         XSI_SCALE,                                  
00159         XSI_SHEAR,                                  
00160         XSI_LOOKAT,                                 
00161         XSI_MATRIX,                                 
00162         XSI_SHAPEREFERENCE,                         
00163         XSI_ACTIONCLIPCONTAINER,                    
00164         XSI_INDEX_LIST,                             
00165         XSI_CAMERA_FOCALLENGTH,                     
00166         XSI_SHADER_MULTI_PORT_CONNECTION,           
00167         XSI_IMAGE_FX2,                              
00168         XSI_TEXTURE_LAYER,                          
00169         XSI_TEXTURE_LAYER_PORT,                     
00170         XSI_USER_KEYWORD,                           
00171         XSI_CLIP_TO_PARENT,                         
00172         XSI_SHADER_COMPOUND,                        
00173         XSI_SHADER_COMPOUND_PORT,                   
00174     };
00175 
00178     enum EFCurveType
00179     {
00180         SI_COLOR_R,             
00181         SI_COLOR_G,             
00182         SI_COLOR_B,             
00183         SI_POSITION_X,          
00184         SI_POSITION_Y,          
00185         SI_POSITION_Z,          
00186         SI_ROLL,                
00187         SI_FOV,                 
00188         SI_NEAR,                
00189         SI_FAR,                 
00190         SI_INTEREST_X,          
00191         SI_INTEREST_Y,          
00192         SI_INTEREST_Z,          
00193         SI_CONE,                
00194         SI_SPREAD,              
00195         SI_ORIENTATION_X,       
00196         SI_ORIENTATION_Y,       
00197         SI_ORIENTATION_Z,       
00198         SI_DIFFUSE_R,           
00199         SI_DIFFUSE_G,           
00200         SI_DIFFUSE_B,           
00201         SI_DIFFUSE,             
00202         SI_PARAMETER,           
00203         SI_POWER,               
00204         SI_SPECULAR_R,          
00205         SI_SPECULAR_G,          
00206         SI_SPECULAR_B,          
00207         SI_EMISSIVE_R,          
00208         SI_EMISSIVE_G,          
00209         SI_EMISSIVE_B,          
00210         SI_AMBIENT_R,           
00211         SI_AMBIENT_G,           
00212         SI_AMBIENT_B,           
00213         SI_SCALING_X,           
00214         SI_SCALING_Y,           
00215         SI_SCALING_Z,           
00216         SI_ROTATION_X,          
00217         SI_ROTATION_Y,          
00218         SI_ROTATION_Z,          
00219         SI_TRANSLATION_X,       
00220         SI_TRANSLATION_Y,       
00221         SI_TRANSLATION_Z,       
00222         SI_SHPANIM,             
00223         SI_NODEVIS,             
00224         SI_HUE,                 
00225         SI_GAIN,                
00226         SI_SATURATION,          
00227         SI_BRIGHTNESS,          
00228         SI_BLUR_RADIUS,         
00229         SI_BLUR_AMOUNT,         
00230         SI_BLUR_ALPHA,          
00231         SI_SCALING_TYPE,        
00232         SI_SCALE_X,             
00233         SI_SCALE_Y,             
00234         SI_FLIP_X,              
00235         SI_FLIP_Y,              
00236         SI_RGBA2GRAYSCALE,      
00237         SI_BITS_PER_CHANNEL,    
00238         SI_CROP_MIN_X,          
00239         SI_CROP_MAX_X,          
00240         SI_CROP_MIN_Y,          
00241         SI_CROP_MAX_Y,          
00242         SI_FALLOFF_ACTIVE,      
00243         SI_FALLOFF_START,       
00244         SI_FALLOFF_END,         
00245         SI_SHADOWS_ENABLED,     
00246         SI_UMBRA,               
00247         SI_LIGHT_AS_ENERGY,     
00248         SI_ENERGY_FACTOR,       
00249         SI_INTENSITY,           
00250     };
00251 
00254     enum EFCurveInterpolationType
00255     {
00256         SI_CONSTANT,    
00257         SI_LINEAR,      
00258         SI_HERMITE,     
00259         SI_BEZIER,      
00260         SI_CUBIC,       
00261     };
00262 
00266     enum ERotationOrder
00267     {
00268         SI_XYZ,             
00269         SI_XZY,             
00270         SI_YXZ,             
00271         SI_YZX,             
00272         SI_ZXY,             
00273         SI_ZYX,             
00274     };
00275 
00281     CSLTemplate(CSLScene* in_pScene, CSLModel *in_pParentModel, CdotXSITemplate* in_pTemplate);
00282     virtual ~CSLTemplate();
00283 
00287     SI_Void SetName(SI_Char *in_szNewName);
00288 
00291     SI_Char* GetName();
00292 
00296     CSLModel* ParentModel();
00297 
00301     CSLScene* Scene();
00302 
00306     CdotXSITemplate* Template();
00307 
00308     // FCurve manipulation functions
00314     CSLFCurve* CreateFCurve(EFCurveType in_Type, EFCurveInterpolationType in_InterpolationType);
00315 
00321     virtual CSLFCurve* CreateParameterFCurve(SI_Char* in_szParameterName, EFCurveInterpolationType in_InterpolationType);
00322 
00323 
00328     SI_Error DestroyFCurve(EFCurveType in_Type);
00329 
00334     CSLFCurve* RemoveFCurveAt(SI_Int in_Index);
00335 
00339     CSLFCurve **FCurves();
00340 
00344     SI_Int GetFCurveCount();
00345 
00350     CSLFCurve* GetSpecificFCurve(EFCurveType in_Type);
00351 
00356     CSLFCurve* GetParameterFCurve(SI_Char* in_szParameterName);
00357 
00361     SI_Error ClearFCurves();
00362 
00363     // Custom parameter set manipulation functions.
00364     //todo : respect naming convention.
00365 
00366 
00370     CSLCustomPSet* AddCustomPSet();
00371 
00375     SI_Error ClearCustomPSets();
00376 
00380     CSLCustomPSet** GetCustomPSetList();
00381 
00386     CSLCustomPSet* FindCustomPSet(char *in_pName);
00387 
00391     SI_Int GetCustomPSetCount();
00392 
00397     SI_Error RemoveCustomPSet(SI_Int in_nIndex);
00398 
00403     SI_Error RemoveCustomPSet(CSLCustomPSet *in_pToRemove);
00404 
00405     // Connection functions.
00410     CSLFCurve *ConnectFCurve(CSLFCurve *in_pNewFCurve);
00411 
00416     CSLCustomPSet *ConnectCustomPSet(CSLCustomPSet *in_pNewCustomPSet);
00417 
00421     virtual SI_Error Fix();
00422 
00426     virtual SI_Error Synchronize();
00427 
00431     virtual ETemplateType Type() = 0;
00432 
00437     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00438 
00444     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00445 
00449     virtual SI_Char* FullName();
00450 
00455     CSLUserDataBlob *ConnectUserDataBlob(CSLUserDataBlob *in_pNewUserDataBlob);
00456 
00457 
00461     CSLUserDataBlob* AddUserDataBlob();
00462 
00466     SI_Error ClearUserDataBlobs();
00467 
00471     CSLUserDataBlob** GetUserDataBlobList();
00472 
00476     SI_Int GetUserDataBlobCount();
00477 
00482     SI_Error RemoveUserDataBlob(SI_Int in_nIndex);
00483 
00488     SI_Error RemoveUserDataBlob(CSLUserDataBlob *in_pToRemove);
00489 
00493     CSLXSIUserKeyword* GetUserKeyword();
00494 
00498     CSLXSIUserKeyword*  CreateUserKeyword();
00499 
00504     CSLXSIUserKeyword* ConnectUserKeyword(CSLXSIUserKeyword* in_pToConnect);
00505 
00510     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00511 
00515     SI_Bool AreFullNamesExported();
00516 
00517     SI_Error Connect ( CdotXSITemplate* in_pConnection );
00518 
00519 
00524     virtual SI_Error Evaluate( SI_Float in_fTime );
00525 
00526 protected:
00532     SI_Error SetParent( CSLModel *in_pNewParent );
00533     CSLAnimatableType** m_pConnectionMap;
00534 
00535     CSIBCArray<CSLCustomPSet *>     m_CustomPSets;
00536     CSIBCArray<CSLFCurve *>         m_FCurves;
00537     CSIBCArray<CSLUserDataBlob *>   m_UserDataBlobs;
00538 
00539 private:
00540     CSLFCurve* CreateCOLLADAFCurve(EFCurveType in_Type, EFCurveInterpolationType in_InterpolationType);
00541     CSLFCurve* CreateCOLLADAParameterFCurve(SI_Char* in_szParameterName, EFCurveInterpolationType in_InterpolationType);
00542 
00543     CdotXSITemplate*                m_pTemplate;
00544     CSLScene*                       m_pScene;
00545     CSLModel*                       m_pParentModel;
00546     CSIBCString*                    m_szFullName;
00547     CSLXSIUserKeyword*              m_pUserKeyword;
00548     void*                           m_pReserved;
00549 };
00550 
00551 #endif