Чтение онлайн

ЖАНРЫ

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

Larsson Thomas

Шрифт:

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))

Применение модификатора массива (array)

Эта программа создает цепь из десяти звеньев. Звено является простым тором, масштабированным вдоль оси 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',

location=(0,1.2,0.2),

rotation=(pi/2, pi/4, pi/2))

empty = bpy.context.object

#
Звено цепи снова делается активным

scn = bpy.context.scene

scn.objects.active = ob

# Добавление модификатора

mod = ob.modifiers.new('Chain', 'ARRAY')

mod.fit_type = 'FIXED_COUNT'

mod.count = 10

mod.use_relative_offset = 0

mod.use_object_offset = True

mod.offset_object = empty

# Применение модификатора

bpy.ops.object.visual_transform_apply

bpy.ops.object.modifier_apply(apply_as='DATA', modifier='Chain')

# Перемещение цепи на место

bpy.ops.transform.translate(value=origin)

# Пустышка больше не нужна

scn.objects.unlink(empty)

del(empty)

return

if __name__ == "__main__":

run((0,3,0))

Арматуры

Арматура

Эта программа создаёт арматуру.

#---------------------------------------------------

# File armature.py

#---------------------------------------------------

import bpy, math

from mathutils
import Vector, Matrix

def createRig(name, origin, boneTable):

# Создание арматуры и объекта

bpy.ops.object.add(

type='ARMATURE',

enter_editmode=True,

location=origin)

ob = bpy.context.object

ob.show_x_ray = True

ob.name = name

amt = ob.data

amt.name = name+'Amt'

amt.show_axes = True

# Создание костей

bpy.ops.object.mode_set(mode='EDIT')

for (bname, pname, vector) in boneTable:

bone = amt.edit_bones.new(bname)

if pname:

parent = amt.edit_bones[pname]

bone.parent = parent

bone.head = parent.tail

bone.use_connect = False

Поделиться с друзьями: