Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - страница 16
>
> spline.use_endpoint_u = True
> nurbsCurve = makeCurve("NurbsNoend", origin, 2)
> spline = makeNurbsSpline(nurbsCurve)
> spline.use_endpoint_u = False
> bezierCurve = makeCurve("Bezier", origin, 3)
> makeBezierSpline(bezierCurve)
> return
>if __name__ == "__main__":
> run((0,0,0))
Эта программа добавляет путь и обезьяну с ограничением "следовать по пути" (follow path).
>#----------------------------------------------------------
># File path.py
>#----------------------------------------------------------
>import bpy
>def run(origin):
> # Создание данных пути и объекта
> path = bpy.data.curves.new('MyPath', 'CURVE')
> pathOb = bpy.data.objects.new('Path', path)
> pathOb.location = origin
> bpy.context.scene.objects.link(pathOb)
> # Настройка данных пути
> path.dimensions = '3D'
> path.use_path = True
> path.use_path_follow = True
> path.path_duration = 250
> # Добавление сплайна к пути
> spline = path.splines.new('POLY')
> spline.use_cyclic_u = True
> spline.use_endpoint_u = False
> # Добавление точек к сплайну
> pointTable = [(0,0,0,0), (1,0,3,0),
> (1,2,2,0), (0,4,0,0), (0,0,0,0)]
> nPoints = len(pointTable)
> spline.points.add(nPoints-1)
> for n in range(nPoints):
> spline.points[n].co = pointTable[n]
> # Добавление обезьяны
> bpy.ops.mesh.primitive_monkey_add()
> monkey = bpy.context.object
> # Добавление ограничения "следовать по пути" обезьяне
> cns = monkey.constraints.new('FOLLOW_PATH')
> cns.target = pathOb
> cns.use_curve_follow = True
> cns.use_curve_radius = True
> cns.use_fixed_location = False
> cns.forward_axis = 'FORWARD_Z'
> cns.up_axis = 'UP_Y'
> return
>if __name__ == "__main__":
> run((0,0,0))
> bpy.ops.screen.animation_play(reverse=False, sync=False)
Эта программа добавляет источник света "солнце" к сцене, и прожекторы (spot) для каждого объекта рендера на сцене. Каждый прожектор имеет ограничение TrackTo, заставляющее быть направленным на свой объект, тогда как солнце отслеживает центр всех объектов, визуализируемых на сцене.
>#----------------------------------------------------------
># File camera.py
># Adds one camera and several lights
>#----------------------------------------------------------
>import bpy, mathutils, math
>from mathutils import Vector
>from math import pi
>def findMidPoint():
> # Нахождение позиции середины всех визуализируемых объектов
> sum = Vector((0,0,0))
> n = 0
> for ob in bpy.data.objects:
> if ob.type not in ['CAMERA', 'LAMP', 'EMPTY']:
> sum += ob.location
> n += 1
> if n == 0:
> return sum
> else:
> return sum/n
>def addTrackToConstraint(ob, name, target):
> # Добавление ограничения TrackTo
> cns = ob.constraints.new('TRACK_TO')
> cns.name = name
> cns.target = target
> cns.track_axis = 'TRACK_NEGATIVE_Z'
> cns.up_axis = 'UP_Y'
> cns.owner_space = 'WORLD'
> cns.target_space = 'WORLD'
> return
>def createLamp(name, lamptype, loc):
> # Создание источника освещения
> bpy.ops.object.add(
> type='LAMP',
> location=loc)
> ob = bpy.context.object
> ob.name = name
> lamp = ob.data
> lamp.name = 'Lamp'+name
> lamp.type = lamptype
> return ob
>def createLamps(origin, target):
> deg2rad = 2*pi/360
> sun = createLamp('sun', 'SUN', origin+Vector((0,20,50)))
> lamp = sun.data
> lamp.type = 'SUN'
> addTrackToConstraint(sun, 'TrackMiddle', target)
> for ob in bpy.context.scene.objects:
> if ob.type == 'MESH':
> spot = createLamp(ob.name+'Spot', 'SPOT', ob.location+Vector((0,2,1)))
> bpy.ops.transform.resize(value=(0.5,0.5,0.5))
> lamp = spot.data
> # Лампа
> lamp.type = 'SPOT'
> lamp.color = (0.5,0.5,0)
> lamp.energy = 0.9
> lamp.falloff_type = 'INVERSE_LINEAR'
> lamp.distance = 7.5
> # Форма луча прожектора
> lamp.spot_size = 30*deg2rad
> lamp.spot_blend = 0.3
> # Тени
> lamp.shadow_method = 'BUFFER_SHADOW'
> lamp.use_shadow_layer = True