00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_SCENE_SHADING_BINDING_OPERATOR_H_
00014 #define _FBXSDK_SCENE_SHADING_BINDING_OPERATOR_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #include <fbxsdk/scene/shading/fbxbindingtablebase.h>
00019
00020 #include <fbxsdk/core/base/fbxmap.h>
00021 #include <fbxsdk/core/base/fbxstring.h>
00022
00023 #include <fbxsdk/fbxsdk_nsbegin.h>
00024
00052 class FBXSDK_DLL FbxBindingOperator : public FbxBindingTableBase
00053 {
00054 FBXSDK_OBJECT_DECLARE(FbxBindingOperator,FbxBindingTableBase);
00055
00056 public:
00062 template <class FBXTYPE>
00063 bool Evaluate(FbxObject const* pObject, FBXTYPE* pResult) const
00064 {
00065 EFbxType lResultType;
00066 void* lResult = NULL;
00067
00068 bool lSuccess = Evaluate(pObject, &lResultType, &lResult);
00069
00070 if (lSuccess)
00071 {
00072 FbxTypeCopy(*pResult, lResult, lResultType);
00073 }
00074
00075 FreeEvaluationResult(lResultType, lResult);
00076
00077 return lSuccess;
00078 }
00079
00088 template <class FBXTYPE>
00089 bool ReverseEvaluation(FbxObject const* pObject, FBXTYPE * pInOut,
00090 bool setObj=false, int index=0) const
00091 {
00092
00093 void const* lIn = pInOut;
00094 void* lOut = NULL;
00095 EFbxType lOutType;
00096
00097 bool lSuccess = ReverseEvaluate(pObject, lIn, &lOut, &lOutType, setObj, index);
00098
00099 if (lSuccess)
00100 {
00101 FbxTypeCopy(*pInOut, lOut, lOutType);
00102 }
00103
00104 FreeEvaluationResult(lOutType, lOut);
00105
00106 return lSuccess;
00107 }
00108
00122 template <class FBXTYPE>
00123 bool EvaluateEntry(FbxObject const* pObject, char const* pEntryDestinationName, FBXTYPE* pResult) const
00124 {
00125 EFbxType lResultType;
00126 void* lResult = NULL;
00127
00128 bool lSuccess = EvaluateEntry(pObject, pEntryDestinationName, &lResultType, &lResult);
00129
00130 if (lSuccess)
00131 {
00132 FbxTypeCopy(*pResult, lResult, lResultType);
00133 }
00134
00135 FreeEvaluationResult(lResultType, lResult);
00136
00137 return lSuccess;
00138 }
00139
00144 FbxPropertyT<FbxString> FunctionName;
00145
00150 FbxPropertyT<FbxString> TargetName;
00151
00153
00155
00157 static const char* sFunctionName;
00159 static const char* sTargetName;
00160
00162 static const char* sDefaultFunctionName;
00164 static const char* sDefaultTargetName;
00165
00166
00168
00170
00174 static void RegisterFunctions();
00175
00179 static void UnregisterFunctions();
00180
00181
00186 class FBXSDK_DLL Function
00187 {
00188 public:
00190 virtual ~Function() {}
00191
00199 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const = 0;
00200
00212 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const = 0;
00213 };
00214
00218 class FBXSDK_DLL FunctionCreatorBase
00219 {
00220 public:
00222 virtual ~FunctionCreatorBase() {}
00223
00227 virtual char const* GetFunctionName() const = 0;
00228
00231 virtual Function* CreateFunction() const = 0;
00232 };
00233
00237 template <class FUNCTION>
00238 class FunctionCreator : public FunctionCreatorBase
00239 {
00240 public:
00241
00245 virtual char const* GetFunctionName() const
00246 {
00247 return FUNCTION::FunctionName;
00248 }
00249
00252 virtual Function* CreateFunction() const
00253 {
00254 return FbxNew< FUNCTION >();
00255 }
00256 };
00257
00261 class FBXSDK_DLL FunctionRegistry
00262 {
00263 public:
00267 static void RegisterFunctionCreator(FunctionCreatorBase const& pCreator)
00268 {
00269 sRegistry.Insert(pCreator.GetFunctionName(), &pCreator);
00270 }
00271
00275 static void UnregisterFunctionCreator(FunctionCreatorBase const& pCreator)
00276 {
00277 sRegistry.Remove(pCreator.GetFunctionName());
00278 }
00279
00283 static FunctionCreatorBase const* FindCreator(char const* pName)
00284 {
00285 RegistryType::RecordType* lRecord = sRegistry.Find(pName);
00286
00287 if (lRecord)
00288 {
00289 return lRecord->GetValue();
00290 }
00291 else
00292 {
00293 return NULL;
00294 }
00295 }
00296
00297 private:
00298 typedef FbxMap<char const*, FunctionCreatorBase const*, FbxCharCompare> RegistryType;
00299 static RegistryType sRegistry;
00300 };
00301
00302
00304
00305
00306
00307
00308
00309
00311 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00312 bool EvaluateEntry(FbxObject const* pObject, char const* pEntryDestinationName, EFbxType* pResultType, void** pResult) const;
00313
00314
00315 bool GetEntryProperty(FbxObject const* pObject, char const* pEntryDestinationName, FbxProperty & pProp) const;
00316
00317 protected:
00318
00319 FbxBindingOperator(FbxManager& pManager, char const* pName);
00320 virtual void Destruct(bool pRecursive, bool pDependents);
00321
00322 virtual bool ConstructProperties(bool pForceSet);
00323
00324 void InstantiateFunction();
00325
00333 bool Evaluate(FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00334
00337
00338 bool ReverseEvaluate(FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00339
00344 void FreeEvaluationResult(EFbxType pResultType, void* pResult) const;
00345
00346 Function* mFunction;
00347
00348 #endif //DOXYGEN_SHOULD_SKIP_THIS
00349 };
00350
00351
00355 class FbxNodePositionBOF : public FbxBindingOperator::Function
00356 {
00357 public:
00359 static char const* FunctionName;
00360
00370 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00371
00373 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00374
00376
00377
00378
00379
00380
00381
00383 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00384 FbxNodePositionBOF();
00385 virtual ~FbxNodePositionBOF();
00386
00387 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00388 };
00389
00390
00394 class FbxNodeDirectionBOF : public FbxBindingOperator::Function
00395 {
00396 public:
00398 static char const* FunctionName;
00399
00409 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00410
00412 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00413
00415
00416
00417
00418
00419
00420
00422 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00423 FbxNodeDirectionBOF();
00424 virtual ~FbxNodeDirectionBOF();
00425
00426 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00427 };
00428
00429 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00430
00432 class FbxAssignBOF : public FbxBindingOperator::Function
00433 {
00434 public:
00436 static char const* FunctionName;
00437
00444 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00445
00447 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00448
00450
00451
00452
00453
00454
00455
00457 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00458 FbxAssignBOF();
00459 virtual ~FbxAssignBOF();
00460
00461
00462 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00463 };
00464
00465
00469 class FbxConditionalBOF : public FbxBindingOperator::Function
00470 {
00471 public:
00473 static char const* FunctionName;
00474
00488 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00489 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00490
00492
00493
00494
00495
00496
00497
00499 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00500 FbxConditionalBOF();
00501 virtual ~FbxConditionalBOF();
00502
00503
00504 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00505 };
00506
00507
00511 class FbxSwitchBOF : public FbxBindingOperator::Function
00512 {
00513 public:
00515 static char const* FunctionName;
00516
00530 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00531 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00532
00534
00535
00536
00537
00538
00539
00541 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00542 FbxSwitchBOF();
00543 virtual ~FbxSwitchBOF();
00544
00545
00546 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00547 };
00548
00549
00550 class FbxTRSToMatrixBOF : public FbxBindingOperator::Function
00551 {
00552 public:
00554 static char const* FunctionName;
00555
00565 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00566 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00567
00569
00570
00571
00572
00573
00574
00576 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00577 FbxTRSToMatrixBOF();
00578 virtual ~FbxTRSToMatrixBOF();
00579
00580
00581 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00582 };
00583
00584
00585 class FbxAddBOF : public FbxBindingOperator::Function
00586 {
00587 public:
00589 static char const* FunctionName;
00590
00600 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00601 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00602
00604
00605
00606
00607
00608
00609
00611 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00612 FbxAddBOF();
00613 virtual ~FbxAddBOF();
00614
00615
00616 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00617 };
00618
00619
00620 class FbxSubstractBOF : public FbxBindingOperator::Function
00621 {
00622 public:
00624 static char const* FunctionName;
00625
00635 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00636 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00637
00639
00640
00641
00642
00643
00644
00646 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00647 FbxSubstractBOF();
00648 virtual ~FbxSubstractBOF();
00649
00650
00651 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00652 };
00653
00654
00655 class FbxMultiplyBOF : public FbxBindingOperator::Function
00656 {
00657 public:
00659 static char const* FunctionName;
00660
00670 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00671
00672 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00673
00675
00676
00677
00678
00679
00680
00682 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00683 FbxMultiplyBOF();
00684 virtual ~FbxMultiplyBOF();
00685
00686
00687 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00688 };
00689
00690
00691 class FbxMultiplyDistBOF : public FbxBindingOperator::Function
00692 {
00693 public:
00695 static char const* FunctionName;
00696
00706 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00707 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00708
00710
00711
00712
00713
00714
00715
00717 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00718 FbxMultiplyDistBOF();
00719 virtual ~FbxMultiplyDistBOF();
00720
00721
00722 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00723 };
00724
00725 class FbxOneOverXBOF : public FbxBindingOperator::Function
00726 {
00727 public:
00729 static char const* FunctionName;
00730
00740 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00741 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00742
00744
00745
00746
00747
00748
00749
00751 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00752 FbxOneOverXBOF();
00753 virtual ~FbxOneOverXBOF();
00754
00755
00756 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00757 };
00758
00759 class FbxPowerBOF : public FbxBindingOperator::Function
00760 {
00761 public:
00763 static char const* FunctionName;
00764
00774 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00775 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00776
00778
00779
00780
00781
00782
00783
00785 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00786 FbxPowerBOF();
00787 virtual ~FbxPowerBOF();
00788
00789
00790 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00791 };
00792
00793 class FbxDegreeToRadianBOF : public FbxBindingOperator::Function
00794 {
00795 public:
00797 static char const* FunctionName;
00798
00808 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00809 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00810
00812
00813
00814
00815
00816
00817
00819 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00820 FbxDegreeToRadianBOF();
00821 virtual ~FbxDegreeToRadianBOF();
00822
00823
00824 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00825 };
00826
00827
00828 class FbxVectorDegreeToVectorRadianBOF : public FbxBindingOperator::Function
00829 {
00830 public:
00832 static char const* FunctionName;
00833
00843 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00844 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00845
00847
00848
00849
00850
00851
00852
00854 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00855 FbxVectorDegreeToVectorRadianBOF();
00856 virtual ~FbxVectorDegreeToVectorRadianBOF();
00857
00858
00859 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00860 };
00861
00862
00863
00864 class FbxSphericalToCartesianBOF : public FbxBindingOperator::Function
00865 {
00866 public:
00868 static char const* FunctionName;
00869
00879 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00880 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00881
00883
00884
00885
00886
00887
00888
00890 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00891 FbxSphericalToCartesianBOF();
00892 virtual ~FbxSphericalToCartesianBOF();
00893
00894
00895 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00896 };
00897
00898
00899
00900 class FbxIsYupBOF : public FbxBindingOperator::Function
00901 {
00902 public:
00904 static char const* FunctionName;
00905
00915 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00916 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00917
00919
00920
00921
00922
00923
00924
00926 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00927 FbxIsYupBOF();
00928 virtual ~FbxIsYupBOF();
00929
00930
00931 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00932 };
00933
00934
00935
00939 class FbxSymbolIDBOF : public FbxBindingOperator::Function
00940 {
00941 public:
00943 static char const* FunctionName;
00944
00953 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00954 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00955
00957
00958
00959
00960
00961
00962
00964 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00965 FbxSymbolIDBOF();
00966 virtual ~FbxSymbolIDBOF();
00967
00968
00969 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
00970 };
00971
00972
00976 class FbxSpotDistributionChooserBOF : public FbxBindingOperator::Function
00977 {
00978 public:
00980 static char const* FunctionName;
00981
00991 virtual bool Evaluate(FbxBindingOperator const* pOperator, FbxObject const* pObject, EFbxType* pResultType, void** pResult) const;
00992
00994 virtual bool ReverseEvaluate(FbxBindingOperator const* pOperator, FbxObject const* pTarget, void const* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00995
00997
00998
00999
01000
01001
01002
01004 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01005 FbxSpotDistributionChooserBOF();
01006 virtual ~FbxSpotDistributionChooserBOF();
01007
01008
01009 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
01010 };
01011
01012 #endif //#ifndef DOXYGEN_SHOULD_SKIP_THIS
01013
01014 #include <fbxsdk/fbxsdk_nsend.h>
01015
01016 #endif