# Cluster.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
    00012 #ifndef _CLUSTER_H
    00013 #define _CLUSTER_H
    00014
    00015 #include "Template.h"
    00016 #include "XSIClusterInfo.h"
    00017
    00018 #ifndef _SL_INT_ARRAY_PROXY_EXPORT_
    00019 #define _SL_INT_ARRAY_PROXY_EXPORT_
    00020
    00021 //XSITEMPLATEEXP template class XSIEXPORT CSLArrayProxy<SI_Int, SI_Int, 1>;
    00022
    00023 #endif // _SL_INT_ARRAY_PROXY_EXPORT_
    00024
    00025 // Forward declaration
    00026 class CSLWeightingType;
    00027 class CLSModel;
    00028 class CSLBaseShape;
    00029 class CSLUserDataList;
    00030
    00031
    00035 class XSIEXPORT CSLCluster
    00036     : public CSLTemplate
    00037 {
    00038 public:
    00042     typedef CSLArrayProxy<SI_Int, SI_Int, 1> CSLIntArray;
    00043
    00047     enum EClusterWeightingType
    00048     {
    00049         SI_AVERAGE,
    00050         SI_ADDITIVE,
    00051     };
    00052
    00057     virtual SI_Error Synchronize();
    00058
    00062     virtual ETemplateType Type() { return SI_CLUSTER; }
    00063
    00070     CSLCluster(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
    00071
    00074     virtual ~CSLCluster();
    00075
    00079     CSLModel* GetReference();
    00080
    00084     CSLModel* GetCenter();
    00085
    00090     SI_Void SetCenter(CSLModel* in_pNewCenter);
    00091
    00095     CSLBaseShape* CreateShape();
    00096
    00100     CSLBaseShape* Shape();
    00101
    00105     SI_Error DestroyShape();
    00106
    00110     SI_Int GetVertexIndicesCount();
    00111
    00115     CSLIntArray* GetVertexIndicesList();
    00116
    00120     SI_Int* GetVertexIndicesListPtr();
    00121
    00125     EClusterWeightingType GetWeightingType();
    00126
    00131     SI_Void SetWeightingType(EClusterWeightingType in_Type);
    00132
    00133     // Connection functions.
    00138     CSLBaseShape* ConnectShape(CSLBaseShape* in_pNewShape);
    00139
    00141     // UserDataList Functionality /////////////////////////////////////////////
    00143
    00147     CSLUserDataList* AddUserDataList();
    00148
    00153     SI_Error RemoveUserDataList( SI_Int in_nIndex );
    00154
    00159     SI_Error RemoveUserDataList( CSLUserDataList* in_pToRemove );
    00160
    00164     SI_Error ClearUserDataLists();
    00165
    00170     CSLUserDataList* ConnectUserDataList( CSLUserDataList* in_pToConnect );
    00171
    00175     CSLUserDataList** GetUserDataLists();
    00176
    00180     SI_Int GetUserDataListCount();
    00181
    00186     CSLUserDataList* FindUserDataList( SI_Char* in_szUserDataListName );
    00187
    00188     CSLXSIClusterInfo* GetClusterInfo();
    00189
    00190     CSLXSIClusterInfo* ConnectClusterInfo(CSLXSIClusterInfo* in_pClusterInfo);
    00191
    00192     virtual SI_Error Fix();
    00193
    00194 private:
    00195     CSLStrEnumProxy<EClusterWeightingType, SI_ADDITIVE> m_WeightingType;
    00196
    00197 /*
    00198     We might activate this once the cluster type are set to strings.  It is also possible
    00199     that we will need to add a separate implementation of the whole class in 3.6.  If we do
    00200     use the line below, the constructor will have to be updated as well.
    00201
    00202      CSLStrEnumProxy<EClusterType, SI_SUB_CURVE> m_ClusterType;
    00203 */
    00204
    00205     CSLModel* m_pClusterCenter;
    00206     CSLBaseShape* m_pShape;
    00207     CSLIntArray m_VertexIndices;
    00208     CSIBCArray<CSLUserDataList*> m_UserDataLists;
    00209
    00210     void *m_pReserved;  // reserved for future extension
    00211 };
    00212
    00213 #endif