Published

16 August 2014

Tags

Contents

via http://wiki.blender.org/index.php/Dev:2.5/Source/Architecture/Notifiers/Updates and http://wiki.blender.org/index.php/Dev:2.5/Source/Architecture/Notifiers/Data

blender 里有三种更新的方式:

  • Notifier: Notifier 主要用来通知窗口系统
  • Dependency Graph: 主要针对依赖数据的改变
  • Redraw Tag: 重绘事件, 经常被 Notifier 调用

个人感觉这几个的层级关系是 Dependency Graph -> Notifier -> Redraw Tag

Notifier

void WM_event_add_notifier(const struct bContext *C, unsigned int type, void *data);

向窗口系统发出 notifier, type 有四个层次: * category: 前缀为 NC_, 如 window, screen, object * Data: 前缀为 ND_, 根据 category 不同, data 不同, 如 object 下有 ND_TRANSFORM, ND_POSE * Data sub types, Action, 多数情况下不常用, 可以参考 WM_types.h

约定

这里有几条简单的方针:

  • Datablocks: 当修改对应的 datablock 时, 应当修改对应的 category, 然后再找到正确的 ND_*
  • Space/ Region Data: 可以使用 NC_SPACE, 然后找到对应的 ND_*
  • User Perferences: 发送 NC_WINDOW Notifier 来刷新整个屏幕


blog comments powered by Disqus