00001 //*************************************************************************************** 00002 // File supervisor: Crosswalk team 00012 //*************************************************************************************** 00013 #ifndef _MODEL_H 00014 #define _MODEL_H 00015 00016 #include "Template.h" 00017 #include "ConstrainableType.h" 00018 00019 // Forward declaration 00020 class CSLVisibility; 00021 class CSLCluster; 00022 class CSLTransform; 00023 class CSLGlobalMaterial; 00024 class CSLPrimitive; 00025 class CSLMixer; 00026 class CSLEnvelope; 00027 class CSLFXTree; 00028 class CSLXSITransform; 00029 class CSLXSIBasePose; 00030 00036 class XSIEXPORT CSLModel 00037 : public CSLTemplate 00038 , public CSLConstrainableType 00039 { 00040 public: 00047 CSLModel(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate); 00048 00050 virtual ~CSLModel(); 00051 00055 virtual SI_Error Synchronize(); 00056 00060 virtual ETemplateType Type(); 00061 00066 virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName); 00067 00071 virtual SI_Error Fix(); 00072 00076 CSLCluster* AddCluster(); 00077 00081 CSLConstraint* AddConstraint(CSLConstraint::EConstraintType in_ConstraintType); 00082 00087 SI_Error RemoveCluster( SI_Int in_nIndex ); 00088 00093 SI_Error RemoveCluster( CSLCluster *in_pToRemove ); 00094 00098 SI_Int GetClusterCount(); 00099 00103 SI_Int GetEnvelopeCount(); 00104 00108 CSLCluster** GetClusterList(); 00109 00113 CSLEnvelope** GetEnvelopeList(); 00114 00118 SI_Error ClearClusters(); 00119 00124 SI_Error UnconnectEnvelope( CSLEnvelope* in_pToUnconnect ); 00125 00130 CSLCluster* ConnectCluster( CSLCluster* in_pNewCluster ); 00131 00136 CSLEnvelope* ConnectEnvelope( CSLEnvelope* in_pNewEnvelope ); 00137 00141 CSLTransform* GetBasePose(); 00142 00146 CSLTransform* CreateBasePose(); 00147 00151 SI_Error DestroyBasePose(); 00152 00156 CSLGlobalMaterial* GlobalMaterial(); 00157 00161 SI_Error AddGlobalMaterial(); 00162 00166 CSLTransform* Transform(); 00167 00171 CSLVisibility* Visibility(); 00172 00176 CSLModel* Parent(); 00177 00181 CSLPrimitive* Primitive(); 00182 00187 CSLMixer* ConnectMixer(CSLMixer *in_pNewMixer); 00188 00192 virtual CSLMixer* CreateMixer(); 00193 00197 SI_Error DestroyMixer(); 00198 00202 CSLMixer* Mixer(); 00203 00208 CSLModel* ConnectModel(CSLModel *in_pNewModel); 00209 00214 CSLVisibility* ConnectVisibility(CSLVisibility *in_pNewVisibility); 00215 00220 CSLTransform* ConnectTransform(CSLTransform *in_pNewTransform); 00221 00226 CSLTransform* ConnectBasePose(CSLTransform *in_pNewBasePose); 00227 00232 CSLPrimitive* ConnectPrimitive(CSLPrimitive *in_pNewPrimitive); 00233 00238 CSLGlobalMaterial* ConnectGlobalMaterial(CSLGlobalMaterial* in_pNewGlobalMaterial); 00239 00240 // Primitive and children manipulation. 00241 00245 ETemplateType GetPrimitiveType(); 00246 00250 virtual CSLModel* AddCamera(); 00251 00255 virtual CSLModel* AddXSICamera(); 00256 00260 CSLModel* AddCurveList(); 00261 00265 virtual CSLModel* AddDirectionalLight(); 00266 00271 CSLModel* AddIKChain(SI_Int in_nNbJoints); 00272 00276 CSLModel* AddIKRoot(); 00277 00281 CSLModel* AddIKJoint(); 00282 00286 CSLModel* AddIKEffector(); 00287 00291 virtual CSLModel* AddInfiniteLight(); 00292 00296 virtual CSLModel* AddInstance(); 00297 00301 CSLModel* AddMesh(); 00302 00306 virtual CSLModel* AddXSIMesh(); 00307 00311 virtual CSLModel* AddModel(); 00312 00316 CSLModel* AddNull(); 00317 00321 CSLModel* AddPatch(); 00322 00326 virtual CSLModel* AddPointLight(); 00327 00331 virtual CSLModel* AddSpotLight(); 00332 00336 CSLModel* AddSurfaceMesh(); 00337 00341 CSLModel** GetChildrenList(); 00342 00346 SI_Error ClearChildren(); 00347 00351 SI_Int GetChildrenCount(); 00352 00357 SI_Error RemoveChild(CSLModel* in_pChild); 00358 00363 SI_Error RemoveChild(SI_Int in_nIndex); 00364 00369 SI_Error Reparent(CSLModel *in_pNewParent); 00370 00374 CSLFXTree* AddFXTree(); 00375 00380 SI_Error RemoveFXTree( SI_Int in_nIndex ); 00381 00386 SI_Error RemoveFXTree( CSLFXTree* in_pToRemove ); 00387 00391 SI_Error ClearFXTrees(); 00392 00397 CSLFXTree* ConnectFXTree( CSLFXTree* in_pToConnect ); 00398 00402 CSLFXTree** GetFXTreeList(); 00403 00407 SI_Int GetFXTreeCount(); 00408 00413 CSLFXTree* FindFXTree( SI_Char* in_szFXTreeName ); 00414 00418 CSLXSITransform* XSITransform(); 00419 00424 CSLXSITransform* ConnectXSITransform(CSLXSITransform *in_pNewTransform); 00425 00429 CSLXSIBasePose* GetXSIBasePose(); 00430 00435 CSLXSIBasePose* ConnectXSIBasePose(CSLXSIBasePose *in_pNewBasePose); 00436 00440 CSLXSIBasePose* CreateXSIBasePose(); 00441 00445 SI_Error DestroyXSIBasePose(); 00446 00451 virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter); 00452 00457 SI_Error UnconnectModel(CSLModel *in_pModel); 00458 00459 protected: 00460 00461 CSLModel* CreateLightTemplate(CdotXSITemplate **out_ppLightTemplate); 00462 SI_Bool FindSpecificChildrenRecursively(CSLModel *in_pSource, CSLModel *in_pTarget); 00463 00464 CSLVisibility* m_pVisibility; 00465 CSIBCArray<CSLCluster*> m_Clusters; 00466 CSLMixer* m_pMixer; 00467 CSIBCArray<CSLEnvelope*> m_Envelopes; 00468 CSLTransform* m_pLocalTransform; 00469 CSLTransform* m_pBasepose; 00470 CSLGlobalMaterial* m_pGlobalMaterial; 00471 CSLPrimitive* m_pPrimitive; 00472 CSIBCArray<CSLModel*> m_Children; 00473 CSIBCArray<CSLFXTree*> m_FXTrees; 00474 CSLXSITransform* m_pXSITransform; 00475 CSLXSIBasePose* m_pXSIBasePose; 00476 }; 00477 00478 #endif