Относится к Blender v2.31
Blender имеет очень мощные средства, ещё не рассмотренные сдесь. Это встроенный в Blender интерпретатор языка Python.
Он позволяет любому пользователю добавлять новые функции, написав скрипт на Python'е. Python - это интерпретируемый, интерактивный, объектно-ориентированный язык программирования. Он поддерживает модули, обработку исключений, динамическое типизирование, очень высокого уровня динамические типы данных и классы. Python сочетает удивительную мощь с понятным синтаксисом. Он был специально разработан для использования как язык расширений в приложениях, которым необходим программируемый интерфейс, поэтому он используется в Blender'е.
Из двух способов расширения функциональности Blender'а (второй - установка плагинов), программирование на Python более мощное и универсальное средство. Предпочтительно писать срипты на Python'е, чем создавать плагины.
На самом деле, написание скриптов на Python'е имело некоторые ограничения до версии 2.25 Blender'а (последний релиз от компании NaN). Когда Blender стал свободным продуктом, множество разработчиков собралось вокруг него. В фонде Blender'а (Blender Foundation) решили работать над ним и изменить его интерфейс, Python API - это похоже часть Blender'а, которая подверглась наибольшему развитию и процессе полной реорганизации которой, были перенесены существующие модули и добавлено много новых.
Эта эволюция продолжается и даже большая интеграция ожидается в будущих версиях Blender'a.
В Blender'е есть текстовое окно среди других типов
окон доступных через
кнопку меню типов окон или через SHIFT-F11.
Только что открытое текстовое окно - серое и пустое, с очень простой панелью инструметов (Рис 1). Там слева направо расположены стандартная кнопка выбора типа окна и меню текстового окна. Затем кнопка включения полноэкранного режима, кнопка вкл./выкл. для номеров строк и кнопка меню.
Кнопка меню(
) позволяет вам выбирать текстовый буфер (файл), который будет показан, а
также создавать новые буферы и загружать текстовые файлы.
Если вы загрузите файл, текстовое окно на время станет обыкновенным окном выбора файла. Когда текстовый буфер находится в текстовом окне, оно ведёт себя как очень простой текстовый редактор. Набирайте текст на клавиатуре как обычно. Как обычно нажав ЛКМ, передвинув и отпустив её, можно выделить текст. Применяются следующие клавиатурные комбинации:
ALT-C или CTRL-C - Копируют помеченый текст в буфер обмена;
ALT-X или CTRL-X - Вырезают помеченый текст в буфер обмена;
ALT-V или CTRL-V - Вставляют текст из буфера обмена в позицию курсора;
ALT-S - Сохраняет текст как текстовый файл, появляется окно выбора файла;
ALT-O - Загружает текст, появляется окно выбора файла;
ALT-F - Находит выделенный текст;
SHIFT-ALT-F или RMB - Открывает контекстное меню текстового окна;
ALT-J - Показывает диалог, в котором можно выбрать номер строки на которую перепрыгнет курсор;
ALT-P - Выполнит текст как питоновский скрипт;
ALT-U - Отмена;
ALT-R - Повтор;
CTRL-R - Обновить (перезагрузить) текущий буфер;
ALT-M - Конвертирует содержимое текстового окна (максимальное кол-во символов 100);
Blender использует отдельный от остальных приложений буфер обмена. Поэтому вы не можете вырезать/вставлять/копировать из или в Blender. Для доступа к общему буферу обмена используйте SHIFT-CTRL-C SHIFT-CTRL-V
Чтобы удалить текстовый буфер просто нажмите клавишу 'X' напротив имени файла, также для материалов, и т.д..
Самая примечательная клавиатурная комбинация - это ALT-P, которая делает так, чтобы содержимое текущего буфера обработалось встроенным в Blender интерпретатором Python'а.
Следующий раздел представляет собой пример написание питоновского скрипта. Перед тем переходить к ней, стоит заметить что Blender распространяется только с голым интерпретатором Python'а и некоторыми специфическими модулями, которые описываюся в **REF** .
![]() | Другое использование текстового окна |
---|---|
Текстовое окно удобно использовать также когда вы хотите поделиться блендеровскими файлами с сообществом или со своими друзьями. Текстовое окно может быть использовано для того чтобы написать в нём вспомогательный текст, описывающий содержимое вашего файла. Это намного удобнее чем использовать для этого отдельное приложение. Удостоверьтесь перед сохранением, что оно видимо! Если вы разделяете файл с сообществом и хотите, чтобы он распространялся под какой-либо лицензией, вы можете написать её в текстовом окне. |
Для доступа к стандартным модулям Python'а вам нужно, чтобы на вашей машине был полностью установлен работающий интерпретатор Python'а. Вы можете скачать его отсюда http://www.python.org. Обязательно проверте на http://www.blender.org какая точно версия Python'а встроена в Blender, чтобы избежать проблем с совместимостью.
Blender должен знать где эта полная версия Python'а установлена. Это делается определением переменной окружения PYTHONPATH.
Установка PYTHONPATH в Win95,98,Me. Как только вы установили Python, C:\PYTHON22, вы должны открыть файл C:\AUTOEXEC.BAT в вашем любимом текстовом редакторе и добавить строку:
SET PYTHONPATH=C:\PYTHON22;C:\PYTHON22\DLLS;C:\PYTHON22\LIB;C:\PYTHON22\LIB\LIB-TK |
и перезагрузить систему.
Установка PYTHONPATH в WinNT,2000,XP. Как только вы установили Python, C:\PYTHON22 Нажмите правой кнопкой мыши на иконке "My Computer" на рабочем столе, и выбиритеСвойства. Выбирите вкладкуДополнительно и нажмите кнопку Переменные среды.
Ниже в поле системных переменных, (второе поле), щёлкните Новая. Если вы не администратор вы не сможете сделать это. В этом случае нажмите Новая в верхнем поле.
Теперь, в поле имени переменной, введите PYTHONPATH, а в поле значения:
C:\PYTHON22;C:\PYTHON22\DLLS;C:\PYTHON22\LIB;C:\PYTHON22\LIB\LIB-TK |
Нажмите OK несколько раз, чтобы выйти из всех диалогов. Может нужно будет перезагружаться, а может и нет, зависит от операционной системы.
Установка PYTHONPATH в Linux и др. UNIX'ах. Обычно Python будет уже установлен. Если нет, установите его. Вам нужно будет проверить где он расположен. Это легко, просто запустите интерактивную оболочку Python, открыв обычную оболочку ОС и написав в ней python. Введите следующие команды:
>>> import sys |
и посмотрите на вывод, он должен выглядеть примерно так
['', '/usr/local/lib/python2.2', '/usr/local/lib/python2.2 /plat-linux2', '/usr/local/lib/python2.0/lib-tk', '/usr/lo |
Добавте это в ваш любимый rc-файл как перменную окружения. Например, добовте в .bashrc строку
export PYTHONPATH=/usr/local/lib/python2.2:/usr/local/lib/ |
всё в одной строке. Откройте новую логин-оболочку, или выйдите и опять зайдите.
Относится к Blender v2.31
Теперь когда вы узнали, что Blender расширяется посредством написания скриптов на Python'е, постигли основы управления скриптами и узнали как их запускать, перед тем как ударять по вашим мозгам полным набором функций Python API давайте посмотрим на быстро работающие примеры.
Мы представляем крошечный скрипт для создания полигонов. Он на самом деле дублирует эти опции панели инструментов SPACE Add>>Mesh>>Circle , но создаёт 'заполненные' полигоны, не просто линию.
Создание скрипта продемонстрирует работу графического интерфейса пользователя полностью написанного через API Blender'а.
Первые 32 строки кода представлены в примере 1.
Пример 1. Заголовок скрипта
001 ###################################################### |
После необходимых коментариев с описанием того, что делает скрипт, происходит (строки 016-022) импортирование модулей Python'а.
Blender - это главный модуль в Blender Python API. NMesh - модуль обеспечивающий доступ к mesh-объектам Blender'а, в то время как BGL и Draw дают доступ к константам и функциям OpenGL и оконному интерфейсу Blender'а соответственно. Модуль math это математический модуль Python'а, но с недавнего времени и 'math' и 'os' модули встроены в Blender, вам не нужна полная инсталяция Python'а для этого!
Полигон определяется через число сторон и радиус. Эти параметры имеют значения, которые должны быть определены пользователем через GUI (Graphical User Interface) следовательно строки (025-026) создают два объекта (generic button), с начальными значениями по умолчанию.
И наконец, объекты интерфейса (GUI) работают с событиями и генерируют их. Идентификатор событий представляет целое число. Это хороший стиль программирования, определять мнемонические назавания для событий, как это сделано здесь в строках 029-031.
Код ответственный за отрисовку GUI должен быть в функции рисования draw (Пример 2).
Пример 2. Отрисовка GUI
033 ###################################################### |
Строки (037-039) просто предоставляют доступ к глобальным данным. Действительно интересное содержимое начинается со строк (042-044). Инициализирутся окно OpenGL, и текущая позиция устанавливается в x=8, y=103. Исходное положение этой справки в нижнем левом углу скриптового окна. Затем выводится Demo Polygon Script.
Строки написанные далее (047-048) создают кнопки ввода параметров. Первые строки (049-050) - это кнопка ввода чисел, точно такая как в различных кнопочных окнах Blender'а. Для понимания всех параметров, обратитесь пожалуйста к справке по API. В основном там находятся: заголовок кнопки, события генерируемые кнопкой, её расположение (x,y), размеры (ширина, высота), значение, какие данные относятся к значению кнопки, минимальное и максимальное допустимые значения и текстовая строка, которая должна появлятся как всплывающая подсказка.
Строки (051-052) определяют числовую кнопку с полосой прокрутки, с очень похожим синтаксисом. Строки (055-056), наконец, создают кнопку выхода (Exit) , а ткаже кнопку прорисовки (Draw), которая создаст полигон.
Графический интерфейс пользователя не прорисовывается, и не работает, пока подходящее событие не прописано и не зарегистрировано. (Пример 3).
Пример 3. Управление событиями
058 def event(evt, val): |
Строки (058-060) определяют контроллер событий, соответствующий быстрой клавише (QKEY) вызова функции Exit().
Больше интересного в строках (062-072), отвечающих за события интерфейса. Каждый раз кнопка интерфейса пользователя используется для вызова этой функции, с номером события, определённым в качестве параметра. Суть этой функции в "выборе" структуры, выполняющей код соответствующий номеру события.
И последнее - это вызов функции Register. Она эффективно прорисовывает и запускает цикл перехвата событий.
И наконец, Пример 4 показывает главную функцию, которая создаёт полигон. Это хотя и простое редактирование мешев, но показывает много важных моментов внутренней структуры данных Blender'а.
Пример 4. Заголовок скрипта
076 ###################################################### |
Первая важная строка здесь (082). Это создание нового меш-объекта, в переменной poly. Меш-объект состоит из списка вершин и граней, плюс ещё некоторое интересное содержимое. Для наших целей нам нужны только списки вершин и граней.
Конечно только что созданный меш является пустым. Первый цикл (строки 085-092) задаёт положение x,y,z и количество вершин, необходимое для определения полигона. Т.к. это плоская фигура значение z везде равно 0.
Строка (091) вызывает метод Vert из модуля NMesh для создания нового вершинного объекта для координат (x,y,z). Такой объект добавляется (строка 096) в список вершин меш-объекта.
Наконец (строки 095-096) последняя вершина добавляется в центр.
Строки (099-104) соеденяют эти вершины, чтобы создать грани. Не обязательно создавать все вершины заранее, а только потом грани. Вы можете безопасно создавать новые грани как только все вершины необходимые для них созданы.
Строка (100) создаёт новый объект грани. Объект грани имеет свой собственный список вешин v, определяющий его. Строки (101-103) добавляют три вершины к первоначально пустому списку f.v. Две из этих вершин - это последующие вершины полигона, а третья центральная. Эти вершины должны быть взяты из списка вершин меш-объекта. Наконец строка (104) добавляет только что созданную грань к списку граней нашего меш-объектаpoly mesh.
Если вы создадите файл polygon.py, содержащий вышеописаный код и загрузите его в текстовое окно Blender'а, как вы научились в предыдущем разделе, и нажмёте ALT-P в этом окне, чтобы запустить скрипт, вы увидите, что скрипт исчезнет и окно станет серым. В левом нижнем углу будет нарисован элемент управления (Рис 2).
Выбрав, например, 5 вершин и радиус равный 0.5, а потом нажав кнопку Draw появится пятиугольник в плоскости xy окна трёхмерного вида (Рис 3).