图形编辑器基于Paper.js教程32:绘制贝塞尔曲线,并进行二次编辑

上一篇文章是10.24写的,是在我考试前,写了一些最近一段时间的感悟和体会。

很多时候不是知识变得廉价啦,而是获得知识的方式更加便捷啦。普通人一句话就能生成一个网站,一句话就能生成一个高深算法的实现,生产力得到空前的提升。从另一方面来看,AI所提升的生产力是一把双刃剑,如果你用AI能提升很高的生产力,那么你的工作以后很有可能被AI替代,相反那些无法被AI助力的岗位,反而更稳定,比如泥瓦匠,木工,搬运工。😂...扯远了。

今天来说一下基于paperjs 使用鼠标来绘制贝塞尔曲线。

在图形编辑中,如何友好地绘制贝塞尔曲线是衡量一个编辑器的重要指标之一,你要问我为什么?我只能告诉你,自然界中有两种线,一种是直线,另一种是曲线。作为组成我们世界不可分割,且非常优美的曲线,曲线是非常值得研究的。

贝塞尔曲线我就不过多介绍了,网上的资料已经汗牛充栋。

看一下实现的效果,可以使用鼠标绘制贝塞尔曲线,也可以对曲线进行二次编辑,拖拽控制点对曲线进行变形。

来说一下其中用到的api

首先必须要要用的是paperjs的 tool,因为我们要实现在鼠标点下时的元素命中,

以及鼠标拖拽时的路程计算。

定义鼠标的

  • 鼠标按下按键 onMouseDown
  • 鼠标移动 onMouseMove
  • 鼠标拖拽 onMouseDrag
  • 鼠标按键抬起 onMouseUp

在这个例子里我创建了两个工具,一个用于绘制曲线,一个用于编辑曲线。

绘制曲线时,首先是创建一个path对象,并获取该path的最后一个 Segment

当拖拽时,获取到移动的向量,然后对Segment的 handleIn 和handleOut 进行加减,这样就组成了一个贝塞尔曲线。

当点击编辑曲线时,实际是激活另一个paper.tool,这样就能执行新的鼠标按压和鼠标拖拽的交互逻辑。

在编辑曲线时,我们需要借助 paper.project.hitTest 来命中元素,相当于使用鼠标选中一个要编辑的元素,有了要操作的实体,我们才能进行下一步。在使用hitTest时,我们也能获取到我们命中的类型,可以是path,也可以是stroke,也可能是segment,也可以是handle-in,或者handle-out。根据命中的不同元素类型我们可以执行不同的交互逻辑。

比如命中stroke时,增加一个segment。命中segment时 删除这个segment。

如果命中handle-in 或者handle-out 就可以对曲线进行修改,拖拽handle-in 来改变曲线延伸的方向。

最近看了一下paperjs的源码,核心代码并不是使用原型链面向对象的方法来实现的,看起来比较费劲,但不排除它是一个非常优秀的引擎,其中的基于向量的思想很值得学习,后续有时间我也会和大家分享一下解读它的源码的心得。

最近身体总是不舒服,业余时间需要多多锻炼,希望大家都有一个健康的身体。当你想迫不及待地想去做一件事情是,你的颈椎,你的腰,你的手臂,你的注意力 告诉你,要去休息了,要去保养啦,就很拉胯。

最近系统架构师的成绩出来啦,一共差了12分,就能拿证啦。很遗憾,考前两个月一直在出差加班,住在龙华两个月,最后一星期才回南山,在这样的情况下,这个成绩也对得起我的准备。

一次不过,下次一定要考的更好,将系统架构设计的知识 学的更扎实,塞翁失马焉知非福。

相关推荐
swipe20 小时前
正则表达式入门到进阶:从表单校验到手写模板引擎
前端·javascript·面试
kyriewen21 小时前
前端错误监控最全指南:捕获 JS 异常、Promise 拒绝、资源加载失败,附上报代码
前端·javascript·监控
大家的林语冰21 小时前
ESLint 近期动态大全,新版本正式发布,antfu 大佬推荐的插件也更新了!
前端·javascript·前端工程化
胡志辉1 天前
深入浅出 call、apply、bind
前端·javascript·后端
十九画生1 天前
parentID ``` JavaScript 是区分大小写的,所以这两个不是同一个字段。 第二,`parent` 没有声明。 应该先写: `
javascript
怕浪猫1 天前
Electron 开发实战(十六):总结与展望|生态现状、框架对比、行业趋势与学习指南
前端·javascript·electron
ZengLiangYi1 天前
批量导入 1000 条对话的性能优化实战
javascript·后端·架构
竹林8181 天前
用 wagmi v2 + viem 监听合约事件时踩的坑,我花了两天才把"遗漏事件"修好
javascript
小花酱酱1 天前
QQ群里只有你一个人?邪门歪道破局之路——AstrBot
javascript
bonechips1 天前
JS 数组指南:从内存原理到二维矩阵
前端·javascript