用C++ Qt实现类似Photoshop的钢笔工具
因为工作上的需求,需要实现一个类似Photoshop里面的钢笔工具,
分析一下它的功能,包括:
1. 有两种点:节点和控制点,节点是构成图形的基本端点,控制点是影响贝塞尔曲线的系数。
2. 创建节点:鼠标左键点击空白区域,即可创建一个方形节点。
3. 删除节点:鼠标左键单击一个已存在的节点,即可将当前所选的节点删除。
4. 移动节点:按住Ctrl键,长按鼠标左键在节点上,可以将节点拖拽,如果节点本身含有两个控制点,那么也会跟随一起移动。
5. 移动控制点:按住Ctrl或者Alt键,长按鼠标左键在控制点上,可以将该控制点单独移动。
6. 节点转换和旋转控制点:原本是方形节点,按住Alt键,再长按鼠标左键在其方形节点上,再拖拽可实现转换成圆形节点,并且生成两个控制节点,随着鼠标的位置不断变换,直到鼠标左键松开。
7. 闭环节点:超过3个节点(含3个)的情况下,再鼠标左键单击第一个节点,即可让线条首位相接。
实现核心:
利用Qt提供的 QPainterPath 类进行绘制,quadTo()为二次贝塞尔曲线,cubicTo()为三次贝塞尔曲线。
当两两圆形节点相邻时,就使用三次贝塞尔曲线,
一个圆形节点和一个方形节点之间,就用二次贝塞尔曲线。
Qt实现的成果demo演示视频:https://live.csdn.net/v/216724