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/fbxsdk_nsbegin.h>
00021
00049 class FBXSDK_DLL FbxBindingOperator : public FbxBindingTableBase
00050 {
00051 FBXSDK_OBJECT_DECLARE(FbxBindingOperator, FbxBindingTableBase);
00052
00053 public:
00059 template <class FBXTYPE>
00060 bool Evaluate(const FbxObject* pObject, FBXTYPE* pResult) const
00061 {
00062 EFbxType lResultType;
00063 void* lResult = NULL;
00064
00065 bool lSuccess = Evaluate(pObject, &lResultType, &lResult);
00066
00067 if (lSuccess)
00068 {
00069 FbxTypeCopy(*pResult, lResult, lResultType);
00070 }
00071
00072 FreeEvaluationResult(lResultType, lResult);
00073
00074 return lSuccess;
00075 }
00076
00085 template <class FBXTYPE>
00086 bool ReverseEvaluation(const FbxObject* pObject, FBXTYPE * pInOut,
00087 bool setObj=false, int index=0) const
00088 {
00089
00090 const void* lIn = pInOut;
00091 void* lOut = NULL;
00092 EFbxType lOutType;
00093
00094 bool lSuccess = ReverseEvaluate(pObject, lIn, &lOut, &lOutType, setObj, index);
00095
00096 if (lSuccess)
00097 {
00098 FbxTypeCopy(*pInOut, lOut, lOutType);
00099 }
00100
00101 FreeEvaluationResult(lOutType, lOut);
00102
00103 return lSuccess;
00104 }
00105
00119 template <class FBXTYPE>
00120 bool EvaluateEntry(const FbxObject* pObject, const char* pEntryDestinationName, FBXTYPE* pResult) const
00121 {
00122 EFbxType lResultType;
00123 void* lResult = NULL;
00124
00125 bool lSuccess = EvaluateEntry(pObject, pEntryDestinationName, &lResultType, &lResult);
00126
00127 if (lSuccess)
00128 {
00129 FbxTypeCopy(*pResult, lResult, lResultType);
00130 }
00131
00132 FreeEvaluationResult(lResultType, lResult);
00133
00134 return lSuccess;
00135 }
00136
00141 FbxPropertyT<FbxString> FunctionName;
00142
00147 FbxPropertyT<FbxString> TargetName;
00148
00150
00152
00154 static const char* sFunctionName;
00156 static const char* sTargetName;
00157
00159 static const char* sDefaultFunctionName;
00161 static const char* sDefaultTargetName;
00162
00163
00165
00167
00171 static void RegisterFunctions();
00172
00176 static void UnregisterFunctions();
00177
00178
00183 class FBXSDK_DLL Function
00184 {
00185 public:
00187 virtual ~Function() {}
00188
00196 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const = 0;
00197
00209 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const = 0;
00210 };
00211
00215 class FBXSDK_DLL FunctionCreatorBase
00216 {
00217 public:
00219 virtual ~FunctionCreatorBase() {}
00220
00224 virtual const char* GetFunctionName() const = 0;
00225
00228 virtual Function* CreateFunction() const = 0;
00229 };
00230
00234 template <class FUNCTION>
00235 class FunctionCreator : public FunctionCreatorBase
00236 {
00237 public:
00238
00242 virtual const char* GetFunctionName() const
00243 {
00244 return FUNCTION::FunctionName;
00245 }
00246
00249 virtual Function* CreateFunction() const
00250 {
00251 return FbxNew< FUNCTION >();
00252 }
00253 };
00254
00258 class FBXSDK_DLL FunctionRegistry
00259 {
00260 public:
00264 static void RegisterFunctionCreator(FunctionCreatorBase const& pCreator)
00265 {
00266 sRegistry.Insert(pCreator.GetFunctionName(), &pCreator);
00267 }
00268
00272 static void UnregisterFunctionCreator(FunctionCreatorBase const& pCreator)
00273 {
00274 sRegistry.Remove(pCreator.GetFunctionName());
00275 }
00276
00280 static const FunctionCreatorBase* FindCreator(const char* pName)
00281 {
00282 RegistryType::RecordType* lRecord = sRegistry.Find(pName);
00283
00284 if (lRecord)
00285 {
00286 return lRecord->GetValue();
00287 }
00288 else
00289 {
00290 return NULL;
00291 }
00292 }
00293
00294 private:
00295 typedef FbxMap<const char*, const FunctionCreatorBase*, FbxCharCompare> RegistryType;
00296 static RegistryType sRegistry;
00297 };
00298
00299
00300
00301
00302
00303 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00304 bool EvaluateEntry(const FbxObject* pObject, const char* pEntryDestinationName, EFbxType* pResultType, void** pResult) const;
00305 bool GetEntryProperty(const FbxObject* pObject, const char* pEntryDestinationName, FbxProperty & pProp) const;
00306
00307 protected:
00308 virtual void Construct(const FbxBindingOperator* pFrom);
00309 virtual void Destruct(bool pRecursive);
00310 virtual void ConstructProperties(bool pForceSet);
00311
00312 void InstantiateFunction();
00313 bool Evaluate(const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00314 bool ReverseEvaluate(const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00315 void FreeEvaluationResult(EFbxType pResultType, void* pResult) const;
00316
00317 Function* mFunction;
00318 #endif
00319 };
00320
00321
00325 class FbxNodePositionBOF : public FbxBindingOperator::Function
00326 {
00327 public:
00329 static const char* FunctionName;
00330
00340 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00341
00343 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00344
00345
00346
00347
00348 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00349 FbxNodePositionBOF();
00350 virtual ~FbxNodePositionBOF();
00351 #endif
00352 };
00353
00357 class FbxNodeDirectionBOF : public FbxBindingOperator::Function
00358 {
00359 public:
00361 static const char* FunctionName;
00362
00372 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00373
00375 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00376
00377
00378
00379
00380 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00381 FbxNodeDirectionBOF();
00382 virtual ~FbxNodeDirectionBOF();
00383 #endif
00384 };
00385
00388 class FbxAssignBOF : public FbxBindingOperator::Function
00389 {
00390 public:
00392 static const char* FunctionName;
00393
00400 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00401
00403 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00404
00405
00406
00407
00408 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00409 FbxAssignBOF();
00410 virtual ~FbxAssignBOF();
00411 #endif
00412 };
00413
00414
00418 class FbxConditionalBOF : public FbxBindingOperator::Function
00419 {
00420 public:
00422 static const char* FunctionName;
00423
00437 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00438 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00439
00440
00441
00442
00443 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00444 FbxConditionalBOF();
00445 virtual ~FbxConditionalBOF();
00446 #endif
00447 };
00448
00449
00453 class FbxSwitchBOF : public FbxBindingOperator::Function
00454 {
00455 public:
00457 static const char* FunctionName;
00458
00472 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00473 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00474
00475
00476
00477
00478 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00479 FbxSwitchBOF();
00480 virtual ~FbxSwitchBOF();
00481 #endif
00482 };
00483
00484
00485 class FbxTRSToMatrixBOF : public FbxBindingOperator::Function
00486 {
00487 public:
00489 static const char* FunctionName;
00490
00500 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00501 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00502
00503
00504
00505
00506 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00507 FbxTRSToMatrixBOF();
00508 virtual ~FbxTRSToMatrixBOF();
00509 #endif
00510 };
00511
00512
00513 class FbxAddBOF : public FbxBindingOperator::Function
00514 {
00515 public:
00517 static const char* FunctionName;
00518
00528 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00529 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00530
00531
00532
00533
00534 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00535 FbxAddBOF();
00536 virtual ~FbxAddBOF();
00537 #endif
00538 };
00539
00540
00541 class FbxSubstractBOF : public FbxBindingOperator::Function
00542 {
00543 public:
00545 static const char* FunctionName;
00546
00556 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00557 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00558
00559
00560
00561
00562 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00563 FbxSubstractBOF();
00564 virtual ~FbxSubstractBOF();
00565 #endif
00566 };
00567
00568
00569 class FbxMultiplyBOF : public FbxBindingOperator::Function
00570 {
00571 public:
00573 static const char* FunctionName;
00574
00584 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00585
00586 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00587
00588
00589
00590
00591 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00592 FbxMultiplyBOF();
00593 virtual ~FbxMultiplyBOF();
00594 #endif
00595 };
00596
00597
00598 class FbxMultiplyDistBOF : public FbxBindingOperator::Function
00599 {
00600 public:
00602 static const char* FunctionName;
00603
00613 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00614 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00615
00616
00617
00618
00619 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00620 FbxMultiplyDistBOF();
00621 virtual ~FbxMultiplyDistBOF();
00622 #endif
00623 };
00624
00625 class FbxOneOverXBOF : public FbxBindingOperator::Function
00626 {
00627 public:
00629 static const char* FunctionName;
00630
00640 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00641 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00642
00643
00644
00645
00646 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00647 FbxOneOverXBOF();
00648 virtual ~FbxOneOverXBOF();
00649 #endif
00650 };
00651
00652 class FbxPowerBOF : public FbxBindingOperator::Function
00653 {
00654 public:
00656 static const char* FunctionName;
00657
00667 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00668 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00669
00670
00671
00672
00673 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00674 FbxPowerBOF();
00675 virtual ~FbxPowerBOF();
00676 #endif
00677 };
00678
00679 class FbxDegreeToRadianBOF : public FbxBindingOperator::Function
00680 {
00681 public:
00683 static const char* FunctionName;
00684
00694 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00695 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00696
00697
00698
00699
00700 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00701 FbxDegreeToRadianBOF();
00702 virtual ~FbxDegreeToRadianBOF();
00703 #endif
00704 };
00705
00706
00707 class FbxVectorDegreeToVectorRadianBOF : public FbxBindingOperator::Function
00708 {
00709 public:
00711 static const char* FunctionName;
00712
00722 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00723 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00724
00725
00726
00727
00728 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00729 FbxVectorDegreeToVectorRadianBOF();
00730 virtual ~FbxVectorDegreeToVectorRadianBOF();
00731 #endif
00732 };
00733
00734
00735
00736 class FbxSphericalToCartesianBOF : public FbxBindingOperator::Function
00737 {
00738 public:
00740 static const char* FunctionName;
00741
00751 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00752 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00753
00754
00755
00756
00757 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00758 FbxSphericalToCartesianBOF();
00759 virtual ~FbxSphericalToCartesianBOF();
00760 #endif
00761 };
00762
00763
00764
00765 class FbxIsYupBOF : public FbxBindingOperator::Function
00766 {
00767 public:
00769 static const char* FunctionName;
00770
00780 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00781 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00782
00783
00784
00785
00786 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00787 FbxIsYupBOF();
00788 virtual ~FbxIsYupBOF();
00789 #endif
00790 };
00791
00792
00793
00797 class FbxSymbolIDBOF : public FbxBindingOperator::Function
00798 {
00799 public:
00801 static const char* FunctionName;
00802
00811 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00812 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00813
00814
00815
00816
00817 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00818 FbxSymbolIDBOF();
00819 virtual ~FbxSymbolIDBOF();
00820 #endif
00821 };
00822
00823
00827 class FbxSpotDistributionChooserBOF : public FbxBindingOperator::Function
00828 {
00829 public:
00831 static const char* FunctionName;
00832
00842 virtual bool Evaluate(const FbxBindingOperator* pOperator, const FbxObject* pObject, EFbxType* pResultType, void** pResult) const;
00843
00845 virtual bool ReverseEvaluate(const FbxBindingOperator* pOperator, const FbxObject* pTarget, const void* pIn, void** pOut, EFbxType* pOutType, bool setObj, int index) const;
00846
00847
00848
00849
00850 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00851 FbxSpotDistributionChooserBOF();
00852 virtual ~FbxSpotDistributionChooserBOF();
00853 #endif
00854 };
00855
00856 #include <fbxsdk/fbxsdk_nsend.h>
00857
00858 #endif