NurbsSurface.h

Go to the documentation of this file.
00001 //***************************************************************************************
00002 // File supervisor: Crosswalk team
00012 //***************************************************************************************
00013 
00014 #ifndef _NURBSSURFACE_H
00015 #define _NURBSSURFACE_H
00016 
00017 #include "Geometry.h"
00018 
00019 
00020 #ifndef _SL_FLOAT_ARRAY_PROXY_EXPORT_
00021 #define _SL_FLOAT_ARRAY_PROXY_EXPORT_
00022 
00023 //XSITEMPLATEEXP template class XSIEXPORT CSLArrayProxy<SI_Float, SI_Float, 1>;
00024 //XSITEMPLATEEXP template class XSIEXPORT CSLArrayProxy<CSIBCVector4D, SI_Float, 4>;
00025 
00026 #endif // _SL_FLOAT_ARRAY_PROXY_EXPORT_
00027 
00028 class CSLNurbsProjection;
00029 class CSLNurbsTrim;
00030 
00031 
00037 class XSIEXPORT CSLNurbsSurface
00038     : public CSLGeometry
00039 {
00040 public:
00043     typedef CSLArrayProxy<SI_Float, SI_Float, 1>        CSLFloatArray;
00044 
00047     typedef CSLArrayProxy<CSIBCVector4D, SI_Float, 4>   CSLVector4DArray;
00048 
00051     enum EParametrizationType
00052     {
00053         SI_UNIFORM,         
00054         SI_NON_UNIFORM,     
00055         SI_CHORD_LENGTH,    
00056         SI_CENTRIPETAL,     
00057     };
00058 
00065     CSLNurbsSurface(CSLScene* in_pScene, CSLModel *in_pModel, CdotXSITemplate* in_pTemplate);
00066 
00069     virtual ~CSLNurbsSurface();
00070 
00074     virtual SI_Error        Fix();
00075 
00079     virtual SI_Error Synchronize();
00080 
00084     virtual ETemplateType   Type() { return SI_NURBS_SURFACE; }
00085 
00089     SI_Int                  GetUDegree();
00090 
00094     SI_Void                 SetUDegree(SI_Int in_nValue);
00095 
00099     SI_Int                  GetVDegree();
00100 
00104     SI_Void                 SetVDegree(SI_Int in_nValue);
00105 
00109     SI_Bool                 GetUClosedFlag();
00110 
00114     SI_Void                 SetUClosedFlag(SI_Bool in_nValue);
00115 
00119     SI_Bool                 GetVClosedFlag();
00120 
00124     SI_Void                 SetVClosedFlag(SI_Bool in_nValue);
00125 
00129     EParametrizationType    GetParametrization();
00130 
00134     SI_Void                 SetParametrization(EParametrizationType in_Type);
00135 
00139     SI_Int                  GetUKnotCount();
00140 
00144     CSLFloatArray*          GetUKnotList();
00145 
00149     SI_Float*               GetUKnotListPtr();
00150 
00154     SI_Int                  GetVKnotCount();
00155 
00159     CSLFloatArray*          GetVKnotList();
00160 
00164     SI_Float*               GetVKnotListPtr();
00165 
00169     SI_Int                  GetUControlPointCount();
00170 
00174     SI_Void                 SetUControlPointCount(SI_Int in_nValue);
00175 
00179     SI_Int                  GetVControlPointCount();
00180 
00184     SI_Void                 SetVControlPointCount(SI_Int in_nValue);
00185 
00189     SI_Int                  GetControlPointCount();
00190 
00194     CSLVector4DArray*       GetControlPointList();
00195 
00199     CSIBCVector4D*          GetControlPointListPtr();
00200 
00202     // Nurbs projection functionnality ////////////////////////////////////////
00204 
00209     CSLNurbsProjection* AddNurbsProjection();
00210 
00215     SI_Error RemoveNurbsProjection( SI_Int in_nIndex );
00216 
00221     SI_Error RemoveNurbsProjection( CSLNurbsProjection* in_pToRemove );
00222 
00226     SI_Error ClearNurbsProjections();
00227 
00232     CSLNurbsProjection* ConnectNurbsProjection( CSLNurbsProjection* in_pToConnect );
00233 
00238     CSLNurbsProjection** GetNurbsProjections();
00239 
00243     SI_Int GetNurbsProjectionCount();
00244 
00249     CSLNurbsProjection* FindNurbsProjection( SI_Char* in_szNurbsProjectionName );
00250 
00252     // Nurbs trim functionnality //////////////////////////////////////////////
00254 
00258     CSLNurbsTrim* AddNurbsTrim();
00259 
00265     SI_Error RemoveNurbsTrim( SI_Int in_nIndex );
00266 
00271     SI_Error RemoveNurbsTrim( CSLNurbsTrim* in_pToRemove );
00272 
00276     SI_Error ClearNurbsTrims();
00277 
00282     CSLNurbsTrim* ConnectNurbsTrim( CSLNurbsTrim* in_pToConnect );
00283 
00288     CSLNurbsTrim** GetNurbsTrims();
00289 
00293     SI_Int GetNurbsTrimCount();
00294 
00299     CSLNurbsTrim* FindNurbsTrim( SI_Char* in_szNurbsTrimName );
00300 
00301 private:
00302     CSLIntProxy             m_UDegree;
00303     CSLIntProxy             m_VDegree;
00304     CSLBoolProxy            m_UClosed;
00305     CSLBoolProxy            m_VClosed;
00306     CSLEnumProxy<EParametrizationType, SI_CENTRIPETAL>  m_Parametrization;
00307     CSLIntProxy             m_NbUControlPoints;
00308     CSLIntProxy             m_NbVControlPoints;
00309     CSLFloatArray           m_UKnots;
00310     CSLFloatArray           m_VKnots;
00311     CSLVector4DArray        m_ControlPoints;
00312     CSIBCArray<CSLNurbsProjection*> m_NurbsProjections;
00313     CSIBCArray<CSLNurbsTrim*> m_NurbsTrims;
00314 
00315     void *m_pReserved;  // reserved for future extension
00316 };
00317 
00318 #endif