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

Решётка (Lattice)

Решётка (Lattice)

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

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


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