zoukankan      html  css  js  c++  java
  • Blender插件加载研究

    目标

    • [x] 解析Blender插件代码加载原理, 为测试做准备

    结论

    采用方法3的方式, 可以在测试中保证重新加载子模块, 是想要的方式, 代码如下:

    _qk_locals = locals()
    
    def register():
        if "bpy" in _qk_locals:
            print(">>> plugin's submodules reload")
            from importlib import reload
            _modules_loaded[:] = [reload(val) for val in _modules_loaded]
            del reload
        from bpy.utils import register_class
        for mod in _modules_loaded:
            for cls in mod.classes:
                print('>>> register: ', cls.__name__)
                register_class(cls)
    

    Blender插件加载分析

    本分析基于Blender2.79b.

    分析方法

    1. 在用户Blender插件目录下创建插件包
      我的测试插件为 C:UsersyaoyuAppDataRoamingBlender FoundationBlender2.79scriptsaddonsqk_modeler
    2. __init__.py文件中插入输出代码, 查看效果
    3. 在Blender用户配置的"Add-ons"界面中, 勾选插件.

    试验

    1 init.py模块加载

    if "bpy" in locals():
        print('reload...')
        from importlib import reload
        _modules_loaded[:] = [reload(val) for val in _modules_loaded]
        del reload
    
    现象: 判断块内代码在反复勾选中, 没有触发
    原因: "bpy" in locals() -> False

    2 在1的基础上, 修改__init__.py文件代码

    现象: 判断块内代码在第一次重勾选时触发
    原因: "bpy" in locals() -> True

    在__init__.py代码修改之后, 模块第一次重加载时会触发.

    3 修改__init__.py模块之register()函数

    _qk_locals = locals()
    
    def register():
        if "bpy" in _qk_locals:
            print(">>> plugin's submodules reload")
            from importlib import reload
            _modules_loaded[:] = [reload(val) for val in _modules_loaded]
            del reload
        from bpy.utils import register_class
        for mod in _modules_loaded:
            for cls in mod.classes:
                print('>>> register: ', cls.__name__)
                register_class(cls)
    
    现象: 判断块内代码在反复勾选中, 反复触发
    原因: "bpy" in _qk_locals -> True
  • 相关阅读:
    浏览器跨域访问WebApi
    外部主机无法访问IIS发布的网站
    在VisualStudio中远程调试IIS站点
    关于跨域请求的一些解决方案
    MVC与WebApi中的异常过滤器
    委托与事件
    C#中的属性
    C#中的索引
    Equals与==的区别
    关于跨域响应头Access-Control-Allow-Headers的一些说明
  • 原文地址:https://www.cnblogs.com/yaoyu126/p/9343251.html
Copyright © 2011-2022 走看看