00001
00004 #ifndef _FBXSDK_NURBS_SURFACE_H_
00005 #define _FBXSDK_NURBS_SURFACE_H_
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #include <kaydaradef.h>
00043 #ifndef KFBX_DLL
00044 #define KFBX_DLL K_DLLIMPORT
00045 #endif
00046
00047 #include <kaydara.h>
00048
00049 #include <kfbxplugins/kfbxnode.h>
00050 #include <kfbxplugins/kfbxgeometry.h>
00051
00052 #include <fbxfilesdk_nsbegin.h>
00053
00054 class KFbxPatch;
00055 class KFbxSdkManager;
00056
00066 class KFBX_DLL KFbxNurbsSurface : public KFbxGeometry
00067 {
00068 KFBXOBJECT_DECLARE(KFbxNurbsSurface,KFbxGeometry);
00069 public:
00071 virtual EAttributeType GetAttributeType() const { return KFbxNodeAttribute::eNURBS_SURFACE; }
00072
00074 void Reset();
00075
00080
00084 void SetSurfaceMode(KFbxGeometry::ESurfaceMode pMode);
00085
00089 inline ESurfaceMode GetSurfaceMode() const {return mSurfaceMode;}
00090
00096 typedef enum
00097 {
00098 ePERIODIC,
00099 eCLOSED,
00100 eOPEN
00101 } ENurbType;
00102
00111 void InitControlPoints(int pUCount, ENurbType pUType, int pVCount, ENurbType pVType);
00112
00116 inline int GetUCount() const {return mUCount;}
00117
00121 inline int GetVCount() const {return mVCount;}
00122
00126 inline ENurbType GetNurbUType() const {return mUType;}
00127
00131 inline ENurbType GetNurbVType() const {return mVType;}
00132
00136 int GetUKnotCount() const;
00137
00141 double* GetUKnotVector() const;
00142
00146 int GetVKnotCount() const;
00147
00151 double* GetVKnotVector() const;
00152
00158
00159
00165
00166
00171 void SetOrder(kUInt pUOrder, kUInt pVOrder);
00172
00176 inline int GetUOrder() const {return mUOrder;}
00177
00181 inline int GetVOrder() const {return mVOrder;}
00182
00188 void SetStep(int pUStep, int pVStep);
00189
00193 inline int GetUStep() const {return mUStep;}
00194
00198 inline int GetVStep() const {return mVStep;}
00199
00200
00201
00202
00203
00204 int GetUSpanCount() const;
00205
00206
00207
00208
00209
00210 int GetVSpanCount() const;
00211
00213
00218
00222 void SetApplyFlipUV(bool pFlag);
00223
00227 bool GetApplyFlipUV() const;
00228
00232 void SetApplyFlipLinks(bool pFlag);
00233
00237 bool GetApplyFlipLinks() const;
00238
00242 bool GetApplyFlip() const { return GetApplyFlipUV() || GetApplyFlipLinks(); }
00243
00248 void AddCurveOnSurface( KFbxNode* pCurve );
00249
00250
00251
00252
00253
00254 KFbxNode* GetCurveOnSurface( int pIndex );
00255 KFbxNode const* GetCurveOnSurface( int pIndex ) const;
00256
00257
00258
00259 int GetCurveOnSurfaceCount() const;
00260
00261
00262
00263
00264
00265 bool RemoveCurveOnSurface( KFbxNode* pCurve );
00266
00268
00272 bool IsRational();
00273
00274
00276
00277
00278
00279
00280
00281
00283
00284
00285 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00286
00287 public:
00288
00289 void SetFlipNormals(bool pFlipNormals);
00290
00291 bool GetFlipNormals() const;
00292
00293
00294
00295 virtual KFbxObject* Clone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType = eDEEP_CLONE) const;
00296
00297 protected:
00298
00299
00300 KFbxNurbsSurface(KFbxSdkManager& pManager, char const* pName);
00301 virtual ~KFbxNurbsSurface();
00302
00303 virtual void Destruct(bool pRecursive, bool pDependents);
00304
00306 KFbxNurbsSurface& operator=(KFbxNurbsSurface const& pNurb);
00307
00308 virtual KString GetTypeName() const;
00309 virtual KStringList GetTypeFlags() const;
00310
00311 kUInt mUOrder, mVOrder;
00312 int mUCount, mVCount;
00313 int mUStep, mVStep;
00314 ENurbType mUType, mVType;
00315
00316 double* mUKnotVector;
00317 double* mVKnotVector;
00318
00319
00320
00321
00322 ESurfaceMode mSurfaceMode;
00323
00324
00325 bool mApplyFlipUV;
00326 bool mApplyFlipLinks;
00327
00328 bool mFlipNormals;
00329
00330
00331 typedef enum
00332 {
00333 eNurbTypeUnknown,
00334 eWrongNumberOfControlPoint,
00335 eWeightTooSmall,
00336
00337
00338 eUKnotVectorError,
00339 eVKnotVectorError,
00340 eErrorCount
00341 } EError;
00342
00343 friend class KFbxReaderFbx;
00344 friend class KFbxReaderFbx6;
00345 friend struct KFbxReaderFbx7Impl;
00346 friend class KFbxWriterFbx;
00347 friend class KFbxWriterFbx6;
00348 friend struct KFbxWriterFbx7Impl;
00349 friend class KFbxGeometryConverter;
00350
00351 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00352
00353 };
00354
00355 typedef KFbxNurbsSurface* HKFbxNurbsSurface;
00356
00357 #include <fbxfilesdk_nsend.h>
00358
00359 #endif // #ifndef _FBXSDK_NURBS_SURFACE_H_
00360
00361