About
A CTrack represents an animation track of a parameter of an object in Cinema 4D. The tracks are stored with the animated object and contain curves and keys.
CTrack objects are an instance of CTbase
.
if (track == nullptr)
{
if (track == nullptr)
stage->InsertTrackSorted(track);
}
if (curve == nullptr)
if (key1 == nullptr)
{
}
{
key2->SetGeData(curve, data);
}
CTrack * FindCTrack(const DescID &id)
Definition: c4d_baselist.h:2753
Definition: c4d_basetime.h:25
Definition: c4d_canimation.h:366
CKey * AddKey(const BaseTime &time, Int32 *nidx=nullptr, Bool bUndo=false, Bool SynchronizeKeys=false)
Definition: c4d_canimation.h:423
Represents a key in the CCurve of a track which represent the animation of a parameter.
Definition: c4d_canimation.h:58
void SetGeData(CCurve *seq, const GeData &d)
Sets the data of the key.
Definition: c4d_canimation.h:177
Definition: c4d_canimation.h:671
static CTrack * Alloc(BaseList2D *bl, const DescID &id)
CCurve * GetCurve(CCURVE type=CCURVE::CURVE, Bool bCreate=true)
Definition: c4d_canimation.h:835
Definition: lib_description.h:355
Definition: c4d_gedata.h:83
void SetBaseList2D(BaseList2D *bl)
Definition: c4d_gedata.h:730
#define MAXON_SCOPE
Definition: apibase.h:2898
@ DTYPE_BASELISTLINK
BaseLink.
Definition: lib_description.h:74
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:67
#define ConstDescID(...)
Definition: lib_description.h:594
@ STAGEOBJECT_CLINK
Definition: ostage.h:6
const void * key2
Definition: pycore_hashtable.h:79
Represents a level within a DescID.
Definition: lib_description.h:298
Access
The animation tracks of an object's parameters are stored with the object itself:
- Note
- The keyframe selection is defined with the BaseList2D class, see BaseList2D Manual.
while (track != nullptr)
{
}
String GetName() const
Definition: c4d_baselist.h:2412
CTrack * GetNext() const
Definition: c4d_canimation.h:716
PyObject * obj
Definition: complexobject.h:60
#define ApplicationOutput(formatString,...)
Definition: debugdiagnostics.h:210
Allocation/Deallocation
A CTrack can be created with the usual tools:
A newly created CTrack must be added to a host object:
if (track == nullptr)
{
if (track == nullptr)
track->
SetName(
"My New Animation Track"_s);
obj->InsertTrackSorted(track);
}
void SetName(const maxon::String &name, Bool setDirty=true)
Definition: c4d_baselist.h:2419
@ DTYPE_VECTOR
Vector
Definition: lib_description.h:70
@ DTYPE_REAL
Float
Definition: lib_description.h:68
@ VECTOR_X
X component.
Definition: lib_description.h:279
#define CreateDescID(...)
Definition: lib_description.h:595
@ ID_BASEOBJECT_REL_POSITION
Definition: obase.h:15
To create special tracks the ID of that special track must be used. The special tracks are:
if (soundTrack == nullptr)
soundTrack->
SetName(
"New Sound Track"_s);
obj->InsertTrackSorted(soundTrack);
Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
@ CID_SOUND_NAME
Definition: ctsound.h:7
#define CTsound
Sound.
Definition: ge_prepass.h:1531
if (plaTrack == nullptr)
polyObject->InsertTrackSorted(plaTrack);
if (curve == nullptr)
if (key1 == nullptr)
Py_ssize_t i
Definition: abstract.h:645
Py_ssize_t count
Definition: abstract.h:640
Bool FillKey(BaseDocument *doc, BaseList2D *bl, CKey *key)
Definition: c4d_canimation.h:821
Definition: c4d_tools.h:835
MAXON_ATTRIBUTE_FORCE_INLINE Float Get01()
Definition: c4d_tools.h:865
maxon::Vec3< maxon::Float64, 1 > Vector
Definition: ge_math.h:145
maxon::Int32 Int32
Definition: ge_sys_math.h:60
#define MSG_UPDATE
Must be sent if the bounding box has to be recalculated. (Otherwise use MSG_CHANGE....
Definition: c4d_baselist.h:359
#define CTpla
PLA.
Definition: ge_prepass.h:1530
const char * doc
Definition: pyerrors.h:226
Navigation
CTrack objects are stored in a list:
while (track != nullptr)
{
}
- Note
- The GeListHead object that is the parent of the tracks can be obtained with BaseList2D::GetCTrackRoot().
Read-Only Properties
Several values can be read from a CTrack:
The track categories are:
{
}
PyObject * value
Definition: abstract.h:715
Int32 GetTrackCategory() const
Definition: c4d_canimation.h:851
Float GetValue(const BaseDocument *doc, const BaseTime &time) const
Definition: c4d_canimation.h:865
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
#define CTRACK_CATEGORY_VALUE
Value track.
Definition: c4d_canimation.h:633
See also CKey Value.
Properties
Parameters
The parameters of a track can be edited as usual with C4DAtom::SetParameter() and C4DAtom::GetParameter(). The parameter IDs are defined in ctbase.h
.
const Vector red { 1.0, 0, 0 };
@ ID_CTRACK_USE_PREF
Definition: ctbase.h:38
@ ID_CTRACK_FCURVE_COLOR
Definition: ctbase.h:10
Selection
In Cinema 4D there can be up to four timeline windows. An animation track can be selected in one or multiple of these windows. The selection state is stored as a bit:
if (curve)
{
if (keyCount == 0)
else
}
Int32 GetKeyCount() const
Definition: c4d_canimation.h:381
Bool ChangeNBit(NBIT bit, NBITCONTROL bitmode)
@ TL1_SELECT
Selection bit for Timeline 1.
See also CKey Selection.
Description ID
The parameter animated using a certain track is defined with its DescID. This DescID can be accessed:
if (track == nullptr)
if (trackRoot == nullptr)
if (clone == nullptr)
C4DAtom * GetClone(COPYFLAGS flags, AliasTrans *trn) const
Definition: c4d_baselist.h:1481
Bool SetDescriptionID(BaseList2D *object, const DescID &id)
Definition: c4d_canimation.h:741
Definition: c4d_baselist.h:2077
void InsertLast(GeListNode *bn)
Definition: c4d_baselist.h:2164
@ VECTOR_Y
Y component.
Definition: lib_description.h:280
Loop Settings
The loop settings define how an animation track should behave before the first key and after the last key.
The loop types are:
void SetBefore(CLOOP type)
Definition: c4d_canimation.h:758
void SetAfter(CLOOP type)
Definition: c4d_canimation.h:770
@ OFFSETREPEAT
Offset repeat.
Points in time beyond the defined animation track can be mapped into time inside the track.
- CTrack::Remap(): Remaps the given time into a position inside the animation track.
for (
Float64 t = 0.0; t < 10.0; t = t + 0.1)
{
track->
Remap(t, &remapTime, &cycle);
}
Bool Remap(Float64 time, Float64 *ret_time, Int32 *ret_cycle) const
Definition: c4d_canimation.h:895
maxon::Float64 Float64
Definition: ge_sys_math.h:67
Time Track
The behavior of an animation track depends on the current time which is typically the current time of the BaseDocument. But the time that controls a track can be also defined with a time track.
if (timeTrack == nullptr)
while (track != nullptr)
{
}
void SetTimeTrack(CTrack *track)
Definition: c4d_canimation.h:788
const DescID & GetDescriptionID() const
Definition: c4d_canimation.h:733
#define CTtime
Time.
Definition: ge_prepass.h:1533
Timeline Height
An animation track can be displayed in a Timeline window.
Track Information
An animation track can provide additional information for each key or the current time in form of a String.
PyObject * key
Definition: abstract.h:289
const CKey * GetKey(Int32 index) const
Definition: c4d_canimation.h:388
Bool TrackInformation(BaseDocument *doc, CKey *key, maxon::String *str, Bool set)
Definition: c4d_canimation.h:906
Definition: c4d_string.h:39
_Py_clock_info_t * info
Definition: pytime.h:197
Synchronisation
Multiple tracks can be synchronized. Typically this applies to tracks of the components of a Vector parameter.
Functionality
Since a track might be displayed in the GUI (Timeline window) it can draw an image:
if (clipMap == nullptr)
clipMap->BeginDraw();
clipMap->EndDraw();
Bool ShowBitmap(const Filename &fn)
Definition: ge_autoptr.h:37
Bool Draw(GeClipMap *map, const BaseTime &clip_left, const BaseTime &clip_right) const
Definition: c4d_canimation.h:812
@ OK
Image loaded/created.
Further utility functions are:
See also CCurve Manual.
Further Reading