前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图形编辑器基于Paper.js教程16:在Paper.js canvas画布中实现花贝塞尔曲线的功能,创建并编辑贝塞尔曲线,包括添加、删除曲线的节点,以及调整曲线的控制柄

图形编辑器基于Paper.js教程16:在Paper.js canvas画布中实现花贝塞尔曲线的功能,创建并编辑贝塞尔曲线,包括添加、删除曲线的节点,以及调整曲线的控制柄

作者头像
拿我格子衫来
发布于 2024-11-21 05:52:20
发布于 2024-11-21 05:52:20
22600
代码可运行
举报
文章被收录于专栏:TopFETopFE
运行总次数:0
代码可运行
使用 Paper.js 实现花贝塞尔曲线的交互工具

在图形编辑中,贝塞尔曲线因其灵活的曲线控制而被广泛应用,特别是在设计软件和矢量绘图工具中。在本文中,我将深入解析一个基于 Paper.js 的交互式贝塞尔曲线编辑工具。通过这个工具,你可以在画布上创建并编辑贝塞尔曲线,包括添加、删除曲线的节点(称为“段”),以及调整曲线的控制柄(称为 handleIn 和 handleOut)。

Paper.js 初始化

程序首先利用 paper.setup() 函数将 Paper.js 初始化到 HTML 中的一个 <canvas> 元素中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
paper.setup(document.getElementById('myCanvas'));

这一步会将 Paper.js 绑定到特定的 <canvas>,从而让后续的所有绘制和交互操作都可以在这个画布上进行。

基本变量的定义

在工具功能实现之前,定义了一些基本的全局变量用于保存当前的编辑状态和交互对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var options = {};
tool = new paper.Tool();
var path;
var currentSegment;
var mode;
var type;
var hoveredItem = null;
  • path:当前操作的贝塞尔曲线对象。
  • currentSegment:当前正在操作的曲线段。
  • modetype:保存操作的类型和模式,比如添加、删除或者调整控制柄。
  • hoveredItem:鼠标悬停的对象,用于交互时提供即时反馈。
鼠标事件处理

接下来,我们来看核心的鼠标事件处理器,这些处理器负责用户的交互操作,如点击、拖动和松开鼠标时的响应。

onMouseDown - 创建和选择段

tool.onMouseDown 事件处理器负责在画布上添加新的贝塞尔曲线段或选中已有的段。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 原创由CSDN@拿我格子衫来
tool.onMouseDown = function (event) {
  if (event.event.button > 0) return;

  if (currentSegment) {
    currentSegment.selected = false;
  }
  mode = type = currentSegment = null;

  if (!path) {
    if (!hoveredItem) {
      path = new paper.Path();
    } else {
      if (!hoveredItem.item.closed) {
        mode = 'continue';
        path = hoveredItem.item;
        currentSegment = hoveredItem.segment;
        if (hoveredItem.item.lastSegment !== hoveredItem.segment) {
          path.reverse();
        }
      } else {
        path = hoveredItem.item;
      }
    }
  }
  
  // 查找当前段并进行相应操作
  var result = findHandle(path, event.point);
  if (result && mode !== 'continue') {
    currentSegment = result.segment;
    type = result.type;
    if (result.type === 'point') {
      if (result.segment.index === 0 && path.segments.length > 1 && !path.closed) {
        mode = 'close';
        path.closed = true;
        path.firstSegment.selected = true;
      } else {
        mode = 'remove';
        result.segment.remove();
      }
    }
  }
  // 原创由CSDN@拿我格子衫来
  if (!currentSegment) {
    if (hoveredItem) {
      if (hoveredItem.type === 'segment' && !hoveredItem.item.closed) {
        var hoverPath = hoveredItem.item;
        if (hoverPath.firstSegment !== hoveredItem.segment) {
          hoverPath.reverse();
        }
        path.join(hoverPath);
        path = null;
      } else if (hoveredItem.type === 'curve' || hoveredItem.type === 'stroke') {
        mode = 'add';
        var location = hoveredItem.location;
        currentSegment = path.insert(location.index + 1, event.point);
        currentSegment.selected = true;
      }
    } else {
      mode = 'add';
      currentSegment = path.add(event.point);
      currentSegment.selected = true;
    }
  }
};

