При разработке аддонов модули должны быть максимально абстрагированные. По очень простой причине – функционал, созданный для текущего аддона, вполне вероятно понадобиться и в следующем аддоне, и возможно даже не в одном. На этапе реализации уже готового аддона, проблема доступа к подобным модулям с общим функционалом решается просто – все необходимые модули включаются в единый пакет и распространяются вместе. Однако на этапе разработки подобные модули гораздо удобнее хранить отдельно, не связывая их с каким-то определенным пакетом, а при необходимости импортировать нужные модули в нужный аддон.
Python, в соответствии с правилами импорта пакетов, предоставляет возможность подключать модули следующими способами:
При разработке сложных аддонов с большим количеством кода, хранить весь код в одном файле нецелесообразно. Когда в одном файле присутствуют несколько классов, наборов функций и данных, часто логически не связанных между собой, это затрудняет чтение, отладку, поиск нужных фрагментов кода, его повторное использование. Подобная компоновка кода считается очень плохим тоном программирования.
Blender на уровне Python поддерживает модульную систему компоновки кода, что позволяет разносить логические части аддона по отдельным файлам, после чего подключать их для использования там, где необходимо. Даже если вы ни разу не задумывались об использовании модулей, создавая скрипты или аддоны, вы с ними уже сталкивались – любой код, сохраненный в файл *.py, представляет из себя отдельный самостоятельный модуль. Просто ваш аддон состоял всего лишь из одного модуля. Сложные же аддоны могут состоять из нескольких десятков подключенных модулей.
Иногда при отладке скриптов или дополнений, допущенная ошибка не только прерывает исполнение кода, но и вызывает полное закрытие Blender вместе с системной консолью. Просмотреть сообщение об ошибке в этом случае невозможно.
Для того, чтобы все-таки понять, в каком месте произошел сбой, можно запустить Blender через интерпретатор командной строки cmd. В этом случае вывод лога Blender перенаправляется в окно cmd, которое, в случае закрытия самой программы из-за ошибок, не закрывается. При аварийном закрытии Blender все сообщения об ошибках остаются в окне cmd, где их можно просмотреть.
Для запуска Blender из интерпретатора командной строки нужно:
Запустить сам интерпретатор (“Пуск” – Выполнить – cmd)
В окне cmd ввести полный путь к установленному Blender. Например: C:\"Program Files"\blender-2.78a-windows64\blender.exe
Часть пути, если в нем есть пробелы, нужно заключить в двойные кавычки – как “Programm Files” в примере.
Добавлен чекбокс Width/Height, переключающий установку рамки рендера из режима “координаты левого верхнего угла – координаты правого нижнего угла” в режим “координаты левого верхнего угла – ширина + высота рамки”.
Аддон Blender, позволяющий устанавливать точные координаты для рамки рендера.
После установки аддона, в Т-панель добавляется дополнительная вкладка “ARB”, выбрав которую можно ввести координаты левого верхнего и правого нижнего углов для рамки рендера в пикселах и, нажатием на кнопку Set Accurate Render Border, установить рамку в соответствии с указанными значениями. Координаты устанавливаются относительно размеров готового рендера (Properties – Render – Dimensions – Resolution).
В Blender есть возможность ограничить область рендера – выделив с помощью специальной рамки часть будущего изображения и отметив чекбокс Border во вкладке Render – Dimensions окна Properties. Если такая рамка задана – отрендерена будет только ограниченная рамкой область изображения.
Для того, чтобы задать рамку рендера через Blender API есть два варинта:
Все определенные пользователем классы (панели, операторы), если они зарегистрированы в API, существуют только пока запущен сам графический редактор Blender. В момент закрытия программы все они удаляются из памяти. Поэтому, даже если внутри пользовательских классов определены какие-то переменные, все значения этих переменных при перезапуске программы будут сброшены.
Однако, иногда бывает необходимо использовать в аддоне Blender переменную, значение которой не будет потеряно в процессе перезапуска программы. Чтобы переменная сохраняла свое значение, нужно создать ее в виде специального класса – свойства (property), и присоединить к какому-либо объекту, свойства которого сохраняются в *.blend файле.
Пользовательские классы-операторы, наследованные от bpy.types.Operator, являются статическими классами. Следовательно в них могут быть определены только статические переменные.
Определение статической переменной sampleVar в классе-операторе SampleClass:
Одним из условий комфортной работы является удобство и быстрота обращения к функционалу аддона. Недостаточно просто написать аддон и зарегистрировать его в системе. Обязательно нужно предоставить пользователю возможность легко и просто вызывать его функции, а значит, любой аддон должен определять место для размещения кнопок, предоставляющих доступ к собственному функционалу.
Весь доступный интерфейс пользователя Blender располагается на панелях, три из которых используются в работе чаще всего. Это T-панель – открывается и скрывается по нажатию клавиши t, N-панель – открывается и скрывается по нажатию на клавишу n, и панель свойств Properties – вызывается в главном меню любого окна выбором его типа как Properties.
API Blender предоставляет возможность определить свою пользовательскую панель для размещения кнопок вызова функционала аддона в любой из этих главных панелей.