00001
00002
00012
00013
00014 #ifndef _TEMPLATE_H
00015 #define _TEMPLATE_H
00016
00017 #if defined(_WIN32) || defined(_WIN32_WCE) || defined(_XBOX)
00018
00019
00020 #pragma warning( disable : 4786 )
00021
00022
00023 #pragma warning( disable : 4231 )
00024
00025 #endif // defined(_WIN32) || defined(_WIN32_WCE) || defined(_XBOX)
00026
00027
00028 #include "SLTypes.h"
00029 #include <XSIParser.h>
00030 #include <dotXSIDefines.h>
00031
00032
00033
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
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
00364
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
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