Blender 源代码中哪里是绘制变换 rotate/resize 黑色箭头视觉指示器的代码?

Where in Blender source code is code that draws transform rotate/resize black arrow visual indicators?

我一直在尝试找到绘制或启动绘制双 黑色箭头视觉指示器 的代码片段,当按下 R 键(或使用 S 键调整大小),可见此处:

我一直在单步执行旋转运算符的代码、各种绘图函数等,但没有成功。我想我对代码结构的了解不够好。

如果有人能指出正确的方向,我将不胜感激。

有人至少知道 要查找的正确术语吗?

我正在使用 Blender 2.76,但我想深入了解任何版本都会有所帮助。

(我想要做的是在代码中找到决定是否绘制指标的点。我在 this 问题中解释了 "problem"。目标就是让它一直显示。)

我终于找到了地方,不是通过代码而是通过浏览,哈哈!

绘制指标的函数是 drawHelpline(),'WINDOW' 区域的检查在 helpline_poll() 中完成,均来自 transform.c 文件。

实际决定是在 wm_paintcursor_draw() 中从 wm_draw.c 文件中做出的,该文件使用 pc->poll(C) 间接调用 helpline_poll()wm_paintcursor_draw()wm_method_draw_triple() 调用,而 wm_method_draw_triple() 又从 wm_draw_update() 调用,而 wm_draw_update() 又从 WM_main().

调用

这回答了我的问题。

但是,这并没有解决我的实际问题,因为这些函数中的活动子window是执行运算符的区域 - 在我的例子中工具架!这是因为 cursor_warp(),我用来在我的操作员中移动鼠标,只改变鼠标指针的位置而不会更新任何其他东西(即不更新活动子window)。
因此,如果我将 helpline_poll() 强制设置为 return 1,它将仅在 ToolShelf 上绘制指标。
解决方案是从 wm_window.c 破解 WM_cursor_warp() 以将 win->screen->subwinactive 设置为正确的 window id,但这确实是一个丑陋的破解,与我在这里问的问题。
解决方案是使用模态计时器操作符来允许 Blender 更新活动子window,解释 here