zoukankan      html  css  js  c++  java
  • Blender插件初始化范例

    目标

    • [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 FoundationBlender2.79scriptsstartupl_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)
    
    
  • 相关阅读:
    华为云发送邮件
    activiti act_re_model 分析
    tengine upstream
    zuul压力测试与调优
    idea 快捷键
    kubernetes helm
    编写高质量代码–改善python程序的建议(二)
    编写高质量代码--改善python程序的建议(一)
    总结OpenvSwitch的调试经验
    提高SDN控制器拓扑发现性能
  • 原文地址:https://www.cnblogs.com/yaoyu126/p/9329038.html
Copyright © 2011-2022 走看看