二维矢量动画智能制作软件开发合集
个人开发二维矢量动画智能制作软件界面如下:
目录
油漆绘制
本篇介绍软件左侧工具栏→绘制工具→油漆绘制
油漆绘制可以绘制封闭形状和孔洞形状,根据用户设置可选择是否绘制形状填充及其轮廓。
一、油漆绘制原理
在介绍油漆绘制原理前,先补充填充和轮廓的概念,对于形状,根据是否有填充和是否有轮廓可将形状分为4类,具体如下所示:
无填充 | 有填充 | |
无轮廓 | ||
有轮廓 |
将鼠标看作一个实心圆,在鼠标移动的区域上均涂上实心圆,实心圆的半径大小r可自定义(必须在绘制前设定)。实现流程如下:
① 采用QPainterPath的operator+方法计算鼠标的移动区域并集,绘制结束后,拿到最终区域path(QPainterPath类型);
② 遍历path的所有element,采用QPainterPath的ElementAt(int x)判断ElementType,若ElementType为QPainterPath::MoveToElement,则计数器加1,遍历结束;
③ 若计数器个数为1,则该形状为封闭形状,根据是否有填充和是否有轮廓按照【绘制图形(文章撰写中,链接待补充)】中的绘制圆形的方法绘制;若计数器个数为2,则该形状为孔洞形状,同样根据是否有填充和是否有轮廓按照【绘制图形(文章撰写中,链接待补充)】中的绘制孔洞的方法绘制;
二、封闭形状绘制实现
1.代码示例
.h文件变量申明:
QPainterPath path;
QList<QPointF> posList,cutList;
int moveCount = 0;
/*绘制图形*/
void node2Shape(bool isCut,fillItem *fill,QList<QPointF> posList,int alw);
for(int i = 0; i<path.elementCount(); i++)
{
if(path.elementAt(i).type == QPainterPath::MoveToElement)
moveCount++;
if(moveCount == 1)
posList.append(path.elementAt(i));
else if(moveCount == 2)
cutList.append(path.elementAt(i));
}
node2Shape(false,nullptr,posList,10);
2.示例效果
三、孔洞形状绘制实现
1.代码示例
.h文件变量申明:
QPainterPath path;
QList<QPointF> posList,cutList;
int moveCount = 0;
QGraphicsItem fillSeg;
/*绘制图形*/
void node2Shape(bool isCut,fillItem *fill,QList<QPointF> posList,int alw);
for(int i = 0; i<path.elementCount(); i++)
{
if(path.elementAt(i).type == QPainterPath::MoveToElement)
moveCount++;
if(moveCount == 1)
posList.append(path.elementAt(i));
else if(moveCount == 2)
cutList.append(path.elementAt(i));
}
node2Shape(false,nullptr,posList,10);
if(moveCount == 2)
node2Shape(true,fillSeg,cutList,10);
2.示例效果
四、油漆绘制软件测试视频
油漆绘制
结束语
本文简要梳理了软件油漆绘制的实现框架,内容均为原创。
作者文笔水平一般,请大家多多包涵和指正,十分欢迎进一步交流学习。
若需,请联系本人小红书(小红书号:YzLab96),谢谢。
链接: 软件开发及测试所有视频合集见小红书