Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import c4d
- def CacheObject(op, frameStart = None, frameEnd = None):
- """ Caches 'op' about it's position, scale and rotation. """
- doc = op.GetDocument()
- if not doc:
- return False
- fps = doc.GetFps()
- if frameStart is None:
- frameStart = doc.GetMinTime().GetFrame(fps)
- if frameEnd is None:
- frameEnd = doc.GetMaxTime().GetFrame(fps)
- currentTime = doc.GetTime()
- null = c4d.BaseObject(c4d.Onull)
- tracks = (
- c4d.CTrack(null, c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_POSITION), c4d.DescLevel(c4d.VECTOR_X))),
- c4d.CTrack(null, c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_POSITION), c4d.DescLevel(c4d.VECTOR_Y))),
- c4d.CTrack(null, c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_POSITION), c4d.DescLevel(c4d.VECTOR_Z))),
- c4d.CTrack(null, c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_SCALE), c4d.DescLevel(c4d.VECTOR_X))),
- c4d.CTrack(null, c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_SCALE), c4d.DescLevel(c4d.VECTOR_Y))),
- c4d.CTrack(null, c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_SCALE), c4d.DescLevel(c4d.VECTOR_Z))),
- c4d.CTrack(null, c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_ROTATION), c4d.DescLevel(c4d.VECTOR_X))),
- c4d.CTrack(null, c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_ROTATION), c4d.DescLevel(c4d.VECTOR_Y))),
- c4d.CTrack(null, c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_ROTATION), c4d.DescLevel(c4d.VECTOR_Z))),
- )
- for track in tracks:
- null.InsertTrackSorted(track)
- curves = tuple((track.GetCurve() for track in tracks))
- for frame in xrange(frameStart, frameEnd, 1):
- # set document time
- time = c4d.BaseTime(frame, fps)
- doc.SetTime(time)
- # update cinema 4d
- c4d.DrawViews(c4d.DRAWFLAGS_ONLY_ACTIVE_VIEW|c4d.DRAWFLAGS_NO_THREAD|c4d.DRAWFLAGS_NO_REDUCTION|c4d.DRAWFLAGS_STATICBREAK)
- pos = op.GetAbsPos()
- sca = op.GetAbsScale()
- rot = op.GetAbsRot()
- keys = tuple((curve.AddKey(time)["key"] for curve in curves))
- keys[0].SetValue(keys[0].GetCurve(), pos.x)
- keys[1].SetValue(keys[1].GetCurve(), pos.y)
- keys[2].SetValue(keys[2].GetCurve(), pos.z)
- keys[3].SetValue(keys[3].GetCurve(), sca.x)
- keys[4].SetValue(keys[4].GetCurve(), sca.y)
- keys[5].SetValue(keys[5].GetCurve(), sca.z)
- keys[6].SetValue(keys[6].GetCurve(), rot.x)
- keys[7].SetValue(keys[7].GetCurve(), rot.y)
- keys[8].SetValue(keys[8].GetCurve(), rot.z)
- c4d.GeSyncMessage(c4d.EVMSG_TIMECHANGED)
- doc.SetTime(currentTime)
- c4d.EventAdd(c4d.EVENT_ANIMATE)
- null.SetName(op.GetName() + ".baked")
- null.Message(c4d.MSG_UPDATE)
- return null
- def main():
- if op:
- doc.InsertObject(CacheObject(op))
- else:
- c4d.gui.MessageDialog("Please select an object.")
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement