@realsee/dnalogel 2.0.0-alpha.8 → 2.0.0-alpha.9

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 (241) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/dist/CSS3DRenderPlugin/index.d.ts +49 -0
  3. package/dist/CSS3DRenderPlugin/index.js +233 -0
  4. package/dist/CSS3DRenderPlugin/utils/createResizeObserver.d.ts +7 -0
  5. package/dist/CameraMovementPlugin/index.d.ts +7 -0
  6. package/dist/CameraMovementPlugin/index.js +302 -0
  7. package/dist/CameraMovementPlugin/typing.d.ts +68 -0
  8. package/dist/ModelChassisCompassPlugin/index.d.ts +19 -0
  9. package/dist/ModelChassisCompassPlugin/index.js +142 -0
  10. package/dist/ModelEntryDoorGuidePlugin/index.d.ts +26 -0
  11. package/dist/ModelEntryDoorGuidePlugin/index.js +196 -0
  12. package/dist/ModelRoomLabelPlugin/Assets/roomLabelBg.d.ts +1 -0
  13. package/dist/ModelRoomLabelPlugin/Controller.d.ts +36 -0
  14. package/dist/ModelRoomLabelPlugin/index.d.ts +12 -0
  15. package/dist/ModelRoomLabelPlugin/index.js +461 -0
  16. package/dist/ModelRoomLabelPlugin/typings.d.ts +35 -0
  17. package/dist/ModelRoomLabelPlugin/utils/parseData.d.ts +3 -0
  18. package/dist/ModelViewPlugin/index.d.ts +17 -0
  19. package/dist/ModelViewPlugin/index.js +187 -0
  20. package/dist/PanoCompassPlugin/Assets/roomInfoIcon.d.ts +1 -0
  21. package/dist/PanoCompassPlugin/getRoomInfoInstance.d.ts +8 -0
  22. package/dist/PanoCompassPlugin/index.d.ts +51 -0
  23. package/dist/PanoCompassPlugin/index.js +523 -0
  24. package/dist/PanoCursorRaycasterPlugin/index.d.ts +48 -0
  25. package/dist/PanoCursorRaycasterPlugin/index.js +88 -0
  26. package/dist/PanoMeasurePlugin/Controller/BaseController.d.ts +36 -0
  27. package/dist/PanoMeasurePlugin/Controller/EditController.d.ts +52 -0
  28. package/dist/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +12 -0
  29. package/dist/PanoMeasurePlugin/Controller/WatchController.d.ts +25 -0
  30. package/dist/PanoMeasurePlugin/Controller/index.d.ts +61 -0
  31. package/dist/PanoMeasurePlugin/Model/index.d.ts +38 -0
  32. package/dist/PanoMeasurePlugin/Model/line.d.ts +30 -0
  33. package/dist/PanoMeasurePlugin/Model/point.d.ts +16 -0
  34. package/dist/PanoMeasurePlugin/Model/polyline.d.ts +16 -0
  35. package/dist/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.d.ts +2 -0
  36. package/dist/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +2 -0
  37. package/dist/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +2 -0
  38. package/dist/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +22 -0
  39. package/dist/PanoMeasurePlugin/Modules/FiveHelper.d.ts +11 -0
  40. package/dist/PanoMeasurePlugin/Modules/GuideController.d.ts +18 -0
  41. package/dist/PanoMeasurePlugin/Modules/Magnifier.d.ts +24 -0
  42. package/dist/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +6 -0
  43. package/dist/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +18 -0
  44. package/dist/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +12 -0
  45. package/dist/PanoMeasurePlugin/Modules/UIController/index.d.ts +16 -0
  46. package/dist/PanoMeasurePlugin/Modules/UIController/style.d.ts +17 -0
  47. package/dist/PanoMeasurePlugin/index.d.ts +7 -0
  48. package/dist/PanoMeasurePlugin/index.js +4789 -0
  49. package/dist/PanoMeasurePlugin/typings/data.d.ts +28 -0
  50. package/dist/PanoMeasurePlugin/typings/event.type.d.ts +28 -0
  51. package/dist/PanoMeasurePlugin/typings/utils.type.d.ts +1 -0
  52. package/dist/PanoMeasurePlugin/utils/clearGroup.d.ts +2 -0
  53. package/dist/PanoMeasurePlugin/utils/constants.d.ts +4 -0
  54. package/dist/PanoMeasurePlugin/utils/distanceDom.d.ts +28 -0
  55. package/dist/PanoMeasurePlugin/utils/findAssociatedLines.d.ts +2 -0
  56. package/dist/PanoMeasurePlugin/utils/findClosestPoint.d.ts +10 -0
  57. package/dist/PanoMeasurePlugin/utils/getIntersectionFromEvent.d.ts +4 -0
  58. package/dist/PanoMeasurePlugin/utils/getPointFromHammerEvent.d.ts +10 -0
  59. package/dist/PanoMeasurePlugin/utils/ironbox.d.ts +1 -0
  60. package/dist/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +2 -0
  61. package/dist/PanoMeasurePlugin/utils/line.d.ts +17 -0
  62. package/dist/PanoMeasurePlugin/utils/math.d.ts +17 -0
  63. package/dist/PanoMeasurePlugin/utils/mouseGroup.d.ts +2 -0
  64. package/dist/PanoMeasurePlugin/utils/ndc2Screen.d.ts +5 -0
  65. package/dist/PanoRulerPlugin/index.d.ts +31 -0
  66. package/dist/PanoRulerPlugin/index.js +610 -0
  67. package/dist/PanoRulerPlugin/style.d.ts +2 -0
  68. package/dist/PanoRulerPlugin/typings.d.ts +21 -0
  69. package/dist/floorplan/Assets/camera.d.ts +1 -0
  70. package/dist/floorplan/Assets/floorplanExtraObject.d.ts +1 -0
  71. package/dist/floorplan/ModelFloorplanPlugin/Assets/compass.d.ts +1 -0
  72. package/dist/floorplan/ModelFloorplanPlugin/Controller.d.ts +104 -0
  73. package/dist/floorplan/ModelFloorplanPlugin/index.d.ts +9 -0
  74. package/dist/floorplan/ModelFloorplanPlugin/index.js +3827 -0
  75. package/dist/floorplan/ModelFloorplanPlugin/typings/events.type.d.ts +23 -0
  76. package/dist/floorplan/ModelFloorplanPlugin/utils/constant.d.ts +15 -0
  77. package/dist/floorplan/ModelFloorplanPlugin/utils/correctFiveState.d.ts +14 -0
  78. package/dist/floorplan/PanoFloorplanRadarPlugin/Controller.d.ts +28 -0
  79. package/dist/floorplan/PanoFloorplanRadarPlugin/index.d.ts +8 -0
  80. package/dist/floorplan/PanoFloorplanRadarPlugin/index.js +1673 -0
  81. package/dist/floorplan/TopviewFloorplanPlugin/Controller.d.ts +61 -0
  82. package/dist/floorplan/TopviewFloorplanPlugin/index.d.ts +5 -0
  83. package/dist/floorplan/TopviewFloorplanPlugin/index.js +3466 -0
  84. package/dist/floorplan/TopviewFloorplanPlugin/style.d.ts +1 -0
  85. package/dist/floorplan/constant.d.ts +5 -0
  86. package/dist/floorplan/typings/floorplanData.d.ts +137 -0
  87. package/dist/floorplan/typings/floorplanServerData.d.ts +131 -0
  88. package/dist/floorplan/typings/utility.d.ts +2 -0
  89. package/dist/floorplan/utils/formatData.d.ts +5 -0
  90. package/dist/floorplan/utils/formatPosition.d.ts +36 -0
  91. package/dist/index.d.ts +24 -0
  92. package/dist/index.es.js +11887 -0
  93. package/dist/index.js +11925 -0
  94. package/dist/index.umd.js +11920 -0
  95. package/dist/shared-utils/Preloader.d.ts +6 -0
  96. package/dist/shared-utils/Subscribe.d.ts +45 -0
  97. package/dist/shared-utils/animationFrame/BetterTween.d.ts +11 -0
  98. package/dist/shared-utils/animationFrame/calculateProgress.d.ts +8 -0
  99. package/dist/shared-utils/animationFrame/formatRad.d.ts +15 -0
  100. package/dist/shared-utils/animationFrame/index.d.ts +15 -0
  101. package/dist/shared-utils/animationFrame/tween.d.ts +75 -0
  102. package/dist/shared-utils/changeModelCanvasOpacity.d.ts +2 -0
  103. package/dist/shared-utils/createCanvasTextTexture.d.ts +8 -0
  104. package/dist/shared-utils/createLine/index.d.ts +3 -0
  105. package/dist/shared-utils/debounce.d.ts +6 -0
  106. package/dist/shared-utils/equal.d.ts +11 -0
  107. package/dist/shared-utils/filter.d.ts +27 -0
  108. package/dist/shared-utils/five/changeMode.d.ts +2 -0
  109. package/dist/shared-utils/five/useFivePlugin.d.ts +1 -0
  110. package/dist/shared-utils/formatRad.d.ts +7 -0
  111. package/dist/shared-utils/getPxmm.d.ts +11 -0
  112. package/dist/shared-utils/getRandomColor.d.ts +1 -0
  113. package/dist/shared-utils/isNil.d.ts +10 -0
  114. package/dist/shared-utils/isTruelyObject.d.ts +18 -0
  115. package/dist/shared-utils/math/evenNumber.d.ts +3 -0
  116. package/dist/shared-utils/math/planimetry.d.ts +116 -0
  117. package/dist/shared-utils/math/rad2Deg.d.ts +1 -0
  118. package/dist/shared-utils/nearlyEqual.d.ts +7 -0
  119. package/dist/shared-utils/nextFrame.d.ts +1 -0
  120. package/dist/shared-utils/noop.d.ts +5 -0
  121. package/dist/shared-utils/object3d2LocalMatrix.d.ts +12 -0
  122. package/dist/shared-utils/px2rem.d.ts +1 -0
  123. package/dist/shared-utils/removeArrayItem.d.ts +7 -0
  124. package/dist/shared-utils/tap.d.ts +8 -0
  125. package/dist/shared-utils/three/centerPoint.d.ts +2 -0
  126. package/dist/shared-utils/three/getExtraModelLoader.d.ts +6 -0
  127. package/dist/shared-utils/three/getNormal.d.ts +2 -0
  128. package/dist/shared-utils/three/getTextureLoader.d.ts +6 -0
  129. package/dist/shared-utils/three/loadFbxObj.d.ts +2 -0
  130. package/dist/shared-utils/three/loadTexture.d.ts +2 -0
  131. package/dist/shared-utils/three/transformPositionToVector3.d.ts +7 -0
  132. package/dist/shared-utils/three/transfromToMeshBasicMaterial.d.ts +2 -0
  133. package/dist/shared-utils/throttle.d.ts +7 -0
  134. package/dist/shared-utils/to.d.ts +8 -0
  135. package/dist/shared-utils/useDebounce.d.ts +8 -0
  136. package/dist/shared-utils/useThrottle.d.ts +8 -0
  137. package/dist/shared-utils/uuid.d.ts +4 -0
  138. package/dist/shared-utils/vectorTocoordinates.d.ts +7 -0
  139. package/dist/typings/math.type.d.ts +44 -0
  140. package/dist/typings/utils.type.d.ts +2 -0
  141. package/docs/classes/ModelRoomLabelController.html +6 -6
  142. package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +1 -1
  143. package/docs/enums/ModelFloorplanErrorType.html +1 -1
  144. package/docs/interfaces/LineJson.html +1 -1
  145. package/docs/interfaces/ModelChassisCompassPluginData.html +1 -1
  146. package/docs/interfaces/ModelChassisCompassPluginExportType.html +1 -1
  147. package/docs/interfaces/ModelChassisCompassPluginParameterType.html +1 -1
  148. package/docs/interfaces/ModelEntryDoorGuidePluginData.html +1 -1
  149. package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +1 -1
  150. package/docs/interfaces/ModelFloorplanParameterType.html +1 -1
  151. package/docs/interfaces/ModelFloorplanViewEvent.html +2 -2
  152. package/docs/interfaces/ModelRoomLabelPluginData.html +1 -1
  153. package/docs/interfaces/PanoCompassPluginData.html +1 -1
  154. package/docs/interfaces/PanoCompassPluginParameterType.html +1 -1
  155. package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +6 -6
  156. package/docs/interfaces/PanoRulerPluginExportType.html +1 -1
  157. package/docs/interfaces/PanoRulerPluginOptions.html +1 -1
  158. package/docs/interfaces/PanoRulerPluginParameterType.html +1 -1
  159. package/docs/interfaces/PointJson.html +1 -1
  160. package/docs/interfaces/RoomLabel.html +7 -7
  161. package/docs/interfaces/TopviewFloorplanPluginParameterType.html +1 -1
  162. package/docs/modules.html +11 -11
  163. package/libs/ModelRoomLabelPlugin/Controller.js +2 -2
  164. package/libs/ModelRoomLabelPlugin/RoomLabelItem.js +121 -0
  165. package/libs/ModelRoomLabelPlugin/RoomLabelItems.js +253 -0
  166. package/libs/PanoMeasurePlugin/Controller/EditController.js +1 -1
  167. package/libs/floorplan/Components/BaseImage.js +217 -0
  168. package/libs/floorplan/Components/Normalmage.js +63 -0
  169. package/libs/floorplan/Components/RoomHighlight/Room.js +70 -0
  170. package/libs/floorplan/Components/RoomHighlight/RoomHighlight.js +289 -0
  171. package/libs/floorplan/Components/RoomMaterials/RoomMaterial.js +328 -0
  172. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.js +64 -0
  173. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.js +103 -0
  174. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.js +140 -0
  175. package/libs/floorplan/Components/SvgImage.js +83 -0
  176. package/libs/floorplan/ModelFloorplanPlugin/Components/Camera.js +120 -0
  177. package/libs/floorplan/ModelFloorplanPlugin/Components/Compass.js +106 -0
  178. package/libs/floorplan/ModelFloorplanPlugin/Components/CurrentFloor/CurrentFloor.js +463 -0
  179. package/libs/floorplan/ModelFloorplanPlugin/Components/Main.js +375 -0
  180. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabel.js +171 -0
  181. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabels.js +265 -0
  182. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleItem.js +301 -0
  183. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleLabels.js +219 -0
  184. package/libs/floorplan/ModelFloorplanPlugin/Controller.js +1 -1
  185. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.js +152 -0
  186. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.js +248 -0
  187. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.js +154 -0
  188. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.js +312 -0
  189. package/libs/floorplan/PanoFloorplanRadarPlugin/Controller.js +1 -1
  190. package/libs/floorplan/TopviewFloorplanPlugin/Controller.js +1 -1
  191. package/package.json +18 -10
  192. package/dist/dnalogel.cjs.js +0 -7
  193. package/dist/dnalogel.es.js +0 -41280
  194. package/dist/dnalogel.umd.js +0 -7
  195. package/dist/style.css +0 -1
  196. package/libs/ModelRoomLabelPlugin/RoomLabelItem.svelte +0 -63
  197. package/libs/ModelRoomLabelPlugin/RoomLabelItem.svelte.map +0 -1
  198. package/libs/ModelRoomLabelPlugin/RoomLabelItems.svelte +0 -80
  199. package/libs/ModelRoomLabelPlugin/RoomLabelItems.svelte.map +0 -1
  200. package/libs/floorplan/Components/BaseImage.svelte +0 -25
  201. package/libs/floorplan/Components/BaseImage.svelte.map +0 -1
  202. package/libs/floorplan/Components/Normalmage.svelte +0 -11
  203. package/libs/floorplan/Components/Normalmage.svelte.map +0 -1
  204. package/libs/floorplan/Components/RoomHighlight/Room.svelte +0 -21
  205. package/libs/floorplan/Components/RoomHighlight/Room.svelte.map +0 -1
  206. package/libs/floorplan/Components/RoomHighlight/RoomHighlight.svelte +0 -60
  207. package/libs/floorplan/Components/RoomHighlight/RoomHighlight.svelte.map +0 -1
  208. package/libs/floorplan/Components/RoomMaterials/RoomMaterial.svelte +0 -35
  209. package/libs/floorplan/Components/RoomMaterials/RoomMaterial.svelte.map +0 -1
  210. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte +0 -7
  211. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte.map +0 -1
  212. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte +0 -16
  213. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte.map +0 -1
  214. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte +0 -17
  215. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte.map +0 -1
  216. package/libs/floorplan/Components/SvgImage.svelte +0 -25
  217. package/libs/floorplan/Components/SvgImage.svelte.map +0 -1
  218. package/libs/floorplan/ModelFloorplanPlugin/Components/Camera.svelte +0 -46
  219. package/libs/floorplan/ModelFloorplanPlugin/Components/Camera.svelte.map +0 -1
  220. package/libs/floorplan/ModelFloorplanPlugin/Components/Compass.svelte +0 -48
  221. package/libs/floorplan/ModelFloorplanPlugin/Components/Compass.svelte.map +0 -1
  222. package/libs/floorplan/ModelFloorplanPlugin/Components/CurrentFloor/CurrentFloor.svelte +0 -37
  223. package/libs/floorplan/ModelFloorplanPlugin/Components/CurrentFloor/CurrentFloor.svelte.map +0 -1
  224. package/libs/floorplan/ModelFloorplanPlugin/Components/Main.svelte +0 -50
  225. package/libs/floorplan/ModelFloorplanPlugin/Components/Main.svelte.map +0 -1
  226. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabel.svelte +0 -41
  227. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabel.svelte.map +0 -1
  228. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabels.svelte +0 -25
  229. package/libs/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabels.svelte.map +0 -1
  230. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleItem.svelte +0 -148
  231. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleItem.svelte.map +0 -1
  232. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleLabels.svelte +0 -15
  233. package/libs/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleLabels.svelte.map +0 -1
  234. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte +0 -84
  235. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte.map +0 -1
  236. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte +0 -18
  237. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte.map +0 -1
  238. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte +0 -40
  239. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte.map +0 -1
  240. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte +0 -61
  241. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte.map +0 -1
