@plait/draw 0.1.0-next.12 → 0.1.0-next.13
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/image.d.ts +1 -0
- package/constants/index.d.ts +1 -0
- package/constants/pointer.d.ts +4 -14
- package/engines/comment.d.ts +4 -0
- package/engines/cross.d.ts +4 -0
- package/{utils/engine → engines}/diamond.d.ts +1 -1
- package/{utils/engine → engines}/ellipse.d.ts +1 -1
- package/engines/hexagon.d.ts +4 -0
- package/{utils/engine → engines}/index.d.ts +1 -1
- package/{utils/engine → engines}/left-arrow.d.ts +1 -1
- package/engines/octagon.d.ts +4 -0
- package/{utils/engine → engines}/parallelogram.d.ts +1 -1
- package/engines/pentagon-arrow.d.ts +4 -0
- package/engines/pentagon.d.ts +4 -0
- package/engines/process-arrow.d.ts +4 -0
- package/{utils/engine → engines}/rectangle.d.ts +1 -1
- package/{utils/engine → engines}/right-arrow.d.ts +1 -1
- package/engines/round-comment.d.ts +4 -0
- package/{utils/engine → engines}/round-rectangle.d.ts +1 -1
- package/engines/star.d.ts +4 -0
- package/{utils/engine → engines}/trapezoid.d.ts +1 -1
- package/{utils/engine → engines}/triangle.d.ts +1 -1
- package/engines/two-way-arrow.d.ts +4 -0
- package/esm2022/constants/geometry.mjs +3 -3
- package/esm2022/constants/image.mjs +2 -0
- package/esm2022/constants/index.mjs +2 -1
- package/esm2022/constants/pointer.mjs +8 -27
- package/esm2022/engines/comment.mjs +57 -0
- package/esm2022/engines/cross.mjs +46 -0
- package/esm2022/engines/diamond.mjs +30 -0
- package/esm2022/engines/ellipse.mjs +92 -0
- package/esm2022/engines/hexagon.mjs +40 -0
- package/esm2022/engines/index.mjs +46 -0
- package/esm2022/engines/left-arrow.mjs +45 -0
- package/esm2022/engines/octagon.mjs +42 -0
- package/esm2022/engines/parallelogram.mjs +39 -0
- package/esm2022/engines/pentagon-arrow.mjs +39 -0
- package/esm2022/engines/pentagon.mjs +39 -0
- package/esm2022/engines/process-arrow.mjs +41 -0
- package/esm2022/engines/rectangle.mjs +26 -0
- package/esm2022/engines/right-arrow.mjs +45 -0
- package/esm2022/engines/round-comment.mjs +81 -0
- package/esm2022/engines/round-rectangle.mjs +59 -0
- package/esm2022/engines/star.mjs +45 -0
- package/esm2022/engines/trapezoid.mjs +40 -0
- package/esm2022/engines/triangle.mjs +40 -0
- package/esm2022/engines/two-way-arrow.mjs +48 -0
- package/esm2022/generators/geometry-shape.generator.mjs +7 -2
- package/esm2022/generators/line-active.generator.mjs +49 -15
- package/esm2022/generators/line.generator.mjs +2 -11
- package/esm2022/geometry.component.mjs +13 -7
- package/esm2022/image.component.mjs +70 -0
- package/esm2022/interfaces/geometry.mjs +11 -1
- package/esm2022/interfaces/image.mjs +2 -0
- package/esm2022/interfaces/index.mjs +8 -2
- package/esm2022/interfaces/line.mjs +17 -2
- package/esm2022/line.component.mjs +4 -3
- package/esm2022/plugins/with-draw-fragment.mjs +20 -2
- package/esm2022/plugins/with-draw.mjs +25 -4
- package/esm2022/plugins/with-geometry-create.mjs +15 -12
- package/esm2022/plugins/with-geometry-resize.mjs +17 -11
- package/esm2022/plugins/with-line-bound-reaction.mjs +10 -5
- package/esm2022/plugins/with-line-create.mjs +7 -5
- package/esm2022/plugins/with-line-resize.mjs +12 -4
- package/esm2022/transforms/geometry-text.mjs +1 -1
- package/esm2022/transforms/image.mjs +23 -0
- package/esm2022/transforms/index.mjs +4 -2
- package/esm2022/utils/clipboard.mjs +3 -3
- package/esm2022/utils/geometry.mjs +8 -5
- package/esm2022/utils/index.mjs +1 -1
- package/esm2022/utils/line-arrow.mjs +43 -18
- package/esm2022/utils/line.mjs +163 -49
- package/esm2022/utils/position/geometry.mjs +5 -4
- package/esm2022/utils/position/line.mjs +32 -21
- package/esm2022/utils/selected.mjs +5 -1
- package/esm2022/utils/shape.mjs +8 -0
- package/fesm2022/plait-draw.mjs +1075 -258
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/generators/line-active.generator.d.ts +2 -0
- package/generators/line.generator.d.ts +1 -1
- package/geometry.component.d.ts +1 -1
- package/image.component.d.ts +20 -0
- package/interfaces/geometry.d.ts +12 -1
- package/interfaces/image.d.ts +7 -0
- package/interfaces/index.d.ts +5 -1
- package/interfaces/line.d.ts +11 -4
- package/line.component.d.ts +1 -1
- package/package.json +1 -1
- package/plugins/with-geometry-create.d.ts +1 -1
- package/transforms/image.d.ts +3 -0
- package/transforms/index.d.ts +1 -0
- package/utils/line.d.ts +8 -4
- package/utils/position/geometry.d.ts +2 -1
- package/utils/position/line.d.ts +7 -3
- package/utils/selected.d.ts +2 -0
- package/utils/shape.d.ts +2 -0
- package/esm2022/utils/engine/diamond.mjs +0 -30
- package/esm2022/utils/engine/ellipse.mjs +0 -92
- package/esm2022/utils/engine/index.mjs +0 -26
- package/esm2022/utils/engine/left-arrow.mjs +0 -45
- package/esm2022/utils/engine/parallelogram.mjs +0 -39
- package/esm2022/utils/engine/rectangle.mjs +0 -26
- package/esm2022/utils/engine/right-arrow.mjs +0 -45
- package/esm2022/utils/engine/round-rectangle.mjs +0 -59
- package/esm2022/utils/engine/trapezoid.mjs +0 -40
- package/esm2022/utils/engine/triangle.mjs +0 -40
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PlaitBoard, Point } from '@plait/core';
|
|
1
2
|
import { PlaitLine } from '../interfaces';
|
|
2
3
|
import { Generator } from '@plait/common';
|
|
3
4
|
export interface ActiveData {
|
|
@@ -8,3 +9,4 @@ export declare class LineActiveGenerator extends Generator<PlaitLine, ActiveData
|
|
|
8
9
|
canDraw(element: PlaitLine, data: ActiveData): boolean;
|
|
9
10
|
baseDraw(element: PlaitLine, data: ActiveData): SVGGElement;
|
|
10
11
|
}
|
|
12
|
+
export declare function getMiddlePoints(board: PlaitBoard, element: PlaitLine): Point[];
|
|
@@ -4,5 +4,5 @@ export interface ShapeData {
|
|
|
4
4
|
}
|
|
5
5
|
export declare class LineShapeGenerator extends Generator<PlaitLine, ShapeData> {
|
|
6
6
|
canDraw(element: PlaitLine, data: ShapeData): boolean;
|
|
7
|
-
baseDraw(element: PlaitLine, data: ShapeData): SVGGElement
|
|
7
|
+
baseDraw(element: PlaitLine, data: ShapeData): SVGGElement;
|
|
8
8
|
}
|
package/geometry.component.d.ts
CHANGED
|
@@ -23,5 +23,5 @@ export declare class GeometryComponent extends CommonPluginElement<PlaitGeometry
|
|
|
23
23
|
initializeTextManage(): void;
|
|
24
24
|
ngOnDestroy(): void;
|
|
25
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<GeometryComponent, never>;
|
|
26
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GeometryComponent, "plait-draw-geometry", never, {}, {}, never, never,
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GeometryComponent, "plait-draw-geometry", never, {}, {}, never, never, true, never>;
|
|
27
27
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ChangeDetectorRef, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { CommonPluginElement, ImageGenerator } from '@plait/common';
|
|
5
|
+
import { PlaitImage } from './interfaces/image';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class ImageComponent extends CommonPluginElement<PlaitImage, PlaitBoard> implements OnInit, OnDestroy, OnContextChanged<PlaitImage, PlaitBoard> {
|
|
8
|
+
private viewContainerRef;
|
|
9
|
+
protected cdr: ChangeDetectorRef;
|
|
10
|
+
destroy$: Subject<void>;
|
|
11
|
+
get activeGenerator(): import("@plait/common").ActiveGenerator<import("@plait/core").PlaitElement>;
|
|
12
|
+
imageGenerator: ImageGenerator<PlaitImage>;
|
|
13
|
+
constructor(viewContainerRef: ViewContainerRef, cdr: ChangeDetectorRef);
|
|
14
|
+
initializeGenerator(): void;
|
|
15
|
+
ngOnInit(): void;
|
|
16
|
+
onContextChanged(value: PlaitPluginElementContext<PlaitImage, PlaitBoard>, previous: PlaitPluginElementContext<PlaitImage, PlaitBoard>): void;
|
|
17
|
+
ngOnDestroy(): void;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ImageComponent, never>;
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ImageComponent, "plait-draw-geometry", never, {}, {}, never, never, true, never>;
|
|
20
|
+
}
|
package/interfaces/geometry.d.ts
CHANGED
|
@@ -12,7 +12,17 @@ export declare enum GeometryShape {
|
|
|
12
12
|
triangle = "triangle",
|
|
13
13
|
leftArrow = "leftArrow",
|
|
14
14
|
trapezoid = "trapezoid",
|
|
15
|
-
rightArrow = "rightArrow"
|
|
15
|
+
rightArrow = "rightArrow",
|
|
16
|
+
cross = "cross",
|
|
17
|
+
star = "star",
|
|
18
|
+
pentagon = "pentagon",
|
|
19
|
+
hexagon = "hexagon",
|
|
20
|
+
octagon = "octagon",
|
|
21
|
+
pentagonArrow = "pentagonArrow",
|
|
22
|
+
processArrow = "processArrow",
|
|
23
|
+
twoWayArrow = "twoWayArrow",
|
|
24
|
+
comment = "comment",
|
|
25
|
+
roundComment = "roundComment"
|
|
16
26
|
}
|
|
17
27
|
export interface PlaitGeometry extends PlaitElement {
|
|
18
28
|
points: [Point, Point];
|
|
@@ -48,4 +58,5 @@ export interface ShapeEngine {
|
|
|
48
58
|
getEdgeByConnectionPoint?: (rectangle: RectangleClient, point: PointOfRectangle) => [Point, Point] | null;
|
|
49
59
|
getTangentVectorByConnectionPoint?: (rectangle: RectangleClient, point: PointOfRectangle) => Vector | null;
|
|
50
60
|
draw: (board: PlaitBoard, rectangle: RectangleClient, options: Options) => SVGGElement;
|
|
61
|
+
getTextRectangle?: (element: PlaitGeometry) => RectangleClient;
|
|
51
62
|
}
|
package/interfaces/index.d.ts
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { PlaitGeometry } from './geometry';
|
|
2
|
+
import { PlaitImage } from './image';
|
|
2
3
|
import { PlaitLine } from './line';
|
|
3
4
|
import { PlaitText } from './text';
|
|
4
5
|
export * from './line';
|
|
5
6
|
export * from './geometry';
|
|
6
7
|
export * from './text';
|
|
7
8
|
export * from './element';
|
|
8
|
-
export type PlaitDrawElement = PlaitGeometry | PlaitLine;
|
|
9
|
+
export type PlaitDrawElement = PlaitGeometry | PlaitLine | PlaitImage;
|
|
10
|
+
export type PlaitShape = PlaitGeometry | PlaitImage;
|
|
9
11
|
export declare const PlaitDrawElement: {
|
|
10
12
|
isGeometry: (value: any) => value is PlaitGeometry;
|
|
11
13
|
isLine: (value: any) => value is PlaitLine;
|
|
12
14
|
isText: (value: any) => value is PlaitText;
|
|
15
|
+
isImage: (value: any) => value is PlaitImage;
|
|
13
16
|
isDrawElement: (value: any) => value is PlaitDrawElement;
|
|
17
|
+
isShape: (value: any) => boolean;
|
|
14
18
|
};
|
package/interfaces/line.d.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import { Direction, PlaitElement, Point, PointOfRectangle } from '@plait/core';
|
|
1
|
+
import { Direction, PlaitBoard, PlaitElement, Point, PointOfRectangle, Vector } from '@plait/core';
|
|
2
2
|
import { Element } from 'slate';
|
|
3
3
|
import { PlaitGeometry } from './geometry';
|
|
4
4
|
import { StrokeStyle } from './element';
|
|
5
|
+
import { PlaitImage } from '../interfaces/image';
|
|
5
6
|
export declare enum LineMarkerType {
|
|
6
7
|
arrow = "arrow",
|
|
7
8
|
none = "none",
|
|
8
9
|
openTriangle = "open-triangle",
|
|
9
10
|
solidTriangle = "solid-triangle",
|
|
10
|
-
sharpArrow = "sharp-arrow"
|
|
11
|
+
sharpArrow = "sharp-arrow",
|
|
12
|
+
oneSideUp = "one-side-up",
|
|
13
|
+
oneSideDown = "one-side-down",
|
|
14
|
+
hollowTriangle = "hollow-triangle",
|
|
15
|
+
singleSlash = "single-slash"
|
|
11
16
|
}
|
|
12
17
|
export declare enum LineShape {
|
|
13
18
|
straight = "straight",
|
|
@@ -33,6 +38,7 @@ export interface LineHandleRef {
|
|
|
33
38
|
key: LineHandleKey;
|
|
34
39
|
direction: Direction;
|
|
35
40
|
point: PointOfRectangle;
|
|
41
|
+
vector: Vector;
|
|
36
42
|
boundElement?: PlaitGeometry;
|
|
37
43
|
}
|
|
38
44
|
export interface PlaitLine extends PlaitElement {
|
|
@@ -61,6 +67,7 @@ export declare const PlaitLine: {
|
|
|
61
67
|
isSourceMarkOrTargetMark(line: PlaitLine, markType: LineMarkerType, handleKey: LineHandleKey): boolean;
|
|
62
68
|
isSourceMark(line: PlaitLine, markType: LineMarkerType): boolean;
|
|
63
69
|
isTargetMark(line: PlaitLine, markType: LineMarkerType): boolean;
|
|
64
|
-
isBoundElementOfSource(line: PlaitLine, element: PlaitGeometry): boolean;
|
|
65
|
-
isBoundElementOfTarget(line: PlaitLine, element: PlaitGeometry): boolean;
|
|
70
|
+
isBoundElementOfSource(line: PlaitLine, element: PlaitGeometry | PlaitImage): boolean;
|
|
71
|
+
isBoundElementOfTarget(line: PlaitLine, element: PlaitGeometry | PlaitImage): boolean;
|
|
72
|
+
getPoints(board: PlaitBoard, line: PlaitLine): Point[];
|
|
66
73
|
};
|
package/line.component.d.ts
CHANGED
|
@@ -32,6 +32,6 @@ export declare class LineComponent extends PlaitPluginElementComponent<PlaitLine
|
|
|
32
32
|
updateTextRectangle(): void;
|
|
33
33
|
ngOnDestroy(): void;
|
|
34
34
|
static ɵfac: i0.ɵɵFactoryDeclaration<LineComponent, never>;
|
|
35
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<LineComponent, "plait-draw-line", never, {}, {}, never, never,
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<LineComponent, "plait-draw-line", never, {}, {}, never, never, true, never>;
|
|
36
36
|
}
|
|
37
37
|
export {};
|
package/package.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { PlaitBoard } from '@plait/core';
|
|
2
2
|
export declare const withGeometryCreateByDrag: (board: PlaitBoard) => PlaitBoard;
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const withGeometryCreateByDrawing: (board: PlaitBoard) => PlaitBoard;
|
package/transforms/index.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ export declare const DrawTransforms: {
|
|
|
8
8
|
setLineTexts: (board: import("@plait/core").PlaitBoard, element: import("@plait/draw").PlaitLine, texts: import("@plait/draw").LineText[]) => void;
|
|
9
9
|
removeLineText: (board: import("@plait/core").PlaitBoard, element: import("@plait/draw").PlaitLine, index: number) => void;
|
|
10
10
|
setLineMark: (board: import("@plait/core").PlaitBoard, element: import("@plait/draw").PlaitLine, handleKey: import("@plait/draw").LineHandleKey, marker: import("@plait/draw").LineMarkerType) => void;
|
|
11
|
+
insertImage: (board: import("@plait/core").PlaitBoard, imageItem: import("@plait/common").CommonImageItem, startPoint?: import("@plait/core").Point | undefined) => void;
|
|
11
12
|
};
|
package/utils/line.d.ts
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
import { Point, PlaitBoard, RectangleClient, PointOfRectangle, Direction } from '@plait/core';
|
|
1
|
+
import { Point, PlaitBoard, RectangleClient, PointOfRectangle, Direction, Vector } from '@plait/core';
|
|
2
2
|
import { LineHandle, LineHandleRef, LineShape, PlaitGeometry, PlaitLine } from '../interfaces';
|
|
3
|
+
import { Op } from 'roughjs/bin/core';
|
|
3
4
|
export declare const createLineElement: (shape: LineShape, points: [Point, Point], source: LineHandle, target: LineHandle, options?: Pick<PlaitLine, 'strokeColor' | 'strokeWidth'>) => PlaitLine;
|
|
4
5
|
export declare const getLinePoints: (board: PlaitBoard, element: PlaitLine) => Point[];
|
|
5
|
-
export declare const getStraightPoints: (board: PlaitBoard, element: PlaitLine) => PointOfRectangle[];
|
|
6
|
-
export declare const getLineHandlePoints: (board: PlaitBoard, element: PlaitLine) => PointOfRectangle[];
|
|
7
6
|
export declare const getLineHandleRefPair: (board: PlaitBoard, element: PlaitLine) => {
|
|
8
7
|
source: LineHandleRef;
|
|
9
8
|
target: LineHandleRef;
|
|
10
9
|
};
|
|
11
10
|
export declare const getElbowPoints: (board: PlaitBoard, element: PlaitLine) => Point[];
|
|
11
|
+
export declare const getCurvePoints: (board: PlaitBoard, element: PlaitLine) => Point[];
|
|
12
|
+
export declare const transformOpsToPoints: (ops: Op[]) => number[][];
|
|
12
13
|
export declare const isHitPolyLine: (pathPoints: Point[], point: Point, strokeWidth: number, expand?: number) => boolean;
|
|
13
14
|
export declare const getHitLineTextIndex: (board: PlaitBoard, element: PlaitLine, point: Point) => number;
|
|
14
15
|
export declare const isHitLineText: (board: PlaitBoard, element: PlaitLine, point: Point) => boolean;
|
|
15
16
|
export declare const drawLine: (board: PlaitBoard, element: PlaitLine) => SVGGElement;
|
|
16
|
-
export declare const getDirectionByBoundElementAndConnection: (board: PlaitBoard, boundElement: PlaitGeometry, connection: PointOfRectangle) => Direction | null;
|
|
17
17
|
export declare const getConnectionPoint: (geometry: PlaitGeometry, connection: Point, direction?: Direction, delta?: number) => Point;
|
|
18
18
|
export declare const transformPointToConnection: (board: PlaitBoard, point: Point, hitElement: PlaitGeometry) => Point;
|
|
19
19
|
export declare const getHitConnectorPoint: (movingPoint: Point, hitElement: PlaitGeometry, rectangle: RectangleClient) => Point | undefined;
|
|
20
20
|
export declare const getLineTextRectangle: (board: PlaitBoard, element: PlaitLine, index: number) => RectangleClient;
|
|
21
21
|
export declare const getBoardLines: (board: PlaitBoard) => PlaitLine[];
|
|
22
|
+
export declare const removeDuplicatePoints: (points: Point[]) => Point[];
|
|
23
|
+
export declare const getExtendPoint: (source: Point, target: Point, extendDistance: number) => Point;
|
|
24
|
+
export declare const Q2C: (points: Point[]) => Point[];
|
|
25
|
+
export declare const getVectorByConnection: (boundElement: PlaitGeometry, connection: PointOfRectangle) => Vector;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PlaitBoard, Point } from '@plait/core';
|
|
2
2
|
import { PlaitGeometry } from '../../interfaces';
|
|
3
|
-
|
|
3
|
+
import { PlaitImage } from '../../interfaces/image';
|
|
4
|
+
export declare const getHitGeometryResizeHandleRef: (board: PlaitBoard, element: PlaitGeometry | PlaitImage, point: Point) => {
|
|
4
5
|
rectangle: {
|
|
5
6
|
x: number;
|
|
6
7
|
y: number;
|
package/utils/position/line.d.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { PlaitBoard, Point
|
|
1
|
+
import { PlaitBoard, Point } from '@plait/core';
|
|
2
2
|
import { PlaitLine } from '../../interfaces';
|
|
3
3
|
export declare enum LineResizeHandle {
|
|
4
4
|
'source' = "source",
|
|
5
|
-
'target' = "target"
|
|
5
|
+
'target' = "target",
|
|
6
|
+
'addHandle' = "addHandle"
|
|
6
7
|
}
|
|
7
8
|
export declare const getHitLineResizeHandleRef: (board: PlaitBoard, element: PlaitLine, point: Point) => {
|
|
8
|
-
rectangle: RectangleClient;
|
|
9
9
|
handle: LineResizeHandle;
|
|
10
|
+
index: number;
|
|
11
|
+
} | {
|
|
12
|
+
index: number;
|
|
13
|
+
handle?: undefined;
|
|
10
14
|
} | undefined;
|
package/utils/selected.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { PlaitBoard } from '@plait/core';
|
|
2
2
|
import { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';
|
|
3
|
+
import { PlaitImage } from '../interfaces/image';
|
|
3
4
|
export declare const getSelectedDrawElements: (board: PlaitBoard) => PlaitDrawElement[];
|
|
4
5
|
export declare const getSelectedGeometryElements: (board: PlaitBoard) => PlaitGeometry[];
|
|
5
6
|
export declare const getSelectedLineElements: (board: PlaitBoard) => PlaitLine[];
|
|
7
|
+
export declare const getSelectedImageElements: (board: PlaitBoard) => PlaitImage[];
|
package/utils/shape.d.ts
ADDED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, isPointInPolygon, setStrokeLinecap } from '@plait/core';
|
|
2
|
-
import { getEdgeOnPolygonByPoint } from '../geometry';
|
|
3
|
-
export const DiamondEngine = {
|
|
4
|
-
draw(board, rectangle, options) {
|
|
5
|
-
const points = RectangleClient.getEdgeCenterPoints(rectangle);
|
|
6
|
-
const rs = PlaitBoard.getRoughSVG(board);
|
|
7
|
-
const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });
|
|
8
|
-
setStrokeLinecap(polygon, 'round');
|
|
9
|
-
return polygon;
|
|
10
|
-
},
|
|
11
|
-
isHit(rectangle, point) {
|
|
12
|
-
const controlPoints = RectangleClient.getEdgeCenterPoints(rectangle);
|
|
13
|
-
return isPointInPolygon(point, controlPoints);
|
|
14
|
-
},
|
|
15
|
-
getCornerPoints(rectangle) {
|
|
16
|
-
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
17
|
-
},
|
|
18
|
-
getNearestPoint(rectangle, point) {
|
|
19
|
-
return getNearestPointBetweenPointAndSegments(point, DiamondEngine.getCornerPoints(rectangle));
|
|
20
|
-
},
|
|
21
|
-
getEdgeByConnectionPoint(rectangle, pointOfRectangle) {
|
|
22
|
-
const corners = DiamondEngine.getCornerPoints(rectangle);
|
|
23
|
-
const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
24
|
-
return getEdgeOnPolygonByPoint(corners, point);
|
|
25
|
-
},
|
|
26
|
-
getConnectorPoints(rectangle) {
|
|
27
|
-
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbW9uZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2VuZ2luZS9kaWFtb25kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsZUFBZSxFQUNmLHNDQUFzQyxFQUN0QyxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ25CLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWdCO0lBQ3RDLElBQUksQ0FBQyxLQUFpQixFQUFFLFNBQTBCLEVBQUUsT0FBZ0I7UUFDaEUsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2RSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkMsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUNELEtBQUssQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDMUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxlQUFlLENBQUMsU0FBMEI7UUFDdEMsT0FBTyxlQUFlLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELGVBQWUsQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDcEQsT0FBTyxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxTQUEwQixFQUFFLGdCQUFrQztRQUNuRixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RSxPQUFPLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsU0FBMEI7UUFDekMsT0FBTyxlQUFlLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMsXG4gICAgaXNQb2ludEluUG9seWdvbixcbiAgICBzZXRTdHJva2VMaW5lY2FwXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFNoYXBlRW5naW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBnZXRFZGdlT25Qb2x5Z29uQnlQb2ludCB9IGZyb20gJy4uL2dlb21ldHJ5JztcblxuZXhwb3J0IGNvbnN0IERpYW1vbmRFbmdpbmU6IFNoYXBlRW5naW5lID0ge1xuICAgIGRyYXcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIGNvbnN0IHJzID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgIGNvbnN0IHBvbHlnb24gPSBycy5wb2x5Z29uKHBvaW50cywgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSk7XG4gICAgICAgIHNldFN0cm9rZUxpbmVjYXAocG9seWdvbiwgJ3JvdW5kJyk7XG4gICAgICAgIHJldHVybiBwb2x5Z29uO1xuICAgIH0sXG4gICAgaXNIaXQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBjb250cm9sUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGlzUG9pbnRJblBvbHlnb24ocG9pbnQsIGNvbnRyb2xQb2ludHMpO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBEaWFtb25kRW5naW5lLmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpKTtcbiAgICB9LFxuICAgIGdldEVkZ2VCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnRPZlJlY3RhbmdsZTogUG9pbnRPZlJlY3RhbmdsZSk6IFtQb2ludCwgUG9pbnRdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNvcm5lcnMgPSBEaWFtb25kRW5naW5lLmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICBjb25zdCBwb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBwb2ludE9mUmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGdldEVkZ2VPblBvbHlnb25CeVBvaW50KGNvcm5lcnMsIHBvaW50KTtcbiAgICB9LFxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9XG59O1xuIl19
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, RectangleClient, isPointInEllipse } from '@plait/core';
|
|
2
|
-
export const EllipseEngine = {
|
|
3
|
-
draw(board, rectangle, options) {
|
|
4
|
-
const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
|
|
5
|
-
const rs = PlaitBoard.getRoughSVG(board);
|
|
6
|
-
return rs.ellipse(centerPoint[0], centerPoint[1], rectangle.width, rectangle.height, { ...options, fillStyle: 'solid' });
|
|
7
|
-
},
|
|
8
|
-
isHit(rectangle, point) {
|
|
9
|
-
const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
|
|
10
|
-
return isPointInEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);
|
|
11
|
-
},
|
|
12
|
-
getCornerPoints(rectangle) {
|
|
13
|
-
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
14
|
-
},
|
|
15
|
-
getNearestPoint(rectangle, point) {
|
|
16
|
-
const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
|
|
17
|
-
return getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);
|
|
18
|
-
},
|
|
19
|
-
getTangentVectorByConnectionPoint(rectangle, pointOfRectangle) {
|
|
20
|
-
const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
21
|
-
const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
|
|
22
|
-
const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];
|
|
23
|
-
const a = rectangle.width / 2;
|
|
24
|
-
const b = rectangle.height / 2;
|
|
25
|
-
const slope = getTangentSlope(point[0], point[1], a, b);
|
|
26
|
-
return getVectorBySlope(point[0], point[1], slope);
|
|
27
|
-
},
|
|
28
|
-
getConnectorPoints(rectangle) {
|
|
29
|
-
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
export function getNearestPointBetweenPointAndEllipse(point, center, rx, ry, rotation = 0) {
|
|
33
|
-
const rectangleClient = {
|
|
34
|
-
x: center[0] - rx,
|
|
35
|
-
y: center[1] - ry,
|
|
36
|
-
height: ry * 2,
|
|
37
|
-
width: rx * 2
|
|
38
|
-
};
|
|
39
|
-
// https://stackoverflow.com/a/46007540/232122
|
|
40
|
-
const px = Math.abs(point[0] - rectangleClient.x - rectangleClient.width / 2);
|
|
41
|
-
const py = Math.abs(point[1] - rectangleClient.y - rectangleClient.height / 2);
|
|
42
|
-
let tx = 0.707;
|
|
43
|
-
let ty = 0.707;
|
|
44
|
-
const a = Math.abs(rectangleClient.width) / 2;
|
|
45
|
-
const b = Math.abs(rectangleClient.height) / 2;
|
|
46
|
-
[0, 1, 2, 3].forEach(x => {
|
|
47
|
-
const xx = a * tx;
|
|
48
|
-
const yy = b * ty;
|
|
49
|
-
const ex = ((a * a - b * b) * tx ** 3) / a;
|
|
50
|
-
const ey = ((b * b - a * a) * ty ** 3) / b;
|
|
51
|
-
const rx = xx - ex;
|
|
52
|
-
const ry = yy - ey;
|
|
53
|
-
const qx = px - ex;
|
|
54
|
-
const qy = py - ey;
|
|
55
|
-
const r = Math.hypot(ry, rx);
|
|
56
|
-
const q = Math.hypot(qy, qx);
|
|
57
|
-
tx = Math.min(1, Math.max(0, ((qx * r) / q + ex) / a));
|
|
58
|
-
ty = Math.min(1, Math.max(0, ((qy * r) / q + ey) / b));
|
|
59
|
-
const t = Math.hypot(ty, tx);
|
|
60
|
-
tx /= t;
|
|
61
|
-
ty /= t;
|
|
62
|
-
});
|
|
63
|
-
const signX = point[0] > center[0] ? 1 : -1;
|
|
64
|
-
const signY = point[1] > center[1] ? 1 : -1;
|
|
65
|
-
return [center[0] + a * tx * signX, center[1] + b * ty * signY];
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* the result of slope is based on Cartesian coordinate system
|
|
69
|
-
* x, y are based on the position in the Cartesian coordinate system
|
|
70
|
-
*/
|
|
71
|
-
function getTangentSlope(x, y, a, b) {
|
|
72
|
-
const k = (-b * b * x) / (a * a * y);
|
|
73
|
-
return k;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* x, y are based on the position in the Cartesian coordinate system
|
|
77
|
-
*/
|
|
78
|
-
function getVectorBySlope(x, y, slope) {
|
|
79
|
-
const deltaX = 30;
|
|
80
|
-
const deltaY = -slope * deltaX;
|
|
81
|
-
let start = [0 - deltaX, 0 - deltaY];
|
|
82
|
-
let end = [0 + deltaX, 0 + deltaY];
|
|
83
|
-
// y < 0 acts on the lower half of the x-axis, with the starting point at the top and the end point at the bottom.
|
|
84
|
-
if (y < 0) {
|
|
85
|
-
const temp = start;
|
|
86
|
-
start = end;
|
|
87
|
-
end = temp;
|
|
88
|
-
}
|
|
89
|
-
const vector = [end[0] - start[0], end[1] - start[1]];
|
|
90
|
-
return vector;
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxsaXBzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2VuZ2luZS9lbGxpcHNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQTJCLGVBQWUsRUFBVSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUk3RyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQWdCO0lBQ3RDLElBQUksQ0FBQyxLQUFpQixFQUFFLFNBQTBCLEVBQUUsT0FBZ0I7UUFDaEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdILENBQUM7SUFDRCxLQUFLLENBQUMsU0FBMEIsRUFBRSxLQUFZO1FBQzFDLE1BQU0sV0FBVyxHQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkcsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUNELGVBQWUsQ0FBQyxTQUEwQjtRQUN0QyxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsZUFBZSxDQUFDLFNBQTBCLEVBQUUsS0FBWTtRQUNwRCxNQUFNLFdBQVcsR0FBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25HLE9BQU8scUNBQXFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFDRCxpQ0FBaUMsQ0FBQyxTQUEwQixFQUFFLGdCQUFrQztRQUM1RixNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDeEYsTUFBTSxXQUFXLEdBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRyxNQUFNLEtBQUssR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQVEsQ0FBQztRQUMvRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELGtCQUFrQixDQUFDLFNBQTBCO1FBQ3pDLE9BQU8sZUFBZSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDSixDQUFDO0FBRUYsTUFBTSxVQUFVLHFDQUFxQyxDQUFDLEtBQVksRUFBRSxNQUFhLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxXQUFtQixDQUFDO0lBQzNILE1BQU0sZUFBZSxHQUFHO1FBQ3BCLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtRQUNqQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7UUFDakIsTUFBTSxFQUFFLEVBQUUsR0FBRyxDQUFDO1FBQ2QsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDO0tBQ2hCLENBQUM7SUFDRiw4Q0FBOEM7SUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUUvRSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFZixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRS9DLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVsQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBRW5CLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTdCLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDUixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFNUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxlQUFlLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztJQUMvRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsS0FBYTtJQUN6RCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0lBQy9CLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFVLENBQUM7SUFDOUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQVUsQ0FBQztJQUM1QyxrSEFBa0g7SUFFbEgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ1AsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ25CLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDWixHQUFHLEdBQUcsSUFBSSxDQUFDO0tBQ2Q7SUFDRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBVyxDQUFDO0lBQ2hFLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUG9pbnRPZlJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LCBWZWN0b3IsIGlzUG9pbnRJbkVsbGlwc2UgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgRWxsaXBzZUVuZ2luZTogU2hhcGVFbmdpbmUgPSB7XG4gICAgZHJhdyhib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgY29uc3QgcnMgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICAgICAgcmV0dXJuIHJzLmVsbGlwc2UoY2VudGVyUG9pbnRbMF0sIGNlbnRlclBvaW50WzFdLCByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS5oZWlnaHQsIHsgLi4ub3B0aW9ucywgZmlsbFN0eWxlOiAnc29saWQnIH0pO1xuICAgIH0sXG4gICAgaXNIaXQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludDogUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgcmV0dXJuIGlzUG9pbnRJbkVsbGlwc2UocG9pbnQsIGNlbnRlclBvaW50LCByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUuaGVpZ2h0IC8gMik7XG4gICAgfSxcbiAgICBnZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludDogUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZEVsbGlwc2UocG9pbnQsIGNlbnRlclBvaW50LCByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUuaGVpZ2h0IC8gMik7XG4gICAgfSxcbiAgICBnZXRUYW5nZW50VmVjdG9yQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50T2ZSZWN0YW5nbGU6IFBvaW50T2ZSZWN0YW5nbGUpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGUsIHBvaW50T2ZSZWN0YW5nbGUpO1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludDogUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBbY29ubmVjdGlvblBvaW50WzBdIC0gY2VudGVyUG9pbnRbMF0sIC0oY29ubmVjdGlvblBvaW50WzFdIC0gY2VudGVyUG9pbnRbMV0pXTtcbiAgICAgICAgY29uc3QgYSA9IHJlY3RhbmdsZS53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IGIgPSByZWN0YW5nbGUuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3Qgc2xvcGUgPSBnZXRUYW5nZW50U2xvcGUocG9pbnRbMF0sIHBvaW50WzFdLCBhLCBiKSBhcyBhbnk7XG4gICAgICAgIHJldHVybiBnZXRWZWN0b3JCeVNsb3BlKHBvaW50WzBdLCBwb2ludFsxXSwgc2xvcGUpO1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRFbGxpcHNlKHBvaW50OiBQb2ludCwgY2VudGVyOiBQb2ludCwgcng6IG51bWJlciwgcnk6IG51bWJlciwgcm90YXRpb246IG51bWJlciA9IDApOiBQb2ludCB7XG4gICAgY29uc3QgcmVjdGFuZ2xlQ2xpZW50ID0ge1xuICAgICAgICB4OiBjZW50ZXJbMF0gLSByeCxcbiAgICAgICAgeTogY2VudGVyWzFdIC0gcnksXG4gICAgICAgIGhlaWdodDogcnkgKiAyLFxuICAgICAgICB3aWR0aDogcnggKiAyXG4gICAgfTtcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDYwMDc1NDAvMjMyMTIyXG4gICAgY29uc3QgcHggPSBNYXRoLmFicyhwb2ludFswXSAtIHJlY3RhbmdsZUNsaWVudC54IC0gcmVjdGFuZ2xlQ2xpZW50LndpZHRoIC8gMik7XG4gICAgY29uc3QgcHkgPSBNYXRoLmFicyhwb2ludFsxXSAtIHJlY3RhbmdsZUNsaWVudC55IC0gcmVjdGFuZ2xlQ2xpZW50LmhlaWdodCAvIDIpO1xuXG4gICAgbGV0IHR4ID0gMC43MDc7XG4gICAgbGV0IHR5ID0gMC43MDc7XG5cbiAgICBjb25zdCBhID0gTWF0aC5hYnMocmVjdGFuZ2xlQ2xpZW50LndpZHRoKSAvIDI7XG4gICAgY29uc3QgYiA9IE1hdGguYWJzKHJlY3RhbmdsZUNsaWVudC5oZWlnaHQpIC8gMjtcblxuICAgIFswLCAxLCAyLCAzXS5mb3JFYWNoKHggPT4ge1xuICAgICAgICBjb25zdCB4eCA9IGEgKiB0eDtcbiAgICAgICAgY29uc3QgeXkgPSBiICogdHk7XG5cbiAgICAgICAgY29uc3QgZXggPSAoKGEgKiBhIC0gYiAqIGIpICogdHggKiogMykgLyBhO1xuICAgICAgICBjb25zdCBleSA9ICgoYiAqIGIgLSBhICogYSkgKiB0eSAqKiAzKSAvIGI7XG5cbiAgICAgICAgY29uc3QgcnggPSB4eCAtIGV4O1xuICAgICAgICBjb25zdCByeSA9IHl5IC0gZXk7XG5cbiAgICAgICAgY29uc3QgcXggPSBweCAtIGV4O1xuICAgICAgICBjb25zdCBxeSA9IHB5IC0gZXk7XG5cbiAgICAgICAgY29uc3QgciA9IE1hdGguaHlwb3QocnksIHJ4KTtcbiAgICAgICAgY29uc3QgcSA9IE1hdGguaHlwb3QocXksIHF4KTtcblxuICAgICAgICB0eCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsICgocXggKiByKSAvIHEgKyBleCkgLyBhKSk7XG4gICAgICAgIHR5ID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgKChxeSAqIHIpIC8gcSArIGV5KSAvIGIpKTtcbiAgICAgICAgY29uc3QgdCA9IE1hdGguaHlwb3QodHksIHR4KTtcbiAgICAgICAgdHggLz0gdDtcbiAgICAgICAgdHkgLz0gdDtcbiAgICB9KTtcbiAgICBjb25zdCBzaWduWCA9IHBvaW50WzBdID4gY2VudGVyWzBdID8gMSA6IC0xO1xuICAgIGNvbnN0IHNpZ25ZID0gcG9pbnRbMV0gPiBjZW50ZXJbMV0gPyAxIDogLTE7XG5cbiAgICByZXR1cm4gW2NlbnRlclswXSArIGEgKiB0eCAqIHNpZ25YLCBjZW50ZXJbMV0gKyBiICogdHkgKiBzaWduWV07XG59XG5cbi8qKlxuICogdGhlIHJlc3VsdCBvZiBzbG9wZSBpcyBiYXNlZCBvbiBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW1cbiAqIHgsIHkgYXJlIGJhc2VkIG9uIHRoZSBwb3NpdGlvbiBpbiB0aGUgQ2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtXG4gKi9cbmZ1bmN0aW9uIGdldFRhbmdlbnRTbG9wZSh4OiBudW1iZXIsIHk6IG51bWJlciwgYTogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICBjb25zdCBrID0gKC1iICogYiAqIHgpIC8gKGEgKiBhICogeSk7XG4gICAgcmV0dXJuIGs7XG59XG5cbi8qKlxuICogeCwgeSBhcmUgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGluIHRoZSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW1cbiAqL1xuZnVuY3Rpb24gZ2V0VmVjdG9yQnlTbG9wZSh4OiBudW1iZXIsIHk6IG51bWJlciwgc2xvcGU6IG51bWJlcikge1xuICAgIGNvbnN0IGRlbHRhWCA9IDMwO1xuICAgIGNvbnN0IGRlbHRhWSA9IC1zbG9wZSAqIGRlbHRhWDtcbiAgICBsZXQgc3RhcnQgPSBbMCAtIGRlbHRhWCwgMCAtIGRlbHRhWV0gYXMgUG9pbnQ7XG4gICAgbGV0IGVuZCA9IFswICsgZGVsdGFYLCAwICsgZGVsdGFZXSBhcyBQb2ludDtcbiAgICAvLyB5IDwgMCBhY3RzIG9uIHRoZSBsb3dlciBoYWxmIG9mIHRoZSB4LWF4aXMsIHdpdGggdGhlIHN0YXJ0aW5nIHBvaW50IGF0IHRoZSB0b3AgYW5kIHRoZSBlbmQgcG9pbnQgYXQgdGhlIGJvdHRvbS5cbiAgICBcbiAgICBpZiAoeSA8IDApIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IHN0YXJ0O1xuICAgICAgICBzdGFydCA9IGVuZDtcbiAgICAgICAgZW5kID0gdGVtcDtcbiAgICB9XG4gICAgY29uc3QgdmVjdG9yID0gW2VuZFswXSAtIHN0YXJ0WzBdLCBlbmRbMV0gLSBzdGFydFsxXV0gYXMgVmVjdG9yO1xuICAgIHJldHVybiB2ZWN0b3I7XG59XG4iXX0=
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { GeometryShape } from '../../interfaces';
|
|
2
|
-
import { DiamondEngine } from './diamond';
|
|
3
|
-
import { EllipseEngine } from './ellipse';
|
|
4
|
-
import { LeftArrowEngine } from './left-arrow';
|
|
5
|
-
import { ParallelogramEngine } from './parallelogram';
|
|
6
|
-
import { RectangleEngine } from './rectangle';
|
|
7
|
-
import { RightArrowEngine } from './right-arrow';
|
|
8
|
-
import { RoundRectangleEngine } from './round-rectangle';
|
|
9
|
-
import { TrapezoidEngine } from './trapezoid';
|
|
10
|
-
import { TriangleEngine } from './triangle';
|
|
11
|
-
export const ShapeEngineMap = {
|
|
12
|
-
[GeometryShape.rectangle]: RectangleEngine,
|
|
13
|
-
[GeometryShape.diamond]: DiamondEngine,
|
|
14
|
-
[GeometryShape.ellipse]: EllipseEngine,
|
|
15
|
-
[GeometryShape.parallelogram]: ParallelogramEngine,
|
|
16
|
-
[GeometryShape.roundRectangle]: RoundRectangleEngine,
|
|
17
|
-
[GeometryShape.text]: RectangleEngine,
|
|
18
|
-
[GeometryShape.triangle]: TriangleEngine,
|
|
19
|
-
[GeometryShape.leftArrow]: LeftArrowEngine,
|
|
20
|
-
[GeometryShape.trapezoid]: TrapezoidEngine,
|
|
21
|
-
[GeometryShape.rightArrow]: RightArrowEngine
|
|
22
|
-
};
|
|
23
|
-
export const getEngine = (shape) => {
|
|
24
|
-
return ShapeEngineMap[shape];
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9lbmdpbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU1QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQXVDO0lBQzlELENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGVBQWU7SUFDMUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsYUFBYTtJQUN0QyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxhQUFhO0lBQ3RDLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxFQUFFLG1CQUFtQjtJQUNsRCxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxvQkFBb0I7SUFDcEQsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsZUFBZTtJQUNyQyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxjQUFjO0lBQ3hDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGVBQWU7SUFDMUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsZUFBZTtJQUMxQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxnQkFBZ0I7Q0FDL0MsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUM5QyxPQUFPLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW9tZXRyeVNoYXBlLCBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRGlhbW9uZEVuZ2luZSB9IGZyb20gJy4vZGlhbW9uZCc7XG5pbXBvcnQgeyBFbGxpcHNlRW5naW5lIH0gZnJvbSAnLi9lbGxpcHNlJztcbmltcG9ydCB7IExlZnRBcnJvd0VuZ2luZSB9IGZyb20gJy4vbGVmdC1hcnJvdyc7XG5pbXBvcnQgeyBQYXJhbGxlbG9ncmFtRW5naW5lIH0gZnJvbSAnLi9wYXJhbGxlbG9ncmFtJztcbmltcG9ydCB7IFJlY3RhbmdsZUVuZ2luZSB9IGZyb20gJy4vcmVjdGFuZ2xlJztcbmltcG9ydCB7IFJpZ2h0QXJyb3dFbmdpbmUgfSBmcm9tICcuL3JpZ2h0LWFycm93JztcbmltcG9ydCB7IFJvdW5kUmVjdGFuZ2xlRW5naW5lIH0gZnJvbSAnLi9yb3VuZC1yZWN0YW5nbGUnO1xuaW1wb3J0IHsgVHJhcGV6b2lkRW5naW5lIH0gZnJvbSAnLi90cmFwZXpvaWQnO1xuaW1wb3J0IHsgVHJpYW5nbGVFbmdpbmUgfSBmcm9tICcuL3RyaWFuZ2xlJztcblxuZXhwb3J0IGNvbnN0IFNoYXBlRW5naW5lTWFwOiBSZWNvcmQ8R2VvbWV0cnlTaGFwZSwgU2hhcGVFbmdpbmU+ID0ge1xuICAgIFtHZW9tZXRyeVNoYXBlLnJlY3RhbmdsZV06IFJlY3RhbmdsZUVuZ2luZSxcbiAgICBbR2VvbWV0cnlTaGFwZS5kaWFtb25kXTogRGlhbW9uZEVuZ2luZSxcbiAgICBbR2VvbWV0cnlTaGFwZS5lbGxpcHNlXTogRWxsaXBzZUVuZ2luZSxcbiAgICBbR2VvbWV0cnlTaGFwZS5wYXJhbGxlbG9ncmFtXTogUGFyYWxsZWxvZ3JhbUVuZ2luZSxcbiAgICBbR2VvbWV0cnlTaGFwZS5yb3VuZFJlY3RhbmdsZV06IFJvdW5kUmVjdGFuZ2xlRW5naW5lLFxuICAgIFtHZW9tZXRyeVNoYXBlLnRleHRdOiBSZWN0YW5nbGVFbmdpbmUsXG4gICAgW0dlb21ldHJ5U2hhcGUudHJpYW5nbGVdOiBUcmlhbmdsZUVuZ2luZSxcbiAgICBbR2VvbWV0cnlTaGFwZS5sZWZ0QXJyb3ddOiBMZWZ0QXJyb3dFbmdpbmUsXG4gICAgW0dlb21ldHJ5U2hhcGUudHJhcGV6b2lkXTogVHJhcGV6b2lkRW5naW5lLFxuICAgIFtHZW9tZXRyeVNoYXBlLnJpZ2h0QXJyb3ddOiBSaWdodEFycm93RW5naW5lXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RW5naW5lID0gKHNoYXBlOiBHZW9tZXRyeVNoYXBlKSA9PiB7XG4gICAgcmV0dXJuIFNoYXBlRW5naW5lTWFwW3NoYXBlXTtcbn07XG4iXX0=
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, isPointInPolygon, setStrokeLinecap } from '@plait/core';
|
|
2
|
-
import { getEdgeOnPolygonByPoint } from '../geometry';
|
|
3
|
-
export const LeftArrowEngine = {
|
|
4
|
-
draw(board, rectangle, options) {
|
|
5
|
-
const points = getLeftArrowPoints(rectangle);
|
|
6
|
-
const rs = PlaitBoard.getRoughSVG(board);
|
|
7
|
-
const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });
|
|
8
|
-
setStrokeLinecap(polygon, 'round');
|
|
9
|
-
return polygon;
|
|
10
|
-
},
|
|
11
|
-
getCornerPoints(rectangle) {
|
|
12
|
-
return getLeftArrowPoints(rectangle);
|
|
13
|
-
},
|
|
14
|
-
isHit(rectangle, point) {
|
|
15
|
-
const points = getLeftArrowPoints(rectangle);
|
|
16
|
-
return isPointInPolygon(point, points);
|
|
17
|
-
},
|
|
18
|
-
getNearestPoint(rectangle, point) {
|
|
19
|
-
const cornerPoints = getLeftArrowPoints(rectangle);
|
|
20
|
-
return getNearestPointBetweenPointAndSegments(point, cornerPoints);
|
|
21
|
-
},
|
|
22
|
-
getEdgeByConnectionPoint(rectangle, pointOfRectangle) {
|
|
23
|
-
const corners = getLeftArrowPoints(rectangle);
|
|
24
|
-
const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
25
|
-
return getEdgeOnPolygonByPoint(corners, point);
|
|
26
|
-
},
|
|
27
|
-
getConnectorPoints(rectangle) {
|
|
28
|
-
return [
|
|
29
|
-
[rectangle.x, rectangle.y + rectangle.height / 2],
|
|
30
|
-
[rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]
|
|
31
|
-
];
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
export const getLeftArrowPoints = (rectangle) => {
|
|
35
|
-
return [
|
|
36
|
-
[rectangle.x, rectangle.y + rectangle.height / 2],
|
|
37
|
-
[rectangle.x + rectangle.width * 0.32, rectangle.y],
|
|
38
|
-
[rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.2],
|
|
39
|
-
[rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.2],
|
|
40
|
-
[rectangle.x + rectangle.width, rectangle.y + rectangle.height * 0.8],
|
|
41
|
-
[rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height * 0.8],
|
|
42
|
-
[rectangle.x + rectangle.width * 0.32, rectangle.y + rectangle.height]
|
|
43
|
-
];
|
|
44
|
-
};
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVmdC1hcnJvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2VuZ2luZS9sZWZ0LWFycm93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsZUFBZSxFQUNmLHNDQUFzQyxFQUN0QyxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ25CLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWdCO0lBQ3hDLElBQUksQ0FBQyxLQUFpQixFQUFFLFNBQTBCLEVBQUUsT0FBZ0I7UUFDaEUsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBQ0QsZUFBZSxDQUFDLFNBQTBCO1FBQ3RDLE9BQU8sa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELEtBQUssQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDMUMsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELGVBQWUsQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDcEQsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsT0FBTyxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELHdCQUF3QixDQUFDLFNBQTBCLEVBQUUsZ0JBQWtDO1FBQ25GLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RSxPQUFPLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsU0FBMEI7UUFDekMsT0FBTztZQUNILENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDdEUsQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxTQUEwQixFQUFXLEVBQUU7SUFDdEUsT0FBTztRQUNILENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQzVFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDckUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNyRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUM1RSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQ3pFLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMsXG4gICAgaXNQb2ludEluUG9seWdvbixcbiAgICBzZXRTdHJva2VMaW5lY2FwXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFNoYXBlRW5naW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBnZXRFZGdlT25Qb2x5Z29uQnlQb2ludCB9IGZyb20gJy4uL2dlb21ldHJ5JztcblxuZXhwb3J0IGNvbnN0IExlZnRBcnJvd0VuZ2luZTogU2hhcGVFbmdpbmUgPSB7XG4gICAgZHJhdyhib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0TGVmdEFycm93UG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIGNvbnN0IHJzID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgIGNvbnN0IHBvbHlnb24gPSBycy5wb2x5Z29uKHBvaW50cywgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSk7XG4gICAgICAgIHNldFN0cm9rZUxpbmVjYXAocG9seWdvbiwgJ3JvdW5kJyk7XG4gICAgICAgIHJldHVybiBwb2x5Z29uO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBnZXRMZWZ0QXJyb3dQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGlzSGl0KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0TGVmdEFycm93UG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBpc1BvaW50SW5Qb2x5Z29uKHBvaW50LCBwb2ludHMpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgY29ybmVyUG9pbnRzID0gZ2V0TGVmdEFycm93UG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludCwgY29ybmVyUG9pbnRzKTtcbiAgICB9LFxuICAgIGdldEVkZ2VCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnRPZlJlY3RhbmdsZTogUG9pbnRPZlJlY3RhbmdsZSk6IFtQb2ludCwgUG9pbnRdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNvcm5lcnMgPSBnZXRMZWZ0QXJyb3dQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgcG9pbnRPZlJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBnZXRFZGdlT25Qb2x5Z29uQnlQb2ludChjb3JuZXJzLCBwb2ludCk7XG4gICAgfSxcbiAgICBnZXRDb25uZWN0b3JQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdXG4gICAgICAgIF07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldExlZnRBcnJvd1BvaW50cyA9IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCk6IFBvaW50W10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0sXG4gICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAqIDAuMzIsIHJlY3RhbmdsZS55XSxcbiAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC4zMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0ICogMC4yXSxcbiAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgKiAwLjJdLFxuICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAqIDAuOF0sXG4gICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAqIDAuMzIsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAqIDAuOF0sXG4gICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAqIDAuMzIsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF1cbiAgICBdO1xufTtcbiJdfQ==
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, isPointInPolygon, setStrokeLinecap } from '@plait/core';
|
|
2
|
-
import { getCenterPointsOnPolygon, getEdgeOnPolygonByPoint } from '../geometry';
|
|
3
|
-
export const ParallelogramEngine = {
|
|
4
|
-
draw(board, rectangle, options) {
|
|
5
|
-
const points = getParallelogramCornerPoints(rectangle);
|
|
6
|
-
const rs = PlaitBoard.getRoughSVG(board);
|
|
7
|
-
const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });
|
|
8
|
-
setStrokeLinecap(polygon, 'round');
|
|
9
|
-
return polygon;
|
|
10
|
-
},
|
|
11
|
-
isHit(rectangle, point) {
|
|
12
|
-
const parallelogramPoints = getParallelogramCornerPoints(rectangle);
|
|
13
|
-
return isPointInPolygon(point, parallelogramPoints);
|
|
14
|
-
},
|
|
15
|
-
getCornerPoints(rectangle) {
|
|
16
|
-
return getParallelogramCornerPoints(rectangle);
|
|
17
|
-
},
|
|
18
|
-
getNearestPoint(rectangle, point) {
|
|
19
|
-
return getNearestPointBetweenPointAndSegments(point, ParallelogramEngine.getCornerPoints(rectangle));
|
|
20
|
-
},
|
|
21
|
-
getEdgeByConnectionPoint(rectangle, pointOfRectangle) {
|
|
22
|
-
const corners = getParallelogramCornerPoints(rectangle);
|
|
23
|
-
const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
24
|
-
return getEdgeOnPolygonByPoint(corners, point);
|
|
25
|
-
},
|
|
26
|
-
getConnectorPoints(rectangle) {
|
|
27
|
-
const cornerPoints = getParallelogramCornerPoints(rectangle);
|
|
28
|
-
return getCenterPointsOnPolygon(cornerPoints);
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
export const getParallelogramCornerPoints = (rectangle) => {
|
|
32
|
-
return [
|
|
33
|
-
[rectangle.x + rectangle.width / 4, rectangle.y],
|
|
34
|
-
[rectangle.x + rectangle.width, rectangle.y],
|
|
35
|
-
[rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],
|
|
36
|
-
[rectangle.x, rectangle.y + rectangle.height]
|
|
37
|
-
];
|
|
38
|
-
};
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWxvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2VuZ2luZS9wYXJhbGxlbG9ncmFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQTJCLGVBQWUsRUFBRSxzQ0FBc0MsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUvSixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHaEYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdCO0lBQzVDLElBQUksQ0FBQyxLQUFpQixFQUFFLFNBQTBCLEVBQUUsT0FBZ0I7UUFDaEUsTUFBTSxNQUFNLEdBQUcsNEJBQTRCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBQ0QsS0FBSyxDQUFDLFNBQTBCLEVBQUUsS0FBWTtRQUMxQyxNQUFNLG1CQUFtQixHQUFHLDRCQUE0QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELGVBQWUsQ0FBQyxTQUEwQjtRQUN0QyxPQUFPLDRCQUE0QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxlQUFlLENBQUMsU0FBMEIsRUFBRSxLQUFZO1FBQ3BELE9BQU8sc0NBQXNDLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxTQUEwQixFQUFFLGdCQUFrQztRQUNuRixNQUFNLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDOUUsT0FBTyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELGtCQUFrQixDQUFDLFNBQTBCO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLDRCQUE0QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNKLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLFNBQTBCLEVBQVcsRUFBRTtJQUNoRixPQUFPO1FBQ0gsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDekUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztLQUNoRCxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFBvaW50T2ZSZWN0YW5nbGUsIFJlY3RhbmdsZUNsaWVudCwgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMsIGlzUG9pbnRJblBvbHlnb24sIHNldFN0cm9rZUxpbmVjYXAgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0Q2VudGVyUG9pbnRzT25Qb2x5Z29uLCBnZXRFZGdlT25Qb2x5Z29uQnlQb2ludCB9IGZyb20gJy4uL2dlb21ldHJ5JztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcblxuZXhwb3J0IGNvbnN0IFBhcmFsbGVsb2dyYW1FbmdpbmU6IFNoYXBlRW5naW5lID0ge1xuICAgIGRyYXcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IGdldFBhcmFsbGVsb2dyYW1Db3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29uc3QgcnMgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICAgICAgY29uc3QgcG9seWdvbiA9IHJzLnBvbHlnb24ocG9pbnRzLCB7IC4uLm9wdGlvbnMsIGZpbGxTdHlsZTogJ3NvbGlkJyB9KTtcbiAgICAgICAgc2V0U3Ryb2tlTGluZWNhcChwb2x5Z29uLCAncm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHBvbHlnb247XG4gICAgfSxcbiAgICBpc0hpdChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHBhcmFsbGVsb2dyYW1Qb2ludHMgPSBnZXRQYXJhbGxlbG9ncmFtQ29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBpc1BvaW50SW5Qb2x5Z29uKHBvaW50LCBwYXJhbGxlbG9ncmFtUG9pbnRzKTtcbiAgICB9LFxuICAgIGdldENvcm5lclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyYWxsZWxvZ3JhbUNvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBQYXJhbGxlbG9ncmFtRW5naW5lLmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpKTtcbiAgICB9LFxuICAgIGdldEVkZ2VCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnRPZlJlY3RhbmdsZTogUG9pbnRPZlJlY3RhbmdsZSk6IFtQb2ludCwgUG9pbnRdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNvcm5lcnMgPSBnZXRQYXJhbGxlbG9ncmFtQ29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGUsIHBvaW50T2ZSZWN0YW5nbGUpO1xuICAgICAgICByZXR1cm4gZ2V0RWRnZU9uUG9seWdvbkJ5UG9pbnQoY29ybmVycywgcG9pbnQpO1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIGNvbnN0IGNvcm5lclBvaW50cyA9IGdldFBhcmFsbGVsb2dyYW1Db3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGdldENlbnRlclBvaW50c09uUG9seWdvbihjb3JuZXJQb2ludHMpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYXJhbGxlbG9ncmFtQ29ybmVyUG9pbnRzID0gKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KTogUG9pbnRbXSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gNCwgcmVjdGFuZ2xlLnldLFxuICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS55XSxcbiAgICAgICAgW3JlY3RhbmdsZS54ICsgKHJlY3RhbmdsZS53aWR0aCAqIDMpIC8gNCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XSxcbiAgICAgICAgW3JlY3RhbmdsZS54LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdXG4gICAgXTtcbn07XG4iXX0=
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { RectangleClient, drawRectangle, getNearestPointBetweenPointAndSegments } from '@plait/core';
|
|
2
|
-
import { getEdgeOnPolygonByPoint } from '../geometry';
|
|
3
|
-
export const RectangleEngine = {
|
|
4
|
-
draw(board, rectangle, options) {
|
|
5
|
-
return drawRectangle(board, rectangle, { ...options, fillStyle: 'solid' });
|
|
6
|
-
},
|
|
7
|
-
isHit(rectangle, point) {
|
|
8
|
-
const rangeRectangle = RectangleClient.toRectangleClient([point, point]);
|
|
9
|
-
return RectangleClient.isHit(rectangle, rangeRectangle);
|
|
10
|
-
},
|
|
11
|
-
getCornerPoints(rectangle) {
|
|
12
|
-
return RectangleClient.getCornerPoints(rectangle);
|
|
13
|
-
},
|
|
14
|
-
getNearestPoint(rectangle, point) {
|
|
15
|
-
return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
|
|
16
|
-
},
|
|
17
|
-
getEdgeByConnectionPoint(rectangle, pointOfRectangle) {
|
|
18
|
-
const corners = RectangleEngine.getCornerPoints(rectangle);
|
|
19
|
-
const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
20
|
-
return getEdgeOnPolygonByPoint(corners, point);
|
|
21
|
-
},
|
|
22
|
-
getConnectorPoints(rectangle) {
|
|
23
|
-
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvZW5naW5lL3JlY3RhbmdsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVDLGVBQWUsRUFBRSxhQUFhLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHMUksT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBZ0I7SUFDeEMsSUFBSSxDQUFDLEtBQWlCLEVBQUUsU0FBMEIsRUFBRSxPQUFnQjtRQUNoRSxPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELEtBQUssQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDMUMsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekUsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsZUFBZSxDQUFDLFNBQTBCO1FBQ3RDLE9BQU8sZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsZUFBZSxDQUFDLFNBQTBCLEVBQUUsS0FBWTtRQUNwRCxPQUFPLHNDQUFzQyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUNELHdCQUF3QixDQUFDLFNBQTBCLEVBQUUsZ0JBQWtDO1FBQ25GLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sdUJBQXVCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxTQUEwQjtRQUN6QyxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBQb2ludE9mUmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQsIGRyYXdSZWN0YW5nbGUsIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IGdldEVkZ2VPblBvbHlnb25CeVBvaW50IH0gZnJvbSAnLi4vZ2VvbWV0cnknO1xuXG5leHBvcnQgY29uc3QgUmVjdGFuZ2xlRW5naW5lOiBTaGFwZUVuZ2luZSA9IHtcbiAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZHJhd1JlY3RhbmdsZShib2FyZCwgcmVjdGFuZ2xlLCB7IC4uLm9wdGlvbnMsIGZpbGxTdHlsZTogJ3NvbGlkJyB9KTtcbiAgICB9LFxuICAgIGlzSGl0KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQudG9SZWN0YW5nbGVDbGllbnQoW3BvaW50LCBwb2ludF0pO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICByZXR1cm4gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnQsIFJlY3RhbmdsZUVuZ2luZS5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKSk7XG4gICAgfSxcbiAgICBnZXRFZGdlQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50T2ZSZWN0YW5nbGU6IFBvaW50T2ZSZWN0YW5nbGUpOiBbUG9pbnQsIFBvaW50XSB8IG51bGwge1xuICAgICAgICBjb25zdCBjb3JuZXJzID0gUmVjdGFuZ2xlRW5naW5lLmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICBjb25zdCBwb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBwb2ludE9mUmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGdldEVkZ2VPblBvbHlnb25CeVBvaW50KGNvcm5lcnMsIHBvaW50KTtcbiAgICB9LFxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9XG59O1xuIl19
|