Работа с UV через API Blender
Доступ к активной развертке:
1 |
bpy.context.active_object.data.uv_layers.active |
Доступ к развертке по имени:
1 |
bpy.context.active_object.data.uv_layers['UVMap'] |
Доступ к активной развертке:
1 |
bpy.context.active_object.data.uv_layers.active |
Доступ к развертке по имени:
1 |
bpy.context.active_object.data.uv_layers['UVMap'] |
Для размещения элементов пользовательского интерфейса при разработке аддонов Blender кроме обычных панелей (N/T/Properties) и их подпанелей можно использовать и так называемые плавающие панели – появляющиеся на экране в произвольном месте при нажатии пользователем определенного сочетания клавиш или при совершении им какого-либо действия. Простейшим примером таких панелей является панель, появляющаяся при нажатии клавиши f6 сразу после добавления в сцену какого-либо объекта (shift+a).
API Blender предоставляет разработчикам возможность создавать подобные панели для своих аддонов. Рассмотрим процесс создания плавающей панели на примере всплывающего окна с сообщением типа “Messagebox”.
Как обращаться через Blender Python API к активным (выделенным) объектам при написании скриптов/аддонов:
1 |
bpy.context.area.spaces.active |
1 |
bpy.context.screen.scene |
1 |
bpy.context.active_object |
1 |
bpy.context.active_object.active_material.node_tree.nodes.active |
1 |
bpy.context.scene.node_tree.nodes.active |
1 |
bpy.context.area.spaces.active.text.as_string() |
1 |
bpy.context.active_object.data.uv_layers.active |
При написании скриптов в Blender часто нужно узнать полный список свойств какого-либо объекта для того, чтобы обращаться к ним в дальнейшем через Blender API. Рассмотрим, как можно получить список свойств и методов, доступных для исследуемого объекта.
Хранение информации в удаленной базе данных стало обычной практикой при разработке программных продуктов. Blender – не исключение. При написании скриптов и аддонов, разработчик может столкнуться с необходимостью обращения к базе данных, чтобы получить из нее или записать в нее необходимые данные. MySQL на сегодня является одной из самых распространенных и общедоступных баз данных и хорошо подходит для работы с Blender.
Взаимодействие Blender с базой данных MySQL через Python API не преставляет особых сложностей, однако сначала необходимо выполнить некоторую подготовку:
При создании анимации иногда бывает необходимо выполнить какие-то действия в зависимости от времени или, что в сущности одно и то же, номера текущего кадра. Осуществить привязку анимации к кадрам в Blender возможно с использованием встроенного Python API.
В качестве примера создадим несложную анимацию, последовательно превращающую одну из букв произвольного текста из строчной в заглавную.
При разработке сложных аддонов с большим количеством кода, хранить весь код в одном файле нецелесообразно. Когда в одном файле присутствуют несколько классов, наборов функций и данных, часто логически не связанных между собой, это затрудняет чтение, отладку, поиск нужных фрагментов кода, его повторное использование. Подобная компоновка кода считается очень плохим тоном программирования.
Blender на уровне Python поддерживает модульную систему компоновки кода, что позволяет разносить логические части аддона по отдельным файлам, после чего подключать их для использования там, где необходимо. Даже если вы ни разу не задумывались об использовании модулей, создавая скрипты или аддоны, вы с ними уже сталкивались – любой код, сохраненный в файл *.py, представляет из себя отдельный самостоятельный модуль. Просто ваш аддон состоял всего лишь из одного модуля. Сложные же аддоны могут состоять из нескольких десятков подключенных модулей.
В Blender есть возможность ограничить область рендера – выделив с помощью специальной рамки часть будущего изображения и отметив чекбокс Border во вкладке Render – Dimensions окна Properties. Если такая рамка задана – отрендерена будет только ограниченная рамкой область изображения.
Для того, чтобы задать рамку рендера через Blender API есть два варинта:
Все определенные пользователем классы (панели, операторы), если они зарегистрированы в API, существуют только пока запущен сам графический редактор Blender. В момент закрытия программы все они удаляются из памяти. Поэтому, даже если внутри пользовательских классов определены какие-то переменные, все значения этих переменных при перезапуске программы будут сброшены.
Однако, иногда бывает необходимо использовать в аддоне Blender переменную, значение которой не будет потеряно в процессе перезапуска программы. Чтобы переменная сохраняла свое значение, нужно создать ее в виде специального класса – свойства (property), и присоединить к какому-либо объекту, свойства которого сохраняются в *.blend файле.
Создание в аддонах Blender переменных с сохраняемыми значениямиRead More »
Пользовательские классы-операторы, наследованные от bpy.types.Operator, являются статическими классами. Следовательно в них могут быть определены только статические переменные.
Определение статической переменной sampleVar в классе-операторе SampleClass:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class SampleClass(bpy.types.Operator): bl_idname = "sample.sample_class" sampleVar = 5 def execute(self, context): print(self.sampleVar) self.__class__.sampleVar += 1 print(self.sampleVar) print(self.__class__.sampleVar) def sampleFunc(): SampleClass.sampleVar += 1 print(SampleClass.sampleVar) |