Книга: Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода

Группы вершин и ключи формы

Группы вершин и ключи формы

Эта программа добавляет 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))

Оглавление книги


Генерация: 1.525. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз