How to add PLA keyframes
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 24/03/2011 at 14:15, xxxxxxxx wrote:
I'm trying to import obj files one for each frame, and add PLA keyframes in C4D, but am not finding anyway to do it using python. Is this even the right way to approach this problem?
I'm using C4D R12, trying to import cloth animation from massive.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 29/03/2011 at 17:38, xxxxxxxx wrote:
So after three days of pain and suffering through bad docs and C++ decoding, I have a python solution.
import c4d
from c4d import utils
import osDEBUG = True
BUILDFLAGS_0 = 0def main() :
'''Updates an objects keyframes for all frames'''#get the object to animate
obj = doc.SearchObject('Cube')#get the pla track Description id
id = c4d.DescID(c4d.DescLevel(c4d.CTpla, c4d.CTpla, 0))# check if track already exist
plaTrack = obj.FindTrack(id)
if plaTrack == None:
#Create the pla track
plaTrack = c4d.CTrack(obj, id)
obj.InsertTrackSorted(plaTrack)else:
plaTrack.FlushKeys()
ctime = doc.GetTime() #save current time
fps = doc.GetFps()
start = doc.GetMinTime().GetFrame(fps) #set min time
until = doc.GetMaxTime().GetFrame(fps) #set max time#get the plaTrack curve
myCurve = plaTrack.GetCurve()#setup SendModelingCommand base container
settings = c4d.BaseContainer()
settings.SetBool(c4d.MDATA_CURRENTSTATETOOBJECT_INHERITANCE, True)
settings.SetBool(c4d.MDATA_CURRENTSTATETOOBJECT_KEEPANIMATION, False);# loop thru each frame
for f in xrange(start, until) :#set the next frame
time = c4d.BaseTime(f, fps)
doc.SetTime(time)
doc.ExecutePasses(None, True, True, True, BUILDFLAGS_0);#update timeline
c4d.GeSyncMessage(c4d.EVMSG_TIMECHANGED)#create new object
newobjList = utils.SendModelingCommand(
command = c4d.MCOMMAND_CURRENTSTATETOOBJECT,
list= [obj],
mode=c4d.MODELINGCOMMANDMODE_ALL, # mode
bc=settings,
doc = doc)newObj = newobjList[0]
if newObj != None:
#get the points from the new object
points = newObj.GetAllPoints()#add the key frame
dictKey = myCurve.AddKey(time)
key = dictKey["key"]#modify points for current frame
points[3].x = points[3].x + 25.0
newObj.SetAllPoints(points)
newObj.Message(c4d.MSG_UPDATE)#sync key frame with point data
fillSuccess = plaTrack.FillKey(doc,newObj,key)
if fillSuccess == False:
print('Fill key failed for frame {0}'.format(f))else:
print('CURRENTSTATETOOBJECT failed to create new object') -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 30/03/2011 at 12:11, xxxxxxxx wrote:
Thanks for posting your solution! I hope more people would do it
I know it can be frustrating at times, but the end result is worth it.