# 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