@@ -0,0 +1,3827 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var internal = require('svelte/internal');
6
+ var THREE = require('three');
7
+ var easing = require('svelte/easing');
8
+ var transition = require('svelte/transition');
9
+ var five = require('@realsee/five');
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n["default"] = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
30
+
31
+ const CAMERA_IMAGE = 'data:image/png;base64,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';
32
+
33
+ function rad2Deg$1(rad) {
34
+ return (rad * 180) / Math.PI;
35
+ }
36
+
37
+ /* src/floorplan/ModelFloorplanPlugin/Components/Camera.svelte generated by Svelte v3.47.0 */
38
+
39
+ function add_css$c(target) {
40
+ internal.append_styles(target, "svelte-e8a2kn", ".floorplan__camera-position.svelte-e8a2kn{position:absolute;width:0;height:0}.floorplan__camera-rotate.svelte-e8a2kn{position:absolute;background-repeat:no-repeat;background-size:100%}");
41
+ }
42
+
43
+ function create_fragment$g(ctx) {
44
+ let div1;
45
+ let div0;
46
+
47
+ return {
48
+ c() {
49
+ div1 = internal.element("div");
50
+ div0 = internal.element("div");
51
+ internal.attr(div0, "class", "floorplan__camera-rotate svelte-e8a2kn");
52
+ internal.set_style(div0, "background-image", `url(${/*cameraImageUrl*/ ctx[0] || CAMERA_IMAGE})`);
53
+ internal.set_style(div0, "width", /*domSizeStyle*/ ctx[4], false);
54
+ internal.set_style(div0, "height", /*domSizeStyle*/ ctx[4], false);
55
+ internal.set_style(div0, "left", '-' + /*domSizeStyle*/ ctx[4], false);
56
+ internal.set_style(div0, "top", '-' + /*domSizeStyle*/ ctx[4], false);
57
+ internal.set_style(div0, "transform", `rotate(${/*rotate*/ ctx[3]}deg)`, false);
58
+ internal.set_style(div0, "transform-origin", `${/*domSizeStyle*/ ctx[4]} ${/*domSizeStyle*/ ctx[4]}`, false);
59
+ internal.attr(div1, "class", "floorplan__camera-position svelte-e8a2kn");
60
+ internal.set_style(div1, "left", /*positionLeft*/ ctx[1], false);
61
+ internal.set_style(div1, "top", /*positionTop*/ ctx[2], false);
62
+ },
63
+ m(target, anchor) {
64
+ internal.insert(target, div1, anchor);
65
+ internal.append(div1, div0);
66
+ },
67
+ p(ctx, [dirty]) {
68
+ if (dirty & /*cameraImageUrl*/ 1) {
69
+ internal.set_style(div0, "background-image", `url(${/*cameraImageUrl*/ ctx[0] || CAMERA_IMAGE})`);
70
+ }
71
+ },
72
+ i: internal.noop,
73
+ o: internal.noop,
74
+ d(detaching) {
75
+ if (detaching) internal.detach(div1);
76
+ }
77
+ };
78
+ }
79
+
80
+ function instance$g($$self, $$props, $$invalidate) {
81
+ let { panoIndex } = $$props;
82
+ let { floorplanData } = $$props;
83
+ let { lastPanoramaLongitude } = $$props;
84
+ let { cameraImageUrl } = $$props;
85
+ const { observers } = floorplanData;
86
+ const observer = observers[panoIndex];
87
+ const leftRatio = observer.positionInImage.x;
88
+ const topRatio = observer.positionInImage.y;
89
+ const positionLeft = leftRatio * 100 + '%';
90
+ const positionTop = topRatio * 100 + '%';
91
+ const rotate = -rad2Deg$1(lastPanoramaLongitude) + 45;
92
+
93
+ // TODO: 统一这里的判断条件,目前写了多处
94
+ const bodyWidth = document.body.clientWidth;
95
+
96
+ const bodyHeight = document.body.clientHeight;
97
+ const size = bodyWidth < 500 || bodyHeight < 500 ? 17 : 37;
98
+ const domSizeStyle = `${size / 16}rem`;
99
+
100
+ $$self.$$set = $$props => {
101
+ if ('panoIndex' in $$props) $$invalidate(5, panoIndex = $$props.panoIndex);
102
+ if ('floorplanData' in $$props) $$invalidate(6, floorplanData = $$props.floorplanData);
103
+ if ('lastPanoramaLongitude' in $$props) $$invalidate(7, lastPanoramaLongitude = $$props.lastPanoramaLongitude);
104
+ if ('cameraImageUrl' in $$props) $$invalidate(0, cameraImageUrl = $$props.cameraImageUrl);
105
+ };
106
+
107
+ return [
108
+ cameraImageUrl,
109
+ positionLeft,
110
+ positionTop,
111
+ rotate,
112
+ domSizeStyle,
113
+ panoIndex,
114
+ floorplanData,
115
+ lastPanoramaLongitude
116
+ ];
117
+ }
118
+
119
+ class Camera extends internal.SvelteComponent {
120
+ constructor(options) {
121
+ super();
122
+
123
+ internal.init(
124
+ this,
125
+ options,
126
+ instance$g,
127
+ create_fragment$g,
128
+ internal.safe_not_equal,
129
+ {
130
+ panoIndex: 5,
131
+ floorplanData: 6,
132
+ lastPanoramaLongitude: 7,
133
+ cameraImageUrl: 0
134
+ },
135
+ add_css$c
136
+ );
137
+ }
138
+ }
139
+
140
+ const COMPASS_IMAGE = 'data:image/png;base64,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';
141
+
142
+ /* src/floorplan/ModelFloorplanPlugin/Components/Compass.svelte generated by Svelte v3.47.0 */
143
+
144
+ function add_css$b(target) {
145
+ internal.append_styles(target, "svelte-5l80pv", ".floorplan-plugin__compass.svelte-5l80pv{position:absolute;left:50%;top:-46px;width:231px;height:41px;will-change:opacity;transform-origin:center 184px}.floorplan-plugin__compass-image.svelte-5l80pv{width:100%;height:100%;position:absolute;left:0;top:0;opacity:0.1;background-repeat:no-repeat;background-size:100% 100%}.floorplan-plugin__compass-text.svelte-5l80pv{position:absolute;left:50%;top:15px;transform:translateX(-50%);opacity:0.2;font-weight:bold;font-size:10px;color:#fff}");
146
+ }
147
+
148
+ // (11:0) {#if northRad}
149
+ function create_if_block$6(ctx) {
150
+ let div1;
151
+ let div0;
152
+ let t0;
153
+ let span;
154
+
155
+ return {
156
+ c() {
157
+ div1 = internal.element("div");
158
+ div0 = internal.element("div");
159
+ t0 = internal.space();
160
+ span = internal.element("span");
161
+ span.textContent = "北";
162
+ internal.attr(div0, "class", "floorplan-plugin__compass-image svelte-5l80pv");
163
+ internal.set_style(div0, "background-image", `url(${COMPASS_IMAGE})`);
164
+ internal.attr(span, "class", "floorplan-plugin__compass-text svelte-5l80pv");
165
+ internal.attr(div1, "class", "floorplan-plugin__compass svelte-5l80pv");
166
+ internal.set_style(div1, "transform", /*compassTransformStyle*/ ctx[1], false);
167
+ },
168
+ m(target, anchor) {
169
+ internal.insert(target, div1, anchor);
170
+ internal.append(div1, div0);
171
+ internal.append(div1, t0);
172
+ internal.append(div1, span);
173
+ },
174
+ p: internal.noop,
175
+ d(detaching) {
176
+ if (detaching) internal.detach(div1);
177
+ }
178
+ };
179
+ }
180
+
181
+ function create_fragment$f(ctx) {
182
+ let if_block_anchor;
183
+ let if_block = /*northRad*/ ctx[0] && create_if_block$6(ctx);
184
+
185
+ return {
186
+ c() {
187
+ if (if_block) if_block.c();
188
+ if_block_anchor = internal.empty();
189
+ },
190
+ m(target, anchor) {
191
+ if (if_block) if_block.m(target, anchor);
192
+ internal.insert(target, if_block_anchor, anchor);
193
+ },
194
+ p(ctx, [dirty]) {
195
+ if (/*northRad*/ ctx[0]) if_block.p(ctx, dirty);
196
+ },
197
+ i: internal.noop,
198
+ o: internal.noop,
199
+ d(detaching) {
200
+ if (if_block) if_block.d(detaching);
201
+ if (detaching) internal.detach(if_block_anchor);
202
+ }
203
+ };
204
+ }
205
+
206
+ function rad2Deg(rad) {
207
+ return rad / Math.PI * 180;
208
+ }
209
+
210
+ function instance$f($$self, $$props, $$invalidate) {
211
+ let { floorplanData } = $$props;
212
+ const northRad = floorplanData.entrance?.northRad;
213
+ const rotate = !northRad ? 0 : rad2Deg(northRad);
214
+ const compassTransformStyle = `translateX(-50%) translateZ(10px) rotate(${-rotate + 90}deg)`;
215
+
216
+ $$self.$$set = $$props => {
217
+ if ('floorplanData' in $$props) $$invalidate(2, floorplanData = $$props.floorplanData);
218
+ };
219
+
220
+ return [northRad, compassTransformStyle, floorplanData];
221
+ }
222
+
223
+ class Compass extends internal.SvelteComponent {
224
+ constructor(options) {
225
+ super();
226
+ internal.init(this, options, instance$f, create_fragment$f, internal.safe_not_equal, { floorplanData: 2 }, add_css$b);
227
+ }
228
+ }
229
+
230
+ /* src/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabel.svelte generated by Svelte v3.47.0 */
231
+
232
+ function add_css$a(target) {
233
+ internal.append_styles(target, "svelte-1ashbdx", ".floorplan-plugin__room-label-item.svelte-1ashbdx{position:absolute;display:flex;flex-flow:column;align-items:center;line-height:15px;color:#fff;transform:translate(-50%, -50%);white-space:nowrap}.floorplan-plugin__room-size.svelte-1ashbdx{opacity:0.45}");
234
+ }
235
+
236
+ // (22:30)
237
+ function create_if_block_1$4(ctx) {
238
+ let html_tag;
239
+ let raw_value = /*userConfigElement*/ ctx[2].outerHTML + "";
240
+ let html_anchor;
241
+
242
+ return {
243
+ c() {
244
+ html_tag = new internal.HtmlTag();
245
+ html_anchor = internal.empty();
246
+ html_tag.a = html_anchor;
247
+ },
248
+ m(target, anchor) {
249
+ html_tag.m(raw_value, target, anchor);
250
+ internal.insert(target, html_anchor, anchor);
251
+ },
252
+ p(ctx, dirty) {
253
+ if (dirty & /*userConfigElement*/ 4 && raw_value !== (raw_value = /*userConfigElement*/ ctx[2].outerHTML + "")) html_tag.p(raw_value);
254
+ },
255
+ d(detaching) {
256
+ if (detaching) internal.detach(html_anchor);
257
+ if (detaching) html_tag.d();
258
+ }
259
+ };
260
+ }
261
+
262
+ // (16:2) {#if getLabelElement === undefined}
263
+ function create_if_block$5(ctx) {
264
+ let span0;
265
+ let t0_value = /*room*/ ctx[0].name + "";
266
+ let t0;
267
+ let t1;
268
+ let span1;
269
+
270
+ return {
271
+ c() {
272
+ span0 = internal.element("span");
273
+ t0 = internal.text(t0_value);
274
+ t1 = internal.space();
275
+ span1 = internal.element("span");
276
+ span1.textContent = `${/*roomSizeDes*/ ctx[3]}`;
277
+ internal.attr(span0, "class", "floorplan-plugin__room-name");
278
+ internal.attr(span1, "class", "floorplan-plugin__room-size svelte-1ashbdx");
279
+ },
280
+ m(target, anchor) {
281
+ internal.insert(target, span0, anchor);
282
+ internal.append(span0, t0);
283
+ internal.insert(target, t1, anchor);
284
+ internal.insert(target, span1, anchor);
285
+ },
286
+ p(ctx, dirty) {
287
+ if (dirty & /*room*/ 1 && t0_value !== (t0_value = /*room*/ ctx[0].name + "")) internal.set_data(t0, t0_value);
288
+ },
289
+ d(detaching) {
290
+ if (detaching) internal.detach(span0);
291
+ if (detaching) internal.detach(t1);
292
+ if (detaching) internal.detach(span1);
293
+ }
294
+ };
295
+ }
296
+
297
+ function create_fragment$e(ctx) {
298
+ let div;
299
+
300
+ function select_block_type(ctx, dirty) {
301
+ if (/*getLabelElement*/ ctx[1] === undefined) return create_if_block$5;
302
+ if (/*userConfigElement*/ ctx[2]) return create_if_block_1$4;
303
+ }
304
+
305
+ let current_block_type = select_block_type(ctx);
306
+ let if_block = current_block_type && current_block_type(ctx);
307
+
308
+ return {
309
+ c() {
310
+ div = internal.element("div");
311
+ if (if_block) if_block.c();
312
+ internal.attr(div, "class", "floorplan-plugin__room-label-item svelte-1ashbdx");
313
+ internal.set_style(div, "left", /*left*/ ctx[4], false);
314
+ internal.set_style(div, "top", /*top*/ ctx[5], false);
315
+ internal.set_style(div, "font-size", /*fontSize*/ ctx[6], false);
316
+ },
317
+ m(target, anchor) {
318
+ internal.insert(target, div, anchor);
319
+ if (if_block) if_block.m(div, null);
320
+ },
321
+ p(ctx, [dirty]) {
322
+ if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) {
323
+ if_block.p(ctx, dirty);
324
+ } else {
325
+ if (if_block) if_block.d(1);
326
+ if_block = current_block_type && current_block_type(ctx);
327
+
328
+ if (if_block) {
329
+ if_block.c();
330
+ if_block.m(div, null);
331
+ }
332
+ }
333
+ },
334
+ i: internal.noop,
335
+ o: internal.noop,
336
+ d(detaching) {
337
+ if (detaching) internal.detach(div);
338
+
339
+ if (if_block) {
340
+ if_block.d();
341
+ }
342
+ }
343
+ };
344
+ }
345
+
346
+ function instance$e($$self, $$props, $$invalidate) {
347
+ let userConfigElement;
348
+ let { room } = $$props;
349
+ let { getLabelElement } = $$props;
350
+
351
+ // TODO: 统一这里的判断条件,目前写了多处
352
+ const bodyWidth = document.body.clientWidth;
353
+
354
+ const bodyHeight = document.body.clientHeight;
355
+ const roomSizeDes = room.size ? (room.size / 1000000).toFixed(1) + '㎡' : '';
356
+ const roomLabel = room.roomLabel;
357
+ const left = roomLabel.positionInImage.x * 100 + '%';
358
+ const top = roomLabel.positionInImage.y * 100 + '%';
359
+ const fontSize = (bodyWidth < 500 || bodyHeight < 500 ? 10 : 14) / 16 + 'rem';
360
+
361
+ $$self.$$set = $$props => {
362
+ if ('room' in $$props) $$invalidate(0, room = $$props.room);
363
+ if ('getLabelElement' in $$props) $$invalidate(1, getLabelElement = $$props.getLabelElement);
364
+ };
365
+
366
+ $$self.$$.update = () => {
367
+ if ($$self.$$.dirty & /*getLabelElement, room*/ 3) {
368
+ $$invalidate(2, userConfigElement = getLabelElement?.(room));
369
+ }
370
+ };
371
+
372
+ return [room, getLabelElement, userConfigElement, roomSizeDes, left, top, fontSize];
373
+ }
374
+
375
+ class RoomLabel extends internal.SvelteComponent {
376
+ constructor(options) {
377
+ super();
378
+ internal.init(this, options, instance$e, create_fragment$e, internal.safe_not_equal, { room: 0, getLabelElement: 1 }, add_css$a);
379
+ }
380
+ }
381
+
382
+ /* src/floorplan/ModelFloorplanPlugin/Components/RoomLabels/RoomLabels.svelte generated by Svelte v3.47.0 */
383
+
384
+ function add_css$9(target) {
385
+ internal.append_styles(target, "svelte-sw25w3", ".floorplan-plugin__room-labels.svelte-sw25w3{width:100%;height:100%;position:absolute;left:0;top:0;z-index:20}");
386
+ }
387
+
388
+ function get_each_context$4(ctx, list, i) {
389
+ const child_ctx = ctx.slice();
390
+ child_ctx[4] = list[i];
391
+ return child_ctx;
392
+ }
393
+
394
+ // (8:0) {#if rooms}
395
+ function create_if_block$4(ctx) {
396
+ let div;
397
+ let each_blocks = [];
398
+ let each_1_lookup = new Map();
399
+ let current;
400
+ let each_value = /*rooms*/ ctx[1];
401
+ const get_key = ctx => /*room*/ ctx[4].id;
402
+
403
+ for (let i = 0; i < each_value.length; i += 1) {
404
+ let child_ctx = get_each_context$4(ctx, each_value, i);
405
+ let key = get_key(child_ctx);
406
+ each_1_lookup.set(key, each_blocks[i] = create_each_block$4(key, child_ctx));
407
+ }
408
+
409
+ return {
410
+ c() {
411
+ div = internal.element("div");
412
+
413
+ for (let i = 0; i < each_blocks.length; i += 1) {
414
+ each_blocks[i].c();
415
+ }
416
+
417
+ internal.attr(div, "class", "floorplan-plugin__room-labels svelte-sw25w3");
418
+ },
419
+ m(target, anchor) {
420
+ internal.insert(target, div, anchor);
421
+
422
+ for (let i = 0; i < each_blocks.length; i += 1) {
423
+ each_blocks[i].m(div, null);
424
+ }
425
+
426
+ current = true;
427
+ },
428
+ p(ctx, dirty) {
429
+ if (dirty & /*rooms, getLabelElement*/ 3) {
430
+ each_value = /*rooms*/ ctx[1];
431
+ internal.group_outros();
432
+ each_blocks = internal.update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value, each_1_lookup, div, internal.outro_and_destroy_block, create_each_block$4, null, get_each_context$4);
433
+ internal.check_outros();
434
+ }
435
+ },
436
+ i(local) {
437
+ if (current) return;
438
+
439
+ for (let i = 0; i < each_value.length; i += 1) {
440
+ internal.transition_in(each_blocks[i]);
441
+ }
442
+
443
+ current = true;
444
+ },
445
+ o(local) {
446
+ for (let i = 0; i < each_blocks.length; i += 1) {
447
+ internal.transition_out(each_blocks[i]);
448
+ }
449
+
450
+ current = false;
451
+ },
452
+ d(detaching) {
453
+ if (detaching) internal.detach(div);
454
+
455
+ for (let i = 0; i < each_blocks.length; i += 1) {
456
+ each_blocks[i].d();
457
+ }
458
+ }
459
+ };
460
+ }
461
+
462
+ // (10:4) {#each rooms as room (room.id)}
463
+ function create_each_block$4(key_1, ctx) {
464
+ let first;
465
+ let roomlabel;
466
+ let current;
467
+
468
+ const roomlabel_spread_levels = [
469
+ {
470
+ room: /*room*/ ctx[4],
471
+ getLabelElement: /*getLabelElement*/ ctx[0]
472
+ }
473
+ ];
474
+
475
+ let roomlabel_props = {};
476
+
477
+ for (let i = 0; i < roomlabel_spread_levels.length; i += 1) {
478
+ roomlabel_props = internal.assign(roomlabel_props, roomlabel_spread_levels[i]);
479
+ }
480
+
481
+ roomlabel = new RoomLabel({ props: roomlabel_props });
482
+
483
+ return {
484
+ key: key_1,
485
+ first: null,
486
+ c() {
487
+ first = internal.empty();
488
+ internal.create_component(roomlabel.$$.fragment);
489
+ this.first = first;
490
+ },
491
+ m(target, anchor) {
492
+ internal.insert(target, first, anchor);
493
+ internal.mount_component(roomlabel, target, anchor);
494
+ current = true;
495
+ },
496
+ p(new_ctx, dirty) {
497
+ ctx = new_ctx;
498
+
499
+ const roomlabel_changes = (dirty & /*rooms, getLabelElement*/ 3)
500
+ ? internal.get_spread_update(roomlabel_spread_levels, [
501
+ {
502
+ room: /*room*/ ctx[4],
503
+ getLabelElement: /*getLabelElement*/ ctx[0]
504
+ }
505
+ ])
506
+ : {};
507
+
508
+ roomlabel.$set(roomlabel_changes);
509
+ },
510
+ i(local) {
511
+ if (current) return;
512
+ internal.transition_in(roomlabel.$$.fragment, local);
513
+ current = true;
514
+ },
515
+ o(local) {
516
+ internal.transition_out(roomlabel.$$.fragment, local);
517
+ current = false;
518
+ },
519
+ d(detaching) {
520
+ if (detaching) internal.detach(first);
521
+ internal.destroy_component(roomlabel, detaching);
522
+ }
523
+ };
524
+ }
525
+
526
+ function create_fragment$d(ctx) {
527
+ let if_block_anchor;
528
+ let current;
529
+ let if_block = /*rooms*/ ctx[1] && create_if_block$4(ctx);
530
+
531
+ return {
532
+ c() {
533
+ if (if_block) if_block.c();
534
+ if_block_anchor = internal.empty();
535
+ },
536
+ m(target, anchor) {
537
+ if (if_block) if_block.m(target, anchor);
538
+ internal.insert(target, if_block_anchor, anchor);
539
+ current = true;
540
+ },
541
+ p(ctx, [dirty]) {
542
+ if (/*rooms*/ ctx[1]) {
543
+ if (if_block) {
544
+ if_block.p(ctx, dirty);
545
+
546
+ if (dirty & /*rooms*/ 2) {
547
+ internal.transition_in(if_block, 1);
548
+ }
549
+ } else {
550
+ if_block = create_if_block$4(ctx);
551
+ if_block.c();
552
+ internal.transition_in(if_block, 1);
553
+ if_block.m(if_block_anchor.parentNode, if_block_anchor);
554
+ }
555
+ } else if (if_block) {
556
+ internal.group_outros();
557
+
558
+ internal.transition_out(if_block, 1, 1, () => {
559
+ if_block = null;
560
+ });
561
+
562
+ internal.check_outros();
563
+ }
564
+ },
565
+ i(local) {
566
+ if (current) return;
567
+ internal.transition_in(if_block);
568
+ current = true;
569
+ },
570
+ o(local) {
571
+ internal.transition_out(if_block);
572
+ current = false;
573
+ },
574
+ d(detaching) {
575
+ if (if_block) if_block.d(detaching);
576
+ if (detaching) internal.detach(if_block_anchor);
577
+ }
578
+ };
579
+ }
580
+
581
+ function instance$d($$self, $$props, $$invalidate) {
582
+ let rooms;
583
+ let { floorIndex } = $$props;
584
+ let { floorplanData } = $$props;
585
+ let { getLabelElement } = $$props;
586
+
587
+ $$self.$$set = $$props => {
588
+ if ('floorIndex' in $$props) $$invalidate(2, floorIndex = $$props.floorIndex);
589
+ if ('floorplanData' in $$props) $$invalidate(3, floorplanData = $$props.floorplanData);
590
+ if ('getLabelElement' in $$props) $$invalidate(0, getLabelElement = $$props.getLabelElement);
591
+ };
592
+
593
+ $$self.$$.update = () => {
594
+ if ($$self.$$.dirty & /*floorplanData, floorIndex*/ 12) {
595
+ $$invalidate(1, rooms = floorplanData.floorDatas[floorIndex].rooms);
596
+ }
597
+ };
598
+
599
+ return [getLabelElement, rooms, floorIndex, floorplanData];
600
+ }
601
+
602
+ class RoomLabels extends internal.SvelteComponent {
603
+ constructor(options) {
604
+ super();
605
+
606
+ internal.init(
607
+ this,
608
+ options,
609
+ instance$d,
610
+ create_fragment$d,
611
+ internal.safe_not_equal,
612
+ {
613
+ floorIndex: 2,
614
+ floorplanData: 3,
615
+ getLabelElement: 0
616
+ },
617
+ add_css$9
618
+ );
619
+ }
620
+ }
621
+
622
+ /**
623
+ * 判断对象是否为`null`或`undefined`。
624
+ * @param
625
+ * @return
626
+ */
627
+ /**
628
+ * 判断对象不为`null`或`undefined`。
629
+ */
630
+ function notNil(value) {
631
+ return value !== null && value !== undefined;
632
+ }
633
+
634
+ /* src/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleItem.svelte generated by Svelte v3.47.0 */
635
+
636
+ function add_css$8(target) {
637
+ internal.append_styles(target, "svelte-1rr09in", ".floorplan-plugin__rule-labels.svelte-1rr09in{position:absolute;height:5px;display:flex;align-items:center}.floorplan-plugin__rule-labels-top.svelte-1rr09in{left:0;top:0}.floorplan-plugin__rule-labels-bottom.svelte-1rr09in{left:0;bottom:0}.floorplan-plugin__rule-labels-left.svelte-1rr09in{bottom:0;left:0}.floorplan-plugin__rule-labels-right.svelte-1rr09in{bottom:0;right:0}.floorplan-plugin__rule-line.svelte-1rr09in{background:#fff;opacity:0.05;width:100%;height:1px}.floorplan-plugin__rule-scale.svelte-1rr09in{position:absolute;background:#fff;opacity:0.05;transform-origin:center;width:1px;height:5px}.floorplan-plugin__text-wrapper.svelte-1rr09in{width:0;height:0;position:absolute}.floorplan-plugin__text-wrapper.floorplan-plugin__text-wrapper--is-left-or-top.svelte-1rr09in{top:10px}.floorplan-plugin__text-wrapper.floorplan-plugin__text-wrapper-is-right-or-bottom.svelte-1rr09in{bottom:10px}.floorplan-plugin__rule-text.svelte-1rr09in{position:absolute;width:max-content;display:block;transform:translate(-50%, -50%) rotate(180deg);font-size:10px;color:#fff;opacity:0.2}.floorplan-plugin__rule-text.is-row.svelte-1rr09in{transform:translate(-50%, -50%)}");
638
+ }
639
+
640
+ function get_each_context$3(ctx, list, i) {
641
+ const child_ctx = ctx.slice();
642
+ child_ctx[24] = list[i];
643
+ child_ctx[26] = i;
644
+ return child_ctx;
645
+ }
646
+
647
+ function get_each_context_1(ctx, list, i) {
648
+ const child_ctx = ctx.slice();
649
+ child_ctx[27] = list[i];
650
+ child_ctx[29] = i;
651
+ return child_ctx;
652
+ }
653
+
654
+ // (66:2) {#each positionPxArray as position, positionIndex (positionIndex)}
655
+ function create_each_block_1(key_1, ctx) {
656
+ let div;
657
+ let style_left = `${/*position*/ ctx[27]}px`;
658
+
659
+ return {
660
+ key: key_1,
661
+ first: null,
662
+ c() {
663
+ div = internal.element("div");
664
+ internal.attr(div, "class", "floorplan-plugin__rule-scale svelte-1rr09in");
665
+ internal.set_style(div, "left", style_left, false);
666
+ this.first = div;
667
+ },
668
+ m(target, anchor) {
669
+ internal.insert(target, div, anchor);
670
+ },
671
+ p(new_ctx, dirty) {
672
+ ctx = new_ctx;
673
+ },
674
+ d(detaching) {
675
+ if (detaching) internal.detach(div);
676
+ }
677
+ };
678
+ }
679
+
680
+ // (69:2) {#each textArray as textItem, textItemIndex (textItemIndex)}
681
+ function create_each_block$3(key_1, ctx) {
682
+ let div;
683
+ let span;
684
+ let t0_value = /*textItem*/ ctx[24].distance + "";
685
+ let t0;
686
+ let t1;
687
+ let style_left = `${/*textItem*/ ctx[24].positionPx}px`;
688
+
689
+ return {
690
+ key: key_1,
691
+ first: null,
692
+ c() {
693
+ div = internal.element("div");
694
+ span = internal.element("span");
695
+ t0 = internal.text(t0_value);
696
+ t1 = internal.space();
697
+ internal.attr(span, "class", "floorplan-plugin__rule-text svelte-1rr09in");
698
+ internal.toggle_class(span, "is-row", /*isRow*/ ctx[5]);
699
+ internal.attr(div, "class", "floorplan-plugin__text-wrapper svelte-1rr09in");
700
+ internal.toggle_class(div, "floorplan-plugin__text-wrapper--is-left-or-top", /*isLeft*/ ctx[3] || /*isTop*/ ctx[1]);
701
+ internal.toggle_class(div, "floorplan-plugin__text-wrapper-is-right-or-bottom", /*isRight*/ ctx[4] || /*isBottom*/ ctx[2]);
702
+ internal.set_style(div, "left", style_left, false);
703
+ this.first = div;
704
+ },
705
+ m(target, anchor) {
706
+ internal.insert(target, div, anchor);
707
+ internal.append(div, span);
708
+ internal.append(span, t0);
709
+ internal.append(div, t1);
710
+ },
711
+ p(new_ctx, dirty) {
712
+ ctx = new_ctx;
713
+ },
714
+ d(detaching) {
715
+ if (detaching) internal.detach(div);
716
+ }
717
+ };
718
+ }
719
+
720
+ function create_fragment$c(ctx) {
721
+ let div1;
722
+ let div0;
723
+ let t0;
724
+ let each_blocks_1 = [];
725
+ let each0_lookup = new Map();
726
+ let t1;
727
+ let each_blocks = [];
728
+ let each1_lookup = new Map();
729
+ let div1_class_value;
730
+ let each_value_1 = /*positionPxArray*/ ctx[6];
731
+ const get_key = ctx => /*positionIndex*/ ctx[29];
732
+
733
+ for (let i = 0; i < each_value_1.length; i += 1) {
734
+ let child_ctx = get_each_context_1(ctx, each_value_1, i);
735
+ let key = get_key(child_ctx);
736
+ each0_lookup.set(key, each_blocks_1[i] = create_each_block_1(key, child_ctx));
737
+ }
738
+
739
+ let each_value = /*textArray*/ ctx[10];
740
+ const get_key_1 = ctx => /*textItemIndex*/ ctx[26];
741
+
742
+ for (let i = 0; i < each_value.length; i += 1) {
743
+ let child_ctx = get_each_context$3(ctx, each_value, i);
744
+ let key = get_key_1(child_ctx);
745
+ each1_lookup.set(key, each_blocks[i] = create_each_block$3(key, child_ctx));
746
+ }
747
+
748
+ return {
749
+ c() {
750
+ div1 = internal.element("div");
751
+ div0 = internal.element("div");
752
+ t0 = internal.space();
753
+
754
+ for (let i = 0; i < each_blocks_1.length; i += 1) {
755
+ each_blocks_1[i].c();
756
+ }
757
+
758
+ t1 = internal.space();
759
+
760
+ for (let i = 0; i < each_blocks.length; i += 1) {
761
+ each_blocks[i].c();
762
+ }
763
+
764
+ internal.attr(div0, "class", "floorplan-plugin__rule-line svelte-1rr09in");
765
+ internal.attr(div1, "class", div1_class_value = "floorplan-plugin__rule-labels floorplan-plugin__rule-labels-" + /*type*/ ctx[0] + " svelte-1rr09in");
766
+ internal.set_style(div1, "width", /*width*/ ctx[9], false);
767
+ internal.set_style(div1, "transform", /*transform*/ ctx[7], false);
768
+ internal.set_style(div1, "transform-origin", /*transformOrigin*/ ctx[8], false);
769
+ },
770
+ m(target, anchor) {
771
+ internal.insert(target, div1, anchor);
772
+ internal.append(div1, div0);
773
+ internal.append(div1, t0);
774
+
775
+ for (let i = 0; i < each_blocks_1.length; i += 1) {
776
+ each_blocks_1[i].m(div1, null);
777
+ }
778
+
779
+ internal.append(div1, t1);
780
+
781
+ for (let i = 0; i < each_blocks.length; i += 1) {
782
+ each_blocks[i].m(div1, null);
783
+ }
784
+ },
785
+ p(ctx, [dirty]) {
786
+ if (dirty & /*positionPxArray*/ 64) {
787
+ each_value_1 = /*positionPxArray*/ ctx[6];
788
+ each_blocks_1 = internal.update_keyed_each(each_blocks_1, dirty, get_key, 1, ctx, each_value_1, each0_lookup, div1, internal.destroy_block, create_each_block_1, t1, get_each_context_1);
789
+ }
790
+
791
+ if (dirty & /*isLeft, isTop, isRight, isBottom, textArray, isRow*/ 1086) {
792
+ each_value = /*textArray*/ ctx[10];
793
+ each_blocks = internal.update_keyed_each(each_blocks, dirty, get_key_1, 1, ctx, each_value, each1_lookup, div1, internal.destroy_block, create_each_block$3, null, get_each_context$3);
794
+ }
795
+
796
+ if (dirty & /*type*/ 1 && div1_class_value !== (div1_class_value = "floorplan-plugin__rule-labels floorplan-plugin__rule-labels-" + /*type*/ ctx[0] + " svelte-1rr09in")) {
797
+ internal.attr(div1, "class", div1_class_value);
798
+ }
799
+ },
800
+ i: internal.noop,
801
+ o: internal.noop,
802
+ d(detaching) {
803
+ if (detaching) internal.detach(div1);
804
+
805
+ for (let i = 0; i < each_blocks_1.length; i += 1) {
806
+ each_blocks_1[i].d();
807
+ }
808
+
809
+ for (let i = 0; i < each_blocks.length; i += 1) {
810
+ each_blocks[i].d();
811
+ }
812
+ }
813
+ };
814
+ }
815
+
816
+ const padding = 1000;
817
+
818
+ function instance$c($$self, $$props, $$invalidate) {
819
+ let { pxmm } = $$props;
820
+ let { type } = $$props;
821
+ let { data } = $$props;
822
+ let { bounding } = $$props;
823
+ const isTop = type === 'top';
824
+ const isBottom = type === 'bottom';
825
+ const isLeft = type === 'left';
826
+ const isRight = type === 'right';
827
+ const isRow = isTop || isBottom;
828
+
829
+ // 计算每一段墙的长度,以及墙两侧点距离标尺初始点的像素值
830
+ const positionArray = data.map(([start, end]) => isRow ? [start.x, end.x] : [start.y, end.y]).flat().sort().filter((x, index, arr) => {
831
+ if (index === 0) return true;
832
+ return x !== arr[index - 1];
833
+ });
834
+
835
+ const minPosition = positionArray[0];
836
+ const maxPosition = positionArray.slice(-1)[0];
837
+ const length = maxPosition - minPosition;
838
+ const minBounding = isRow ? bounding.min.x : bounding.min.y;
839
+ const lengthPx = length * pxmm;
840
+ const positionPxArray = positionArray.map(x => (x - minPosition) / length * lengthPx);
841
+
842
+ // 在主要方向上的偏移量,上下的标尺是距离图片左侧的长度,左右的标尺是距离图片底部的距离
843
+ const translateMain = (minPosition - minBounding) * pxmm;
844
+
845
+ // 在次要方向的偏移量,希望达到的效果是标尺轴距离户型图边界 27px,但是图片自身是带有 1000mm 的边界,所以在计算时需要减去这个边界
846
+ const translateSecond = 27 - padding * pxmm;
847
+
848
+ const translate = (() => {
849
+ if (isTop) return `translate(${translateMain}px, ${-translateSecond}px)`;
850
+ if (isBottom) return `translate(${translateMain}px, ${translateSecond}px)`;
851
+ if (isLeft) return `translate(${-translateSecond}px, ${-translateMain}px)`;
852
+ if (isRight) return `translate(${translateSecond}px, ${-translateMain - lengthPx}px)`;
853
+ })();
854
+
855
+ const rotate = isRow ? 'rotate(0)' : 'rotate(-90deg)';
856
+ const transform = `${translate} ${rotate}`;
857
+ const transformOrigin = `${isRight ? 'right' : 'left'} ${isTop ? 'top' : 'bottom'}`;
858
+ const width = lengthPx + 'px';
859
+
860
+ // 把点位的户型图坐标转成距离起始位置的像素值
861
+ const textArray = positionArray.map((position, index, array) => {
862
+ if (index === 0) return null;
863
+ const distance = position - array[index - 1];
864
+ const positionPx = (array[index - 1] + distance / 2 - minPosition) / length * lengthPx;
865
+ return { distance, positionPx };
866
+ }).filter(notNil).filter(item => item.distance / length > 0.12);
867
+
868
+ $$self.$$set = $$props => {
869
+ if ('pxmm' in $$props) $$invalidate(11, pxmm = $$props.pxmm);
870
+ if ('type' in $$props) $$invalidate(0, type = $$props.type);
871
+ if ('data' in $$props) $$invalidate(12, data = $$props.data);
872
+ if ('bounding' in $$props) $$invalidate(13, bounding = $$props.bounding);
873
+ };
874
+
875
+ return [
876
+ type,
877
+ isTop,
878
+ isBottom,
879
+ isLeft,
880
+ isRight,
881
+ isRow,
882
+ positionPxArray,
883
+ transform,
884
+ transformOrigin,
885
+ width,
886
+ textArray,
887
+ pxmm,
888
+ data,
889
+ bounding
890
+ ];
891
+ }
892
+
893
+ class RuleItem extends internal.SvelteComponent {
894
+ constructor(options) {
895
+ super();
896
+
897
+ internal.init(
898
+ this,
899
+ options,
900
+ instance$c,
901
+ create_fragment$c,
902
+ internal.safe_not_equal,
903
+ {
904
+ pxmm: 11,
905
+ type: 0,
906
+ data: 12,
907
+ bounding: 13
908
+ },
909
+ add_css$8
910
+ );
911
+ }
912
+ }
913
+
914
+ /* src/floorplan/ModelFloorplanPlugin/Components/RuleLabels/RuleLabels.svelte generated by Svelte v3.47.0 */
915
+
916
+ function get_each_context$2(ctx, list, i) {
917
+ const child_ctx = ctx.slice();
918
+ child_ctx[7] = list[i][0];
919
+ child_ctx[8] = list[i][1];
920
+ return child_ctx;
921
+ }
922
+
923
+ // (12:2) {#each ruleLabelArray as [type, data] (type)}
924
+ function create_each_block$2(key_1, ctx) {
925
+ let first;
926
+ let ruleitem;
927
+ let current;
928
+
929
+ const ruleitem_spread_levels = [
930
+ {
931
+ type: /*type*/ ctx[7],
932
+ data: /*data*/ ctx[8],
933
+ pxmm: /*pxmm*/ ctx[0],
934
+ bounding: /*bounding*/ ctx[2]
935
+ }
936
+ ];
937
+
938
+ let ruleitem_props = {};
939
+
940
+ for (let i = 0; i < ruleitem_spread_levels.length; i += 1) {
941
+ ruleitem_props = internal.assign(ruleitem_props, ruleitem_spread_levels[i]);
942
+ }
943
+
944
+ ruleitem = new RuleItem({ props: ruleitem_props });
945
+
946
+ return {
947
+ key: key_1,
948
+ first: null,
949
+ c() {
950
+ first = internal.empty();
951
+ internal.create_component(ruleitem.$$.fragment);
952
+ this.first = first;
953
+ },
954
+ m(target, anchor) {
955
+ internal.insert(target, first, anchor);
956
+ internal.mount_component(ruleitem, target, anchor);
957
+ current = true;
958
+ },
959
+ p(new_ctx, dirty) {
960
+ ctx = new_ctx;
961
+
962
+ const ruleitem_changes = (dirty & /*ruleLabelArray, pxmm, bounding*/ 7)
963
+ ? internal.get_spread_update(ruleitem_spread_levels, [
964
+ {
965
+ type: /*type*/ ctx[7],
966
+ data: /*data*/ ctx[8],
967
+ pxmm: /*pxmm*/ ctx[0],
968
+ bounding: /*bounding*/ ctx[2]
969
+ }
970
+ ])
971
+ : {};
972
+
973
+ ruleitem.$set(ruleitem_changes);
974
+ },
975
+ i(local) {
976
+ if (current) return;
977
+ internal.transition_in(ruleitem.$$.fragment, local);
978
+ current = true;
979
+ },
980
+ o(local) {
981
+ internal.transition_out(ruleitem.$$.fragment, local);
982
+ current = false;
983
+ },
984
+ d(detaching) {
985
+ if (detaching) internal.detach(first);
986
+ internal.destroy_component(ruleitem, detaching);
987
+ }
988
+ };
989
+ }
990
+
991
+ function create_fragment$b(ctx) {
992
+ let div;
993
+ let each_blocks = [];
994
+ let each_1_lookup = new Map();
995
+ let current;
996
+ let each_value = /*ruleLabelArray*/ ctx[1];
997
+ const get_key = ctx => /*type*/ ctx[7];
998
+
999
+ for (let i = 0; i < each_value.length; i += 1) {
1000
+ let child_ctx = get_each_context$2(ctx, each_value, i);
1001
+ let key = get_key(child_ctx);
1002
+ each_1_lookup.set(key, each_blocks[i] = create_each_block$2(key, child_ctx));
1003
+ }
1004
+
1005
+ return {
1006
+ c() {
1007
+ div = internal.element("div");
1008
+
1009
+ for (let i = 0; i < each_blocks.length; i += 1) {
1010
+ each_blocks[i].c();
1011
+ }
1012
+
1013
+ internal.attr(div, "class", "floorplan-plugin__rulelabels");
1014
+ },
1015
+ m(target, anchor) {
1016
+ internal.insert(target, div, anchor);
1017
+
1018
+ for (let i = 0; i < each_blocks.length; i += 1) {
1019
+ each_blocks[i].m(div, null);
1020
+ }
1021
+
1022
+ current = true;
1023
+ },
1024
+ p(ctx, [dirty]) {
1025
+ if (dirty & /*ruleLabelArray, pxmm, bounding*/ 7) {
1026
+ each_value = /*ruleLabelArray*/ ctx[1];
1027
+ internal.group_outros();
1028
+ each_blocks = internal.update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value, each_1_lookup, div, internal.outro_and_destroy_block, create_each_block$2, null, get_each_context$2);
1029
+ internal.check_outros();
1030
+ }
1031
+ },
1032
+ i(local) {
1033
+ if (current) return;
1034
+
1035
+ for (let i = 0; i < each_value.length; i += 1) {
1036
+ internal.transition_in(each_blocks[i]);
1037
+ }
1038
+
1039
+ current = true;
1040
+ },
1041
+ o(local) {
1042
+ for (let i = 0; i < each_blocks.length; i += 1) {
1043
+ internal.transition_out(each_blocks[i]);
1044
+ }
1045
+
1046
+ current = false;
1047
+ },
1048
+ d(detaching) {
1049
+ if (detaching) internal.detach(div);
1050
+
1051
+ for (let i = 0; i < each_blocks.length; i += 1) {
1052
+ each_blocks[i].d();
1053
+ }
1054
+ }
1055
+ };
1056
+ }
1057
+
1058
+ function instance$b($$self, $$props, $$invalidate) {
1059
+ let bounding;
1060
+ let ruleLabelData;
1061
+ let ruleLabelDataKeys;
1062
+ let ruleLabelArray;
1063
+ let { pxmm } = $$props;
1064
+ let { floorIndex } = $$props;
1065
+ let { floorplanData } = $$props;
1066
+
1067
+ $$self.$$set = $$props => {
1068
+ if ('pxmm' in $$props) $$invalidate(0, pxmm = $$props.pxmm);
1069
+ if ('floorIndex' in $$props) $$invalidate(3, floorIndex = $$props.floorIndex);
1070
+ if ('floorplanData' in $$props) $$invalidate(4, floorplanData = $$props.floorplanData);
1071
+ };
1072
+
1073
+ $$self.$$.update = () => {
1074
+ if ($$self.$$.dirty & /*floorplanData*/ 16) {
1075
+ $$invalidate(2, bounding = floorplanData.bounding);
1076
+ }
1077
+
1078
+ if ($$self.$$.dirty & /*floorplanData, floorIndex*/ 24) {
1079
+ $$invalidate(5, ruleLabelData = floorplanData.floorDatas[floorIndex].rules);
1080
+ }
1081
+
1082
+ if ($$self.$$.dirty & /*ruleLabelData*/ 32) {
1083
+ $$invalidate(6, ruleLabelDataKeys = Object.keys(ruleLabelData));
1084
+ }
1085
+
1086
+ if ($$self.$$.dirty & /*ruleLabelDataKeys, ruleLabelData*/ 96) {
1087
+ $$invalidate(1, ruleLabelArray = ruleLabelDataKeys.map(key => [key, ruleLabelData[key]]));
1088
+ }
1089
+ };
1090
+
1091
+ return [
1092
+ pxmm,
1093
+ ruleLabelArray,
1094
+ bounding,
1095
+ floorIndex,
1096
+ floorplanData,
1097
+ ruleLabelData,
1098
+ ruleLabelDataKeys
1099
+ ];
1100
+ }
1101
+
1102
+ class RuleLabels extends internal.SvelteComponent {
1103
+ constructor(options) {
1104
+ super();
1105
+ internal.init(this, options, instance$b, create_fragment$b, internal.safe_not_equal, { pxmm: 0, floorIndex: 3, floorplanData: 4 });
1106
+ }
1107
+ }
1108
+
1109
+ /* src/floorplan/Components/Normalmage.svelte generated by Svelte v3.47.0 */
1110
+
1111
+ function add_css$7(target) {
1112
+ internal.append_styles(target, "svelte-1cuuebb", "img.svelte-1cuuebb{width:100%;height:100%}");
1113
+ }
1114
+
1115
+ function create_fragment$a(ctx) {
1116
+ let img;
1117
+ let img_src_value;
1118
+
1119
+ return {
1120
+ c() {
1121
+ img = internal.element("img");
1122
+ if (!internal.src_url_equal(img.src, img_src_value = /*url*/ ctx[0])) internal.attr(img, "src", img_src_value);
1123
+ internal.attr(img, "alt", "floorplan iamge");
1124
+ internal.attr(img, "class", "svelte-1cuuebb");
1125
+ },
1126
+ m(target, anchor) {
1127
+ internal.insert(target, img, anchor);
1128
+ },
1129
+ p(ctx, [dirty]) {
1130
+ if (dirty & /*url*/ 1 && !internal.src_url_equal(img.src, img_src_value = /*url*/ ctx[0])) {
1131
+ internal.attr(img, "src", img_src_value);
1132
+ }
1133
+ },
1134
+ i: internal.noop,
1135
+ o: internal.noop,
1136
+ d(detaching) {
1137
+ if (detaching) internal.detach(img);
1138
+ }
1139
+ };
1140
+ }
1141
+
1142
+ function instance$a($$self, $$props, $$invalidate) {
1143
+ let { url } = $$props;
1144
+
1145
+ $$self.$$set = $$props => {
1146
+ if ('url' in $$props) $$invalidate(0, url = $$props.url);
1147
+ };
1148
+
1149
+ return [url];
1150
+ }
1151
+
1152
+ class Normalmage extends internal.SvelteComponent {
1153
+ constructor(options) {
1154
+ super();
1155
+ internal.init(this, options, instance$a, create_fragment$a, internal.safe_not_equal, { url: 0 }, add_css$7);
1156
+ }
1157
+ }
1158
+
1159
+ /* src/floorplan/Components/SvgImage.svelte generated by Svelte v3.47.0 */
1160
+
1161
+ function add_css$6(target) {
1162
+ internal.append_styles(target, "svelte-1qqy56u", ".floorplan-plugin__base-image.svelte-1qqy56u{width:100%;height:100%}");
1163
+ }
1164
+
1165
+ function create_fragment$9(ctx) {
1166
+ let div;
1167
+ let html_tag;
1168
+ let t;
1169
+ let html_tag_1;
1170
+
1171
+ return {
1172
+ c() {
1173
+ div = internal.element("div");
1174
+ html_tag = new internal.HtmlTag();
1175
+ t = internal.space();
1176
+ html_tag_1 = new internal.HtmlTag();
1177
+ html_tag.a = t;
1178
+ html_tag_1.a = null;
1179
+ internal.attr(div, "class", "floorplan-plugin__base-image svelte-1qqy56u");
1180
+ },
1181
+ m(target, anchor) {
1182
+ internal.insert(target, div, anchor);
1183
+ html_tag.m(/*svgStyle*/ ctx[1], div);
1184
+ internal.append(div, t);
1185
+ html_tag_1.m(/*content*/ ctx[0], div);
1186
+ },
1187
+ p(ctx, [dirty]) {
1188
+ if (dirty & /*content*/ 1) html_tag_1.p(/*content*/ ctx[0]);
1189
+ },
1190
+ i: internal.noop,
1191
+ o: internal.noop,
1192
+ d(detaching) {
1193
+ if (detaching) internal.detach(div);
1194
+ }
1195
+ };
1196
+ }
1197
+
1198
+ function instance$9($$self, $$props, $$invalidate) {
1199
+ let { content } = $$props;
1200
+
1201
+ const svgStyle = `
1202
+ <style>
1203
+ svg [type='lineGroup'] path {
1204
+ fill: #ffffff;
1205
+ stroke: #ffffff;
1206
+ }
1207
+ svg [type='lineItemGroup'] g g g g {
1208
+ stroke: #ffffff;
1209
+ }
1210
+ </style>
1211
+ `;
1212
+
1213
+ $$self.$$set = $$props => {
1214
+ if ('content' in $$props) $$invalidate(0, content = $$props.content);
1215
+ };
1216
+
1217
+ return [content, svgStyle];
1218
+ }
1219
+
1220
+ class SvgImage extends internal.SvelteComponent {
1221
+ constructor(options) {
1222
+ super();
1223
+ internal.init(this, options, instance$9, create_fragment$9, internal.safe_not_equal, { content: 0 }, add_css$6);
1224
+ }
1225
+ }
1226
+
1227
+ /* src/floorplan/Components/BaseImage.svelte generated by Svelte v3.47.0 */
1228
+
1229
+ function add_css$5(target) {
1230
+ internal.append_styles(target, "svelte-126ja8e", ".floorplan-plugin__base-image.svelte-126ja8e{position:absolute;z-index:10;width:100%;height:100%;pointer-events:none}");
1231
+ }
1232
+
1233
+ // (12:22)
1234
+ function create_if_block_1$3(ctx) {
1235
+ let normalimage;
1236
+ let current;
1237
+ normalimage = new Normalmage({ props: { url: /*imageData*/ ctx[1].url } });
1238
+
1239
+ return {
1240
+ c() {
1241
+ internal.create_component(normalimage.$$.fragment);
1242
+ },
1243
+ m(target, anchor) {
1244
+ internal.mount_component(normalimage, target, anchor);
1245
+ current = true;
1246
+ },
1247
+ p(ctx, dirty) {
1248
+ const normalimage_changes = {};
1249
+ if (dirty & /*imageData*/ 2) normalimage_changes.url = /*imageData*/ ctx[1].url;
1250
+ normalimage.$set(normalimage_changes);
1251
+ },
1252
+ i(local) {
1253
+ if (current) return;
1254
+ internal.transition_in(normalimage.$$.fragment, local);
1255
+ current = true;
1256
+ },
1257
+ o(local) {
1258
+ internal.transition_out(normalimage.$$.fragment, local);
1259
+ current = false;
1260
+ },
1261
+ d(detaching) {
1262
+ internal.destroy_component(normalimage, detaching);
1263
+ }
1264
+ };
1265
+ }
1266
+
1267
+ // (10:2) {#if svgContent}
1268
+ function create_if_block$3(ctx) {
1269
+ let svgimage;
1270
+ let current;
1271
+
1272
+ svgimage = new SvgImage({
1273
+ props: { content: /*svgContent*/ ctx[0] }
1274
+ });
1275
+
1276
+ return {
1277
+ c() {
1278
+ internal.create_component(svgimage.$$.fragment);
1279
+ },
1280
+ m(target, anchor) {
1281
+ internal.mount_component(svgimage, target, anchor);
1282
+ current = true;
1283
+ },
1284
+ p(ctx, dirty) {
1285
+ const svgimage_changes = {};
1286
+ if (dirty & /*svgContent*/ 1) svgimage_changes.content = /*svgContent*/ ctx[0];
1287
+ svgimage.$set(svgimage_changes);
1288
+ },
1289
+ i(local) {
1290
+ if (current) return;
1291
+ internal.transition_in(svgimage.$$.fragment, local);
1292
+ current = true;
1293
+ },
1294
+ o(local) {
1295
+ internal.transition_out(svgimage.$$.fragment, local);
1296
+ current = false;
1297
+ },
1298
+ d(detaching) {
1299
+ internal.destroy_component(svgimage, detaching);
1300
+ }
1301
+ };
1302
+ }
1303
+
1304
+ function create_fragment$8(ctx) {
1305
+ let div;
1306
+ let current_block_type_index;
1307
+ let if_block;
1308
+ let current;
1309
+ const if_block_creators = [create_if_block$3, create_if_block_1$3];
1310
+ const if_blocks = [];
1311
+
1312
+ function select_block_type(ctx, dirty) {
1313
+ if (/*svgContent*/ ctx[0]) return 0;
1314
+ if (/*imageData*/ ctx[1]) return 1;
1315
+ return -1;
1316
+ }
1317
+
1318
+ if (~(current_block_type_index = select_block_type(ctx))) {
1319
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
1320
+ }
1321
+
1322
+ return {
1323
+ c() {
1324
+ div = internal.element("div");
1325
+ if (if_block) if_block.c();
1326
+ internal.attr(div, "class", "floorplan-plugin__base-image svelte-126ja8e");
1327
+ },
1328
+ m(target, anchor) {
1329
+ internal.insert(target, div, anchor);
1330
+
1331
+ if (~current_block_type_index) {
1332
+ if_blocks[current_block_type_index].m(div, null);
1333
+ }
1334
+
1335
+ current = true;
1336
+ },
1337
+ p(ctx, [dirty]) {
1338
+ let previous_block_index = current_block_type_index;
1339
+ current_block_type_index = select_block_type(ctx);
1340
+
1341
+ if (current_block_type_index === previous_block_index) {
1342
+ if (~current_block_type_index) {
1343
+ if_blocks[current_block_type_index].p(ctx, dirty);
1344
+ }
1345
+ } else {
1346
+ if (if_block) {
1347
+ internal.group_outros();
1348
+
1349
+ internal.transition_out(if_blocks[previous_block_index], 1, 1, () => {
1350
+ if_blocks[previous_block_index] = null;
1351
+ });
1352
+
1353
+ internal.check_outros();
1354
+ }
1355
+
1356
+ if (~current_block_type_index) {
1357
+ if_block = if_blocks[current_block_type_index];
1358
+
1359
+ if (!if_block) {
1360
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
1361
+ if_block.c();
1362
+ } else {
1363
+ if_block.p(ctx, dirty);
1364
+ }
1365
+
1366
+ internal.transition_in(if_block, 1);
1367
+ if_block.m(div, null);
1368
+ } else {
1369
+ if_block = null;
1370
+ }
1371
+ }
1372
+ },
1373
+ i(local) {
1374
+ if (current) return;
1375
+ internal.transition_in(if_block);
1376
+ current = true;
1377
+ },
1378
+ o(local) {
1379
+ internal.transition_out(if_block);
1380
+ current = false;
1381
+ },
1382
+ d(detaching) {
1383
+ if (detaching) internal.detach(div);
1384
+
1385
+ if (~current_block_type_index) {
1386
+ if_blocks[current_block_type_index].d();
1387
+ }
1388
+ }
1389
+ };
1390
+ }
1391
+
1392
+ function instance$8($$self, $$props, $$invalidate) {
1393
+ let imageData;
1394
+ let svgContent;
1395
+ let { floorIndex } = $$props;
1396
+ let { floorplanData } = $$props;
1397
+
1398
+ $$self.$$set = $$props => {
1399
+ if ('floorIndex' in $$props) $$invalidate(2, floorIndex = $$props.floorIndex);
1400
+ if ('floorplanData' in $$props) $$invalidate(3, floorplanData = $$props.floorplanData);
1401
+ };
1402
+
1403
+ $$self.$$.update = () => {
1404
+ if ($$self.$$.dirty & /*floorplanData, floorIndex*/ 12) {
1405
+ $$invalidate(1, imageData = floorplanData.outlines[floorIndex]);
1406
+ }
1407
+
1408
+ if ($$self.$$.dirty & /*floorplanData, floorIndex*/ 12) {
1409
+ $$invalidate(0, svgContent = floorplanData.outlines?.[floorIndex]?.svgContent);
1410
+ }
1411
+ };
1412
+
1413
+ return [svgContent, imageData, floorIndex, floorplanData];
1414
+ }
1415
+
1416
+ class BaseImage extends internal.SvelteComponent {
1417
+ constructor(options) {
1418
+ super();
1419
+ internal.init(this, options, instance$8, create_fragment$8, internal.safe_not_equal, { floorIndex: 2, floorplanData: 3 }, add_css$5);
1420
+ }
1421
+ }
1422
+
1423
+ function pathD(points, options = {}) {
1424
+ let d = '';
1425
+ const { needZ, needA } = options;
1426
+ const _points = needZ ? points.slice().concat(points[0]) : points.slice();
1427
+ _points.forEach((_point, index) => {
1428
+ const { x, y } = options.format ? options.format(_point) : _point;
1429
+ const point = x + ',' + y;
1430
+ if (index === 0) {
1431
+ d += 'M' + point;
1432
+ return d;
1433
+ }
1434
+ if (needA?.[index]) {
1435
+ d += 'A' + needA[index] + ',' + point;
1436
+ return d;
1437
+ }
1438
+ d += 'L' + point;
1439
+ return d;
1440
+ });
1441
+ return d + (needZ ? 'Z' : '');
1442
+ }
1443
+ /** 把户型图上点点位转换到 SVG 上的点位 */
1444
+ function formatFloorplanPoint({ x, y }, pxmm, bounding) {
1445
+ const { max, min } = bounding;
1446
+ return { x: (x - min.x) * pxmm, y: (max.y - y) * pxmm };
1447
+ }
1448
+
1449
+ /* src/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte generated by Svelte v3.47.0 */
1450
+
1451
+ function create_fragment$7(ctx) {
1452
+ let path_1;
1453
+
1454
+ return {
1455
+ c() {
1456
+ path_1 = internal.svg_element("path");
1457
+ internal.attr(path_1, "d", /*d*/ ctx[0]);
1458
+ internal.attr(path_1, "fill", "#2F313A");
1459
+ },
1460
+ m(target, anchor) {
1461
+ internal.insert(target, path_1, anchor);
1462
+ },
1463
+ p(ctx, [dirty]) {
1464
+ if (dirty & /*d*/ 1) {
1465
+ internal.attr(path_1, "d", /*d*/ ctx[0]);
1466
+ }
1467
+ },
1468
+ i: internal.noop,
1469
+ o: internal.noop,
1470
+ d(detaching) {
1471
+ if (detaching) internal.detach(path_1);
1472
+ }
1473
+ };
1474
+ }
1475
+
1476
+ function instance$7($$self, $$props, $$invalidate) {
1477
+ let d;
1478
+ let { path } = $$props;
1479
+
1480
+ $$self.$$set = $$props => {
1481
+ if ('path' in $$props) $$invalidate(1, path = $$props.path);
1482
+ };
1483
+
1484
+ $$self.$$.update = () => {
1485
+ if ($$self.$$.dirty & /*path*/ 2) {
1486
+ $$invalidate(0, d = pathD(path, { needZ: true }));
1487
+ }
1488
+ };
1489
+
1490
+ return [d, path];
1491
+ }
1492
+
1493
+ class RoomMaterial_0 extends internal.SvelteComponent {
1494
+ constructor(options) {
1495
+ super();
1496
+ internal.init(this, options, instance$7, create_fragment$7, internal.safe_not_equal, { path: 1 });
1497
+ }
1498
+ }
1499
+
1500
+ /* src/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte generated by Svelte v3.47.0 */
1501
+
1502
+ function create_fragment$6(ctx) {
1503
+ let defs;
1504
+ let pattern;
1505
+ let rect;
1506
+ let path0;
1507
+ let t;
1508
+ let path1;
1509
+
1510
+ return {
1511
+ c() {
1512
+ defs = internal.svg_element("defs");
1513
+ pattern = internal.svg_element("pattern");
1514
+ rect = internal.svg_element("rect");
1515
+ path0 = internal.svg_element("path");
1516
+ t = internal.space();
1517
+ path1 = internal.svg_element("path");
1518
+ internal.attr(rect, "x", "0");
1519
+ internal.attr(rect, "y", "0");
1520
+ internal.attr(rect, "width", /*width*/ ctx[1]);
1521
+ internal.attr(rect, "height", /*width*/ ctx[1]);
1522
+ internal.attr(rect, "fill", "#323747");
1523
+ internal.attr(path0, "d", /*patternPathD*/ ctx[2]);
1524
+ internal.attr(path0, "stroke", "#ffffff");
1525
+ internal.attr(path0, "stroke-opacity", "0.06");
1526
+ internal.attr(path0, "stroke-width", "0.5");
1527
+ internal.attr(path0, "fill", "none");
1528
+ internal.attr(pattern, "id", "fpm-room-pattern-0");
1529
+ internal.attr(pattern, "x", "0");
1530
+ internal.attr(pattern, "y", "0");
1531
+ internal.attr(pattern, "width", /*width*/ ctx[1]);
1532
+ internal.attr(pattern, "height", /*width*/ ctx[1]);
1533
+ internal.attr(pattern, "patternUnits", "userSpaceOnUse");
1534
+ internal.attr(path1, "d", /*d*/ ctx[0]);
1535
+ internal.attr(path1, "fill", "url(#fpm-room-pattern-0)");
1536
+ },
1537
+ m(target, anchor) {
1538
+ internal.insert(target, defs, anchor);
1539
+ internal.append(defs, pattern);
1540
+ internal.append(pattern, rect);
1541
+ internal.append(pattern, path0);
1542
+ internal.insert(target, t, anchor);
1543
+ internal.insert(target, path1, anchor);
1544
+ },
1545
+ p(ctx, [dirty]) {
1546
+ if (dirty & /*d*/ 1) {
1547
+ internal.attr(path1, "d", /*d*/ ctx[0]);
1548
+ }
1549
+ },
1550
+ i: internal.noop,
1551
+ o: internal.noop,
1552
+ d(detaching) {
1553
+ if (detaching) internal.detach(defs);
1554
+ if (detaching) internal.detach(t);
1555
+ if (detaching) internal.detach(path1);
1556
+ }
1557
+ };
1558
+ }
1559
+
1560
+ const halfWidth = 6;
1561
+
1562
+ function instance$6($$self, $$props, $$invalidate) {
1563
+ let d;
1564
+ let { path } = $$props;
1565
+ const width = halfWidth * 2;
1566
+ const patternPathD = `M0 ${halfWidth} h ${width} M${halfWidth} 0 v ${width}`;
1567
+
1568
+ $$self.$$set = $$props => {
1569
+ if ('path' in $$props) $$invalidate(3, path = $$props.path);
1570
+ };
1571
+
1572
+ $$self.$$.update = () => {
1573
+ if ($$self.$$.dirty & /*path*/ 8) {
1574
+ $$invalidate(0, d = pathD(path, { needZ: true }));
1575
+ }
1576
+ };
1577
+
1578
+ return [d, width, patternPathD, path];
1579
+ }
1580
+
1581
+ class RoomMaterial_1 extends internal.SvelteComponent {
1582
+ constructor(options) {
1583
+ super();
1584
+ internal.init(this, options, instance$6, create_fragment$6, internal.safe_not_equal, { path: 3 });
1585
+ }
1586
+ }
1587
+
1588
+ /* src/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte generated by Svelte v3.47.0 */
1589
+
1590
+ function create_fragment$5(ctx) {
1591
+ let defs;
1592
+ let pattern0;
1593
+ let rect0;
1594
+ let pattern1;
1595
+ let rect1;
1596
+ let t0;
1597
+ let path0;
1598
+ let t1;
1599
+ let path1;
1600
+ let t2;
1601
+ let path2;
1602
+
1603
+ return {
1604
+ c() {
1605
+ defs = internal.svg_element("defs");
1606
+ pattern0 = internal.svg_element("pattern");
1607
+ rect0 = internal.svg_element("rect");
1608
+ pattern1 = internal.svg_element("pattern");
1609
+ rect1 = internal.svg_element("rect");
1610
+ t0 = internal.space();
1611
+ path0 = internal.svg_element("path");
1612
+ t1 = internal.space();
1613
+ path1 = internal.svg_element("path");
1614
+ t2 = internal.space();
1615
+ path2 = internal.svg_element("path");
1616
+ internal.attr(rect0, "x", "0.5");
1617
+ internal.attr(rect0, "y", "0.5");
1618
+ internal.attr(rect0, "width", "6");
1619
+ internal.attr(rect0, "height", "50");
1620
+ internal.attr(rect0, "fill", "none");
1621
+ internal.attr(rect0, "stroke", "#4B4B57");
1622
+ internal.attr(rect0, "stroke-width", "0.5");
1623
+ internal.attr(pattern0, "id", "room-material-pattern-1");
1624
+ internal.attr(pattern0, "x", "0");
1625
+ internal.attr(pattern0, "y", "0");
1626
+ internal.attr(pattern0, "width", "13");
1627
+ internal.attr(pattern0, "height", "51");
1628
+ internal.attr(pattern0, "patternUnits", "userSpaceOnUse");
1629
+ internal.attr(rect1, "x", "0.5");
1630
+ internal.attr(rect1, "y", "0.5");
1631
+ internal.attr(rect1, "width", "6");
1632
+ internal.attr(rect1, "height", "50");
1633
+ internal.attr(rect1, "fill", "none");
1634
+ internal.attr(rect1, "stroke", "#4B4B57");
1635
+ internal.attr(rect1, "stroke-width", "0.5");
1636
+ internal.attr(pattern1, "id", "room-material-pattern-2");
1637
+ internal.attr(pattern1, "x", "7");
1638
+ internal.attr(pattern1, "y", "25");
1639
+ internal.attr(pattern1, "width", "13");
1640
+ internal.attr(pattern1, "height", "51");
1641
+ internal.attr(pattern1, "patternUnits", "userSpaceOnUse");
1642
+ internal.attr(path0, "d", /*d*/ ctx[0]);
1643
+ internal.attr(path0, "fill", "#43434D");
1644
+ internal.attr(path1, "d", /*d*/ ctx[0]);
1645
+ internal.attr(path1, "fill", "url(#room-material-pattern-1)");
1646
+ internal.attr(path2, "d", /*d*/ ctx[0]);
1647
+ internal.attr(path2, "fill", "url(#room-material-pattern-2)");
1648
+ },
1649
+ m(target, anchor) {
1650
+ internal.insert(target, defs, anchor);
1651
+ internal.append(defs, pattern0);
1652
+ internal.append(pattern0, rect0);
1653
+ internal.append(defs, pattern1);
1654
+ internal.append(pattern1, rect1);
1655
+ internal.insert(target, t0, anchor);
1656
+ internal.insert(target, path0, anchor);
1657
+ internal.insert(target, t1, anchor);
1658
+ internal.insert(target, path1, anchor);
1659
+ internal.insert(target, t2, anchor);
1660
+ internal.insert(target, path2, anchor);
1661
+ },
1662
+ p(ctx, [dirty]) {
1663
+ if (dirty & /*d*/ 1) {
1664
+ internal.attr(path0, "d", /*d*/ ctx[0]);
1665
+ }
1666
+
1667
+ if (dirty & /*d*/ 1) {
1668
+ internal.attr(path1, "d", /*d*/ ctx[0]);
1669
+ }
1670
+
1671
+ if (dirty & /*d*/ 1) {
1672
+ internal.attr(path2, "d", /*d*/ ctx[0]);
1673
+ }
1674
+ },
1675
+ i: internal.noop,
1676
+ o: internal.noop,
1677
+ d(detaching) {
1678
+ if (detaching) internal.detach(defs);
1679
+ if (detaching) internal.detach(t0);
1680
+ if (detaching) internal.detach(path0);
1681
+ if (detaching) internal.detach(t1);
1682
+ if (detaching) internal.detach(path1);
1683
+ if (detaching) internal.detach(t2);
1684
+ if (detaching) internal.detach(path2);
1685
+ }
1686
+ };
1687
+ }
1688
+
1689
+ function instance$5($$self, $$props, $$invalidate) {
1690
+ let d;
1691
+ let { path } = $$props;
1692
+
1693
+ $$self.$$set = $$props => {
1694
+ if ('path' in $$props) $$invalidate(1, path = $$props.path);
1695
+ };
1696
+
1697
+ $$self.$$.update = () => {
1698
+ if ($$self.$$.dirty & /*path*/ 2) {
1699
+ $$invalidate(0, d = pathD(path, { needZ: true }));
1700
+ }
1701
+ };
1702
+
1703
+ return [d, path];
1704
+ }
1705
+
1706
+ class RoomMaterial_2 extends internal.SvelteComponent {
1707
+ constructor(options) {
1708
+ super();
1709
+ internal.init(this, options, instance$5, create_fragment$5, internal.safe_not_equal, { path: 1 });
1710
+ }
1711
+ }
1712
+
1713
+ /* src/floorplan/Components/RoomMaterials/RoomMaterial.svelte generated by Svelte v3.47.0 */
1714
+
1715
+ function add_css$4(target) {
1716
+ internal.append_styles(target, "svelte-1b0icjc", "svg.svelte-1b0icjc{position:absolute;width:100%;height:100%;overflow:visible}");
1717
+ }
1718
+
1719
+ function get_each_context$1(ctx, list, i) {
1720
+ const child_ctx = ctx.slice();
1721
+ child_ctx[4] = list[i];
1722
+ return child_ctx;
1723
+ }
1724
+
1725
+ // (21:6) {:else}
1726
+ function create_else_block(ctx) {
1727
+ let roommaterial_1;
1728
+ let current;
1729
+ roommaterial_1 = new RoomMaterial_1({ props: { path: /*room*/ ctx[4].path } });
1730
+
1731
+ return {
1732
+ c() {
1733
+ internal.create_component(roommaterial_1.$$.fragment);
1734
+ },
1735
+ m(target, anchor) {
1736
+ internal.mount_component(roommaterial_1, target, anchor);
1737
+ current = true;
1738
+ },
1739
+ p(ctx, dirty) {
1740
+ const roommaterial_1_changes = {};
1741
+ if (dirty & /*rooms*/ 1) roommaterial_1_changes.path = /*room*/ ctx[4].path;
1742
+ roommaterial_1.$set(roommaterial_1_changes);
1743
+ },
1744
+ i(local) {
1745
+ if (current) return;
1746
+ internal.transition_in(roommaterial_1.$$.fragment, local);
1747
+ current = true;
1748
+ },
1749
+ o(local) {
1750
+ internal.transition_out(roommaterial_1.$$.fragment, local);
1751
+ current = false;
1752
+ },
1753
+ d(detaching) {
1754
+ internal.destroy_component(roommaterial_1, detaching);
1755
+ }
1756
+ };
1757
+ }
1758
+
1759
+ // (19:37)
1760
+ function create_if_block_1$2(ctx) {
1761
+ let roommaterial_2;
1762
+ let current;
1763
+ roommaterial_2 = new RoomMaterial_2({ props: { path: /*room*/ ctx[4].path } });
1764
+
1765
+ return {
1766
+ c() {
1767
+ internal.create_component(roommaterial_2.$$.fragment);
1768
+ },
1769
+ m(target, anchor) {
1770
+ internal.mount_component(roommaterial_2, target, anchor);
1771
+ current = true;
1772
+ },
1773
+ p(ctx, dirty) {
1774
+ const roommaterial_2_changes = {};
1775
+ if (dirty & /*rooms*/ 1) roommaterial_2_changes.path = /*room*/ ctx[4].path;
1776
+ roommaterial_2.$set(roommaterial_2_changes);
1777
+ },
1778
+ i(local) {
1779
+ if (current) return;
1780
+ internal.transition_in(roommaterial_2.$$.fragment, local);
1781
+ current = true;
1782
+ },
1783
+ o(local) {
1784
+ internal.transition_out(roommaterial_2.$$.fragment, local);
1785
+ current = false;
1786
+ },
1787
+ d(detaching) {
1788
+ internal.destroy_component(roommaterial_2, detaching);
1789
+ }
1790
+ };
1791
+ }
1792
+
1793
+ // (17:6) {#if room.floorType === 1}
1794
+ function create_if_block$2(ctx) {
1795
+ let roommaterial_0;
1796
+ let current;
1797
+ roommaterial_0 = new RoomMaterial_0({ props: { path: /*room*/ ctx[4].path } });
1798
+
1799
+ return {
1800
+ c() {
1801
+ internal.create_component(roommaterial_0.$$.fragment);
1802
+ },
1803
+ m(target, anchor) {
1804
+ internal.mount_component(roommaterial_0, target, anchor);
1805
+ current = true;
1806
+ },
1807
+ p(ctx, dirty) {
1808
+ const roommaterial_0_changes = {};
1809
+ if (dirty & /*rooms*/ 1) roommaterial_0_changes.path = /*room*/ ctx[4].path;
1810
+ roommaterial_0.$set(roommaterial_0_changes);
1811
+ },
1812
+ i(local) {
1813
+ if (current) return;
1814
+ internal.transition_in(roommaterial_0.$$.fragment, local);
1815
+ current = true;
1816
+ },
1817
+ o(local) {
1818
+ internal.transition_out(roommaterial_0.$$.fragment, local);
1819
+ current = false;
1820
+ },
1821
+ d(detaching) {
1822
+ internal.destroy_component(roommaterial_0, detaching);
1823
+ }
1824
+ };
1825
+ }
1826
+
1827
+ // (15:2) {#each rooms as room}
1828
+ function create_each_block$1(ctx) {
1829
+ let svg;
1830
+ let current_block_type_index;
1831
+ let if_block;
1832
+ let current;
1833
+ const if_block_creators = [create_if_block$2, create_if_block_1$2, create_else_block];
1834
+ const if_blocks = [];
1835
+
1836
+ function select_block_type(ctx, dirty) {
1837
+ if (/*room*/ ctx[4].floorType === 1) return 0;
1838
+ if (/*room*/ ctx[4].floorType === 0) return 1;
1839
+ return 2;
1840
+ }
1841
+
1842
+ current_block_type_index = select_block_type(ctx);
1843
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
1844
+
1845
+ return {
1846
+ c() {
1847
+ svg = internal.svg_element("svg");
1848
+ if_block.c();
1849
+ internal.attr(svg, "class", "svelte-1b0icjc");
1850
+ },
1851
+ m(target, anchor) {
1852
+ internal.insert(target, svg, anchor);
1853
+ if_blocks[current_block_type_index].m(svg, null);
1854
+ current = true;
1855
+ },
1856
+ p(ctx, dirty) {
1857
+ let previous_block_index = current_block_type_index;
1858
+ current_block_type_index = select_block_type(ctx);
1859
+
1860
+ if (current_block_type_index === previous_block_index) {
1861
+ if_blocks[current_block_type_index].p(ctx, dirty);
1862
+ } else {
1863
+ internal.group_outros();
1864
+
1865
+ internal.transition_out(if_blocks[previous_block_index], 1, 1, () => {
1866
+ if_blocks[previous_block_index] = null;
1867
+ });
1868
+
1869
+ internal.check_outros();
1870
+ if_block = if_blocks[current_block_type_index];
1871
+
1872
+ if (!if_block) {
1873
+ if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
1874
+ if_block.c();
1875
+ } else {
1876
+ if_block.p(ctx, dirty);
1877
+ }
1878
+
1879
+ internal.transition_in(if_block, 1);
1880
+ if_block.m(svg, null);
1881
+ }
1882
+ },
1883
+ i(local) {
1884
+ if (current) return;
1885
+ internal.transition_in(if_block);
1886
+ current = true;
1887
+ },
1888
+ o(local) {
1889
+ internal.transition_out(if_block);
1890
+ current = false;
1891
+ },
1892
+ d(detaching) {
1893
+ if (detaching) internal.detach(svg);
1894
+ if_blocks[current_block_type_index].d();
1895
+ }
1896
+ };
1897
+ }
1898
+
1899
+ function create_fragment$4(ctx) {
1900
+ let div;
1901
+ let current;
1902
+ let each_value = /*rooms*/ ctx[0];
1903
+ let each_blocks = [];
1904
+
1905
+ for (let i = 0; i < each_value.length; i += 1) {
1906
+ each_blocks[i] = create_each_block$1(get_each_context$1(ctx, each_value, i));
1907
+ }
1908
+
1909
+ const out = i => internal.transition_out(each_blocks[i], 1, 1, () => {
1910
+ each_blocks[i] = null;
1911
+ });
1912
+
1913
+ return {
1914
+ c() {
1915
+ div = internal.element("div");
1916
+
1917
+ for (let i = 0; i < each_blocks.length; i += 1) {
1918
+ each_blocks[i].c();
1919
+ }
1920
+
1921
+ internal.attr(div, "class", "floorplan-plugin__room-material");
1922
+ },
1923
+ m(target, anchor) {
1924
+ internal.insert(target, div, anchor);
1925
+
1926
+ for (let i = 0; i < each_blocks.length; i += 1) {
1927
+ each_blocks[i].m(div, null);
1928
+ }
1929
+
1930
+ current = true;
1931
+ },
1932
+ p(ctx, [dirty]) {
1933
+ if (dirty & /*rooms*/ 1) {
1934
+ each_value = /*rooms*/ ctx[0];
1935
+ let i;
1936
+
1937
+ for (i = 0; i < each_value.length; i += 1) {
1938
+ const child_ctx = get_each_context$1(ctx, each_value, i);
1939
+
1940
+ if (each_blocks[i]) {
1941
+ each_blocks[i].p(child_ctx, dirty);
1942
+ internal.transition_in(each_blocks[i], 1);
1943
+ } else {
1944
+ each_blocks[i] = create_each_block$1(child_ctx);
1945
+ each_blocks[i].c();
1946
+ internal.transition_in(each_blocks[i], 1);
1947
+ each_blocks[i].m(div, null);
1948
+ }
1949
+ }
1950
+
1951
+ internal.group_outros();
1952
+
1953
+ for (i = each_value.length; i < each_blocks.length; i += 1) {
1954
+ out(i);
1955
+ }
1956
+
1957
+ internal.check_outros();
1958
+ }
1959
+ },
1960
+ i(local) {
1961
+ if (current) return;
1962
+
1963
+ for (let i = 0; i < each_value.length; i += 1) {
1964
+ internal.transition_in(each_blocks[i]);
1965
+ }
1966
+
1967
+ current = true;
1968
+ },
1969
+ o(local) {
1970
+ each_blocks = each_blocks.filter(Boolean);
1971
+
1972
+ for (let i = 0; i < each_blocks.length; i += 1) {
1973
+ internal.transition_out(each_blocks[i]);
1974
+ }
1975
+
1976
+ current = false;
1977
+ },
1978
+ d(detaching) {
1979
+ if (detaching) internal.detach(div);
1980
+ internal.destroy_each(each_blocks, detaching);
1981
+ }
1982
+ };
1983
+ }
1984
+
1985
+ function instance$4($$self, $$props, $$invalidate) {
1986
+ let rooms;
1987
+ let { floorIndex } = $$props;
1988
+ let { pxmm } = $$props;
1989
+ let { floorplanData } = $$props;
1990
+
1991
+ $$self.$$set = $$props => {
1992
+ if ('floorIndex' in $$props) $$invalidate(1, floorIndex = $$props.floorIndex);
1993
+ if ('pxmm' in $$props) $$invalidate(2, pxmm = $$props.pxmm);
1994
+ if ('floorplanData' in $$props) $$invalidate(3, floorplanData = $$props.floorplanData);
1995
+ };
1996
+
1997
+ $$self.$$.update = () => {
1998
+ if ($$self.$$.dirty & /*floorplanData, floorIndex, pxmm*/ 14) {
1999
+ $$invalidate(0, rooms = floorplanData.floorDatas[floorIndex].rooms.map(room => ({
2000
+ ...room,
2001
+ path: room.path.map(p => formatFloorplanPoint(p, pxmm, floorplanData.bounding))
2002
+ })));
2003
+ }
2004
+ };
2005
+
2006
+ return [rooms, floorIndex, pxmm, floorplanData];
2007
+ }
2008
+
2009
+ class RoomMaterial extends internal.SvelteComponent {
2010
+ constructor(options) {
2011
+ super();
2012
+ internal.init(this, options, instance$4, create_fragment$4, internal.safe_not_equal, { floorIndex: 1, pxmm: 2, floorplanData: 3 }, add_css$4);
2013
+ }
2014
+ }
2015
+
2016
+ /* src/floorplan/Components/RoomHighlight/Room.svelte generated by Svelte v3.47.0 */
2017
+
2018
+ function add_css$3(target) {
2019
+ internal.append_styles(target, "svelte-11takew", "path.svelte-11takew{opacity:0}path.svelte-11takew:hover{opacity:0.1}");
2020
+ }
2021
+
2022
+ function create_fragment$3(ctx) {
2023
+ let path;
2024
+
2025
+ return {
2026
+ c() {
2027
+ path = internal.svg_element("path");
2028
+ internal.attr(path, "d", /*_pathD*/ ctx[0]);
2029
+ internal.attr(path, "fill", `#fff`);
2030
+ internal.attr(path, "class", "svelte-11takew");
2031
+ },
2032
+ m(target, anchor) {
2033
+ internal.insert(target, path, anchor);
2034
+ },
2035
+ p: internal.noop,
2036
+ i: internal.noop,
2037
+ o: internal.noop,
2038
+ d(detaching) {
2039
+ if (detaching) internal.detach(path);
2040
+ }
2041
+ };
2042
+ }
2043
+
2044
+ function instance$3($$self, $$props, $$invalidate) {
2045
+ let { pxmm } = $$props;
2046
+ let { room } = $$props;
2047
+ let { floorplanData } = $$props;
2048
+ const { bounding } = floorplanData;
2049
+
2050
+ const _pathD = pathD(room.path, {
2051
+ needZ: true,
2052
+ format: vector => formatFloorplanPoint(vector, pxmm, bounding)
2053
+ });
2054
+
2055
+ $$self.$$set = $$props => {
2056
+ if ('pxmm' in $$props) $$invalidate(1, pxmm = $$props.pxmm);
2057
+ if ('room' in $$props) $$invalidate(2, room = $$props.room);
2058
+ if ('floorplanData' in $$props) $$invalidate(3, floorplanData = $$props.floorplanData);
2059
+ };
2060
+
2061
+ return [_pathD, pxmm, room, floorplanData];
2062
+ }
2063
+
2064
+ class Room extends internal.SvelteComponent {
2065
+ constructor(options) {
2066
+ super();
2067
+ internal.init(this, options, instance$3, create_fragment$3, internal.safe_not_equal, { pxmm: 1, room: 2, floorplanData: 3 }, add_css$3);
2068
+ }
2069
+ }
2070
+
2071
+ /* src/floorplan/Components/RoomHighlight/RoomHighlight.svelte generated by Svelte v3.47.0 */
2072
+
2073
+ function add_css$2(target) {
2074
+ internal.append_styles(target, "svelte-1aais5l", ".floorplan-plugin__room-highlight.svelte-1aais5l{position:absolute;width:100%;height:100%;pointer-events:all}svg.svelte-1aais5l{width:100%;height:100%;overflow:visible}");
2075
+ }
2076
+
2077
+ function get_each_context(ctx, list, i) {
2078
+ const child_ctx = ctx.slice();
2079
+ child_ctx[12] = list[i];
2080
+ return child_ctx;
2081
+ }
2082
+
2083
+ // (41:4) {#each floorplanData.floorDatas[floorIndex].rooms as room (room.id)}
2084
+ function create_each_block(key_1, ctx) {
2085
+ let first;
2086
+ let room;
2087
+ let current;
2088
+
2089
+ const room_spread_levels = [
2090
+ {
2091
+ room: /*room*/ ctx[12],
2092
+ floorplanData: /*floorplanData*/ ctx[2],
2093
+ pxmm: /*pxmm*/ ctx[0]
2094
+ }
2095
+ ];
2096
+
2097
+ let room_props = {};
2098
+
2099
+ for (let i = 0; i < room_spread_levels.length; i += 1) {
2100
+ room_props = internal.assign(room_props, room_spread_levels[i]);
2101
+ }
2102
+
2103
+ room = new Room({ props: room_props });
2104
+
2105
+ return {
2106
+ key: key_1,
2107
+ first: null,
2108
+ c() {
2109
+ first = internal.empty();
2110
+ internal.create_component(room.$$.fragment);
2111
+ this.first = first;
2112
+ },
2113
+ m(target, anchor) {
2114
+ internal.insert(target, first, anchor);
2115
+ internal.mount_component(room, target, anchor);
2116
+ current = true;
2117
+ },
2118
+ p(new_ctx, dirty) {
2119
+ ctx = new_ctx;
2120
+
2121
+ const room_changes = (dirty & /*floorplanData, floorIndex, pxmm*/ 7)
2122
+ ? internal.get_spread_update(room_spread_levels, [
2123
+ {
2124
+ room: /*room*/ ctx[12],
2125
+ floorplanData: /*floorplanData*/ ctx[2],
2126
+ pxmm: /*pxmm*/ ctx[0]
2127
+ }
2128
+ ])
2129
+ : {};
2130
+
2131
+ room.$set(room_changes);
2132
+ },
2133
+ i(local) {
2134
+ if (current) return;
2135
+ internal.transition_in(room.$$.fragment, local);
2136
+ current = true;
2137
+ },
2138
+ o(local) {
2139
+ internal.transition_out(room.$$.fragment, local);
2140
+ current = false;
2141
+ },
2142
+ d(detaching) {
2143
+ if (detaching) internal.detach(first);
2144
+ internal.destroy_component(room, detaching);
2145
+ }
2146
+ };
2147
+ }
2148
+
2149
+ function create_fragment$2(ctx) {
2150
+ let div;
2151
+ let svg;
2152
+ let each_blocks = [];
2153
+ let each_1_lookup = new Map();
2154
+ let div_resize_listener;
2155
+ let current;
2156
+ let mounted;
2157
+ let dispose;
2158
+ let each_value = /*floorplanData*/ ctx[2].floorDatas[/*floorIndex*/ ctx[1]].rooms;
2159
+ const get_key = ctx => /*room*/ ctx[12].id;
2160
+
2161
+ for (let i = 0; i < each_value.length; i += 1) {
2162
+ let child_ctx = get_each_context(ctx, each_value, i);
2163
+ let key = get_key(child_ctx);
2164
+ each_1_lookup.set(key, each_blocks[i] = create_each_block(key, child_ctx));
2165
+ }
2166
+
2167
+ return {
2168
+ c() {
2169
+ div = internal.element("div");
2170
+ svg = internal.svg_element("svg");
2171
+
2172
+ for (let i = 0; i < each_blocks.length; i += 1) {
2173
+ each_blocks[i].c();
2174
+ }
2175
+
2176
+ internal.attr(svg, "class", "svelte-1aais5l");
2177
+ internal.attr(div, "class", "floorplan-plugin__room-highlight svelte-1aais5l");
2178
+ internal.add_render_callback(() => /*div_elementresize_handler*/ ctx[10].call(div));
2179
+ },
2180
+ m(target, anchor) {
2181
+ internal.insert(target, div, anchor);
2182
+ internal.append(div, svg);
2183
+
2184
+ for (let i = 0; i < each_blocks.length; i += 1) {
2185
+ each_blocks[i].m(svg, null);
2186
+ }
2187
+
2188
+ /*div_binding*/ ctx[9](div);
2189
+ div_resize_listener = internal.add_resize_listener(div, /*div_elementresize_handler*/ ctx[10].bind(div));
2190
+ current = true;
2191
+
2192
+ if (!mounted) {
2193
+ dispose = internal.listen(div, "click", /*handleClick*/ ctx[6]);
2194
+ mounted = true;
2195
+ }
2196
+ },
2197
+ p(ctx, [dirty]) {
2198
+ if (dirty & /*floorplanData, floorIndex, pxmm*/ 7) {
2199
+ each_value = /*floorplanData*/ ctx[2].floorDatas[/*floorIndex*/ ctx[1]].rooms;
2200
+ internal.group_outros();
2201
+ each_blocks = internal.update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value, each_1_lookup, svg, internal.outro_and_destroy_block, create_each_block, null, get_each_context);
2202
+ internal.check_outros();
2203
+ }
2204
+ },
2205
+ i(local) {
2206
+ if (current) return;
2207
+
2208
+ for (let i = 0; i < each_value.length; i += 1) {
2209
+ internal.transition_in(each_blocks[i]);
2210
+ }
2211
+
2212
+ current = true;
2213
+ },
2214
+ o(local) {
2215
+ for (let i = 0; i < each_blocks.length; i += 1) {
2216
+ internal.transition_out(each_blocks[i]);
2217
+ }
2218
+
2219
+ current = false;
2220
+ },
2221
+ d(detaching) {
2222
+ if (detaching) internal.detach(div);
2223
+
2224
+ for (let i = 0; i < each_blocks.length; i += 1) {
2225
+ each_blocks[i].d();
2226
+ }
2227
+
2228
+ /*div_binding*/ ctx[9](null);
2229
+ div_resize_listener();
2230
+ mounted = false;
2231
+ dispose();
2232
+ }
2233
+ };
2234
+ }
2235
+
2236
+ function instance$2($$self, $$props, $$invalidate) {
2237
+ let { five } = $$props;
2238
+ let { pxmm } = $$props;
2239
+ let { floorIndex } = $$props;
2240
+ let { floorplanData } = $$props;
2241
+ let { onRoomHeightClick } = $$props;
2242
+ let clientWidth;
2243
+ let clientHeight;
2244
+ let highlightContainerDom;
2245
+ const { observers: floorplan_observers } = floorplanData;
2246
+
2247
+ const handleClick = function (e) {
2248
+ if (onRoomHeightClick?.(e) === false) return;
2249
+
2250
+ // 因为 mouse.offsetX 的兼容性问题,手动计算 mouse offsetX offsetY
2251
+ const boundingClientRect = highlightContainerDom.getBoundingClientRect();
2252
+
2253
+ const mouseClientVector = new THREE.Vector2(e.clientX, e.clientY);
2254
+ const domTopLeftVector = new THREE.Vector2(boundingClientRect.left, boundingClientRect.top);
2255
+ const mouseOffsetVector = mouseClientVector.clone().sub(domTopLeftVector);
2256
+
2257
+ // px 转换为 百分比
2258
+ const mouseOffsetRelativeVector = new THREE.Vector2(mouseOffsetVector.x / clientWidth, mouseOffsetVector.y / clientHeight);
2259
+
2260
+ const closestPoint = floorplan_observers.filter(observer => observer.floorIndex === floorIndex).sort((ob1, ob2) => {
2261
+ const position1 = new THREE.Vector2(ob1.positionInImage.x, ob1.positionInImage.y);
2262
+ const position2 = new THREE.Vector2(ob2.positionInImage.x, ob2.positionInImage.y);
2263
+ return position1.distanceTo(mouseOffsetRelativeVector) - position2.distanceTo(mouseOffsetRelativeVector);
2264
+ })[0];
2265
+
2266
+ five.moveToPano(closestPoint.index);
2267
+ };
2268
+
2269
+ function div_binding($$value) {
2270
+ internal.binding_callbacks[$$value ? 'unshift' : 'push'](() => {
2271
+ highlightContainerDom = $$value;
2272
+ $$invalidate(5, highlightContainerDom);
2273
+ });
2274
+ }
2275
+
2276
+ function div_elementresize_handler() {
2277
+ clientWidth = this.clientWidth;
2278
+ clientHeight = this.clientHeight;
2279
+ $$invalidate(3, clientWidth);
2280
+ $$invalidate(4, clientHeight);
2281
+ }
2282
+
2283
+ $$self.$$set = $$props => {
2284
+ if ('five' in $$props) $$invalidate(7, five = $$props.five);
2285
+ if ('pxmm' in $$props) $$invalidate(0, pxmm = $$props.pxmm);
2286
+ if ('floorIndex' in $$props) $$invalidate(1, floorIndex = $$props.floorIndex);
2287
+ if ('floorplanData' in $$props) $$invalidate(2, floorplanData = $$props.floorplanData);
2288
+ if ('onRoomHeightClick' in $$props) $$invalidate(8, onRoomHeightClick = $$props.onRoomHeightClick);
2289
+ };
2290
+
2291
+ return [
2292
+ pxmm,
2293
+ floorIndex,
2294
+ floorplanData,
2295
+ clientWidth,
2296
+ clientHeight,
2297
+ highlightContainerDom,
2298
+ handleClick,
2299
+ five,
2300
+ onRoomHeightClick,
2301
+ div_binding,
2302
+ div_elementresize_handler
2303
+ ];
2304
+ }
2305
+
2306
+ class RoomHighlight extends internal.SvelteComponent {
2307
+ constructor(options) {
2308
+ super();
2309
+
2310
+ internal.init(
2311
+ this,
2312
+ options,
2313
+ instance$2,
2314
+ create_fragment$2,
2315
+ internal.safe_not_equal,
2316
+ {
2317
+ five: 7,
2318
+ pxmm: 0,
2319
+ floorIndex: 1,
2320
+ floorplanData: 2,
2321
+ onRoomHeightClick: 8
2322
+ },
2323
+ add_css$2
2324
+ );
2325
+ }
2326
+ }
2327
+
2328
+ /* src/floorplan/ModelFloorplanPlugin/Components/CurrentFloor/CurrentFloor.svelte generated by Svelte v3.47.0 */
2329
+
2330
+ function add_css$1(target) {
2331
+ internal.append_styles(target, "svelte-3pdgs4", ".floorplan-current-floor.svelte-3pdgs4{position:relative;width:100%;height:100%}");
2332
+ }
2333
+
2334
+ // (19:2) {#if hoverEnable}
2335
+ function create_if_block_2(ctx) {
2336
+ let roomhighlight;
2337
+ let current;
2338
+
2339
+ const roomhighlight_spread_levels = [
2340
+ {
2341
+ five: /*five*/ ctx[1],
2342
+ pxmm: /*pxmm*/ ctx[0],
2343
+ floorIndex: /*floorIndex*/ ctx[2],
2344
+ floorplanData: /*floorplanData*/ ctx[6],
2345
+ onRoomHeightClick: /*onRoomHeightClick*/ ctx[7]
2346
+ }
2347
+ ];
2348
+
2349
+ let roomhighlight_props = {};
2350
+
2351
+ for (let i = 0; i < roomhighlight_spread_levels.length; i += 1) {
2352
+ roomhighlight_props = internal.assign(roomhighlight_props, roomhighlight_spread_levels[i]);
2353
+ }
2354
+
2355
+ roomhighlight = new RoomHighlight({ props: roomhighlight_props });
2356
+
2357
+ return {
2358
+ c() {
2359
+ internal.create_component(roomhighlight.$$.fragment);
2360
+ },
2361
+ m(target, anchor) {
2362
+ internal.mount_component(roomhighlight, target, anchor);
2363
+ current = true;
2364
+ },
2365
+ p(ctx, dirty) {
2366
+ const roomhighlight_changes = (dirty & /*five, pxmm, floorIndex, floorplanData, onRoomHeightClick*/ 199)
2367
+ ? internal.get_spread_update(roomhighlight_spread_levels, [
2368
+ {
2369
+ five: /*five*/ ctx[1],
2370
+ pxmm: /*pxmm*/ ctx[0],
2371
+ floorIndex: /*floorIndex*/ ctx[2],
2372
+ floorplanData: /*floorplanData*/ ctx[6],
2373
+ onRoomHeightClick: /*onRoomHeightClick*/ ctx[7]
2374
+ }
2375
+ ])
2376
+ : {};
2377
+
2378
+ roomhighlight.$set(roomhighlight_changes);
2379
+ },
2380
+ i(local) {
2381
+ if (current) return;
2382
+ internal.transition_in(roomhighlight.$$.fragment, local);
2383
+ current = true;
2384
+ },
2385
+ o(local) {
2386
+ internal.transition_out(roomhighlight.$$.fragment, local);
2387
+ current = false;
2388
+ },
2389
+ d(detaching) {
2390
+ internal.destroy_component(roomhighlight, detaching);
2391
+ }
2392
+ };
2393
+ }
2394
+
2395
+ // (23:2) {#if roomLabelsEnable}
2396
+ function create_if_block_1$1(ctx) {
2397
+ let roomlabels;
2398
+ let current;
2399
+
2400
+ const roomlabels_spread_levels = [
2401
+ {
2402
+ floorplanData: /*floorplanData*/ ctx[6],
2403
+ floorIndex: /*floorIndex*/ ctx[2],
2404
+ getLabelElement: /*getLabelElement*/ ctx[8]
2405
+ }
2406
+ ];
2407
+
2408
+ let roomlabels_props = {};
2409
+
2410
+ for (let i = 0; i < roomlabels_spread_levels.length; i += 1) {
2411
+ roomlabels_props = internal.assign(roomlabels_props, roomlabels_spread_levels[i]);
2412
+ }
2413
+
2414
+ roomlabels = new RoomLabels({ props: roomlabels_props });
2415
+
2416
+ return {
2417
+ c() {
2418
+ internal.create_component(roomlabels.$$.fragment);
2419
+ },
2420
+ m(target, anchor) {
2421
+ internal.mount_component(roomlabels, target, anchor);
2422
+ current = true;
2423
+ },
2424
+ p(ctx, dirty) {
2425
+ const roomlabels_changes = (dirty & /*floorplanData, floorIndex, getLabelElement*/ 324)
2426
+ ? internal.get_spread_update(roomlabels_spread_levels, [
2427
+ {
2428
+ floorplanData: /*floorplanData*/ ctx[6],
2429
+ floorIndex: /*floorIndex*/ ctx[2],
2430
+ getLabelElement: /*getLabelElement*/ ctx[8]
2431
+ }
2432
+ ])
2433
+ : {};
2434
+
2435
+ roomlabels.$set(roomlabels_changes);
2436
+ },
2437
+ i(local) {
2438
+ if (current) return;
2439
+ internal.transition_in(roomlabels.$$.fragment, local);
2440
+ current = true;
2441
+ },
2442
+ o(local) {
2443
+ internal.transition_out(roomlabels.$$.fragment, local);
2444
+ current = false;
2445
+ },
2446
+ d(detaching) {
2447
+ internal.destroy_component(roomlabels, detaching);
2448
+ }
2449
+ };
2450
+ }
2451
+
2452
+ // (26:2) {#if ruleLabelsEnable}
2453
+ function create_if_block$1(ctx) {
2454
+ let rulelabels;
2455
+ let current;
2456
+
2457
+ const rulelabels_spread_levels = [
2458
+ {
2459
+ floorplanData: /*floorplanData*/ ctx[6],
2460
+ floorIndex: /*floorIndex*/ ctx[2],
2461
+ pxmm: /*pxmm*/ ctx[0]
2462
+ }
2463
+ ];
2464
+
2465
+ let rulelabels_props = {};
2466
+
2467
+ for (let i = 0; i < rulelabels_spread_levels.length; i += 1) {
2468
+ rulelabels_props = internal.assign(rulelabels_props, rulelabels_spread_levels[i]);
2469
+ }
2470
+
2471
+ rulelabels = new RuleLabels({ props: rulelabels_props });
2472
+
2473
+ return {
2474
+ c() {
2475
+ internal.create_component(rulelabels.$$.fragment);
2476
+ },
2477
+ m(target, anchor) {
2478
+ internal.mount_component(rulelabels, target, anchor);
2479
+ current = true;
2480
+ },
2481
+ p(ctx, dirty) {
2482
+ const rulelabels_changes = (dirty & /*floorplanData, floorIndex, pxmm*/ 69)
2483
+ ? internal.get_spread_update(rulelabels_spread_levels, [
2484
+ {
2485
+ floorplanData: /*floorplanData*/ ctx[6],
2486
+ floorIndex: /*floorIndex*/ ctx[2],
2487
+ pxmm: /*pxmm*/ ctx[0]
2488
+ }
2489
+ ])
2490
+ : {};
2491
+
2492
+ rulelabels.$set(rulelabels_changes);
2493
+ },
2494
+ i(local) {
2495
+ if (current) return;
2496
+ internal.transition_in(rulelabels.$$.fragment, local);
2497
+ current = true;
2498
+ },
2499
+ o(local) {
2500
+ internal.transition_out(rulelabels.$$.fragment, local);
2501
+ current = false;
2502
+ },
2503
+ d(detaching) {
2504
+ internal.destroy_component(rulelabels, detaching);
2505
+ }
2506
+ };
2507
+ }
2508
+
2509
+ function create_fragment$1(ctx) {
2510
+ let div;
2511
+ let roommaterial;
2512
+ let t0;
2513
+ let t1;
2514
+ let baseimage;
2515
+ let t2;
2516
+ let t3;
2517
+ let current;
2518
+
2519
+ const roommaterial_spread_levels = [
2520
+ {
2521
+ floorIndex: /*floorIndex*/ ctx[2],
2522
+ floorplanData: /*floorplanData*/ ctx[6],
2523
+ pxmm: /*pxmm*/ ctx[0]
2524
+ }
2525
+ ];
2526
+
2527
+ let roommaterial_props = {};
2528
+
2529
+ for (let i = 0; i < roommaterial_spread_levels.length; i += 1) {
2530
+ roommaterial_props = internal.assign(roommaterial_props, roommaterial_spread_levels[i]);
2531
+ }
2532
+
2533
+ roommaterial = new RoomMaterial({ props: roommaterial_props });
2534
+ let if_block0 = /*hoverEnable*/ ctx[3] && create_if_block_2(ctx);
2535
+
2536
+ const baseimage_spread_levels = [
2537
+ {
2538
+ floorplanData: /*floorplanData*/ ctx[6],
2539
+ floorIndex: /*floorIndex*/ ctx[2]
2540
+ }
2541
+ ];
2542
+
2543
+ let baseimage_props = {};
2544
+
2545
+ for (let i = 0; i < baseimage_spread_levels.length; i += 1) {
2546
+ baseimage_props = internal.assign(baseimage_props, baseimage_spread_levels[i]);
2547
+ }
2548
+
2549
+ baseimage = new BaseImage({ props: baseimage_props });
2550
+ let if_block1 = /*roomLabelsEnable*/ ctx[4] && create_if_block_1$1(ctx);
2551
+ let if_block2 = /*ruleLabelsEnable*/ ctx[5] && create_if_block$1(ctx);
2552
+
2553
+ return {
2554
+ c() {
2555
+ div = internal.element("div");
2556
+ internal.create_component(roommaterial.$$.fragment);
2557
+ t0 = internal.space();
2558
+ if (if_block0) if_block0.c();
2559
+ t1 = internal.space();
2560
+ internal.create_component(baseimage.$$.fragment);
2561
+ t2 = internal.space();
2562
+ if (if_block1) if_block1.c();
2563
+ t3 = internal.space();
2564
+ if (if_block2) if_block2.c();
2565
+ internal.attr(div, "class", "floorplan-current-floor svelte-3pdgs4");
2566
+ },
2567
+ m(target, anchor) {
2568
+ internal.insert(target, div, anchor);
2569
+ internal.mount_component(roommaterial, div, null);
2570
+ internal.append(div, t0);
2571
+ if (if_block0) if_block0.m(div, null);
2572
+ internal.append(div, t1);
2573
+ internal.mount_component(baseimage, div, null);
2574
+ internal.append(div, t2);
2575
+ if (if_block1) if_block1.m(div, null);
2576
+ internal.append(div, t3);
2577
+ if (if_block2) if_block2.m(div, null);
2578
+ current = true;
2579
+ },
2580
+ p(ctx, [dirty]) {
2581
+ const roommaterial_changes = (dirty & /*floorIndex, floorplanData, pxmm*/ 69)
2582
+ ? internal.get_spread_update(roommaterial_spread_levels, [
2583
+ {
2584
+ floorIndex: /*floorIndex*/ ctx[2],
2585
+ floorplanData: /*floorplanData*/ ctx[6],
2586
+ pxmm: /*pxmm*/ ctx[0]
2587
+ }
2588
+ ])
2589
+ : {};
2590
+
2591
+ roommaterial.$set(roommaterial_changes);
2592
+
2593
+ if (/*hoverEnable*/ ctx[3]) {
2594
+ if (if_block0) {
2595
+ if_block0.p(ctx, dirty);
2596
+
2597
+ if (dirty & /*hoverEnable*/ 8) {
2598
+ internal.transition_in(if_block0, 1);
2599
+ }
2600
+ } else {
2601
+ if_block0 = create_if_block_2(ctx);
2602
+ if_block0.c();
2603
+ internal.transition_in(if_block0, 1);
2604
+ if_block0.m(div, t1);
2605
+ }
2606
+ } else if (if_block0) {
2607
+ internal.group_outros();
2608
+
2609
+ internal.transition_out(if_block0, 1, 1, () => {
2610
+ if_block0 = null;
2611
+ });
2612
+
2613
+ internal.check_outros();
2614
+ }
2615
+
2616
+ const baseimage_changes = (dirty & /*floorplanData, floorIndex*/ 68)
2617
+ ? internal.get_spread_update(baseimage_spread_levels, [
2618
+ {
2619
+ floorplanData: /*floorplanData*/ ctx[6],
2620
+ floorIndex: /*floorIndex*/ ctx[2]
2621
+ }
2622
+ ])
2623
+ : {};
2624
+
2625
+ baseimage.$set(baseimage_changes);
2626
+
2627
+ if (/*roomLabelsEnable*/ ctx[4]) {
2628
+ if (if_block1) {
2629
+ if_block1.p(ctx, dirty);
2630
+
2631
+ if (dirty & /*roomLabelsEnable*/ 16) {
2632
+ internal.transition_in(if_block1, 1);
2633
+ }
2634
+ } else {
2635
+ if_block1 = create_if_block_1$1(ctx);
2636
+ if_block1.c();
2637
+ internal.transition_in(if_block1, 1);
2638
+ if_block1.m(div, t3);
2639
+ }
2640
+ } else if (if_block1) {
2641
+ internal.group_outros();
2642
+
2643
+ internal.transition_out(if_block1, 1, 1, () => {
2644
+ if_block1 = null;
2645
+ });
2646
+
2647
+ internal.check_outros();
2648
+ }
2649
+
2650
+ if (/*ruleLabelsEnable*/ ctx[5]) {
2651
+ if (if_block2) {
2652
+ if_block2.p(ctx, dirty);
2653
+
2654
+ if (dirty & /*ruleLabelsEnable*/ 32) {
2655
+ internal.transition_in(if_block2, 1);
2656
+ }
2657
+ } else {
2658
+ if_block2 = create_if_block$1(ctx);
2659
+ if_block2.c();
2660
+ internal.transition_in(if_block2, 1);
2661
+ if_block2.m(div, null);
2662
+ }
2663
+ } else if (if_block2) {
2664
+ internal.group_outros();
2665
+
2666
+ internal.transition_out(if_block2, 1, 1, () => {
2667
+ if_block2 = null;
2668
+ });
2669
+
2670
+ internal.check_outros();
2671
+ }
2672
+ },
2673
+ i(local) {
2674
+ if (current) return;
2675
+ internal.transition_in(roommaterial.$$.fragment, local);
2676
+ internal.transition_in(if_block0);
2677
+ internal.transition_in(baseimage.$$.fragment, local);
2678
+ internal.transition_in(if_block1);
2679
+ internal.transition_in(if_block2);
2680
+ current = true;
2681
+ },
2682
+ o(local) {
2683
+ internal.transition_out(roommaterial.$$.fragment, local);
2684
+ internal.transition_out(if_block0);
2685
+ internal.transition_out(baseimage.$$.fragment, local);
2686
+ internal.transition_out(if_block1);
2687
+ internal.transition_out(if_block2);
2688
+ current = false;
2689
+ },
2690
+ d(detaching) {
2691
+ if (detaching) internal.detach(div);
2692
+ internal.destroy_component(roommaterial);
2693
+ if (if_block0) if_block0.d();
2694
+ internal.destroy_component(baseimage);
2695
+ if (if_block1) if_block1.d();
2696
+ if (if_block2) if_block2.d();
2697
+ }
2698
+ };
2699
+ }
2700
+
2701
+ function instance$1($$self, $$props, $$invalidate) {
2702
+ let { pxmm } = $$props;
2703
+ let { five } = $$props;
2704
+ let { floorIndex } = $$props;
2705
+ let { hoverEnable } = $$props;
2706
+ let { roomLabelsEnable } = $$props;
2707
+ let { ruleLabelsEnable } = $$props;
2708
+ let { floorplanData } = $$props;
2709
+ let { onRoomHeightClick } = $$props;
2710
+ let { getLabelElement } = $$props;
2711
+
2712
+ $$self.$$set = $$props => {
2713
+ if ('pxmm' in $$props) $$invalidate(0, pxmm = $$props.pxmm);
2714
+ if ('five' in $$props) $$invalidate(1, five = $$props.five);
2715
+ if ('floorIndex' in $$props) $$invalidate(2, floorIndex = $$props.floorIndex);
2716
+ if ('hoverEnable' in $$props) $$invalidate(3, hoverEnable = $$props.hoverEnable);
2717
+ if ('roomLabelsEnable' in $$props) $$invalidate(4, roomLabelsEnable = $$props.roomLabelsEnable);
2718
+ if ('ruleLabelsEnable' in $$props) $$invalidate(5, ruleLabelsEnable = $$props.ruleLabelsEnable);
2719
+ if ('floorplanData' in $$props) $$invalidate(6, floorplanData = $$props.floorplanData);
2720
+ if ('onRoomHeightClick' in $$props) $$invalidate(7, onRoomHeightClick = $$props.onRoomHeightClick);
2721
+ if ('getLabelElement' in $$props) $$invalidate(8, getLabelElement = $$props.getLabelElement);
2722
+ };
2723
+
2724
+ return [
2725
+ pxmm,
2726
+ five,
2727
+ floorIndex,
2728
+ hoverEnable,
2729
+ roomLabelsEnable,
2730
+ ruleLabelsEnable,
2731
+ floorplanData,
2732
+ onRoomHeightClick,
2733
+ getLabelElement
2734
+ ];
2735
+ }
2736
+
2737
+ class CurrentFloor extends internal.SvelteComponent {
2738
+ constructor(options) {
2739
+ super();
2740
+
2741
+ internal.init(
2742
+ this,
2743
+ options,
2744
+ instance$1,
2745
+ create_fragment$1,
2746
+ internal.safe_not_equal,
2747
+ {
2748
+ pxmm: 0,
2749
+ five: 1,
2750
+ floorIndex: 2,
2751
+ hoverEnable: 3,
2752
+ roomLabelsEnable: 4,
2753
+ ruleLabelsEnable: 5,
2754
+ floorplanData: 6,
2755
+ onRoomHeightClick: 7,
2756
+ getLabelElement: 8
2757
+ },
2758
+ add_css$1
2759
+ );
2760
+ }
2761
+ }
2762
+
2763
+ /* src/floorplan/ModelFloorplanPlugin/Components/Main.svelte generated by Svelte v3.47.0 */
2764
+
2765
+ function add_css(target) {
2766
+ internal.append_styles(target, "svelte-177x2q7", ".floorplan-main.svelte-177x2q7{width:100%;height:100%}");
2767
+ }
2768
+
2769
+ // (23:0) {#if visible}
2770
+ function create_if_block(ctx) {
2771
+ let div;
2772
+ let currentfloor;
2773
+ let t0;
2774
+ let camera;
2775
+ let t1;
2776
+ let div_intro;
2777
+ let current;
2778
+
2779
+ const currentfloor_spread_levels = [
2780
+ {
2781
+ five: /*five*/ ctx[1],
2782
+ pxmm: /*pxmm*/ ctx[0],
2783
+ floorIndex: /*floorIndex*/ ctx[5],
2784
+ hoverEnable: /*hoverEnable*/ ctx[6],
2785
+ floorplanData: /*floorplanData*/ ctx[10],
2786
+ getLabelElement: /*getLabelElement*/ ctx[14],
2787
+ roomLabelsEnable: /*roomLabelsEnable*/ ctx[8],
2788
+ ruleLabelsEnable: /*ruleLabelsEnable*/ ctx[9],
2789
+ onRoomHeightClick: /*onRoomHeightClick*/ ctx[13]
2790
+ }
2791
+ ];
2792
+
2793
+ let currentfloor_props = {};
2794
+
2795
+ for (let i = 0; i < currentfloor_spread_levels.length; i += 1) {
2796
+ currentfloor_props = internal.assign(currentfloor_props, currentfloor_spread_levels[i]);
2797
+ }
2798
+
2799
+ currentfloor = new CurrentFloor({ props: currentfloor_props });
2800
+
2801
+ const camera_spread_levels = [
2802
+ {
2803
+ panoIndex: /*panoIndex*/ ctx[4],
2804
+ floorplanData: /*floorplanData*/ ctx[10],
2805
+ lastPanoramaLongitude: /*lastPanoramaLongitude*/ ctx[11],
2806
+ cameraImageUrl: /*cameraImageUrl*/ ctx[12]
2807
+ }
2808
+ ];
2809
+
2810
+ let camera_props = {};
2811
+
2812
+ for (let i = 0; i < camera_spread_levels.length; i += 1) {
2813
+ camera_props = internal.assign(camera_props, camera_spread_levels[i]);
2814
+ }
2815
+
2816
+ camera = new Camera({ props: camera_props });
2817
+ let if_block = /*compassEnable*/ ctx[7] && create_if_block_1(ctx);
2818
+
2819
+ return {
2820
+ c() {
2821
+ div = internal.element("div");
2822
+ internal.create_component(currentfloor.$$.fragment);
2823
+ t0 = internal.space();
2824
+ internal.create_component(camera.$$.fragment);
2825
+ t1 = internal.space();
2826
+ if (if_block) if_block.c();
2827
+ internal.attr(div, "class", "floorplan-main svelte-177x2q7");
2828
+ },
2829
+ m(target, anchor) {
2830
+ internal.insert(target, div, anchor);
2831
+ internal.mount_component(currentfloor, div, null);
2832
+ internal.append(div, t0);
2833
+ internal.mount_component(camera, div, null);
2834
+ internal.append(div, t1);
2835
+ if (if_block) if_block.m(div, null);
2836
+ current = true;
2837
+ },
2838
+ p(new_ctx, dirty) {
2839
+ ctx = new_ctx;
2840
+
2841
+ const currentfloor_changes = (dirty & /*five, pxmm, floorIndex, hoverEnable, floorplanData, getLabelElement, roomLabelsEnable, ruleLabelsEnable, onRoomHeightClick*/ 26467)
2842
+ ? internal.get_spread_update(currentfloor_spread_levels, [
2843
+ {
2844
+ five: /*five*/ ctx[1],
2845
+ pxmm: /*pxmm*/ ctx[0],
2846
+ floorIndex: /*floorIndex*/ ctx[5],
2847
+ hoverEnable: /*hoverEnable*/ ctx[6],
2848
+ floorplanData: /*floorplanData*/ ctx[10],
2849
+ getLabelElement: /*getLabelElement*/ ctx[14],
2850
+ roomLabelsEnable: /*roomLabelsEnable*/ ctx[8],
2851
+ ruleLabelsEnable: /*ruleLabelsEnable*/ ctx[9],
2852
+ onRoomHeightClick: /*onRoomHeightClick*/ ctx[13]
2853
+ }
2854
+ ])
2855
+ : {};
2856
+
2857
+ currentfloor.$set(currentfloor_changes);
2858
+
2859
+ const camera_changes = (dirty & /*panoIndex, floorplanData, lastPanoramaLongitude, cameraImageUrl*/ 7184)
2860
+ ? internal.get_spread_update(camera_spread_levels, [
2861
+ {
2862
+ panoIndex: /*panoIndex*/ ctx[4],
2863
+ floorplanData: /*floorplanData*/ ctx[10],
2864
+ lastPanoramaLongitude: /*lastPanoramaLongitude*/ ctx[11],
2865
+ cameraImageUrl: /*cameraImageUrl*/ ctx[12]
2866
+ }
2867
+ ])
2868
+ : {};
2869
+
2870
+ camera.$set(camera_changes);
2871
+
2872
+ if (/*compassEnable*/ ctx[7]) {
2873
+ if (if_block) {
2874
+ if_block.p(ctx, dirty);
2875
+
2876
+ if (dirty & /*compassEnable*/ 128) {
2877
+ internal.transition_in(if_block, 1);
2878
+ }
2879
+ } else {
2880
+ if_block = create_if_block_1(ctx);
2881
+ if_block.c();
2882
+ internal.transition_in(if_block, 1);
2883
+ if_block.m(div, null);
2884
+ }
2885
+ } else if (if_block) {
2886
+ internal.group_outros();
2887
+
2888
+ internal.transition_out(if_block, 1, 1, () => {
2889
+ if_block = null;
2890
+ });
2891
+
2892
+ internal.check_outros();
2893
+ }
2894
+ },
2895
+ i(local) {
2896
+ if (current) return;
2897
+ internal.transition_in(currentfloor.$$.fragment, local);
2898
+ internal.transition_in(camera.$$.fragment, local);
2899
+ internal.transition_in(if_block);
2900
+
2901
+ if (!div_intro) {
2902
+ internal.add_render_callback(() => {
2903
+ div_intro = internal.create_in_transition(div, transition.fade, {
2904
+ duration: /*duration*/ ctx[2],
2905
+ easing: easing.linear
2906
+ });
2907
+
2908
+ div_intro.start();
2909
+ });
2910
+ }
2911
+
2912
+ current = true;
2913
+ },
2914
+ o(local) {
2915
+ internal.transition_out(currentfloor.$$.fragment, local);
2916
+ internal.transition_out(camera.$$.fragment, local);
2917
+ internal.transition_out(if_block);
2918
+ current = false;
2919
+ },
2920
+ d(detaching) {
2921
+ if (detaching) internal.detach(div);
2922
+ internal.destroy_component(currentfloor);
2923
+ internal.destroy_component(camera);
2924
+ if (if_block) if_block.d();
2925
+ }
2926
+ };
2927
+ }
2928
+
2929
+ // (39:4) {#if compassEnable}
2930
+ function create_if_block_1(ctx) {
2931
+ let compass;
2932
+ let current;
2933
+
2934
+ compass = new Compass({
2935
+ props: { floorplanData: /*floorplanData*/ ctx[10] }
2936
+ });
2937
+
2938
+ return {
2939
+ c() {
2940
+ internal.create_component(compass.$$.fragment);
2941
+ },
2942
+ m(target, anchor) {
2943
+ internal.mount_component(compass, target, anchor);
2944
+ current = true;
2945
+ },
2946
+ p(ctx, dirty) {
2947
+ const compass_changes = {};
2948
+ if (dirty & /*floorplanData*/ 1024) compass_changes.floorplanData = /*floorplanData*/ ctx[10];
2949
+ compass.$set(compass_changes);
2950
+ },
2951
+ i(local) {
2952
+ if (current) return;
2953
+ internal.transition_in(compass.$$.fragment, local);
2954
+ current = true;
2955
+ },
2956
+ o(local) {
2957
+ internal.transition_out(compass.$$.fragment, local);
2958
+ current = false;
2959
+ },
2960
+ d(detaching) {
2961
+ internal.destroy_component(compass, detaching);
2962
+ }
2963
+ };
2964
+ }
2965
+
2966
+ function create_fragment(ctx) {
2967
+ let if_block_anchor;
2968
+ let current;
2969
+ let if_block = /*visible*/ ctx[3] && create_if_block(ctx);
2970
+
2971
+ return {
2972
+ c() {
2973
+ if (if_block) if_block.c();
2974
+ if_block_anchor = internal.empty();
2975
+ },
2976
+ m(target, anchor) {
2977
+ if (if_block) if_block.m(target, anchor);
2978
+ internal.insert(target, if_block_anchor, anchor);
2979
+ current = true;
2980
+ },
2981
+ p(ctx, [dirty]) {
2982
+ if (/*visible*/ ctx[3]) {
2983
+ if (if_block) {
2984
+ if_block.p(ctx, dirty);
2985
+
2986
+ if (dirty & /*visible*/ 8) {
2987
+ internal.transition_in(if_block, 1);
2988
+ }
2989
+ } else {
2990
+ if_block = create_if_block(ctx);
2991
+ if_block.c();
2992
+ internal.transition_in(if_block, 1);
2993
+ if_block.m(if_block_anchor.parentNode, if_block_anchor);
2994
+ }
2995
+ } else if (if_block) {
2996
+ internal.group_outros();
2997
+
2998
+ internal.transition_out(if_block, 1, 1, () => {
2999
+ if_block = null;
3000
+ });
3001
+
3002
+ internal.check_outros();
3003
+ }
3004
+ },
3005
+ i(local) {
3006
+ if (current) return;
3007
+ internal.transition_in(if_block);
3008
+ current = true;
3009
+ },
3010
+ o(local) {
3011
+ internal.transition_out(if_block);
3012
+ current = false;
3013
+ },
3014
+ d(detaching) {
3015
+ if (if_block) if_block.d(detaching);
3016
+ if (detaching) internal.detach(if_block_anchor);
3017
+ }
3018
+ };
3019
+ }
3020
+
3021
+ function instance($$self, $$props, $$invalidate) {
3022
+ let { pxmm } = $$props;
3023
+ let { five } = $$props;
3024
+ let { duration = 0 } = $$props;
3025
+ let { visible } = $$props;
3026
+ let { panoIndex } = $$props;
3027
+ let { floorIndex } = $$props;
3028
+ let { hoverEnable } = $$props;
3029
+ let { compassEnable } = $$props;
3030
+ let { roomLabelsEnable } = $$props;
3031
+ let { ruleLabelsEnable } = $$props;
3032
+ let { floorplanData } = $$props;
3033
+ let { lastPanoramaLongitude } = $$props;
3034
+ let { cameraImageUrl } = $$props;
3035
+ let { onRoomHeightClick } = $$props;
3036
+ let { getLabelElement } = $$props;
3037
+
3038
+ $$self.$$set = $$props => {
3039
+ if ('pxmm' in $$props) $$invalidate(0, pxmm = $$props.pxmm);
3040
+ if ('five' in $$props) $$invalidate(1, five = $$props.five);
3041
+ if ('duration' in $$props) $$invalidate(2, duration = $$props.duration);
3042
+ if ('visible' in $$props) $$invalidate(3, visible = $$props.visible);
3043
+ if ('panoIndex' in $$props) $$invalidate(4, panoIndex = $$props.panoIndex);
3044
+ if ('floorIndex' in $$props) $$invalidate(5, floorIndex = $$props.floorIndex);
3045
+ if ('hoverEnable' in $$props) $$invalidate(6, hoverEnable = $$props.hoverEnable);
3046
+ if ('compassEnable' in $$props) $$invalidate(7, compassEnable = $$props.compassEnable);
3047
+ if ('roomLabelsEnable' in $$props) $$invalidate(8, roomLabelsEnable = $$props.roomLabelsEnable);
3048
+ if ('ruleLabelsEnable' in $$props) $$invalidate(9, ruleLabelsEnable = $$props.ruleLabelsEnable);
3049
+ if ('floorplanData' in $$props) $$invalidate(10, floorplanData = $$props.floorplanData);
3050
+ if ('lastPanoramaLongitude' in $$props) $$invalidate(11, lastPanoramaLongitude = $$props.lastPanoramaLongitude);
3051
+ if ('cameraImageUrl' in $$props) $$invalidate(12, cameraImageUrl = $$props.cameraImageUrl);
3052
+ if ('onRoomHeightClick' in $$props) $$invalidate(13, onRoomHeightClick = $$props.onRoomHeightClick);
3053
+ if ('getLabelElement' in $$props) $$invalidate(14, getLabelElement = $$props.getLabelElement);
3054
+ };
3055
+
3056
+ return [
3057
+ pxmm,
3058
+ five,
3059
+ duration,
3060
+ visible,
3061
+ panoIndex,
3062
+ floorIndex,
3063
+ hoverEnable,
3064
+ compassEnable,
3065
+ roomLabelsEnable,
3066
+ ruleLabelsEnable,
3067
+ floorplanData,
3068
+ lastPanoramaLongitude,
3069
+ cameraImageUrl,
3070
+ onRoomHeightClick,
3071
+ getLabelElement
3072
+ ];
3073
+ }
3074
+
3075
+ class Main extends internal.SvelteComponent {
3076
+ constructor(options) {
3077
+ super();
3078
+
3079
+ internal.init(
3080
+ this,
3081
+ options,
3082
+ instance,
3083
+ create_fragment,
3084
+ internal.safe_not_equal,
3085
+ {
3086
+ pxmm: 0,
3087
+ five: 1,
3088
+ duration: 2,
3089
+ visible: 3,
3090
+ panoIndex: 4,
3091
+ floorIndex: 5,
3092
+ hoverEnable: 6,
3093
+ compassEnable: 7,
3094
+ roomLabelsEnable: 8,
3095
+ ruleLabelsEnable: 9,
3096
+ floorplanData: 10,
3097
+ lastPanoramaLongitude: 11,
3098
+ cameraImageUrl: 12,
3099
+ onRoomHeightClick: 13,
3100
+ getLabelElement: 14
3101
+ },
3102
+ add_css
3103
+ );
3104
+ }
3105
+ }
3106
+
3107
+ /**
3108
+ * 传入一个 Promise
3109
+ * 无异常,返回 [null, data]
3110
+ * 有异常,则返回 [Error, undefined]
3111
+ * 用于替代 try&catch 处理 await 异常的方案
3112
+ */
3113
+ async function to(promise) {
3114
+ try {
3115
+ const data = await promise;
3116
+ return [null, data];
3117
+ }
3118
+ catch (error) {
3119
+ if (error instanceof Error)
3120
+ return [error, null];
3121
+ return [new Error(''), null];
3122
+ }
3123
+ }
3124
+
3125
+ async function formatOutlines(outlines) {
3126
+ const headers = new Headers({ 'Content-Type': 'text/plain' });
3127
+ const getOutlineItem = async function (item) {
3128
+ const outlineItem = {
3129
+ index: item.index,
3130
+ url: item.url,
3131
+ svgUrl: item.svg_url,
3132
+ };
3133
+ if (item.svg_url) {
3134
+ const svgContent = await fetch(item.svg_url, { headers }).then((res) => res.text());
3135
+ outlineItem.svgContent = svgContent;
3136
+ }
3137
+ return outlineItem;
3138
+ };
3139
+ const svgOutlineItems = await Promise.all(outlines.map(getOutlineItem));
3140
+ return svgOutlineItems;
3141
+ }
3142
+ function formatRoom(data) {
3143
+ const floorplanRoomItem = {
3144
+ id: data.id,
3145
+ size: data.size,
3146
+ name: data.name,
3147
+ path: data.path,
3148
+ roomType: data.room_type,
3149
+ floorType: data.floor_type,
3150
+ roomLabel: {
3151
+ position: data.room_label.position,
3152
+ positionInImage: data.room_label.position_in_image,
3153
+ },
3154
+ observerIndexs: data.observer_indexs,
3155
+ };
3156
+ return floorplanRoomItem;
3157
+ }
3158
+ function formatFloorData(_data) {
3159
+ return {
3160
+ floorName: _data.floor_name,
3161
+ floorIndex: _data.floor_index,
3162
+ rooms: _data.rooms.map(formatRoom),
3163
+ rules: _data.rules,
3164
+ };
3165
+ }
3166
+ function formateFloorplanObserver(data) {
3167
+ const floorplanObserver = {
3168
+ index: data.index,
3169
+ floorIndex: data.floor_index,
3170
+ position: data.position,
3171
+ positionInImage: data.position_in_image,
3172
+ };
3173
+ return floorplanObserver;
3174
+ }
3175
+ function formatFloorplanEntrance(data) {
3176
+ const floorplanEntrance = {
3177
+ rad: data.rad,
3178
+ position: data.position,
3179
+ positionInImage: data.position_in_image,
3180
+ northRad: data.north_rad,
3181
+ roomId: data.room_id,
3182
+ floorIndex: data.floor_index,
3183
+ };
3184
+ return floorplanEntrance;
3185
+ }
3186
+ async function formatData(data) {
3187
+ const outlines = await formatOutlines(data.outlines);
3188
+ const bounding = data.computed_data.bounding;
3189
+ const floorDatas = data.computed_data.floor_datas.map(formatFloorData);
3190
+ const entrance = data.computed_data.entrance ? formatFloorplanEntrance(data.computed_data.entrance) : null;
3191
+ const floorplanData = {
3192
+ outlines,
3193
+ entrance,
3194
+ bounding,
3195
+ floorDatas,
3196
+ observers: data.computed_data.observers.map(formateFloorplanObserver),
3197
+ };
3198
+ return floorplanData;
3199
+ }
3200
+
3201
+ /**
3202
+ * 检查一个值是否是狭义上的对象
3203
+ * @param {any} value 要检查的值
3204
+ *
3205
+ * isTruelyObject({})
3206
+ * // => true
3207
+ *
3208
+ * isObjectLike([1, 2, 3])
3209
+ * // => false
3210
+ *
3211
+ * isObjectLike(Function)
3212
+ * // => false
3213
+ *
3214
+ * isObjectLike(null)
3215
+ * // => false
3216
+ *
3217
+ */
3218
+ function isTruelyObject(value) {
3219
+ return Object.prototype.toString.call(value) === '[object Object]';
3220
+ }
3221
+
3222
+ /* eslint-disable @typescript-eslint/no-use-before-define */
3223
+ function baseIsEqual(value, other) {
3224
+ if (value === other)
3225
+ return true;
3226
+ if (typeof value !== typeof other)
3227
+ return false;
3228
+ if (Number.isNaN(value) && Number.isNaN(other))
3229
+ return true;
3230
+ return false;
3231
+ }
3232
+ function objEqualShallow(value, other) {
3233
+ const valueProps = Object.getOwnPropertyNames(value);
3234
+ const otherProps = Object.getOwnPropertyNames(other);
3235
+ if (valueProps.length !== otherProps.length)
3236
+ return false;
3237
+ for (let i = 0, len = valueProps.length; i < len; i++) {
3238
+ const propName = valueProps[i];
3239
+ if (!baseIsEqual(value[propName], other[propName]))
3240
+ return false;
3241
+ }
3242
+ return true;
3243
+ }
3244
+ function arrayEqualShallow(value, other) {
3245
+ if (value.length !== other.length)
3246
+ return false;
3247
+ for (let i = 0, len = value.length; i < len; i++) {
3248
+ if (!baseIsEqual(value[i], other[i]))
3249
+ return false;
3250
+ }
3251
+ return true;
3252
+ }
3253
+ function isShallowEqual(value, other) {
3254
+ if (baseIsEqual(value, other))
3255
+ return true;
3256
+ if (isTruelyObject(value) && isTruelyObject(other))
3257
+ return objEqualShallow(value, other);
3258
+ if (Array.isArray(value) && Array.isArray(other))
3259
+ return arrayEqualShallow(value, other);
3260
+ return false;
3261
+ }
3262
+ function isDeepEqual(value, other) {
3263
+ if (baseIsEqual(value, other))
3264
+ return true;
3265
+ if (isTruelyObject(value) && isTruelyObject(other))
3266
+ return objEqualDeep(value, other);
3267
+ if (Array.isArray(value) && Array.isArray(other))
3268
+ return arrayEqualDeep(value, other);
3269
+ return false;
3270
+ }
3271
+ function arrayEqualDeep(value, other) {
3272
+ if (value.length !== other.length)
3273
+ return false;
3274
+ for (let i = 0, len = value.length; i < len; i++) {
3275
+ if (!isDeepEqual(value[i], other[i]))
3276
+ return false;
3277
+ }
3278
+ return true;
3279
+ }
3280
+ function objEqualDeep(value, other) {
3281
+ const valueProps = Object.getOwnPropertyNames(value);
3282
+ const otherProps = Object.getOwnPropertyNames(other);
3283
+ if (valueProps.length !== otherProps.length)
3284
+ return false;
3285
+ for (let i = 0, len = valueProps.length; i < len; i++) {
3286
+ const propName = valueProps[i];
3287
+ if (!isDeepEqual(value[propName], other[propName]))
3288
+ return false;
3289
+ }
3290
+ return true;
3291
+ }
3292
+ /**
3293
+ * 对象比较
3294
+ * @param {*} value 第一个比较的值
3295
+ * @param {*} other 第二个比较的值
3296
+ * @param {Object} options 可选参数,可选项包括:<br />
3297
+ * deep {Boolean} 是否深比较<br />
3298
+ * @returns {boolean} 是否相等
3299
+ */
3300
+ function equal(value, other, opt = { deep: false }) {
3301
+ if (!opt.deep)
3302
+ return isShallowEqual(value, other);
3303
+ return isDeepEqual(value, other);
3304
+ }
3305
+
3306
+ var FLOOR_PLAN_ATTACHED_TO;
3307
+ (function (FLOOR_PLAN_ATTACHED_TO) {
3308
+ FLOOR_PLAN_ATTACHED_TO[FLOOR_PLAN_ATTACHED_TO["FLOOR"] = 1] = "FLOOR";
3309
+ FLOOR_PLAN_ATTACHED_TO[FLOOR_PLAN_ATTACHED_TO["CEILING"] = 2] = "CEILING";
3310
+ FLOOR_PLAN_ATTACHED_TO[FLOOR_PLAN_ATTACHED_TO["BOUNDING_CENTER"] = 3] = "BOUNDING_CENTER";
3311
+ })(FLOOR_PLAN_ATTACHED_TO || (FLOOR_PLAN_ATTACHED_TO = {}));
3312
+
3313
+ /**
3314
+ * 获取「在俯视图」状态下,模型 mm 与屏幕像素 px 的对应关系,即每 mm 对应多少 px
3315
+ * @param five five
3316
+ */
3317
+ function getPxmm(five, container, floorIndex, options) {
3318
+ const maxFloorIndex = Math.max(...five.work.observers.map((ob) => ob.floorIndex));
3319
+ function getFloorY(floorIndex) {
3320
+ return floorIndex > maxFloorIndex
3321
+ ? five.model.bounding.max.y
3322
+ : Math.max(...five.work.observers
3323
+ .filter((ob) => ob.floorIndex === floorIndex)
3324
+ .map((ob) => ob.standingPosition.y));
3325
+ }
3326
+ function getY() {
3327
+ const currentFloorY = getFloorY(floorIndex);
3328
+ const nextFloorY = getFloorY(floorIndex + 1);
3329
+ const attachedTo = options?.attachedTo || FLOOR_PLAN_ATTACHED_TO.BOUNDING_CENTER;
3330
+ if (attachedTo === FLOOR_PLAN_ATTACHED_TO.BOUNDING_CENTER)
3331
+ return (five.model.bounding.max.y + five.model.bounding.min.y) / 2;
3332
+ else if (attachedTo === FLOOR_PLAN_ATTACHED_TO.CEILING)
3333
+ return nextFloorY;
3334
+ else
3335
+ return currentFloorY;
3336
+ }
3337
+ const y = getY();
3338
+ const originPosition = new THREE__namespace.Vector3(0, y, 0);
3339
+ const originPositionXUnit = new THREE__namespace.Vector3(1, y, 0);
3340
+ const mouse = originPosition.clone().project(five.camera);
3341
+ const xUnitMouse = originPositionXUnit.clone().project(five.camera);
3342
+ const pxmm = Math.abs((xUnitMouse.x - mouse.x) / 1000) * (container.getBoundingClientRect().width / 2);
3343
+ return pxmm;
3344
+ }
3345
+
3346
+ async function changeMode(five, ...changeModeParams) {
3347
+ const [changeModeError] = await to(five.changeMode(...changeModeParams));
3348
+ if (changeModeError)
3349
+ throw changeModeError;
3350
+ await new Promise((reslove, reject) => {
3351
+ five.once('initAnimationEnded', reslove);
3352
+ const handleModeChange = (mode) => {
3353
+ if (mode !== changeModeParams[0])
3354
+ reject('changeMode 被中断');
3355
+ five.off('modeChange', handleModeChange);
3356
+ };
3357
+ five.on('modeChange', handleModeChange);
3358
+ });
3359
+ }
3360
+
3361
+ var FloorplanErrorType;
3362
+ (function (FloorplanErrorType) {
3363
+ FloorplanErrorType["UnknownError"] = "UnknowError";
3364
+ FloorplanErrorType["DataNotLoaded"] = "DataNotLoaded";
3365
+ FloorplanErrorType["BreakOffByHide"] = "BreakOffByHide";
3366
+ FloorplanErrorType["ModelNotLoaded"] = "ModelNotLoaded";
3367
+ FloorplanErrorType["ChangeModeError"] = "ChangeModeError";
3368
+ FloorplanErrorType["UpdateCameraError"] = "UpdateCameraError";
3369
+ FloorplanErrorType["DifferentShowParams"] = "DifferentShowParams";
3370
+ })(FloorplanErrorType || (FloorplanErrorType = {}));
3371
+ /** 户型图展示 & 模型消失的默认时间 */
3372
+ const SHOW_ANIME_DURATION = 500;
3373
+ /** Five camera 默认 fov */
3374
+ const FIVE_CAMERA_DEFAULT_FOV = 80;
3375
+
3376
+ /**
3377
+ * 比较两个数字近似相等
3378
+ * @param num1 数字1
3379
+ * @param num2 数字2
3380
+ * @param accuracy 精度:精确到小数点后几位,默认精确到 小数点后四位
3381
+ */
3382
+ function nearlyEqual(num1, num2, accuracy = 4) {
3383
+ return Math.floor(num1 * Math.pow(10, accuracy)) === Math.floor(num2 * Math.pow(10, accuracy));
3384
+ }
3385
+
3386
+ /** 判断当前状态是否可以展示户型图 */
3387
+ function checkShowState(five$1, showState) {
3388
+ if (five$1.currentMode !== five.Five.Mode.Floorplan)
3389
+ return false;
3390
+ const { latitude, longitude, fov } = showState;
3391
+ const { latitude: _latitude, longitude: _longitude } = five$1.getCurrentState();
3392
+ const _fov = five$1.camera.fov;
3393
+ if (nearlyEqual(latitude, _latitude, 1) && nearlyEqual(longitude, _longitude, 1) && fov === _fov)
3394
+ return true;
3395
+ return false;
3396
+ }
3397
+ /** 更改 Five 状态到展示户型图的状态
3398
+ * 1. 判断状态不符合时,会纠正到正确的状态
3399
+ * 2. 内置了相应的动画时间计算
3400
+ * 3. 纠正成功会返回 true,失败「可能会被用户行为中断」会返回 false
3401
+ */
3402
+ async function correctFiveState(five$1, showState, userAction = true) {
3403
+ // 当前已满足状态,不需要变更
3404
+ const result = checkShowState(five$1, showState);
3405
+ if (result === true)
3406
+ return;
3407
+ // 纠正 mode
3408
+ if (five$1.currentMode !== five.Five.Mode.Floorplan) {
3409
+ const [changeModeError] = await to(changeMode(five$1, five.Five.Mode.Floorplan, showState, undefined, userAction));
3410
+ if (changeModeError)
3411
+ throw changeModeError;
3412
+ // changeMode 是异步行为,可能会被打断,需要在结束后加一次判断
3413
+ const result = checkShowState(five$1, showState);
3414
+ if (result === false)
3415
+ throw new Error(FloorplanErrorType.ChangeModeError);
3416
+ return;
3417
+ }
3418
+ // 纠正相机状态
3419
+ // 根据 latitude、longitude、fov 计算动画时间,最多 1s
3420
+ const { latitude, longitude, fov } = five$1.getCurrentState();
3421
+ const time = Math.min(1000, Math.max(200, Math.abs(latitude - Math.PI / 2) * 1000, (longitude > Math.PI ? 2 * Math.PI - longitude : longitude) * 500, Math.abs(fov - showState.fov) * 10));
3422
+ const [updateCameraError] = await to(five$1.updateCamera(showState, time, userAction));
3423
+ if (updateCameraError)
3424
+ throw new Error(FloorplanErrorType.UpdateCameraError);
3425
+ return;
3426
+ }
3427
+
3428
+ function changeModelCanvasOpacity(five, opacity, duration = 300) {
3429
+ const fiveEle = five.getElement();
3430
+ if (!fiveEle)
3431
+ return;
3432
+ fiveEle.style.opacity = opacity + '';
3433
+ fiveEle.style.transition = duration === 0 ? 'none' : `opacity ${duration}ms linear`;
3434
+ if (duration === 0)
3435
+ return;
3436
+ Promise.race([
3437
+ new Promise((res) => fiveEle.addEventListener('transitionend', res, { once: true })),
3438
+ new Promise((res) => setTimeout(res, duration)),
3439
+ ]).then(() => {
3440
+ fiveEle.style.transition = 'none';
3441
+ });
3442
+ }
3443
+
3444
+ /**
3445
+ * 把第一个参数传入第二个参数(函数)中并执行
3446
+ * 一般用于执行函数后返回变量。
3447
+ * @param {any} something
3448
+ * @param {function} callback
3449
+ * @return {any}
3450
+ */
3451
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
3452
+ function tap(something, callback) {
3453
+ callback(something);
3454
+ return something;
3455
+ }
3456
+
3457
+ /**
3458
+ * 过滤掉不需要的对象字段函数:实现从一个对象中排除某些指定属性后生成的新对象。
3459
+ * @param object
3460
+ * @param props 排除的属性
3461
+ * @return
3462
+ */
3463
+ function omit(object, props) {
3464
+ return tap({}, (result) => {
3465
+ for (const name in object) {
3466
+ if (props.indexOf(name) !== -1)
3467
+ continue;
3468
+ result[name] = object[name];
3469
+ }
3470
+ });
3471
+ }
3472
+
3473
+ const MODEL_FLOORPLAN_PLUGIN_NAME = 'modelFloorplanPlugin';
3474
+ class ModelFloorplanPluginController {
3475
+ name = MODEL_FLOORPLAN_PLUGIN_NAME;
3476
+ /** 用于绑定事件钩子 */
3477
+ hooks;
3478
+ /** 展示状态 */
3479
+ visible = false;
3480
+ /** 户型图大小 */
3481
+ size = { width: 0, height: 0 };
3482
+ app = undefined;
3483
+ pxmm = 0;
3484
+ five;
3485
+ panoIndex = 0;
3486
+ floorIndex = 0;
3487
+ configs = {};
3488
+ lastPanoramaLongitude = 0;
3489
+ selector;
3490
+ floorplanData;
3491
+ wrapper;
3492
+ container = document.createElement('div');
3493
+ showState;
3494
+ /** 记录上次 show 的参数,如果不一致,需要 reject 掉正在进行的 showPromise */
3495
+ ModelFloorplanPluginsShowOpts;
3496
+ showPromise;
3497
+ showRejection;
3498
+ constructor(five$1, params) {
3499
+ this.five = five$1;
3500
+ this.hooks = new five.Subscribe();
3501
+ this.selector = params.selector;
3502
+ this.configs = omit(params, ['selector']);
3503
+ this.showState = { longitude: 0, latitude: Math.PI / 2, fov: FIVE_CAMERA_DEFAULT_FOV / (params?.scale ?? 1) };
3504
+ // 设置 container 样式
3505
+ this.container.classList.add('floorplan-plugin');
3506
+ Object.assign(this.container.style, {
3507
+ position: 'absolute',
3508
+ left: '50%',
3509
+ top: '50%',
3510
+ transform: 'translate(-50%, -50%)',
3511
+ pointerEvents: 'none',
3512
+ zIndex: 10,
3513
+ });
3514
+ // 如果初始化的时候模型已经加载完毕了,就不用再等 modelLoaded
3515
+ this.five.model.loaded ? this.handleModelLoaded() : five$1.once('modelLoaded', this.handleModelLoaded);
3516
+ five$1.once('dispose', this.dispose);
3517
+ five$1.on('modeChange', this.handleModeChange);
3518
+ five$1.on('panoArrived', this.handlePanoArrived);
3519
+ five$1.on('wantsChangeMode', this.handleWantsChangeMode);
3520
+ five$1.on('wantsInteriaPan', this.handleWantsInteriaPan);
3521
+ five$1.on('modelShownFloorChange', this.onModelShownFloorChange);
3522
+ }
3523
+ dispose = () => {
3524
+ const five = this.five;
3525
+ this.hide();
3526
+ this.app?.$destroy();
3527
+ this.container?.remove();
3528
+ five.off('modelLoaded', this.handleModelLoaded);
3529
+ five.off('modeChange', this.handleModeChange);
3530
+ five.off('panGesture', this.handlePanGesture);
3531
+ five.off('panoArrived', this.handlePanoArrived);
3532
+ five.off('wantsChangeMode', this.handleWantsChangeMode);
3533
+ five.off('wantsInteriaPan', this.handleWantsInteriaPan);
3534
+ five.off('wantsTapGesture', this.handleWantsTapGesture);
3535
+ five.off('modelShownFloorChange', this.onModelShownFloorChange);
3536
+ };
3537
+ /** 加载户型图数据 */
3538
+ async load(data) {
3539
+ const copyData = JSON.parse(JSON.stringify(data));
3540
+ this.floorplanData = await formatData(copyData);
3541
+ this.render();
3542
+ }
3543
+ /** 把插件的渲染DOM插入到对应的容器中去 */
3544
+ appendTo(wrapper) {
3545
+ this.wrapper = wrapper;
3546
+ wrapper.appendChild(this.container);
3547
+ return this;
3548
+ }
3549
+ /** 更新户型图大小 */
3550
+ updateSize = () => {
3551
+ if (!this.floorplanData)
3552
+ return;
3553
+ if (!checkShowState(this.five, this.showState))
3554
+ return;
3555
+ if (!this.container || !this.wrapper)
3556
+ return;
3557
+ // 计算户型图展示大小
3558
+ const { min, max } = this.floorplanData.bounding;
3559
+ const width = max.x - min.x;
3560
+ const height = max.y - min.y;
3561
+ // 每毫米对应的 px 值
3562
+ const options = this.configs.attachedTo ? { attachedTo: this.configs.attachedTo } : undefined;
3563
+ const pxmm = getPxmm(this.five, this.wrapper, this.floorIndex, options);
3564
+ const _width = Math.ceil(width * pxmm);
3565
+ const _height = Math.ceil(height * pxmm);
3566
+ if (this.size.width === _width && this.size.height === _height)
3567
+ return;
3568
+ this.pxmm = pxmm;
3569
+ this.size = { width: _width, height: _height };
3570
+ this.container.style.width = _width + 'px';
3571
+ this.container.style.height = _height + 'px';
3572
+ };
3573
+ /** 展示户型图
3574
+ * 1. show 函数大部分情况下需要耗时
3575
+ * 2. 如果当前已经在展示中,将不会触发任何事件
3576
+ * 3. 如果展示过程被中断,将抛出错误
3577
+ * 4. 多次调用 show 方法,只会触发一次 showAnimationEnded 事件,但是展示结果会取决于最后一次调用参数
3578
+ * 5. 如果多次调用 show 方法,参数与上次参数不一致时,上次 show Promise 会被 reject
3579
+ * @param opts.floorIndex 楼层
3580
+ * @param opts.modelOpacity 模型透明度
3581
+ * @param opts.immediately 是否立即展示
3582
+ * @param opts.isAutoShow 是否是自动展示
3583
+ */
3584
+ show = async (opts) => {
3585
+ // 已经在展示中了
3586
+ if (!this.showPromise && this.visible)
3587
+ return true;
3588
+ if (!this.five.model?.loaded)
3589
+ throw new Error(FloorplanErrorType.ModelNotLoaded);
3590
+ if (!this.floorplanData)
3591
+ throw new Error(FloorplanErrorType.DataNotLoaded);
3592
+ this.visible = true;
3593
+ if (this.showPromise) {
3594
+ const sameWithLastOpts = equal(opts, this.ModelFloorplanPluginsShowOpts, { deep: false });
3595
+ if (!!this.showPromise && sameWithLastOpts)
3596
+ return this.showPromise;
3597
+ if (!!this.showPromise && !sameWithLastOpts)
3598
+ this.showRejection?.(FloorplanErrorType.DifferentShowParams);
3599
+ }
3600
+ this.ModelFloorplanPluginsShowOpts = opts;
3601
+ const getShowPromise = async () => {
3602
+ let hasRejected = false;
3603
+ let externalErrorMsg;
3604
+ this.showRejection = (errorMsg) => {
3605
+ hasRejected = true;
3606
+ externalErrorMsg = errorMsg;
3607
+ };
3608
+ const [correctError] = await to(correctFiveState(this.five, this.showState, opts?.userAction));
3609
+ if (correctError)
3610
+ throw correctError;
3611
+ // 异步结束要判断当前是不是被中断了,是不是调用了隐藏
3612
+ if (hasRejected)
3613
+ throw externalErrorMsg ? new Error(externalErrorMsg) : new Error(FloorplanErrorType.UnknownError);
3614
+ if (!this.visible)
3615
+ throw new Error(FloorplanErrorType.UnknownError);
3616
+ // 更新户型图状态
3617
+ this.visible = true;
3618
+ // 更新户型图大小
3619
+ this.updateSize();
3620
+ // 高亮当前楼层,有两个目的
3621
+ // 1. 点击模型时,可以跳转到当前楼层的点位上
3622
+ // 2. 当前楼层比较小时,户型图也比较小,如果展示全部楼层,会展示户型图外有一圈模型
3623
+ if (opts?.floorIndex)
3624
+ this.floorIndex = opts.floorIndex;
3625
+ this.five.model.show(this.floorIndex);
3626
+ // 模型消失, 渲染户型图
3627
+ const modelOpacity = opts?.modelOpacity ?? this.configs.modelOpacity ?? 1;
3628
+ const renderDuration = opts?.immediately ? 0 : SHOW_ANIME_DURATION;
3629
+ changeModelCanvasOpacity(this.five, modelOpacity, renderDuration);
3630
+ this.render(renderDuration);
3631
+ // 展示之后的事件监听
3632
+ this.five.on('wantsGesture', this.handleWantsGesture);
3633
+ this.five.on('wantsTapGesture', this.handleWantsTapGesture);
3634
+ return true;
3635
+ };
3636
+ const showPromise = getShowPromise()
3637
+ .then(() => {
3638
+ this.hooks.emit('showAnimationEnded', { auto: !!opts?.isAutoShow, userAction: opts?.userAction ?? true });
3639
+ return true;
3640
+ })
3641
+ .catch((error) => {
3642
+ // 自动展示的报错内部处理
3643
+ if (opts?.isAutoShow)
3644
+ return false;
3645
+ if (!(error instanceof Error))
3646
+ return false;
3647
+ // 非自动展示的报错继续向外抛出
3648
+ throw error;
3649
+ })
3650
+ .finally(() => {
3651
+ this.showPromise = undefined;
3652
+ this.showRejection = undefined;
3653
+ });
3654
+ this.showPromise = showPromise;
3655
+ return showPromise;
3656
+ };
3657
+ /** 隐藏户型图 */
3658
+ hide = (options) => {
3659
+ if (this.size.width === 0)
3660
+ return true;
3661
+ if (this.visible === false)
3662
+ return true;
3663
+ const isAutoHide = !!options?.isAutoHide;
3664
+ this.five.off('wantsGesture', this.handleWantsGesture);
3665
+ this.five.off('wantsTapGesture', this.handleWantsTapGesture);
3666
+ this.visible = false;
3667
+ this.showRejection?.(FloorplanErrorType.BreakOffByHide);
3668
+ changeModelCanvasOpacity(this.five, 1, 0);
3669
+ this.render();
3670
+ this.hooks.emit('hide', { auto: isAutoHide, userAction: options?.userAction ?? true });
3671
+ return true;
3672
+ };
3673
+ /** 更改户型图楼层 */
3674
+ changeFloor(floorIndex) {
3675
+ this.five.model.show(floorIndex);
3676
+ this.floorIndex = floorIndex;
3677
+ this.render();
3678
+ }
3679
+ changeConfigs(params) {
3680
+ Object.assign(this.configs, params);
3681
+ if (!this.container)
3682
+ return;
3683
+ this.render();
3684
+ }
3685
+ /** 模型楼层高亮改变时,自动进行楼层切换 */
3686
+ onModelShownFloorChange = (shownFloor) => {
3687
+ if (shownFloor === null)
3688
+ return;
3689
+ this.floorIndex = shownFloor;
3690
+ this.updateSize();
3691
+ this.render();
3692
+ };
3693
+ handleModelLoaded = () => {
3694
+ if (this.wrapper)
3695
+ return;
3696
+ if (!this.selector)
3697
+ return;
3698
+ const wrapper = this.selector instanceof Element ? this.selector : document.querySelector(this.selector);
3699
+ if (!wrapper)
3700
+ throw new Error('不正确的父容器选择器');
3701
+ this.wrapper = wrapper;
3702
+ wrapper.append(this.container);
3703
+ };
3704
+ handleClick = () => {
3705
+ if (!this.visible)
3706
+ return;
3707
+ const prevented = this.hooks.emit('click');
3708
+ if (prevented)
3709
+ return false;
3710
+ };
3711
+ handleWantsTapGesture = () => this.handleClick();
3712
+ /** 从 Panorama 切换到其他模态时,记录当前的相机水平视角 */
3713
+ handleWantsChangeMode = (mode) => {
3714
+ if (mode !== 'Panorama') {
3715
+ this.lastPanoramaLongitude = this.five.getCurrentState().longitude;
3716
+ }
3717
+ if (mode !== 'Floorplan')
3718
+ this.hide();
3719
+ };
3720
+ /** 监听模型态变化,只有在模型态才进行手势动作监听 */
3721
+ handleModeChange = (mode) => {
3722
+ if (mode === 'Floorplan') {
3723
+ this.five.on('panGesture', this.handlePanGesture);
3724
+ }
3725
+ else {
3726
+ this.hide();
3727
+ this.five.off('panGesture', this.handlePanGesture);
3728
+ }
3729
+ };
3730
+ /** panoIndex 改变时,更新 floorIndex */
3731
+ handlePanoArrived = (index) => {
3732
+ if (!this.five?.work)
3733
+ return;
3734
+ this.panoIndex = index;
3735
+ this.floorIndex = this.five.work.observers[index].floorIndex;
3736
+ };
3737
+ /** 当户型图正在展示中的时候禁用惯性 */
3738
+ handleWantsInteriaPan = () => {
3739
+ if (this.visible)
3740
+ return false;
3741
+ };
3742
+ /** 在户型图展示时阻止多指操作, 阻止鼠标放大 */
3743
+ handleWantsGesture = (type, pointers) => {
3744
+ if (!this.visible)
3745
+ return;
3746
+ if (pointers.length > 1)
3747
+ return false;
3748
+ if (type === 'mouseWheel')
3749
+ return false;
3750
+ };
3751
+ /** 监听三维模型滑动
3752
+ * 1. 在三维模型转动结束时,如果达到设置的阈值,会自动切换到户型图
3753
+ * 2. 如何户型图已经展示,滑动时关闭户型图
3754
+ */
3755
+ handlePanGesture = async ({ latitude, longitude }, isFinal) => {
3756
+ if (this.configs.autoShowEnable === false)
3757
+ return;
3758
+ // 如果操作结束后,户型图还在展示中,初始化模型状态
3759
+ if (isFinal && this.visible)
3760
+ return this.five.setState(this.showState, true);
3761
+ // 满足消失的条件:
3762
+ // 水平旋转角大于正负 5 度 || 俯仰角度大于 5 度
3763
+ const latitudeHide = Math.abs(latitude - Math.PI / 2) > (5 * Math.PI) / 180;
3764
+ const longitudeHide = longitude > 5 * (Math.PI / 180) && longitude < 355 * (Math.PI / 180);
3765
+ const canHide = latitudeHide || longitudeHide;
3766
+ if (this.visible && canHide)
3767
+ return this.hide({ isAutoHide: true });
3768
+ if (this.five.camera.fov / FIVE_CAMERA_DEFAULT_FOV < 0.8)
3769
+ return;
3770
+ // 户型图展示条件:
3771
+ // 水平旋转角正负 30 度 && 俯仰角度小于 10 度
3772
+ const latitudeVisible = Math.abs(latitude - Math.PI / 2) < (10 * Math.PI) / 180;
3773
+ const longitudeVisible = longitude < 30 * (Math.PI / 180) || longitude > 330 * (Math.PI / 180);
3774
+ if (isFinal && !this.visible && latitudeVisible && longitudeVisible) {
3775
+ // 当手指离开时需要等惯性结束之后在进行判断
3776
+ const handleInteriaPan = async (any, isFinal) => {
3777
+ if (!isFinal)
3778
+ return;
3779
+ this.five.off('interiaPan', handleInteriaPan);
3780
+ await this.show({ isAutoShow: true });
3781
+ };
3782
+ this.five.on('interiaPan', handleInteriaPan);
3783
+ return;
3784
+ }
3785
+ };
3786
+ render(duration) {
3787
+ if (!this.container || !this.floorplanData)
3788
+ return;
3789
+ if (this.size.width === 0)
3790
+ return;
3791
+ const { hoverEnable, cameraImageUrl, getLabelElement, roomLabelsEnable, compassEnable, ruleLabelsEnable } = this.configs;
3792
+ const props = {
3793
+ five: this.five,
3794
+ pxmm: this.pxmm,
3795
+ cameraImageUrl,
3796
+ visible: this.visible,
3797
+ duration: duration ?? 0,
3798
+ panoIndex: this.panoIndex,
3799
+ floorIndex: this.floorIndex,
3800
+ floorplanData: this.floorplanData,
3801
+ hoverEnable: hoverEnable ?? false,
3802
+ compassEnable: compassEnable ?? true,
3803
+ ruleLabelsEnable: ruleLabelsEnable ?? true,
3804
+ roomLabelsEnable: roomLabelsEnable ?? true,
3805
+ lastPanoramaLongitude: this.lastPanoramaLongitude,
3806
+ getLabelElement,
3807
+ onRoomHeightClick: this.handleClick,
3808
+ };
3809
+ if (!this.app) {
3810
+ this.app = new Main({
3811
+ target: this.container,
3812
+ intro: true,
3813
+ props,
3814
+ });
3815
+ }
3816
+ else {
3817
+ this.app.$set(props);
3818
+ }
3819
+ }
3820
+ }
3821
+
3822
+ const ModelFloorplanPlugin = (five, params) => {
3823
+ return new ModelFloorplanPluginController(five, params);
3824
+ };
3825
+
3826
+ exports.ModelFloorplanPlugin = ModelFloorplanPlugin;
3827
+ exports["default"] = ModelFloorplanPlugin;