00001
00004 #ifndef FBXFILESDK_KFBXPLUGINS_KFBXNURBSSURFACE_H
00005 #define FBXFILESDK_KFBXPLUGINS_KFBXNURBSSURFACE_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 <fbxfilesdk/components/kbaselib/kaydaradef_h.h>
00043 #include <fbxfilesdk/components/kbaselib/kaydara.h>
00044
00045 #include <fbxfilesdk/kfbxplugins/kfbxnode.h>
00046 #include <fbxfilesdk/kfbxplugins/kfbxgeometry.h>
00047
00048 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00049
00050 class KFbxPatch;
00051 class KFbxSdkManager;
00052
00062 class KFBX_DLL KFbxNurbsSurface : public KFbxGeometry
00063 {
00064 KFBXOBJECT_DECLARE(KFbxNurbsSurface,KFbxGeometry);
00065 public:
00067 virtual EAttributeType GetAttributeType() const { return KFbxNodeAttribute::eNURBS_SURFACE; }
00068
00070 void Reset();
00071
00076
00080 void SetSurfaceMode(KFbxGeometry::ESurfaceMode pMode);
00081
00085 inline ESurfaceMode GetSurfaceMode() const {return mSurfaceMode;}
00086
00092 typedef enum
00093 {
00094 ePERIODIC,
00095 eCLOSED,
00096 eOPEN
00097 } ENurbType;
00098
00107 void InitControlPoints(int pUCount, ENurbType pUType, int pVCount, ENurbType pVType);
00108
00112 inline int GetUCount() const {return mUCount;}
00113
00117 inline int GetVCount() const {return mVCount;}
00118
00122 inline ENurbType GetNurbUType() const {return mUType;}
00123
00127 inline ENurbType GetNurbVType() const {return mVType;}
00128
00132 int GetUKnotCount() const;
00133
00137 double* GetUKnotVector() const;
00138
00142 int GetVKnotCount() const;
00143
00147 double* GetVKnotVector() const;
00148
00154
00155
00161
00162
00167 void SetOrder(kUInt pUOrder, kUInt pVOrder);
00168
00172 inline int GetUOrder() const {return mUOrder;}
00173
00177 inline int GetVOrder() const {return mVOrder;}
00178
00184 void SetStep(int pUStep, int pVStep);
00185
00189 inline int GetUStep() const {return mUStep;}
00190
00194 inline int GetVStep() const {return mVStep;}
00195
00196
00197
00198
00199
00200 int GetUSpanCount() const;
00201
00202
00203
00204
00205
00206 int GetVSpanCount() const;
00207
00209
00214
00218 void SetApplyFlipUV(bool pFlag);
00219
00223 bool GetApplyFlipUV() const;
00224
00228 void SetApplyFlipLinks(bool pFlag);
00229
00233 bool GetApplyFlipLinks() const;
00234
00238 bool GetApplyFlip() const { return GetApplyFlipUV() || GetApplyFlipLinks(); }
00239
00244 void AddCurveOnSurface( KFbxNode* pCurve );
00245
00250 KFbxNode* GetCurveOnSurface( int pIndex );
00251
00256 KFbxNode const* GetCurveOnSurface( int pIndex ) const;
00257
00260 int GetCurveOnSurfaceCount() const;
00261
00266 bool RemoveCurveOnSurface( KFbxNode* pCurve );
00267
00269
00273 bool IsRational();
00274
00275
00277
00278
00279
00280
00281
00282
00284
00285
00286 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00287
00288 public:
00289
00290 void SetFlipNormals(bool pFlipNormals);
00291
00292 bool GetFlipNormals() const;
00293
00294
00295
00296 virtual KFbxObject* Clone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType = eDEEP_CLONE) const;
00297
00298 protected:
00299
00300
00301 KFbxNurbsSurface(KFbxSdkManager& pManager, char const* pName);
00302 virtual ~KFbxNurbsSurface();
00303
00304 virtual void Destruct(bool pRecursive, bool pDependents);
00305
00307 KFbxNurbsSurface& operator=(KFbxNurbsSurface const& pNurb);
00308
00309 virtual KString GetTypeName() const;
00310 virtual KStringList GetTypeFlags() const;
00311
00312 kUInt mUOrder, mVOrder;
00313 int mUCount, mVCount;
00314 int mUStep, mVStep;
00315 ENurbType mUType, mVType;
00316
00317 double* mUKnotVector;
00318 double* mVKnotVector;
00319
00320
00321
00322
00323 ESurfaceMode mSurfaceMode;
00324
00325
00326 bool mApplyFlipUV;
00327 bool mApplyFlipLinks;
00328
00329 bool mFlipNormals;
00330
00331 public:
00332
00333 typedef enum
00334 {
00335 eNurbTypeUnknown,
00336 eWrongNumberOfControlPoint,
00337 eWeightTooSmall,
00338
00339
00340 eUKnotVectorError,
00341 eVKnotVectorError,
00342 eErrorCount
00343 } EError;
00344
00345 protected:
00346 friend class KFbxGeometryConverter;
00347
00348 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00349
00350 };
00351
00352 typedef KFbxNurbsSurface* HKFbxNurbsSurface;
00353
00354 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00355
00356 #endif // FBXFILESDK_KFBXPLUGINS_KFBXNURBSSURFACE_H
00357