@realsee/dnalogel 0.1.5 → 0.1.7-alpha.4
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/components/GLTFView/index.d.ts +104 -0
- package/components/GLTFView/index.js +181 -0
- package/data/81zxMaeVKLQU93OZMG.d.ts +49 -0
- package/data/81zxMaeVKLQU93OZMG.js +633 -0
- package/data/PrXel3aqGbp34JQn.js +139 -1
- package/data/vLykj3NWrllMrG06.js +335 -71
- package/libs/gltf-viewer/Subscribe.d.ts +76 -0
- package/libs/gltf-viewer/Subscribe.js +231 -0
- package/libs/gltf-viewer/coordsMoveByOffset.d.ts +13 -0
- package/libs/gltf-viewer/coordsMoveByOffset.js +22 -0
- package/libs/gltf-viewer/coordsToDirection.d.ts +5 -0
- package/{components/PBRView/index.js → libs/gltf-viewer/coordsToDirection.js} +14 -18
- package/libs/gltf-viewer/formatRad.d.ts +1 -0
- package/libs/gltf-viewer/formatRad.js +13 -0
- package/libs/gltf-viewer/getFrameTime.d.ts +1 -0
- package/libs/gltf-viewer/getFrameTime.js +28 -0
- package/libs/gltf-viewer/index.d.ts +69 -0
- package/libs/gltf-viewer/index.js +744 -0
- package/libs/gltf-viewer/mouseWheel.d.ts +2 -0
- package/libs/gltf-viewer/mouseWheel.js +59 -0
- package/libs/gltf-viewer/requestAnimationFrame.d.ts +1 -0
- package/libs/gltf-viewer/requestAnimationFrame.js +18 -0
- package/libs/gltf-viewer/requestAnimationFrameInterval.d.ts +1 -0
- package/libs/gltf-viewer/requestAnimationFrameInterval.js +31 -0
- package/libs/gltf-viewer/uuid.d.ts +4 -0
- package/libs/gltf-viewer/uuid.js +28 -0
- package/package.json +5 -4
- package/plugins/ModelEntryDoorGuidePlugin/index.d.ts +6 -2
- package/plugins/ModelEntryDoorGuidePlugin/index.js +22 -14
- package/plugins/ModelRoomLabelPlugin/Controller.js +1 -0
- package/plugins/ModelRoomLabelPlugin/RoomLabelItem.js +5 -5
- package/plugins/ModelRoomLabelPlugin/index.d.ts +4 -0
- package/plugins/ModelRoomLabelPlugin/index.js +7 -2
- package/plugins/PanoMaskSelectorPlugin/createBox.js +3 -0
- package/plugins/PanoMaskSelectorPlugin/index.js +3 -1
- package/plugins/PanoMeasurePlugin/Controller/BaseController.d.ts +36 -0
- package/plugins/PanoMeasurePlugin/Controller/BaseController.js +103 -0
- package/plugins/PanoMeasurePlugin/Controller/EditController.d.ts +52 -0
- package/plugins/PanoMeasurePlugin/Controller/EditController.js +341 -0
- package/plugins/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +12 -0
- package/plugins/PanoMeasurePlugin/Controller/ShortcutKeyController.js +69 -0
- package/plugins/PanoMeasurePlugin/Controller/WatchController.d.ts +25 -0
- package/plugins/PanoMeasurePlugin/Controller/WatchController.js +371 -0
- package/plugins/PanoMeasurePlugin/Controller/index.d.ts +61 -0
- package/plugins/PanoMeasurePlugin/Controller/index.js +230 -0
- package/plugins/PanoMeasurePlugin/Model/index.d.ts +38 -0
- package/plugins/PanoMeasurePlugin/Model/index.js +235 -0
- package/plugins/PanoMeasurePlugin/Model/line.d.ts +30 -0
- package/plugins/PanoMeasurePlugin/Model/line.js +121 -0
- package/plugins/PanoMeasurePlugin/Model/point.d.ts +16 -0
- package/plugins/PanoMeasurePlugin/Model/point.js +68 -0
- package/plugins/PanoMeasurePlugin/Model/polyline.d.ts +16 -0
- package/plugins/PanoMeasurePlugin/Model/polyline.js +109 -0
- package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.d.ts +2 -0
- package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.js +11 -0
- package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +2 -0
- package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.js +11 -0
- package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +2 -0
- package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.js +11 -0
- package/plugins/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +22 -0
- package/plugins/PanoMeasurePlugin/Modules/DeleteDom/index.js +182 -0
- package/plugins/PanoMeasurePlugin/Modules/FiveHelper.d.ts +11 -0
- package/plugins/PanoMeasurePlugin/Modules/FiveHelper.js +66 -0
- package/plugins/PanoMeasurePlugin/Modules/GuideController.d.ts +18 -0
- package/plugins/PanoMeasurePlugin/Modules/GuideController.js +107 -0
- package/plugins/PanoMeasurePlugin/Modules/Magnifier.d.ts +24 -0
- package/plugins/PanoMeasurePlugin/Modules/Magnifier.js +139 -0
- package/plugins/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +6 -0
- package/plugins/PanoMeasurePlugin/Modules/UIController/HTML.js +26 -0
- package/plugins/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +18 -0
- package/plugins/PanoMeasurePlugin/Modules/UIController/MainBtnController.js +169 -0
- package/plugins/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +12 -0
- package/plugins/PanoMeasurePlugin/Modules/UIController/Revoke/index.js +59 -0
- package/plugins/PanoMeasurePlugin/Modules/UIController/index.d.ts +16 -0
- package/plugins/PanoMeasurePlugin/Modules/UIController/index.js +123 -0
- package/plugins/PanoMeasurePlugin/Modules/UIController/style.d.ts +17 -0
- package/plugins/PanoMeasurePlugin/Modules/UIController/style.js +103 -0
- package/plugins/PanoMeasurePlugin/index.d.ts +7 -0
- package/plugins/PanoMeasurePlugin/index.js +20 -0
- package/plugins/PanoMeasurePlugin/typings/data.d.ts +28 -0
- package/plugins/PanoMeasurePlugin/typings/data.js +7 -0
- package/plugins/PanoMeasurePlugin/typings/event.type.d.ts +28 -0
- package/plugins/PanoMeasurePlugin/typings/event.type.js +7 -0
- package/plugins/PanoMeasurePlugin/typings/utils.type.d.ts +1 -0
- package/plugins/PanoMeasurePlugin/typings/utils.type.js +7 -0
- package/plugins/PanoMeasurePlugin/utils/clearGroup.d.ts +2 -0
- package/plugins/PanoMeasurePlugin/utils/clearGroup.js +16 -0
- package/plugins/PanoMeasurePlugin/utils/constants.d.ts +4 -0
- package/plugins/PanoMeasurePlugin/utils/constants.js +47 -0
- package/plugins/PanoMeasurePlugin/utils/distanceDom.d.ts +28 -0
- package/plugins/PanoMeasurePlugin/utils/distanceDom.js +147 -0
- package/plugins/PanoMeasurePlugin/utils/findAssociatedLines.d.ts +2 -0
- package/plugins/PanoMeasurePlugin/utils/findAssociatedLines.js +37 -0
- package/plugins/PanoMeasurePlugin/utils/findClosestPoint.d.ts +10 -0
- package/plugins/PanoMeasurePlugin/utils/findClosestPoint.js +49 -0
- package/plugins/PanoMeasurePlugin/utils/getIntersectionFromEvent.d.ts +4 -0
- package/plugins/PanoMeasurePlugin/utils/getIntersectionFromEvent.js +20 -0
- package/plugins/PanoMeasurePlugin/utils/getPointFromHammerEvent.d.ts +10 -0
- package/plugins/PanoMeasurePlugin/utils/getPointFromHammerEvent.js +33 -0
- package/plugins/PanoMeasurePlugin/utils/ironbox.d.ts +1 -0
- package/plugins/PanoMeasurePlugin/utils/ironbox.js +14 -0
- package/plugins/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +2 -0
- package/plugins/PanoMeasurePlugin/utils/isNDCPointInScreen.js +16 -0
- package/plugins/PanoMeasurePlugin/utils/line.d.ts +17 -0
- package/plugins/PanoMeasurePlugin/utils/line.js +61 -0
- package/plugins/PanoMeasurePlugin/utils/math.d.ts +17 -0
- package/plugins/PanoMeasurePlugin/utils/math.js +57 -0
- package/plugins/PanoMeasurePlugin/utils/mouseGroup.d.ts +2 -0
- package/plugins/PanoMeasurePlugin/utils/mouseGroup.js +42 -0
- package/plugins/PanoMeasurePlugin/utils/ndc2Screen.d.ts +5 -0
- package/plugins/PanoMeasurePlugin/utils/ndc2Screen.js +16 -0
- package/plugins/PanoRulerPlugin/index.d.ts +4 -0
- package/plugins/PanoRulerPlugin/index.js +6 -1
- package/plugins/PanoTVVideoPlugin/index.d.ts +2 -0
- package/plugins/PanoTVVideoPlugin/index.js +20 -14
- package/plugins/floorplan/ModelFloorplanPlugin/Controller.d.ts +5 -2
- package/plugins/floorplan/ModelFloorplanPlugin/Controller.js +22 -11
- package/plugins/floorplan/ModelFloorplanPlugin/components/Camera.js +4 -4
- package/plugins/floorplan/ModelFloorplanPlugin/components/Compass.js +5 -5
- package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RoomLabels.js +2 -2
- package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RoomMaterial.d.ts +11 -0
- package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RoomMaterial.js +174 -0
- package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RuleLabels.d.ts +8 -0
- package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RuleLabels.js +179 -0
- package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/index.d.ts +2 -0
- package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/index.js +14 -2
- package/plugins/floorplan/ModelFloorplanPlugin/components/index.d.ts +3 -0
- package/plugins/floorplan/ModelFloorplanPlugin/components/index.js +1 -1
- package/plugins/floorplan/ModelFloorplanPlugin/typings/utility.d.ts +2 -0
- package/plugins/floorplan/ModelFloorplanPlugin/typings/utility.js +7 -0
- package/plugins/floorplan/ModelFloorplanPlugin/utils/constant.d.ts +1 -1
- package/plugins/floorplan/ModelFloorplanPlugin/utils/constant.js +1 -1
- package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/Camera.js +1 -0
- package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/Camera.style.js +4 -4
- package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/NowFloor/ExtraObjects.js +2 -2
- package/plugins/floorplan/TopviewFloorplanPlugin/Controller.js +3 -3
- package/plugins/floorplan/index.d.ts +4 -0
- package/plugins/floorplan/index.js +13 -0
- package/plugins/floorplan/typings/floorplanData.d.ts +2 -0
- package/plugins/floorplan/typings/floorplanServerData.d.ts +2 -0
- package/plugins/floorplan/utils/formatData.js +2 -1
- package/shared-utils/changeModelCanvasOpacity.d.ts +2 -0
- package/shared-utils/{changeModelCanvansOpacity.js → changeModelCanvasOpacity.js} +2 -2
- package/shared-utils/removeArrayItem.d.ts +7 -0
- package/shared-utils/removeArrayItem.js +22 -0
- package/shared-utils/three/loadTexture.d.ts +2 -2
- package/shared-utils/three/loadTexture.js +21 -2
- package/typedoc/libs.d.ts +1 -0
- package/typedoc/libs.js +7 -0
- package/components/PBRView/index.d.ts +0 -14
- package/shared-utils/changeModelCanvansOpacity.d.ts +0 -2
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import Line from './line';
|
|
2
|
+
import Point from './point';
|
|
3
|
+
import { Subscribe, SubscribeEventMap } from '@realsee/five';
|
|
4
|
+
import { PluginData } from '../typings/data';
|
|
5
|
+
import { Polyline } from './polyline';
|
|
6
|
+
import { UserDistanceItem } from '../utils/distanceDom';
|
|
7
|
+
interface IModelEvent extends SubscribeEventMap {
|
|
8
|
+
/** 新增线条
|
|
9
|
+
* @param line 被创建的线条
|
|
10
|
+
*/
|
|
11
|
+
lineAdded: (line: Line) => void;
|
|
12
|
+
/** 删除线条
|
|
13
|
+
* @param lines 被删除的线条数组
|
|
14
|
+
*/
|
|
15
|
+
lineRemoved: (lines: Line) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface ModelParams {
|
|
18
|
+
userDistanceItemCreator?: () => UserDistanceItem;
|
|
19
|
+
}
|
|
20
|
+
export declare class Model {
|
|
21
|
+
readonly lines: Line[];
|
|
22
|
+
readonly points: Point[];
|
|
23
|
+
readonly params: ModelParams;
|
|
24
|
+
readonly polylines: Polyline[];
|
|
25
|
+
readonly hook: Subscribe<IModelEvent>;
|
|
26
|
+
constructor(params: ModelParams);
|
|
27
|
+
addLine(line: Line): this | undefined;
|
|
28
|
+
removeLineByID(lineID: string): void;
|
|
29
|
+
removeLine(line: Line): this;
|
|
30
|
+
mergeModel(model: Model): void;
|
|
31
|
+
includes(item: Point | Line): boolean | undefined;
|
|
32
|
+
getPointByID(id: string): Point | undefined;
|
|
33
|
+
getLineByID(id: string): Line | undefined;
|
|
34
|
+
getClosestPoint(): void;
|
|
35
|
+
parse(data: PluginData): this;
|
|
36
|
+
toJson(): PluginData;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.Model = void 0;
|
|
11
|
+
|
|
12
|
+
require("core-js/modules/es.array.includes.js");
|
|
13
|
+
|
|
14
|
+
require("core-js/modules/es.string.includes.js");
|
|
15
|
+
|
|
16
|
+
require("core-js/modules/es.array.find.js");
|
|
17
|
+
|
|
18
|
+
require("core-js/modules/es.array.slice.js");
|
|
19
|
+
|
|
20
|
+
require("core-js/modules/es.array.for-each.js");
|
|
21
|
+
|
|
22
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
23
|
+
|
|
24
|
+
require("core-js/modules/es.array.map.js");
|
|
25
|
+
|
|
26
|
+
require("core-js/modules/es.array.splice.js");
|
|
27
|
+
|
|
28
|
+
require("core-js/modules/es.array.concat.js");
|
|
29
|
+
|
|
30
|
+
require("core-js/modules/es.array.filter.js");
|
|
31
|
+
|
|
32
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
33
|
+
|
|
34
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
35
|
+
|
|
36
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
37
|
+
|
|
38
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
39
|
+
|
|
40
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
41
|
+
|
|
42
|
+
var _line = _interopRequireDefault(require("./line"));
|
|
43
|
+
|
|
44
|
+
var _point = _interopRequireDefault(require("./point"));
|
|
45
|
+
|
|
46
|
+
var _five = require("@realsee/five");
|
|
47
|
+
|
|
48
|
+
var _removeArrayItem = _interopRequireDefault(require("../../../shared-utils/removeArrayItem"));
|
|
49
|
+
|
|
50
|
+
var _polyline = require("./polyline");
|
|
51
|
+
|
|
52
|
+
var Model = /*#__PURE__*/function () {
|
|
53
|
+
function Model(params) {
|
|
54
|
+
(0, _classCallCheck2["default"])(this, Model);
|
|
55
|
+
(0, _defineProperty2["default"])(this, "lines", []);
|
|
56
|
+
(0, _defineProperty2["default"])(this, "points", []);
|
|
57
|
+
(0, _defineProperty2["default"])(this, "polylines", []);
|
|
58
|
+
(0, _defineProperty2["default"])(this, "hook", new _five.Subscribe());
|
|
59
|
+
this.params = params;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
(0, _createClass2["default"])(Model, [{
|
|
63
|
+
key: "addLine",
|
|
64
|
+
value: function addLine(line) {
|
|
65
|
+
var _line$points = (0, _slicedToArray2["default"])(line.points, 2),
|
|
66
|
+
startPoint = _line$points[0],
|
|
67
|
+
endPoint = _line$points[1];
|
|
68
|
+
|
|
69
|
+
if (!startPoint || !endPoint) return this;
|
|
70
|
+
if (!this.includes(startPoint)) this.points.push(startPoint);
|
|
71
|
+
if (!this.includes(endPoint)) this.points.push(endPoint);
|
|
72
|
+
this.lines.push(line);
|
|
73
|
+
var lastPolyline = this.polylines.find(function (polyline) {
|
|
74
|
+
return !!polyline.getNext(line);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
if (lastPolyline) {
|
|
78
|
+
lastPolyline.push(line);
|
|
79
|
+
} else {
|
|
80
|
+
var polyline = new _polyline.Polyline();
|
|
81
|
+
polyline.push(line);
|
|
82
|
+
this.polylines.push(polyline);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
this.hook.emit('lineAdded', line);
|
|
86
|
+
}
|
|
87
|
+
}, {
|
|
88
|
+
key: "removeLineByID",
|
|
89
|
+
value: function removeLineByID(lineID) {
|
|
90
|
+
var line = this.getLineByID(lineID);
|
|
91
|
+
if (line) this.removeLine(line);
|
|
92
|
+
}
|
|
93
|
+
}, {
|
|
94
|
+
key: "removeLine",
|
|
95
|
+
value: function removeLine(line) {
|
|
96
|
+
// handle polyline
|
|
97
|
+
var polyline = this.polylines.find(function (polyline) {
|
|
98
|
+
return polyline.lines.includes(line);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
if (polyline) {
|
|
102
|
+
if (polyline.lines.slice(-1)[0] !== line) throw new Error('不能从中间删除线段');
|
|
103
|
+
polyline.pop();
|
|
104
|
+
if (polyline.lines.length === 0) (0, _removeArrayItem["default"])(polyline, this.polylines);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
var _line$points2 = (0, _slicedToArray2["default"])(line.points, 2),
|
|
108
|
+
point = _line$points2[0],
|
|
109
|
+
anotherPoint = _line$points2[1];
|
|
110
|
+
|
|
111
|
+
if (point.lines.length === 0) (0, _removeArrayItem["default"])(point, this.points);
|
|
112
|
+
if (anotherPoint.lines.length === 0) (0, _removeArrayItem["default"])(anotherPoint, this.points);
|
|
113
|
+
(0, _removeArrayItem["default"])(line, this.lines);
|
|
114
|
+
line.clear();
|
|
115
|
+
this.hook.emit('lineRemoved', line);
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
118
|
+
}, {
|
|
119
|
+
key: "mergeModel",
|
|
120
|
+
value: function mergeModel(model) {
|
|
121
|
+
var _this = this;
|
|
122
|
+
|
|
123
|
+
model.lines.forEach(function (line) {
|
|
124
|
+
return _this.addLine(line);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}, {
|
|
128
|
+
key: "includes",
|
|
129
|
+
value: function includes(item) {
|
|
130
|
+
if (item.type === 'point') {
|
|
131
|
+
return this.points.find(function (_ref) {
|
|
132
|
+
var id = _ref.id;
|
|
133
|
+
return id === item.id;
|
|
134
|
+
}) !== undefined;
|
|
135
|
+
} else if (item.type === 'line') {
|
|
136
|
+
return this.lines.find(function (_ref2) {
|
|
137
|
+
var id = _ref2.id;
|
|
138
|
+
return id === item.id;
|
|
139
|
+
}) !== undefined;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}, {
|
|
143
|
+
key: "getPointByID",
|
|
144
|
+
value: function getPointByID(id) {
|
|
145
|
+
return this.points.find(function (_ref3) {
|
|
146
|
+
var _id = _ref3.id;
|
|
147
|
+
return _id === id;
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}, {
|
|
151
|
+
key: "getLineByID",
|
|
152
|
+
value: function getLineByID(id) {
|
|
153
|
+
return this.lines.find(function (_ref4) {
|
|
154
|
+
var _id = _ref4.id;
|
|
155
|
+
return _id === id;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}, {
|
|
159
|
+
key: "getClosestPoint",
|
|
160
|
+
value: function getClosestPoint() {}
|
|
161
|
+
}, {
|
|
162
|
+
key: "parse",
|
|
163
|
+
value: function parse(data) {
|
|
164
|
+
var _this2 = this,
|
|
165
|
+
_this$points,
|
|
166
|
+
_this$lines,
|
|
167
|
+
_this$polylines;
|
|
168
|
+
|
|
169
|
+
var points = data.points.map(function (_ref5) {
|
|
170
|
+
var id = _ref5.id,
|
|
171
|
+
position = _ref5.position;
|
|
172
|
+
var point = new _point["default"](position);
|
|
173
|
+
point.id = id;
|
|
174
|
+
return point;
|
|
175
|
+
});
|
|
176
|
+
var lines = data.lines.map(function (data) {
|
|
177
|
+
var _data$points = (0, _slicedToArray2["default"])(data.points, 2),
|
|
178
|
+
pointID = _data$points[0],
|
|
179
|
+
anotherPointID = _data$points[1];
|
|
180
|
+
|
|
181
|
+
var point = _this2.getPointByID.call({
|
|
182
|
+
points: points
|
|
183
|
+
}, pointID);
|
|
184
|
+
|
|
185
|
+
var anotherPoint = _this2.getPointByID.call({
|
|
186
|
+
points: points
|
|
187
|
+
}, anotherPointID);
|
|
188
|
+
|
|
189
|
+
if (!point || !anotherPoint) throw new Error('线上的点不存在');
|
|
190
|
+
var line = new _line["default"](point, anotherPoint, _this2);
|
|
191
|
+
line.id = data.id;
|
|
192
|
+
return line;
|
|
193
|
+
});
|
|
194
|
+
var polylines = data.polylines.map(function (polylineJson) {
|
|
195
|
+
var polyline = new _polyline.Polyline();
|
|
196
|
+
polylineJson.lines.forEach(function (lineID) {
|
|
197
|
+
var line = lines.find(function (_ref6) {
|
|
198
|
+
var id = _ref6.id;
|
|
199
|
+
return id === lineID;
|
|
200
|
+
});
|
|
201
|
+
line && polyline.push(line);
|
|
202
|
+
});
|
|
203
|
+
return polyline;
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
(_this$points = this.points).splice.apply(_this$points, [0, this.points.length].concat((0, _toConsumableArray2["default"])(points)));
|
|
207
|
+
|
|
208
|
+
(_this$lines = this.lines).splice.apply(_this$lines, [0, this.lines.length].concat((0, _toConsumableArray2["default"])(lines)));
|
|
209
|
+
|
|
210
|
+
(_this$polylines = this.polylines).splice.apply(_this$polylines, [0, this.polylines.length].concat((0, _toConsumableArray2["default"])(polylines)));
|
|
211
|
+
|
|
212
|
+
return this;
|
|
213
|
+
}
|
|
214
|
+
}, {
|
|
215
|
+
key: "toJson",
|
|
216
|
+
value: function toJson() {
|
|
217
|
+
return {
|
|
218
|
+
points: this.points.map(function (point) {
|
|
219
|
+
return point.toJson();
|
|
220
|
+
}),
|
|
221
|
+
lines: this.lines.map(function (line) {
|
|
222
|
+
return line.toJson();
|
|
223
|
+
}),
|
|
224
|
+
polylines: this.polylines.map(function (polyline) {
|
|
225
|
+
return polyline.toJson();
|
|
226
|
+
}).filter(function (polylines) {
|
|
227
|
+
return polylines.lines.length > 0;
|
|
228
|
+
})
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
}]);
|
|
232
|
+
return Model;
|
|
233
|
+
}();
|
|
234
|
+
|
|
235
|
+
exports.Model = Model;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Model } from '.';
|
|
2
|
+
import Point from './point';
|
|
3
|
+
import { LineJson } from '..';
|
|
4
|
+
import { Polyline } from './polyline';
|
|
5
|
+
import { LineCompletelyJson } from '../typings/data';
|
|
6
|
+
import { Line as FiveLine } from '@realsee/five/line';
|
|
7
|
+
import { Subscribe, SubscribeEventMap } from '@realsee/five';
|
|
8
|
+
import { DistanceItem } from '../utils/distanceDom';
|
|
9
|
+
export interface ILineHook extends SubscribeEventMap {
|
|
10
|
+
selected: (line: Line) => void;
|
|
11
|
+
}
|
|
12
|
+
export default class Line {
|
|
13
|
+
id: string;
|
|
14
|
+
selected: boolean;
|
|
15
|
+
readonly type = "line";
|
|
16
|
+
readonly model: Model;
|
|
17
|
+
readonly mesh: FiveLine;
|
|
18
|
+
readonly points: Point[];
|
|
19
|
+
readonly lightMesh: FiveLine;
|
|
20
|
+
readonly hook: Subscribe<ILineHook>;
|
|
21
|
+
readonly distanceItem: DistanceItem;
|
|
22
|
+
private polyline?;
|
|
23
|
+
constructor(point: Point, anotherPoint: Point, model: Model);
|
|
24
|
+
clear(): void;
|
|
25
|
+
getPolyline(): Polyline;
|
|
26
|
+
findAnotherPoint(point: Point): Point | undefined;
|
|
27
|
+
toJson(): LineJson;
|
|
28
|
+
toCompletelyJson(): LineCompletelyJson;
|
|
29
|
+
clone(): Line;
|
|
30
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports["default"] = void 0;
|
|
11
|
+
|
|
12
|
+
require("core-js/modules/es.array.find.js");
|
|
13
|
+
|
|
14
|
+
require("core-js/modules/es.array.includes.js");
|
|
15
|
+
|
|
16
|
+
require("core-js/modules/es.string.includes.js");
|
|
17
|
+
|
|
18
|
+
require("core-js/modules/es.array.map.js");
|
|
19
|
+
|
|
20
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
21
|
+
|
|
22
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
23
|
+
|
|
24
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
25
|
+
|
|
26
|
+
var _polyline = require("./polyline");
|
|
27
|
+
|
|
28
|
+
var _uuid = _interopRequireDefault(require("../../../shared-utils/uuid"));
|
|
29
|
+
|
|
30
|
+
var _line = require("../utils/line");
|
|
31
|
+
|
|
32
|
+
var _five = require("@realsee/five");
|
|
33
|
+
|
|
34
|
+
var _distanceDom = require("../utils/distanceDom");
|
|
35
|
+
|
|
36
|
+
var Line = /*#__PURE__*/function () {
|
|
37
|
+
function Line(point, anotherPoint, model) {
|
|
38
|
+
var _this = this;
|
|
39
|
+
|
|
40
|
+
(0, _classCallCheck2["default"])(this, Line);
|
|
41
|
+
(0, _defineProperty2["default"])(this, "selected", false);
|
|
42
|
+
(0, _defineProperty2["default"])(this, "type", 'line');
|
|
43
|
+
this.id = (0, _uuid["default"])();
|
|
44
|
+
this.model = model;
|
|
45
|
+
if (point.id === anotherPoint.id) throw new Error('无效的线段, 一个点无法构成线段');
|
|
46
|
+
this.hook = new _five.Subscribe();
|
|
47
|
+
this.points = [point, anotherPoint];
|
|
48
|
+
this.mesh = (0, _line.creatLineMesh)(this, 'normal');
|
|
49
|
+
this.lightMesh = (0, _line.creatLineMesh)(this, 'light');
|
|
50
|
+
this.distanceItem = (0, _distanceDom.creatDistanceItem)({
|
|
51
|
+
line: this,
|
|
52
|
+
clickCallback: function clickCallback() {
|
|
53
|
+
return _this.hook.emit('selected', _this);
|
|
54
|
+
},
|
|
55
|
+
userDistanceItem: this.model.params.userDistanceItemCreator ? this.model.params.userDistanceItemCreator() : undefined
|
|
56
|
+
});
|
|
57
|
+
point.lines.push(this);
|
|
58
|
+
anotherPoint.lines.push(this);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
(0, _createClass2["default"])(Line, [{
|
|
62
|
+
key: "clear",
|
|
63
|
+
value: function clear() {
|
|
64
|
+
this.selected = false;
|
|
65
|
+
this.polyline = undefined;
|
|
66
|
+
}
|
|
67
|
+
}, {
|
|
68
|
+
key: "getPolyline",
|
|
69
|
+
value: function getPolyline() {
|
|
70
|
+
var _this2 = this;
|
|
71
|
+
|
|
72
|
+
if (this.polyline) return this.polyline;
|
|
73
|
+
var modelPolyline = this.model.polylines.find(function (polyline) {
|
|
74
|
+
return polyline.lines.includes(_this2);
|
|
75
|
+
});
|
|
76
|
+
this.polyline = modelPolyline;
|
|
77
|
+
if (modelPolyline) return modelPolyline;
|
|
78
|
+
var polyline = new _polyline.Polyline();
|
|
79
|
+
polyline.push(this);
|
|
80
|
+
return polyline;
|
|
81
|
+
}
|
|
82
|
+
}, {
|
|
83
|
+
key: "findAnotherPoint",
|
|
84
|
+
value: function findAnotherPoint(point) {
|
|
85
|
+
return this.points.find(function (_ref) {
|
|
86
|
+
var id = _ref.id;
|
|
87
|
+
return id !== point.id;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}, {
|
|
91
|
+
key: "toJson",
|
|
92
|
+
value: function toJson() {
|
|
93
|
+
return {
|
|
94
|
+
id: this.id,
|
|
95
|
+
points: this.points.map(function (_ref2) {
|
|
96
|
+
var id = _ref2.id;
|
|
97
|
+
return id;
|
|
98
|
+
})
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
}, {
|
|
102
|
+
key: "toCompletelyJson",
|
|
103
|
+
value: function toCompletelyJson() {
|
|
104
|
+
return {
|
|
105
|
+
id: this.id,
|
|
106
|
+
points: this.points.map(function (point) {
|
|
107
|
+
return point.toJson();
|
|
108
|
+
})
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}, {
|
|
112
|
+
key: "clone",
|
|
113
|
+
value: function clone() {
|
|
114
|
+
var line = new Line(this.points[0].clone(), this.points[1].clone(), this.model);
|
|
115
|
+
return line;
|
|
116
|
+
}
|
|
117
|
+
}]);
|
|
118
|
+
return Line;
|
|
119
|
+
}();
|
|
120
|
+
|
|
121
|
+
exports["default"] = Line;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import Line from './line';
|
|
2
|
+
import { Vector3 } from 'three';
|
|
3
|
+
import { PluginData } from '../typings/data';
|
|
4
|
+
declare type IPointData = PluginData['points'][0];
|
|
5
|
+
export default class Point {
|
|
6
|
+
id: string;
|
|
7
|
+
lines: Line[];
|
|
8
|
+
position: Vector3;
|
|
9
|
+
readonly type = "point";
|
|
10
|
+
constructor(position: Vector3 | number[]);
|
|
11
|
+
toJson(): IPointData;
|
|
12
|
+
addLine(line: Line): void;
|
|
13
|
+
removeLine(line: Line): void;
|
|
14
|
+
clone(): Point;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports["default"] = void 0;
|
|
11
|
+
|
|
12
|
+
require("core-js/modules/es.array.map.js");
|
|
13
|
+
|
|
14
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
|
+
|
|
16
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
17
|
+
|
|
18
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
19
|
+
|
|
20
|
+
var _three = require("three");
|
|
21
|
+
|
|
22
|
+
var _uuid = _interopRequireDefault(require("../../../shared-utils/uuid"));
|
|
23
|
+
|
|
24
|
+
var _removeArrayItem = _interopRequireDefault(require("../../../shared-utils/removeArrayItem"));
|
|
25
|
+
|
|
26
|
+
var Point = /*#__PURE__*/function () {
|
|
27
|
+
function Point(position) {
|
|
28
|
+
(0, _classCallCheck2["default"])(this, Point);
|
|
29
|
+
(0, _defineProperty2["default"])(this, "type", 'point');
|
|
30
|
+
this.id = (0, _uuid["default"])();
|
|
31
|
+
this.lines = [];
|
|
32
|
+
this.position = new _three.Vector3();
|
|
33
|
+
position instanceof _three.Vector3 ? this.position.copy(position) : this.position.fromArray(position);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
(0, _createClass2["default"])(Point, [{
|
|
37
|
+
key: "toJson",
|
|
38
|
+
value: function toJson() {
|
|
39
|
+
return {
|
|
40
|
+
id: this.id,
|
|
41
|
+
lines: this.lines.map(function (_ref) {
|
|
42
|
+
var id = _ref.id;
|
|
43
|
+
return id;
|
|
44
|
+
}),
|
|
45
|
+
position: this.position.toArray()
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}, {
|
|
49
|
+
key: "addLine",
|
|
50
|
+
value: function addLine(line) {
|
|
51
|
+
this.lines.push(line);
|
|
52
|
+
}
|
|
53
|
+
}, {
|
|
54
|
+
key: "removeLine",
|
|
55
|
+
value: function removeLine(line) {
|
|
56
|
+
(0, _removeArrayItem["default"])(line, this.lines);
|
|
57
|
+
}
|
|
58
|
+
}, {
|
|
59
|
+
key: "clone",
|
|
60
|
+
value: function clone() {
|
|
61
|
+
var point = new Point(this.position);
|
|
62
|
+
return point;
|
|
63
|
+
}
|
|
64
|
+
}]);
|
|
65
|
+
return Point;
|
|
66
|
+
}();
|
|
67
|
+
|
|
68
|
+
exports["default"] = Point;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import Line from './line';
|
|
2
|
+
import Point from './point';
|
|
3
|
+
import { PolylineJson, PolylineCompletelyJson } from '../typings/data';
|
|
4
|
+
export declare class Polyline {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
points: Point[];
|
|
7
|
+
readonly lines: Line[];
|
|
8
|
+
push(line: Line): number;
|
|
9
|
+
pop(): Line | undefined;
|
|
10
|
+
getNext(line: Line): {
|
|
11
|
+
line: Line;
|
|
12
|
+
points: Point[];
|
|
13
|
+
} | null;
|
|
14
|
+
toJson(): PolylineJson;
|
|
15
|
+
toCompletelyJson(): PolylineCompletelyJson;
|
|
16
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.Polyline = void 0;
|
|
11
|
+
|
|
12
|
+
require("core-js/modules/es.array.slice.js");
|
|
13
|
+
|
|
14
|
+
require("core-js/modules/es.array.includes.js");
|
|
15
|
+
|
|
16
|
+
require("core-js/modules/es.string.includes.js");
|
|
17
|
+
|
|
18
|
+
require("core-js/modules/es.array.find.js");
|
|
19
|
+
|
|
20
|
+
require("core-js/modules/es.array.map.js");
|
|
21
|
+
|
|
22
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
23
|
+
|
|
24
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
25
|
+
|
|
26
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
27
|
+
|
|
28
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
29
|
+
|
|
30
|
+
var _uuid = _interopRequireDefault(require("../../../shared-utils/uuid"));
|
|
31
|
+
|
|
32
|
+
var Polyline = /*#__PURE__*/function () {
|
|
33
|
+
function Polyline() {
|
|
34
|
+
(0, _classCallCheck2["default"])(this, Polyline);
|
|
35
|
+
(0, _defineProperty2["default"])(this, "id", (0, _uuid["default"])());
|
|
36
|
+
(0, _defineProperty2["default"])(this, "points", []);
|
|
37
|
+
(0, _defineProperty2["default"])(this, "lines", []);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
(0, _createClass2["default"])(Polyline, [{
|
|
41
|
+
key: "push",
|
|
42
|
+
value: function push(line) {
|
|
43
|
+
var _this$points;
|
|
44
|
+
|
|
45
|
+
var next = this.getNext(line);
|
|
46
|
+
if (!next) throw new Error('当前线段于上一条线段无法构成折线');
|
|
47
|
+
this.lines.push(next.line);
|
|
48
|
+
|
|
49
|
+
(_this$points = this.points).push.apply(_this$points, (0, _toConsumableArray2["default"])(next.points));
|
|
50
|
+
|
|
51
|
+
return this.lines.length;
|
|
52
|
+
}
|
|
53
|
+
}, {
|
|
54
|
+
key: "pop",
|
|
55
|
+
value: function pop() {
|
|
56
|
+
var lastPoint = this.lines.pop();
|
|
57
|
+
var polylineLength = this.lines.length;
|
|
58
|
+
if (polylineLength === 0) this.points.slice(0, this.points.length);else this.points.pop();
|
|
59
|
+
return lastPoint;
|
|
60
|
+
}
|
|
61
|
+
}, {
|
|
62
|
+
key: "getNext",
|
|
63
|
+
value: function getNext(line) {
|
|
64
|
+
var lastPoint = this.points.slice(-1)[0];
|
|
65
|
+
if (!lastPoint) return {
|
|
66
|
+
line: line,
|
|
67
|
+
points: line.points
|
|
68
|
+
};
|
|
69
|
+
if (!line.points.includes(lastPoint)) return null;
|
|
70
|
+
var nextPoint = line.points.find(function (point) {
|
|
71
|
+
return point !== lastPoint;
|
|
72
|
+
});
|
|
73
|
+
if (!nextPoint) return null;
|
|
74
|
+
return {
|
|
75
|
+
line: line,
|
|
76
|
+
points: [nextPoint]
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}, {
|
|
80
|
+
key: "toJson",
|
|
81
|
+
value: function toJson() {
|
|
82
|
+
return {
|
|
83
|
+
id: this.id,
|
|
84
|
+
lines: this.lines.map(function (line) {
|
|
85
|
+
return line.id;
|
|
86
|
+
}),
|
|
87
|
+
points: this.points.map(function (point) {
|
|
88
|
+
return point.id;
|
|
89
|
+
})
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}, {
|
|
93
|
+
key: "toCompletelyJson",
|
|
94
|
+
value: function toCompletelyJson() {
|
|
95
|
+
return {
|
|
96
|
+
id: this.id,
|
|
97
|
+
points: this.points.map(function (point) {
|
|
98
|
+
return point.toJson();
|
|
99
|
+
}),
|
|
100
|
+
lines: this.lines.map(function (line) {
|
|
101
|
+
return line.toCompletelyJson();
|
|
102
|
+
})
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}]);
|
|
106
|
+
return Polyline;
|
|
107
|
+
}();
|
|
108
|
+
|
|
109
|
+
exports.Polyline = Polyline;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const svg = "<svg class=\"fpm__delete-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <linearGradient x1=\"21.443%\" y1=\"100%\" x2=\"67.281%\" y2=\"6.672%\" id=\"a\">\n <stop stop-color=\"#FFFCFC\" stop-opacity=\".6\" offset=\"0%\" />\n <stop stop-color=\"#FFF\" offset=\"100%\" />\n </linearGradient>\n </defs>\n <path\n d=\"M14.932 3.545a.75.75 0 0 1 .102 1.494l-.102.006H13.83l-.979 8.813a2.05 2.05 0 0 1-1.882 1.818l-.155.006H4.868a2.05 2.05 0 0 1-2.037-1.824l-.98-8.813H.75a.75.75 0 0 1-.102-1.493l.102-.007h14.182zm-2.611 1.5H3.36l.961 8.648a.55.55 0 0 0 .369.46l.087.021.091.008h5.946a.55.55 0 0 0 .546-.49l.961-8.647zM10.795 0a.75.75 0 0 1 .102 1.493l-.102.007H4.886A.75.75 0 0 1 4.785.007L4.886 0h5.91z\"\n transform=\"translate(2.16 2.16)\"\n fill=\"url(#a)\"\n fill-rule=\"nonzero\"\n />\n</svg>";
|
|
2
|
+
export default svg;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var svg = "<svg class=\"fpm__delete-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <linearGradient x1=\"21.443%\" y1=\"100%\" x2=\"67.281%\" y2=\"6.672%\" id=\"a\">\n <stop stop-color=\"#FFFCFC\" stop-opacity=\".6\" offset=\"0%\" />\n <stop stop-color=\"#FFF\" offset=\"100%\" />\n </linearGradient>\n </defs>\n <path\n d=\"M14.932 3.545a.75.75 0 0 1 .102 1.494l-.102.006H13.83l-.979 8.813a2.05 2.05 0 0 1-1.882 1.818l-.155.006H4.868a2.05 2.05 0 0 1-2.037-1.824l-.98-8.813H.75a.75.75 0 0 1-.102-1.493l.102-.007h14.182zm-2.611 1.5H3.36l.961 8.648a.55.55 0 0 0 .369.46l.087.021.091.008h5.946a.55.55 0 0 0 .546-.49l.961-8.647zM10.795 0a.75.75 0 0 1 .102 1.493l-.102.007H4.886A.75.75 0 0 1 4.785.007L4.886 0h5.91z\"\n transform=\"translate(2.16 2.16)\"\n fill=\"url(#a)\"\n fill-rule=\"nonzero\"\n />\n</svg>";
|
|
10
|
+
var _default = svg;
|
|
11
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const image = "data:image/png;base64,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";
|
|
2
|
+
export default image;
|