00001
00004 #ifndef _FBXSDK_NURB_H_
00005 #define _FBXSDK_NURB_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/kfbxgeometry.h>
00050
00051 #include <fbxfilesdk_nsbegin.h>
00052
00053 class KFbxPatch;
00054 class KFbxSdkManager;
00055
00056
00066 class KFBX_DLL KFbxNurb : public KFbxGeometry
00067 {
00068 KFBXOBJECT_DECLARE(KFbxNurb,KFbxGeometry);
00069 public:
00071 virtual EAttributeType GetAttributeType() const;
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 int* GetUMultiplicityVector() const;
00159
00165 int* GetVMultiplicityVector() const;
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
00204 int GetUSpanCount() const;
00205
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
00245
00247
00248
00249
00250
00251
00252
00254
00255 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00256
00257 public:
00258
00259
00260 virtual KFbxObject* Clone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType = eDEEP_CLONE) const;
00261
00262 protected:
00263
00264 KFbxNurb(KFbxSdkManager& pManager, char const* pName);
00265 virtual ~KFbxNurb();
00266
00267 virtual void Destruct(bool pRecursive, bool pDependents);
00268
00270 KFbxNurb& operator=(KFbxNurb const& pNurb);
00271
00272 virtual KString GetTypeName() const;
00273 virtual KStringList GetTypeFlags() const;
00274
00275 kUInt mUOrder, mVOrder;
00276 int mUCount, mVCount;
00277 int mUStep, mVStep;
00278 ENurbType mUType, mVType;
00279
00280 double* mUKnotVector;
00281 double* mVKnotVector;
00282
00283 int* mUMultiplicityVector;
00284 int* mVMultiplicityVector;
00285
00286 ESurfaceMode mSurfaceMode;
00287
00288
00289 bool mApplyFlipUV;
00290 bool mApplyFlipLinks;
00291
00292
00293 typedef enum
00294 {
00295 eNurbTypeUnknown,
00296 eWrongNumberOfControlPoint,
00297 eWeightTooSmall,
00298 eUMultiplicityVectorError,
00299 eVMultiplicityVectorError,
00300 eUKnotVectorError,
00301 eVKnotVectorError,
00302 eErrorCount
00303 } EError;
00304
00305 friend class KFbxReaderFbx;
00306 friend class KFbxReaderFbx6;
00307 friend struct KFbxReaderFbx7Impl;
00308 friend class KFbxWriterFbx;
00309 friend class KFbxWriterFbx6;
00310 friend struct KFbxWriterFbx7Impl;
00311 friend class KFbxGeometryConverter;
00312
00313 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00314
00315 };
00316
00317 typedef KFbxNurb* HKFbxNurb;
00318
00319 #include <fbxfilesdk_nsend.h>
00320
00321 #endif // #ifndef _FBXSDK_NURB_H_
00322
00323