cloning
link-mesh-array.py
link-mesh.py

mesh fabrication
staircase.py
triangle-donut.py
vertexAccumulator.py
randomSquareArray.py
meshFromBathymetry.py
cylinders-from-list-of-radii.py
binary-image-to-mesh.py
sphere-minecraft-schematic.py
spikify.py
add-to-mesh.py
mobius-strip.py
split-copy-mesh.py

fabricating other objects
create-text.py
text-from-file.py
create-camera.py
create-bezier.py
helix-bezier.py

material slots
cube-copy-blue.py
cube-turns-red.py
red-blue-per-object.py

animation and fcurves
csv-to-fcurve-loc-rot.py
csv-to-fcurve.py
pop-in-material.py
spike-wiggle-2.py
spike-wiggle.py
sweep-animate-size.py
animate-cycles-lamp-strength.py

incorporating python libraries
exec-text-library.py
exec-external-python.py
import-python.py

constraints
camera-track-object.py
text-track-camera.py

shape keys
explore-shape-keys.py
shape-key-fin.py
docking-tube.py

animating curve bevel
data-graph.py

drivers
scan-drivers.py
copy-drivers.py
driver-fin.py
driver-multi-chain.py

UV layers
barber-pole.py
expand-uv-to-fit.py
uv-from-geometry-cubic.py
flip-texture-v-coordinate.py

modifiers
hook-modifier-curve.py
rounded-prisms.py
make-tile.py
remove-action-modifiers.py

NLAs
explore-NLAs.py
spinning-frogs.py

video sequence editor (VSE)
create-vse-image-strips.py
slide-show.py
vse-strip-gap.py

images and textures
image-on-mesh.py
image-to-material-node.py
load-image-texture.py
texture-one-cube-face.py
condense-duplicate-images.py

analytic geometry
animate-random-spin.py
camera-cone-exp-2.py
camera-cone-exp.py
compute-circle-center.py
dihedral-angle-from-xy.py
extrude-edge-along-custom-axis.py
orientation-matrix.py
two-spheres.py
bezier-interpolate.py
rotate-to-match.py

node trees
change-diffuse-to-emission-node.py

etc
add-plane-from-selected-vertices.py
adjust-all-materials.py
all-nodes-cycles-materials.py
bit_shift.py
bone-orientation-demo.py
cannonball-packing.py
comb.py
convert-quaternion-keyframes-to-euler.py
copy-location-from-vertex-group.py
create-cycles-material.py
demonstrate-decomposition-instability.py
dump-point-cache.py
dump-screen-layout-info.py
expand-nla-strips.py
explore-edge-bevel-weight.py
find-action-users.py
find-green-rectangle.py
find-new-objects.py
fix-scene-layers.py
generate-makefile.py
link-external-data-blocks.py
list-referenced-files.py
material-readout.py
movie-card-stack.py
movies-on-faces.py
next-file-name.py
object-font-from-regular-font.py
operator-mesh-gridify.py
particle-animator.py
particle_loop.py
pose-match.py
pose-sequence-to-fbx.py
prepare-texture-bake.py
raining-physics.py
random-pebble-material.py
reverse-keyframes.py
scale-parallelogram.py
screenshot-sequence.py
select-objects-in-modifiers.py
select-vertices.py
shift-layers.py
snapshot-keyframes-as-mesh.py
sphere-project-texture.py
squish-mesh-axis.py
subdivide-fcurve.py
thicken-texture.py
transform-selected.py
voronoi-madness.py

import bpy
import math


def maybeDispose(name):
    obj = bpy.data.objects.get(name)
    if not obj is None:
        obj.name = "discard"
        bpy.context.scene.objects.unlink(obj)


def fakeData():
    rval = []
    for x in range(100+1):
        y = (x*x)/100 + 4*math.sin(x/2)
        rval.append( [ x,y] )
    return rval


def makeCurve(name, data):
    curve = bpy.data.curves.new(name, 'CURVE')
    spline = curve.splines.new('BEZIER')
    spline.bezier_points.add(len(data) - 1)
    for i,xy in enumerate(data):
        xyz = [ xy[0], xy[1], 0 ]
        spline.bezier_points[i].co = xyz
        spline.bezier_points[i].handle_left = xyz
        spline.bezier_points[i].handle_right = xyz
    curve.bevel_object = bpy.data.objects["line"]
    return curve


