TriangleList.h

00001 /****************************************************************************************
00002 THIS CODE IS PUBLISHED AS A SAMPLE ONLY AND IS PROVIDED "AS IS".
00003 IN NO EVENT SHALL SOFTIMAGE, AVID TECHNOLOGY, INC. AND/OR THEIR RESPECTIVE 
00004 SUPPLIERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
00005 DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
00006 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
00007 CONNECTION WITH THE USE OR PERFORMANCE OF THIS CODE . 
00008  
00009 COPYRIGHT NOTICE. Copyright © 1999-2002 Avid Technology Inc. . All rights reserved. 
00010 
00011 SOFTIMAGE is a registered trademark of Avid Technology Inc. or its subsidiaries 
00012 or divisions. Windows NT is a registered trademark of Microsoft Corp. All other
00013 trademarks contained herein are the property of their respective owners. 
00014 ****************************************************************************************/
00015 
00016 /******************************************************************************\
00017 *
00018 * File:          TriangleList.h
00019 * Creation date: January 15, 2002
00020 * Purpose:       Declaration of class 'CSLTriangleList'
00021 *
00022 \******************************************************************************/
00023 #ifndef _TRIANGLELIST_H
00024 #define _TRIANGLELIST_H
00025 
00026 #include "Template.h"
00027 
00028 class CSLBaseMaterial;
00029 
00030 struct SLTriangle
00031 {
00032     SI_Int  m_iVtx1;
00033     SI_Int  m_iVtx2;
00034     SI_Int  m_iVtx3;
00035 };
00036 
00050 class XSIEXPORT CSLTriangleList
00051     : public CSLTemplate
00052 {
00053 public:
00057     typedef CSLArrayProxy<SLTriangle, SI_Int, 3> CSLTriangleArray;
00058 
00059     CSLTriangleList(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00060     virtual ~CSLTriangleList();
00061 
00065     SI_Int                  GetTriangleCount() { return m_VertexIndices.GetUsed(); };
00066 
00070     SI_Int*                 GetVertexIndicesPtr() { return (SI_Int *) m_VertexIndices.ArrayPtr(); }
00071 
00075     CSLTriangleArray*       GetVertexIndices() { return &m_VertexIndices; }
00076 
00080     CSLTriangleArray*       CreateNormalIndices();
00081 
00085     CSLTriangleArray*       GetNormalIndices() { return m_NormalIndices; }
00086 
00090     SI_Int*                 GetNormalIndicesPtr();
00091 
00095     SI_Error                DestroyNormalIndices();
00096 
00100     CSLTriangleArray*       CreateColorIndices();
00101 
00105     CSLTriangleArray*       GetColorIndices() { return m_ColorIndices; }
00106 
00110     SI_Int*                 GetColorIndicesPtr();
00111 
00115     SI_Error                DestroyColorIndices();
00116 
00120     CSLTriangleArray*       AddUVArray();
00121 
00125     SI_Int                  GetUVArrayCount();
00126 
00130     SI_Int*                 GetUVIndicesPtr(SI_Int in_nId);
00131 
00136     CSLTriangleArray*       GetUVIndices(SI_Int in_nId);
00137 
00141     SI_Error                RemoveUVArray();
00142 
00146     SI_Error                ClearUVArrays();
00147 
00151     CSLBaseMaterial*        GetMaterial() { return m_pMaterial; }
00152 
00157     SI_Void                 SetMaterial(CSLBaseMaterial *in_pNewMaterial) { m_pMaterial = in_pNewMaterial; }
00158 
00159     virtual ETemplateType   Type() { return SI_TRIANGLE_LIST; }
00160     virtual SI_Error        Synchronize();
00161     virtual CSLAnimatableType* ParameterFromName(SI_Char *in_szName);
00162 
00163 private:
00164     CSLBaseMaterial*        m_pMaterial;
00165     CSLTriangleArray        m_VertexIndices;
00166 
00167     CSLTriangleArray*       m_NormalIndices;
00168     CSIBCArray<CSLTriangleArray* >  m_UVIndices;
00169     CSLTriangleArray*       m_ColorIndices;
00170 
00171     SI_Bool                 m_bSingleUV;
00172     SI_Int                  m_iArrayCount;
00173 
00174     void *m_pReserved;  // reserved for future extension
00175 };
00176 
00177 #endif