Model.h

Go to the documentation of this file.
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