xsi_nurbssurfacemesh.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 __XSINURBSSURFACEMESH_H__
00018 #define __XSINURBSSURFACEMESH_H__
00019 
00020 #include <xsi_geometry.h>
00021 #include <xsi_nurbsdata.h>
00022 #include <xsi_pointlocatordata.h>
00023 
00024 namespace XSI {
00025 
00026 class CControlPointRefArray;
00027 class CNurbsSurfaceRefArray;
00028 class CKnotArray;
00029 class CTrimDataArray;
00030 class NurbsSurface;
00031 
00032 //*****************************************************************************
00056 //*****************************************************************************
00057 
00058 class SICPPSDKDECL NurbsSurfaceMesh : public Geometry
00059 {
00060 public:
00062     NurbsSurfaceMesh();
00063 
00065     ~NurbsSurfaceMesh();
00066 
00070     NurbsSurfaceMesh(const CRef& in_ref);
00071 
00075     NurbsSurfaceMesh(const NurbsSurfaceMesh& in_obj);
00076 
00080     NurbsSurfaceMesh(const Geometry& in_obj);
00081 
00086     bool IsA( siClassID in_ClassID) const;
00087 
00091     siClassID GetClassID() const;
00092 
00098     NurbsSurfaceMesh& operator=(const NurbsSurfaceMesh& in_obj);
00099 
00105     NurbsSurfaceMesh& operator=(const Geometry& in_geom);
00106 
00112     NurbsSurfaceMesh& operator=(const CRef& in_ref);
00113 
00117     CNurbsSurfaceRefArray GetSurfaces()const;
00118 
00130     CStatus GetClosestSurfacePosition
00131     (
00132         MATH::CVector3&         in_vPosition,
00133         LONG&                   out_lSurfaceIndex,
00134         double&                 out_dSquaredDistance,
00135         double&                 out_dUValue,
00136         double&                 out_dVValue,
00137         MATH::CVector3&         out_vPosition
00138     )const;
00139 
00140 
00147     CStatus Get
00148     (
00149         siNurbsFormat               in_siNurbsFormat,
00150         CNurbsSurfaceDataArray&     out_surfaces
00151     )const;
00152 
00165     CStatus Set
00166     (
00167         const CNurbsSurfaceDataArray&   in_surfaces,
00168         siNurbsFormat                   in_siNurbsFormat = siSINurbs
00169     );
00170 
00171 
00181     CStatus AddSurfaceWithTrim
00182     (
00183         const CNurbsSurfaceData&    in_surface,
00184         const CTrimCurveDataArray&  in_trims,
00185         siNurbsFormat               in_siNurbsFormat,
00186         NurbsSurface&               out_Surface
00187     );
00188 
00196     CStatus AddSurface
00197     (
00198         const CNurbsSurfaceData&    in_surface,
00199         siNurbsFormat               in_siNurbsFormat,
00200         NurbsSurface&               out_Surface
00201     );
00202 
00262     CStatus GetSubSurfaceIndexArray
00263     (
00264         const PointLocatorData& in_ptLocators,
00265         LONG in_nbPointLocatorsIndices, //-1 if all
00266         const LONG* in_pPointLocatorsIndices, // 0 if all
00267         LONG* out_pIndices
00268     ) const;
00269 
00365     CStatus GetNormalizedUVArray
00366     (
00367         const PointLocatorData& in_ptLocators,
00368         LONG in_nbPointLocatorsIndices, //-1 if all
00369         const LONG* in_pPointLocatorsIndices, // 0 if all
00370         float* out_pNormalizedUVs
00371     ) const;
00372 
00390     PointLocatorData ConstructPointLocators
00391     (
00392         LONG            in_nbPointLocators,
00393         const LONG*     in_pSubSurfaceIndices,
00394         const float*    in_pNormalizedUVs
00395     ) const;
00396 
00397     private:
00398     NurbsSurfaceMesh * operator&() const;
00399     NurbsSurfaceMesh * operator&();
00400 };
00401 
00402 };
00403 
00404 #endif // __XSINURBSSURFACEMESH_H__