Model.h

00001 //***************************************************************************************
00002 //
00003 // File supervisor: Crosswalk team
00004 //
00005 // Copyright 2008 Autodesk, Inc.  All rights reserved.
00006 // Use of this software is subject to the terms of the Autodesk license agreement
00007 // provided at the time of installation or download, or which otherwise accompanies
00008 // this software in either electronic or hard copy form.
00009 //
00010 //***************************************************************************************
00011 #ifndef _MODEL_H
00012 #define _MODEL_H
00013 
00014 #include "Template.h"
00015 #include "ConstrainableType.h"
00016 
00017 // Forward declaration
00018 class CSLVisibility;
00019 class CSLCluster;
00020 class CSLTransform;
00021 class CSLGlobalMaterial;
00022 class CSLPrimitive;
00023 class CSLMixer;
00024 class CSLEnvelope;
00025 class CSLFXTree;
00026 class CSLXSITransform;
00027 class CSLXSIBasePose;
00028 
00032 class XSIEXPORT CSLModel
00033     : public CSLTemplate
00034     , public CSLConstrainableType
00035 {
00036 public:
00043     CSLModel(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00044 
00046     virtual ~CSLModel();
00047 
00051     virtual SI_Error Synchronize();
00052 
00056     virtual ETemplateType Type();
00057 
00062     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00063 
00067     virtual SI_Error Fix();
00068 
00072     CSLCluster* AddCluster();
00073 
00077     CSLConstraint* AddConstraint(CSLConstraint::EConstraintType in_ConstraintType);
00078 
00083     SI_Error RemoveCluster( SI_Int in_nIndex );
00084 
00089     SI_Error RemoveCluster( CSLCluster *in_pToRemove );
00090 
00094     SI_Int GetClusterCount();
00095 
00099     SI_Int GetEnvelopeCount();
00100 
00104     CSLCluster** GetClusterList();
00105 
00109     CSLEnvelope** GetEnvelopeList();
00110 
00114     SI_Error ClearClusters();
00115 
00120     SI_Error UnconnectEnvelope( CSLEnvelope* in_pToUnconnect );
00121 
00126     CSLCluster* ConnectCluster( CSLCluster* in_pNewCluster );
00127 
00132     CSLEnvelope* ConnectEnvelope( CSLEnvelope* in_pNewEnvelope );
00133 
00137     CSLTransform* GetBasePose();
00138 
00142     CSLTransform* CreateBasePose();
00143 
00147     SI_Error DestroyBasePose();
00148 
00152     CSLGlobalMaterial* GlobalMaterial();
00153 
00157     SI_Error AddGlobalMaterial();
00158 
00162     CSLTransform* Transform();
00163 
00167     CSLVisibility* Visibility();
00168 
00172     CSLModel* Parent();
00173 
00177     CSLPrimitive* Primitive();
00178 
00183     CSLMixer* ConnectMixer(CSLMixer *in_pNewMixer);
00184 
00188     virtual CSLMixer* CreateMixer();
00189 
00193     SI_Error DestroyMixer();
00194 
00198     CSLMixer* Mixer();
00199 
00204     CSLModel* ConnectModel(CSLModel *in_pNewModel);
00205 
00210     CSLVisibility* ConnectVisibility(CSLVisibility *in_pNewVisibility);
00211 
00216     CSLTransform* ConnectTransform(CSLTransform *in_pNewTransform);
00217 
00222     CSLTransform* ConnectBasePose(CSLTransform *in_pNewBasePose);
00223 
00228     CSLPrimitive* ConnectPrimitive(CSLPrimitive *in_pNewPrimitive);
00229 
00234     CSLGlobalMaterial* ConnectGlobalMaterial(CSLGlobalMaterial* in_pNewGlobalMaterial);
00235 
00236     // Primitive and children manipulation.
00237 
00241     ETemplateType GetPrimitiveType();
00242 
00246     virtual CSLModel* AddCamera();
00247 
00251     virtual CSLModel* AddXSICamera();
00252 
00256     CSLModel* AddCurveList();
00257 
00261     virtual CSLModel* AddDirectionalLight();
00262 
00266     CSLModel* AddIKChain(SI_Int in_nNbJoints);
00267 
00271     CSLModel* AddIKRoot();
00272 
00276     CSLModel* AddIKJoint();
00277 
00281     CSLModel* AddIKEffector();
00282 
00286     virtual CSLModel* AddInfiniteLight();
00287 
00291     virtual CSLModel* AddInstance();
00292 
00296     CSLModel* AddMesh();
00297 
00301     virtual CSLModel* AddXSIMesh();
00302 
00306     virtual CSLModel* AddModel();
00307 
00311     CSLModel* AddNull();
00312 
00316     CSLModel* AddPatch();
00317 
00321     virtual CSLModel* AddPointLight();
00322 
00326     virtual CSLModel* AddSpotLight();
00327 
00331     CSLModel* AddSurfaceMesh();
00332 
00336     CSLModel** GetChildrenList();
00337 
00341     SI_Error ClearChildren();
00342 
00346     SI_Int GetChildrenCount();
00347 
00352     SI_Error RemoveChild(CSLModel* in_pChild);
00353 
00358     SI_Error RemoveChild(SI_Int in_nIndex);
00359 
00364     SI_Error Reparent(CSLModel *in_pNewParent);
00365 
00369     CSLFXTree* AddFXTree();
00370 
00375     SI_Error RemoveFXTree( SI_Int in_nIndex );
00376 
00381     SI_Error RemoveFXTree( CSLFXTree* in_pToRemove );
00382 
00386     SI_Error ClearFXTrees();
00387 
00392     CSLFXTree* ConnectFXTree( CSLFXTree* in_pToConnect );
00393 
00397     CSLFXTree** GetFXTreeList();
00398 
00402     SI_Int GetFXTreeCount();
00403 
00408     CSLFXTree* FindFXTree( SI_Char* in_szFXTreeName );
00409 
00413     CSLXSITransform* XSITransform();
00414 
00419     CSLXSITransform* ConnectXSITransform(CSLXSITransform *in_pNewTransform);
00420 
00424     CSLXSIBasePose* GetXSIBasePose();
00425 
00430     CSLXSIBasePose* ConnectXSIBasePose(CSLXSIBasePose *in_pNewBasePose);
00431 
00435     CSLXSIBasePose* CreateXSIBasePose();
00436 
00440     SI_Error DestroyXSIBasePose();
00441 
00446     virtual const SI_Char* GetParameterName(CSLAnimatableType* in_pParameter);
00447 
00452     SI_Error UnconnectModel(CSLModel *in_pModel);
00453 
00454 protected:
00455 
00456     CSLModel* CreateLightTemplate(CdotXSITemplate **out_ppLightTemplate);
00457     SI_Bool FindSpecificChildrenRecursively(CSLModel *in_pSource, CSLModel *in_pTarget);
00458 
00459     CSLVisibility* m_pVisibility;
00460     CSIBCArray<CSLCluster*> m_Clusters;
00461     CSLMixer* m_pMixer;
00462     CSIBCArray<CSLEnvelope*> m_Envelopes;
00463     CSLTransform* m_pLocalTransform;
00464     CSLTransform* m_pBasepose;
00465     CSLGlobalMaterial* m_pGlobalMaterial;
00466     CSLPrimitive* m_pPrimitive;
00467     CSIBCArray<CSLModel*> m_Children;
00468     CSIBCArray<CSLFXTree*> m_FXTrees;
00469     CSLXSITransform* m_pXSITransform;
00470     CSLXSIBasePose* m_pXSIBasePose;
00471 };
00472 
00473 #endif