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 fbxconstraint.h
13#ifndef _FBXSDK_SCENE_CONSTRAINT_H_
14#define _FBXSDK_SCENE_CONSTRAINT_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 weighted animation constraints.
22 * Constraints are primarily used to impose limits on properties of objects (e.g. position, orientation, scale)
23 * and to automate animation processes.
24 * A <b>constrained object</b> is an object with properties constrained by one or more weighted <b>constraint source</b>s.
25 * \nosubgrouping
26 */
27class FBXSDK_DLL FbxConstraint : public FbxObject
28{
29 FBXSDK_OBJECT_DECLARE(FbxConstraint, FbxObject);
30
31public:
32 /**
33 * \name Properties
34 */
35 //@{
36 /** This property represents the degree of influence of a constraint from 0.0 (no influence) to 100.0 (full influence).
37 *
38 * Default value is 100.0.
39 */
40 FbxPropertyT<FbxDouble> Weight;
41
42 /** This property controls whether the constraint is applied or not.
43 * If the value is \c false the constraint will have no effect. The default value is \c true.
44 *
45 * Default value is true.
46 */
47 FbxPropertyT<FbxBool> Active;
48
49 /** This property handles the lock state of the constraint.
50 *
51 * When enabled, the constrained object cannot be moved away from its constrained location when the constraint is active.
52 *
53 * Default value is false.
54 */
55 FbxPropertyT<FbxBool> Lock;
56 //@}
57
58 /** \enum EType Constraint attribute types.
59 */
60 enum EType
61 {
62 eUnknown, //! Invalid constraint.
63 ePosition, //! Position constraint (referred to as a point constraint in Maya).
64 eRotation, //! Rotation constraint (referred to as an orient constraint in Maya).
65 eScale, //! Scale constraint.
66 eParent, //! Parent constraint.
67 eSingleChainIK, //! Single chain IK constraint.
68 eAim, //! Aim constraint.
69 eCharacter, //! Character constraint.
70 eCustom //! User defined constraints.
71 };
72
73 /** Access the type of the constraint.
74 * \return This type of the constraint.
75 */
76 virtual EType GetConstraintType() const { return eUnknown; }
77
78 /** Retrieve the constrained object.
79 * \return The constrained object.
80 */
81 virtual FbxObject* GetConstrainedObject() const { return NULL; }
82
83 /** Retrieve the count of constraint source.
84 * \return The count of constraint source.
85 */
86 virtual int GetConstraintSourceCount() const { return 0; }
87
88 /** Retrieve a constraint source with the specified index.
89 * \param pIndex The specified index.
90 * \return The constraint source at the specified index.
91 */
92 virtual FbxObject* GetConstraintSource(int /*pIndex*/) const { return NULL; }
93
94 /** Get the weight associated with a constraint source.
95 * \param pObject The given constraint source.
96 * \return The weight of the constraint source.
97 */
98 double GetSourceWeight(const FbxObject* pObject) const;
99
100/*****************************************************************************************************************************
101** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
102*****************************************************************************************************************************/
103#ifndef DOXYGEN_SHOULD_SKIP_THIS
104protected:
105 virtual void Construct(const FbxObject* pFrom);
106 virtual void ConstructProperties(bool pForceSet);
107
108#endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
109};
110
111/*****************************************************************************************************************************
112** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
113*****************************************************************************************************************************/
114#ifndef DOXYGEN_SHOULD_SKIP_THIS
115
116const FbxString GetWeightPropertyName(const FbxObject * pObject);
117void CreateWeightPropertyForSourceObject(FbxObject * pConstraint, const FbxObject * pSourceObject, double pWeightValue);
118
119#endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
120
121#include <fbxsdk/fbxsdk_nsend.h>
122
123#endif /* _FBXSDK_SCENE_CONSTRAINT_H_ */
124