1/****************************************************************************************
2
3 Copyright (C) 2015 Autodesk, Inc.
4 All rights reserved.
5
6 Use of this software is subject to the terms of the Autodesk license agreement
7 provided at the time of installation or download, or which otherwise accompanies
8 this software in either electronic or hard copy form.
9
10****************************************************************************************/
11
12//! \file fbxdeformer.h
13#ifndef _FBXSDK_SCENE_GEOMETRY_DEFORMER_H_
14#define _FBXSDK_SCENE_GEOMETRY_DEFORMER_H_
15
16#include <fbxsdk/fbxsdk_def.h>
17
18#include <fbxsdk/core/fbxobject.h>
19#include <fbxsdk/fbxsdk_nsbegin.h>
20
21/** Base class for skin deformer (FbxSkin) and vertex cache deformer (FbxVertexCacheDeformer).
22 * The corresponding deformer types are FbxDeformer::eSkin and FbxDeformer::eVertexCache.
23 * A deformer can be binded to a geometry (FbxGeometry) to act on its shape. Typically,
24 * some objects under the deformer are animated, and via the deformer, the geometry
25 * is animated too.
26 *
27 * A skin deformer contains clusters (FbxCluster). Each cluster acts on a subset of the geometry's
28 * control points, with different weights. For example, a mesh of humanoid shape
29 * can have a skin attached, that describes the way the humanoid mesh is deformed
30 * by bones. When the bones are animated, the clusters act on the geometry to
31 * animate it too.
32 *
33 * A vertex cache deformer contains a cache (FbxCache). The cache contains animation
34 * information for every control point of the geometry.
35 *
36 *\nosubgrouping
37 */
38class FBXSDK_DLL FbxDeformer : public FbxObject
39{
40 FBXSDK_OBJECT_DECLARE(FbxDeformer, FbxObject);
41
42public:
43 /**
44 * \name Multi-Layer Flag
45 * This flag is available for backward compatibility with older
46 * version of FBX files and should not be used anymore. All the animation layering
47 * system has been moved to the FbxAnimLayer and FbxAnimStack classes.
48 */
49 //@{
50 /** Set multi-layer state flag.
51 * \param pMultiLayer Set to \c true to enable multi-layering.
52 */
53 void SetMultiLayer(bool pMultiLayer);
54
55 /** Get multi-layer state.
56 * \return The current state of the multi-layer flag.
57 */
58 bool GetMultiLayer() const;
59 //@}
60
61 /**
62 * \name Deformer types
63 */
64 //@{
65 /** \enum EDeformerType Deformer types.
66 */
67 enum EDeformerType
68 {
69 eUnknown, //!< Unknown deformer type
70 eSkin, //!< Type FbxSkin
71 eBlendShape, //!< Type FbxBlendShape
72 eVertexCache //!< Type FbxVertexCacheDeformer
73 };
74
75 /** Get the deformer type.
76 * \return Deformer type identifier. Default value is eUnknown.
77 */
78 virtual EDeformerType GetDeformerType() const { return eUnknown; }
79 //@}
80
81/*****************************************************************************************************************************
82** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
83*****************************************************************************************************************************/
84#ifndef DOXYGEN_SHOULD_SKIP_THIS
85protected:
86 virtual void Construct(const FbxObject* pFrom);
87 virtual FbxStringList GetTypeFlags() const { return FbxStringList(); }
88
89 bool mMultiLayer;
90#endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
91};
92
93#include <fbxsdk/fbxsdk_nsend.h>
94
95#endif /* _FBXSDK_SCENE_GEOMETRY_DEFORMER_H_ */
96