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

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

相关推荐
前端小L6 小时前
双指针专题(三):去重的艺术——「三数之和」
javascript·算法·双指针与滑动窗口
web小白成长日记6 小时前
在Vue样式中使用JavaScript 变量(CSS 变量注入)
前端·javascript·css·vue.js
C_心欲无痕7 小时前
react - useImperativeHandle让子组件“暴露方法”给父组件调用
前端·javascript·react.js
霖鸣8 小时前
Minecraft通过kubejs进行简单魔改
javascript
JackieDYH8 小时前
HTML+CSS+JavaScript实现图像对比滑块demo
javascript·css·html
全栈前端老曹9 小时前
【前端路由】Vue Router 嵌套路由 - 配置父子级路由、命名视图、动态路径匹配
前端·javascript·vue.js·node.js·ecmascript·vue-router·前端路由
EndingCoder9 小时前
安装和设置 TypeScript 开发环境
前端·javascript·typescript
Huanzhi_Lin9 小时前
图形渲染管线流程笔记
笔记·图形渲染·shader·glsl
张雨zy10 小时前
Vue 项目管理数据时,Cookie、Pinia 和 LocalStorage 三种常见的工具的选择
前端·javascript·vue.js
五月君_10 小时前
Nuxt UI v4.3 发布:原生 AI 富文本编辑器来了,Vue 生态又添一员猛将!
前端·javascript·vue.js·人工智能·ui