Написание скриптов для Blender 2.49 - [10]

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

Теперь мы можем определить Меш-объект и назвать его Cube (выделенная часть в предыдущем коде). Как отмечено раньше, вершины Меш-объекта доступны как список с именем verts. Он имеет метод extend(), который может взять список кортежей, представляющих   позиции   вершин,   чтобы   определить дополнительные объекты MVert в нашем Меше.

Точно так же мы можем добавить дополнительные грани к списку граней faces Меш-объекта, вызывая его метод extend() со списком кортежей. Поскольку все рёбра куба являются рёбрами граней, нет необходимости добавлять какие-либо рёбра отдельно. Это произойдёт автоматически, когда мы применяем extend() к списку граней.

Меш-объект, который мы определили, теперь можно вставить в объект Блендера, который может быть добавлен к активной сцене. Заметьте, что вполне допустимо иметь Меш-объект и Объект Блендера с одинаковым именем (Cube в данном случае), поскольку различные типы объектов в Блендере имеют отдельные пространства имён. В графическом интерфейсе пользователя Блендера имена всегда имеют двухбуквенный префикс, чтобы различать их. (например, LA для лампы, ME для меша, или OB для объекта Блендера)

При создании Меш-объекта много внимания нужно уделять всем добавляемым вершинам, рёбрам и граням, и правильно их нумеровать. Это только вершина айсберга при создании мешей. В Главе 2, Создание и Редактирование Объектов, мы увидим, что прячется под водой.


Распространение скриптов

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

Жизнеспособной альтернативой этому может быть распространение скриптов в виде текста внутри .blend файла. .blend файл может быть сохранен со скриптом, ясно видимым в главном окне, и одна из первых строк комментария скрипта, вероятно, может выглядеть так “Press ALT-P to start this script" (нажмите ALT-P для запуска скрипта). Этим способом скрипт сможет  использовать любой, кто знает, как открывать .blend файл.

Дополнительным преимуществом является то, что при этом можно легко упаковать дополнительные ресурсы в тот же .blend файл. Например, скрипт может использовать определенные материалы или текстуры, или Вы можете захотеть включить образец результата вашего скрипта. Единственная вещь, которая очень трудна - распространять таким образом модули Питона. Вы можете использовать оператор import, чтобы получить доступ к другим текстовым файлам, но это может вызвать проблемы (смотри Приложение B). Если у вас есть много кода и он организован в модулях, Вам и вашим пользователям, вероятно, будет лучше, если Вы станете распространять всё в виде ZIP-файла с ясными инструкциями, куда нужно распаковывать этот ZIP-файл.

Для Pynodes (или динамических нодов, смотри Главу 7) у вас нет выбора. Pynodes могут ссылаться только на код Питона, содержащийся в текстах внутри .blend файла. На самом деле это не является ограничением, так как эти Pynodes - неотъемлемая часть материала, а материалы Блендера могут распространяться только внутри .blend файла. Когда эти материалы привязаны или добавлены к связанным с ними нодами, то любые тексты, ассоциированные с Pynodes, привязываются или добавляются также, полностью скрываясь от конечного пользователя через материал, который на самом деле создаётся.


API Блендера

При разработке программ на Питоне в Блендере важно понимать, какие функции обеспечивается API, а тем более, какие нет. API, в основном, даёт доступ ко всем данным и предоставляет функции для манипуляции этими данными. К тому же, API обеспечивает разработчика функциями для рисования на экране и для взаимодействия с интерфейсом пользователя и оконной системой. Что API Блендера не предоставляет - это объектно-специфическую функциональность, кроме присваивания простых свойств, особенно недостаёт всех функций, манипулирующих мешами на уровне вершин, рёбер и граней, кроме как добавления или удаления их.

Это означает, что очень высокоуровневые или сложные задачи, как например, добавление модификатора subsurface на объект Меша или отображение диалога выбора файлов, так же просто, как написание одной строки кода, тогда как важнейшие и, видимо, простые функции, такие как подразбиение (subdividing) ребра или выбор рёберного цикла не доступны. Это не означает, что эти задачи нельзя выполнить, но мы должны программировать их самостоятельно. Так много примеров в этой книге ссылается на модуль, называемый Tools, который мы разработаем в следующих главах, и который будет содержать полезные инструменты от выдавливания граней до замыкания циклов. Где это необходимо и интересно, мы осветим код этого модуля, но, главным образом, он предназначен иметь запас всего того кода, который мог бы увести нас от наших целей.