@doodle3d/clipper-js

中文文档
1.0.11发布于 2020/03/05MITTypeScriptESM + CJS近 30 天下载 3.1万

克利珀特-利布抽象层(简化 API)

中文使用文档

克利珀斯

克利珀斯 抽象层( 简化 API)

这个图书馆的目标是消除复杂性,为克利珀尔建立一个整体的更清洁的JavaScript平面API.

当使用此 API 一个类时, 形状 被使用 。 形状是一组所有集体关闭或开放的路径. 有孔的形状被定义为多条闭路道,其中轮廓为顺时针而孔为逆时针. 形状有多种功能,可以用来计算复杂的布尔操作,例如从一个简单的调用.

接下来的两个代码示例显示在剪接机和ClipperJS中有一个简单的布尔操作. 两者都使用两个预先定义的路径

const subjectPaths = [[{ X: 30, Y: 30 }, { X: 10, Y: 30 }, { X: 10, Y: 10 }, { X: 30, Y: 10 }]];
const clipPaths = [[{ X: 20, Y: 20 }, { X: 0, Y: 20 }, { X: 0, Y:0 }, { X: 20, Y: 0 }]];

剪辑机中的布尔交叉操作是这样的

const result = new ClipperLib.Paths();
const clipper = new ClipperLib.Clipper();
clipper.AddPaths(subjectPaths, ClipperLib.PolyType.ptSubject, true);
clipper.AddPaths(clipPaths, ClipperLib.PolyType.ptClip, true);
clipper.Execute(ClipperLib.ClipType.ctIntersection, result);

// result = [[{ X: 20, Y: 20 }, { X: 10, Y: 20 }, { X: 10, Y: 10 }, { X: 20, Y: 10 }]]

在克利珀斯

const subject = new Shape(subjectPaths, true);
const clip = new Shape(subjectPaths, true);

const result = subject.intersect(clip);

// result = { closed: true, paths: [[{ X: 20, Y: 20 }, { X: 10, Y: 20 }, { X: 10, Y: 10 }, { X: 20, Y: 10 }]] }

使用量

使用 JSPM( ECMAScript / ES6 模块)

安装库.

jspm install github:Doodle3D/clipper-js

包括图书馆.

import Shape from 'Doodle3D/clipper-js';

使用国家预防机制(共同JS模块)

安装库.

npm install @doodle3d/clipper-js --save

包括图书馆.

var Shape = require('clipper-js');

API 密码

形状

形状接受3个可选参数, paths, (中文(简体) ), closed 财务报告和审定财务报表 capitalConversion。 。 。 . paths 也可以用大写和小写来形容 克利珀顿仅使用大写属性,输入时使用小写 captalConversion 需要设置为 true。 。 。 .

new Shape([ paths = [], closed = true, capitalConversion = false, integerConversion = false, removeDuplicates = false ])

