Введение в написание скриптов на Питоне для Блендера 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()


Решётка (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))


Кривая

Эта программа добавляет кривую Безье. Она также добавляет круг Nurbs, который используется как bevel-объект.



>#----------------------------------------------------------

># File curve.py

>#----------------------------------------------------------