Mini Script #04
Stagger Keys
Description
 
This script will help you offset your animations.
Used to create quick offsets in the Nick example above. (Done by Abundant Productions)
 
See video above for demo.

Code below is with tab spacing 4.
import c4d
from c4d import documents
from c4d import gui
from functools import partial

class staggerKeys(gui.GeDialog):
    
    def __init__(self):
        # create global variables
        self.objNumber = 0
        self.offsetList = []
        self.posList = []
        self.selList = doc.GetActiveObjects(1)
    
    def CreateLayout(self):
        
        # create dialog if there's only one object elected
        if len(self.selList) == 1:
            delay = str(gui.InputDialog("Enter Delay Here"))
            self.moveKeys(self.selList[0],delay)
            c4d.EventAdd()
            self.Close()
            
        # create listed UI if there's more than one object selected
        if len(self.selList) != 1:

            # create headers
            self.GroupBegin(1000,c4d.BFH_SCALEFIT, 2, 1)
            
            self.AddStaticText(1001, c4d.BFH_LEFT, 200,10, "Object", 1)
            self.AddStaticText(1001, c4d.BFH_LEFT, 80,10, "Delay by", 1)
            
            self.GroupEnd()

            # create a line for entry for EACH obj in list
            self.GroupBegin(1000,c4d.BFH_SCALEFIT, 2, 1)
            for object in self.selList:
                
                #add name static text
                objName = str(object.GetName())
                nameID = (1001 + self.objNumber)
                self.AddStaticText(nameID, c4d.BFH_LEFT, 200, 10, objName, 1)
    
                #add lag edit text input
                lagID = (3001 + self.objNumber)
                self.AddEditText(lagID,c4d.BFH_LEFT,80,10)
    
                self.objNumber += 1
                
            # Run button
            self.AddButton(4001,c4d.BFH_LEFT,100,20,"RUN")
            
            self.GroupEnd()
        
        return True

    def InitValues(self):
        #initiate the gadgets with values if needed
        return True

    def Command(self, id, msg):
        
        #handle user input
        if id==4001:
            
            #store lag numbers in offsetList
            for i in range(self.objNumber):
                offsetID = (3001 + i)
                self.offsetList.append(self.GetString(offsetID))
            
            for i in range(self.objNumber):
                self.moveKeys(self.selList[i],self.offsetList[i])
                
            self.Close()
            
        return True

    def moveKeys(self, objectID, offset):
        
        # get fps
        fps = doc.GetFps()

        # get animation tracks inside the objects
        cTracks = objectID.GetCTracks()
        print cTracks
        
        # loop across each track
        for cTrack in cTracks:
            
            # get the curve and keys in each track
            keyCurve = cTrack.GetCurve()
            keyCount = cTrack.GetCurve().GetKeyCount()
            
            # loop across each key
            for i in range(keyCount):
                
                cKey = keyCurve.GetKey(i)
                cKeyTime = cKey.GetTime().Get() * fps
                
                print cKey
                
                cKey.SetTime(keyCurve,c4d.BaseTime(int(offset)+cKeyTime,fps))
        
        
        c4d.EventAdd()
        
        
staggerKeys().Open(c4d.DLG_TYPE_MODAL)
C4D Mini Script #04 - Stagger Keys
16
508
0
Published: