Template.h

Go to the documentation of this file.
00001 /****************************************************************************************
00002 THIS CODE IS PUBLISHED AS A SAMPLE ONLY AND IS PROVIDED "AS IS".
00003 IN NO EVENT SHALL SOFTIMAGE, AVID TECHNOLOGY, INC. AND/OR THEIR RESPECTIVE
00004 SUPPLIERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
00005 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
00006 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
00007 CONNECTION WITH THE USE OR PERFORMANCE OF THIS CODE .
00008 
00009 COPYRIGHT NOTICE. Copyright © 1999-2002 Avid Technology Inc. . All rights reserved.
00010 
00011 SOFTIMAGE is a registered trademark of Avid Technology Inc. or its subsidiaries
00012 or divisions. Windows NT is a registered trademark of Microsoft Corp. All other
00013 trademarks contained herein are the property of their respective owners.
00014 ****************************************************************************************/
00019 /******************************************************************************\
00020 *
00021 * File:          Template.h
00022 * Creation date: January 15, 2002
00023 * Purpose:       Declaration of class 'Template'
00024 *
00025 \******************************************************************************/
00026 #ifndef _TEMPLATE_H
00027 #define _TEMPLATE_H
00028 
00029 #if defined(_WIN32) || defined(_WIN32_WCE) || defined(_XBOX)
00030 
00031 // Disable "identifier was truncated to '255' characters in the debug information" warning.
00032 #pragma warning( disable : 4786 )
00033 
00034 // Disable warnings on extern before template instantiation.
00035 #pragma warning( disable : 4231 )
00036 
00037 #endif // defined(_WIN32) || defined(_WIN32_WCE)  || defined(_XBOX)
00038 
00039 // Include files
00040 #include "SLTypes.h"
00041 #include <XSIParser.h>
00042 #include <dotXSIDefines.h>
00043 
00044 
00045 // Forward class declaration
00046 class CSLScene;
00047 class CSLModel;
00048 class CSLCustomPSet;
00049 class CSLUserDataBlob;
00050 class CSLFCurve;
00051 class CSLXSIUserKeyword;
00052 
00068 class XSIEXPORT CSLTemplate : public CSIBCNode
00069 {
00070 public:
00074     enum ETemplateType
00075     {
00076         SI_ACTION_FCURVE,   
00077         SI_ANGLE,           
00078         SI_AMBIENCE,        
00079         SI_BASE_SHAPE,      
00080         SI_CAMERA,          
00081         SI_CLUSTER,         
00082         SI_CONSTRAINT,      
00083         SI_COORDINATE_SYSTEM,   
00084         SI_CURVE_LIST,      
00085         SI_CUSTOM_PSET,     
00086         SI_CUSTOM_PARAM_INFO,   
00087         SI_DIRECTIONAL_LIGHT,   
00088         SI_ENVELOPE,            
00089         SI_ENVELOPE_LIST,       
00090         SI_FCURVE,              
00091         SI_FILE_INFO,           
00092         SI_FOG,                 
00093         SI_GLOBAL_MATERIAL,     
00094         SI_IK_EFFECTOR,         
00095         SI_IK_JOINT,            
00096         SI_IK_ROOT,             
00097         SI_INFINITE_LIGHT,      
00098         SI_INSTANCE,            
00099         SI_LIGHT_INFO,          
00100         SI_MATERIAL,            
00101         SI_MATERIAL_LIBRARY,    
00102         SI_MESH,                
00103         SI_MODEL,               
00104         SI_NULL_OBJECT,         
00105         SI_NURBS_CURVE,         
00106         SI_NURBS_SURFACE,       
00107         SI_POINT_LIGHT,         
00108         SI_POLYGON_LIST,        
00109         SI_SCENE_INFO,          
00110         SI_SHAPE,               
00111         SI_SHAPE35,             
00112         SI_SHAPE_ANIMATION,     
00113         SI_SPOT_LIGHT,          
00114         SI_SURFACE_MESH,        
00115         SI_TEXTURE_2D,          
00116         SI_TRANSFORM,           
00117         SI_TRIANGLE_LIST,       
00118         SI_TRIANGLE_STRIP,      
00119         SI_TRIANGLE_STRIP_LIST, 
00120         SI_VISIBILITY,          
00121         XSI_ACTION,             
00122         XSI_ACTIONCLIP,         
00123         XSI_CUSTOM_PARAM_INFO,  
00124         XSI_EXTRAPOLATION,      
00125         XSI_FXOPERATOR,         
00126         XSI_FXTREE,             
00127         XSI_IMAGE,              
00128         XSI_IMAGE_DATA,         
00129         XSI_IMAGE_FX,           
00130         XSI_IMAGE_LIBRARY,      
00131         XSI_MATERIAL,           
00132         XSI_MATERIAL_INFO,      
00133         XSI_MIXER,              
00134         XSI_NURBS_PROJECTION,   
00135         XSI_NURBS_TRIM,         
00136         XSI_SHADER,             
00137         XSI_SHADER_INSTANCE_DATA,   
00138         XSI_STATIC_VALUES,      
00139         XSI_TIMECONTROL,        
00140         XSI_TRACK,              
00141         XSI_USER_DATA,          
00142         XSI_USER_DATA_LIST,     
00143         XSI_SUB_COMPONENT_ATTRIBUTE_LIST,   
00144         XSI_TRIANGLE_STRIP_LIST,            
00145         XSI_TRIANGLE_LIST,                  
00146         XSI_POLYGON_LIST,                   
00147         XSI_VERTEX_LIST,                    
00148         XSI_SHAPE,                          
00149         XSI_MESH,                           
00150         XSI_SHAPE_ANIMATION,                
00151         XSI_CLUSTER_INFO,                   
00152         XSI_USER_DATA_BLOB,                 
00153         XSI_TRANSFORM,                      
00154         XSI_LIMIT,                          
00155         XSI_BASEPOSE,                       
00156         COLLADA_MATERIAL,                   
00157         COLLADA_EFFECT_LIBRARY,             
00158         COLLADA_EFFECT,                     
00159         COLLADA_EFFECT_COMMON_PROFILE,      
00160         COLLADA_EFFECT_CG_PROFILE,          
00161         COLLADA_EFFECT_COMMON_PARAM,        
00162         COLLADA_EFFECT_COMMON_FLOAT,        
00163         COLLADA_EFFECT_COMMON_COLOR,        
00164         COLLADA_EFFECT_COMMON_TEXTURE,      
00165         COLLADA_EFFECT_COMMON_FLOAT_OR_PARAM,       
00166         COLLADA_EFFECT_COMMON_COLOR_OR_TEXTURE,     
00167         COLLADA_EFFECT_COMMON_SHADER,               
00168         COLLADA_EFFECT_SETPARAM,                    
00169         XSI_IK_RESOLUTIONPLANE,                     
00170         XSI_CAMERA,                                 
00171         XSI_POLYMATRICKS,                           
00172         XSI_TRANSLATE,                              
00173         XSI_ROTATE,                                 
00174         XSI_SCALE,                                  
00175         XSI_SHEAR,                                  
00176         XSI_LOOKAT,                                 
00177         XSI_MATRIX,                                 
00178         XSI_SHAPEREFERENCE,                         
00179         XSI_ACTIONCLIPCONTAINER,                    
00180         XSI_INDEX_LIST,                             
00181         XSI_CAMERA_FOCALLENGTH,                     
00182         XSI_SHADER_MULTI_PORT_CONNECTION,           
00183         XSI_IMAGE_FX2,                              
00184         XSI_TEXTURE_LAYER,                          
00185         XSI_TEXTURE_LAYER_PORT,                     
00186         XSI_USER_KEYWORD,                           
00187         XSI_CLIP_TO_PARENT,                         
00188     };
00189 
00193     enum EFCurveType
00194     {
00195         SI_COLOR_R,         
00196         SI_COLOR_G,         
00197         SI_COLOR_B,         
00198         SI_POSITION_X,      
00199         SI_POSITION_Y,      
00200         SI_POSITION_Z,      
00201         SI_ROLL,            
00202         SI_FOV,             
00203         SI_NEAR,            
00204         SI_FAR,             
00205         SI_INTEREST_X,      
00206         SI_INTEREST_Y,      
00207         SI_INTEREST_Z,      
00208         SI_CONE,            
00209         SI_SPREAD,          
00210         SI_ORIENTATION_X,   
00211         SI_ORIENTATION_Y,   
00212         SI_ORIENTATION_Z,   
00213         SI_DIFFUSE_R,       
00214         SI_DIFFUSE_G,       
00215         SI_DIFFUSE_B,       
00216         SI_DIFFUSE,         
00217         SI_PARAMETER,       
00218         SI_POWER,           
00219         SI_SPECULAR_R,      
00220         SI_SPECULAR_G,      
00221         SI_SPECULAR_B,      
00222         SI_EMISSIVE_R,      
00223         SI_EMISSIVE_G,      
00224         SI_EMISSIVE_B,      
00225         SI_AMBIENT_R,       
00226         SI_AMBIENT_G,       
00227         SI_AMBIENT_B,       
00228         SI_SCALING_X,       
00229         SI_SCALING_Y,       
00230         SI_SCALING_Z,       
00231         SI_ROTATION_X,      
00232         SI_ROTATION_Y,      
00233         SI_ROTATION_Z,      
00234         SI_TRANSLATION_X,   
00235         SI_TRANSLATION_Y,   
00236         SI_TRANSLATION_Z,   
00237         SI_SHPANIM,         
00238         SI_NODEVIS,         
00239         SI_HUE,             
00240         SI_GAIN,            
00241         SI_SATURATION,      
00242         SI_BRIGHTNESS,      
00243         SI_BLUR_RADIUS,     
00244         SI_BLUR_AMOUNT,     
00245         SI_BLUR_ALPHA,      
00246         SI_SCALING_TYPE,    
00247         SI_SCALE_X,         
00248         SI_SCALE_Y,         
00249         SI_FLIP_X,          
00250         SI_FLIP_Y,          
00251         SI_RGBA2GRAYSCALE,  
00252         SI_BITS_PER_CHANNEL,    
00253         SI_CROP_MIN_X,      
00254         SI_CROP_MAX_X,      
00255         SI_CROP_MIN_Y,      
00256         SI_CROP_MAX_Y,      
00257         SI_FALLOFF_ACTIVE,  
00258         SI_FALLOFF_START,   
00259         SI_FALLOFF_END,     
00260         SI_SHADOWS_ENABLED, 
00261         SI_UMBRA,           
00262         SI_LIGHT_AS_ENERGY, 
00263         SI_ENERGY_FACTOR,   
00264         SI_INTENSITY,       
00265     };
00266 
00270     enum EFCurveInterpolationType
00271     {
00272         SI_CONSTANT,
00273         SI_LINEAR,
00274         SI_HERMITE,
00275         SI_BEZIER,
00276         SI_CUBIC,
00277     };
00278 
00282     enum ERotationOrder
00283     {
00284         SI_XYZ,
00285         SI_XZY,
00286         SI_YXZ,
00287         SI_YZX,
00288         SI_ZXY,
00289         SI_ZYX,
00290     };
00291 
00294     CSLTemplate(CSLScene* in_pScene, CSLModel *in_pParentModel, CdotXSITemplate* in_pTemplate);
00295     virtual ~CSLTemplate();
00298     SI_Void SetName(SI_Char *in_szNewName);
00301     SI_Char* GetName();
00302 
00306     CSLModel* ParentModel();
00307 
00311     CSLScene* Scene();
00312 
00316     CdotXSITemplate* Template();
00317 
00318     // FCurve manipulation functions
00324     CSLFCurve* CreateFCurve(EFCurveType in_Type, EFCurveInterpolationType in_InterpolationType);
00325 
00331     virtual CSLFCurve* CreateParameterFCurve(SI_Char* in_szParameterName, EFCurveInterpolationType in_InterpolationType);
00332 
00333 
00338     SI_Error DestroyFCurve(EFCurveType in_Type);
00339 
00343     CSLFCurve **FCurves();
00344 
00348     SI_Int GetFCurveCount();
00349 
00354     CSLFCurve* GetSpecificFCurve(EFCurveType in_Type);
00355 
00360     CSLFCurve* GetParameterFCurve(SI_Char* in_szParameterName);
00361 
00365     SI_Error ClearFCurves();
00366 
00367     // Custom parameter set manipulation functions.
00368     //todo : respect naming convention.
00369 
00370 
00374     CSLCustomPSet* AddCustomPSet();
00375 
00379     SI_Error ClearCustomPSets();
00380 
00384     CSLCustomPSet** GetCustomPSetList();
00385 
00389     CSLCustomPSet* FindCustomPSet(char *in_pName);
00390 
00394     SI_Int GetCustomPSetCount();
00395 
00399     SI_Error RemoveCustomPSet(SI_Int in_nIndex);
00400 
00404     SI_Error RemoveCustomPSet(CSLCustomPSet *in_pToRemove);
00405 
00406     // Connection functions.
00411     CSLFCurve *ConnectFCurve(CSLFCurve *in_pNewFCurve);
00412 
00417     CSLCustomPSet *ConnectCustomPSet(CSLCustomPSet *in_pNewCustomPSet);
00418 
00422     virtual SI_Error Fix();
00423 
00427     virtual SI_Error Synchronize();
00428 
00432     virtual ETemplateType Type() = 0;
00433 
00438     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00439 
00445     virtual CSLAnimatableType* ParameterFromType(EFCurveType in_Type, SI_Char *in_szParameterName);
00446 
00450     virtual SI_Char* FullName();
00451 
00456     CSLUserDataBlob *ConnectUserDataBlob(CSLUserDataBlob *in_pNewUserDataBlob);
00457 
00458 
00462     CSLUserDataBlob* AddUserDataBlob();
00463 
00467     SI_Error ClearUserDataBlobs();
00468 
00472     CSLUserDataBlob** GetUserDataBlobList();
00473 
00477     SI_Int GetUserDataBlobCount();
00478 
00482     SI_Error RemoveUserDataBlob(SI_Int in_nIndex);
00483 
00487     SI_Error RemoveUserDataBlob(CSLUserDataBlob *in_pToRemove);
00488 
00492     CSLXSIUserKeyword* GetUserKeyword();
00493 
00497     CSLXSIUserKeyword*  CreateUserKeyword();
00498 
00503     CSLXSIUserKeyword* ConnectUserKeyword(CSLXSIUserKeyword* in_pToConnect);
00504 
00509     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00510 
00514     SI_Bool AreFullNamesExported();
00515 
00516     SI_Error Connect ( CdotXSITemplate* in_pConnection );
00517 
00518 
00523     virtual SI_Error Evaluate( SI_Float in_fTime );
00524 
00525 protected:
00531     SI_Error SetParent( CSLModel *in_pNewParent );
00532     CSLAnimatableType** m_pConnectionMap;
00533 
00534     CSIBCArray<CSLCustomPSet *>     m_CustomPSets;
00535     CSIBCArray<CSLFCurve *>         m_FCurves;
00536     CSIBCArray<CSLUserDataBlob *>   m_UserDataBlobs;
00537 
00538 private:
00539     CSLFCurve* CreateCOLLADAFCurve(EFCurveType in_Type, EFCurveInterpolationType in_InterpolationType);
00540     CSLFCurve* CreateCOLLADAParameterFCurve(SI_Char* in_szParameterName, EFCurveInterpolationType in_InterpolationType);
00541     
00542     CdotXSITemplate*                m_pTemplate;
00543     CSLScene*                       m_pScene;
00544     CSLModel*                       m_pParentModel;
00545     CSIBCString*                    m_szFullName;
00546     CSLXSIUserKeyword*              m_pUserKeyword;
00547     void*                           m_pReserved;
00548 };
00549 
00550 #endif