00001
00002
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
00024
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
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
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;
00316 };
00317
00318 #endif