Blender插件初始化范例
2024-08-24 22:23:34
目标
- [x] 总结Blender插件初始化范例
总结
插件模板
Blender内部插件实现方式模板功能总结如下:
- 定义了子模块重加载方式
- 定义了批量加载子模块的方式
- 插件注册函数
- 插件注销函数
模块总体结构如下:
# 支持子模块重加载(support reloading sub-modules)
if "bpy" in locals():
from importlib import reload
_modules_loaded[:] = [reload(val) for val in _modules_loaded]
del reload
# 定义要加载的模块
_modules = [
"add_mesh_torus",
...
]
import bpy
# 模块加载, __import__()相当于 from __name__ import _modules
__import__(name=__name__, fromlist=_modules)
_namespace = globals()
_modules_loaded = [_namespace[name] for name in _modules]
del _namespace
def register():
from bpy.utils import register_class
for mod in _modules_loaded:
for cls in mod.classes:
register_class(cls)
def unregister():
from bpy.utils import unregister_class
for mod in reversed(_modules_loaded):
for cls in reversed(mod.classes):
if cls.is_registered:
unregister_class(cls)
范例
Blender Foundation\Blender\2.79\scripts\startup\bl_operators\__init__.py
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
# support reloading sub-modules
if "bpy" in locals():
from importlib import reload
_modules_loaded[:] = [reload(val) for val in _modules_loaded]
del reload
_modules = [
"add_mesh_torus",
"anim",
"clip",
"console",
"file",
"image",
"mask",
"mesh",
"node",
"object_align",
"object",
"object_randomize_transform",
"object_quick_effects",
"presets",
"rigidbody",
"screen_play_rendered_anim",
"sequencer",
"uvcalc_follow_active",
"uvcalc_lightmap",
"uvcalc_smart_project",
"vertexpaint_dirt",
"view3d",
"wm",
]
import bpy
if bpy.app.build_options.freestyle:
_modules.append("freestyle")
__import__(name=__name__, fromlist=_modules)
_namespace = globals()
_modules_loaded = [_namespace[name] for name in _modules]
del _namespace
def register():
from bpy.utils import register_class
for mod in _modules_loaded:
for cls in mod.classes:
register_class(cls)
def unregister():
from bpy.utils import unregister_class
for mod in reversed(_modules_loaded):
for cls in reversed(mod.classes):
if cls.is_registered:
unregister_class(cls)
最新文章
- springmvc+mybatis事务回滚
- ReferenceEquals和 == 和equals()的比较
- Office 2010启动时出现无法验证此应用程序的许可证的解决
- PMP 项目管理
- 【1-5】jQuery对象和DOM对象
- 从网站上复制代码到MyEclipse后每行都是字符编码错误的解决办法
- SQL基础篇----select语句与排序问题
- 使用jvisualvm和飞行记录器分析Java程序cpu占用率过高
- 项目的敏捷开发方法(转自MBAlib)
- 【CSS】Intermediate5:Specificity
- java Reference(摘录)
- NicEdit - WYSIWYG Content Editor, Inline Rich Text Application
- 适配iPad的操作表sheet
- XAF-列表视图编辑模式
- STL—内存的配置与释放
- CSS BFC(格式化上下文)深入理解
- BZOJ2940 条纹
- python之装饰器(decorator)
- 51Nod 最小公倍数之和V3
- zabbix 添加用户 配置权限
热门文章
- javascript模块化编程(一)(http://www.ruanyifeng.com/blog/2012/10/javascript_module.html)
- 一文详解Spring Cloud Feign重试机制
- includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。
- c3p0 连接池配置
- php第十九节课
- TCP/IP UDP 协议首部及数据进入协议栈封装的过程
- PHP中的几个随机数生成函数
- bupt summer training for 16 #7 ——搜索与DP
- 启动spring boot项目
- 3.0 - remote access 基础知识