NurbsCurve.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 _NURBSCURVE_H
00013 #define _NURBSCURVE_H
00014 
00015 #include "Geometry.h"
00016 
00017 #ifndef _SL_FLOAT_ARRAY_PROXY_EXPORT_
00018 #define _SL_FLOAT_ARRAY_PROXY_EXPORT_
00019 
00020 //XSITEMPLATEEXP template class XSIEXPORT CSLArrayProxy<SI_Float, SI_Float, 1>;
00021 //XSITEMPLATEEXP template class XSIEXPORT CSLArrayProxy<CSIBCVector4D, SI_Float, 4>;
00022 
00023 #endif // _SL_FLOAT_ARRAY_PROXY_EXPORT_
00024 
00025 
00029 class XSIEXPORT CSLNurbsCurve
00030     : public CSLGeometry
00031 {
00032 public:
00036     typedef CSLArrayProxy<SI_Float, SI_Float, 1>        CSLFloatArray;
00037 
00041     typedef CSLArrayProxy<CSIBCVector4D, SI_Float, 4>   CSLVector4DArray;
00042 
00046     enum EParametrizationType
00047     {
00048         SI_UNIFORM,         
00049         SI_NON_UNIFORM,     
00050         SI_CHORD_LENGTH,    
00051         SI_CENTRIPETAL,     
00052     };
00053 
00060     CSLNurbsCurve(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00061 
00064     virtual ~CSLNurbsCurve();
00065 
00069     SI_Int                  GetDegree();
00070 
00075     SI_Void                 SetDegree(SI_Int in_nValue);
00076 
00080     SI_Bool                 GetClosedFlag();
00081 
00086     SI_Void                 SetClosedFlag(SI_Bool in_bValue);
00087 
00091     EParametrizationType    GetParametrization();
00092 
00097     SI_Void                 SetParametrization(EParametrizationType in_Type);
00098 
00102     SI_Int                  GetKnotCount();
00103 
00107     CSLFloatArray*          GetKnotList();
00108 
00112     SI_Float*               GetKnotListPtr();
00113 
00117     SI_Int                  GetControlPointCount();
00118 
00122     CSLVector4DArray*       GetControlPointList();
00123 
00127     CSIBCVector4D*          GetControlPointListPtr();
00128 
00133     virtual SI_Error Synchronize();
00134 
00138     virtual ETemplateType   Type() { return SI_NURBS_CURVE; }
00139 
00140 private:
00141     CSLIntProxy             m_Degree;
00142     CSLBoolProxy            m_Closed;
00143     CSLEnumProxy<EParametrizationType, SI_CENTRIPETAL>  m_Parametrization;
00144     CSLFloatArray           m_Knots;
00145     CSLVector4DArray        m_ControlPoints;
00146 
00147     void *m_pReserved;  // reserved for future extension
00148 };
00149 
00150 #endif
00151