@realsee/dnalogel 0.1.7-alpha.3 → 0.1.7-alpha.7

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.
Files changed (135) hide show
  1. package/components/ARVideoFigure/ImgBgTransparentMesh.js +2 -2
  2. package/components/GLTFView/index.d.ts +7 -1
  3. package/components/GLTFView/index.js +7 -1
  4. package/components/GlassFilters/index.js +2 -2
  5. package/components/ModelView/ModelViewController.js +6 -5
  6. package/data/81zxMaeVKLQU93OZMG.d.ts +49 -0
  7. package/data/81zxMaeVKLQU93OZMG.js +633 -0
  8. package/data/_vLykj3NWrllMrG06.d.ts +95 -0
  9. package/data/_vLykj3NWrllMrG06.js +1 -0
  10. package/libs/gltf-viewer/Subscribe.js +2 -0
  11. package/libs/gltf-viewer/coordsToDirection.d.ts +1 -1
  12. package/libs/gltf-viewer/index.d.ts +13 -0
  13. package/libs/gltf-viewer/index.js +119 -63
  14. package/package.json +1 -1
  15. package/plugins/CSS3DRenderPlugin/components/Marker/index.js +2 -0
  16. package/plugins/CSS3DRenderPlugin/index.js +17 -12
  17. package/plugins/CSS3DRenderPlugin/utils/createResizeObserver.d.ts +7 -0
  18. package/plugins/CSS3DRenderPlugin/utils/createResizeObserver.js +34 -0
  19. package/plugins/ModelChassisCompassPlugin/index.d.ts +1 -1
  20. package/plugins/ModelChassisCompassPlugin/index.js +2 -1
  21. package/plugins/ModelEntryDoorGuidePlugin/index.d.ts +4 -0
  22. package/plugins/ModelEntryDoorGuidePlugin/index.js +6 -1
  23. package/plugins/ModelExtrudeWallsPlugin/index.js +2 -2
  24. package/plugins/ModelRoomLabelPlugin/RoomLabelItems.js +2 -2
  25. package/plugins/ModelRoomLabelPlugin/index.d.ts +4 -0
  26. package/plugins/ModelRoomLabelPlugin/index.js +7 -2
  27. package/plugins/ModelTVVideoPlugin/index.js +4 -2
  28. package/plugins/ModelViewPlugin/index.js +2 -2
  29. package/plugins/PanoCursorRaycasterPlugin/index.js +2 -0
  30. package/plugins/PanoMeasurePlugin/Controller/BaseController.d.ts +36 -0
  31. package/plugins/PanoMeasurePlugin/Controller/BaseController.js +105 -0
  32. package/plugins/PanoMeasurePlugin/Controller/EditController.d.ts +52 -0
  33. package/plugins/PanoMeasurePlugin/Controller/EditController.js +343 -0
  34. package/plugins/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +12 -0
  35. package/plugins/PanoMeasurePlugin/Controller/ShortcutKeyController.js +69 -0
  36. package/plugins/PanoMeasurePlugin/Controller/WatchController.d.ts +25 -0
  37. package/plugins/PanoMeasurePlugin/Controller/WatchController.js +373 -0
  38. package/plugins/PanoMeasurePlugin/Controller/index.d.ts +61 -0
  39. package/plugins/PanoMeasurePlugin/Controller/index.js +230 -0
  40. package/plugins/PanoMeasurePlugin/Model/index.d.ts +38 -0
  41. package/plugins/PanoMeasurePlugin/Model/index.js +237 -0
  42. package/plugins/PanoMeasurePlugin/Model/line.d.ts +30 -0
  43. package/plugins/PanoMeasurePlugin/Model/line.js +123 -0
  44. package/plugins/PanoMeasurePlugin/Model/point.d.ts +16 -0
  45. package/plugins/PanoMeasurePlugin/Model/point.js +72 -0
  46. package/plugins/PanoMeasurePlugin/Model/polyline.d.ts +16 -0
  47. package/plugins/PanoMeasurePlugin/Model/polyline.js +111 -0
  48. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.d.ts +2 -0
  49. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.js +11 -0
  50. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +2 -0
  51. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.js +11 -0
  52. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +2 -0
  53. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.js +11 -0
  54. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +22 -0
  55. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/index.js +184 -0
  56. package/plugins/PanoMeasurePlugin/Modules/FiveHelper.d.ts +11 -0
  57. package/plugins/PanoMeasurePlugin/Modules/FiveHelper.js +68 -0
  58. package/plugins/PanoMeasurePlugin/Modules/GuideController.d.ts +18 -0
  59. package/plugins/PanoMeasurePlugin/Modules/GuideController.js +107 -0
  60. package/plugins/PanoMeasurePlugin/Modules/Magnifier.d.ts +24 -0
  61. package/plugins/PanoMeasurePlugin/Modules/Magnifier.js +139 -0
  62. package/plugins/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +6 -0
  63. package/plugins/PanoMeasurePlugin/Modules/UIController/HTML.js +26 -0
  64. package/plugins/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +18 -0
  65. package/plugins/PanoMeasurePlugin/Modules/UIController/MainBtnController.js +169 -0
  66. package/plugins/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +12 -0
  67. package/plugins/PanoMeasurePlugin/Modules/UIController/Revoke/index.js +59 -0
  68. package/plugins/PanoMeasurePlugin/Modules/UIController/index.d.ts +16 -0
  69. package/plugins/PanoMeasurePlugin/Modules/UIController/index.js +125 -0
  70. package/plugins/PanoMeasurePlugin/Modules/UIController/style.d.ts +17 -0
  71. package/plugins/PanoMeasurePlugin/Modules/UIController/style.js +103 -0
  72. package/plugins/PanoMeasurePlugin/index.d.ts +7 -0
  73. package/plugins/PanoMeasurePlugin/index.js +20 -0
  74. package/plugins/PanoMeasurePlugin/typings/data.d.ts +28 -0
  75. package/plugins/PanoMeasurePlugin/typings/data.js +7 -0
  76. package/plugins/PanoMeasurePlugin/typings/event.type.d.ts +28 -0
  77. package/plugins/PanoMeasurePlugin/typings/event.type.js +7 -0
  78. package/plugins/PanoMeasurePlugin/typings/utils.type.d.ts +1 -0
  79. package/plugins/PanoMeasurePlugin/typings/utils.type.js +7 -0
  80. package/plugins/PanoMeasurePlugin/utils/clearGroup.d.ts +2 -0
  81. package/plugins/PanoMeasurePlugin/utils/clearGroup.js +16 -0
  82. package/plugins/PanoMeasurePlugin/utils/constants.d.ts +4 -0
  83. package/plugins/PanoMeasurePlugin/utils/constants.js +47 -0
  84. package/plugins/PanoMeasurePlugin/utils/distanceDom.d.ts +28 -0
  85. package/plugins/PanoMeasurePlugin/utils/distanceDom.js +147 -0
  86. package/plugins/PanoMeasurePlugin/utils/findAssociatedLines.d.ts +2 -0
  87. package/plugins/PanoMeasurePlugin/utils/findAssociatedLines.js +39 -0
  88. package/plugins/PanoMeasurePlugin/utils/findClosestPoint.d.ts +10 -0
  89. package/plugins/PanoMeasurePlugin/utils/findClosestPoint.js +49 -0
  90. package/plugins/PanoMeasurePlugin/utils/getIntersectionFromEvent.d.ts +4 -0
  91. package/plugins/PanoMeasurePlugin/utils/getIntersectionFromEvent.js +20 -0
  92. package/plugins/PanoMeasurePlugin/utils/getPointFromHammerEvent.d.ts +10 -0
  93. package/plugins/PanoMeasurePlugin/utils/getPointFromHammerEvent.js +33 -0
  94. package/plugins/PanoMeasurePlugin/utils/ironbox.d.ts +1 -0
  95. package/plugins/PanoMeasurePlugin/utils/ironbox.js +14 -0
  96. package/plugins/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +2 -0
  97. package/plugins/PanoMeasurePlugin/utils/isNDCPointInScreen.js +16 -0
  98. package/plugins/PanoMeasurePlugin/utils/line.d.ts +17 -0
  99. package/plugins/PanoMeasurePlugin/utils/line.js +61 -0
  100. package/plugins/PanoMeasurePlugin/utils/math.d.ts +17 -0
  101. package/plugins/PanoMeasurePlugin/utils/math.js +57 -0
  102. package/plugins/PanoMeasurePlugin/utils/mouseGroup.d.ts +2 -0
  103. package/plugins/PanoMeasurePlugin/utils/mouseGroup.js +42 -0
  104. package/plugins/PanoMeasurePlugin/utils/ndc2Screen.d.ts +5 -0
  105. package/plugins/PanoMeasurePlugin/utils/ndc2Screen.js +16 -0
  106. package/plugins/PanoRulerPlugin/index.d.ts +4 -0
  107. package/plugins/PanoRulerPlugin/index.js +8 -3
  108. package/plugins/TreasurePlugin/Controller.js +2 -2
  109. package/plugins/TreasurePlugin/TreasureOpenAnime.js +2 -2
  110. package/plugins/floorplan/Assets/floorplanExtraObject.d.ts +1 -1
  111. package/plugins/floorplan/Assets/floorplanExtraObject.js +3 -3
  112. package/plugins/floorplan/ModelFloorplanPlugin/Controller.js +1 -1
  113. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RoomHighlight.js +2 -2
  114. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RoomMaterial.js +1 -1
  115. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RuleLabels.js +6 -3
  116. package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/Camera.js +3 -2
  117. package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/NowFloor/RoomHighlight.js +2 -2
  118. package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/NowFloor/index.js +2 -2
  119. package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/index.js +2 -2
  120. package/plugins/floorplan/TopviewFloorplanPlugin/Controller.d.ts +3 -0
  121. package/plugins/floorplan/TopviewFloorplanPlugin/Controller.js +13 -3
  122. package/plugins/floorplan/index.d.ts +4 -0
  123. package/plugins/floorplan/index.js +13 -0
  124. package/plugins/floorplan/typings/floorplanServerData.d.ts +1 -1
  125. package/plugins/floorplan/typings/floorplanServerData.js +3 -3
  126. package/plugins/floorplan/utils/formatData.js +1 -1
  127. package/plugins/floorplan/utils/formatPosition.js +2 -0
  128. package/shared-utils/Subscribe.js +4 -2
  129. package/shared-utils/animationFrame/BetterTween.js +5 -1
  130. package/shared-utils/filter.js +4 -2
  131. package/shared-utils/math/evenNumber.d.ts +3 -1
  132. package/shared-utils/math/evenNumber.js +4 -2
  133. package/shared-utils/math/planimetry.js +2 -0
  134. package/shared-utils/removeArrayItem.d.ts +7 -0
  135. package/shared-utils/removeArrayItem.js +22 -0
