/ Published in: Python
                    
                                        
Simple animation in C4D (R13) consisting of moving a cube from state 1 to state 2 with Python.
                
                            
                                Expand |
                                Embed | Plain Text
                            
                        
                        Copy this code and paste it in your HTML
# CGTalk Example...
# By: Ricardo Prada.
"""
State at frame 0:
+ Position: (0,0,0) # in cm
+ Rotation: (0,0,0) # in XYZ-degrees format
+ Size: (100,200,200) # in cm
+ Segments: (10,20,20)
+ Material: Blue
+ Bend (Deformer):
- Position: (0,0,0) # in cm
- Rotation: (0,0,0) # in XYZ-degrees format
- Size: (100,200,200) # in cm
- Mode: "Limited"
- Strength: 45 # in degrees
- Angle: 30 # in degrees
State at frame 120:
+ Position: (900,1200,2500) # in cm
+ Rotation: (45,80,120) # in XYZ-degrees format
+ Size: (200,300,700) # in cm
+ Segments: (20,30,70)
+ Material: Red
+ Bend (Deformer):
- Position: (900,1200,2500) # in cm
- Rotation: (45,80,120) # in XYZ-degrees format
- Size: (200,300,700) # in cm
- Mode: "Limited"
- Strength: 120 # in degrees
- Angle: 60 # in degrees
"""
import c4d
import math
def CreateKey(op,id,value,frame):
if not op.GetDocument(): raise Exception, "object must be in a document"
# First check if the track type already exists, otherwise create it...
track=op.FindCTrack(id)
if not track:
track=c4d.CTrack(op,id)
op.InsertTrackSorted(track)
curve=track.GetCurve()
key=curve.AddKey(c4d.BaseTime(frame,doc.GetFps()))
if type(value)==int or type(value)==float:
key["key"].SetValue(curve,value)
else:
key["key"].SetGeData(curve,value)
def main():
# Initial Parameters:
fps=30
minFrame=0
maxFrame=150
doc.SetFps(fps)
doc.SetMinTime(c4d.BaseTime(minFrame,fps))
doc.SetMaxTime(c4d.BaseTime(maxFrame,fps))
doc.SetTime(c4d.BaseTime(maxFrame,fps))
# Materials:
mat1=c4d.BaseMaterial(c4d.Mmaterial)
mat1.SetName("Blue")
mat1[c4d.MATERIAL_COLOR_COLOR]=c4d.Vector(0,0,1)
doc.InsertMaterial(mat1)
mat2=c4d.BaseMaterial(c4d.Mmaterial)
mat2.SetName("Red")
mat2[c4d.MATERIAL_COLOR_COLOR]=c4d.Vector(1,0,0)
doc.InsertMaterial(mat2)
# Texture:
mtag=c4d.TextureTag() # Create a new texture tag...
# Cube:
cube=c4d.BaseObject(c4d.Ocube)
cube.SetName("MyCube")
cube.InsertTag(mtag)
doc.InsertObject(cube)
doc.SetActiveObject(cube) # The record command needs an active object...
cube.Message(c4d.MSG_UPDATE)
# Deformer:
bend=c4d.BaseObject(c4d.Obend)
bend.SetName("MyBend")
bend[c4d.BENDOBJECT_MODE]=1 # 0=Within Box, 1=Limited, 2=Unlimited...
doc.InsertObject(bend,cube) # Add it to the Object Manager as a child of the cube...
doc.SetActiveObject(bend) # The record command needs an active object
bend.Message(c4d.MSG_UPDATE)
# ID Definitions:
# + Position:
ID_IDBASEOBJECTGLOBALPOSITION_X=c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_GLOBAL_POSITION,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_X,c4d.DTYPE_REAL,0))
ID_IDBASEOBJECTGLOBALPOSITION_Y=c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_GLOBAL_POSITION,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_Y,c4d.DTYPE_REAL,0))
ID_IDBASEOBJECTGLOBALPOSITION_Z=c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_GLOBAL_POSITION,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_Z,c4d.DTYPE_REAL,0))
# + Rotation:
ID_IDBASEOBJECTGLOBALROTATION_X=c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_GLOBAL_ROTATION,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_X,c4d.DTYPE_REAL,0))
ID_IDBASEOBJECTGLOBALROTATION_Y=c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_GLOBAL_ROTATION,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_Y,c4d.DTYPE_REAL,0))
ID_IDBASEOBJECTGLOBALROTATION_Z=c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_GLOBAL_ROTATION,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_Z,c4d.DTYPE_REAL,0))
# + Size:
ID_PRIMCUBELEN_X=c4d.DescID(c4d.DescLevel(c4d.PRIM_CUBE_LEN,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_X,c4d.DTYPE_REAL,0))
ID_PRIMCUBELEN_Y=c4d.DescID(c4d.DescLevel(c4d.PRIM_CUBE_LEN,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_Y,c4d.DTYPE_REAL,0))
ID_PRIMCUBELEN_Z=c4d.DescID(c4d.DescLevel(c4d.PRIM_CUBE_LEN,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_Z,c4d.DTYPE_REAL,0))
# + Segments:
ID_PRIMCUBESUBX=c4d.DescID(c4d.DescLevel(c4d.PRIM_CUBE_SUBX,c4d.DTYPE_LONG,0))
ID_PRIMCUBESUBY=c4d.DescID(c4d.DescLevel(c4d.PRIM_CUBE_SUBY,c4d.DTYPE_LONG,0))
ID_PRIMCUBESUBZ=c4d.DescID(c4d.DescLevel(c4d.PRIM_CUBE_SUBZ,c4d.DTYPE_LONG,0))
# + Material:
ID_TEXTURETAGMATERIAL=c4d.DescID(c4d.DescLevel(c4d.TEXTURETAG_MATERIAL,c4d.DTYPE_BASELISTLINK,0))
# + Bend:
# - Position: Defined above.
# - Rotation: Defined above.
# - Size:
ID_DEFORMOBJECTSIZE_X=c4d.DescID(c4d.DescLevel(c4d.DEFORMOBJECT_SIZE,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_X,c4d.DTYPE_REAL,0))
ID_DEFORMOBJECTSIZE_Y=c4d.DescID(c4d.DescLevel(c4d.DEFORMOBJECT_SIZE,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_Y,c4d.DTYPE_REAL,0))
ID_DEFORMOBJECTSIZE_Z=c4d.DescID(c4d.DescLevel(c4d.DEFORMOBJECT_SIZE,c4d.DTYPE_VECTOR,0),c4d.DescLevel(c4d.VECTOR_Z,c4d.DTYPE_REAL,0))
# - Mode: Constant over time, so not defined...
# - Strength:
ID_DEFORMOBJECTSTRENGTH=c4d.DescID(c4d.DescLevel(c4d.DEFORMOBJECT_STRENGTH,c4d.DTYPE_REAL,0))
# - Angle:
ID_DEFORMOBJECTANGLE=c4d.DescID(c4d.DescLevel(c4d.DEFORMOBJECT_ANGLE,c4d.DTYPE_REAL,0))
# Keys:
# At frame = 0:
frame=0
# + Position:
CreateKey(cube,ID_IDBASEOBJECTGLOBALPOSITION_X,value=0,frame=frame)
CreateKey(cube,ID_IDBASEOBJECTGLOBALPOSITION_Y,value=0,frame=frame)
CreateKey(cube,ID_IDBASEOBJECTGLOBALPOSITION_Z,value=0,frame=frame)
# + Rotation:
CreateKey(cube,ID_IDBASEOBJECTGLOBALROTATION_X,value=0,frame=frame)
CreateKey(cube,ID_IDBASEOBJECTGLOBALROTATION_Y,value=0,frame=frame)
CreateKey(cube,ID_IDBASEOBJECTGLOBALROTATION_Z,value=0,frame=frame)
# + Size:
CreateKey(cube,ID_PRIMCUBELEN_X,value=100,frame=frame)
CreateKey(cube,ID_PRIMCUBELEN_Y,value=200,frame=frame)
CreateKey(cube,ID_PRIMCUBELEN_Z,value=200,frame=frame)
# + Segments:
CreateKey(cube,ID_PRIMCUBESUBX,value=10,frame=frame)
CreateKey(cube,ID_PRIMCUBESUBY,value=20,frame=frame)
CreateKey(cube,ID_PRIMCUBESUBZ,value=20,frame=frame)
# + Material:
CreateKey(mtag,ID_TEXTURETAGMATERIAL,value=mat1,frame=frame)
# + Bend:
# - Position:
CreateKey(bend,ID_IDBASEOBJECTGLOBALPOSITION_X,value=0,frame=frame)
CreateKey(bend,ID_IDBASEOBJECTGLOBALPOSITION_Y,value=0,frame=frame)
CreateKey(bend,ID_IDBASEOBJECTGLOBALPOSITION_Z,value=0,frame=frame)
# - Rotation:
CreateKey(bend,ID_IDBASEOBJECTGLOBALROTATION_X,value=0,frame=frame)
CreateKey(bend,ID_IDBASEOBJECTGLOBALROTATION_Y,value=0,frame=frame)
CreateKey(bend,ID_IDBASEOBJECTGLOBALROTATION_Z,value=0,frame=frame)
# - Size:
CreateKey(bend,ID_DEFORMOBJECTSIZE_X,value=100,frame=frame)
CreateKey(bend,ID_DEFORMOBJECTSIZE_Y,value=200,frame=frame)
CreateKey(bend,ID_DEFORMOBJECTSIZE_Z,value=200,frame=frame)
# - Strength:
CreateKey(bend,ID_DEFORMOBJECTSTRENGTH,value=math.radians(45),frame=frame)
# - Angle:
CreateKey(bend,ID_DEFORMOBJECTANGLE,value=math.radians(30),frame=frame)
cube.Message(c4d.MSG_UPDATE)
# At frame = 120:
frame=120
# + Position:
CreateKey(cube,ID_IDBASEOBJECTGLOBALPOSITION_X,value=900,frame=frame)
CreateKey(cube,ID_IDBASEOBJECTGLOBALPOSITION_Y,value=1200,frame=frame)
CreateKey(cube,ID_IDBASEOBJECTGLOBALPOSITION_Z,value=2500,frame=frame)
# + Rotation:
CreateKey(cube,ID_IDBASEOBJECTGLOBALROTATION_X,value=math.radians(45),frame=frame)
CreateKey(cube,ID_IDBASEOBJECTGLOBALROTATION_Y,value=math.radians(80),frame=frame)
CreateKey(cube,ID_IDBASEOBJECTGLOBALROTATION_Z,value=math.radians(120),frame=frame)
# + Size:
CreateKey(cube,ID_PRIMCUBELEN_X,value=200,frame=frame)
CreateKey(cube,ID_PRIMCUBELEN_Y,value=300,frame=frame)
CreateKey(cube,ID_PRIMCUBELEN_Z,value=700,frame=frame)
# + Segments:
CreateKey(cube,ID_PRIMCUBESUBX,value=20,frame=frame)
CreateKey(cube,ID_PRIMCUBESUBY,value=30,frame=frame)
CreateKey(cube,ID_PRIMCUBESUBZ,value=70,frame=frame)
# + Material:
CreateKey(mtag,ID_TEXTURETAGMATERIAL,value=mat2,frame=frame)
# + Bend:
# - Position:
CreateKey(bend,ID_IDBASEOBJECTGLOBALPOSITION_X,value=900,frame=frame)
CreateKey(bend,ID_IDBASEOBJECTGLOBALPOSITION_Y,value=1200,frame=frame)
CreateKey(bend,ID_IDBASEOBJECTGLOBALPOSITION_Z,value=2500,frame=frame)
# - Rotation:
CreateKey(bend,ID_IDBASEOBJECTGLOBALROTATION_X,value=math.radians(45),frame=frame)
CreateKey(bend,ID_IDBASEOBJECTGLOBALROTATION_Y,value=math.radians(80),frame=frame)
CreateKey(bend,ID_IDBASEOBJECTGLOBALROTATION_Z,value=math.radians(120),frame=frame)
# - Size:
CreateKey(bend,ID_DEFORMOBJECTSIZE_X,value=200,frame=frame)
CreateKey(bend,ID_DEFORMOBJECTSIZE_Y,value=300,frame=frame)
CreateKey(bend,ID_DEFORMOBJECTSIZE_Z,value=700,frame=frame)
# - Strength:
CreateKey(bend,ID_DEFORMOBJECTSTRENGTH,value=math.radians(120),frame=frame)
# - Angle:
CreateKey(bend,ID_DEFORMOBJECTANGLE,value=math.radians(60),frame=frame)
cube.Message(c4d.MSG_UPDATE)
c4d.EventAdd()
if __name__=='__main__':
main()
Comments
 Subscribe to comments
                    Subscribe to comments
                
                