Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - страница 3
>
># Или рёбра или грани должны быть [], иначе Вам нужны проблемы
> me.from_pydata(verts, edges, faces)
> # Обновляет меш с новыми данными
> me.update(calc_edges=True)
> return ob
>def run(origin):
> (x,y,z) = (0.707107, 0.258819, 0.965926)
> verts1 = ((x,x,-1), (x,-x,-1), (-x,-x,-1), (-x,x,-1), (0,0,1))
> faces1 = ((1,0,4), (4,2,1), (4,3,2), (4,0,3), (0,1,2,3))
> ob1 = createMesh('Solid', origin, verts1, [], faces1)
> verts2 = ((x,x,0), (y,-z,0), (-z,y,0))
> edges2 = ((1,0), (1,2), (2,0))
> ob2 = createMesh('Edgy', origin, verts2, edges2, [])
> # Сдвигает второй объект с дороги
> ob1.select = False
> ob2.select = True
> bpy.ops.transform.translate(value=(0,2,0))
>return if __name__ == "__main__":
> run((0,0,0))
Эта программа добавляет UV-сферу с двумя группами вершин (Left И Right) и четырьмя ключами формы.
>#----------------------------------------------------------
># File shapekey.py
>#----------------------------------------------------------
>import bpy, random
>def run(origin):
> # Добавление UV-сферы
> bpy.ops.mesh.primitive_uv_sphere_add(
> segments=6, ring_count=5, size=1, location=origin)
> ob = bpy.context.object
> ob.name = 'ShapeKeyObject'
> ob.show_name = True
> # Создаёт левую (Left) и правую (Right) группы вершин
> left = ob.vertex_groups.new('Left')
> right = ob.vertex_groups.new('Right')
> for v in ob.data.vertices:
> if v.co[0] > 0.001:
> left.add([v.index], 1.0, 'REPLACE')
> elif v.co[0] < -0.001:
> right.add([v.index], 1.0, 'REPLACE')
> else:
> left.add([v.index], 0.5, 'REPLACE')
> right.add([v.index], 0.5, 'REPLACE')
> # Добавление ключа Basis (базовый)
> bpy.ops.object.shape_key_add(None)
> basis = ob.active_shape_key
> # Добавление ключа FrontForward:
> # передние вершины сдвигаются на единицу вперёд
> # Пределы изменения (Slider) от -1.0 до +2.0
> bpy.ops.object.shape_key_add(None)
> frontFwd = ob.active_shape_key
> frontFwd.name = 'FrontForward'
> frontFwd.slider_min = -1.0 frontFwd.slider_max = 2.0
> for v in [19, 20, 23, 24]:
> pt = frontFwd.data[v].co
> pt[1] = pt[1] - 1
> # Добавление ключей TopUp: верхние вершины перемещаются на единицу вверх.
> # TopUp_L и TopUp_R влияют только на левые и правые половины, соответственно
> keylist = [(None, ''), ('Left', '_L'), ('Right', '_R')]
> for (vgrp, suffix) in keylist:
> bpy.ops.object.shape_key_add(None)
> topUp = ob.active_shape_key
> topUp.name = 'TopUp' + suffix
> if vgrp:
> topUp.vertex_group = vgrp
> for v in [0, 1, 9, 10, 17, 18, 25]:
> pt = topUp.data[v].co
> pt[2] = pt[2] + 1
> # Установка позы ключам формы
> for shape in ob.data.shape_keys.key_blocks:
> shape.value = random.random()
> return
>if __name__ == "__main__":
> # Создание пяти объектов с произвольными ключами формы
> for j in range(5):
> run((3*j,0,0))
Эта программа создает цепь из десяти звеньев. Звено является простым тором, масштабированным вдоль оси x. Мы добавляем звену модификатор массива, где смещение управляется пустышкой (empty). Наконец, модификатор массива применяется (apply), создавая из цепи единственный меш.
>#----------------------------------------------------------
># File chain.py
># Creates an array modifier and applies it# Update to API rev. 36523
>#----------------------------------------------------------
>import bpy
>import math
>from math import pi
>def run(origin):
># Добавление единственного звена цепи к сцене
> bpy.ops.mesh.primitive_torus_add(
> #major_radius=1,
> #minor_radius=0.25,
> major_segments=12,
> minor_segments=8,
> use_abso=True,
> abso_major_rad=1,
> abso_minor_rad=0.6,
> location=(0,0,0),
> rotation=(0,0,0))
> # Масштабирование тора вдоль оси x
> ob = bpy.context.object
> ob.scale = (0.7, 1, 1)
> bpy.ops.object.transform_apply(scale=True)
> # Создание пустышки
> bpy.ops.object.add(
> type='EMPTY',