Написание скриптов для Blender 2.49 - страница 14

стр.

файла или перемещать их по вашей сцене), но это объекты в понимании Питона. Например, вершины, рёбра, и грани внутри меша выполнены в виде классов: Blender.Mesh.MVert, Blender.Mesh.MEdge, и Blender.Mesh.MFace соответственно.

Множество модулей также имеют свои собственные подмодули; например Модуль Blender.Scene предоставляет доступ к контексту рендера посредством модуля Blender.Scene.Render. Между прочим, этот модуль определяет класс RenderData, который позволяет Вам рендерить неподвижное изображение или анимацию.

Таким образом, с тем, что мы теперь знаем, можно нарисовать два немного различных родословных дерева объектов Блендера.




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

Конечно, диаграмма выше сильно упрощена, так как мы пропустили некоторые менее важные объекты, и так как она иллюстрирует только единственный тип отношений. Конечно, существует намного больше типов отношений в сцене, такие как, например, отношения родитель-ребенок или ограничения (constraints).

Мы можем сопоставить предшествующую диаграмму со следующей, которая показывает в каком модуле какой тип объекта (класс) определён:




Различия весьма заметны, и их важно иметь в виду, особенно при поиске конкретной информации, содержащейся в документации Blender API. Не ожидайте, что найдёте информацию об объекте Curve (Кривая) в документации о модуле Blender.Object, поскольку кривая в Блендере является специфическим объектом Блендера; класс Curve определён и документирован в Модуле Blender.Curve. В целом можно ожидать, что документация класса находится в модуле тем же названием.


Модуль bpy

Кроме модуля Blender, есть другой модуль верхнего уровня, с именем bpy, который обеспечивает унифицированный путь доступа к данным. Он считается экспериментальным, но он стабилен и может быть использован как более интуитивный путь доступа к объектам. Например, если мы хотим иметь доступ к объекту с именем MyObject, обычным образом мы должны действовать приблизительно так:

>import Blender

>ob = Blender.Object.Get(name='MyObject')

С модулем bpy мы можем перефразировать это так:

>import bpy

>ob = bpy.data.objects['MyObject']

Так же, чтобы получить доступ к активному объекту сцены, мы могли бы написать это:

>import Blender

>scene = Blender.Scene.GetCurrent()

Что можно записать альтернативным способом:

>import bpy

>scene = bpy.data.scenes.active

Что из них предпочитать - дело вкуса. Модуль bpy будет единственным способом доступа к данным в ожидаемом Блендере 2.5, но изменения в Блендере 2.5 проникают глубже, чем просто такой способ доступа к данным, так не обманитесь поверхностным сходством имени модулей!


Рисование на экране

Доступ к системе окон Блендера предоставлен модулем Blender.Draw. Здесь Вы найдёте классы и функции для определения кнопок и управляющих меню, и пути взаимодействия с пользователем. Типы графических элементов, которые Вы можете отобразить, используя модуль  Draw, ограничены обычно используемыми, и модификации невозможны.

Более передовые функции предоставлены в модуле Blender.BGL, который дает Вам доступ фактически ко всем функциям и константам OpenGL, позволяющим Вам рисовать на экране почти всё, что угодно, и позволить взаимодействовать с пользователем множеством различных способов.


 Утилиты

Наконец, есть множество модулей, включающих различную функциональность, которые не подходят для любой из предыдущих категорий:

Blender.Library: Блендер позволяет Вам добавлять (то есть, импортировать) или связывать (link) объекты из другого .blend файла. Можно посмотреть на это по-другому - .blend файл может действовать как библиотека, где Вы можете сохранять ваши активы. И поскольку почти всё является объектом в Блендере, почти любой актив может быть сохранен в такой библиотеке, будь это модели, лампы, текстуры, или даже полные сцены. Модуль Blender.Library предоставляет авторам скриптов средства получить доступ к этим библиотекам.

Blender.Mathutils и Blender.Geometry: Эти модули содержат, кроме прочего, классы