Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    failing to access CTracks

    SDK Help
    0
    5
    395
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Helper
      last edited by

      On 29/03/2013 at 06:16, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   14.034 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      Hello,

      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();

      while (track)
      {
        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.

      1 Reply Last reply Reply Quote 0
      • H
        Helper
        last edited by

        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.

        Example:

        //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  
           
          while(trk)  
          {  
              CCurve *curve = trk->GetCurve(CCURVE_CURVE, FALSE); //Get the curve on the first track  
              Real i;  
              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();  
           }
        

        -ScottA

        1 Reply Last reply Reply Quote 0
        • H
          Helper
          last edited by

          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();
          
          1 Reply Last reply Reply Quote 0
          • H
            Helper
            last edited by

            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...

            import c4d  
              
            def main() :  
              obj = doc.GetFirstObject()  
              
              while obj != None:  
                
                  print "tracks found for '" + obj.GetName() + ":"  
                
                  track = obj.GetFirstCTrack()  
                  while track != None:  
                      print track.GetName()  
                      curve = track.GetCurve()  
                      idx=0  
                      while idx < curve.GetKeyCount() :  
                          key = curve.GetKey(idx)  
                          time = key.GetTime()  
                          print str( time.GetFrame(doc.GetFps()) ) + ": " + str(key.GetValue())  
                          idx+=1  
                      track = track.GetNext()  
                        
                  obj = obj.GetNext()  
            
            1 Reply Last reply Reply Quote 0
            • H
              Helper
              last edited by

              On 01/04/2013 at 04:35, xxxxxxxx wrote:

              Found the error on my part:

              I created a clone of my document:

              doc->Polygonize();

              which defaults to not cloning any animations.

              doc->Polygonize( true );

              Does the trick.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post