00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _TEMPLATE_H
00027 #define _TEMPLATE_H
00028
00029 #if defined(_WIN32) || defined(_WIN32_WCE) || defined(_XBOX)
00030
00031
00032 #pragma warning( disable : 4786 )
00033
00034
00035 #pragma warning( disable : 4231 )
00036
00037 #endif // defined(_WIN32) || defined(_WIN32_WCE) || defined(_XBOX)
00038
00039
00040 #include "SLTypes.h"
00041 #include <XSIParser.h>
00042 #include <dotXSIDefines.h>
00043
00044
00045
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
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
00368
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
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