目标

  • [x] 总结Blender插件初始化范例

总结

插件模板

Blender内部插件实现方式模板功能总结如下:

  1. 定义了子模块重加载方式
  2. 定义了批量加载子模块的方式
  3. 插件注册函数
  4. 插件注销函数

模块总体结构如下:

# 支持子模块重加载(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)

最新文章

  1. springmvc+mybatis事务回滚
  2. ReferenceEquals和 == 和equals()的比较
  3. Office 2010启动时出现无法验证此应用程序的许可证的解决
  4. PMP 项目管理
  5. 【1-5】jQuery对象和DOM对象
  6. 从网站上复制代码到MyEclipse后每行都是字符编码错误的解决办法
  7. SQL基础篇----select语句与排序问题
  8. 使用jvisualvm和飞行记录器分析Java程序cpu占用率过高
  9. 项目的敏捷开发方法(转自MBAlib)
  10. 【CSS】Intermediate5:Specificity
  11. java Reference(摘录)
  12. NicEdit - WYSIWYG Content Editor, Inline Rich Text Application
  13. 适配iPad的操作表sheet
  14. XAF-列表视图编辑模式
  15. STL—内存的配置与释放
  16. CSS BFC(格式化上下文)深入理解
  17. BZOJ2940 条纹
  18. python之装饰器(decorator)
  19. 51Nod 最小公倍数之和V3
  20. zabbix 添加用户 配置权限

热门文章

  1. javascript模块化编程(一)(http://www.ruanyifeng.com/blog/2012/10/javascript_module.html)
  2. 一文详解Spring Cloud Feign重试机制
  3. includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。
  4. c3p0 连接池配置
  5. php第十九节课
  6. TCP/IP UDP 协议首部及数据进入协议栈封装的过程
  7. PHP中的几个随机数生成函数
  8. bupt summer training for 16 #7 ——搜索与DP
  9. 启动spring boot项目
  10. 3.0 - remote access 基础知识