Nodelib WIP[12.16]

11.27


绘制出最初的框架,包含阴影,当时相当激动。像Houdini一样使用空格移动视图。
进一步细化,对不同的输入数量、辅助连接数量能够按照自己的设计绘制出对应结构。

去掉阴影,添加选择状态,修正z值,让所选节点在最上层。


11.28


添加连接(Noodles)成功

继续细化Noodles,完善事件处理函数,修复Qt itemChange事件发生时自身属性还未变化的不足。

11.29

上午使用Qt的Drag&Drop机制实现了鼠标连接,但存在一些问题,比如不能捕捉鼠标拖到节点外的空白地方释放事件,指针不能修改成自定义等。
晚上使用基本的mousePress&Release重写,不但解决了以上两点,而且正连、反连、拖拽到中间的label区域该练到哪个按钮都可以智能判断。


11.30

大量调整,包括连接不同区域的按钮时箭头的朝向,新连接会自动挤掉就连接等主流软件的细节。

12.1

初步实现拖动时的连接线。


12.8


上图:悬浮高亮(在label上释放时会选择最可能的连接槽)
  • 完善了连接时的浮动连线(Ghost Noodle)
  • 高亮显示目标槽。
关于itemChange方法发生时lag效果的解释(ItemPositionHasChanged /ItemPositionChange)


12.12

实现了Reconnect功能
  1. 在现有noodle的端点按住鼠标,可以将此noodle进入浮动状态
  2. 在新位置松开鼠标,会更新连接到新目标
  3. 如果新位置为空白处则断开此noodle。
感觉这一步是到目前为止最难实现的:Reconnect时是noodle触发的,而悬浮时的高亮、松开鼠标时的链接和判断是node里的,要保持尽可能的没有冗余代码,就需要尽可能的利用现有的方法,而且要保持优雅性感可读性高,考虑postEvent、eventFielter、slot等考虑最后还是决定手写了一个deliverEvent方法来传递事件,效率也是最高的。
文艺小结: 也深深感受到CG这行也是分外功内功的,表面的东西最容易,但最终决定能否搞定的一定是内功。好好加勒个油。

12.13

终于加上了简单的HUD,比如Press Tab等的提示。
一直纠结怎么加,加在哪,本想加载scene里,但有诸多问题,其一是需要各种坐标转换,其二是加入好几个view共用一个scene会导致不正确。最后发现QGraphicsView是继承QWidget的,瞬间感觉柳暗花明。
加上后又一个很严重的问题,label截断了点击在view上的鼠标事件,通过各种群里喊,谷里搜,没找到合适的,后来在文档里发现QWidget的一个属性Qt::WA_TransparentForMouseEvents,可以忽视所有的mouseEvent,和disable不同的是不但不起作用,而且不截断!问题终于得以解决。
然后进行了大量的修改和优化
其中遇到一个很诡异的问题,就是发现用全局常量来初始化类成员时居然发生常量没有分配的情况! 后来发现问题出在这个初始化的类成员本身也是一个全局的(我知道全局很不好,所以也一直很节制,切勿鄙视),而全局变量的分配顺序是和文件编译顺序有关的,解决方法是把分配放在一个cpp里,这样通过在文件的出现顺序就可以自定义初始化顺序了。


12.14


如图,NodeCreator

建立NodeCreator, tab键呼出,估计这个快捷方式用过Houdini或者Nuke的已经是条件反射了。
在搞事件时发现tab只能相应一次,推测被更改焦点拦截,google了一下果然是 这样的,重载event事件后ok。

12.16

NodeCreator可以真正的建立Node了(现在只能建立Null node)

To be continued.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值