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

    keyframe an object in conjunction to another

    Scheduled Pinned Locked Moved SDK Help
    3 Posts 0 Posters 273 Views
    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 Offline
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 17/04/2012 at 02:41, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   13 
      Platform:      Mac OSX  ; 
      Language(s) :   C.O.F.F.E.E  ;

      ---------
      Hi there,

      I have a problem with a script i've been working on. It is supposed to key object B if object A gets keyed using autmatic keyframing. therefore the script listens if at the current frame object A gets keyed and then uses a callcommand(12410) to keyframe object B.

      this works fine if i put the script in the scriptmanager and execute it manualy. but if i put it in a coffeetag so that it should execute automatically, it only works if object A already has had a key on this frame.

      hope that was understandable

      so heres the code:

      main(doc,op)  
      {  
        if (op == doc->GetActiveObject()){  
            var time = doc->GetTime();  
            var fps= doc->GetFps();  
            var currentFrame = time->GetFrame(fps);  
            var track = op->GetFirstCTrack();  
            var abordwhile;  
              
            while (track && abordwhile!=true)// iterate through all recorded tracks  
            {  
                if (track->GetName() == "Position . X" || track->GetName() == "Rotation . H") //only for position and rotation tracks  
                {  
                    var curve = track->GetCurve(CCURVE_CURVE, FALSE); //Find the curve on a track  
                    var keyTotal = curve->GetKeyCount();// count how many keys are on the track  
                    var k;  
                    for(k=0; k<(keyTotal); k++)// iterating through the keys to find which is on the current frame  
                    {  
                        var keytime = curve->GetKey(k)->GetTime()->GetFrame(fps);// get the frame K is on  
                        if (keytime==currentFrame)// if the frame key k is on is the same frame the slider is on  
                        {  
                            k = keyTotal; // set k equal to the total number of keys on the track to stop the iteration through the keys  
                            abordwhile = true; // stop iterating through the tracks  
                            var Keythis1=doc->FindObject("Keythis"); //get the object, set it active and key it  
                            if (Keythis1){  
                                doc->SetActiveObject(Keythis1);                              
                                CallCommand(12410);      
                                println("there should be a key now");  
                                doc->SetActiveObject(op);              
                            }  
                        }  
                    }  
                }  
                track = track->GetNext();// go on and do the same thing to the next track until no more tracks are found  
            }  
        }   
      }
      

      Thanx,
      Bonzo

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

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 17/04/2012 at 05:43, xxxxxxxx wrote:

        i guess the callcommand() is colliding ith the editor playback. this is how i would do it in python :

        import c4d
        from c4d import documents
          
        def main() :
            objA = doc.SearchObject("A")
            objB = doc.SearchObject("B")
            t = doc.GetTime()
            
            if (objA != None and objB!= None) :
                if hasKey(objA, t, ["Position . X","Rotation . H"]) :
                    setKey(objB, t, ["X-Ray"])
                            
        def hasKey (obj, time, tracknames) :
            for track in obj.GetCTracks() :
                for name in tracknames :
                    if (name == track.GetName()) :
                        if (track.GetCurve().FindKey(time) != None) :
                            print 'Found key on {0}.{1} at {2}'.format(obj.GetName(), name, time.Get())
                            return True
            return False
          
        def setKey (obj, time, tracknames) :
            for track in obj.GetCTracks() :
                for name in tracknames :
                    if (name == track.GetName()) : 
                        curve = track.GetCurve()
                        if (curve.FindKey(time) == None) :
                            key = c4d.CKey()
                            key.SetTime(curve, time)
        	            # as i am not sure how your key values are driven, you have to add some logic here
                            key.SetValue(curve, 0)
                            curve.InsertKey(key)
                            print 'Added key on {0}.{1} at {2}'.format(obj.GetName(), name, time.Get())
        
        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 17/04/2012 at 07:51, xxxxxxxx wrote:

          wow thank you. that is exactly what i was going for. only that yours is working 😉

          seems like i should dive more into python.

          thank you again!

          cheers,
          Bonzo

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