NurbsSurface.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 _NURBSSURFACE_H
00013 #define _NURBSSURFACE_H
00014 
00015 #include "Geometry.h"
00016 
00017 
00018 #ifndef _SL_FLOAT_ARRAY_PROXY_EXPORT_
00019 #define _SL_FLOAT_ARRAY_PROXY_EXPORT_
00020 
00021 //XSITEMPLATEEXP template class XSIEXPORT CSLArrayProxy<SI_Float, SI_Float, 1>;
00022 //XSITEMPLATEEXP template class XSIEXPORT CSLArrayProxy<CSIBCVector4D, SI_Float, 4>;
00023 
00024 #endif // _SL_FLOAT_ARRAY_PROXY_EXPORT_
00025 
00026 class CSLNurbsProjection;
00027 class CSLNurbsTrim;
00028 
00029 
00033 class XSIEXPORT CSLNurbsSurface
00034     : public CSLGeometry
00035 {
00036 public:
00040     typedef CSLArrayProxy<SI_Float, SI_Float, 1>        CSLFloatArray;
00041 
00045     typedef CSLArrayProxy<CSIBCVector4D, SI_Float, 4>   CSLVector4DArray;
00046 
00050     enum EParametrizationType
00051     {
00052         SI_UNIFORM,         
00053         SI_NON_UNIFORM,     
00054         SI_CHORD_LENGTH,    
00055         SI_CENTRIPETAL,     
00056     };
00057 
00064     CSLNurbsSurface(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00065 
00068     virtual ~CSLNurbsSurface();
00069 
00073     virtual SI_Error        Fix();
00074 
00079     virtual SI_Error Synchronize();
00080 
00084     virtual ETemplateType   Type() { return SI_NURBS_SURFACE; }
00085 
00089     SI_Int                  GetUDegree();
00090 
00095     SI_Void                 SetUDegree(SI_Int in_nValue);
00096 
00100     SI_Int                  GetVDegree();
00101 
00106     SI_Void                 SetVDegree(SI_Int in_nValue);
00107 
00111     SI_Bool                 GetUClosedFlag();
00112 
00117     SI_Void                 SetUClosedFlag(SI_Bool in_nValue);
00118 
00122     SI_Bool                 GetVClosedFlag();
00123 
00128     SI_Void                 SetVClosedFlag(SI_Bool in_nValue);
00129 
00133     EParametrizationType    GetParametrization();
00134 
00139     SI_Void                 SetParametrization(EParametrizationType in_Type);
00140 
00144     SI_Int                  GetUKnotCount();
00145 
00149     CSLFloatArray*          GetUKnotList();
00150 
00154     SI_Float*               GetUKnotListPtr();
00155 
00159     SI_Int                  GetVKnotCount();
00160 
00164     CSLFloatArray*          GetVKnotList();
00165 
00169     SI_Float*               GetVKnotListPtr();
00170 
00174     SI_Int                  GetUControlPointCount();
00175 
00180     SI_Void                 SetUControlPointCount(SI_Int in_nValue);
00181 
00185     SI_Int                  GetVControlPointCount();
00186 
00191     SI_Void                 SetVControlPointCount(SI_Int in_nValue);
00192 
00196     SI_Int                  GetControlPointCount();
00197 
00201     CSLVector4DArray*       GetControlPointList();
00202 
00206     CSIBCVector4D*          GetControlPointListPtr();
00207 
00209     // Nurbs projection functionnality ////////////////////////////////////////
00211 
00216     CSLNurbsProjection* AddNurbsProjection();
00217 
00222     SI_Error RemoveNurbsProjection( SI_Int in_nIndex );
00223 
00228     SI_Error RemoveNurbsProjection( CSLNurbsProjection* in_pToRemove );
00229 
00233     SI_Error ClearNurbsProjections();
00234 
00239     CSLNurbsProjection* ConnectNurbsProjection( CSLNurbsProjection* in_pToConnect );
00240 
00245     CSLNurbsProjection** GetNurbsProjections();
00246 
00250     SI_Int GetNurbsProjectionCount();
00251 
00256     CSLNurbsProjection* FindNurbsProjection( SI_Char* in_szNurbsProjectionName );
00257 
00259     // Nurbs trim functionnality //////////////////////////////////////////////
00261 
00265     CSLNurbsTrim* AddNurbsTrim();
00266 
00272     SI_Error RemoveNurbsTrim( SI_Int in_nIndex );
00273 
00278     SI_Error RemoveNurbsTrim( CSLNurbsTrim* in_pToRemove );
00279 
00283     SI_Error ClearNurbsTrims();
00284 
00289     CSLNurbsTrim* ConnectNurbsTrim( CSLNurbsTrim* in_pToConnect );
00290 
00295     CSLNurbsTrim** GetNurbsTrims();
00296 
00300     SI_Int GetNurbsTrimCount();
00301 
00306     CSLNurbsTrim* FindNurbsTrim( SI_Char* in_szNurbsTrimName );
00307 
00308 private:
00309     CSLIntProxy             m_UDegree;
00310     CSLIntProxy             m_VDegree;
00311     CSLBoolProxy            m_UClosed;
00312     CSLBoolProxy            m_VClosed;
00313     CSLEnumProxy<EParametrizationType, SI_CENTRIPETAL>  m_Parametrization;
00314     CSLIntProxy             m_NbUControlPoints;
00315     CSLIntProxy             m_NbVControlPoints;
00316     CSLFloatArray           m_UKnots;
00317     CSLFloatArray           m_VKnots;
00318     CSLVector4DArray        m_ControlPoints;
00319     CSIBCArray<CSLNurbsProjection*> m_NurbsProjections;
00320     CSIBCArray<CSLNurbsTrim*> m_NurbsTrims;
00321 
00322     void *m_pReserved;  // reserved for future extension
00323 };
00324 
00325 #endif