KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программы » Michel Anders - Написание скриптов для Blender 2.49

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Michel Anders, "Написание скриптов для Blender 2.49" бесплатно, без регистрации.
Перейти на страницу:

Давайте напишем немного кода! Вы можете набрать следующие строки непосредственно в интерактивную консоль Питона, или Вы можете набрать новый текст в текстовом редакторе Блендера, и затем нажать Alt + P, чтобы запустить скрипт. Это - короткий скрипт, но мы пройдем через него довольно подробно, так как он отобразит множество ключевых аспектов API Питона в Блендере.

#!BPY

import Blender

from Blender import Scene, Text3d, Window

hello = Text3d.New("HelloWorld")

hello.setText("Hello World!")

scn = Scene.GetCurrent()

ob = scn.objects.new(hello)

Window.RedrawAll()

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

Вы найдете вторую строку (которая выделена) фактически в любом скрипте Блендера, поскольку она дает нам доступ к классам и функциям API Питона в Блендере. Подобно ей, третья строка дает нам доступ к специфическим подмодулям модуля Blender, которые нам нужны в этом скрипте. Конечно, мы могли бы иметь доступ к ним как к членам модуля Blender  (например, Blender.Scene), но явный импорт немного уменьшит количество программного текста и повысит удобочитаемость.

Следующие две строки сначала создают объект Text3d и назначают его переменной hello. Объект Text3d будет иметь в Блендере имя HelloWorld, так что пользователи могут ссылаться на этот объект по этому имени. Также это имя, которое будет видно в окне Outliner, и в левом нижнем углу, если выбрать объект. Если там уже существует объект того же самого типа с этим именем, Блендер добавит цифровой суффикс к имени, чтобы сделать его уникальным. Например, HelloWorld мог бы стать HelloWord.001, если мы запустим этот скрипт дважды.

По умолчанию, вновь созданный объект Text3d будет содержать текст Text, так что мы изменяем его на Hello World! с помощью метода setText().

Вновь созданный в Блендере объект не видим по умолчанию, мы должны соединить его со Сценой, так что несколько следующих строк извлекают ссылку на текущую сцену и добавляют объект Text3d в неё. Объект Text3d не добавляется непосредственно к сцене, но метод scene.objects.new() вставляет объект Text3d в общий (generic) объект Блендера и возвращает ссылку на последний. Общий объект Блендера хранит информацию, общую для всех объектов, такую как позиция, в то время как объект Text3d хранит специфическую информацию, как, например, шрифт текста.

Наконец, мы сообщаем оконному менеджеру обновить все окна, это обновление нужно из-за добавления нового объекта.


Внедрение скрипта в меню Блендера

Ваш собственный скрипт не должен быть гражданином второго сорта. Его можно сделать частью Блендера наравне с любым из скриптов, которые поставляются с Блендером. Его можно добавить к меню Add (добавить) в заголовке наверху окна 3D-вида.

На самом деле меню Add присутствует в заголовке внизу окна пользовательских настроек, но так как это окно расположено выше окна 3D-вида, и по умолчанию минимизировано именно до заголовка, оно выглядит так, как будто оно является заголовком сверху окна 3D-вида. Множество пользователей так привыкли к этому, что они видят его как часть окна 3D-вида.

Он может предоставить информацию системе помощи Блендера также, как любой другой скрипт. Следующие несколько строк кода делают это возможным:

"""

Name: 'HelloWorld'

Blender: 249

Group: 'AddMesh'

Tip: 'Create a Hello World text object'

"""

Мы запускаем скрипт с автономным строковым объектом, фактически состоящим из нескольких строк. Каждая   строка   начинается   с   метки, сопровождаемой двоеточием и значением. Двоеточие должно следовать за меткой немедленно. Там не должно быть никаких промежуточных пробелов, в противном случае наш скрипт не появится ни в каком меню. Метки в начале каждой строки служат следующим целям:

Name (строка) определяет имя скриптов так, как они появятся в меню

Blender (число) определяет минимально необходимую версию Блендера для использования скрипта

Group (строка) - подменю в меню скриптов, под которым этот скрипт должен быть сгруппирован