@@ -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,237 @@
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.object.to-string.js");
19
+
20
+ require("core-js/modules/es.array.slice.js");
21
+
22
+ require("core-js/modules/es.array.for-each.js");
23
+
24
+ require("core-js/modules/web.dom-collections.for-each.js");
25
+
26
+ require("core-js/modules/es.array.map.js");
27
+
28
+ require("core-js/modules/es.array.splice.js");
29
+
30
+ require("core-js/modules/es.array.concat.js");
31
+
32
+ require("core-js/modules/es.array.filter.js");
33
+
34
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
35
+
36
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
37
+
38
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
39
+
40
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
41
+
42
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
43
+
44
+ var _line = _interopRequireDefault(require("./line"));
45
+
46
+ var _point = _interopRequireDefault(require("./point"));
47
+
48
+ var _five = require("@realsee/five");
49
+
50
+ var _removeArrayItem = _interopRequireDefault(require("../../../shared-utils/removeArrayItem"));
51
+
52
+ var _polyline = require("./polyline");
53
+
54
+ var Model = /*#__PURE__*/function () {
55
+ function Model(params) {
56
+ (0, _classCallCheck2["default"])(this, Model);
57
+ (0, _defineProperty2["default"])(this, "lines", []);
58
+ (0, _defineProperty2["default"])(this, "points", []);
59
+ (0, _defineProperty2["default"])(this, "polylines", []);
60
+ (0, _defineProperty2["default"])(this, "hook", new _five.Subscribe());
61
+ this.params = params;
62
+ }
63
+
64
+ (0, _createClass2["default"])(Model, [{
65
+ key: "addLine",
66
+ value: function addLine(line) {
67
+ var _line$points = (0, _slicedToArray2["default"])(line.points, 2),
68
+ startPoint = _line$points[0],
69
+ endPoint = _line$points[1];
70
+
71
+ if (!startPoint || !endPoint) return this;
72
+ if (!this.includes(startPoint)) this.points.push(startPoint);
73
+ if (!this.includes(endPoint)) this.points.push(endPoint);
74
+ this.lines.push(line);
75
+ var lastPolyline = this.polylines.find(function (polyline) {
76
+ return !!polyline.getNext(line);
77
+ });
78
+
79
+ if (lastPolyline) {
80
+ lastPolyline.push(line);
81
+ } else {
82
+ var polyline = new _polyline.Polyline();
83
+ polyline.push(line);
84
+ this.polylines.push(polyline);
85
+ }
86
+
87
+ this.hook.emit('lineAdded', line);
88
+ }
89
+ }, {
90
+ key: "removeLineByID",
91
+ value: function removeLineByID(lineID) {
92
+ var line = this.getLineByID(lineID);
93
+ if (line) this.removeLine(line);
94
+ }
95
+ }, {
96
+ key: "removeLine",
97
+ value: function removeLine(line) {
98
+ // handle polyline
99
+ var polyline = this.polylines.find(function (polyline) {
100
+ return polyline.lines.includes(line);
101
+ });
102
+
103
+ if (polyline) {
104
+ if (polyline.lines.slice(-1)[0] !== line) throw new Error('不能从中间删除线段');
105
+ polyline.pop();
106
+ if (polyline.lines.length === 0) (0, _removeArrayItem["default"])(polyline, this.polylines);
107
+ }
108
+
109
+ var _line$points2 = (0, _slicedToArray2["default"])(line.points, 2),
110
+ point = _line$points2[0],
111
+ anotherPoint = _line$points2[1];
112
+
113
+ if (point.lines.length === 0) (0, _removeArrayItem["default"])(point, this.points);
114
+ if (anotherPoint.lines.length === 0) (0, _removeArrayItem["default"])(anotherPoint, this.points);
115
+ (0, _removeArrayItem["default"])(line, this.lines);
116
+ line.clear();
117
+ this.hook.emit('lineRemoved', line);
118
+ return this;
119
+ }
120
+ }, {
121
+ key: "mergeModel",
122
+ value: function mergeModel(model) {
123
+ var _this = this;
124
+
125
+ model.lines.forEach(function (line) {
126
+ return _this.addLine(line);
127
+ });
128
+ }
129
+ }, {
130
+ key: "includes",
131
+ value: function includes(item) {
132
+ if (item.type === 'point') {
133
+ return this.points.find(function (_ref) {
134
+ var id = _ref.id;
135
+ return id === item.id;
136
+ }) !== undefined;
137
+ } else if (item.type === 'line') {
138
+ return this.lines.find(function (_ref2) {
139
+ var id = _ref2.id;
140
+ return id === item.id;
141
+ }) !== undefined;
142
+ }
143
+ }
144
+ }, {
145
+ key: "getPointByID",
146
+ value: function getPointByID(id) {
147
+ return this.points.find(function (_ref3) {
148
+ var _id = _ref3.id;
149
+ return _id === id;
150
+ });
151
+ }
152
+ }, {
153
+ key: "getLineByID",
154
+ value: function getLineByID(id) {
155
+ return this.lines.find(function (_ref4) {
156
+ var _id = _ref4.id;
157
+ return _id === id;
158
+ });
159
+ }
160
+ }, {
161
+ key: "getClosestPoint",
162
+ value: function getClosestPoint() {}
163
+ }, {
164
+ key: "parse",
165
+ value: function parse(data) {
166
+ var _this2 = this,
167
+ _this$points,
168
+ _this$lines,
169
+ _this$polylines;
170
+
171
+ var points = data.points.map(function (_ref5) {
172
+ var id = _ref5.id,
173
+ position = _ref5.position;
174
+ var point = new _point["default"](position);
175
+ point.id = id;
176
+ return point;
177
+ });
178
+ var lines = data.lines.map(function (data) {
179
+ var _data$points = (0, _slicedToArray2["default"])(data.points, 2),
180
+ pointID = _data$points[0],
181
+ anotherPointID = _data$points[1];
182
+
183
+ var point = _this2.getPointByID.call({
184
+ points: points
185
+ }, pointID);
186
+
187
+ var anotherPoint = _this2.getPointByID.call({
188
+ points: points
189
+ }, anotherPointID);
190
+
191
+ if (!point || !anotherPoint) throw new Error('线上的点不存在');
192
+ var line = new _line["default"](point, anotherPoint, _this2);
193
+ line.id = data.id;
194
+ return line;
195
+ });
196
+ var polylines = data.polylines.map(function (polylineJson) {
197
+ var polyline = new _polyline.Polyline();
198
+ polylineJson.lines.forEach(function (lineID) {
199
+ var line = lines.find(function (_ref6) {
200
+ var id = _ref6.id;
201
+ return id === lineID;
202
+ });
203
+ line && polyline.push(line);
204
+ });
205
+ return polyline;
206
+ });
207
+
208
+ (_this$points = this.points).splice.apply(_this$points, [0, this.points.length].concat((0, _toConsumableArray2["default"])(points)));
209
+
210
+ (_this$lines = this.lines).splice.apply(_this$lines, [0, this.lines.length].concat((0, _toConsumableArray2["default"])(lines)));
211
+
212
+ (_this$polylines = this.polylines).splice.apply(_this$polylines, [0, this.polylines.length].concat((0, _toConsumableArray2["default"])(polylines)));
213
+
214
+ return this;
215
+ }
216
+ }, {
217
+ key: "toJson",
218
+ value: function toJson() {
219
+ return {
220
+ points: this.points.map(function (point) {
221
+ return point.toJson();
222
+ }),
223
+ lines: this.lines.map(function (line) {
224
+ return line.toJson();
225
+ }),
226
+ polylines: this.polylines.map(function (polyline) {
227
+ return polyline.toJson();
228
+ }).filter(function (polylines) {
229
+ return polylines.lines.length > 0;
230
+ })
231
+ };
232
+ }
233
+ }]);
234
+ return Model;
235
+ }();
236
+
237
+ 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,123 @@
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.object.to-string.js");
15
+
16
+ require("core-js/modules/es.array.includes.js");
17
+
18
+ require("core-js/modules/es.string.includes.js");
19
+
20
+ require("core-js/modules/es.array.map.js");
21
+
22
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
23
+
24
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
25
+
26
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
+
28
+ var _polyline = require("./polyline");
29
+
30
+ var _uuid = _interopRequireDefault(require("../../../shared-utils/uuid"));
31
+
32
+ var _line = require("../utils/line");
33
+
34
+ var _five = require("@realsee/five");
35
+
36
+ var _distanceDom = require("../utils/distanceDom");
37
+
38
+ var Line = /*#__PURE__*/function () {
39
+ function Line(point, anotherPoint, model) {
40
+ var _this = this;
41
+
42
+ (0, _classCallCheck2["default"])(this, Line);
43
+ (0, _defineProperty2["default"])(this, "selected", false);
44
+ (0, _defineProperty2["default"])(this, "type", 'line');
45
+ this.id = (0, _uuid["default"])();
46
+ this.model = model;
47
+ if (point.id === anotherPoint.id) throw new Error('无效的线段, 一个点无法构成线段');
48
+ this.hook = new _five.Subscribe();
49
+ this.points = [point, anotherPoint];
50
+ this.mesh = (0, _line.creatLineMesh)(this, 'normal');
51
+ this.lightMesh = (0, _line.creatLineMesh)(this, 'light');
52
+ this.distanceItem = (0, _distanceDom.creatDistanceItem)({
53
+ line: this,
54
+ clickCallback: function clickCallback() {
55
+ return _this.hook.emit('selected', _this);
56
+ },
57
+ userDistanceItem: this.model.params.userDistanceItemCreator ? this.model.params.userDistanceItemCreator() : undefined
58
+ });
59
+ point.lines.push(this);
60
+ anotherPoint.lines.push(this);
61
+ }
62
+
63
+ (0, _createClass2["default"])(Line, [{
64
+ key: "clear",
65
+ value: function clear() {
66
+ this.selected = false;
67
+ this.polyline = undefined;
68
+ }
69
+ }, {
70
+ key: "getPolyline",
71
+ value: function getPolyline() {
72
+ var _this2 = this;
73
+
74
+ if (this.polyline) return this.polyline;
75
+ var modelPolyline = this.model.polylines.find(function (polyline) {
76
+ return polyline.lines.includes(_this2);
77
+ });
78
+ this.polyline = modelPolyline;
79
+ if (modelPolyline) return modelPolyline;
80
+ var polyline = new _polyline.Polyline();
81
+ polyline.push(this);
82
+ return polyline;
83
+ }
84
+ }, {
85
+ key: "findAnotherPoint",
86
+ value: function findAnotherPoint(point) {
87
+ return this.points.find(function (_ref) {
88
+ var id = _ref.id;
89
+ return id !== point.id;
90
+ });
91
+ }
92
+ }, {
93
+ key: "toJson",
94
+ value: function toJson() {
95
+ return {
96
+ id: this.id,
97
+ points: this.points.map(function (_ref2) {
98
+ var id = _ref2.id;
99
+ return id;
100
+ })
101
+ };
102
+ }
103
+ }, {
104
+ key: "toCompletelyJson",
105
+ value: function toCompletelyJson() {
106
+ return {
107
+ id: this.id,
108
+ points: this.points.map(function (point) {
109
+ return point.toJson();
110
+ })
111
+ };
112
+ }
113
+ }, {
114
+ key: "clone",
115
+ value: function clone() {
116
+ var line = new Line(this.points[0].clone(), this.points[1].clone(), this.model);
117
+ return line;
118
+ }
119
+ }]);
120
+ return Line;
121
+ }();
122
+
123
+ 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,72 @@
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
+ require("core-js/modules/es.object.to-string.js");
15
+
16
+ require("core-js/modules/es.promise.js");
17
+
18
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
19
+
20
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
21
+
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
+
24
+ var _three = require("three");
25
+
26
+ var _uuid = _interopRequireDefault(require("../../../shared-utils/uuid"));
27
+
28
+ var _removeArrayItem = _interopRequireDefault(require("../../../shared-utils/removeArrayItem"));
29
+
30
+ var Point = /*#__PURE__*/function () {
31
+ function Point(position) {
32
+ (0, _classCallCheck2["default"])(this, Point);
33
+ (0, _defineProperty2["default"])(this, "type", 'point');
34
+ this.id = (0, _uuid["default"])();
35
+ this.lines = [];
36
+ this.position = new _three.Vector3();
37
+ position instanceof _three.Vector3 ? this.position.copy(position) : this.position.fromArray(position);
38
+ }
39
+
40
+ (0, _createClass2["default"])(Point, [{
41
+ key: "toJson",
42
+ value: function toJson() {
43
+ return {
44
+ id: this.id,
45
+ lines: this.lines.map(function (_ref) {
46
+ var id = _ref.id;
47
+ return id;
48
+ }),
49
+ position: this.position.toArray()
50
+ };
51
+ }
52
+ }, {
53
+ key: "addLine",
54
+ value: function addLine(line) {
55
+ this.lines.push(line);
56
+ }
57
+ }, {
58
+ key: "removeLine",
59
+ value: function removeLine(line) {
60
+ (0, _removeArrayItem["default"])(line, this.lines);
61
+ }
62
+ }, {
63
+ key: "clone",
64
+ value: function clone() {
65
+ var point = new Point(this.position);
66
+ return point;
67
+ }
68
+ }]);
69
+ return Point;
70
+ }();
71
+
72
+ 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,111 @@
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.object.to-string.js");
21
+
22
+ require("core-js/modules/es.array.map.js");
23
+
24
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
25
+
26
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
27
+
28
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
29
+
30
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
31
+
32
+ var _uuid = _interopRequireDefault(require("../../../shared-utils/uuid"));
33
+
34
+ var Polyline = /*#__PURE__*/function () {
35
+ function Polyline() {
36
+ (0, _classCallCheck2["default"])(this, Polyline);
37
+ (0, _defineProperty2["default"])(this, "id", (0, _uuid["default"])());
38
+ (0, _defineProperty2["default"])(this, "points", []);
39
+ (0, _defineProperty2["default"])(this, "lines", []);
40
+ }
41
+
42
+ (0, _createClass2["default"])(Polyline, [{
43
+ key: "push",
44
+ value: function push(line) {
45
+ var _this$points;
46
+
47
+ var next = this.getNext(line);
48
+ if (!next) throw new Error('当前线段于上一条线段无法构成折线');
49
+ this.lines.push(next.line);
50
+
51
+ (_this$points = this.points).push.apply(_this$points, (0, _toConsumableArray2["default"])(next.points));
52
+
53
+ return this.lines.length;
54
+ }
55
+ }, {
56
+ key: "pop",
57
+ value: function pop() {
58
+ var lastPoint = this.lines.pop();
59
+ var polylineLength = this.lines.length;
60
+ if (polylineLength === 0) this.points.slice(0, this.points.length);else this.points.pop();
61
+ return lastPoint;
62
+ }
63
+ }, {
64
+ key: "getNext",
65
+ value: function getNext(line) {
66
+ var lastPoint = this.points.slice(-1)[0];
67
+ if (!lastPoint) return {
68
+ line: line,
69
+ points: line.points
70
+ };
71
+ if (!line.points.includes(lastPoint)) return null;
72
+ var nextPoint = line.points.find(function (point) {
73
+ return point !== lastPoint;
74
+ });
75
+ if (!nextPoint) return null;
76
+ return {
77
+ line: line,
78
+ points: [nextPoint]
79
+ };
80
+ }
81
+ }, {
82
+ key: "toJson",
83
+ value: function toJson() {
84
+ return {
85
+ id: this.id,
86
+ lines: this.lines.map(function (line) {
87
+ return line.id;
88
+ }),
89
+ points: this.points.map(function (point) {
90
+ return point.id;
91
+ })
92
+ };
93
+ }
94
+ }, {
95
+ key: "toCompletelyJson",
96
+ value: function toCompletelyJson() {
97
+ return {
98
+ id: this.id,
99
+ points: this.points.map(function (point) {
100
+ return point.toJson();
101
+ }),
102
+ lines: this.lines.map(function (line) {
103
+ return line.toCompletelyJson();
104
+ })
105
+ };
106
+ }
107
+ }]);
108
+ return Polyline;
109
+ }();
110
+
111
+ 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;