Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - страница 14
>
> redSphere = setObject('RedSphere', red)
> bpy.ops.mesh.primitive_uv_sphere_add(location=3*dx+dz, layers=layers)
> greenSphere = setObject('GreenSphere', green)
> # Создание текстов
> redText = addText('Red', -dx)
> greenText = addText('Green', -dx)
> cubeText = addText('Cube', -dx)
> sphereText = addText('Sphere', -dx)
> # Создание групп
> redGrp = bpy.data.groups.new('RedGroup')
> greenGrp = bpy.data.groups.new('GreenGroup')
> cubeGrp = bpy.data.groups.new('CubeGroup')
> sphereGrp = bpy.data.groups.new('SphereGroup')
> # Таблица членов групп
> members = {
> redGrp : [redCube, redSphere, redText],
> greenGrp : [greenCube, greenSphere, greenText],
> cubeGrp : [redCube, greenCube, cubeText],
> sphereGrp : [redSphere, greenSphere, sphereText] }
> # Привязка объектов к группам
> for group in members.keys():
> for ob in members[group]:
> group.objects.link(ob)
> # Список пустышек
> empties = [
> ('RedEmpty', origin, redGrp),
> ('GreenEmpty', dy, greenGrp),
> ('CubeEmpty', 2*dy, cubeGrp),
> ('SphereEmpty', 3*dy, sphereGrp) ]
> # Создание пустышек и размещение их в слое отображения (Display)
> scn = bpy.context.scene
> for (name, loc, group) in empties:
> empty = bpy.data.objects.new(name, None)
> empty.location = loc
> empty.name = name
> empty.dupli_type = 'GROUP'
> empty.dupli_group = group
> scn.objects.link(empty)
> moveToLayer(empty, Display)
> # Слой отображения назначается активным слоем
> scn.layers[Display] = True
> for n in range(20):
> if n != Display:
> scn.layers[n] = False
> return
>if __name__ == "__main__":
> run()
Эта программа добавляет ico-сферу, деформированную решёткой. Модификатор решётки действует только на группу вершин в верхней половине сферы.
>#----------------------------------------------------------
># File lattice.py
>#----------------------------------------------------------
>import bpy
>def createIcoSphere(origin):
> # Создание ico-сферы
> bpy.ops.mesh.primitive_ico_sphere_add(location=origin)
> ob = bpy.context.object
> me = ob.data
> # Создание групп вершин
> upper = ob.vertex_groups.new('Upper')
> lower = ob.vertex_groups.new('Lower')
> for v in me.vertices:
> if v.co[2] > 0.001:
> upper.add([v.index], 1.0, 'REPLACE')
> elif v.co[2] < -0.001:
> lower.add([v.index], 1.0, 'REPLACE')
> else: upper.add([v.index], 0.5, 'REPLACE')
> lower.add([v.index], 0.5, 'REPLACE')
> return ob
>def createLattice(origin):
> # Создание решётки и объекта
> lat = bpy.data.lattices.new('MyLattice')
> ob = bpy.data.objects.new('LatticeObject', lat)
> ob.location = origin ob.show_x_ray = True
> # Привязка объекта к сцене
> scn = bpy.context.scene
> scn.objects.link(ob)
> scn.objects.active = ob
> scn.update()
> # Установка атрибутов решётки
> lat.interpolation_type_u = 'KEY_LINEAR'
> lat.interpolation_type_v = 'KEY_CARDINAL'
> lat.interpolation_type_w = 'KEY_BSPLINE'
> lat.use_outside = False
> lat.points_u = 2
> lat.points_v = 2 lat.points_w = 2
> # Расстановка точек решётки
> s = 1.0
> points = [
> (-s,-s,-s), (s,-s,-s), (-s,s,-s), (s,s,-s),
> (-s,-s,s), (s,-s,s), (-s,s,s), (s,s,s)
> ]
> for n,pt in enumerate(lat.points):
> for k in range(3):
> pt.co_deform[k] = points[n][k]
> pass
> return ob
>def run(origin):
> sphere = createIcoSphere(origin)
> lat = createLattice(origin)
> # Создание модификатора решётки
> mod = sphere.modifiers.new('Lat', 'LATTICE')
> mod.object = lat
> mod.vertex_group = 'Upper'
> # Решётка в режиме редактирования для лёгкого деформирования
> bpy.context.scene.update()
> bpy.ops.object.mode_set(mode='EDIT')
> return
>if __name__ == "__main__":
> run((0,0,0))
Эта программа добавляет кривую Безье. Она также добавляет круг Nurbs, который используется как bevel-объект.
>#----------------------------------------------------------
># File curve.py
>#----------------------------------------------------------