Если наши скрипты должны появиться в меню Add | Mesh в окне 3D-вида (также доступного по нажатию Пробела), этот параметр должен быть AddMesh. Если было бы нужно другое подменю в меню скриптов, то тут могло бы быть, например, Wizards или Object. Кроме необходимых меток, могут быть добавлены следующие дополнительные метки:

Version (строка) - версия скрипта в любом предпочитаемом вами формате.

Tip (строка) — информация, показываемая в подсказке, появляющейся над пунктом меню в меню Скриптов. Если скрипт принадлежит группе AddMesh, никаких подсказок показываться не будет, даже если мы определим её здесь.




 Внедрение скрипта в систему помощи Блендера

Блендер имеет встроенную систему подсказки, которая доступна в меню Help наверху экрана. Оно дает доступ к онлайн-ресурсам и к информации о зарегистрированных скриптах через пункт Scripts Help Browser (браузер помощи по скриптам). Если его выбрать, появятся выпадающие меню для каждой группы, где Вы можете выбрать скрипт и посмотреть его информацию помощи.

Если мы хотим ввести наш скрипт во встроенную систему помощи, нам нужно определить несколько дополнительных глобальных переменных:

__author__    = "Michel Anders (varkenvarken)"

__version__   = "1.00 2009/08/01"

__copyright__ = "(c) 2009"

__url__       = ["author's site,

http://www.swineworld.org"]

__doc__       = """

A simple script to add a Blender Text object to a scene.

It takes no parameters and initializes the object to

contain the text 'Hello World'

"""

Перевод строки __doc__: Простой скрипт для добавления текстового объекта Блендера в сцену. Он не принимает никаких параметров и инициализирует объект, содержащий текст 'Hello World'

Эти переменные не требуют разъяснений, за исключением переменной __url__, - она  принимает список строк, где каждая строка состоит из короткого описания, запятой, и ссылки. В результате экран помощи будет выглядеть похожим на это:




Теперь все, что нам осталось сделать, это проверить его и поместить этот скрипт в нужном месте. Мы можем протестировать скрипт, нажав Alt + P. Если не столкнулись ни с какими ошибками, результатом будет наш объект Hello World Text3d, добавленный к сцене, но скрипт не будет пока добавлен в меню Add.

Если скрипт должен быть добавлен к меню Add, он должен находиться в каталоге скриптов Блендера. Для того, чтобы сделать это, сначала сохраните скрипт, находящийся в текстовом буфере, в файл со значимым именем. Затем, убедитесь, что этот файл расположен в каталоге скриптов Блендера. Этот каталог называется scripts и является подкаталогом в .blender, каталоге конфигурации Блендера. Он расположен в каталоге установки Блендера или (на Windows) в каталоге Application Data. Простейший способ найти свой - просто посмотреть снова на переменную sys.path, чтобы увидеть, куда указывает каталог, заканчивающийся на .blenderscripts.

Скрипты, расположенные в каталоге скриптов Блендера, автоматически будут выполнены при запуске, так что наш скрипт hello world будет доступен в любое время, когда мы запустим Блендер. Если мы хотим, чтобы Блендер пересмотрел каталог скриптов (чтобы нам не пришлось перезапускать Блендер для появления нашего нового дополнения), мы можем выбрать Scripts | Update Menus в интерактивной консоли.


Не запутайтесь, оставайтесь объективным

Как Вы могли обратить внимание, слово объект используется в двух различных (возможно, запутанно) случаях. В Блендере почти все называется Object. Лампа (Lamp), например - Object, но точно так же им являются Куб (Cube) или Камера (Camera). Объекты - вещи, которыми может манипулировать пользователь, и они имеют, например, позицию и вращение.

Фактически, всё несколько более структурировано (или усложнено, как говорят некоторые): любой объект Блендера содержит ссылку на более специфический объект, называемый блок данных (data block). Когда Вы добавляете объект Куб в пустую сцену, у вас будет общий (generic) объект в некоторой позиции. Этот объект будет назван Cube и будет содержать ссылку на другой объект, Меш (Mesh). Это Меш-объект также будет назван по умолчанию Cube, но это - нормально, так как пространства имён объектов различного типа раздельны.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*