On 29/03/2013 at 06:16, xxxxxxxx wrote:
Cinema 4D Version: 14.034
Platform: Windows ;
Language(s) : C++ ;
I am writing an exporter in C++ and cannot get any CTracks from my animated objects.
Here is the simple code:
BaseObject* op = doc->GetFirstObject();
CTrack* track = op->GetFirstCTrack();
GePrint( "found track: " + track->GetName() );
track = track->GetNext();
GetFirstCTrack() never returns a CTrack object.
I am new to the C++ SDK but I have managed to export static transformations, polygons, uvs etc.
Is there a plugin or function inside of Cinema 4D to get detailed SDK data structure information for debugging purposes?
Thanks for any help.
On 29/03/2013 at 07:58, xxxxxxxx wrote:
It looks like you might not be going deep enough.
Keys reside on curves, which reside in tracks.
So to get at a key value you need to go through the track->curve->key tree branching system.
//This code Get's the key values on all the tracks of an object
BaseObject* obj = doc->GetActiveObject(); //Get the active object
if(!obj) return False;
BaseTime time = doc->GetTime(); //Assigns the basetime class to a variable
Real fps = doc->GetFps(); //Gets the frames per second value
Real currentFrame = time.GetFrame(fps); //The current frame the slider is on
CTrack *trk = obj->GetFirstCTrack(); //Get the first track
CCurve *curve = trk->GetCurve(CCURVE_CURVE, FALSE); //Get the curve on the first track
for(i=0; i<curve->GetKeyCount(); i++)
CKey *keys = curve->GetKey(i); //Get all of the keys
Real keyframe = keys->GetTime().GetFrame(fps); //Assing the frame the keys are on to this variable
float keyvalues = keys->GetValue(); // Get the values of each key
GePrint("Frame= "+ RealToString(keyframe) + " " + " " + "Values= " + RealToString(keyvalues));
trk = trk->GetNext();
On 29/03/2013 at 08:50, xxxxxxxx wrote:
Thanks for the code ScottA,
I didn't even get to CCurve and CKey yet because my problem is getting anything but NULL from:
CTrack \*trk = obj->GetFirstCTrack();
On 30/03/2013 at 17:35, xxxxxxxx wrote:
Trying the same in python gives me the expected CTrack names and subsequent data, so I know I actually have animated data...
def main() :
obj = doc.GetFirstObject()
while obj != None:
print "tracks found for '" + obj.GetName() + ":"
track = obj.GetFirstCTrack()
while track != None:
curve = track.GetCurve()
while idx < curve.GetKeyCount() :
key = curve.GetKey(idx)
time = key.GetTime()
print str( time.GetFrame(doc.GetFps()) ) + ": " + str(key.GetValue())
track = track.GetNext()
obj = obj.GetNext()
On 01/04/2013 at 04:35, xxxxxxxx wrote:
Found the error on my part:
I created a clone of my document:
which defaults to not cloning any animations.
doc->Polygonize( true );
Does the trick.