Написание скриптов для 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. В целом можно ожидать, что документация класса находится в модуле тем же названием.
Кроме модуля 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: Эти модули содержат, кроме прочего, классы