这个函数主要负责:

  • 创建新路径:当用户点击空白区域时,会创建一条新的贝塞尔路径。
  • 选中已有路径段:如果点击现有的曲线段,程序会选中该段,并允许用户进行编辑操作,如调整控制柄或删除该段。
  • 连接路径:当点击另一个未闭合的路径时,工具会自动反转路径并将其连接到当前路径。
onMouseMove - 悬停检测

tool.onMouseMove 处理器负责检测用户当前的鼠标位置是否悬停在某个路径段上,并实时更新交互反馈:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 原创由CSDN@拿我格子衫来
tool.onMouseMove = function (event) {
  var hitResult = paper.project.hitTest(event.point, hitOptions);
  if (hitResult && hitResult.item && hitResult.item.selected) {
    hoveredItem = hitResult;
  } else {
    hoveredItem = null;
  }
};

这里的 hitTest 函数是 Paper.js 提供的一个强大的检测工具,用于判断用户点击或悬停时是否命中了某个对象。hitOptions 设定了检测的范围和具体条件,例如是否检测线条、曲线或者段等。

onMouseDrag - 控制柄调整

当用户拖动鼠标时,tool.onMouseDrag 事件处理器会实时更新当前段的控制柄位置,从而改变曲线的形状。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tool.onMouseDrag = function (event) {
  if (event.event.button > 0) return;

  var delta = event.delta.clone();
  if (type === 'handleOut' || mode === 'add') {
    delta = new paper.Point(0, 0).subtract(delta);
  }
  currentSegment.handleIn = currentSegment.handleIn.add(delta);
  currentSegment.handleOut = currentSegment.handleOut.subtract(delta);
};

该函数通过更新 handleInhandleOut 控制柄的坐标,使得用户能够对贝塞尔曲线的曲率进行细致调整。当拖动时,控制柄的移动方向会与鼠标的移动量 delta 同步,从而动态调整曲线的形状。

onMouseUp - 完成编辑

tool.onMouseUp 事件处理器用于在用户完成编辑操作时,重置一些状态并结束操作模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tool.onMouseUp = function (event) {
  if (event.event.button > 0) return;

  if (path && path.closed) {
    path = null;
  }
};

此函数简单但重要:当用户松开鼠标并且路径已经闭合时,重置 path,以便下次继续新的操作。

辅助函数:查找控制柄

一个关键的辅助函数 findHandle 用于判断用户当前点击的位置是否接近某个曲线段的控制柄或控制点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function findHandle(path, point) {
  var types = ['point', 'handleIn', 'handleOut'];
  for (var i = 0, l = path.segments.length; i < l; i++) {
    for (var j = 0; j < 3; j++) {
      var type = types[j];
      var segment = path.segments[i];
      var segmentPoint = type === 'point'
        ? segment.point
        : segment.point.add(segment[type]);
      var distance = point.subtract(segmentPoint).length;
      if (distance < 6) {
        return {
          type: type,
          segment: segment
        };
      }
    }
  }
  // 原创由CSDN@拿我格子衫来
  return null;
}

这个函数遍历路径中的所有段,并检查鼠标点击点是否靠近某个控制点或控制柄(通过计算点与控制点之间的距离)。如果距离足够近(如小于 6 像素),则返回该控制点的信息,供后续处理使用。

总结

