fl-web-component 1.4.8 → 2.0.0-beta.1
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/README.md +1 -30
- package/dist/fl-web-component.common.1.js +2 -2
- package/dist/fl-web-component.common.1.js.map +1 -1
- package/dist/fl-web-component.common.2.js.map +1 -1
- package/dist/fl-web-component.common.js +77408 -47295
- package/dist/fl-web-component.common.js.map +1 -1
- package/dist/fl-web-component.css +1 -1
- package/package.json +12 -4
- package/packages/components/com-graphics/box.json +77 -0
- package/packages/components/com-graphics/component/ann-tool.vue +465 -0
- package/packages/components/com-graphics/index copy.vue +1679 -0
- package/packages/components/com-graphics/index.vue +3890 -301
- package/packages/components/com-graphics/pid.vue +210 -44
- package/packages/components/com-graphics/test.html +127 -0
- package/packages/components/com-tiles/index.vue +187 -0
- package/packages/utils/StreamLoader.js +1498 -0
- package/packages/utils/StreamLoaderParser.worker.js +595 -0
- package/patches/camera-controls+2.9.0.patch +63 -63
- package/src/main.js +9 -1
- package/src/static/ann-img/mark_circle@2x.png +0 -0
- package/src/static/ann-img/mark_clear@2x.png +0 -0
- package/src/static/ann-img/mark_cloud@2x.png +0 -0
- package/src/static/ann-img/mark_color@2x.png +0 -0
- package/src/static/ann-img/mark_eraser@2x.png +0 -0
- package/src/static/ann-img/mark_exit@2x.png +0 -0
- package/src/static/ann-img/mark_finish@2x.png +0 -0
- package/src/static/ann-img/mark_font@2x.png +0 -0
- package/src/static/ann-img/mark_polyline@2x.png +0 -0
- package/src/static/ann-img/mark_rectangle@2x.png +0 -0
- package/src/static/ann-img/mark_zoomin@2x.png +0 -0
- package/src/static/ann-img/mark_zoomout@2x.png +0 -0
- package/src/utils/cloud.js +110 -0
- package/src/utils/cursor.js +10 -0
- package/src/utils/flgltf-parser.js +245 -193
- package/src/utils/instance-parser.js +718 -170
- package/dist/fl-web-component.common.3.js +0 -7740
- package/dist/fl-web-component.common.3.js.map +0 -1
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
diff --git a/node_modules/camera-controls/dist/camera-controls.module.js b/node_modules/camera-controls/dist/camera-controls.module.js
|
|
2
|
-
index 08a8fd6..76089cb 100644
|
|
3
|
-
--- a/node_modules/camera-controls/dist/camera-controls.module.js
|
|
4
|
-
+++ b/node_modules/camera-controls/dist/camera-controls.module.js
|
|
5
|
-
@@ -1395,7 +1395,7 @@ class CameraControls extends EventDispatcher {
|
|
6
|
-
* @category Methods
|
|
7
|
-
*/
|
|
8
|
-
dolly(distance, enableTransition = false) {
|
|
9
|
-
- return this.dollyTo(this._sphericalEnd.radius - distance, enableTransition);
|
|
10
|
-
+ return this.dollyTo(this._sphericalEnd.radius - distance, this.minDistance, enableTransition);
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Dolly in/out camera position to given distance.
|
|
14
|
-
@@ -1403,11 +1403,11 @@ class CameraControls extends EventDispatcher {
|
|
15
|
-
* @param enableTransition Whether to move smoothly or immediately.
|
|
16
|
-
* @category Methods
|
|
17
|
-
*/
|
|
18
|
-
- dollyTo(distance, enableTransition = false) {
|
|
19
|
-
+ dollyTo(distance, minDistance, enableTransition = false) {
|
|
20
|
-
this._isUserControllingDolly = false;
|
|
21
|
-
this._lastDollyDirection = DOLLY_DIRECTION.NONE;
|
|
22
|
-
this._changedDolly = 0;
|
|
23
|
-
- return this._dollyToNoClamp(clamp(distance, this.minDistance, this.maxDistance), enableTransition);
|
|
24
|
-
+ return this._dollyToNoClamp(clamp(distance, minDistance, this.maxDistance), enableTransition);
|
|
25
|
-
}
|
|
26
|
-
_dollyToNoClamp(distance, enableTransition = false) {
|
|
27
|
-
const lastRadius = this._sphericalEnd.radius;
|
|
28
|
-
@@ -1635,7 +1635,7 @@ class CameraControls extends EventDispatcher {
|
|
29
|
-
if (isPerspectiveCamera(this._camera)) {
|
|
30
|
-
const distance = this.getDistanceToFitBox(bbSize.x, bbSize.y, bbSize.z, cover);
|
|
31
|
-
promises.push(this.moveTo(center.x, center.y, center.z, enableTransition));
|
|
32
|
-
- promises.push(this.dollyTo(distance, enableTransition));
|
|
33
|
-
+ promises.push(this.dollyTo(distance, this.minDistance, enableTransition));
|
|
34
|
-
promises.push(this.setFocalOffset(0, 0, 0, enableTransition));
|
|
35
|
-
}
|
|
36
|
-
else if (isOrthographicCamera(this._camera)) {
|
|
37
|
-
@@ -1664,7 +1664,7 @@ class CameraControls extends EventDispatcher {
|
|
38
|
-
promises.push(this.moveTo(boundingSphere.center.x, boundingSphere.center.y, boundingSphere.center.z, enableTransition));
|
|
39
|
-
if (isPerspectiveCamera(this._camera)) {
|
|
40
|
-
const distanceToFit = this.getDistanceToFitSphere(boundingSphere.radius);
|
|
41
|
-
- promises.push(this.dollyTo(distanceToFit, enableTransition));
|
|
42
|
-
+ promises.push(this.dollyTo(distanceToFit, this.minDistance, enableTransition));
|
|
43
|
-
}
|
|
44
|
-
else if (isOrthographicCamera(this._camera)) {
|
|
45
|
-
const width = this._camera.right - this._camera.left;
|
|
46
|
-
@@ -1831,7 +1831,7 @@ class CameraControls extends EventDispatcher {
|
|
47
|
-
_zColumn.multiplyScalar(cameraToPoint.z);
|
|
48
|
-
_v3A.copy(_xColumn).add(_yColumn).add(_zColumn);
|
|
49
|
-
_v3A.z = _v3A.z + distance;
|
|
50
|
-
- this.dollyTo(distance, false);
|
|
51
|
-
+ this.dollyTo(distance, Number.EPSILON, false);
|
|
52
|
-
this.setFocalOffset(-_v3A.x, _v3A.y, -_v3A.z, false);
|
|
53
|
-
this.moveTo(targetX, targetY, targetZ, false);
|
|
54
|
-
}
|
|
55
|
-
@@ -2283,7 +2283,7 @@ class CameraControls extends EventDispatcher {
|
|
56
|
-
this.moveTo(obj.target[0], obj.target[1], obj.target[2], enableTransition);
|
|
57
|
-
_sphericalA.setFromVector3(_v3A.fromArray(obj.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace));
|
|
58
|
-
this.rotateTo(_sphericalA.theta, _sphericalA.phi, enableTransition);
|
|
59
|
-
- this.dollyTo(_sphericalA.radius, enableTransition);
|
|
60
|
-
+ this.dollyTo(_sphericalA.radius, this.minDistance, enableTransition);
|
|
61
|
-
this.zoomTo(obj.zoom, enableTransition);
|
|
62
|
-
this.setFocalOffset(obj.focalOffset[0], obj.focalOffset[1], obj.focalOffset[2], enableTransition);
|
|
63
|
-
this._needsUpdate = true;
|
|
1
|
+
diff --git a/node_modules/camera-controls/dist/camera-controls.module.js b/node_modules/camera-controls/dist/camera-controls.module.js
|
|
2
|
+
index 08a8fd6..76089cb 100644
|
|
3
|
+
--- a/node_modules/camera-controls/dist/camera-controls.module.js
|
|
4
|
+
+++ b/node_modules/camera-controls/dist/camera-controls.module.js
|
|
5
|
+
@@ -1395,7 +1395,7 @@ class CameraControls extends EventDispatcher {
|
|
6
|
+
* @category Methods
|
|
7
|
+
*/
|
|
8
|
+
dolly(distance, enableTransition = false) {
|
|
9
|
+
- return this.dollyTo(this._sphericalEnd.radius - distance, enableTransition);
|
|
10
|
+
+ return this.dollyTo(this._sphericalEnd.radius - distance, this.minDistance, enableTransition);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Dolly in/out camera position to given distance.
|
|
14
|
+
@@ -1403,11 +1403,11 @@ class CameraControls extends EventDispatcher {
|
|
15
|
+
* @param enableTransition Whether to move smoothly or immediately.
|
|
16
|
+
* @category Methods
|
|
17
|
+
*/
|
|
18
|
+
- dollyTo(distance, enableTransition = false) {
|
|
19
|
+
+ dollyTo(distance, minDistance, enableTransition = false) {
|
|
20
|
+
this._isUserControllingDolly = false;
|
|
21
|
+
this._lastDollyDirection = DOLLY_DIRECTION.NONE;
|
|
22
|
+
this._changedDolly = 0;
|
|
23
|
+
- return this._dollyToNoClamp(clamp(distance, this.minDistance, this.maxDistance), enableTransition);
|
|
24
|
+
+ return this._dollyToNoClamp(clamp(distance, minDistance, this.maxDistance), enableTransition);
|
|
25
|
+
}
|
|
26
|
+
_dollyToNoClamp(distance, enableTransition = false) {
|
|
27
|
+
const lastRadius = this._sphericalEnd.radius;
|
|
28
|
+
@@ -1635,7 +1635,7 @@ class CameraControls extends EventDispatcher {
|
|
29
|
+
if (isPerspectiveCamera(this._camera)) {
|
|
30
|
+
const distance = this.getDistanceToFitBox(bbSize.x, bbSize.y, bbSize.z, cover);
|
|
31
|
+
promises.push(this.moveTo(center.x, center.y, center.z, enableTransition));
|
|
32
|
+
- promises.push(this.dollyTo(distance, enableTransition));
|
|
33
|
+
+ promises.push(this.dollyTo(distance, this.minDistance, enableTransition));
|
|
34
|
+
promises.push(this.setFocalOffset(0, 0, 0, enableTransition));
|
|
35
|
+
}
|
|
36
|
+
else if (isOrthographicCamera(this._camera)) {
|
|
37
|
+
@@ -1664,7 +1664,7 @@ class CameraControls extends EventDispatcher {
|
|
38
|
+
promises.push(this.moveTo(boundingSphere.center.x, boundingSphere.center.y, boundingSphere.center.z, enableTransition));
|
|
39
|
+
if (isPerspectiveCamera(this._camera)) {
|
|
40
|
+
const distanceToFit = this.getDistanceToFitSphere(boundingSphere.radius);
|
|
41
|
+
- promises.push(this.dollyTo(distanceToFit, enableTransition));
|
|
42
|
+
+ promises.push(this.dollyTo(distanceToFit, this.minDistance, enableTransition));
|
|
43
|
+
}
|
|
44
|
+
else if (isOrthographicCamera(this._camera)) {
|
|
45
|
+
const width = this._camera.right - this._camera.left;
|
|
46
|
+
@@ -1831,7 +1831,7 @@ class CameraControls extends EventDispatcher {
|
|
47
|
+
_zColumn.multiplyScalar(cameraToPoint.z);
|
|
48
|
+
_v3A.copy(_xColumn).add(_yColumn).add(_zColumn);
|
|
49
|
+
_v3A.z = _v3A.z + distance;
|
|
50
|
+
- this.dollyTo(distance, false);
|
|
51
|
+
+ this.dollyTo(distance, Number.EPSILON, false);
|
|
52
|
+
this.setFocalOffset(-_v3A.x, _v3A.y, -_v3A.z, false);
|
|
53
|
+
this.moveTo(targetX, targetY, targetZ, false);
|
|
54
|
+
}
|
|
55
|
+
@@ -2283,7 +2283,7 @@ class CameraControls extends EventDispatcher {
|
|
56
|
+
this.moveTo(obj.target[0], obj.target[1], obj.target[2], enableTransition);
|
|
57
|
+
_sphericalA.setFromVector3(_v3A.fromArray(obj.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace));
|
|
58
|
+
this.rotateTo(_sphericalA.theta, _sphericalA.phi, enableTransition);
|
|
59
|
+
- this.dollyTo(_sphericalA.radius, enableTransition);
|
|
60
|
+
+ this.dollyTo(_sphericalA.radius, this.minDistance, enableTransition);
|
|
61
|
+
this.zoomTo(obj.zoom, enableTransition);
|
|
62
|
+
this.setFocalOffset(obj.focalOffset[0], obj.focalOffset[1], obj.focalOffset[2], enableTransition);
|
|
63
|
+
this._needsUpdate = true;
|
package/src/main.js
CHANGED
|
@@ -2,10 +2,17 @@ import FlModel from '../packages/components/com-graphics/index.vue';
|
|
|
2
2
|
import Fl2dcanvas from '../packages/components/com-flcanvas/index.vue';
|
|
3
3
|
import FLPerControl from '../packages/components/com-graphics/per-control.vue';
|
|
4
4
|
import FlSvg from '../packages/components/com-graphics/pid.vue';
|
|
5
|
+
import FlTiles from '../packages/components/com-tiles/index.vue'
|
|
5
6
|
import * as THREE from 'three';
|
|
6
7
|
import pkg from '../package.json';
|
|
7
8
|
|
|
8
|
-
const components = [
|
|
9
|
+
const components = [
|
|
10
|
+
FlModel,
|
|
11
|
+
Fl2dcanvas,
|
|
12
|
+
FLPerControl,
|
|
13
|
+
FlSvg,
|
|
14
|
+
FlTiles
|
|
15
|
+
];
|
|
9
16
|
|
|
10
17
|
const install = Vue => {
|
|
11
18
|
Vue.prototype.THREE = THREE;
|
|
@@ -24,5 +31,6 @@ export default {
|
|
|
24
31
|
FlModel,
|
|
25
32
|
FlSvg,
|
|
26
33
|
Fl2dcanvas,
|
|
34
|
+
FlTiles,
|
|
27
35
|
FLPerControl,
|
|
28
36
|
};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
export function drawCloudWave(path, start, end, arcRadius, density) {
|
|
2
|
+
const dx = end.x - start.x;
|
|
3
|
+
const dy = end.y - start.y;
|
|
4
|
+
const length = Math.sqrt(dx * dx + dy * dy);
|
|
5
|
+
|
|
6
|
+
if (length === 0) return;
|
|
7
|
+
|
|
8
|
+
// 计算单位向量
|
|
9
|
+
const unitX = dx / length;
|
|
10
|
+
const unitY = dy / length;
|
|
11
|
+
|
|
12
|
+
// 计算垂直向量
|
|
13
|
+
const perpX = -unitY;
|
|
14
|
+
const perpY = unitX;
|
|
15
|
+
|
|
16
|
+
// 中点
|
|
17
|
+
const midX = (start.x + end.x) / 2;
|
|
18
|
+
const midY = (start.y + end.y) / 2;
|
|
19
|
+
|
|
20
|
+
// 最大弧度点(向外凸)
|
|
21
|
+
const amplitude = arcRadius * density;
|
|
22
|
+
const peakX = midX - perpX * amplitude; // 向外凸
|
|
23
|
+
const peakY = midY - perpY * amplitude;
|
|
24
|
+
|
|
25
|
+
// 使用三次贝塞尔曲线创建平滑的圆弧效果
|
|
26
|
+
// 控制点稍微向内收缩,创建更自然的S形曲线
|
|
27
|
+
const control1X = start.x + dx * 0.25;
|
|
28
|
+
const control1Y = start.y + dy * 0.25;
|
|
29
|
+
const control2X = end.x - dx * 0.25;
|
|
30
|
+
const control2Y = end.y - dy * 0.25;
|
|
31
|
+
|
|
32
|
+
// 添加弧度偏移
|
|
33
|
+
const arcOffsetX = -perpX * amplitude * 0.3;
|
|
34
|
+
const arcOffsetY = -perpY * amplitude * 0.3;
|
|
35
|
+
|
|
36
|
+
path.bezierCurveTo(
|
|
37
|
+
control1X + arcOffsetX,
|
|
38
|
+
control1Y + arcOffsetY,
|
|
39
|
+
control2X + arcOffsetX,
|
|
40
|
+
control2Y + arcOffsetY,
|
|
41
|
+
end.x,
|
|
42
|
+
end.y
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
// // 绘制云线路径
|
|
48
|
+
export function drawCloudPath(path, vertices, config, close) {
|
|
49
|
+
const { radius, density } = config;
|
|
50
|
+
|
|
51
|
+
if (vertices.length < 3) return;
|
|
52
|
+
|
|
53
|
+
// 从第一个顶点开始
|
|
54
|
+
path.moveTo(vertices[0].x, vertices[0].y);
|
|
55
|
+
let n = vertices.length
|
|
56
|
+
// 如果close为false则不闭合
|
|
57
|
+
if(!close) n--
|
|
58
|
+
// 为每条边绘制云线效果
|
|
59
|
+
for (let i = 0; i < n; i++) {
|
|
60
|
+
const currentVertex = vertices[i];
|
|
61
|
+
const nextVertex = vertices[(i + 1) % vertices.length];
|
|
62
|
+
|
|
63
|
+
// 在当前边绘制云线效果
|
|
64
|
+
drawCloudWave(path, currentVertex, nextVertex, radius, density);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// if(close) path.closePath();
|
|
68
|
+
path.closePath()
|
|
69
|
+
path.stroke()
|
|
70
|
+
// path.restore()
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
// // 基于原始顶点扩充成更多点
|
|
75
|
+
export function expansionHexagonVertices(originalVertices, frequency) {
|
|
76
|
+
const expansionVertices = [];
|
|
77
|
+
let n = originalVertices.length
|
|
78
|
+
for (let i = 0; i < n; i++) {
|
|
79
|
+
const current = originalVertices[i];
|
|
80
|
+
const next = originalVertices[(i + 1) % originalVertices.length];
|
|
81
|
+
|
|
82
|
+
const len = Math.floor(Math.sqrt((next.x - current.x) ** 2 + (next.y - current.y) ** 2) / 1 / 8)
|
|
83
|
+
|
|
84
|
+
for (let j = 0; j < len; j++) {
|
|
85
|
+
const ratio = len === 1 ? 0 : j / (len - 1); // 0 到 1 之间
|
|
86
|
+
const expansionPoint = {
|
|
87
|
+
x: current.x + (next.x - current.x) * ratio,
|
|
88
|
+
y: current.y + (next.y - current.y) * ratio
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
expansionVertices.push(expansionPoint);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return expansionVertices;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// 绘制云线
|
|
99
|
+
export function drawCloudLines(path, vertices) {
|
|
100
|
+
const frequency = 8;
|
|
101
|
+
const expansionVertices = expansionHexagonVertices(vertices, frequency);
|
|
102
|
+
// 云线配置
|
|
103
|
+
const config = {
|
|
104
|
+
radius: 15,
|
|
105
|
+
outward: true,
|
|
106
|
+
density: 0.8
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
drawCloudPath(path, expansionVertices, config);
|
|
110
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
let cursors={
|
|
3
|
+
pen:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACd0lEQVRYR+2WT2gTQRTGv7eb9JLkmPoHvHkQLy2i94o0KMiyMxgRbwrmpigeFBUJFPHiRegpgiLiQZbMTFoR/4AX7UVQCD14EfGcQkGFiia7T0Yq1HWTbLeGgnSOszPv9/HNex9L2ORFm8zHloD/1gHyff8cEZ0EEAIIyuXybKPR6MZ7biQOCCEaAM6shRHRrFLq7MgF+L5/nIgexUHMHOXz+XIQBMt/CPuXY+h53m7Xdd8BKPWpO6m1bo9EQLVaHet2uwtEtL8P/HMul9sRBMG3kQjwff8WEV3sA2cAp7TW90fSA0KIwwCeAInBxsx8wRhzO0nchqdACDEeRVHbcZztCQA7gjWt9d1+vbYhAfV63Wm3208BTCcAekR0Win1YFCjb0iAEOIygJsJgB9EdEIppYdNWWYBUsoDzPwawFgMssLMwhjzfBjcfs8sQAjRBCBjkC9RFB1ttVqv0sBTC6hUKoVisSiZeS8RPVZKLQghbNTayP29lpn5iDHmTVp4KgGrVhsAO1cLv9RaH7LuSSlvMPN5AF8BVOIpl0bIwCeoVqvlXq+3CGDbmmI2VI5prZXdm5qaypVKpbH5+fmVNMB1BZGUcoaZr8UvMXPXcZx7RHSn2Wy+BWBFZVp9HajVavmlpaVPa6xPBBDRdaXUTCZ6vynwPK/kuu4lAFeHFWbmK8aYpCwYdvXX978ckFLuY2Zra9plm+9F2sNDe8COXKFQ+AhgPEXRxYmJicl6vR6lOJv8hEm71oUwDB86jrNnQOH3YRh6c3NzH7LCB+aAbcJOp3OQiKaZeRcRWUe+A+gQ0TPXdXX85yKLkMxRnAWWdGdLwJYDPwFn/dQhz4OkVwAAAABJRU5ErkJggg==',
|
|
4
|
+
line:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA4klEQVRYR+3WTQrCMBCG4fmy8AYeyo2kBS+goAsPJPhzhTEIHso7SEa6EETsXzJjN+m+vE8nhQlo4gcT96kAygRMJ1BV1RrAg5nvbT+7GaCJi8gJwBPAiplvvxAmAO/9hoiOAJyIRCLahhAufwF8fLkjIhGRfQjh8JcjGBtvUGpHkBJXA6TGVQA58WxAbjwLoBFPBmjFkwCa8dEA7fgogEV8MMAqPghgGe8FWMc7Ad8r1Tm3Y+az9i26dRl57xcArkQ061upOajObVjX9TLGOG+7TOSE3++qreNUTAGUCUw+gRcF0dchsIjssQAAAABJRU5ErkJggg==',
|
|
5
|
+
round:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACpUlEQVRYR+2WPW8TQRCG39mLqUBQuKQiCeJDSiT4DRCFwtk964KQ6BCWoCUfonMJOD1gRAkCjG/ODUmB+AcgpQECCVW6NBFQYecGbbSHEhPfnZ0ijbezduedx7PvzhzhiBcdcX4MAYYV6KsCQRAc29nZMSIyA+ASEZ22JhaRTQCfRCQqFApRo9H4k9fcuQG01mUiegTgTIb4BoAFZg7zQGQCBEHgtdvth0R0r0twTUQ2iMhqjAI427W/NDk5uVitVuM0kEwArfXSnuQdInpGREvNZvPHXuFSqTQ2MjIyLyK3AHhur8bMCwMDuLK/dQLbAMrM/CFN0BhzBUADwEnnDxNFUdQrpmcFrOE6nc4Xd+cdAFNZyZMkWuurRPTOVoKI1j3Pu9jLmD0BfN+/LiKvrCgRPQ7D8G4eUyVnjDF1ALfd71lmtlX5b/UEMMa8BHDDRiilRrvvPAumXC6Px3H8zZ17wcw3+wVYs86O4/hrq9U6n5XwoH1jjAUYB7DGzOf6BfgF4DiAZWa+NgiA1nqFiKYA/GbmE4MCrDDz9CEBfjLz7qvoXmke2L2CtPJlQRljMjVymVBExqIosi0297KNyfO87wObUGs9S0SvncATZr6TOzsA3/efikjFPeMgDMOkoe2TyWpEn12f7yilppvN5vs8EK4bLieNqFgsXqjX6+2+PGAPG2N8AE0XuK2UCrIgXPI3AE65OM3MrV7gmcPIGFMDMOcEbEt+LiK1bk8cNIzs+A7DcDGtapkA1WpVra6uPgAw3yVkm4w1ZjKObcP5t2zyiYmJ+4cex4mi1lorpWr2RaT+I6J1EZlLK/s+0DymSs5UKpXC1taWBjATx/FlpdTuJ1kcx5tKqY9EFBWLxVYvw/Vtwn7gBj2b6YFBhfPGDQGGFfgLW7AHMIfxtKYAAAAASUVORK5CYII=',
|
|
6
|
+
trangle:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAl0lEQVRYR+2WsQ2DMBBF/w1BaLIIW/gKGJIU31uwCJUzhFGKVIAEjiUr0nd/95+f5DsbGh9rnA8ByIAMnBoIISQz62o805zzO8b4OOp1CuDuuUb4twfJw6wrACuApRBmAPD81P4C8CI5lQC4+wxgFIAMyIAM/L2B5qO4ZArvam7vgprrGEAi2d9ax1WufaGJvmQyIAPNDWzonXsh3WqxKQAAAABJRU5ErkJggg==',
|
|
7
|
+
eraser:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAA1hJREFUWEfFl09oXUUUxr/vPkzARRFcumhdVGgV8t7MJBFaaC30z0YQMW1AUWyhXVWlYmm7aLWbtiQNFboqoqUFgy1VFBcuuhDRJu2bM0kIRsFkJS7ctC9dNLwQ7pGBtDxe3p9734t04G7uPef7fvfMzJl7iac82I2/c25nzPfe/9ypTscAxphxksOrxlfTNB2ZmpqaywvSEYAx5n2SX9aZVUiOViqV0fn5+WpWkNwAxWLxuUKhcAfAliYmoqojIYRvskDkBrDWngNwop24qkaACCKtYnMBOOcGVDW+faEdwOrzqqqOpmk6Oj09XWmUkxfglqq+mdG8Nuz3CBJCuFqfmxnAGPMOyesdmNem3BSR/bU3MgFYa58BEAC80iUAVPVICOHKY52sAJ8BON2tecxPkmR3uVy+nRmgVCptTZIkvn1vtwAkv/LeH8w1BXUdrxuG+6q6PYTwR2YAa+0bAL7rxrUm96SInM+1C6y1sYmYdQCYXFxc3NmoRTddhM6546p6YR3MQfIt7/2tXI3IGGOTJDmsqoe7hLgmIu8102i5Da21XwN4FsBWAJs7AHkI4DURibuo4WgKYIx5neQPqrqvt7f3l+Xl5XgAnQQQm1LWcUZEzrYKbrUG7qjqX7Xl6+/vfzlN008ANC3pkwZD+mq1umd2dvZBbgBjzEckRwBsF5G79QKxOgA+JrmjaWnJd733bc+ONRUolUobkySZBBAPjg+aGQwNDRUWFhaOkvwQwKa6uBsiciDLPK0BcM5dVtVhVX01hDDfTqRYLG4uFApHAcQrjkcA9orIr+1y4/M1ANbaP1V1PIQQD6BMwzl3XVU3kpxU1VRE2n4xPVkr9Q7WWgWwX0RuZnE3xuwl+ZOqHggh3Ojr63thZmbmnyy5DStgjDlD8tO45ZaWlsbm5uaWW4k5526r6r8i8nZW09q4htvQWvsFgEMAhORF7/14I3Hn3CFV/ZzkLu/9vXUDiELGmH0kjwHYTfJbAGPe+98emwwODm5YWVmZAPC9iJzqxLzhFNQLOeeOqGoEeYnkJZJj5XL579WpGu7p6dk2MTFx/38DiMIDAwPPp2l6bBVkJf4OAoj/hZkXa9OGlYfcOVdK03SY5Iuqei2E8GOe/EaxmT5KuzVplf8fJR1KMBY8k7wAAAAASUVORK5CYII=',
|
|
8
|
+
text:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA5klEQVRYR+2VPwrCMBSHfwlFvIizq6u7y0vR2Qt4A0dP4AmcLSUUhI6Ozs5epA5NpKBQ1Ni0tAThZUxe8r735Z9A4CYC5wcDsAGngTiOJ8aYRR+HVEp5StP09m0tJwARLQEc+wAAsNJaJ38NsDXGnOsVSCnnAHbPvqbxTgam1tp1lUAIcdBaX+sAb1v0kYCIfs5/rdX5GjYB+J4dBmADbIANsIHWBpRSs7IspeszyrLsAsAO9hQT0R3AyJWgKIpxnudVjFdrbSA4gFJqY62NXOVFUbRPkqT0Kr/66n0Dh4pjADYQ3MADakKSIQVRq+oAAAAASUVORK5CYII='
|
|
9
|
+
}
|
|
10
|
+
export default cursors;
|