UE4用蓝图画出数学柱状图(第一更)
利用ue4画出数学柱状图主要用的蓝图节点:
‘
新建一个widget:
在UI蓝图里面直接用上面四个节点是不行的,需要重写一个UI的函数,所有的绘画都要在这个函数里完成,
这个引用在C++里写为了只读,且这个函数也不能被其他蓝图引用,所以大体逻辑主要写在这个里面。
这里我新建了三个自定义函数,分别用来画XY轴,柱状以及标注,因为是临时写的,所以封装不是特别好,整个逻辑的架构也需要仔细去完善,这里就只说怎么画了。
这三个函数要在OnPaint里调用,因为如果要使用开头四个节点必须传入一个参数,就是Context,而这个参数只能在OnPaint这个函数里调用,不可提升为变量。当然,方法多的是,这里就不多说了。
还要特别注意的一点是要在OnPaint里调用这三个函数,要传入一个UI自身的引用,因为在OnPiant这个函数里面,调用函数的目标是这个函数,而这个函数是不能被蓝图调用的。
画XY轴
暴露出可以灵活设置的参数,这个写法很简单,就是一个原点,两个不同方向的点,调两次drawLine这个函数就可以了。
画柱状图
主要逻辑:
这里我写的初衷是可以随意添加要表示的项数,所以新建了一个结构体,保存一个要表示的项所需要的参数
然后在UI里新建变量,提升数组;
然后再函数里遍历这个数组,读出这个数组的所有项,读一个调一次DrawBox函数,有多少就调多少次,
根据数组遍历的个数来计算每个柱状的位置,用结构体数组里面的参数输入给DrawBox函数。
画标注
这里我只画了y轴的标注,x轴原理一样。
利用一个for循环,根据输入的轴长度以及标注单位算出循环次数,循环次数及标注文字的个数,用轴长度除以循环次数算出每个标识之间的距离,以及标注的文本,调用DrawText,设置位置,颜色,大小等参数,调用DrawText需要导入一个字体文件。(由于标注数字的位数不同,位置也有一点差异,这个就需要自己去解决,我为了快速解决,就直接调的位置)
要特别注意的是画这些图形的起始位置是一样的,这样才能保持完整统一
效果展示:
(未完待续)+_+*