1003. Написание аддонов для Blender 2.8

Версия 2.8 близится к бета-версии. По большей части (а может и весь) API устаканился и пришло время для перевода аддонов на новую версию. Мы с вами сейчас рассмотрим пример простого аддона для Blender 2.8. Это даст представление, что глобально поменялось в написании аддонов, и будет неплохой точкой для старта рефакторинга старых наработок.

Аддон будет добавлен в N-панель во вкладку “My Addon”. Панель аддона будет содержать чекбокс “Check Me!” и кнопку “Send Message”. При нажатии кнопки в панели состояния (в нижней части экрана будет выведено сообщение) “It’s Work! Bool is True” или “It’s Work! Bool is False”, в зависимости от состояние чекбокса.

bl_info = {
	"name": "Simple Addon 2.80",
	"description": "Addon writing for 2.8",
	"author": "Ivan 'mrven' Vostrikov",
	"version": (1, 0, 0),
	"blender": (2, 80, 0),
	"location": "3D View > Toolbox",
	"category": "Object",
}

import bpy

#Импортируем необходимые types и props для удобства работы
#Это избавит нас от необходимости каждый раз писать bpy.types и bpy.props при обращении к этим классам

from bpy.types import (
        Operator,
        Panel,
        PropertyGroup,
        )
		
from bpy.props import (
        BoolProperty,
        PointerProperty,
        )

#Класс Send_Message выполняет основную логику аддона 
class Send_Message(Operator):
	"""Just Send Message"""
	bl_idname = "object.send_message"
	bl_label = "Send Message"
	bl_options = {'REGISTER', 'UNDO'}
	
	def execute(self, context):
		#Сокращение для обращения к свойствам (Property) аддона		
		simple_addon = context.scene.simple_addon
		
		#Проверяем состояние булева свойства test_bool
		#В зависимости от состояния выводим разные сообщения
		if simple_addon.test_bool:
			self.report({'INFO'}, 'It\'s Work! Bool is True')
		else:
			self.report({'INFO'}, 'It\'s Work! Bool is False')
		
		return {'FINISHED'}
		
#Класс, реализующий панель аддона
class VIEW3D_PT_Simple_Addon(Panel):
	bl_space_type = 'VIEW_3D'
	bl_region_type = 'UI'
	bl_category = 'My Addon'
	bl_label = "Simple Addon"
	bl_options = {'DEFAULT_CLOSED'}
	
	def draw(self, context):
		layout = self.layout
		#Сокращение для обращения к свойствам (Property) аддона
		simple_addon = context.scene.simple_addon
		#Чекбокс, который устанавливает свойство test_bool 
		layout.prop(simple_addon, "test_bool", text="Check Me!")
		#Кнопка, которая вызывает наш основной класс Send_Message
		layout.operator("object.send_message", text="Send Message")
		
#Класс для объявления свойств
#Одно из заметных изменений. Раньше они объявлялись в register и прописывались дополнительно в unregister
#Теперь это делается в отдельном классе (с немного другим синтаксисом) и уже этот класс вызывается в register и unregister
class SimpleAddonProps(PropertyGroup):
	test_bool: BoolProperty(
		name="Test Bool",
		description="Check Me!",
		default=False
		)
	
#Объявление классов для регистрации: операторы, панели, свойства и пр.
classes = (
    VIEW3D_PT_Simple_Addon,
	SimpleAddonProps,
	Send_Message,
)

#Регистрация классов		
def register():
	for cls in classes:
		bpy.utils.register_class(cls)

	#Создание класса и линкование свойств к этому классу
	bpy.types.Scene.simple_addon = PointerProperty(type=SimpleAddonProps)

#Удаление объявленных классов
def unregister():
	for cls in reversed(classes):
		bpy.utils.unregister_class(cls)
		
	del bpy.types.Scene.simple_addon

if __name__ == "__main__":
	register()

Вернуться к энциклопедии