BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1519|回复: 1

如何在Blender里面追踪代码(通过py API找到c源码)

[复制链接]
发表于 2015-4-21 00:12:10 | 显示全部楼层 |阅读模式
新Blender,2.5后的Blender,其运作的基础都在operator上,operator是用C写成,但通过python变成API让所有人方便调用,没有开发过Blender的人,可以快速通过bpy的脚本中的API来找到相对应哪些Blender源码再进一步学习Blender的机制。

以 bpy.ops.mesh.primitive_cube_add 为例,在整个代码库中搜索  primitive_cube_add  ,可以找到
  1. MESH_OT_primitive_cube_add 。
复制代码

  1. void MESH_OT_primitive_cube_add(wmOperatorType *ot)
  2. {
  3.     /* identifiers */
  4.     ot->name = "Add Cube";
  5.     ot->description = "Construct a cube mesh";
  6.     ot->idname = "MESH_OT_primitive_cube_add";

  7.     /* api callbacks */
  8.     ot->exec = add_primitive_cube_exec;
  9.     ot->poll = ED_operator_scene_editable;

  10.     /* flags */
  11.     ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;

  12.     ED_object_add_unit_props(ot);
  13.     ED_object_add_generic_props(ot, true);
  14. }
复制代码


这个是operator的注册函数。有很多原始信息写在这里。当一个operator要被调用的时候(被 wm_operator_invoke),工厂(wm_operator_create)会实例化一个operator的例子(wmOperator)真正的operator代码会在 add_primitive_cube_exec  函数中执行,注册在
  1. ot->exec = add_primitive_cube_exec;   
复制代码


    如果想要查询一些常规的脚本表达式是怎么在C代码中实现的,比如 scene.active  ,想要在源代码中查到“active” ,就会在整个代码库中查到很多的匹配。在这堆匹配中,只关心scene的话,需要在查找结果中再加入scene的关键词,这样的查找会缩小匹配范围到:
  1. source/blender/makesrna/intern/rna_scene_gen.c.​
复制代码

代码如下:
  1. PointerPropertyRNA rna_SceneObjects_active = {
  2.     {NULL, (PropertyRNA *)&rna_SceneObjects_rna_type,
  3.     -1, "active", 41943041, "Active Object",
  4.     "Active object for this scene",
  5.     0, "*",
  6.     PROP_POINTER, PROP_NONE | PROP_UNIT_NONE, NULL, 0, {0, 0, 0}, 0,
  7.     NULL, 67567616, NULL, NULL,
  8.     0, -1, NULL},
  9.     SceneObjects_active_get, SceneObjects_active_set, NULL, NULL,&RNA_Object
  10. };
复制代码


如果想获得“设置一个激活物体”的代码跟踪,就可以给 SceneObjects_active_set   这个函数加个断点。

最后一些小经验提示,如果一些操作不需要开Blender的GUI界面,可以通过 # blender  -b -P script.py   让blender作为后台程序(也叫着blender的headerless模式)执行一些python脚本自动执行一些命令。
原文:http://thebusytypist.github.io/l ... blender-system.html
更多Blender代码分析文章:
http://bbs.blendercn.org/forum.php?mod=forumdisplay&fid=57
​感谢小A的 DNA RNA struct 分析,randon的 operator分析文章。
发表于 2015-8-13 21:25:23 | 显示全部楼层
已拜读,长知识~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2019-4-26 06:51 , Processed in 0.013285 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表