通过以上代码,我们实现了一个功能完备的贝塞尔曲线编辑工具,用户可以创建新的曲线段、选中并修改现有的段、调整控制柄、甚至连接不同的路径。这种基于 Paper.js 的解决方案展示了其强大的图形处理能力以及灵活的事件系统。结合实际应用场景,该工具可以进一步扩展,满足更复杂的设计需求。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一天搞定语聊房,TUILiveKit助力企业打造新款“海外土豪收割机”
在如今的流量时代,用户越来越追求多元化的互动体验。语聊房作为在线社交热门玩法,一直备受用户喜爱。
腾讯云音视频
2024/11/11
1990
一天搞定语聊房,TUILiveKit助力企业打造新款“海外土豪收割机”
泛娱乐出海发展之道,腾讯云音视频《2024泛娱乐出海白皮书》出海趋势风口盘点
日前,腾讯云音视频发布了《2024泛娱乐出海白皮书》(以下简称《白皮书》),系统解读全球核心出海区域市场,挖掘新时代下社交泛娱乐出海的新机会点,帮助有志于全球化的互联网创业者和从业者快速建立出海认知,更好地了解泛娱乐出海赛道。
腾讯云音视频
2024/03/25
6310
泛娱乐出海发展之道,腾讯云音视频《2024泛娱乐出海白皮书》出海趋势风口盘点
出海热土在哪里?腾讯云音视频《2024泛娱乐出海白皮书》海外市场机会洞察
日前,腾讯云音视频发布了《2024泛娱乐出海白皮书》(以下简称《白皮书》),系统解读全球核心出海区域市场,挖掘新时代下社交泛娱乐出海的新机会点,帮助有志于全球化的互联网创业者和从业者快速建立出海认知,更好地了解泛娱乐出海赛道。
腾讯云音视频
2024/03/11
4980
出海热土在哪里?腾讯云音视频《2024泛娱乐出海白皮书》海外市场机会洞察
互联网大航海,泛娱乐社交借东风
2022年,泛娱乐社交大航海时代全面开启。 2021年,剥除YY 主攻出海的欢聚首次实现盈利,净盈利1.09亿美元;深耕中东市场的雅乐科技收入2.731亿美元,同比增长102.4% ,净利润1.265亿美元,同比增长97.7%。除上述业绩亮眼的上市公司外,还有许多玩家聚集在泛娱乐社交出海赛道,AppGrowing国际版在全球47个主要市场监测的数据显示,最近8个月里平均每月有约1702款社交类App海外投放移动广告,而在投放Top 10中有7款产品来自中国厂商,分布在短视频、直播等多个细分赛道。 为什么泛娱
罗超频道
2022/05/17
5100
互联网大航海,泛娱乐社交借东风
干货荟萃丨2022中国互联网出海拉美高峰论坛:多角度看出海新机遇
9月1日,扬帆出海携手Pagsmile、腾讯云音视频主办,特邀大宇无限、Google、复星锐正分享的“2022中国互联网出海拉美高峰论坛”圆满落幕。峰会上腾讯云音视频产品架构师——刘翔宇就腾讯云音视频助力开发者出海拉美做了相关分享。 关于出海拉美的音视频这一趴 腾讯云音视频产品架构师 刘翔宇 自QQ时代以来,腾讯云已有超过22年音视频技术积累,在视频云解决方案市场连续四年排名第一(IDC报告)的腾讯云音视频,致力于为全球企业提供全面、稳定、易用的音视频通信解决方案。本次活动中,腾讯云音视频产品架构师 刘
腾讯云音视频
2022/09/13
9240
干货荟萃丨2022中国互联网出海拉美高峰论坛:多角度看出海新机遇
2022爱分析・出海数字化系列报告之“出海实时互动与通信”厂商全景报告 | 爱分析报告
改革开放四十多年来,中国企业经历了自商品出海到当前的品牌出海,出海方式也探索出了海外战略股权投资、海外产业园、互联网模式复制等多样化出海之路。同时,随着内地新冠疫情的反复,尤其是内地互联网增长红利的逐步见顶,国内部分市场趋于饱和甚至开始萎缩,大量中国企业开始加速拓展海外市场,寻求新的增长曲线。
爱分析ifenxi
2023/01/13
5150
腾讯云入选《IDC MarketScape:实时云渲染解决方案报告》,产品综合能力处于领先位置
近日,《IDC MarketScape:实时云渲染解决方案,2023年厂商评估》报告(下称“《报告》”)正式发布。其中,腾讯云凭借领先的技术和落地实践经验,入选云渲染领导者类别,产品综合能力排名领先,实力获市场认可,为虚拟会展、数字孪生、元宇宙演唱会等多类场景提供了更低延迟、更高画质的渲染服务和视觉体验。
腾讯云音视频
2023/08/13
7130
腾讯云入选《IDC MarketScape:实时云渲染解决方案报告》,产品综合能力处于领先位置
当出海成为必选项,企业如何构建全场景全生态技术底座?| Q推荐
采访嘉宾 | 宋清晨 整理 | 任传英 “大航海”时代,企业出海成为业务增长不可忽视的方式,出海技术的敏感度、数据合规、跨国通信、不同地区用户对于产品的倾向等,一直是行业中热议的话题。 9 月 15 日,融云在“超浪 2022 社交泛娱乐出海嘉年华”活动中,与白鲸出海联合发布了《2022 社交泛娱乐出海白皮书》(以下简称《白皮书》),回顾了国内互联网出海的历史,并聚焦社交泛娱乐作出系统的行业洞察与数据解读,对企业出海的现状、痛点与挑战进行了深度剖析。 (白皮书限时免费开放,感兴趣长按识别下载) 当天晚
深度学习与Python
2023/03/29
3990
当出海成为必选项,企业如何构建全场景全生态技术底座?| Q推荐
一天搞定语聊房,TUILiveKit助力企业打造新款“海外土豪收割机”
在如今的流量时代,用户越来越追求多元化的互动体验。语聊房作为在线社交热门玩法,一直备受用户喜爱。
小腾资讯君
2024/11/11
1490
领先技术、完善生态、全球布局,腾讯云音视频助力企业出海探索新机遇
随着国内移动互联网的乏力,国内社交互娱类产品层出不穷,伴随而来的市场竞争也日益剧烈。越来越多的伙伴开始寻求海外的业务增长方向。而本土化企业对外扩张,伴随而来的是陌生的经营模式、不同的用户群体等诸多问题。面对这些焦虑和痛点,腾讯云国际生态拓展总监李永杰首先介绍了腾讯云国际在助力企业出海发展方面的显著优势。他表示,腾讯云港澳在过去五年的云收入平均年增长率超过45%,渠道伙伴收入今年上半年呈现了倍数增长,有赖于腾讯云丰富的国际化经验,充满活力的生态、优越的全球基础设施布局、便捷的国际化途径、卓越的全球融资能力、低税率和优越的营商环境让腾讯云港澳成为国内企业出海首选。
腾讯云音视频
2024/08/11
3920
领先技术、完善生态、全球布局,腾讯云音视频助力企业出海探索新机遇
重磅首发|腾讯云音视频联合LVS发布《2024音视频技术发展报告》
11月24日,在LiveVideoStack Con 2023深圳站大会上,腾讯云音视频联合LiveVideoStack首次发布《2024音视频技术发展报告》。报告通过300+音视频开发者调研,40+专家一线访谈,下沉8大细分技术领域进行全面解读,涵盖音视频编解码/AI编码/多媒体处理框架/媒体传输协议/超低延迟技术/虚拟现实/AIGC/出海等领域,深入洞察音视频技术现状和未来发展趋势。
腾讯云音视频
2023/11/25
1.9K0
重磅首发|腾讯云音视频联合LVS发布《2024音视频技术发展报告》
虚拟互动再升级,腾讯云云渲染以领先技术为创新场景提供坚实底座
当前,数字经济的蓬勃发展,正推动数字化、虚拟化、沉浸感成为行业转型发展的主流方向。从最近因VisionPro发售而被大家广泛讨论的CloudXR,到火爆全网的弹幕游戏,从银行的线上虚拟营业厅到AIGC的各种新玩法,这些炙手可热的创新应用场景都对实时云渲染提出了源源不断的需求。在泛互、金融、教育、文旅、会展等众多行业中,云渲染已成为推动创新发展的重要引擎,以技术基座的形式,结合上层服务,为行业转型发展提供澎湃动力。
腾讯云音视频
2024/03/25
2820
虚拟互动再升级,腾讯云云渲染以领先技术为创新场景提供坚实底座
预见洞察 | 泛娱乐产业出海趋势洞察及本地化落地建议
2023年,中国企业出海在泛娱乐市场的表现非常突出,短剧在海外市场的大爆发再次印证了中国娱乐产品出海的巨大潜力。短剧之外,语聊、直播、短视频这些近几年国内逐步成熟的娱乐玩法都为中国出海企业提供了拓展海外市场的机会。而对于有意入局泛娱乐出海的企业,优先了解行业海外发展趋势和相关合规风险建议,意义重大。本篇文章,我们就将为您分享社交泛娱乐的最新趋势和创新方向洞察,以及互联网产品出海合规的注意事项。帮助您快人一步,把握泛娱乐产业出海风向标。
腾讯云音视频
2024/02/27
2450
预见洞察 | 泛娱乐产业出海趋势洞察及本地化落地建议
社交泛娱乐出海有三难,开发者如何闯关?
原创丨作者:罗超 9月8日,苹果发布了备受关注的iPhone 14系列。在展示iPhone 14所搭载的A14仿生芯片的强大性能时,苹果选取了米哈游旗下的《原神》游戏片段,这一细节在知乎等平台引发网友热议。 正如很多知乎网友所讨论的一样:《原神》被苹果多次拿来展示手机性能,只是来自中国的App在世界舞台上变得举足轻重的小小缩影。近年来,中国移动互联网行业正掀起一股“出海潮”,互联网出海军团日益壮大,其中社交泛娱乐成为其中的“母舰”。 “社交+”成出海中流砥柱 日前,领先的全球互联网通信云服务商融云&出海专
罗超频道
2022/09/27
7730
社交泛娱乐出海有三难,开发者如何闯关?
极速构建“社交+小游戏”融合玩法,腾讯云音视频推出互动小游戏解决方案
在社交娱乐行业,面对竞争日益激烈的出海赛道,如何能够突破用户留存和活跃度的瓶颈,是企业面临的一大挑战。从市场反应来看,“社交+游戏”是一个极具潜力的方向,一些头部社交平台上推出的“社交+小游戏”新玩法,已为业务增长突破带来了巨大的贡献。
腾讯云音视频
2024/01/06
7410
极速构建“社交+小游戏”融合玩法,腾讯云音视频推出互动小游戏解决方案
破浪启航,音视频技术赋能出海企业打造下一个“爆款”
在近期结束的GTC2022全球流量大会上,腾讯云音视频凭借过去一年在出海领域的持续耕耘和突出贡献,从300多家企业中脱颖而出,荣获第四届鲸鸣奖——优秀出海服务商奖项。该奖项由跨境出海市场各大领域的资深专家评审团经过品牌评估、品牌估值、产品评分、团队构成分析、数据分析、商业模式分析等多个流程后最终评出,含金量行业顶尖。另外,腾讯云音视频高级工程师张婧雨还在会上与广大开发者和出海同行人们分享了2022年腾讯云音视频在出海服务方面的一些洞察及案例。 做好准备,避免踩“坑” 对不少中国企业来说,出海曾经是一道“附
腾讯云音视频
2023/04/02
9390
破浪启航,音视频技术赋能出海企业打造下一个“爆款”
被全球大作信赖的语音服务GME,助力出海游戏粘住全球玩家
游戏内置语音,已经成为游戏不可或缺的功能之一。玩家通过游戏内置语音与队员/好友沟通,能够加强团队操作协同,大幅提升沉浸式游戏体验、对战质量,增强游戏粘性及社交性。因此,在游戏出海发行的趋势下,选择一款全球服务的优质游戏语音互动服务提供方,保障游戏玩家在世界各地都能拥有极致流畅的游戏语音体验至关重要。
腾讯云音视频
2023/08/11
3810
被全球大作信赖的语音服务GME,助力出海游戏粘住全球玩家
中国出海的力量 | 腾讯学堂远洋计划全球业务创新营全新开启
2022年,面对文娱出海大潮,腾讯学堂发起了“远洋计划—文娱出海创新营”,集结了30位来自社交、游戏、流媒体、阅读等不同文娱赛道的出海CXO精英。历经8个月的旅程,学员收获的不仅是“学习”,更好地应对出海挑战,更是“共创”,为出海这条孤勇者的荆棘赛道,培育出互相信任、共同战斗的友谊。 新的一年,中国企业出海正迈入一个新阶段。从长在中国,望眼世界,把优秀的中国经验和中国模式带到全球,业务逻辑更多变成了“天生全球化”—— 布局全球,聚焦本地化。在此背景下,远洋计划二期“腾讯学堂全球业务创新营”全新起航,招生开启
腾讯云音视频
2023/05/29
5580
中国出海的力量 | 腾讯学堂远洋计划全球业务创新营全新开启
做好音视频出海“基建”——如何借力V+生态实现出海高效增长?
2023年6月29日,由腾讯云音视频携手腾讯千帆云市场、腾讯云出海服务、腾讯应用宝、白鲸出海共同举办的【V+巅峰合作伙伴出海峰会——聚变 · 增长】线下活动,在深圳圆满落下帷幕。
腾讯云音视频
2023/07/27
5700
做好音视频出海“基建”——如何借力V+生态实现出海高效增长?
腾讯云音视频的创新技术、多元场景以及出海洞察
近年来,腾讯云音视频在音视频技术领域不断突破创新,从采集、编码、传输加速、云端媒体处理、分发到解码,不断探索前沿技术,并将其广泛应用于多元化的场景中。与此同时,在海外市场的实践中,腾讯云音视频积累了丰富的经验和对市场的深刻洞察。
腾讯云音视频
2024/01/01
8380
腾讯云音视频的创新技术、多元场景以及出海洞察
推荐阅读
一天搞定语聊房,TUILiveKit助力企业打造新款“海外土豪收割机”
1990
泛娱乐出海发展之道,腾讯云音视频《2024泛娱乐出海白皮书》出海趋势风口盘点
6310
出海热土在哪里?腾讯云音视频《2024泛娱乐出海白皮书》海外市场机会洞察
4980
互联网大航海,泛娱乐社交借东风
5100
干货荟萃丨2022中国互联网出海拉美高峰论坛:多角度看出海新机遇
9240
2022爱分析・出海数字化系列报告之“出海实时互动与通信”厂商全景报告 | 爱分析报告
5150
腾讯云入选《IDC MarketScape:实时云渲染解决方案报告》,产品综合能力处于领先位置
7130
当出海成为必选项,企业如何构建全场景全生态技术底座?| Q推荐
3990
一天搞定语聊房,TUILiveKit助力企业打造新款“海外土豪收割机”
1490
领先技术、完善生态、全球布局,腾讯云音视频助力企业出海探索新机遇
3920
重磅首发|腾讯云音视频联合LVS发布《2024音视频技术发展报告》
1.9K0
虚拟互动再升级,腾讯云云渲染以领先技术为创新场景提供坚实底座
2820
预见洞察 | 泛娱乐产业出海趋势洞察及本地化落地建议
2450
社交泛娱乐出海有三难,开发者如何闯关?
7730
极速构建“社交+小游戏”融合玩法,腾讯云音视频推出互动小游戏解决方案
7410
破浪启航,音视频技术赋能出海企业打造下一个“爆款”
9390
被全球大作信赖的语音服务GME,助力出海游戏粘住全球玩家
3810
中国出海的力量 | 腾讯学堂远洋计划全球业务创新营全新开启
5580
做好音视频出海“基建”——如何借力V+生态实现出海高效增长?
5700
腾讯云音视频的创新技术、多元场景以及出海洞察
8380
相关推荐
一天搞定语聊房,TUILiveKit助力企业打造新款“海外土豪收割机”
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验