xsi_polygonmesh.h
Go to the documentation of this file.
00001 //*****************************************************************************
00011 //*****************************************************************************
00012 
00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00014 #pragma once
00015 #endif
00016 
00017 #ifndef __XSIPOLYGONMESH_H__
00018 #define __XSIPOLYGONMESH_H__
00019 
00020 #include <xsi_geometry.h>
00021 #include <xsi_clusterproperty.h>
00022 #include <xsi_pointlocatordata.h>
00023 
00024 namespace XSI {
00025 
00026 class CVertexRefArray;
00027 class CEdgeRefArray;
00028 class CPolygonFaceRefArray;
00029 class CPolygonNodeRefArray;
00030 class CGeometryAccessor;
00031 class CMeshBuilder;
00032 class CClusterPropertyBuilder;
00033 
00034 //*****************************************************************************
00064 //*****************************************************************************
00065 
00066 class SICPPSDKDECL PolygonMesh : public Geometry
00067 {
00068 public:
00070     PolygonMesh();
00071 
00073     ~PolygonMesh();
00074 
00078     PolygonMesh(const CRef& in_ref);
00079 
00083     PolygonMesh(const PolygonMesh& in_obj);
00084 
00088     PolygonMesh(const Geometry& in_obj);
00089 
00094     bool IsA( siClassID in_ClassID) const;
00095 
00099     siClassID GetClassID() const;
00100 
00106     PolygonMesh& operator=(const PolygonMesh& in_obj);
00107 
00113     PolygonMesh& operator=(const Geometry& in_geom);
00114 
00120     PolygonMesh& operator=(const CRef& in_ref);
00121 
00125     CVertexRefArray GetVertices() const;
00126 
00130     CEdgeRefArray GetEdges() const;
00131 
00135     CPolygonFaceRefArray GetPolygons() const;
00136 
00140     CPolygonNodeRefArray GetNodes() const;
00141 
00192     CStatus Set( const MATH::CVector3Array& in_vertices,
00193             const CLongArray& in_polygonDescr );
00194 
00209     CStatus Get( MATH::CVector3Array& io_vertices, CLongArray& io_polygonDescr ) const;
00210 
00216     CStatus PutCurrentVertexColor( const ClusterProperty& = ClusterProperty());
00217 
00228     ClusterProperty GetCurrentVertexColor( void ) const;
00229 
00234     ClusterProperty AddVertexColor( const CString& name = CString() );
00235 
00239     CRefArray GetVertexColors( void ) const;
00240 
00283     CGeometryAccessor GetGeometryAccessor
00284     (
00285         siConstructionMode      in_mode = siConstructionModeModeling,
00286         siSubdivisionRuleType   in_type = siCatmullClark,
00287         LONG                    in_subdLevel = 0,
00288         bool                    in_bUseLoopForTriangles = false,
00289         bool                    in_bUseDiscontinuity = true,
00290         double                  in_discontinuityAngle = 60.0
00291     ) const;
00292 
00297     CMeshBuilder GetMeshBuilder() const;
00298 
00303     CClusterPropertyBuilder GetClusterPropertyBuilder() const;
00304 
00389     CStatus GetPolygonIndexArray
00390     (
00391         const PointLocatorData& in_ptLocators,
00392         LONG in_nbPointLocatorsIndices, //-1 if all
00393         const LONG* in_pPointLocatorsIndices, // 0 if all
00394         LONG* out_pIndices
00395     ) const;
00396 
00426     CStatus GetTriangleVertexIndexArray
00427     (
00428         const PointLocatorData& in_ptLocators,
00429         LONG in_nbPointLocatorsIndices, //-1 if all
00430         const LONG* in_pPointLocatorsIndices, // 0 if all
00431         LONG* out_pIndices
00432     ) const;
00433 
00463     CStatus GetTriangleNodeIndexArray
00464     (
00465         const PointLocatorData& in_ptLocators,
00466         LONG in_nbPointLocatorsIndices, //-1 if all
00467         const LONG* in_pPointLocatorsIndices, // 0 if all
00468         LONG* out_pIndices
00469     ) const;
00470 
00499     CStatus GetTriangleWeightArray
00500     (
00501         const PointLocatorData& in_ptLocators,
00502         LONG in_nbPointLocatorsIndices, //-1 if all
00503         const LONG* in_pPointLocatorsIndices, // 0 if all
00504         float* out_pWeights
00505     ) const;
00506 
00627     PointLocatorData ConstructPointLocators
00628     (
00629         LONG                    in_nbPointLocators,
00630         const LONG*             in_pPolygonIndices,
00631         const LONG*             in_pSubTriangleVertexIndices,
00632         const float*            in_pSubTriangleWeights
00633     ) const;
00634 
00635     private:
00636     PolygonMesh * operator&() const;
00637     PolygonMesh * operator&();
00638 };
00639 
00640 };
00641 
00642 #endif // __XSIPOLYGONMESH_H__