欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 图形编辑器基于Paper.js教程04: Paper.js中的基础知识

图形编辑器基于Paper.js教程04: Paper.js中的基础知识

2024/11/6 15:38:08 来源:https://blog.csdn.net/github_35631540/article/details/139753224  浏览:    关键词:图形编辑器基于Paper.js教程04: Paper.js中的基础知识

背景

了解paper.js的基础知识,在往后的开发过程中会让你如履平地。

基础知识

paper.js 提供了两种编写方式,一种是纯粹的JavaScript编写,还有一种是使用官方提供的PaperScript。
区别就是在于,调用paper下的字对象是否需要加paper,以及向量的加减乘除。
下面看一下两种写法

使用 paperscript

<script type="text/paperscript" canvas="myCanvas">// Create a Paper.js Path to draw a line into it:var path = new Path();// Give the stroke a colorpath.strokeColor = 'black';var start = new Point(100, 100);// Move to start and draw a line from therepath.moveTo(start);// Note the plus operator on Point objects.// PaperScript does that for us, and much more!path.lineTo(start + [ 100, -50 ]);
</script>

使用javascript

<script>paper.setup('myCanvas');// Create a Paper.js Path to draw a line into it:var path = new paper.Path();// Give the stroke a colorpath.strokeColor = 'black';var start = new paper.Point(100, 100);// Move to start and draw a line from therepath.moveTo(start);// Note the plus operator on Point objects.// PaperScript does that for us, and much more!path.lineTo(start + [ 100, -50 ]);
</script>

向量

向量告诉我们的朝哪个方向移动以及移动多远。

向量的加法
在这里插入图片描述
向量的减法
在这里插入图片描述

向量的乘法,拉长向量的距离
在这里插入图片描述

向量的除法,缩小向量的距离
在这里插入图片描述

坐标系

坐标系的原点是在左上角, 0,0

画基本的几何元素

 paper.setup('myCanvas');// 圆var circle = new paper.Path.Circle({center: [80, 50],radius: 30,fillColor: 'red'});// 椭圆var ellipse = new paper.Path.Ellipse({point: [150, 20],size: [80, 40],fillColor: 'blue'});// 矩形var rectangle = new paper.Path.Rectangle({point: [250, 20],size: [100, 50],fillColor: 'green'});// 正方形var square = new paper.Path.Rectangle({point: [370, 20],size: [50, 50],fillColor: 'yellow'});// 线段var line = new Path({segments: [[500, 20], [550, 70]],strokeColor: 'black'});// 弧线var arc = new paper.Path.Arc({from: [600, 50],through: [650, 20],to: [700, 50],strokeColor: 'orange'});// 曲线var curve = new Path({strokeColor: 'purple'});curve.add(new paper.Point(750, 25));curve.add(new paper.Point(800, 75));curve.smooth();// 多边形var polygon = new paper.Path.RegularPolygon({center: [900, 50],sides: 6,radius: 30,fillColor: 'pink'});// 星形var star = new paper.Path.Star({center: [1050, 50],points: 5,radius1: 20,radius2: 40,fillColor: 'brown'});

在这里插入图片描述

视图的缩放

// 缩小一半
paper.view.zoom = 0.5
// 扩大2倍
paper.view.zoom = 2// 放大2倍
paper.view.scale(2)// 缩小一半
paper.view.scale(0.5)

两者能实现同样的效果,但zoom是依据最原始的缩放比例,scale是依据当前的缩放比例。
如果你先缩放0.5。然后paper.view.scale(1),那么现在还是缩小了一半。

元素的移动,旋转

元素的旋转

// 旋转
paper.view.onFrame = function(event) {star.rotate(3);
}

角度是 顺时针是正角度,逆时针是负角度。

元素的移动


star.position = star.position.add(new paper.Point(100, 50));setTimeout(() => {star.position = new paper.Point(20, 20);
}, 2000)// 或者使用translate
star.translate(new paper.Point(20, 20))

特性有哪些

画点的切线,
画法线,
求图形的交集,并集,补集
贝塞尔曲线
svg导入导出
json导入,导出

特性有很多

说一下不擅长的东西,2d渲染,位图的处理有限
动画功能有限,毕竟定位是矢量库。

负责人几乎不再维护啦,
导入svg有一些问题,特别是高精度的,小尺寸的复杂svg
社区不够活跃

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com