@plait/draw 0.55.0 → 0.56.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.
- package/constants/geometry.d.ts +52 -0
- package/engines/basic-shapes/ellipse.d.ts +8 -3
- package/engines/flowchart/database.d.ts +2 -0
- package/engines/flowchart/document.d.ts +2 -0
- package/engines/flowchart/hard-disk.d.ts +2 -0
- package/engines/flowchart/internal-storage.d.ts +2 -0
- package/engines/flowchart/multi-document.d.ts +4 -0
- package/engines/flowchart/note-curly-left.d.ts +2 -0
- package/engines/flowchart/note-curly-right.d.ts +2 -0
- package/engines/flowchart/note-square.d.ts +2 -0
- package/esm2022/constants/geometry.mjs +30 -2
- package/esm2022/engines/basic-shapes/ellipse.mjs +49 -36
- package/esm2022/engines/basic-shapes/round-rectangle.mjs +2 -3
- package/esm2022/engines/flowchart/database.mjs +84 -0
- package/esm2022/engines/flowchart/delay.mjs +2 -3
- package/esm2022/engines/flowchart/document.mjs +81 -0
- package/esm2022/engines/flowchart/hard-disk.mjs +84 -0
- package/esm2022/engines/flowchart/internal-storage.mjs +47 -0
- package/esm2022/engines/flowchart/multi-document.mjs +143 -0
- package/esm2022/engines/flowchart/note-curly-left.mjs +50 -0
- package/esm2022/engines/flowchart/note-curly-right.mjs +50 -0
- package/esm2022/engines/flowchart/note-square.mjs +46 -0
- package/esm2022/engines/flowchart/or.mjs +2 -2
- package/esm2022/engines/flowchart/stored-data.mjs +2 -3
- package/esm2022/engines/flowchart/summing-junction.mjs +2 -2
- package/esm2022/engines/flowchart/terminal.mjs +2 -3
- package/esm2022/engines/index.mjs +18 -2
- package/esm2022/generators/line-active.generator.mjs +15 -13
- package/esm2022/generators/line-auto-complete.generator.mjs +2 -1
- package/esm2022/geometry.component.mjs +12 -20
- package/esm2022/image.component.mjs +8 -8
- package/esm2022/interfaces/geometry.mjs +9 -1
- package/esm2022/line.component.mjs +6 -6
- package/esm2022/plugins/with-draw-fragment.mjs +4 -4
- package/esm2022/plugins/with-draw-hotkey.mjs +5 -5
- package/esm2022/plugins/with-draw-rotate.mjs +6 -7
- package/esm2022/plugins/with-draw.mjs +3 -3
- package/esm2022/plugins/with-geometry-create.mjs +35 -22
- package/esm2022/plugins/with-geometry-resize.mjs +4 -5
- package/esm2022/plugins/with-line-auto-complete-reaction.mjs +6 -4
- package/esm2022/plugins/with-line-text-move.mjs +5 -5
- package/esm2022/plugins/with-line-text.mjs +11 -7
- package/esm2022/utils/geometry.mjs +7 -3
- package/esm2022/utils/selected.mjs +4 -4
- package/fesm2022/plait-draw.mjs +699 -131
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/generators/line-auto-complete.generator.d.ts +1 -0
- package/geometry.component.d.ts +1 -4
- package/image.component.d.ts +1 -3
- package/interfaces/geometry.d.ts +9 -1
- package/line.component.d.ts +1 -3
- package/package.json +1 -1
- package/utils/geometry.d.ts +16 -0
- package/utils/selected.d.ts +2 -2
- package/engines/basic-shapes/circle.d.ts +0 -8
- package/esm2022/engines/basic-shapes/circle.mjs +0 -51
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { PlaitBoard, RectangleClient, catmullRomFitting, getNearestPointBetweenPointAndSegments, setStrokeLinecap } from '@plait/core';
|
|
2
|
+
import { getUnitVectorByPointAndPoint } from '@plait/common';
|
|
3
|
+
import { RectangleEngine } from '../basic-shapes/rectangle';
|
|
4
|
+
import { getStrokeWidthByElement } from '../../utils';
|
|
5
|
+
import { ShapeDefaultSpace } from '../../constants';
|
|
6
|
+
import { pointsOnBezierCurves } from 'points-on-curve';
|
|
7
|
+
export const DocumentEngine = {
|
|
8
|
+
draw(board, rectangle, options) {
|
|
9
|
+
const rs = PlaitBoard.getRoughSVG(board);
|
|
10
|
+
const shape = rs.path(`M${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9} V${rectangle.y} H${rectangle.x +
|
|
11
|
+
rectangle.width} V${rectangle.y + rectangle.height - rectangle.height / 9}
|
|
12
|
+
Q${rectangle.x + rectangle.width - rectangle.width / 4} ${rectangle.y +
|
|
13
|
+
rectangle.height -
|
|
14
|
+
(rectangle.height / 9) * 3}, ${rectangle.x + rectangle.width / 2} ${rectangle.y +
|
|
15
|
+
rectangle.height -
|
|
16
|
+
rectangle.height / 9} T${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9}
|
|
17
|
+
`, { ...options, fillStyle: 'solid' });
|
|
18
|
+
setStrokeLinecap(shape, 'round');
|
|
19
|
+
return shape;
|
|
20
|
+
},
|
|
21
|
+
isInsidePoint(rectangle, point) {
|
|
22
|
+
const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);
|
|
23
|
+
return RectangleClient.isHit(rectangle, rangeRectangle);
|
|
24
|
+
},
|
|
25
|
+
getCornerPoints(rectangle) {
|
|
26
|
+
return RectangleClient.getCornerPoints(rectangle);
|
|
27
|
+
},
|
|
28
|
+
getNearestPoint(rectangle, point) {
|
|
29
|
+
let nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
|
|
30
|
+
let curvePoints = catmullRomFitting([
|
|
31
|
+
[rectangle.x, rectangle.y + rectangle.height - rectangle.height / 9],
|
|
32
|
+
[rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height],
|
|
33
|
+
[rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height / 9],
|
|
34
|
+
[rectangle.x + (rectangle.width / 4) * 3, rectangle.y + rectangle.height - (rectangle.height / 9) * 2],
|
|
35
|
+
[rectangle.x + rectangle.width, rectangle.y + rectangle.height - rectangle.height / 9]
|
|
36
|
+
]);
|
|
37
|
+
curvePoints = pointsOnBezierCurves(curvePoints);
|
|
38
|
+
if (nearestPoint[1] > rectangle.y + rectangle.height - rectangle.height / 9) {
|
|
39
|
+
if (nearestPoint[0] === rectangle.x + rectangle.width / 2) {
|
|
40
|
+
nearestPoint[1] = rectangle.y + rectangle.height - rectangle.height / 9;
|
|
41
|
+
return nearestPoint;
|
|
42
|
+
}
|
|
43
|
+
nearestPoint = getNearestPointBetweenPointAndSegments(point, curvePoints, false);
|
|
44
|
+
}
|
|
45
|
+
return nearestPoint;
|
|
46
|
+
},
|
|
47
|
+
getConnectorPoints(rectangle) {
|
|
48
|
+
return [
|
|
49
|
+
[rectangle.x + rectangle.width / 2, rectangle.y],
|
|
50
|
+
[rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],
|
|
51
|
+
[rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height - rectangle.height / 9],
|
|
52
|
+
[rectangle.x, rectangle.y + rectangle.height / 2]
|
|
53
|
+
];
|
|
54
|
+
},
|
|
55
|
+
getTangentVectorByConnectionPoint(rectangle, pointOfRectangle) {
|
|
56
|
+
const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
57
|
+
if (connectionPoint[0] > rectangle.x && connectionPoint[0] < rectangle.x + rectangle.width / 4) {
|
|
58
|
+
return getUnitVectorByPointAndPoint([rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height], connectionPoint);
|
|
59
|
+
}
|
|
60
|
+
if (connectionPoint[0] > rectangle.x + rectangle.width / 4 && connectionPoint[0] < rectangle.x + (rectangle.width / 4) * 3) {
|
|
61
|
+
return getUnitVectorByPointAndPoint([rectangle.x + (rectangle.width / 4) * 3, rectangle.y + rectangle.height - rectangle.height / 9], [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height]);
|
|
62
|
+
}
|
|
63
|
+
if (connectionPoint[0] > rectangle.x + (rectangle.width / 4) * 3) {
|
|
64
|
+
return getUnitVectorByPointAndPoint([rectangle.x + rectangle.width, rectangle.y + rectangle.height - rectangle.height / 9], connectionPoint);
|
|
65
|
+
}
|
|
66
|
+
return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x + rectangle.width / 4, rectangle.y + rectangle.height]);
|
|
67
|
+
},
|
|
68
|
+
getTextRectangle: (element) => {
|
|
69
|
+
const elementRectangle = RectangleClient.getRectangleByPoints(element.points);
|
|
70
|
+
const strokeWidth = getStrokeWidthByElement(element);
|
|
71
|
+
const height = element.textHeight;
|
|
72
|
+
const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;
|
|
73
|
+
return {
|
|
74
|
+
height,
|
|
75
|
+
width: width > 0 ? width : 0,
|
|
76
|
+
x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,
|
|
77
|
+
y: elementRectangle.y + (elementRectangle.height - height) / 2
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9lbmdpbmVzL2Zsb3djaGFydC9kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsVUFBVSxFQUdWLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsc0NBQXNDLEVBQ3RDLGdCQUFnQixFQUNuQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWdCO0lBQ3ZDLElBQUksQ0FBQyxLQUFpQixFQUFFLFNBQTBCLEVBQUUsT0FBZ0I7UUFDaEUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUNqQixJQUFJLFNBQVMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDcEcsU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDO2VBQzFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxT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LENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlILENBQUM7SUFFRCxnQkFBZ0IsRUFBRSxDQUFDLE9BQXNCLEVBQUUsRUFBRTtRQUN6QyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTyxDQUFDLENBQUM7UUFDL0UsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNsQyxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDcEksT0FBTztZQUNILE1BQU07WUFDTixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJO1lBQ3hHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNqRSxDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgY2F0bXVsbFJvbUZpdHRpbmcsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMsXG4gICAgc2V0U3Ryb2tlTGluZWNhcFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBQbGFpdEdlb21ldHJ5LCBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlRW5naW5lIH0gZnJvbSAnLi4vYmFzaWMtc2hhcGVzL3JlY3RhbmdsZSc7XG5pbXBvcnQgeyBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFNoYXBlRGVmYXVsdFNwYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHBvaW50c09uQmV6aWVyQ3VydmVzIH0gZnJvbSAncG9pbnRzLW9uLWN1cnZlJztcblxuZXhwb3J0IGNvbnN0IERvY3VtZW50RW5naW5lOiBTaGFwZUVuZ2luZSA9IHtcbiAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBjb25zdCBycyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgICAgICBjb25zdCBzaGFwZSA9IHJzLnBhdGgoXG4gICAgICAgICAgICBgTSR7cmVjdGFuZ2xlLnh9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAvIDl9IFYke3JlY3RhbmdsZS55fSBIJHtyZWN0YW5nbGUueCArXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLndpZHRofSBWJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSByZWN0YW5nbGUuaGVpZ2h0IC8gOX1cbiAgICAgICAgICAgIFEke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gcmVjdGFuZ2xlLndpZHRoIC8gNH0gJHtyZWN0YW5nbGUueSArXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCAtXG4gICAgICAgICAgICAgICAgKHJlY3RhbmdsZS5oZWlnaHQgLyA5KSAqIDN9LCAke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMn0gJHtyZWN0YW5nbGUueSArXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCAtXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCAvIDl9IFQke3JlY3RhbmdsZS54fSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgLyA5fSAgICAgICAgICAgXG4gICAgICAgICAgICBgLFxuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfVxuICAgICAgICApO1xuICAgICAgICBzZXRTdHJva2VMaW5lY2FwKHNoYXBlLCAncm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgIH0sXG4gICAgaXNJbnNpZGVQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyZWN0YW5nbGUsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldENvcm5lclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgbGV0IG5lYXJlc3RQb2ludCA9IGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBSZWN0YW5nbGVFbmdpbmUuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSkpO1xuICAgICAgICBsZXQgY3VydmVQb2ludHMgPSBjYXRtdWxsUm9tRml0dGluZyhbXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgLyA5XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDQsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSByZWN0YW5nbGUuaGVpZ2h0IC8gOV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyAocmVjdGFuZ2xlLndpZHRoIC8gNCkgKiAzLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSAocmVjdGFuZ2xlLmhlaWdodCAvIDkpICogMl0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgLyA5XVxuICAgICAgICBdKTtcbiAgICAgICAgY3VydmVQb2ludHMgPSBwb2ludHNPbkJlemllckN1cnZlcyhjdXJ2ZVBvaW50cykgYXMgUG9pbnRbXTtcbiAgICAgICAgaWYgKG5lYXJlc3RQb2ludFsxXSA+IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgLyA5KSB7XG4gICAgICAgICAgICBpZiAobmVhcmVzdFBvaW50WzBdID09PSByZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIpIHtcbiAgICAgICAgICAgICAgICBuZWFyZXN0UG9pbnRbMV0gPSByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSByZWN0YW5nbGUuaGVpZ2h0IC8gOTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmVhcmVzdFBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnQsIGN1cnZlUG9pbnRzLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmVhcmVzdFBvaW50O1xuICAgIH0sXG5cbiAgICBnZXRDb25uZWN0b3JQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS55XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSByZWN0YW5nbGUuaGVpZ2h0IC8gOV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdXG4gICAgICAgIF07XG4gICAgfSxcblxuICAgIGdldFRhbmdlbnRWZWN0b3JCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnRPZlJlY3RhbmdsZTogUG9pbnRPZlJlY3RhbmdsZSkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgcG9pbnRPZlJlY3RhbmdsZSk7XG4gICAgICAgIGlmIChjb25uZWN0aW9uUG9pbnRbMF0gPiByZWN0YW5nbGUueCAmJiBjb25uZWN0aW9uUG9pbnRbMF0gPCByZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50KFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDQsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF0sIGNvbm5lY3Rpb25Qb2ludCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29ubmVjdGlvblBvaW50WzBdID4gcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyA0ICYmIGNvbm5lY3Rpb25Qb2ludFswXSA8IHJlY3RhbmdsZS54ICsgKHJlY3RhbmdsZS53aWR0aCAvIDQpICogMykge1xuICAgICAgICAgICAgcmV0dXJuIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoXG4gICAgICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgKHJlY3RhbmdsZS53aWR0aCAvIDQpICogMywgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAvIDldLFxuICAgICAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDQsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29ubmVjdGlvblBvaW50WzBdID4gcmVjdGFuZ2xlLnggKyAocmVjdGFuZ2xlLndpZHRoIC8gNCkgKiAzKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChcbiAgICAgICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgLyA5XSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uUG9pbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoY29ubmVjdGlvblBvaW50LCBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyA0LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdKTtcbiAgICB9LFxuXG4gICAgZ2V0VGV4dFJlY3RhbmdsZTogKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyEpO1xuICAgICAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBlbGVtZW50LnRleHRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudFJlY3RhbmdsZS53aWR0aCAtIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKiAyIC0gc3Ryb2tlV2lkdGggKiAyIC0gZWxlbWVudFJlY3RhbmdsZS53aWR0aCAqIDAuMDYgKiAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoID4gMCA/IHdpZHRoIDogMCxcbiAgICAgICAgICAgIHg6IGVsZW1lbnRSZWN0YW5nbGUueCArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKyBzdHJva2VXaWR0aCArIGVsZW1lbnRSZWN0YW5nbGUud2lkdGggKiAwLjA2LFxuICAgICAgICAgICAgeTogZWxlbWVudFJlY3RhbmdsZS55ICsgKGVsZW1lbnRSZWN0YW5nbGUuaGVpZ2h0IC0gaGVpZ2h0KSAvIDJcbiAgICAgICAgfTtcbiAgICB9XG59O1xuIl19
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { PlaitBoard, RectangleClient, getEllipseTangentSlope, getNearestPointBetweenPointAndEllipse, getNearestPointBetweenPointAndSegments, getVectorFromPointAndSlope, isPointInEllipse, setStrokeLinecap } from '@plait/core';
|
|
2
|
+
import { ShapeDefaultSpace } from '../../constants';
|
|
3
|
+
import { getStrokeWidthByElement } from '../../utils/style/stroke';
|
|
4
|
+
import { RectangleEngine } from '../basic-shapes/rectangle';
|
|
5
|
+
export const HardDiskEngine = {
|
|
6
|
+
draw(board, rectangle, options) {
|
|
7
|
+
const rs = PlaitBoard.getRoughSVG(board);
|
|
8
|
+
const shape = rs.path(`M${rectangle.x + rectangle.width - rectangle.width * 0.15} ${rectangle.y}
|
|
9
|
+
A${rectangle.width * 0.15} ${rectangle.height / 2}, 0, 0, 0,${rectangle.x +
|
|
10
|
+
rectangle.width -
|
|
11
|
+
rectangle.width * 0.15} ${rectangle.y + rectangle.height}
|
|
12
|
+
A${rectangle.width * 0.15} ${rectangle.height / 2}, 0, 0, 0,${rectangle.x + rectangle.width - rectangle.width * 0.15} ${rectangle.y}
|
|
13
|
+
H${rectangle.x + rectangle.width * 0.15}
|
|
14
|
+
A${rectangle.width * 0.15} ${rectangle.height / 2}, 0, 0, 0, ${rectangle.x + rectangle.width * 0.15} ${rectangle.y +
|
|
15
|
+
rectangle.height}
|
|
16
|
+
H${rectangle.x + rectangle.width - rectangle.width * 0.15}`, { ...options, fillStyle: 'solid' });
|
|
17
|
+
setStrokeLinecap(shape, 'round');
|
|
18
|
+
return shape;
|
|
19
|
+
},
|
|
20
|
+
isInsidePoint(rectangle, point) {
|
|
21
|
+
const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);
|
|
22
|
+
const isInRectangle = RectangleClient.isHit({
|
|
23
|
+
...rectangle,
|
|
24
|
+
x: rectangle.x + rectangle.width * 0.15,
|
|
25
|
+
width: rectangle.width - rectangle.width * 0.3
|
|
26
|
+
}, rangeRectangle);
|
|
27
|
+
const isInLeftEllipse = isPointInEllipse(point, [rectangle.x + rectangle.width * 0.15, rectangle.y + rectangle.height / 2], rectangle.width * 0.15, rectangle.height / 2);
|
|
28
|
+
const isInRightEllipse = isPointInEllipse(point, [rectangle.x + rectangle.width - rectangle.width * 0.15, rectangle.y + rectangle.height / 2], rectangle.width * 0.15, rectangle.height / 2);
|
|
29
|
+
return isInRectangle || isInLeftEllipse || isInRightEllipse;
|
|
30
|
+
},
|
|
31
|
+
getCornerPoints(rectangle) {
|
|
32
|
+
return RectangleClient.getCornerPoints(rectangle);
|
|
33
|
+
},
|
|
34
|
+
getNearestPoint(rectangle, point) {
|
|
35
|
+
const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
|
|
36
|
+
if (nearestPoint[0] < rectangle.x + rectangle.width * 0.15) {
|
|
37
|
+
const centerPoint = [rectangle.x + rectangle.width * 0.15, rectangle.y + rectangle.height / 2];
|
|
38
|
+
const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width * 0.15, rectangle.height / 2);
|
|
39
|
+
if (nearestPoint[0] > centerPoint[0]) {
|
|
40
|
+
nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];
|
|
41
|
+
}
|
|
42
|
+
return nearestPoint;
|
|
43
|
+
}
|
|
44
|
+
if (nearestPoint[0] > rectangle.x + rectangle.width - rectangle.width * 0.15) {
|
|
45
|
+
const centerPoint = [rectangle.x + rectangle.width - rectangle.width * 0.15, rectangle.y + rectangle.height / 2];
|
|
46
|
+
const nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width * 0.15, rectangle.height / 2);
|
|
47
|
+
if (nearestPoint[0] < centerPoint[0]) {
|
|
48
|
+
nearestPoint[0] = centerPoint[0] * 2 - nearestPoint[0];
|
|
49
|
+
}
|
|
50
|
+
return nearestPoint;
|
|
51
|
+
}
|
|
52
|
+
return nearestPoint;
|
|
53
|
+
},
|
|
54
|
+
getConnectorPoints(rectangle) {
|
|
55
|
+
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
56
|
+
},
|
|
57
|
+
getTangentVectorByConnectionPoint(rectangle, pointOfRectangle) {
|
|
58
|
+
const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
59
|
+
let centerPoint = [rectangle.x + rectangle.width * 0.15, rectangle.y + rectangle.height / 2];
|
|
60
|
+
let a = rectangle.width * 0.15;
|
|
61
|
+
let b = rectangle.height / 2;
|
|
62
|
+
const isInRightEllipse = connectionPoint[0] > rectangle.x + rectangle.width - rectangle.width * 0.15 && connectionPoint[1] > rectangle.y;
|
|
63
|
+
if (isInRightEllipse) {
|
|
64
|
+
centerPoint = [rectangle.x + rectangle.width - rectangle.width * 0.15, rectangle.y + rectangle.height / 2];
|
|
65
|
+
}
|
|
66
|
+
const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];
|
|
67
|
+
const slope = getEllipseTangentSlope(point[0], point[1], a, b);
|
|
68
|
+
const vector = getVectorFromPointAndSlope(point[0], point[1], slope);
|
|
69
|
+
return vector;
|
|
70
|
+
},
|
|
71
|
+
getTextRectangle: (element) => {
|
|
72
|
+
const elementRectangle = RectangleClient.getRectangleByPoints(element.points);
|
|
73
|
+
const strokeWidth = getStrokeWidthByElement(element);
|
|
74
|
+
const height = element.textHeight;
|
|
75
|
+
const width = elementRectangle.width - elementRectangle.width * 0.45 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;
|
|
76
|
+
return {
|
|
77
|
+
height,
|
|
78
|
+
width: width > 0 ? width : 0,
|
|
79
|
+
x: elementRectangle.x + elementRectangle.width * 0.15 + ShapeDefaultSpace.rectangleAndText + strokeWidth,
|
|
80
|
+
y: elementRectangle.y + (elementRectangle.height - height) / 2
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZC1kaXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvZW5naW5lcy9mbG93Y2hhcnQvaGFyZC1kaXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsZUFBZSxFQUNmLHNCQUFzQixFQUN0QixxQ0FBcUMsRUFDckMsc0NBQXNDLEVBQ3RDLDBCQUEwQixFQUMxQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ25CLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWdCO0lBQ3ZDLElBQUksQ0FBQyxLQUFpQixFQUFFLFNBQTBCLEVBQUUsT0FBZ0I7UUFDaEUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUNqQixJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQztlQUN0RSxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsYUFBYSxTQUFTLENBQUMsQ0FBQztZQUNyRSxTQUFTLENBQUMsS0FBSztZQUNmLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU07ZUFDekQsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU0s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IFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgZ2V0RWxsaXBzZVRhbmdlbnRTbG9wZSxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRFbGxpcHNlLFxuICAgIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLFxuICAgIGdldFZlY3RvckZyb21Qb2ludEFuZFNsb3BlLFxuICAgIGlzUG9pbnRJbkVsbGlwc2UsXG4gICAgc2V0U3Ryb2tlTGluZWNhcFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdEdlb21ldHJ5LCBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2hhcGVEZWZhdWx0U3BhY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQgfSBmcm9tICcuLi8uLi91dGlscy9zdHlsZS9zdHJva2UnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlRW5naW5lIH0gZnJvbSAnLi4vYmFzaWMtc2hhcGVzL3JlY3RhbmdsZSc7XG5cbmV4cG9ydCBjb25zdCBIYXJkRGlza0VuZ2luZTogU2hhcGVFbmdpbmUgPSB7XG4gICAgZHJhdyhib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcnMgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBycy5wYXRoKFxuICAgICAgICAgICAgYE0ke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gcmVjdGFuZ2xlLndpZHRoICogMC4xNX0gJHtyZWN0YW5nbGUueX0gIFxuICAgICAgICAgICAgQSR7cmVjdGFuZ2xlLndpZHRoICogMC4xNX0gJHtyZWN0YW5nbGUuaGVpZ2h0IC8gMn0sIDAsIDAsIDAsJHtyZWN0YW5nbGUueCArXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLndpZHRoIC1cbiAgICAgICAgICAgICAgICByZWN0YW5nbGUud2lkdGggKiAwLjE1fSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodH0gXG4gICAgICAgICAgICBBJHtyZWN0YW5nbGUud2lkdGggKiAwLjE1fSAke3JlY3RhbmdsZS5oZWlnaHQgLyAyfSwgMCwgMCwgMCwke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gcmVjdGFuZ2xlLndpZHRoICogMC4xNX0gJHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUueVxuICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIEgke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC4xNX1cbiAgICAgICAgICAgIEEke3JlY3RhbmdsZS53aWR0aCAqIDAuMTV9ICR7cmVjdGFuZ2xlLmhlaWdodCAvIDJ9LCAwLCAwLCAwLCAke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC4xNX0gJHtyZWN0YW5nbGUueSArXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodH1cbiAgICAgICAgICAgIEgke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gcmVjdGFuZ2xlLndpZHRoICogMC4xNX1gLFxuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfVxuICAgICAgICApO1xuICAgICAgICBzZXRTdHJva2VMaW5lY2FwKHNoYXBlLCAncm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgIH0sXG4gICAgaXNJbnNpZGVQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKTtcbiAgICAgICAgY29uc3QgaXNJblJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pc0hpdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5yZWN0YW5nbGUsXG4gICAgICAgICAgICAgICAgeDogcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiAwLjE1LFxuICAgICAgICAgICAgICAgIHdpZHRoOiByZWN0YW5nbGUud2lkdGggLSByZWN0YW5nbGUud2lkdGggKiAwLjNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByYW5nZVJlY3RhbmdsZVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGlzSW5MZWZ0RWxsaXBzZSA9IGlzUG9pbnRJbkVsbGlwc2UoXG4gICAgICAgICAgICBwb2ludCxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAqIDAuMTUsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdLFxuICAgICAgICAgICAgcmVjdGFuZ2xlLndpZHRoICogMC4xNSxcbiAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgLyAyXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaXNJblJpZ2h0RWxsaXBzZSA9IGlzUG9pbnRJbkVsbGlwc2UoXG4gICAgICAgICAgICBwb2ludCxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAtIHJlY3RhbmdsZS53aWR0aCAqIDAuMTUsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdLFxuICAgICAgICAgICAgcmVjdGFuZ2xlLndpZHRoICogMC4xNSxcbiAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgLyAyXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBpc0luUmVjdGFuZ2xlIHx8IGlzSW5MZWZ0RWxsaXBzZSB8fCBpc0luUmlnaHRFbGxpcHNlO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBuZWFyZXN0UG9pbnQgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludCwgUmVjdGFuZ2xlRW5naW5lLmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpKTtcbiAgICAgICAgaWYgKG5lYXJlc3RQb2ludFswXSA8IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC4xNSkge1xuICAgICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiAwLjE1LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXSBhcyBQb2ludDtcbiAgICAgICAgICAgIGNvbnN0IG5lYXJlc3RQb2ludCA9IGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZEVsbGlwc2UocG9pbnQsIGNlbnRlclBvaW50LCByZWN0YW5nbGUud2lkdGggKiAwLjE1LCByZWN0YW5nbGUuaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICBpZiAobmVhcmVzdFBvaW50WzBdID4gY2VudGVyUG9pbnRbMF0pIHtcbiAgICAgICAgICAgICAgICBuZWFyZXN0UG9pbnRbMF0gPSBjZW50ZXJQb2ludFswXSAqIDIgLSBuZWFyZXN0UG9pbnRbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmVhcmVzdFBvaW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWFyZXN0UG9pbnRbMF0gPiByZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAtIHJlY3RhbmdsZS53aWR0aCAqIDAuMTUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gcmVjdGFuZ2xlLndpZHRoICogMC4xNSwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0gYXMgUG9pbnQ7XG4gICAgICAgICAgICBjb25zdCBuZWFyZXN0UG9pbnQgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRFbGxpcHNlKHBvaW50LCBjZW50ZXJQb2ludCwgcmVjdGFuZ2xlLndpZHRoICogMC4xNSwgcmVjdGFuZ2xlLmhlaWdodCAvIDIpO1xuICAgICAgICAgICAgaWYgKG5lYXJlc3RQb2ludFswXSA8IGNlbnRlclBvaW50WzBdKSB7XG4gICAgICAgICAgICAgICAgbmVhcmVzdFBvaW50WzBdID0gY2VudGVyUG9pbnRbMF0gKiAyIC0gbmVhcmVzdFBvaW50WzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5lYXJlc3RQb2ludDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmVhcmVzdFBvaW50O1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG5cbiAgICBnZXRUYW5nZW50VmVjdG9yQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50T2ZSZWN0YW5nbGU6IFBvaW50T2ZSZWN0YW5nbGUpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGUsIHBvaW50T2ZSZWN0YW5nbGUpO1xuICAgICAgICBsZXQgY2VudGVyUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiAwLjE1LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgbGV0IGEgPSByZWN0YW5nbGUud2lkdGggKiAwLjE1O1xuICAgICAgICBsZXQgYiA9IHJlY3RhbmdsZS5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBpc0luUmlnaHRFbGxpcHNlID1cbiAgICAgICAgICAgIGNvbm5lY3Rpb25Qb2ludFswXSA+IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gcmVjdGFuZ2xlLndpZHRoICogMC4xNSAmJiBjb25uZWN0aW9uUG9pbnRbMV0gPiByZWN0YW5nbGUueTtcbiAgICAgICAgaWYgKGlzSW5SaWdodEVsbGlwc2UpIHtcbiAgICAgICAgICAgIGNlbnRlclBvaW50ID0gW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gcmVjdGFuZ2xlLndpZHRoICogMC4xNSwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pbnQgPSBbY29ubmVjdGlvblBvaW50WzBdIC0gY2VudGVyUG9pbnRbMF0sIC0oY29ubmVjdGlvblBvaW50WzFdIC0gY2VudGVyUG9pbnRbMV0pXTtcbiAgICAgICAgY29uc3Qgc2xvcGUgPSBnZXRFbGxpcHNlVGFuZ2VudFNsb3BlKHBvaW50WzBdLCBwb2ludFsxXSwgYSwgYikgYXMgYW55O1xuICAgICAgICBjb25zdCB2ZWN0b3IgPSBnZXRWZWN0b3JGcm9tUG9pbnRBbmRTbG9wZShwb2ludFswXSwgcG9pbnRbMV0sIHNsb3BlKTtcbiAgICAgICAgcmV0dXJuIHZlY3RvcjtcbiAgICB9LFxuXG4gICAgZ2V0VGV4dFJlY3RhbmdsZTogKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyEpO1xuICAgICAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBlbGVtZW50LnRleHRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudFJlY3RhbmdsZS53aWR0aCAtIGVsZW1lbnRSZWN0YW5nbGUud2lkdGggKiAwLjQ1IC0gU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCAqIDIgLSBzdHJva2VXaWR0aCAqIDI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGggPiAwID8gd2lkdGggOiAwLFxuICAgICAgICAgICAgeDogZWxlbWVudFJlY3RhbmdsZS54ICsgZWxlbWVudFJlY3RhbmdsZS53aWR0aCAqIDAuMTUgKyBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICsgc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICB5OiBlbGVtZW50UmVjdGFuZ2xlLnkgKyAoZWxlbWVudFJlY3RhbmdsZS5oZWlnaHQgLSBoZWlnaHQpIC8gMlxuICAgICAgICB9O1xuICAgIH1cbn07XG4iXX0=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, setStrokeLinecap } from '@plait/core';
|
|
2
|
+
import { ShapeDefaultSpace } from '../../constants';
|
|
3
|
+
import { getStrokeWidthByElement } from '../../utils/style/stroke';
|
|
4
|
+
import { RectangleEngine } from '../basic-shapes/rectangle';
|
|
5
|
+
import { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';
|
|
6
|
+
export const InternalStorageEngine = {
|
|
7
|
+
draw(board, rectangle, options) {
|
|
8
|
+
const rs = PlaitBoard.getRoughSVG(board);
|
|
9
|
+
const shape = rs.path(`M${rectangle.x} ${rectangle.y} h${rectangle.width} v${rectangle.height} h${-rectangle.width} v${-rectangle.height}
|
|
10
|
+
M${rectangle.x} ${rectangle.y + rectangle.height / 10} h${rectangle.width}
|
|
11
|
+
M${rectangle.x + rectangle.width / 10} ${rectangle.y} v${rectangle.height}
|
|
12
|
+
`, { ...options, fillStyle: 'solid' });
|
|
13
|
+
setStrokeLinecap(shape, 'round');
|
|
14
|
+
return shape;
|
|
15
|
+
},
|
|
16
|
+
isInsidePoint(rectangle, point) {
|
|
17
|
+
const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);
|
|
18
|
+
return RectangleClient.isHit(rectangle, rangeRectangle);
|
|
19
|
+
},
|
|
20
|
+
getCornerPoints(rectangle) {
|
|
21
|
+
return RectangleClient.getCornerPoints(rectangle);
|
|
22
|
+
},
|
|
23
|
+
getNearestPoint(rectangle, point) {
|
|
24
|
+
return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
|
|
25
|
+
},
|
|
26
|
+
getEdgeByConnectionPoint(rectangle, pointOfRectangle) {
|
|
27
|
+
const corners = RectangleEngine.getCornerPoints(rectangle);
|
|
28
|
+
const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
29
|
+
return getPolygonEdgeByConnectionPoint(corners, point);
|
|
30
|
+
},
|
|
31
|
+
getConnectorPoints(rectangle) {
|
|
32
|
+
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
33
|
+
},
|
|
34
|
+
getTextRectangle: (element) => {
|
|
35
|
+
const elementRectangle = RectangleClient.getRectangleByPoints(element.points);
|
|
36
|
+
const strokeWidth = getStrokeWidthByElement(element);
|
|
37
|
+
const height = element.textHeight;
|
|
38
|
+
const width = elementRectangle.width - elementRectangle.width * 0.1 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;
|
|
39
|
+
return {
|
|
40
|
+
height,
|
|
41
|
+
width: width > 0 ? width : 0,
|
|
42
|
+
x: elementRectangle.x + elementRectangle.width * 0.1 + ShapeDefaultSpace.rectangleAndText + strokeWidth,
|
|
43
|
+
y: elementRectangle.y + elementRectangle.height * 0.1 + (elementRectangle.height - elementRectangle.height * 0.1 - height) / 2
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL2VuZ2luZXMvZmxvd2NoYXJ0L2ludGVybmFsLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFHVixlQUFlLEVBQ2Ysc0NBQXNDLEVBQ3RDLGdCQUFnQixFQUNuQixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQWdCO0lBQzlDLElBQUksQ0FBQyxLQUFpQixFQUFFLFNBQTBCLEVBQUUsT0FBZ0I7UUFDaEUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUNqQixJQUFJLFNBQVMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU07ZUFDL0csU0FBUyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxLQUFLO2VBQ3RFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksU0FBUyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsTUFBTTthQUN4RSxFQUNELEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUNyQyxDQUFDO1FBQ0YsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxhQUFhLENBQUMsU0FBMEIsRUFBRSxLQUFZO1FBQ2xELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELGVBQWUsQ0FBQyxTQUEwQjtRQUN0QyxPQUFPLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELGVBQWUsQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDcEQsT0FBTyxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxTQUEwQixFQUFFLGdCQUFrQztRQUNuRixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RSxPQUFPLCtCQUErQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsU0FBMEI7UUFDekMsT0FBTyxlQUFlLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELGdCQUFnQixFQUFFLENBQUMsT0FBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFPLENBQUMsQ0FBQztRQUMvRSxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQy9ILE9BQU87WUFDSCxNQUFNO1lBQ04sS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVztZQUN2RyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ2pJLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQb2ludCxcbiAgICBQb2ludE9mUmVjdGFuZ2xlLFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICBzZXRTdHJva2VMaW5lY2FwXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0R2VvbWV0cnksIFNoYXBlRW5naW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTaGFwZURlZmF1bHRTcGFjZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0eWxlL3N0cm9rZSc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBSZWN0YW5nbGVFbmdpbmUgfSBmcm9tICcuLi9iYXNpYy1zaGFwZXMvcmVjdGFuZ2xlJztcbmltcG9ydCB7IGdldFBvbHlnb25FZGdlQnlDb25uZWN0aW9uUG9pbnQgfSBmcm9tICcuLi8uLi91dGlscy9wb2x5Z29uJztcblxuZXhwb3J0IGNvbnN0IEludGVybmFsU3RvcmFnZUVuZ2luZTogU2hhcGVFbmdpbmUgPSB7XG4gICAgZHJhdyhib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcnMgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBycy5wYXRoKFxuICAgICAgICAgICAgYE0ke3JlY3RhbmdsZS54fSAke3JlY3RhbmdsZS55fSBoJHtyZWN0YW5nbGUud2lkdGh9IHYke3JlY3RhbmdsZS5oZWlnaHR9IGgkey1yZWN0YW5nbGUud2lkdGh9IHYkey1yZWN0YW5nbGUuaGVpZ2h0fVxuICAgICAgICAgICAgTSR7cmVjdGFuZ2xlLnh9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMTB9IGgke3JlY3RhbmdsZS53aWR0aH1cbiAgICAgICAgICAgIE0ke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMTB9ICR7cmVjdGFuZ2xlLnl9IHYke3JlY3RhbmdsZS5oZWlnaHR9XG4gICAgICAgICAgICBgLFxuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfVxuICAgICAgICApO1xuICAgICAgICBzZXRTdHJva2VMaW5lY2FwKHNoYXBlLCAncm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgIH0sXG4gICAgaXNJbnNpZGVQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyZWN0YW5nbGUsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldENvcm5lclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBSZWN0YW5nbGVFbmdpbmUuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSkpO1xuICAgIH0sXG4gICAgZ2V0RWRnZUJ5Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludE9mUmVjdGFuZ2xlOiBQb2ludE9mUmVjdGFuZ2xlKTogW1BvaW50LCBQb2ludF0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgY29ybmVycyA9IFJlY3RhbmdsZUVuZ2luZS5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgcG9pbnRPZlJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBnZXRQb2x5Z29uRWRnZUJ5Q29ubmVjdGlvblBvaW50KGNvcm5lcnMsIHBvaW50KTtcbiAgICB9LFxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldFRleHRSZWN0YW5nbGU6IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0O1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnRSZWN0YW5nbGUud2lkdGggLSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoICogMC4xIC0gU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCAqIDIgLSBzdHJva2VXaWR0aCAqIDI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGggPiAwID8gd2lkdGggOiAwLFxuICAgICAgICAgICAgeDogZWxlbWVudFJlY3RhbmdsZS54ICsgZWxlbWVudFJlY3RhbmdsZS53aWR0aCAqIDAuMSArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKyBzdHJva2VXaWR0aCxcbiAgICAgICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIGVsZW1lbnRSZWN0YW5nbGUuaGVpZ2h0ICogMC4xICsgKGVsZW1lbnRSZWN0YW5nbGUuaGVpZ2h0IC0gZWxlbWVudFJlY3RhbmdsZS5oZWlnaHQgKiAwLjEgLSBoZWlnaHQpIC8gMlxuICAgICAgICB9O1xuICAgIH1cbn07XG4iXX0=
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { Direction, PlaitBoard, RectangleClient, catmullRomFitting, distanceBetweenPointAndPoint, getNearestPointBetweenPointAndSegments, setStrokeLinecap } from '@plait/core';
|
|
2
|
+
import { getDirectionByPointOfRectangle, getDirectionFactor, getUnitVectorByPointAndPoint } from '@plait/common';
|
|
3
|
+
import { getStrokeWidthByElement } from '../../utils';
|
|
4
|
+
import { ShapeDefaultSpace } from '../../constants';
|
|
5
|
+
import { pointsOnBezierCurves } from 'points-on-curve';
|
|
6
|
+
import { getCrossingPointBetweenPointAndPolygon } from '../../utils/polygon';
|
|
7
|
+
export const getMultiDocumentPoints = (rectangle) => {
|
|
8
|
+
const linePoints = [
|
|
9
|
+
[rectangle.x, rectangle.y + 10],
|
|
10
|
+
[rectangle.x + 5, rectangle.y + 10],
|
|
11
|
+
[rectangle.x + 5, rectangle.y + 5],
|
|
12
|
+
[rectangle.x + 10, rectangle.y + 5],
|
|
13
|
+
[rectangle.x + 10, rectangle.y],
|
|
14
|
+
[rectangle.x + rectangle.width, rectangle.y],
|
|
15
|
+
[rectangle.x + rectangle.width, rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3],
|
|
16
|
+
[rectangle.x + rectangle.width - 5, rectangle.y + rectangle.height - rectangle.height / 9 - 10 - 3 - 4],
|
|
17
|
+
[rectangle.x + rectangle.width - 5, rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3],
|
|
18
|
+
[rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3 - 4],
|
|
19
|
+
[rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9]
|
|
20
|
+
];
|
|
21
|
+
let curvePoints = catmullRomFitting([
|
|
22
|
+
[rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9],
|
|
23
|
+
[rectangle.x + rectangle.width - 10 - (rectangle.width - 10) / 4, rectangle.y + rectangle.height - (rectangle.height / 9) * 2],
|
|
24
|
+
[rectangle.x + (rectangle.width - 10) / 2, rectangle.y + rectangle.height - rectangle.height / 9],
|
|
25
|
+
[rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],
|
|
26
|
+
[rectangle.x, rectangle.y + rectangle.height - rectangle.height / 9]
|
|
27
|
+
]);
|
|
28
|
+
curvePoints = pointsOnBezierCurves(curvePoints);
|
|
29
|
+
return [...linePoints, ...curvePoints];
|
|
30
|
+
};
|
|
31
|
+
export const MultiDocumentEngine = {
|
|
32
|
+
draw(board, rectangle, options) {
|
|
33
|
+
const rs = PlaitBoard.getRoughSVG(board);
|
|
34
|
+
const shape = rs.path(`M${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9} V${rectangle.y + 10} H${rectangle.x +
|
|
35
|
+
5} V${rectangle.y + 5} H${rectangle.x + 10} V${rectangle.y} H${rectangle.x + rectangle.width} V${rectangle.y +
|
|
36
|
+
rectangle.height -
|
|
37
|
+
rectangle.height / 9 -
|
|
38
|
+
10 -
|
|
39
|
+
3} L${rectangle.x + rectangle.width - 5} ${rectangle.y +
|
|
40
|
+
rectangle.height -
|
|
41
|
+
rectangle.height / 9 -
|
|
42
|
+
10 -
|
|
43
|
+
3 -
|
|
44
|
+
4} V${rectangle.y + rectangle.height - rectangle.height / 9 - 5 - 3}
|
|
45
|
+
L${rectangle.x + rectangle.width - 10} ${rectangle.y +
|
|
46
|
+
rectangle.height -
|
|
47
|
+
rectangle.height / 9 -
|
|
48
|
+
5 -
|
|
49
|
+
3 -
|
|
50
|
+
4} V${rectangle.y + rectangle.height - rectangle.height / 9}
|
|
51
|
+
|
|
52
|
+
Q${rectangle.x + rectangle.width - 10 - (rectangle.width - 10) / 4} ${rectangle.y +
|
|
53
|
+
rectangle.height -
|
|
54
|
+
(rectangle.height / 9) * 3}, ${rectangle.x + (rectangle.width - 10) / 2} ${rectangle.y +
|
|
55
|
+
rectangle.height -
|
|
56
|
+
rectangle.height / 9} T${rectangle.x} ${rectangle.y + rectangle.height - rectangle.height / 9}
|
|
57
|
+
|
|
58
|
+
M${rectangle.x + 5} ${rectangle.y + 10} H${rectangle.x + rectangle.width - 10} V${rectangle.y +
|
|
59
|
+
rectangle.height -
|
|
60
|
+
rectangle.height / 9}
|
|
61
|
+
|
|
62
|
+
M${rectangle.x + 10} ${rectangle.y + 5} H${rectangle.x + rectangle.width - 5} V${rectangle.y +
|
|
63
|
+
rectangle.height -
|
|
64
|
+
rectangle.height / 9 -
|
|
65
|
+
10 -
|
|
66
|
+
3}
|
|
67
|
+
`, { ...options, fillStyle: 'solid' });
|
|
68
|
+
setStrokeLinecap(shape, 'round');
|
|
69
|
+
return shape;
|
|
70
|
+
},
|
|
71
|
+
isInsidePoint(rectangle, point) {
|
|
72
|
+
const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);
|
|
73
|
+
return RectangleClient.isHit(rectangle, rangeRectangle);
|
|
74
|
+
},
|
|
75
|
+
getCornerPoints(rectangle) {
|
|
76
|
+
return RectangleClient.getCornerPoints(rectangle);
|
|
77
|
+
},
|
|
78
|
+
getNearestPoint(rectangle, point) {
|
|
79
|
+
return getNearestPointBetweenPointAndSegments(point, getMultiDocumentPoints(rectangle), false);
|
|
80
|
+
},
|
|
81
|
+
getConnectorPoints(rectangle) {
|
|
82
|
+
let curvePoints = catmullRomFitting([
|
|
83
|
+
[rectangle.x, rectangle.y + rectangle.height - rectangle.height / 9],
|
|
84
|
+
[rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height],
|
|
85
|
+
[rectangle.x + (rectangle.width - 10) / 2, rectangle.y + rectangle.height - rectangle.height / 9],
|
|
86
|
+
[rectangle.x + ((rectangle.width - 10) / 4) * 3, rectangle.y + rectangle.height - (rectangle.height / 9) * 2],
|
|
87
|
+
[rectangle.x + rectangle.width - 10, rectangle.y + rectangle.height - rectangle.height / 9]
|
|
88
|
+
]);
|
|
89
|
+
curvePoints = pointsOnBezierCurves(curvePoints);
|
|
90
|
+
const crossingPoint = getNearestPointBetweenPointAndSegments([rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height], curvePoints);
|
|
91
|
+
return [
|
|
92
|
+
[rectangle.x + rectangle.width / 2, rectangle.y],
|
|
93
|
+
[rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],
|
|
94
|
+
[crossingPoint[0], crossingPoint[1]],
|
|
95
|
+
[rectangle.x, rectangle.y + rectangle.height / 2]
|
|
96
|
+
];
|
|
97
|
+
},
|
|
98
|
+
getNearestCrossingPoint(rectangle, point) {
|
|
99
|
+
const crossingPoints = getCrossingPointBetweenPointAndPolygon(getMultiDocumentPoints(rectangle), point);
|
|
100
|
+
let nearestPoint = crossingPoints[0];
|
|
101
|
+
let nearestDistance = distanceBetweenPointAndPoint(point[0], point[1], nearestPoint[0], nearestPoint[1]);
|
|
102
|
+
crossingPoints
|
|
103
|
+
.filter((v, index) => index > 0)
|
|
104
|
+
.forEach(crossingPoint => {
|
|
105
|
+
let distance = distanceBetweenPointAndPoint(point[0], point[1], crossingPoint[0], crossingPoint[1]);
|
|
106
|
+
if (distance < nearestDistance) {
|
|
107
|
+
nearestDistance = distance;
|
|
108
|
+
nearestPoint = crossingPoint;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
return nearestPoint;
|
|
112
|
+
},
|
|
113
|
+
getTangentVectorByConnectionPoint(rectangle, pointOfRectangle) {
|
|
114
|
+
const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
115
|
+
if (connectionPoint[0] > rectangle.x && connectionPoint[0] < rectangle.x + (rectangle.width - 10) / 4) {
|
|
116
|
+
return getUnitVectorByPointAndPoint([rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height], connectionPoint);
|
|
117
|
+
}
|
|
118
|
+
if (connectionPoint[0] > rectangle.x + (rectangle.width - 10) / 4 &&
|
|
119
|
+
connectionPoint[0] < rectangle.x + ((rectangle.width - 10) / 4) * 3) {
|
|
120
|
+
return getUnitVectorByPointAndPoint([rectangle.x + ((rectangle.width - 10) / 4) * 3, rectangle.y + rectangle.height - rectangle.height / 9], [rectangle.x + (rectangle.width - 10) / 4, rectangle.y + rectangle.height]);
|
|
121
|
+
}
|
|
122
|
+
if (connectionPoint[0] > rectangle.x + ((rectangle.width - 10) / 4) * 3 &&
|
|
123
|
+
connectionPoint[0] < rectangle.x + rectangle.width - 10) {
|
|
124
|
+
return getUnitVectorByPointAndPoint([rectangle.x + (rectangle.width - 10), rectangle.y + rectangle.height - rectangle.height / 9], connectionPoint);
|
|
125
|
+
}
|
|
126
|
+
const direction = getDirectionByPointOfRectangle(pointOfRectangle) || Direction.bottom;
|
|
127
|
+
const factor = getDirectionFactor(direction);
|
|
128
|
+
return [factor.x, factor.y];
|
|
129
|
+
},
|
|
130
|
+
getTextRectangle: (element) => {
|
|
131
|
+
const elementRectangle = RectangleClient.getRectangleByPoints(element.points);
|
|
132
|
+
const strokeWidth = getStrokeWidthByElement(element);
|
|
133
|
+
const height = element.textHeight;
|
|
134
|
+
const width = elementRectangle.width - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2 - elementRectangle.width * 0.06 * 2;
|
|
135
|
+
return {
|
|
136
|
+
height,
|
|
137
|
+
width: width > 0 ? width - 10 : 0,
|
|
138
|
+
x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth + elementRectangle.width * 0.06,
|
|
139
|
+
y: elementRectangle.y + (elementRectangle.height - height) / 2
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9lbmdpbmVzL2Zsb3djaGFydC9tdWx0aS1kb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFHVixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLDRCQUE0QixFQUM1QixzQ0FBc0MsRUFDdEMsZ0JBQWdCLEVBQ25CLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxTQUEwQixFQUFXLEVBQUU7SUFDMUUsTUFBTSxVQUFVLEdBQVk7UUFDeEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9CLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9GLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUM5RixDQUFDO0lBRUYsSUFBSSxXQUFXLEdBQUcsaUJBQWlCLENBQUM7UUFDaEMsQ0FBQyxT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RyxDQUFDLEVBQUUsQ0FBQztZQUNwRyxPQUFPLDRCQUE0QixDQUMvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFDMUUsZUFBZSxDQUNsQixDQUFDO1FBQ04sQ0FBQztRQUNELElBQ0ksZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFDN0QsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUNyRSxDQUFDO1lBQ0MsT0FBTyw0QkFBNEIsQ0FDL0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDdkcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQzdFLENBQUM7UUFDTixDQUFDO1FBRUQsSUFDSSxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ25FLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUN6RCxDQUFDO1lBQ0MsT0FBTyw0QkFBNEIsQ0FDL0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDN0YsZUFBZSxDQUNsQixDQUFDO1FBQ04sQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLDhCQUE4QixDQUFDLGdCQUFnQixDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN2RixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxTQUFVLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQixFQUFFLENBQUMsT0FBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFPLENBQUMsQ0FBQztRQUMvRSxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNwSSxPQUFPO1lBQ0gsTUFBTTtZQUNOLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJO1lBQ3hHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNqRSxDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIERpcmVjdGlvbixcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBvaW50LFxuICAgIFBvaW50T2ZSZWN0YW5nbGUsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGNhdG11bGxSb21GaXR0aW5nLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMsXG4gICAgc2V0U3Ryb2tlTGluZWNhcFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBnZXREaXJlY3Rpb25CeVBvaW50T2ZSZWN0YW5nbGUsIGdldERpcmVjdGlvbkZhY3RvciwgZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludCB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRHZW9tZXRyeSwgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU2hhcGVEZWZhdWx0U3BhY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgcG9pbnRzT25CZXppZXJDdXJ2ZXMgfSBmcm9tICdwb2ludHMtb24tY3VydmUnO1xuaW1wb3J0IHsgZ2V0Q3Jvc3NpbmdQb2ludEJldHdlZW5Qb2ludEFuZFBvbHlnb24gfSBmcm9tICcuLi8uLi91dGlscy9wb2x5Z29uJztcblxuZXhwb3J0IGNvbnN0IGdldE11bHRpRG9jdW1lbnRQb2ludHMgPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpOiBQb2ludFtdID0+IHtcbiAgICBjb25zdCBsaW5lUG9pbnRzOiBQb2ludFtdID0gW1xuICAgICAgICBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgMTBdLFxuICAgICAgICBbcmVjdGFuZ2xlLnggKyA1LCByZWN0YW5nbGUueSArIDEwXSxcbiAgICAgICAgW3JlY3RhbmdsZS54ICsgNSwgcmVjdGFuZ2xlLnkgKyA1XSxcbiAgICAgICAgW3JlY3RhbmdsZS54ICsgMTAsIHJlY3RhbmdsZS55ICsgNV0sXG4gICAgICAgIFtyZWN0YW5nbGUueCArIDEwLCByZWN0YW5nbGUueV0sXG4gICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnldLFxuICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgLyA5IC0gMTAgLSAzXSxcbiAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gNSwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAvIDkgLSAxMCAtIDMgLSA0XSxcbiAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gNSwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAvIDkgLSA1IC0gM10sXG4gICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAtIDEwLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSByZWN0YW5nbGUuaGVpZ2h0IC8gOSAtIDUgLSAzIC0gNF0sXG4gICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAtIDEwLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSByZWN0YW5nbGUuaGVpZ2h0IC8gOV1cbiAgICBdO1xuXG4gICAgbGV0IGN1cnZlUG9pbnRzID0gY2F0bXVsbFJvbUZpdHRpbmcoW1xuICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLSAxMCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAvIDldLFxuICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLSAxMCAtIChyZWN0YW5nbGUud2lkdGggLSAxMCkgLyA0LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSAocmVjdGFuZ2xlLmhlaWdodCAvIDkpICogMl0sXG4gICAgICAgIFtyZWN0YW5nbGUueCArIChyZWN0YW5nbGUud2lkdGggLSAxMCkgLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSByZWN0YW5nbGUuaGVpZ2h0IC8gOV0sXG4gICAgICAgIFtyZWN0YW5nbGUueCArIChyZWN0YW5nbGUud2lkdGggLSAxMCkgLyA0LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgLyA5XVxuICAgIF0pO1xuXG4gICAgY3VydmVQb2ludHMgPSBwb2ludHNPbkJlemllckN1cnZlcyhjdXJ2ZVBvaW50cykgYXMgUG9pbnRbXTtcbiAgICByZXR1cm4gWy4uLmxpbmVQb2ludHMsIC4uLmN1cnZlUG9pbnRzXTtcbn07XG5cbmV4cG9ydCBjb25zdCBNdWx0aURvY3VtZW50RW5naW5lOiBTaGFwZUVuZ2luZSA9IHtcbiAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBjb25zdCBycyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgICAgICBjb25zdCBzaGFwZSA9IHJzLnBhdGgoXG4gICAgICAgICAgICBgTSR7cmVjdGFuZ2xlLnh9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAvIDl9IFYke3JlY3RhbmdsZS55ICsgMTB9IEgke3JlY3RhbmdsZS54ICtcbiAgICAgICAgICAgICAgICA1fSBWJHtyZWN0YW5nbGUueSArIDV9IEgke3JlY3RhbmdsZS54ICsgMTB9IFYke3JlY3RhbmdsZS55fSBIJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aH0gViR7cmVjdGFuZ2xlLnkgK1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgLVxuICAgICAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgLyA5IC1cbiAgICAgICAgICAgICAgICAxMCAtXG4gICAgICAgICAgICAgICAgM30gTCR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLSA1fSAke3JlY3RhbmdsZS55ICtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUuaGVpZ2h0IC1cbiAgICAgICAgICAgICAgICByZWN0YW5nbGUuaGVpZ2h0IC8gOSAtXG4gICAgICAgICAgICAgICAgMTAgLVxuICAgICAgICAgICAgICAgIDMgLVxuICAgICAgICAgICAgICAgIDR9IFYke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgLyA5IC0gNSAtIDN9XG4gICAgICAgICAgICAgICAgIEwke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gMTB9ICR7cmVjdGFuZ2xlLnkgK1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgLVxuICAgICAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgLyA5IC1cbiAgICAgICAgICAgICAgICA1IC1cbiAgICAgICAgICAgICAgICAzIC1cbiAgICAgICAgICAgICAgICA0fSBWJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSByZWN0YW5nbGUuaGVpZ2h0IC8gOX1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICBRJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAtIDEwIC0gKHJlY3RhbmdsZS53aWR0aCAtIDEwKSAvIDR9ICR7cmVjdGFuZ2xlLnkgK1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgLVxuICAgICAgICAgICAgICAgIChyZWN0YW5nbGUuaGVpZ2h0IC8gOSkgKiAzfSwgJHtyZWN0YW5nbGUueCArIChyZWN0YW5nbGUud2lkdGggLSAxMCkgLyAyfSAke3JlY3RhbmdsZS55ICtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUuaGVpZ2h0IC1cbiAgICAgICAgICAgICAgICByZWN0YW5nbGUuaGVpZ2h0IC8gOX0gVCR7cmVjdGFuZ2xlLnh9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAvIDl9XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIE0ke3JlY3RhbmdsZS54ICsgNX0gJHtyZWN0YW5nbGUueSArIDEwfSBIJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAtIDEwfSBWJHtyZWN0YW5nbGUueSArXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCAtXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCAvIDl9IFxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBNJHtyZWN0YW5nbGUueCArIDEwfSAke3JlY3RhbmdsZS55ICsgNX0gSCR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLSA1fSBWJHtyZWN0YW5nbGUueSArXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCAtXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCAvIDkgLVxuICAgICAgICAgICAgICAgIDEwIC1cbiAgICAgICAgICAgICAgICAzfVxuICAgICAgICAgICAgYCxcbiAgICAgICAgICAgIHsgLi4ub3B0aW9ucywgZmlsbFN0eWxlOiAnc29saWQnIH1cbiAgICAgICAgKTtcbiAgICAgICAgc2V0U3Ryb2tlTGluZWNhcChzaGFwZSwgJ3JvdW5kJyk7XG4gICAgICAgIHJldHVybiBzaGFwZTtcbiAgICB9LFxuICAgIGlzSW5zaWRlUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCByYW5nZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhbcG9pbnQsIHBvaW50XSk7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNIaXQocmVjdGFuZ2xlLCByYW5nZVJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldE5lYXJlc3RQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIHJldHVybiBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludCwgZ2V0TXVsdGlEb2N1bWVudFBvaW50cyhyZWN0YW5nbGUpLCBmYWxzZSk7XG4gICAgfSxcblxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICBsZXQgY3VydmVQb2ludHMgPSBjYXRtdWxsUm9tRml0dGluZyhbXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgLyA5XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIChyZWN0YW5nbGUud2lkdGggLSAxMCkgLyA0LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgKHJlY3RhbmdsZS53aWR0aCAtIDEwKSAvIDIsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgLyA5XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArICgocmVjdGFuZ2xlLndpZHRoIC0gMTApIC8gNCkgKiAzLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSAocmVjdGFuZ2xlLmhlaWdodCAvIDkpICogMl0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLSAxMCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAvIDldXG4gICAgICAgIF0pO1xuICAgICAgICBjdXJ2ZVBvaW50cyA9IHBvaW50c09uQmV6aWVyQ3VydmVzKGN1cnZlUG9pbnRzKSBhcyBQb2ludFtdO1xuICAgICAgICBjb25zdCBjcm9zc2luZ1BvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMoXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICAgICAgY3VydmVQb2ludHNcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS55XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0sXG4gICAgICAgICAgICBbY3Jvc3NpbmdQb2ludFswXSwgY3Jvc3NpbmdQb2ludFsxXV0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdXG4gICAgICAgIF07XG4gICAgfSxcblxuICAgIGdldE5lYXJlc3RDcm9zc2luZ1BvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgY3Jvc3NpbmdQb2ludHMgPSBnZXRDcm9zc2luZ1BvaW50QmV0d2VlblBvaW50QW5kUG9seWdvbihnZXRNdWx0aURvY3VtZW50UG9pbnRzKHJlY3RhbmdsZSksIHBvaW50KTtcbiAgICAgICAgbGV0IG5lYXJlc3RQb2ludCA9IGNyb3NzaW5nUG9pbnRzWzBdO1xuICAgICAgICBsZXQgbmVhcmVzdERpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludFswXSwgcG9pbnRbMV0sIG5lYXJlc3RQb2ludFswXSwgbmVhcmVzdFBvaW50WzFdKTtcbiAgICAgICAgY3Jvc3NpbmdQb2ludHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHYsIGluZGV4KSA9PiBpbmRleCA+IDApXG4gICAgICAgICAgICAuZm9yRWFjaChjcm9zc2luZ1BvaW50ID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgY3Jvc3NpbmdQb2ludFswXSwgY3Jvc3NpbmdQb2ludFsxXSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgbmVhcmVzdERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG5lYXJlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICBuZWFyZXN0UG9pbnQgPSBjcm9zc2luZ1BvaW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZWFyZXN0UG9pbnQ7XG4gICAgfSxcblxuICAgIGdldFRhbmdlbnRWZWN0b3JCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnRPZlJlY3RhbmdsZTogUG9pbnRPZlJlY3RhbmdsZSkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgcG9pbnRPZlJlY3RhbmdsZSk7XG4gICAgICAgIGlmIChjb25uZWN0aW9uUG9pbnRbMF0gPiByZWN0YW5nbGUueCAmJiBjb25uZWN0aW9uUG9pbnRbMF0gPCByZWN0YW5nbGUueCArIChyZWN0YW5nbGUud2lkdGggLSAxMCkgLyA0KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChcbiAgICAgICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyAocmVjdGFuZ2xlLndpZHRoIC0gMTApIC8gNCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uUG9pbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29ubmVjdGlvblBvaW50WzBdID4gcmVjdGFuZ2xlLnggKyAocmVjdGFuZ2xlLndpZHRoIC0gMTApIC8gNCAmJlxuICAgICAgICAgICAgY29ubmVjdGlvblBvaW50WzBdIDwgcmVjdGFuZ2xlLnggKyAoKHJlY3RhbmdsZS53aWR0aCAtIDEwKSAvIDQpICogM1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50KFxuICAgICAgICAgICAgICAgIFtyZWN0YW5nbGUueCArICgocmVjdGFuZ2xlLndpZHRoIC0gMTApIC8gNCkgKiAzLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSByZWN0YW5nbGUuaGVpZ2h0IC8gOV0sXG4gICAgICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgKHJlY3RhbmdsZS53aWR0aCAtIDEwKSAvIDQsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25uZWN0aW9uUG9pbnRbMF0gPiByZWN0YW5nbGUueCArICgocmVjdGFuZ2xlLndpZHRoIC0gMTApIC8gNCkgKiAzICYmXG4gICAgICAgICAgICBjb25uZWN0aW9uUG9pbnRbMF0gPCByZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAtIDEwXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoXG4gICAgICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgKHJlY3RhbmdsZS53aWR0aCAtIDEwKSwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAvIDldLFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25Qb2ludFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVBvaW50T2ZSZWN0YW5nbGUocG9pbnRPZlJlY3RhbmdsZSkgfHwgRGlyZWN0aW9uLmJvdHRvbTtcbiAgICAgICAgY29uc3QgZmFjdG9yID0gZ2V0RGlyZWN0aW9uRmFjdG9yKGRpcmVjdGlvbiEpO1xuICAgICAgICByZXR1cm4gW2ZhY3Rvci54LCBmYWN0b3IueV07XG4gICAgfSxcblxuICAgIGdldFRleHRSZWN0YW5nbGU6IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0O1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnRSZWN0YW5nbGUud2lkdGggLSBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICogMiAtIHN0cm9rZVdpZHRoICogMiAtIGVsZW1lbnRSZWN0YW5nbGUud2lkdGggKiAwLjA2ICogMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCA+IDAgPyB3aWR0aCAtIDEwIDogMCxcbiAgICAgICAgICAgIHg6IGVsZW1lbnRSZWN0YW5nbGUueCArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKyBzdHJva2VXaWR0aCArIGVsZW1lbnRSZWN0YW5nbGUud2lkdGggKiAwLjA2LFxuICAgICAgICAgICAgeTogZWxlbWVudFJlY3RhbmdsZS55ICsgKGVsZW1lbnRSZWN0YW5nbGUuaGVpZ2h0IC0gaGVpZ2h0KSAvIDJcbiAgICAgICAgfTtcbiAgICB9XG59O1xuIl19
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, setStrokeLinecap } from '@plait/core';
|
|
2
|
+
import { ShapeDefaultSpace } from '../../constants';
|
|
3
|
+
import { getStrokeWidthByElement } from '../../utils/style/stroke';
|
|
4
|
+
import { RectangleEngine } from '../basic-shapes/rectangle';
|
|
5
|
+
import { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';
|
|
6
|
+
export const NoteCurlyLeftEngine = {
|
|
7
|
+
draw(board, rectangle, options) {
|
|
8
|
+
const rs = PlaitBoard.getRoughSVG(board);
|
|
9
|
+
const shape = rs.path(`M${rectangle.x + rectangle.width} ${rectangle.y}
|
|
10
|
+
C${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y},
|
|
11
|
+
${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2},
|
|
12
|
+
${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y + rectangle.height / 2}
|
|
13
|
+
C${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2},
|
|
14
|
+
${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y + rectangle.height},
|
|
15
|
+
${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height}`, { ...options, fillStyle: 'solid' });
|
|
16
|
+
setStrokeLinecap(shape, 'round');
|
|
17
|
+
return shape;
|
|
18
|
+
},
|
|
19
|
+
isInsidePoint(rectangle, point) {
|
|
20
|
+
const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);
|
|
21
|
+
return RectangleClient.isHit(rectangle, rangeRectangle);
|
|
22
|
+
},
|
|
23
|
+
getCornerPoints(rectangle) {
|
|
24
|
+
return RectangleClient.getCornerPoints(rectangle);
|
|
25
|
+
},
|
|
26
|
+
getNearestPoint(rectangle, point) {
|
|
27
|
+
return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
|
|
28
|
+
},
|
|
29
|
+
getEdgeByConnectionPoint(rectangle, pointOfRectangle) {
|
|
30
|
+
const corners = RectangleEngine.getCornerPoints(rectangle);
|
|
31
|
+
const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
32
|
+
return getPolygonEdgeByConnectionPoint(corners, point);
|
|
33
|
+
},
|
|
34
|
+
getConnectorPoints(rectangle) {
|
|
35
|
+
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
36
|
+
},
|
|
37
|
+
getTextRectangle: (element) => {
|
|
38
|
+
const elementRectangle = RectangleClient.getRectangleByPoints(element.points);
|
|
39
|
+
const strokeWidth = getStrokeWidthByElement(element);
|
|
40
|
+
const height = element.textHeight;
|
|
41
|
+
const width = elementRectangle.width - elementRectangle.width * 0.09 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;
|
|
42
|
+
return {
|
|
43
|
+
height,
|
|
44
|
+
width: width > 0 ? width : 0,
|
|
45
|
+
x: elementRectangle.x + ShapeDefaultSpace.rectangleAndText + strokeWidth,
|
|
46
|
+
y: elementRectangle.y + (elementRectangle.height - height) / 2
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZS1jdXJseS1sZWZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvZW5naW5lcy9mbG93Y2hhcnQvbm90ZS1jdXJseS1sZWZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsZUFBZSxFQUNmLHNDQUFzQyxFQUN0QyxnQkFBZ0IsRUFDbkIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFnQjtJQUM1QyxJQUFJLENBQUMsS0FBaUIsRUFBRSxTQUEwQixFQUFFLE9BQWdCO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FDakIsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUM7ZUFDN0MsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDO2NBQ3RFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztjQUNuRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FB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aW50LFxuICAgIFBvaW50T2ZSZWN0YW5nbGUsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLFxuICAgIHNldFN0cm9rZUxpbmVjYXBcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRHZW9tZXRyeSwgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNoYXBlRGVmYXVsdFNwYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3R5bGUvc3Ryb2tlJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IFJlY3RhbmdsZUVuZ2luZSB9IGZyb20gJy4uL2Jhc2ljLXNoYXBlcy9yZWN0YW5nbGUnO1xuaW1wb3J0IHsgZ2V0UG9seWdvbkVkZ2VCeUNvbm5lY3Rpb25Qb2ludCB9IGZyb20gJy4uLy4uL3V0aWxzL3BvbHlnb24nO1xuXG5leHBvcnQgY29uc3QgTm90ZUN1cmx5TGVmdEVuZ2luZTogU2hhcGVFbmdpbmUgPSB7XG4gICAgZHJhdyhib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcnMgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBycy5wYXRoKFxuICAgICAgICAgICAgYE0ke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRofSAke3JlY3RhbmdsZS55fSBcbiAgICAgICAgICAgIEMke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gcmVjdGFuZ2xlLndpZHRoICogMC4wOX0gJHtyZWN0YW5nbGUueX0sIFxuICAgICAgICAgICAgJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aH0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyfSwgXG4gICAgICAgICAgICAke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gcmVjdGFuZ2xlLndpZHRoICogMC4wOX0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyfVxuICAgICAgICAgICAgQyR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGh9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMn0sIFxuICAgICAgICAgICAgJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAtIHJlY3RhbmdsZS53aWR0aCAqIDAuMDl9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0fSwgXG4gICAgICAgICAgICAke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRofSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodH1gLFxuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfVxuICAgICAgICApO1xuICAgICAgICBzZXRTdHJva2VMaW5lY2FwKHNoYXBlLCAncm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgIH0sXG4gICAgaXNJbnNpZGVQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyZWN0YW5nbGUsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldENvcm5lclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBSZWN0YW5nbGVFbmdpbmUuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSkpO1xuICAgIH0sXG4gICAgZ2V0RWRnZUJ5Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludE9mUmVjdGFuZ2xlOiBQb2ludE9mUmVjdGFuZ2xlKTogW1BvaW50LCBQb2ludF0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgY29ybmVycyA9IFJlY3RhbmdsZUVuZ2luZS5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgcG9pbnRPZlJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBnZXRQb2x5Z29uRWRnZUJ5Q29ubmVjdGlvblBvaW50KGNvcm5lcnMsIHBvaW50KTtcbiAgICB9LFxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldFRleHRSZWN0YW5nbGU6IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0O1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnRSZWN0YW5nbGUud2lkdGggLSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoICogMC4wOSAtIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKiAyIC0gc3Ryb2tlV2lkdGggKiAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoID4gMCA/IHdpZHRoIDogMCxcbiAgICAgICAgICAgIHg6IGVsZW1lbnRSZWN0YW5nbGUueCArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKyBzdHJva2VXaWR0aCxcbiAgICAgICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIChlbGVtZW50UmVjdGFuZ2xlLmhlaWdodCAtIGhlaWdodCkgLyAyXG4gICAgICAgIH07XG4gICAgfVxufTtcbiJdfQ==
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, setStrokeLinecap } from '@plait/core';
|
|
2
|
+
import { ShapeDefaultSpace } from '../../constants';
|
|
3
|
+
import { getStrokeWidthByElement } from '../../utils/style/stroke';
|
|
4
|
+
import { RectangleEngine } from '../basic-shapes/rectangle';
|
|
5
|
+
import { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';
|
|
6
|
+
export const NoteCurlyRightEngine = {
|
|
7
|
+
draw(board, rectangle, options) {
|
|
8
|
+
const rs = PlaitBoard.getRoughSVG(board);
|
|
9
|
+
const shape = rs.path(`M${rectangle.x} ${rectangle.y}
|
|
10
|
+
C${rectangle.x + rectangle.width * 0.09} ${rectangle.y},
|
|
11
|
+
${rectangle.x} ${rectangle.y + rectangle.height / 2},
|
|
12
|
+
${rectangle.x + rectangle.width * 0.09} ${rectangle.y + rectangle.height / 2}
|
|
13
|
+
C${rectangle.x} ${rectangle.y + rectangle.height / 2},
|
|
14
|
+
${rectangle.x + rectangle.width * 0.09} ${rectangle.y + rectangle.height},
|
|
15
|
+
${rectangle.x} ${rectangle.y + rectangle.height}`, { ...options, fillStyle: 'solid' });
|
|
16
|
+
setStrokeLinecap(shape, 'round');
|
|
17
|
+
return shape;
|
|
18
|
+
},
|
|
19
|
+
isInsidePoint(rectangle, point) {
|
|
20
|
+
const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);
|
|
21
|
+
return RectangleClient.isHit(rectangle, rangeRectangle);
|
|
22
|
+
},
|
|
23
|
+
getCornerPoints(rectangle) {
|
|
24
|
+
return RectangleClient.getCornerPoints(rectangle);
|
|
25
|
+
},
|
|
26
|
+
getNearestPoint(rectangle, point) {
|
|
27
|
+
return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
|
|
28
|
+
},
|
|
29
|
+
getEdgeByConnectionPoint(rectangle, pointOfRectangle) {
|
|
30
|
+
const corners = RectangleEngine.getCornerPoints(rectangle);
|
|
31
|
+
const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
32
|
+
return getPolygonEdgeByConnectionPoint(corners, point);
|
|
33
|
+
},
|
|
34
|
+
getConnectorPoints(rectangle) {
|
|
35
|
+
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
36
|
+
},
|
|
37
|
+
getTextRectangle: (element) => {
|
|
38
|
+
const elementRectangle = RectangleClient.getRectangleByPoints(element.points);
|
|
39
|
+
const strokeWidth = getStrokeWidthByElement(element);
|
|
40
|
+
const height = element.textHeight;
|
|
41
|
+
const width = elementRectangle.width - elementRectangle.width * 0.09 - ShapeDefaultSpace.rectangleAndText * 2 - strokeWidth * 2;
|
|
42
|
+
return {
|
|
43
|
+
height,
|
|
44
|
+
width: width > 0 ? width : 0,
|
|
45
|
+
x: elementRectangle.x + elementRectangle.width * 0.09 + ShapeDefaultSpace.rectangleAndText + strokeWidth,
|
|
46
|
+
y: elementRectangle.y + (elementRectangle.height - height) / 2
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZS1jdXJseS1yaWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL2VuZ2luZXMvZmxvd2NoYXJ0L25vdGUtY3VybHktcmlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFHVixlQUFlLEVBQ2Ysc0NBQXNDLEVBQ3RDLGdCQUFnQixFQUNuQixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWdCO0lBQzdDLElBQUksQ0FBQyxLQUFpQixFQUFFLFNBQTBCLEVBQUUsT0FBZ0I7UUFDaEUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUNqQixJQUFJLFNBQVMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUM7ZUFDM0IsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQztjQUNwRCxTQUFTLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDO2NBQ2pELFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7ZUFDekUsU0FBUyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztjQUNsRCxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU07Y0FDdEUsU0FBUyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFDakQsRUFBRSxHQUFHLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQ3JDLENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakMsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELGFBQWEsQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDbEQsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsZUFBZSxDQUFDLFNBQTBCO1FBQ3RDLE9BQU8sZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsZUFBZSxDQUFDLFNBQTBCLEVBQUUsS0FBWTtRQUNwRCxPQUFPLHNDQUFzQyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUNELHdCQUF3QixDQUFDLFNBQTBCLEVBQUUsZ0JBQWtDO1FBQ25GLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sK0JBQStCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxTQUEwQjtRQUN6QyxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFzQixFQUFFLEVBQUU7UUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU8sQ0FBQyxDQUFDO1FBQy9FLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEksT0FBTztZQUNILE1BQU07WUFDTixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXO1lBQ3hHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNqRSxDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMsXG4gICAgc2V0U3Ryb2tlTGluZWNhcFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdEdlb21ldHJ5LCBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2hhcGVEZWZhdWx0U3BhY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQgfSBmcm9tICcuLi8uLi91dGlscy9zdHlsZS9zdHJva2UnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlRW5naW5lIH0gZnJvbSAnLi4vYmFzaWMtc2hhcGVzL3JlY3RhbmdsZSc7XG5pbXBvcnQgeyBnZXRQb2x5Z29uRWRnZUJ5Q29ubmVjdGlvblBvaW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvcG9seWdvbic7XG5cbmV4cG9ydCBjb25zdCBOb3RlQ3VybHlSaWdodEVuZ2luZTogU2hhcGVFbmdpbmUgPSB7XG4gICAgZHJhdyhib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcnMgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSBycy5wYXRoKFxuICAgICAgICAgICAgYE0ke3JlY3RhbmdsZS54fSAke3JlY3RhbmdsZS55fSBcbiAgICAgICAgICAgIEMke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC4wOX0gJHtyZWN0YW5nbGUueX0sIFxuICAgICAgICAgICAgJHtyZWN0YW5nbGUueH0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyfSwgXG4gICAgICAgICAgICAke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC4wOX0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyfVxuICAgICAgICAgICAgQyR7cmVjdGFuZ2xlLnh9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMn0sIFxuICAgICAgICAgICAgJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAqIDAuMDl9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0fSwgXG4gICAgICAgICAgICAke3JlY3RhbmdsZS54fSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodH1gLFxuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfVxuICAgICAgICApO1xuICAgICAgICBzZXRTdHJva2VMaW5lY2FwKHNoYXBlLCAncm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgIH0sXG4gICAgaXNJbnNpZGVQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyZWN0YW5nbGUsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldENvcm5lclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBSZWN0YW5nbGVFbmdpbmUuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSkpO1xuICAgIH0sXG4gICAgZ2V0RWRnZUJ5Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludE9mUmVjdGFuZ2xlOiBQb2ludE9mUmVjdGFuZ2xlKTogW1BvaW50LCBQb2ludF0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgY29ybmVycyA9IFJlY3RhbmdsZUVuZ2luZS5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgcG9pbnRPZlJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBnZXRQb2x5Z29uRWRnZUJ5Q29ubmVjdGlvblBvaW50KGNvcm5lcnMsIHBvaW50KTtcbiAgICB9LFxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldFRleHRSZWN0YW5nbGU6IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0O1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnRSZWN0YW5nbGUud2lkdGggLSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoICogMC4wOSAtIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKiAyIC0gc3Ryb2tlV2lkdGggKiAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoID4gMCA/IHdpZHRoIDogMCxcbiAgICAgICAgICAgIHg6IGVsZW1lbnRSZWN0YW5nbGUueCArIGVsZW1lbnRSZWN0YW5nbGUud2lkdGggKiAwLjA5ICsgU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCArIHN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgeTogZWxlbWVudFJlY3RhbmdsZS55ICsgKGVsZW1lbnRSZWN0YW5nbGUuaGVpZ2h0IC0gaGVpZ2h0KSAvIDJcbiAgICAgICAgfTtcbiAgICB9XG59O1xuIl19
|