00001 00004 #ifndef _FBXSDK_NODE_FINDER_BAD_SCALE_H_ 00005 #define _FBXSDK_NODE_FINDER_BAD_SCALE_H_ 00006 00007 /************************************************************************************** 00008 00009 Copyright © 2001 - 2007 Autodesk, Inc. and/or its licensors. 00010 All Rights Reserved. 00011 00012 The coded instructions, statements, computer programs, and/or related material 00013 (collectively the "Data") in these files contain unpublished information 00014 proprietary to Autodesk, Inc. and/or its licensors, which is protected by 00015 Canada and United States of America federal copyright law and by international 00016 treaties. 00017 00018 The Data may not be disclosed or distributed to third parties, in whole or in 00019 part, without the prior written consent of Autodesk, Inc. ("Autodesk"). 00020 00021 THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY. 00022 ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO 00023 WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING 00024 BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE, 00025 NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE. 00026 WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT THE OPERATION 00027 OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE. 00028 00029 IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS 00030 OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES 00031 OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE DAMAGES OR OTHER 00032 SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE 00033 OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND), 00034 HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED 00035 FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE), OR OTHERWISE, 00036 ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE, 00037 WHETHER OR NOT AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS 00038 OR DAMAGE. 00039 00040 **************************************************************************************/ 00041 00042 #include <kaydaradef.h> 00043 #ifndef KFBX_DLL 00044 #define KFBX_DLL K_DLLIMPORT 00045 #endif 00046 00047 #include <kfbxplugins/kfbxnodefinder.h> 00048 00049 #include <klib/karrayul.h> 00050 #include <klib/ktime.h> 00051 00052 #include <kfcurve/kfcurve_forward.h> 00053 #ifndef MB_FBXSDK 00054 #include <kfcurve/kfcurve_nsuse.h> 00055 #endif 00056 00057 // Not part of the public FBX SDK 00058 #ifndef K_FBXSDK 00059 00060 #include <fbxfilesdk_nsbegin.h> 00061 00072 class KFBX_DLL KFbxNodeFinderBadScale : public KFbxNodeFinder 00073 { 00074 00075 public: 00077 KFbxNodeFinderBadScale(); 00078 00080 virtual ~KFbxNodeFinderBadScale(); 00081 00083 virtual void Reset(); 00084 00088 bool GetCheckBoneScale() const; 00089 00093 void SetCheckBoneScale(bool iFlag); 00094 00098 bool GetCheckNegativeScale() const; 00099 00103 void SetCheckNegativeScale(bool iFlag); 00104 00108 bool GetCheckNonUniformScale() const; 00109 00113 void SetCheckNonUniformScale(bool iFlag); 00114 00118 KArrayTemplate<KFbxNode*>& BoneScaleStaticNodeArray(); 00119 00123 KArrayTemplate<KFbxNode*>& BoneScaleAnimatedNodeArray(); 00124 00128 KArrayTemplate<KFbxNode*>& NegativeScaleStaticNodeArray(); 00129 00133 KArrayTemplate<KFbxNode*>& NegativeScaleAnimatedNodeArray(); 00134 00138 KArrayTemplate<KFbxNode*>& NonUniformScaleStaticNodeArray(); 00139 00143 KArrayTemplate<KFbxNode*>& NonUniformScaleAnimatedNodeArray(); 00144 00148 double GetEpsilon() const; 00149 00153 void SetEpsilon(double iEpsilon); 00154 00155 protected: 00156 00157 // Check if a node answers to research criterium. 00158 // Will check for: 00159 // 1) negative scale 00160 // 2) non uniform scale on non terminal node 00161 virtual bool CheckNode(KFbxNode& iNode); 00162 00163 private: 00164 00165 typedef enum 00166 { 00167 eValidScale, 00168 eBoneScale, 00169 eNegativeScale, 00170 eNonUniformScale 00171 } EScaleType; 00172 00173 void GetCurve(KFCurveNode& iNode, KFCurve* lCurve[3]); 00174 EScaleType CheckCurve(KFCurve* iCurve [3]); 00175 EScaleType CheckValue(double iValue[3], int lValueCount); 00176 bool CheckKFCurveNode 00177 ( 00178 KFbxNode& pNode, 00179 KFCurveNode& lCurveNode, 00180 KArrayTemplate<KFbxNode*>& lBoneScaleArray, 00181 KArrayTemplate<KFbxNode*>& lNegativeScaleArray, 00182 KArrayTemplate<KFbxNode*>& lNonUniformScaleArray 00183 ); 00184 00185 KTime mFramePeriod; 00186 00187 bool mCheckBoneScale; 00188 KArrayTemplate<KFbxNode*> mBoneScaleStaticNodeArray; 00189 KArrayTemplate<KFbxNode*> mBoneScaleAnimatedNodeArray; 00190 00191 bool mCheckNegativeScale; 00192 KArrayTemplate<KFbxNode*> mNegativeScaleStaticNodeArray; 00193 KArrayTemplate<KFbxNode*> mNegativeScaleAnimatedNodeArray; 00194 00195 bool mCheckNonUniformScale; 00196 KArrayTemplate<KFbxNode*> mNonUniformScaleStaticNodeArray; 00197 KArrayTemplate<KFbxNode*> mNonUniformScaleAnimatedNodeArray; 00198 00199 double mEpsilon; // by default this value is set to K_DOUBLE_EPSILON 00200 /* The need to define variables instead of using the symbolic constants 00201 directly, comes from the fact that other 3D packages may not carry 00202 around all the precision that a float or a double can have so 00203 the CheckNode method may consider two values to be different while 00204 in fact, for the third party package, they would be considered identical 00205 (this happens a lot with 3D Studio Max where their EPSILON is considered 00206 to be 1e-6 instead of FLT_EPSILON 00207 */ 00208 }; 00209 00210 #include <fbxfilesdk_nsend.h> 00211 00212 #endif // #ifndef K_FBXSDK 00213 #endif // #define _FBXSDK_NODE_FINDER_BAD_SCALE_H_ 00214 00215