def animateCurveBevel(obj, f1, f2):
    obj.data.keyframe_insert(data_path="bevel_factor_end", frame=f2)
    obj.data.bevel_factor_end = 0
    obj.data.keyframe_insert(data_path="bevel_factor_end", frame=f1)
    anim = obj.data.animation_data.action.fcurves[0]
    anim.keyframe_points[0].interpolation = 'LINEAR'

def animateCurveBevelBad(obj, f1, f2):
    obj.keyframe_insert(data_path="data.bevel_factor_end", frame=f2)
    obj.data.bevel_factor_end = 0
    obj.keyframe_insert(data_path="data.bevel_factor_end", frame=f1)
    anim = obj.animation_data.action.fcurves[0]
    anim.keyframe_points[0].interpolation = 'LINEAR'

def frameForX(idx, nPoints, f0, f9):
    return f0 + (f9-f0) *idx/(nPoints-1)

def setVisibility(obj, f1, f2):

    if not f2 is None:
        obj.keyframe_insert(data_path='hide', frame= bpy.context.scene.frame_end+10)
    obj.keyframe_insert(data_path='hide_render', frame=f1)
    obj.keyframe_insert(data_path='hide', frame=f1)
    obj.hide = True
    obj.hide_render = True
    obj.keyframe_insert(data_path='hide', frame=0)
    obj.keyframe_insert(data_path='hide_render', frame=0)
    if not f2 is None:
        obj.keyframe_insert(data_path='hide', frame=f2)
        obj.keyframe_insert(data_path='hide_render', frame=f2)


def makeText(text, loc, f1, f2):
    curve = bpy.data.curves.new("label", 'FONT')
    curve.body = text
    o1 = bpy.data.objects.new("label", curve)
    bpy.context.scene.objects.link(o1)
    o1.location = loc
    if not f1 is None:
        setVisibility(o1, f1, f2)
    o1.parent = bpy.data.objects["font folder"]
    
    curve.materials.append(bpy.data.materials["text"])

    return o1


def make2Text(text1, text2, loc, f1, f2):
    o1 = makeText(text1, loc, f1, f2)
    o2 = makeText(text2, loc, f1, f2)
    o1.data.align = 'RIGHT'

    return (o1, o2)


def lookUp(data, f0, f9, frame):
    f1 = -1

    for i,xy  in enumerate(data):
        f2 = frameForX(i, len(data), f0, f9)
        f3 = frameForX(i+1, len(data), f0, f9)
        if frame<f3:
            return xy
        f1 = f2

    return data[-1]

#
#

name = "graph"


for obj in bpy.data.objects:
    if obj.name[:5] == "label":
        obj.name = "discard"
        bpy.context.scene.objects.unlink(obj)

maybeDispose(name)

data = fakeData()

obj = bpy.data.objects.new(name, makeCurve(name, data))
obj.scale = (0.1,0.1,0.1)
bpy.context.scene.objects.link(obj)
bpy.context.scene.objects.active = obj
obj.select = True
obj.data.materials.append(bpy.data.materials["graph"])


f0 = 31
f9 = f0+ 5*bpy.context.scene.render.fps

animateCurveBevel(obj, 31, f9)

if False:
    # animating text by creating hundreds of individual text objects that pop in and out
    f1 = -1
    for i,xy  in enumerate(data):
        f2 = frameForX(i, len(data), f0, f9)
        f3 = frameForX(i+1, len(data), f0, f9)
        if (i+1 >= len(data)):
            f3 = None
        if (f2>f1):
            make2Text("x=%d,"%xy[0], "y=%.1f"%xy[1], [4,6,1], f2, f3)
        f1 = f2
else:
    # animating text by hooking into the frame_change_pre callback.

    # Thanks: http://blender.stackexchange.com/questions/7904/dynamic-text-in-animation

    # wipe out any preexisting handlers. Hope that doesn't ruin anyone's day.
    bpy.app.handlers.frame_change_pre.clear()

    # make the two text objects.
    (t1, t2) = make2Text("x=?,", "y=?", [4,6,1], None, None)
    tdata1 = t1.data
    tdata2 = t2.data

    def adjustText(scene):
        """
        Update the body on the text labels to be correct for each frame.
        """
        xy = lookUp(data, f0, f9, scene.frame_current)
        tdata1.body = "x=%d,"%xy[0]
        tdata2.body = "y=%.1f"%xy[1]
    bpy.app.handlers.frame_change_pre.append(adjustText)

#

Blender python API quick-start

Syntax highlighting by Pygments.