@realsee/dnalogel 0.1.7-alpha.2 → 0.1.7-alpha.6

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 (157) 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/PrXel3aqGbp34JQn.js +139 -1
  9. package/data/_vLykj3NWrllMrG06.d.ts +95 -0
  10. package/data/_vLykj3NWrllMrG06.js +1 -0
  11. package/data/vLykj3NWrllMrG06.js +335 -71
  12. package/libs/gltf-viewer/Subscribe.js +2 -0
  13. package/libs/gltf-viewer/coordsToDirection.d.ts +1 -1
  14. package/libs/gltf-viewer/index.d.ts +18 -0
  15. package/libs/gltf-viewer/index.js +133 -45
  16. package/package.json +3 -3
  17. package/plugins/CSS3DRenderPlugin/components/Marker/index.js +2 -0
  18. package/plugins/CSS3DRenderPlugin/index.js +2 -2
  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/Controller.js +1 -0
  25. package/plugins/ModelRoomLabelPlugin/RoomLabelItem.js +5 -5
  26. package/plugins/ModelRoomLabelPlugin/RoomLabelItems.js +2 -2
  27. package/plugins/ModelRoomLabelPlugin/index.d.ts +4 -0
  28. package/plugins/ModelRoomLabelPlugin/index.js +7 -2
  29. package/plugins/ModelTVVideoPlugin/index.js +4 -2
  30. package/plugins/ModelViewPlugin/index.js +2 -2
  31. package/plugins/PanoCursorRaycasterPlugin/index.js +2 -0
  32. package/plugins/PanoMeasurePlugin/Controller/BaseController.d.ts +36 -0
  33. package/plugins/PanoMeasurePlugin/Controller/BaseController.js +105 -0
  34. package/plugins/PanoMeasurePlugin/Controller/EditController.d.ts +52 -0
  35. package/plugins/PanoMeasurePlugin/Controller/EditController.js +343 -0
  36. package/plugins/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +12 -0
  37. package/plugins/PanoMeasurePlugin/Controller/ShortcutKeyController.js +69 -0
  38. package/plugins/PanoMeasurePlugin/Controller/WatchController.d.ts +25 -0
  39. package/plugins/PanoMeasurePlugin/Controller/WatchController.js +373 -0
  40. package/plugins/PanoMeasurePlugin/Controller/index.d.ts +61 -0
  41. package/plugins/PanoMeasurePlugin/Controller/index.js +230 -0
  42. package/plugins/PanoMeasurePlugin/Model/index.d.ts +38 -0
  43. package/plugins/PanoMeasurePlugin/Model/index.js +237 -0
  44. package/plugins/PanoMeasurePlugin/Model/line.d.ts +30 -0
  45. package/plugins/PanoMeasurePlugin/Model/line.js +123 -0
  46. package/plugins/PanoMeasurePlugin/Model/point.d.ts +16 -0
  47. package/plugins/PanoMeasurePlugin/Model/point.js +72 -0
  48. package/plugins/PanoMeasurePlugin/Model/polyline.d.ts +16 -0
  49. package/plugins/PanoMeasurePlugin/Model/polyline.js +111 -0
  50. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.d.ts +2 -0
  51. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.js +11 -0
  52. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +2 -0
  53. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.js +11 -0
  54. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +2 -0
  55. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.js +11 -0
  56. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +22 -0
  57. package/plugins/PanoMeasurePlugin/Modules/DeleteDom/index.js +184 -0
  58. package/plugins/PanoMeasurePlugin/Modules/FiveHelper.d.ts +11 -0
  59. package/plugins/PanoMeasurePlugin/Modules/FiveHelper.js +68 -0
  60. package/plugins/PanoMeasurePlugin/Modules/GuideController.d.ts +18 -0
  61. package/plugins/PanoMeasurePlugin/Modules/GuideController.js +107 -0
  62. package/plugins/PanoMeasurePlugin/Modules/Magnifier.d.ts +24 -0
  63. package/plugins/PanoMeasurePlugin/Modules/Magnifier.js +139 -0
  64. package/plugins/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +6 -0
  65. package/plugins/PanoMeasurePlugin/Modules/UIController/HTML.js +26 -0
  66. package/plugins/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +18 -0
  67. package/plugins/PanoMeasurePlugin/Modules/UIController/MainBtnController.js +169 -0
  68. package/plugins/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +12 -0
  69. package/plugins/PanoMeasurePlugin/Modules/UIController/Revoke/index.js +59 -0
  70. package/plugins/PanoMeasurePlugin/Modules/UIController/index.d.ts +16 -0
  71. package/plugins/PanoMeasurePlugin/Modules/UIController/index.js +125 -0
  72. package/plugins/PanoMeasurePlugin/Modules/UIController/style.d.ts +17 -0
  73. package/plugins/PanoMeasurePlugin/Modules/UIController/style.js +103 -0
  74. package/plugins/PanoMeasurePlugin/index.d.ts +7 -0
  75. package/plugins/PanoMeasurePlugin/index.js +20 -0
  76. package/plugins/PanoMeasurePlugin/typings/data.d.ts +28 -0
  77. package/plugins/PanoMeasurePlugin/typings/data.js +7 -0
  78. package/plugins/PanoMeasurePlugin/typings/event.type.d.ts +28 -0
  79. package/plugins/PanoMeasurePlugin/typings/event.type.js +7 -0
  80. package/plugins/PanoMeasurePlugin/typings/utils.type.d.ts +1 -0
  81. package/plugins/PanoMeasurePlugin/typings/utils.type.js +7 -0
  82. package/plugins/PanoMeasurePlugin/utils/clearGroup.d.ts +2 -0
  83. package/plugins/PanoMeasurePlugin/utils/clearGroup.js +16 -0
  84. package/plugins/PanoMeasurePlugin/utils/constants.d.ts +4 -0
  85. package/plugins/PanoMeasurePlugin/utils/constants.js +47 -0
  86. package/plugins/PanoMeasurePlugin/utils/distanceDom.d.ts +28 -0
  87. package/plugins/PanoMeasurePlugin/utils/distanceDom.js +147 -0
  88. package/plugins/PanoMeasurePlugin/utils/findAssociatedLines.d.ts +2 -0
  89. package/plugins/PanoMeasurePlugin/utils/findAssociatedLines.js +39 -0
  90. package/plugins/PanoMeasurePlugin/utils/findClosestPoint.d.ts +10 -0
  91. package/plugins/PanoMeasurePlugin/utils/findClosestPoint.js +49 -0
  92. package/plugins/PanoMeasurePlugin/utils/getIntersectionFromEvent.d.ts +4 -0
  93. package/plugins/PanoMeasurePlugin/utils/getIntersectionFromEvent.js +20 -0
  94. package/plugins/PanoMeasurePlugin/utils/getPointFromHammerEvent.d.ts +10 -0
  95. package/plugins/PanoMeasurePlugin/utils/getPointFromHammerEvent.js +33 -0
  96. package/plugins/PanoMeasurePlugin/utils/ironbox.d.ts +1 -0
  97. package/plugins/PanoMeasurePlugin/utils/ironbox.js +14 -0
  98. package/plugins/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +2 -0
  99. package/plugins/PanoMeasurePlugin/utils/isNDCPointInScreen.js +16 -0
  100. package/plugins/PanoMeasurePlugin/utils/line.d.ts +17 -0
  101. package/plugins/PanoMeasurePlugin/utils/line.js +61 -0
  102. package/plugins/PanoMeasurePlugin/utils/math.d.ts +17 -0
  103. package/plugins/PanoMeasurePlugin/utils/math.js +57 -0
  104. package/plugins/PanoMeasurePlugin/utils/mouseGroup.d.ts +2 -0
  105. package/plugins/PanoMeasurePlugin/utils/mouseGroup.js +42 -0
  106. package/plugins/PanoMeasurePlugin/utils/ndc2Screen.d.ts +5 -0
  107. package/plugins/PanoMeasurePlugin/utils/ndc2Screen.js +16 -0
  108. package/plugins/PanoRulerPlugin/index.d.ts +4 -0
  109. package/plugins/PanoRulerPlugin/index.js +8 -3
  110. package/plugins/TreasurePlugin/Controller.js +2 -2
  111. package/plugins/TreasurePlugin/TreasureOpenAnime.js +2 -2
  112. package/plugins/floorplan/Assets/floorplanExtraObject.d.ts +1 -1
  113. package/plugins/floorplan/Assets/floorplanExtraObject.js +3 -3
  114. package/plugins/floorplan/ModelFloorplanPlugin/Controller.d.ts +5 -2
  115. package/plugins/floorplan/ModelFloorplanPlugin/Controller.js +22 -11
  116. package/plugins/floorplan/ModelFloorplanPlugin/components/Camera.js +4 -4
  117. package/plugins/floorplan/ModelFloorplanPlugin/components/Compass.js +5 -5
  118. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RoomHighlight.js +2 -2
  119. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RoomLabels.js +2 -2
  120. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RoomMaterial.d.ts +11 -0
  121. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RoomMaterial.js +174 -0
  122. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RuleLabels.d.ts +8 -0
  123. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RuleLabels.js +182 -0
  124. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/index.d.ts +2 -0
  125. package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/index.js +14 -2
  126. package/plugins/floorplan/ModelFloorplanPlugin/components/index.d.ts +3 -0
  127. package/plugins/floorplan/ModelFloorplanPlugin/components/index.js +1 -1
  128. package/plugins/floorplan/ModelFloorplanPlugin/typings/utility.d.ts +2 -0
  129. package/plugins/floorplan/ModelFloorplanPlugin/typings/utility.js +7 -0
  130. package/plugins/floorplan/ModelFloorplanPlugin/utils/constant.d.ts +1 -1
  131. package/plugins/floorplan/ModelFloorplanPlugin/utils/constant.js +1 -1
  132. package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/Camera.js +3 -2
  133. package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/Camera.style.js +4 -4
  134. package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/NowFloor/ExtraObjects.js +2 -2
  135. package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/NowFloor/RoomHighlight.js +2 -2
  136. package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/NowFloor/index.js +2 -2
  137. package/plugins/floorplan/PanoFloorplanRadarPlugin/Content/index.js +2 -2
  138. package/plugins/floorplan/TopviewFloorplanPlugin/Controller.d.ts +3 -0
  139. package/plugins/floorplan/TopviewFloorplanPlugin/Controller.js +16 -6
  140. package/plugins/floorplan/index.d.ts +4 -0
  141. package/plugins/floorplan/index.js +13 -0
  142. package/plugins/floorplan/typings/floorplanData.d.ts +2 -0
  143. package/plugins/floorplan/typings/floorplanServerData.d.ts +3 -1
  144. package/plugins/floorplan/typings/floorplanServerData.js +3 -3
  145. package/plugins/floorplan/utils/formatData.js +3 -2
  146. package/plugins/floorplan/utils/formatPosition.js +2 -0
  147. package/shared-utils/Subscribe.js +4 -2
  148. package/shared-utils/animationFrame/BetterTween.js +5 -1
  149. package/shared-utils/changeModelCanvasOpacity.d.ts +2 -0
  150. package/shared-utils/{changeModelCanvansOpacity.js → changeModelCanvasOpacity.js} +2 -2
  151. package/shared-utils/filter.js +4 -2
  152. package/shared-utils/math/planimetry.js +2 -0
  153. package/shared-utils/removeArrayItem.d.ts +7 -0
  154. package/shared-utils/removeArrayItem.js +22 -0
  155. package/shared-utils/three/loadTexture.d.ts +2 -2
  156. package/shared-utils/three/loadTexture.js +21 -2
  157. 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,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;