paths = [...[...{ X: Number, Y: Number }] || [...[...{ x: Number, y: Number }]
paths = Array
closed = Bool
capitalConversion = Bool
removeDuplicates = Bool
  • 路径: 构成形状的路径
  • 关闭:形状是多边形或行
  • 大写转换:将小写x和y转换为大写X和Y
  • 资本转换:剪接器只与接口工作, 有时输入在浮点数剪接器中失败
  • 删除重复: 当数据集出现重复点时, 剪辑器有时会失败, 此参数过滤出所有重复点

Note: due to the nature of Clipper, some functions are destructive and some are non-destructive.

布尔操作: 联盟

Shape = Shape.union( clipShape: Shape )
  • 剪辑形状:布尔操作的剪辑

布尔操作: 差异

Shape = Shape.difference( clipShape: Shape )
  • 剪辑形状:布尔操作的剪辑

布尔操作:相交

Shape = Shape.intersect( clipShape: Shape )
  • 剪辑形状:布尔操作的剪辑

布尔操作: Xor

Shape = Shape.xor( clipShape: Shape )
  • 剪辑形状:布尔操作的剪辑

折减

Shape = Shape.offset( offset: Number, options: {
  jointType = 'jtSquare',
  endType = 'etClosedPolygon',
  miterLimit = 2.0,
  roundPrecision = 0.25
} )

沿常态抵消形状.

缩放

Shape.scaleUp( factor: Number )

以因数来缩放.

Note: destructive

缩放

Shape.scaleDown( factor: Number )

以因数来缩放.

Note: destructive

第一点

{ X: Number, Y: Number } || { x: Number, y: Number } = Shape.firstPoint([ capitalConversion: false ])
  • 大写转换:将大写X和Y转换为小写x和y.

返回第一个点的位置.

最后一点

{ X: Number, Y: Number } || { x: Number, y: Number } = Shape.lastPoint([ capitalConversion: false ])
  • 大写转换:将大写X和Y转换为小写x和y.

返回最后一个点的位置.

面积共计

Number = Shape.totalArea()

返回形状的总面积.

区域

Number = Shape.area( index: Int )
  • 索引:子形状的索引

返回子形状的区域(如果逆时针明智,则为负).

领域

[...Number] = Shape.areas()

返回所有子形状的区域.

共计

Number = Shape.totalPerimeter()

返回形状的总周边.

周边

Number = Shape.perimeter( index: Int )
  • 索引:子形状的索引

返回子形状的周边.

周长

[...Number] = Shape.perimeters()

返回所有子形状的周边阵列.

反转

Shape.reverse()

倒转所有子形状的顺序.

三角形区域

Shape.tresholdArea( minArea: Number )
  • 最小面积

从形状中去除所有较小的子形状.

联合

Shape.join( shape )

以给定的形状加入形状.

Note: destructive

克隆

Shape = Shape.clone()

返回形状副本.

形状边界

{
  left: Int,
  right: Int,
  top: Int,
  bottom: Int,
  width: Int,
  height: Int,
  size: Int
} = Shape.shapeBounds()

返回形状的边框.

路径边界

{
  left: Int,
  right: Int,
  top: Int,
  bottom: Int,
  width: Int,
  height: Int,
  size: Int
} = Shape.pathBounds( index: Int )

返回子形状的边框.

干净

Shape = Shape.clean( cleanDelta: Number )

方向

Bool = Shape.orientation( index: Int )

返回子形状的方向。 如果顺时针,假的,如果逆时钟明智.

在形状中点

Bool = Shape.pointInShape( { X: Number, Y: Number }, [ capitalConversion = false, integerConversion = false ] )
  • 点: 用于命中检测的位置
  • 大写转换:将小写x和y转换为大写X和Y
  • 整数转换:将点转换为入点

如果点为形状,则返回.

路径中的点

Bool = Shape.pointInPath( index: Int, { X: Number, Y: Number }, [ capitalConversion = false, integerConversion = false ] )
  • 点: 用于命中检测的位置
  • 索引:子形状的索引
  • 大写转换:将小写x和y转换为大写X和Y
  • 整数转换:将点转换为入点

如果点处于子形状,则返回.

修正方向

Shape.fixOrientation()

当给定有孔的路径时,外观必须顺时针,孔必须逆时针. 试着修正方向.

Note: destructive

简化

Shape = Shape.simplify(fillType: String)

使用填充类型来简化形状。 只为闭塞外形而活.

撕裂形状

[...Shape] = Shape.seperateShapes()

当使用联盟操作时,可以创建多个形状。 斯珀特形状将这些形状分解为分解实例. 所有形状都保持了洞口.

回合

Shape = Shape.round()

返回新形状实例, 将所有点四舍五入到整数 .

删除复制件

Shape = Shape.removeDuplicates()

返回新形状实例, 删除所有重复点 .

下图

[...[...{ x: Number, y: Number }]] = Shape.mapToLower()

返回小写 x 和 y 的路径数组.

版本与发布记录

@doodle3d/clipper-js 共发布 10 个版本,首次发布于 2017/07/20;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.0.11latest2020/03/056 年前
1.0.102018/01/188 年前
1.0.92018/01/188 年前
1.0.82018/01/188 年前
1.0.72017/09/139 年前
1.0.62017/09/139 年前

关于 @doodle3d/clipper-js 的常见问题

@doodle3d/clipper-js 是什么?

克利珀特-利布抽象层(简化 API)

如何安装 @doodle3d/clipper-js?

在项目目录运行 npm install @doodle3d/clipper-js,或使用 pnpm add / yarn add / bun add。

@doodle3d/clipper-js 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@doodle3d/clipper-js 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@doodle3d/clipper-js 可以商用吗?

@doodle3d/clipper-js 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@doodle3d/clipper-js 的下载量有多少?

根据 npm 官方下载统计,@doodle3d/clipper-js 在 2026/10/13 – 2026/11/11 这 30 天内被下载 30,893 次,日均约 1,030 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@doodle3d/clipper-js 还在维护吗?

最新版本 1.0.11 发布于 2020/03/05(6 年前);至今共发布 10 个版本,其中过去 12 个月发布了 0 个;首次发布于 2017/07/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。