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

Шрифт
Интервал


>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

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

>import bpy 


>def createBevelObject():

>    # Создание Bevel-кривой и объекта

>    cu = bpy.data.curves.new('BevelCurve', 'CURVE')

>    ob = bpy.data.objects.new('BevelObject', cu)

>    bpy.context.scene.objects.link(ob)


>    # Настройка некоторых атрибутов cu.dimensions = '2D'

>    cu.resolution_u = 6

>    cu.twist_mode = 'MINIMUM'

>    ob.show_name = True


>    # Координаты управляющих точек

>    coords = [

>        (0.00,0.08,0.00,1.00),

>        (-0.20,0.08,0.00,0.35),

>        (-0.20,0.19,0.00,1.00),

>        (-0.20,0.39,0.00,0.35),

>        (0.00,0.26,0.00,1.00),

>        (0.20,0.39,0.00,0.35),

>        (0.20,0.19,0.00,1.00),

>        (0.20,0.08,0.00,0.35)

>    ]


>    # Создание сплайна и установка управляющих точек

>    spline = cu.splines.new('NURBS')

>    nPointsU = len(coords)

>    spline.points.add(nPointsU)

>    for n in range(nPointsU):

>        spline.points[n].co = coords[n]


>    # Настройка атрибутов сплайна. Точки, вероятно, должны существовать к этому моменту.

>    spline.use_cyclic_u = True

>    spline.resolution_u = 6

>    spline.order_u = 3


>    return ob  


>def createCurveObject(bevob):

>    # Создание кривой и объекта

>    cu = bpy.data.curves.new('MyCurve', 'CURVE')

>    ob = bpy.data.objects.new('MyCurveObject', cu)

>    bpy.context.scene.objects.link(ob)


>    # Настройка некоторых атрибутов

>    cu.bevel_object = bevob

>    cu.dimensions = '3D'

>    cu.use_fill_back = True

>    cu.use_fill_front = True

>    ob.show_name = True


>    # Координаты Безье

>    beziers = [

>        ((-1.44,0.20,0.00), (-1.86,-0.51,-0.36), (-1.10,0.75,0.28)),

>        ((0.42,0.13,-0.03), (-0.21,-0.04,-0.27), (1.05,0.29,0.21)),

>        ((1.20,0.75,0.78), (0.52,1.36,1.19), (2.76,-0.63,-0.14)) ]


>    # Создание сплайна и установка управляющих точек Безье

>    spline = cu.splines.new('BEZIER')

>    nPointsU = len(beziers)

>    spline.bezier_points.add(nPointsU)

>    for n in range(nPointsU):

>        bpt = spline.bezier_points[n]

>        (bpt.co, bpt.handle_left, bpt.handle_right) = beziers[n]

>    return ob 


>def run(origin):

>    bevob = createBevelObject()

>    bevob.location = origin


>    curveob = createCurveObject(bevob)

>    curveob.location = origin

>    bevob.select = False

>    curveob.select = True

>    bpy.ops.transform.translate(value=(2,0,0))

>    return


>if __name__ == "__main__":

>   run((0,0,0))


Типы кривых

Эта программа иллюстрирует различие между типами кривых: POLY, NURBS и BEZIER.



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

># File curve_types.py

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

>import bpy

>from math import sin, pi


># Poly (многоугольник) и nurbs

>def makePolySpline(cu):

>    spline = cu.splines.new('POLY')

>    cu.dimensions = '3D'

>    addPoints(spline, 8)  


>def makeNurbsSpline(cu):

>    spline = cu.splines.new('NURBS')

>    cu.dimensions = '3D'

>    addPoints(spline, 4)

>    spline.order_u = 3

>    return spline 


>def addPoints(spline, nPoints):

>    spline.points.add(nPoints-1)

>    delta = 1/(nPoints-1)

>    for n in range(nPoints):

>        spline.points[n].co = (0, n*delta, sin(n*pi*delta), 1)


>  # Безье

>def makeBezierSpline(cu):

>    spline = cu.splines.new('BEZIER')

>    cu.dimensions = '3D'

>    order = 3

>    addBezierPoints(spline, order+1)

>    spline.order_u = order 


>def addBezierPoints(spline, nPoints):

>    spline.bezier_points.add(nPoints-1)

>    bzs = spline.bezier_points

>    delta = 1/(nPoints-1)

>    for n in range(nPoints):

>        bzs[n].co = (0, n*delta, sin(n*pi*delta))

>        print(bzs[n].co)

>    for n in range(1, nPoints):

>        bzs[n].handle_left = bzs[n-1].co

>    for n in range(nPoints-1):

>        bzs[n].handle_right = bzs[n+1].co

>    return spline


># Создание кривой с объектом и привязка к сцене

>def makeCurve(name, origin, dx):

>    cu = bpy.data.curves.new('%sCurve' % name, 'CURVE')

>    ob = bpy.data.objects.new('%sObject' % name, cu)

>    (x,y,z) = origin ob.location = (x+dx,y,z)

>    ob.show_name = True

>    bpy.context.scene.objects.link(ob)

>    return cu 


>def run(origin):

>    polyCurve = makeCurve("Poly", origin, 0)

>    makePolySpline(polyCurve)

>    nurbsCurve = makeCurve("NurbsEnd", origin, 1)

>    spline = makeNurbsSpline(nurbsCurve)

>    spline.use_endpoint_u = True

>    nurbsCurve = makeCurve("NurbsNoend", origin, 2)

>    spline = makeNurbsSpline(nurbsCurve)

>    spline.use_endpoint_u = False

>    bezierCurve = makeCurve("Bezier", origin, 3)

>    makeBezierSpline(bezierCurve)

>    return


>if __name__ == "__main__":

>    run((0,0,0))


Путь

Эта программа добавляет путь и обезьяну с ограничением "следовать по пути" (follow path).


Рекомендуем почитать
Язык PL/SQL

В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.


Программирование на Visual C++. Архив рассылки

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.


Введение в Direct3D8

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Пишем драйвер Windows на ассемблере

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Язык программирования С# 2005 и платформа .NET 2.0.

В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML.


Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.