paperjs-offset 1.0.7 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,347 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var paper_1 = require("paper");
4
- var arrayex_1 = require("arrayex");
5
- /**
6
- * Offset the start/terminal segment of a bezier curve
7
- * @param segment segment to offset
8
- * @param curve curve to offset
9
- * @param handleNormal the normal of the the line formed of two handles
10
- * @param offset offset value
11
- */
12
- function offsetSegment(segment, curve, handleNormal, offset) {
13
- var isFirst = segment.curve === curve;
14
- // get offset vector
15
- var offsetVector = (curve.getNormalAtTime(isFirst ? 0 : 1)).multiply(offset);
16
- // get offset point
17
- var point = segment.point.add(offsetVector);
18
- var newSegment = new paper_1.default.Segment(point);
19
- // handleOut for start segment & handleIn for terminal segment
20
- var handle = (isFirst ? 'handleOut' : 'handleIn');
21
- newSegment[handle] = segment[handle].add(handleNormal.subtract(offsetVector).divide(2));
22
- return newSegment;
23
- }
24
- /**
25
- * Adaptive offset a curve by repeatly apply the approximation proposed by Tiller and Hanson.
26
- * @param curve curve to offset
27
- * @param offset offset value
28
- */
29
- function adaptiveOffsetCurve(curve, offset) {
30
- var hNormal = (new paper_1.default.Curve(curve.segment1.handleOut.add(curve.segment1.point), new paper_1.default.Point(0, 0), new paper_1.default.Point(0, 0), curve.segment2.handleIn.add(curve.segment2.point))).getNormalAtTime(0.5).multiply(offset);
31
- var segment1 = offsetSegment(curve.segment1, curve, hNormal, offset);
32
- var segment2 = offsetSegment(curve.segment2, curve, hNormal, offset);
33
- // divide && re-offset
34
- var offsetCurve = new paper_1.default.Curve(segment1, segment2);
35
- // if the offset curve is not self intersected, divide it
36
- if (offsetCurve.getIntersections(offsetCurve).length === 0) {
37
- var threshold = Math.min(Math.abs(offset) / 10, 1);
38
- var midOffset = offsetCurve.getPointAtTime(0.5).getDistance(curve.getPointAtTime(0.5));
39
- if (Math.abs(midOffset - Math.abs(offset)) > threshold) {
40
- var subCurve = curve.divideAtTime(0.5);
41
- if (subCurve != null) {
42
- return adaptiveOffsetCurve(curve, offset).concat(adaptiveOffsetCurve(subCurve, offset));
43
- }
44
- }
45
- }
46
- return [segment1, segment2];
47
- }
48
- /**
49
- * Create a round join segment between two adjacent segments.
50
- */
51
- function makeRoundJoin(segment1, segment2, originPoint, radius) {
52
- var through = segment1.point.subtract(originPoint).add(segment2.point.subtract(originPoint))
53
- .normalize(Math.abs(radius)).add(originPoint);
54
- var arc = new paper_1.default.Path.Arc({ from: segment1.point, to: segment2.point, through: through, insert: false });
55
- segment1.handleOut = arc.firstSegment.handleOut;
56
- segment2.handleIn = arc.lastSegment.handleIn;
57
- return arc.segments.length === 3 ? arc.segments[1] : null;
58
- }
59
- function det(p1, p2) {
60
- return p1.x * p2.y - p1.y * p2.x;
61
- }
62
- /**
63
- * Get the intersection point of point based lines
64
- */
65
- function getPointLineIntersections(p1, p2, p3, p4) {
66
- var l1 = p1.subtract(p2);
67
- var l2 = p3.subtract(p4);
68
- var dl1 = det(p1, p2);
69
- var dl2 = det(p3, p4);
70
- return new paper_1.default.Point(dl1 * l2.x - l1.x * dl2, dl1 * l2.y - l1.y * dl2).divide(det(l1, l2));
71
- }
72
- /**
73
- * Connect two adjacent bezier curve, each curve is represented by two segments,
74
- * create different types of joins or simply removal redundant segment.
75
- */
76
- function connectAdjacentBezier(segments1, segments2, origin, joinType, offset, limit) {
77
- var curve1 = new paper_1.default.Curve(segments1[0], segments1[1]);
78
- var curve2 = new paper_1.default.Curve(segments2[0], segments2[1]);
79
- var intersection = curve1.getIntersections(curve2);
80
- var distance = segments1[1].point.getDistance(segments2[0].point);
81
- if (origin.isSmooth()) {
82
- segments2[0].handleOut = segments2[0].handleOut.project(origin.handleOut);
83
- segments2[0].handleIn = segments1[1].handleIn.project(origin.handleIn);
84
- segments2[0].point = segments1[1].point.add(segments2[0].point).divide(2);
85
- segments1.pop();
86
- }
87
- else {
88
- if (intersection.length === 0) {
89
- if (distance > Math.abs(offset) * 0.1) {
90
- // connect
91
- switch (joinType) {
92
- case 'miter':
93
- var join = getPointLineIntersections(curve1.point2, curve1.point2.add(curve1.getTangentAtTime(1)), curve2.point1, curve2.point1.add(curve2.getTangentAtTime(0)));
94
- // prevent sharp angle
95
- var joinOffset = Math.max(join.getDistance(curve1.point2), join.getDistance(curve2.point1));
96
- if (joinOffset < Math.abs(offset) * limit) {
97
- segments1.push(new paper_1.default.Segment(join));
98
- }
99
- break;
100
- case 'round':
101
- var mid = makeRoundJoin(segments1[1], segments2[0], origin.point, offset);
102
- if (mid) {
103
- segments1.push(mid);
104
- }
105
- break;
106
- default: break;
107
- }
108
- }
109
- else {
110
- segments2[0].handleIn = segments1[1].handleIn;
111
- segments1.pop();
112
- }
113
- }
114
- else {
115
- var second1 = curve1.divideAt(intersection[0]);
116
- if (second1) {
117
- var join = second1.segment1;
118
- var second2 = curve2.divideAt(curve2.getIntersections(curve1)[0]);
119
- join.handleOut = second2 ? second2.segment1.handleOut : segments2[0].handleOut;
120
- segments1.pop();
121
- segments2[0] = join;
122
- }
123
- else {
124
- segments2[0].handleIn = segments1[1].handleIn;
125
- segments1.pop();
126
- }
127
- }
128
- }
129
- }
130
- /**
131
- * Connect all the segments together.
132
- */
133
- function connectBeziers(rawSegments, join, source, offset, limit) {
134
- var originSegments = source.segments;
135
- var first = rawSegments[0].slice();
136
- for (var i = 0; i < rawSegments.length - 1; ++i) {
137
- connectAdjacentBezier(rawSegments[i], rawSegments[i + 1], originSegments[i + 1], join, offset, limit);
138
- }
139
- if (source.closed) {
140
- connectAdjacentBezier(rawSegments[rawSegments.length - 1], first, originSegments[0], join, offset, limit);
141
- rawSegments[0][0] = first[0];
142
- }
143
- return rawSegments;
144
- }
145
- function reduceSingleChildCompoundPath(path) {
146
- if (path.children.length === 1) {
147
- path = path.children[0];
148
- path.remove(); // remove from parent, this is critical, or the style attributes will be ignored
149
- }
150
- return path;
151
- }
152
- /** Normalize a path, always clockwise, non-self-intersection, ignore really small components, and no one-component compound path. */
153
- function normalize(path, areaThreshold) {
154
- if (areaThreshold === void 0) { areaThreshold = 0.01; }
155
- if (path.closed) {
156
- var ignoreArea_1 = Math.abs(path.area * areaThreshold);
157
- if (!path.clockwise) {
158
- path.reverse();
159
- }
160
- path = path.unite(path, { insert: false });
161
- if (path instanceof paper_1.default.CompoundPath) {
162
- path.children.filter(function (c) { return Math.abs(c.area) < ignoreArea_1; }).forEach(function (c) { return c.remove(); });
163
- if (path.children.length === 1) {
164
- return reduceSingleChildCompoundPath(path);
165
- }
166
- }
167
- }
168
- return path;
169
- }
170
- function isSameDirection(partialPath, fullPath) {
171
- var offset1 = partialPath.segments[0].location.offset;
172
- var offset2 = partialPath.segments[Math.max(1, Math.floor(partialPath.segments.length / 2))].location.offset;
173
- var sampleOffset = (offset1 + offset2) / 3;
174
- var originOffset1 = fullPath.getNearestLocation(partialPath.getPointAt(sampleOffset)).offset;
175
- var originOffset2 = fullPath.getNearestLocation(partialPath.getPointAt(2 * sampleOffset)).offset;
176
- return originOffset1 < originOffset2;
177
- }
178
- /** Remove self intersection when offset is negative by point direction dectection. */
179
- function removeIntersection(path) {
180
- var newPath = path.unite(path, { insert: false });
181
- if (newPath instanceof paper_1.default.CompoundPath) {
182
- newPath.children.filter(function (c) {
183
- if (c.segments.length > 1) {
184
- return !isSameDirection(c, path);
185
- }
186
- else {
187
- return true;
188
- }
189
- }).forEach(function (c) { return c.remove(); });
190
- return reduceSingleChildCompoundPath(newPath);
191
- }
192
- return path;
193
- }
194
- function getSegments(path) {
195
- if (path instanceof paper_1.default.CompoundPath) {
196
- return arrayex_1.Arrayex.Flat(path.children.map(function (c) { return c.segments; }));
197
- }
198
- else {
199
- return path.segments;
200
- }
201
- }
202
- /**
203
- * Remove impossible segments in negative offset condition.
204
- */
205
- function removeOutsiders(newPath, path) {
206
- var segments = getSegments(newPath).slice();
207
- segments.forEach(function (segment) {
208
- if (!path.contains(segment.point)) {
209
- segment.remove();
210
- }
211
- });
212
- }
213
- function preparePath(path, offset) {
214
- var source = path.clone({ insert: false });
215
- source.reduce({});
216
- if (!path.clockwise) {
217
- source.reverse();
218
- offset = -offset;
219
- }
220
- return [source, offset];
221
- }
222
- function offsetSimpleShape(path, offset, join, limit) {
223
- var _a;
224
- var source;
225
- _a = preparePath(path, offset), source = _a[0], offset = _a[1];
226
- var curves = source.curves.slice();
227
- var raws = arrayex_1.Arrayex.Divide(arrayex_1.Arrayex.Flat(curves.map(function (curve) { return adaptiveOffsetCurve(curve, offset); })), 2);
228
- var segments = arrayex_1.Arrayex.Flat(connectBeziers(raws, join, source, offset, limit));
229
- var newPath = removeIntersection(new paper_1.default.Path({ segments: segments, insert: false, closed: path.closed }));
230
- newPath.reduce({});
231
- if (source.closed && ((source.clockwise && offset < 0) || (!source.clockwise && offset > 0))) {
232
- removeOutsiders(newPath, path);
233
- }
234
- // recovery path
235
- if (source.clockwise !== path.clockwise) {
236
- newPath.reverse();
237
- }
238
- return normalize(newPath);
239
- }
240
- function makeRoundCap(from, to, offset) {
241
- var origin = from.point.add(to.point).divide(2);
242
- var normal = to.point.subtract(from.point).rotate(-90, new paper_1.default.Point(0, 0)).normalize(offset);
243
- var through = origin.add(normal);
244
- var arc = new paper_1.default.Path.Arc({ from: from.point, to: to.point, through: through, insert: false });
245
- return arc.segments;
246
- }
247
- function connectSide(outer, inner, offset, cap) {
248
- if (outer instanceof paper_1.default.CompoundPath) {
249
- var cs = outer.children.map(function (c) { return ({ c: c, a: Math.abs(c.area) }); });
250
- cs = cs.sort(function (c1, c2) { return c2.a - c1.a; });
251
- outer = cs[0].c;
252
- }
253
- var oSegments = outer.segments.slice();
254
- var iSegments = inner.segments.slice();
255
- switch (cap) {
256
- case 'round':
257
- var heads = makeRoundCap(iSegments[iSegments.length - 1], oSegments[0], offset);
258
- var tails = makeRoundCap(oSegments[oSegments.length - 1], iSegments[0], offset);
259
- var result = new paper_1.default.Path({ segments: heads.concat(oSegments, tails, iSegments), closed: true, insert: false });
260
- result.reduce({});
261
- return result;
262
- default: return new paper_1.default.Path({ segments: oSegments.concat(iSegments), closed: true, insert: false });
263
- }
264
- }
265
- function offsetSimpleStroke(path, offset, join, cap, limit) {
266
- offset = path.clockwise ? offset : -offset;
267
- var positiveOffset = offsetSimpleShape(path, offset, join, limit);
268
- var negativeOffset = offsetSimpleShape(path, -offset, join, limit);
269
- if (path.closed) {
270
- return positiveOffset.subtract(negativeOffset, { insert: false });
271
- }
272
- else {
273
- var inner = negativeOffset;
274
- var holes = new Array();
275
- if (negativeOffset instanceof paper_1.default.CompoundPath) {
276
- holes = negativeOffset.children.filter(function (c) { return c.closed; });
277
- holes.forEach(function (h) { return h.remove(); });
278
- inner = negativeOffset.children[0];
279
- }
280
- inner.reverse();
281
- var final = connectSide(positiveOffset, inner, offset, cap);
282
- if (holes.length > 0) {
283
- for (var _i = 0, holes_1 = holes; _i < holes_1.length; _i++) {
284
- var hole = holes_1[_i];
285
- final = final.subtract(hole, { insert: false });
286
- }
287
- }
288
- return final;
289
- }
290
- }
291
- function offsetPath(path, offset, join, limit) {
292
- var nonSIPath = path.unite(path, { insert: false });
293
- var result = nonSIPath;
294
- if (nonSIPath instanceof paper_1.default.Path) {
295
- result = offsetSimpleShape(nonSIPath, offset, join, limit);
296
- }
297
- else {
298
- var children = arrayex_1.Arrayex.Flat(nonSIPath.children.map(function (c) {
299
- if (c.segments.length > 1) {
300
- if (!isSameDirection(c, path)) {
301
- c.reverse();
302
- }
303
- var offseted = offsetSimpleShape(c, offset, join, limit);
304
- offseted = normalize(offseted);
305
- if (offseted.clockwise !== c.clockwise) {
306
- offseted.reverse();
307
- }
308
- if (offseted instanceof paper_1.default.CompoundPath) {
309
- offseted.applyMatrix = true;
310
- return offseted.children;
311
- }
312
- else {
313
- return offseted;
314
- }
315
- }
316
- else {
317
- return null;
318
- }
319
- }), false);
320
- result = new paper_1.default.CompoundPath({ children: children, insert: false });
321
- }
322
- result.copyAttributes(nonSIPath, false);
323
- result.remove();
324
- return result;
325
- }
326
- exports.offsetPath = offsetPath;
327
- function offsetStroke(path, offset, join, cap, limit) {
328
- var nonSIPath = path.unite(path, { insert: false });
329
- var result = nonSIPath;
330
- if (nonSIPath instanceof paper_1.default.Path) {
331
- result = offsetSimpleStroke(nonSIPath, offset, join, cap, limit);
332
- }
333
- else {
334
- var children = arrayex_1.Arrayex.Flat(nonSIPath.children.map(function (c) {
335
- return offsetSimpleStroke(c, offset, join, cap, limit);
336
- }));
337
- result = children.reduce(function (c1, c2) { return c1.unite(c2, { insert: false }); });
338
- }
339
- result.strokeWidth = 0;
340
- result.fillColor = nonSIPath.strokeColor;
341
- result.shadowBlur = nonSIPath.shadowBlur;
342
- result.shadowColor = nonSIPath.shadowColor;
343
- result.shadowOffset = nonSIPath.shadowOffset;
344
- return result;
345
- }
346
- exports.offsetStroke = offsetStroke;
347
- //# sourceMappingURL=offset.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"offset.js","sourceRoot":"","sources":["../../src/offset.ts"],"names":[],"mappings":"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"}