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

时间:2017-04-27 15:57:54

标签: blender

我一直试图找到一段代码,用于绘制或启动双重黑色箭头视觉指示器的绘制,当按__next__执行变换旋转时显示键(或使用R键调整大小),在此处可见:
Blender rotate black arrow indicator

我一直踩着Rotate操作员的代码,各种绘图功能等,但没有成功。我想我没有足够好的代码结构图片。

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

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

我使用的是Blender 2.76,但我想对任何版本的见解都会有所帮助。

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

1 个答案:

答案 0 :(得分:0)

我终于找到了这个地方,而不是单步执行代码,而是浏览它,哈哈!

绘制指标的功能是drawHelpline(),并且检查该区域是否为“WINDOW'在helpline_poll()中完成,均来自transform.c文件。

wm_paintcursor_draw()从wm_draw.c文件中做出实际决定,该文件使用helpline_poll()间接调用pc->poll(C)wm_paintcursor_draw()会调用wm_method_draw_triple()wm_draw_update()会从WM_main()调用cursor_warp()来调用{/ 1}}。

这回答了我的问题。

然而,这并不能解决我的实际问题,因为这些函数中的活动子窗口是执行操作符的区域 - 在我的例子中是ToolShelf!这是因为helpline_poll(),我用来在我的操作符中移动鼠标,只更改鼠标指针位置,不更新任何其他内容(即不更新活动子窗口)。
因此,如果我强制WM_cursor_warp()返回1,它将仅在ToolShelf上绘制指示符 解决方案是从wm_window.c破解win->screen->subwinactive以将var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var TVDB = require('node-tvdb'); var async = require('async'); var _ = require('lodash'); var mongoose = require('mongoose'); var bcrypt = require('bcryptjs'); var config = require('./config'); mongoose.connect(config.mongoUrl); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function(){ //we're connected console.log("Connected correctly to the server"); }); var index = require('./routes/index'); var users = require('./routes/users'); var showRouter = require('./routes/showRouter'); var episodeRouter = require('./routes/episodeRouter'); var app = express(); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false})); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', index); app.use('/users', users); app.use('/shows', showRouter); app.use('/episodes', episodeRouter); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app; 设置为正确的窗口ID,但这实际上是一个丑陋的黑客,并且与我在这里提出的问题没有直接关系。
解决方案是使用模态计时器操作符来允许Blender更新活动子窗口,解释here