图形编辑器基于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分,就能拿证啦。很遗憾,考前两个月一直在出差加班,住在龙华两个月,最后一星期才回南山,在这样的情况下,这个成绩也对得起我的准备。

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

相关推荐
夏殇之殁8 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
ThsPool9 小时前
【遥感学习整理 02】ENVI遥感图像处理基础:从数据读取到遥感信息产品
图像处理·人工智能·学习
新中地GIS开发老师9 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
丙氨酸長鏈10 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
kyriewen11 小时前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
许彰午13 小时前
政务督办的分合模式:主办协办的并发审批
前端·javascript·政务
sali-tec13 小时前
C# 基于OpenCv的视觉工作流-章98-频域滤波
图像处理·人工智能·opencv·计算机视觉
易筋紫容13 小时前
创建型模式:对象的诞生艺术
开发语言·前端·javascript
NoteStream15 小时前
【c语言基础】C语言常见概念
c语言·开发语言·编辑器
吃好睡好便好15 小时前
MATLAB中图像的线性变换
开发语言·图像处理·学习·计算机视觉·matlab