About
A CCurve represents an animation curve that stores and interpolates animation keys. A CCurve is stored in a CTrack object.
CCurve objects are an instance of CSbase
.
while (track != nullptr)
{
if (curve == nullptr)
continue;
for (
Int32 i = 0; i < keyCount; ++i)
{
if (key)
{
}
}
}
CTrack * GetFirstCTrack()
Definition: c4d_canimation.h:366
const CKey * GetKey(Int32 index) const
Definition: c4d_canimation.h:388
Int32 GetKeyCount(void) const
Definition: c4d_canimation.h:381
Represents a key in the CCurve of a track which represent the animation of a parameter.
Definition: c4d_canimation.h:58
Definition: c4d_canimation.h:671
CTrack * GetNext() const
Definition: c4d_canimation.h:716
CCurve * GetCurve(CCURVE type=CCURVE::CURVE, Bool bCreate=true)
Definition: c4d_canimation.h:835
maxon::Int32 Int32
Definition: ge_sys_math.h:60
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:210
Access
CCurve objects cannot be created on their own. They are created with a CTrack that contains the CCurve object.
Keys
Access Keys
The CCurve objects stores the animation keys and provides access to these:
if (leftKey)
{
}
Definition: c4d_basetime.h:25
const CKey * FindKey(const BaseTime &time, Int32 *idx=nullptr, FINDANIM match=FINDANIM::EXACT) const
Definition: c4d_canimation.h:404
void SetTime(CCurve *seq, const BaseTime &t)
Definition: c4d_canimation.h:96
Add Keys
A CCurve object can create and receive keys:
const Int32 fps = doc->GetFps();
const Int32 min = doc->GetMinTime().GetFrame(fps);
const Int32 max = doc->GetMaxTime().GetFrame(fps);
const Int32 range = max - min;
const Int32 step = range / 10;
for (
Int32 i = 0; i <= 10; ++i)
{
if (curve->
AddKey(keyTime,
nullptr) ==
nullptr)
keyTime = keyTime + stepTime;
}
CKey * AddKey(const BaseTime &time, Int32 *nidx=nullptr, Bool bUndo=false, Bool SynchronizeKeys=false)
Definition: c4d_canimation.h:423
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:67
See also CKey Allocation/Deallocation.
Handle Keys
A CCurve object can be used to manipulate its keys:
if (newKey == nullptr)
void SetKeyDefault(BaseDocument *doc, Int32 kidx)
Bool FillKey(BaseDocument *doc, BaseList2D *bl, CKey *key)
Definition: c4d_canimation.h:821
Unmuted Keys
A key can be muted so it is ignored.
if (key)
{
}
Float Get(void) const
Definition: c4d_basetime.h:66
const CKey * FindNextUnmuted(Int32 idx, Int32 *ret_idx=nullptr) const
Definition: c4d_canimation.h:599
BaseTime GetTime(void) const
Definition: c4d_canimation.h:89
static String FloatToString(Float32 v, Int32 vvk=-1, Int32 nnk=-3)
Definition: c4d_string.h:529
maxon::Float Float
Definition: ge_sys_math.h:66
See also CKey Bits.
Animation
The interpolation between the keys defines the dynamics of an animation. This interpolation is refined with the tangents.
- CCurve::CalcHermite(): Calculates the Hermite spline between two sets of key values.
- CCurve::CalcSoftTangents(): Calculates the soft tangents (i.e. auto interpolation) around the key of the given index.
- CCurve::GetTangents(): Computes the tangents of a key, taking into account all options like zero slope, link slope etc.
- CCurve::GetValue(): Returns the value calculated at the given time, taking into account things like time curves.
for (
Int32 i = 0; i < 10; ++i)
{
time = time + step;
}
Float GetValue(const BaseTime &time) const
Definition: c4d_canimation.h:538
Time
A CCurve is confined by a first and a last key:
doc->SetLoopMinTime(start);
doc->SetLoopMaxTime(
end);
BaseTime GetStartTime(void) const
Definition: c4d_canimation.h:580
BaseTime GetEndTime(void) const
Definition: c4d_canimation.h:586
MAXON_ATTRIBUTE_FORCE_INLINE auto end(COLLECTION &&c) -> decltype(c.End())
Definition: foreach.h:361
Further Reading