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

Blender源代码中的哪里是绘制变换旋转/调整黑色箭头视觉指示器的代码?,blender,Blender,我一直在试图找到一段代码,用于绘制或启动双黑色箭头视觉指示器的绘制,当按下R键(或使用S键调整大小)执行transform rotate时,该指示器显示在此处: 我一直在逐步遍历旋转操作符的代码、各种绘图函数等,但没有成功。我想我对代码结构没有足够好的了解 如果有人能给我指出正确的方向,我将不胜感激 有人至少知道要寻找的正确术语吗? 我使用的是Blender2.76,但我想深入了解任何版本都会有所帮助 (我试图在代码中找到决定是否绘制指示器的点。我解释了问题所在。目标是让它始终显示出来。)我终

我一直在试图找到一段代码,用于绘制或启动双黑色箭头视觉指示器的绘制,当按下
R
键(或使用
S
键调整大小)执行transform rotate时,该指示器显示在此处:

我一直在逐步遍历旋转操作符的代码、各种绘图函数等,但没有成功。我想我对代码结构没有足够好的了解

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

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

我使用的是Blender2.76,但我想深入了解任何版本都会有所帮助


(我试图在代码中找到决定是否绘制指示器的点。我解释了问题所在。目标是让它始终显示出来。)

我终于找到了位置,不是通过单步遍历代码而是通过浏览代码,哈哈

绘制指示器的函数是
drawHelpline()
,在
helpline\u poll()
中检查“窗口”区域,两者都来自transform.c文件

实际决策是在wm_draw.c文件的
wm_paintcursor_draw()
中做出的,该文件通过
pc->poll(c)
间接调用
helpline_poll()
wm\u paintcursor\u draw()
wm\u method\u draw\u triple()
调用,然后从
wm\u draw\u update()
调用

这回答了我的问题

但是这并不能解决我的实际问题,因为这些函数中的活动子窗口是执行操作符的区域-在我的例子中是ToolShelf!这是因为我在操作符中用来移动鼠标的
cursor\u warp()
,它只更改鼠标指针位置,不更新任何其他内容(即不更新活动子窗口)。
因此,如果我强制帮助热线_poll()返回1,它将只在工具架上绘制指示器。
解决方案是从WM_window.c中破解
WM_cursor_warp()
,将
win->screen->subwinactive
设置为正确的窗口id,但这确实是一个丑陋的破解,与我在这里提出的问题没有直接关系。

解决方案是使用模式计时器操作符允许Blender更新活动子窗口,解释道。

听起来您应该向bug追踪器报告,看看下一个版本是否可以改进。@Sambler,也许吧。有一个
cursor\u warp()
bugfix在两个版本之前修复了坐标对操作员无效的问题,但实际上是两行修复。但我不记得是否有人提到过这个GUI问题。我去看看。