@realsee/dnalogel 2.0.0-alpha.43 → 2.0.0-alpha.44

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 (164) hide show
  1. package/dist/CSS3DRenderPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  2. package/dist/CameraMovementPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  3. package/dist/ItemLabelPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  4. package/dist/ItemLabelPlugin/index.js +138 -73
  5. package/dist/ItemLabelPlugin/typings.d.ts +1 -0
  6. package/dist/ModelChassisCompassPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  7. package/dist/ModelEntryDoorGuidePlugin/ItemLabelPlugin/typings.d.ts +1 -0
  8. package/dist/ModelItemLabelPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  9. package/dist/ModelRoomLabelPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  10. package/dist/ModelTVVideoPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  11. package/dist/ModelViewPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  12. package/dist/PanoCompassPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  13. package/dist/PanoCursorRaycasterPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  14. package/dist/PanoMeasurePlugin/ItemLabelPlugin/typings.d.ts +1 -0
  15. package/dist/PanoRulerPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  16. package/dist/PanoRulerProPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  17. package/dist/PanoSpatialTagPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  18. package/dist/floorplan/ModelFloorplanPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  19. package/dist/floorplan/PanoFloorplanRadarPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  20. package/dist/floorplan/TopviewFloorplanPlugin/ItemLabelPlugin/typings.d.ts +1 -0
  21. package/dist/index.es.js +156 -91
  22. package/dist/index.js +156 -91
  23. package/dist/index.umd.js +156 -91
  24. package/docs/classes/Magnifier.html +4 -4
  25. package/docs/classes/ModelRoomLabelController.html +4 -4
  26. package/docs/enums/CameraMovementEffect.html +1 -1
  27. package/docs/enums/DIRECTION.html +1 -1
  28. package/docs/enums/DISPLAY_STRATEGY_TYPE.html +1 -1
  29. package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +1 -1
  30. package/docs/enums/ITEM_LABEL_PLUGIN_DISPLAY_STRATEGY_TYPE.html +1 -1
  31. package/docs/enums/Rotation.html +1 -1
  32. package/docs/interfaces/CSS3DRenderPluginExportType.html +2 -2
  33. package/docs/interfaces/CameraMovementPluginExportType.html +2 -2
  34. package/docs/interfaces/FloorplanBounding.html +3 -3
  35. package/docs/interfaces/FloorplanData.html +1 -1
  36. package/docs/interfaces/FloorplanEntrance.html +6 -6
  37. package/docs/interfaces/FloorplanExtraObject.html +2 -2
  38. package/docs/interfaces/FloorplanExtraObject3D.html +1 -1
  39. package/docs/interfaces/FloorplanFloorData.html +1 -1
  40. package/docs/interfaces/FloorplanImagePosition.html +1 -1
  41. package/docs/interfaces/FloorplanObserver.html +1 -1
  42. package/docs/interfaces/FloorplanOutlineItem.html +1 -1
  43. package/docs/interfaces/FloorplanPosition.html +1 -1
  44. package/docs/interfaces/FloorplanRoomItem.html +5 -5
  45. package/docs/interfaces/FloorplanRoomLabelItem.html +2 -2
  46. package/docs/interfaces/FloorplanServerBounding.html +3 -3
  47. package/docs/interfaces/FloorplanServerComputedData.html +1 -1
  48. package/docs/interfaces/FloorplanServerData.html +1 -1
  49. package/docs/interfaces/FloorplanServerEntrance.html +6 -6
  50. package/docs/interfaces/FloorplanServerFloorData.html +1 -1
  51. package/docs/interfaces/FloorplanServerImagePosition.html +1 -1
  52. package/docs/interfaces/FloorplanServerObserver.html +1 -1
  53. package/docs/interfaces/FloorplanServerOutlineItem.html +1 -1
  54. package/docs/interfaces/FloorplanServerPosition.html +1 -1
  55. package/docs/interfaces/FloorplanServerRoomItem.html +6 -6
  56. package/docs/interfaces/FloorplanServerRoomLabelItem.html +2 -2
  57. package/docs/interfaces/ItemLabelPluginData.html +1 -1
  58. package/docs/interfaces/ItemLabelPluginExportReturnsType.html +1 -1
  59. package/docs/interfaces/ItemLabelPluginParametersType.html +1 -1
  60. package/docs/interfaces/LineJson.html +1 -1
  61. package/docs/interfaces/ModelChassisCompassPluginData.html +1 -1
  62. package/docs/interfaces/ModelChassisCompassPluginExportType.html +1 -1
  63. package/docs/interfaces/ModelChassisCompassPluginParameterType.html +1 -1
  64. package/docs/interfaces/ModelEntryDoorGuidePluginData.html +1 -1
  65. package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +1 -1
  66. package/docs/interfaces/ModelItemLabelPluginData.html +1 -1
  67. package/docs/interfaces/ModelItemLabelPluginExportReturnsType.html +1 -1
  68. package/docs/interfaces/ModelItemLabelPluginParametersType.html +1 -1
  69. package/docs/interfaces/ModelRoomLabelPluginData.html +1 -1
  70. package/docs/interfaces/ModelTVVideoPluginData.html +1 -1
  71. package/docs/interfaces/ModelTVVideoPluginExportType.html +1 -1
  72. package/docs/interfaces/ModelTVVideoPluginParameterType.html +1 -1
  73. package/docs/interfaces/ModelViewPluginExportType.html +1 -1
  74. package/docs/interfaces/OpenParameter.html +1 -1
  75. package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +6 -6
  76. package/docs/interfaces/PanoMeasureParameterType.html +1 -1
  77. package/docs/interfaces/PanoRulerPluginExportType.html +1 -1
  78. package/docs/interfaces/PanoRulerPluginOptions.html +1 -1
  79. package/docs/interfaces/PanoRulerPluginParameterType.html +1 -1
  80. package/docs/interfaces/PanoRulerProPluginExportType.html +1 -1
  81. package/docs/interfaces/PanoRulerProPluginOptions.html +1 -1
  82. package/docs/interfaces/PanoRulerProPluginParameterType.html +1 -1
  83. package/docs/interfaces/PanoRulerProPluginState.html +1 -1
  84. package/docs/interfaces/PanoSpatialTagPluginData.html +1 -1
  85. package/docs/interfaces/PanoSpatialTagPluginDataElement.html +1 -1
  86. package/docs/interfaces/PanoSpatialTagPluginExportType.html +1 -1
  87. package/docs/interfaces/PanoSpatialTagPluginOriginElement.html +1 -1
  88. package/docs/interfaces/PanoSpatialTagPluginParameterType.html +1 -1
  89. package/docs/interfaces/PanoSpatialTagPluginPointElement.html +1 -1
  90. package/docs/interfaces/PanoSpatialTagPluginTagElement.html +1 -1
  91. package/docs/interfaces/Point.html +1 -1
  92. package/docs/interfaces/PointJson.html +1 -1
  93. package/docs/interfaces/Room.html +1 -1
  94. package/docs/interfaces/RoomInfo.html +1 -1
  95. package/docs/interfaces/RoomLabel.html +7 -7
  96. package/docs/modules.html +18 -18
  97. package/libs/ItemLabelPlugin/ItemLabelComponent.js +2 -2
  98. package/libs/ItemLabelPlugin/ItemLabelComponent.svelte +251 -0
  99. package/libs/ItemLabelPlugin/ItemLabelItem.js +141 -74
  100. package/libs/ItemLabelPlugin/ItemLabelItem.svelte +180 -0
  101. package/libs/ItemLabelPlugin/Plugin.js +1 -1
  102. package/libs/ItemLabelPlugin/typings.d.ts +3 -1
  103. package/libs/ModelItemLabelPlugin/ItemLabelComponent.js +2 -2
  104. package/libs/ModelItemLabelPlugin/ItemLabelComponent.svelte +155 -0
  105. package/libs/ModelItemLabelPlugin/ItemLabelItem.js +6 -6
  106. package/libs/ModelItemLabelPlugin/ItemLabelItem.svelte +100 -0
  107. package/libs/ModelItemLabelPlugin/ModelItemLabelPlugin.js +1 -1
  108. package/libs/ModelItemLabelPlugin/typings.d.ts +1 -1
  109. package/libs/ModelRoomLabelPlugin/Controller.js +1 -1
  110. package/libs/ModelRoomLabelPlugin/RoomLabelItem.js +4 -4
  111. package/libs/ModelRoomLabelPlugin/RoomLabelItem.svelte +63 -0
  112. package/libs/ModelRoomLabelPlugin/RoomLabelItems.js +2 -2
  113. package/libs/ModelRoomLabelPlugin/RoomLabelItems.svelte +94 -0
  114. package/libs/PanoRulerProPlugin/Controller.js +1 -1
  115. package/libs/PanoRulerProPlugin/RulerItem.js +9 -9
  116. package/libs/PanoRulerProPlugin/RulerItem.svelte +166 -0
  117. package/libs/PanoRulerProPlugin/RulerItems.svelte +212 -0
  118. package/libs/PanoSpatialTagPlugin/Components/origins.js +2 -2
  119. package/libs/PanoSpatialTagPlugin/Components/origins.svelte +58 -0
  120. package/libs/PanoSpatialTagPlugin/Components/tag.js +9 -9
  121. package/libs/PanoSpatialTagPlugin/Components/tag.svelte +292 -0
  122. package/libs/PanoSpatialTagPlugin/Plugin.js +2 -2
  123. package/libs/floorplan/Components/BaseImage.js +2 -2
  124. package/libs/floorplan/Components/BaseImage.svelte +26 -0
  125. package/libs/floorplan/Components/Camera.js +3 -3
  126. package/libs/floorplan/Components/Camera.svelte +46 -0
  127. package/libs/floorplan/Components/Compass.js +4 -4
  128. package/libs/floorplan/Components/Compass.svelte +51 -0
  129. package/libs/floorplan/Components/CurrentFloor.js +3 -3
  130. package/libs/floorplan/Components/CurrentFloor.svelte +46 -0
  131. package/libs/floorplan/Components/Main.js +2 -2
  132. package/libs/floorplan/Components/Main.svelte +51 -0
  133. package/libs/floorplan/Components/Normalmage.js +2 -2
  134. package/libs/floorplan/Components/Normalmage.svelte +11 -0
  135. package/libs/floorplan/Components/RoomHighlight/Room.js +2 -2
  136. package/libs/floorplan/Components/RoomHighlight/Room.svelte +27 -0
  137. package/libs/floorplan/Components/RoomHighlight/RoomHighlight.js +3 -3
  138. package/libs/floorplan/Components/RoomHighlight/RoomHighlight.svelte +29 -0
  139. package/libs/floorplan/Components/RoomLabels/RoomLabel.js +3 -3
  140. package/libs/floorplan/Components/RoomLabels/RoomLabel.svelte +119 -0
  141. package/libs/floorplan/Components/RoomLabels/RoomLabels.js +2 -2
  142. package/libs/floorplan/Components/RoomLabels/RoomLabels.svelte +35 -0
  143. package/libs/floorplan/Components/RoomMaterials/RoomMaterial.js +3 -3
  144. package/libs/floorplan/Components/RoomMaterials/RoomMaterial.svelte +42 -0
  145. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte +7 -0
  146. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte +24 -0
  147. package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte +33 -0
  148. package/libs/floorplan/Components/RuleLabels/RuleItem.js +9 -9
  149. package/libs/floorplan/Components/RuleLabels/RuleItem.svelte +174 -0
  150. package/libs/floorplan/Components/RuleLabels/RuleLabels.js +2 -2
  151. package/libs/floorplan/Components/RuleLabels/RuleLabels.svelte +32 -0
  152. package/libs/floorplan/Components/SvgImage.js +3 -4
  153. package/libs/floorplan/Components/SvgImage.svelte +28 -0
  154. package/libs/floorplan/ModelFloorplanPlugin/Controller.js +1 -1
  155. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.js +4 -4
  156. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte +85 -0
  157. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte +18 -0
  158. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.js +4 -4
  159. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte +40 -0
  160. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.js +3 -3
  161. package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte +64 -0
  162. package/libs/floorplan/PanoFloorplanRadarPlugin/Controller.js +1 -1
  163. package/libs/floorplan/TopviewFloorplanPlugin/Controller.js +1 -1
  164. package/package.json +2 -1
@@ -36,7 +36,7 @@ import { getLabelTransform } from './utils/getLabelTransform';
36
36
  import { transform2RenderData } from "./utils/transform2RenderData";
37
37
 
38
38
  function add_css(target) {
39
- append_styles(target, "svelte-rmdeb", ".item-labels-container.svelte-rmdeb{width:100%;height:100%;position:relative}");
39
+ append_styles(target, "svelte-gk8s47", ".item-labels-container.svelte-gk8s47{width:100%;height:100%;position:relative}");
40
40
  }
41
41
 
42
42
  function get_each_context(ctx, list, i) {
@@ -177,7 +177,7 @@ function create_fragment(ctx) {
177
177
  each_blocks[i].c();
178
178
  }
179
179
 
180
- attr(div, "class", "item-labels-container svelte-rmdeb");
180
+ attr(div, "class", "item-labels-container svelte-gk8s47");
181
181
  add_render_callback(() => /*div_elementresize_handler*/ ctx[13].call(div));
182
182
  set_style(div, "opacity", /*itemsVisible*/ ctx[5] ? 1 : 0, false);
183
183
  },
@@ -0,0 +1,251 @@
1
+ <script>import { Five } from '@realsee/five';
2
+ import "./typings";
3
+ import { beforeUpdate, onDestroy, onMount } from "svelte";
4
+ import * as THREE from 'three';
5
+ import ItemLabelItem from './ItemLabelItem.svelte';
6
+ import "./events.type";
7
+ import debounce from '../shared-utils/debounce';
8
+ import { isImpacted } from "./utils/isImpacted";
9
+ import { getStrokeLength } from "./utils/getStrokeLength";
10
+ import { getLabelTransform } from './utils/getLabelTransform';
11
+ import { transform2RenderData } from "./utils/transform2RenderData";
12
+ const { Raycaster, Vector3 } = THREE;
13
+ export let five;
14
+ export let modelOcclusionEnable;
15
+ export let onlyVisibleInPanorama;
16
+ export let itemLabels;
17
+ export let hooks;
18
+ export let displayStrategyType;
19
+ export let maxVisibleDistance;
20
+ let curItemLabels = null;
21
+ let renderItemLabels = null;
22
+ let anchorEnabled = (five === null || five === void 0 ? void 0 : five.currentMode) === Five.Mode.Panorama;
23
+ let containerWidth;
24
+ let containerHeight;
25
+ // 计算重叠
26
+ let cssOffsetLists = [];
27
+ let cssHeight = 26;
28
+ let basicWidth = 11;
29
+ // 动画过程中 itemsVisible 为 false
30
+ let itemsVisible = true;
31
+ /**
32
+ * 可见性策略:
33
+ * 1、当前楼层(假设先不考虑多楼层)
34
+ * 2、模型未被遮挡(一个 box 有没有被遮挡的计算? TODO)
35
+ * */
36
+ const judgeImpacted = (five, itemLabel) => {
37
+ // 虚拟 VR 仅有一层,不考虑楼层信息
38
+ const cameraPosition = five.camera.position.clone();
39
+ const modelPosition = new Vector3(itemLabel.modelPosition[0], itemLabel.modelPosition[1], itemLabel.modelPosition[2]);
40
+ // 计算点到相机的位置
41
+ const vectorDistance = modelPosition.distanceTo(cameraPosition);
42
+ // 判断距离,大于最大可见距离直接不可见 TODO 把距离计算和碰撞拆分开
43
+ if (maxVisibleDistance !== undefined && five.state.mode === Five.Mode.Panorama) {
44
+ if (vectorDistance > maxVisibleDistance) {
45
+ return false;
46
+ }
47
+ }
48
+ return isImpacted(five, modelPosition.clone().sub(cameraPosition).normalize(), cameraPosition, vectorDistance);
49
+ };
50
+ const judgeInViewport = (modelPoint) => {
51
+ const { camera, model } = five;
52
+ const { x: offsetXFromCenter, y: offsetYFromCenter, z: offsetZFromCenter, } = modelPoint.clone().project(camera);
53
+ const ratioFromLeft = (offsetXFromCenter + 1) / 2;
54
+ const ratioFromTop = (2 - (offsetYFromCenter + 1)) / 2;
55
+ const isFront = Math.abs(offsetZFromCenter) < 1;
56
+ const cssOffset = [ratioFromLeft, ratioFromTop];
57
+ // 只计算在前面就行
58
+ const isInViewport = isFront && cssOffset.every((ratio) => ratio < 1 && ratio >= 0);
59
+ return Boolean(isInViewport);
60
+ };
61
+ // cssOffset 获取
62
+ const getLabelCssOffset = (five, itemLabel) => {
63
+ const modelPosition = new Vector3(itemLabel.modelPosition[0], itemLabel.modelPosition[1], itemLabel.modelPosition[2]);
64
+ const cssPosition = five.project2d(modelPosition);
65
+ const xOffset = cssPosition === null || cssPosition === void 0 ? void 0 : cssPosition.x;
66
+ const yOffset = cssPosition === null || cssPosition === void 0 ? void 0 : cssPosition.y;
67
+ return [xOffset, yOffset];
68
+ };
69
+ // 重叠计算
70
+ const isOverlap = (cssOffset, widthOffset) => {
71
+ if (cssOffsetLists.length === 0) {
72
+ return false;
73
+ }
74
+ const hasOverlapPoint = cssOffsetLists.find(item => ((cssOffset[0] >= item[0] - widthOffset && cssOffset[0] <= item[0] + widthOffset)
75
+ || (cssOffset[1] >= item[1] - cssHeight && cssOffset[1] <= item[1] + cssHeight)));
76
+ return !!hasOverlapPoint;
77
+ };
78
+ const getFormatedItemLabels = (five, labels) => {
79
+ // 计算位置 & 可见性
80
+ const newLabels = labels.map(label => {
81
+ // 不在绑定点位则直接不可见
82
+ if (five.state.panoIndex !== label.panoIndex) {
83
+ return Object.assign(Object.assign({}, label), { visible: false });
84
+ }
85
+ const cssOffset = getLabelCssOffset(five, label);
86
+ const curLabelWidth = label.name.length * basicWidth;
87
+ const strokeLength = getStrokeLength(label.modelPosition[1], displayStrategyType);
88
+ // 是否加入碰撞检测
89
+ // 配置加入碰撞检测,则判断碰撞检测
90
+ // 在可见范围内, 仅在 Panorama 模态计算
91
+ const isInViewport = five.currentMode === Five.Mode.Panorama
92
+ ? judgeInViewport(new Vector3(label.position[0], label.position[1], label.position[2]))
93
+ : true;
94
+ // 碰撞
95
+ const isBlocked = modelOcclusionEnable
96
+ ? judgeImpacted(five, label)
97
+ : false;
98
+ const visible = isInViewport && !isBlocked;
99
+ // 关掉重叠计算
100
+ // const visible = naturalVisible && !isOverlap([cssOffset[0], cssOffset[1] + strokeLength], curLabelWidth)
101
+ if (!visible)
102
+ return Object.assign(Object.assign({}, label), { visible });
103
+ cssOffsetLists.push(cssOffset);
104
+ // position
105
+ const transform = getLabelTransform(cssOffset);
106
+ return Object.assign(Object.assign({}, label), { visible, transform, strokeLength });
107
+ });
108
+ const sortedItemLabelItems = newLabels
109
+ .filter(({ visible }) => visible)
110
+ .map(label => ({
111
+ itemLabelItem: label,
112
+ distance: new Vector3(label.modelPosition[0], label.modelPosition[1], label.modelPosition[2]).clone().distanceTo(five.camera.position)
113
+ }))
114
+ .sort((a, b) => a.distance - b.distance);
115
+ return newLabels.map(label => {
116
+ const sortIndex = sortedItemLabelItems.findIndex(item => item.itemLabelItem.id === label.id);
117
+ if (sortIndex !== undefined)
118
+ return Object.assign(Object.assign({}, label), { zIndex: sortIndex * 10 });
119
+ return label;
120
+ });
121
+ };
122
+ const onItemLabelUpdate = () => {
123
+ cssOffsetLists = [];
124
+ renderItemLabels = getFormatedItemLabels(five, renderItemLabels);
125
+ };
126
+ const handleCameraUpdateCallback = () => {
127
+ itemsVisible = false;
128
+ handleCameraUpdate();
129
+ };
130
+ const onFiveModeChange = (mode) => {
131
+ itemsVisible = false;
132
+ five.once('initAnimationEnded', (panoIndex, pose, userAction) => {
133
+ anchorEnabled = mode === Five.Mode.Panorama;
134
+ itemsVisible = true;
135
+ if (!userAction)
136
+ return;
137
+ else
138
+ onItemLabelUpdate();
139
+ });
140
+ };
141
+ const handleCameraUpdate = debounce(() => {
142
+ itemsVisible = true;
143
+ onItemLabelUpdate();
144
+ }, 300);
145
+ const onResize = () => {
146
+ five.once('renderFrame', onItemLabelUpdate);
147
+ };
148
+ const addResizeListener = () => {
149
+ window.addEventListener('resize', onResize, false);
150
+ };
151
+ const addDataUpdateListener = () => {
152
+ if (curItemLabels !== itemLabels) {
153
+ renderItemLabels = transform2RenderData(itemLabels);
154
+ curItemLabels = itemLabels;
155
+ onItemLabelUpdate();
156
+ }
157
+ };
158
+ const getNearObserverPano = (fromPositionVector, observers) => {
159
+ let candidates = [];
160
+ for (let i = 0; i < observers.length; i++) {
161
+ const { position: obVector, panoIndex } = observers[i];
162
+ const distance = fromPositionVector.distanceTo(obVector);
163
+ if (maxVisibleDistance === undefined || distance <= maxVisibleDistance || five.state.mode !== Five.Mode.Panorama) {
164
+ candidates.push({
165
+ panoIndex,
166
+ obVector,
167
+ distance
168
+ });
169
+ }
170
+ }
171
+ candidates = candidates.sort((a, b) => a.distance - b.distance);
172
+ let observerIndex;
173
+ for (let i = 0; i < candidates.length; i++) {
174
+ const { obVector, distance, panoIndex } = candidates[i];
175
+ const isImpactedRes = isImpacted(five, fromPositionVector, obVector, distance);
176
+ if (!isImpactedRes) {
177
+ observerIndex = panoIndex;
178
+ break;
179
+ }
180
+ }
181
+ return typeof observerIndex === "number" ? observers[observerIndex] : undefined;
182
+ };
183
+ const onIconClick = (itemLabel) => {
184
+ if (five.state.mode === Five.Mode.Panorama)
185
+ return;
186
+ const observers = five.work.observers;
187
+ const fromPositionVector = new Vector3().fromArray(itemLabel.position);
188
+ const observer = getNearObserverPano(fromPositionVector, observers);
189
+ if (observer) {
190
+ itemLabel.observerIndex = observer.panoIndex;
191
+ }
192
+ if (typeof itemLabel.observerIndex === "number") {
193
+ const observer = observers[itemLabel.observerIndex];
194
+ const direction = fromPositionVector.clone().sub(observer.position).normalize();
195
+ const cameraCoord = {
196
+ longitude: Math.PI + Math.atan2(direction.x, direction.z),
197
+ latitude: Math.acos(direction.y / direction.length()) - Math.PI / 2,
198
+ };
199
+ five.setState(Object.assign(Object.assign({}, cameraCoord), { mode: Five.Mode.Panorama, panoIndex: itemLabel.observerIndex }));
200
+ // 游走结束更新 render list
201
+ five.once('initAnimationEnded', () => {
202
+ renderItemLabels = renderItemLabels.map(item => {
203
+ return Object.assign(Object.assign({}, item), { isFold: item.id !== itemLabel.id });
204
+ });
205
+ five.once('cameraUpdate', () => {
206
+ renderItemLabels = renderItemLabels.map(item => {
207
+ return Object.assign(Object.assign({}, item), { isFold: false });
208
+ });
209
+ });
210
+ });
211
+ }
212
+ };
213
+ beforeUpdate(() => {
214
+ addDataUpdateListener();
215
+ });
216
+ onMount(() => {
217
+ renderItemLabels = transform2RenderData(itemLabels);
218
+ curItemLabels = itemLabels;
219
+ onItemLabelUpdate();
220
+ addResizeListener();
221
+ five.on('cameraUpdate', handleCameraUpdateCallback);
222
+ // five.on('modeChange', onFiveModeChange)
223
+ });
224
+ onDestroy(() => {
225
+ five.off('cameraUpdate', handleCameraUpdateCallback);
226
+ // five.off('modeChange', onFiveModeChange)
227
+ window.removeEventListener('resize', onResize, false);
228
+ });
229
+ </script>
230
+
231
+ <div class="item-labels-container" bind:clientWidth="{containerWidth}" bind:clientHeight="{containerHeight}"
232
+ style:opacity="{itemsVisible ? 1 : 0}">
233
+ {#each renderItemLabels as itemLabelItem (itemLabelItem.id)}
234
+ {#if itemLabelItem.visible}
235
+ <ItemLabelItem
236
+ itemLabel="{itemLabelItem}"
237
+ hooks="{hooks}"
238
+ anchorEnabled="{anchorEnabled}"
239
+ onIconClick="{onIconClick}"
240
+ />
241
+ {/if}
242
+ {/each}
243
+ </div>
244
+
245
+ <style>
246
+ .item-labels-container {
247
+ width: 100%;
248
+ height: 100%;
249
+ position: relative;
250
+ }
251
+ </style>
@@ -1,11 +1,13 @@
1
1
  /* generated by Svelte v3.49.0 */
2
2
  import {
3
+ HtmlTag,
3
4
  SvelteComponent,
4
5
  append,
5
6
  append_styles,
6
7
  attr,
7
8
  detach,
8
9
  element,
10
+ empty,
9
11
  init,
10
12
  insert,
11
13
  listen,
@@ -18,15 +20,103 @@ import {
18
20
  text
19
21
  } from "svelte/internal";
20
22
 
21
- import "./events.type";
23
+ import './events.type';
22
24
  import classNames from 'classnames';
23
25
 
24
26
  function add_css(target) {
25
- append_styles(target, "svelte-1gam1w3", ".item-label-item.svelte-1gam1w3.svelte-1gam1w3{position:absolute;z-index:0;transform:none;cursor:pointer;pointer-events:none;user-select:none;animation:svelte-1gam1w3-fadeIn .3s ease-in}.item-label-item.fold.svelte-1gam1w3>.item-label-item__text-wrap.svelte-1gam1w3{visibility:hidden}.item-label-item.fold.svelte-1gam1w3>.item-label-item__bar.anchor.svelte-1gam1w3{visibility:hidden}.item-label-item.fold.svelte-1gam1w3>.item-label-item__bar.anchor.svelte-1gam1w3:after{visibility:visible}.item-label-item__text-wrap.svelte-1gam1w3.svelte-1gam1w3{height:fit-content;padding:12px 20px 12px 12px;position:absolute;width:max-content;max-width:473px;min-height:92px;background-image:linear-gradient(269deg, rgba(0, 0, 0, 0.50) 0%, rgba(0, 0, 0, 0.60) 49%, rgba(31, 38, 46, 0.70) 100%);border:1.5px solid rgba(255, 255, 255, .65);border-radius:3px;color:white;transform:translate(-50%, 0);display:flex;justify-content:flex-start;align-items:center;box-sizing:border-box;overflow:hidden;pointer-events:all}.icon-wrap.svelte-1gam1w3.svelte-1gam1w3{width:68px;height:100%;display:flex;justify-content:center;align-content:center}.icon.svelte-1gam1w3.svelte-1gam1w3{width:68px;height:68px;background-repeat:no-repeat;background-size:contain;background-position:center}.item-label-text.svelte-1gam1w3.svelte-1gam1w3{margin-left:12px;padding-left:12px;min-height:68px;height:auto;display:flex;flex-flow:column;justify-content:space-around;align-content:flex-start;border-left:solid rgba(255, 255, 255, .2) 1px;border-top:solid rgba(255, 255, 255, .2) 0;border-right:solid rgba(255, 255, 255, .2) 0;border-bottom:solid rgba(255, 255, 255, .2) 0;pointer-events:auto}.item-model.svelte-1gam1w3.svelte-1gam1w3{white-space:nowrap;font-size:22px;font-weight:bold;line-height:30px}.item-name.svelte-1gam1w3.svelte-1gam1w3{height:auto;word-wrap:break-word;word-break:break-all;font-size:20px;line-height:28px}.item-label-item__bar.svelte-1gam1w3.svelte-1gam1w3{position:absolute;bottom:0;width:3px;background-image:linear-gradient(to bottom, white, rgba(255, 255, 255, 0));box-shadow:0 2px 8px 0 rgba(0, 0, 0, 0.20);pointer-events:none}.item-label-item__bar.anchor.svelte-1gam1w3.svelte-1gam1w3:after{content:'';position:absolute;bottom:0;width:24px;height:24px;background-image:url(\"//vrlab-public.ljcdn.com/common/file/web/67e7a198-28c9-47dc-879b-507bd3ae600c.png \");background-position:center;background-size:contain;transform:translate(-10.5px, 50%)}@keyframes svelte-1gam1w3-fadeIn{from{opacity:0\n }to{opacity:1\n }}");
27
+ append_styles(target, "svelte-fxbyy", ".item-label-item.svelte-fxbyy.svelte-fxbyy{position:absolute;z-index:0;transform:none;cursor:pointer;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-animation:svelte-fxbyy-fadeIn 0.3s ease-in;animation:svelte-fxbyy-fadeIn 0.3s ease-in}.item-label-item.fold.svelte-fxbyy>.item-label-item__text-wrap.svelte-fxbyy{visibility:hidden}.item-label-item.fold.svelte-fxbyy>.item-label-item__bar.anchor.svelte-fxbyy{visibility:hidden}.item-label-item.fold.svelte-fxbyy>.item-label-item__bar.anchor.svelte-fxbyy:after{visibility:visible}.item-label-item__text-wrap.svelte-fxbyy.svelte-fxbyy{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;padding:0.625rem 1.04167rem 0.625rem 0.625rem;position:absolute;width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:24.63542rem;min-height:4.79167rem;background-image:linear-gradient(\n 269deg,\n rgba(0, 0, 0, 0.5) 0%,\n rgba(0, 0, 0, 0.6) 49%,\n rgba(31, 38, 46, 0.7) 100%\n );border:1.5px solid rgba(255, 255, 255, 0.65);border-radius:0.15625rem;color:white;transform:translate(-50%, 0);display:flex;justify-content:flex-start;align-items:center;box-sizing:border-box;overflow:hidden;pointer-events:all}.icon-wrap.svelte-fxbyy.svelte-fxbyy{width:3.54167rem;height:100%;display:flex;justify-content:center;align-content:center}.icon.svelte-fxbyy.svelte-fxbyy{width:3.54167rem;height:3.54167rem;background-repeat:no-repeat;background-size:contain;background-position:center}.item-label-text.svelte-fxbyy.svelte-fxbyy{margin-left:0.625rem;padding-left:0.625rem;min-height:3.54167rem;height:auto;display:flex;flex-flow:column;justify-content:space-around;align-content:flex-start;border-left:solid rgba(255, 255, 255, 0.2) 1px;border-top:solid rgba(255, 255, 255, 0.2) 0;border-right:solid rgba(255, 255, 255, 0.2) 0;border-bottom:solid rgba(255, 255, 255, 0.2) 0;pointer-events:auto}.item-model.svelte-fxbyy.svelte-fxbyy{white-space:nowrap;font-size:1.14583rem;font-weight:bold;line-height:1.5625rem}.item-name.svelte-fxbyy.svelte-fxbyy{height:auto;word-wrap:break-word;word-break:break-all;font-size:1.04167rem;line-height:1.45833rem}.item-label-item__bar.svelte-fxbyy.svelte-fxbyy{position:absolute;bottom:0;width:0.15625rem;background-image:linear-gradient(to bottom, white, rgba(255, 255, 255, 0));box-shadow:0 2px 0.41667rem 0 rgba(0, 0, 0, 0.2);pointer-events:none}.item-label-item__bar.anchor.svelte-fxbyy.svelte-fxbyy:after{content:'';position:absolute;bottom:0;width:1.25rem;height:1.25rem;background-image:url('//vrlab-public.ljcdn.com/common/file/web/67e7a198-28c9-47dc-879b-507bd3ae600c.png ');background-position:center;background-size:contain;transform:translate(-0.54688rem, 50%)}@-webkit-keyframes svelte-fxbyy-fadeIn{from{opacity:0}to{opacity:1}}@keyframes svelte-fxbyy-fadeIn{from{opacity:0}to{opacity:1}}");
26
28
  }
27
29
 
28
- // (21:2) {#if itemLabel.icon}
30
+ // (25:4) {:else}
31
+ function create_else_block(ctx) {
32
+ let t0;
33
+ let div;
34
+ let span0;
35
+ let t1_value = (/*itemLabel*/ ctx[0].code || /*itemLabel*/ ctx[0].id) + "";
36
+ let t1;
37
+ let t2;
38
+ let span1;
39
+ let t3_value = /*itemLabel*/ ctx[0].name + "";
40
+ let t3;
41
+ let if_block = /*itemLabel*/ ctx[0].icon && create_if_block_1(ctx);
42
+
43
+ return {
44
+ c() {
45
+ if (if_block) if_block.c();
46
+ t0 = space();
47
+ div = element("div");
48
+ span0 = element("span");
49
+ t1 = text(t1_value);
50
+ t2 = space();
51
+ span1 = element("span");
52
+ t3 = text(t3_value);
53
+ attr(span0, "class", "item-model svelte-fxbyy");
54
+ attr(span1, "class", "item-name svelte-fxbyy");
55
+ attr(div, "class", "item-label-text svelte-fxbyy");
56
+ },
57
+ m(target, anchor) {
58
+ if (if_block) if_block.m(target, anchor);
59
+ insert(target, t0, anchor);
60
+ insert(target, div, anchor);
61
+ append(div, span0);
62
+ append(span0, t1);
63
+ append(div, t2);
64
+ append(div, span1);
65
+ append(span1, t3);
66
+ },
67
+ p(ctx, dirty) {
68
+ if (/*itemLabel*/ ctx[0].icon) {
69
+ if (if_block) {
70
+ if_block.p(ctx, dirty);
71
+ } else {
72
+ if_block = create_if_block_1(ctx);
73
+ if_block.c();
74
+ if_block.m(t0.parentNode, t0);
75
+ }
76
+ } else if (if_block) {
77
+ if_block.d(1);
78
+ if_block = null;
79
+ }
80
+
81
+ if (dirty & /*itemLabel*/ 1 && t1_value !== (t1_value = (/*itemLabel*/ ctx[0].code || /*itemLabel*/ ctx[0].id) + "")) set_data(t1, t1_value);
82
+ if (dirty & /*itemLabel*/ 1 && t3_value !== (t3_value = /*itemLabel*/ ctx[0].name + "")) set_data(t3, t3_value);
83
+ },
84
+ d(detaching) {
85
+ if (if_block) if_block.d(detaching);
86
+ if (detaching) detach(t0);
87
+ if (detaching) detach(div);
88
+ }
89
+ };
90
+ }
91
+
92
+ // (23:4) {#if itemLabel.customElement}
29
93
  function create_if_block(ctx) {
94
+ let html_tag;
95
+ let raw_value = /*itemLabel*/ ctx[0].customElement + "";
96
+ let html_anchor;
97
+
98
+ return {
99
+ c() {
100
+ html_tag = new HtmlTag(false);
101
+ html_anchor = empty();
102
+ html_tag.a = html_anchor;
103
+ },
104
+ m(target, anchor) {
105
+ html_tag.m(raw_value, target, anchor);
106
+ insert(target, html_anchor, anchor);
107
+ },
108
+ p(ctx, dirty) {
109
+ if (dirty & /*itemLabel*/ 1 && raw_value !== (raw_value = /*itemLabel*/ ctx[0].customElement + "")) html_tag.p(raw_value);
110
+ },
111
+ d(detaching) {
112
+ if (detaching) detach(html_anchor);
113
+ if (detaching) html_tag.d();
114
+ }
115
+ };
116
+ }
117
+
118
+ // (26:6) {#if itemLabel.icon}
119
+ function create_if_block_1(ctx) {
30
120
  let div1;
31
121
  let div0;
32
122
  let div0_style_value;
@@ -37,9 +127,9 @@ function create_if_block(ctx) {
37
127
  c() {
38
128
  div1 = element("div");
39
129
  div0 = element("div");
40
- attr(div0, "class", "icon svelte-1gam1w3");
130
+ attr(div0, "class", "icon svelte-fxbyy");
41
131
  attr(div0, "style", div0_style_value = `background-image: url(${/*itemLabel*/ ctx[0].icon})`);
42
- attr(div1, "class", "icon-wrap svelte-1gam1w3");
132
+ attr(div1, "class", "icon-wrap svelte-fxbyy");
43
133
  },
44
134
  m(target, anchor) {
45
135
  insert(target, div1, anchor);
@@ -64,116 +154,93 @@ function create_if_block(ctx) {
64
154
  }
65
155
 
66
156
  function create_fragment(ctx) {
67
- let div3;
68
- let div1;
69
- let t0;
157
+ let div2;
70
158
  let div0;
71
- let span0;
72
- let t1_value = (/*itemLabel*/ ctx[0].code || /*itemLabel*/ ctx[0].id) + "";
73
- let t1;
74
- let t2;
75
- let span1;
76
- let t3_value = /*itemLabel*/ ctx[0].name + "";
77
- let t3;
159
+ let div0_class_value;
160
+ let t;
161
+ let div1;
78
162
  let div1_class_value;
79
- let t4;
80
- let div2;
81
163
  let div2_class_value;
82
- let div3_class_value;
83
164
  let mounted;
84
165
  let dispose;
85
- let if_block = /*itemLabel*/ ctx[0].icon && create_if_block(ctx);
166
+
167
+ function select_block_type(ctx, dirty) {
168
+ if (/*itemLabel*/ ctx[0].customElement) return create_if_block;
169
+ return create_else_block;
170
+ }
171
+
172
+ let current_block_type = select_block_type(ctx, -1);
173
+ let if_block = current_block_type(ctx);
86
174
 
87
175
  return {
88
176
  c() {
89
- div3 = element("div");
90
- div1 = element("div");
91
- if (if_block) if_block.c();
92
- t0 = space();
93
- div0 = element("div");
94
- span0 = element("span");
95
- t1 = text(t1_value);
96
- t2 = space();
97
- span1 = element("span");
98
- t3 = text(t3_value);
99
- t4 = space();
100
177
  div2 = element("div");
101
- attr(span0, "class", "item-model svelte-1gam1w3");
102
- attr(span1, "class", "item-name svelte-1gam1w3");
103
- attr(div0, "class", "item-label-text svelte-1gam1w3");
104
- attr(div1, "class", div1_class_value = "" + (null_to_empty(classNames("item-label-item__text-wrap")) + " svelte-1gam1w3"));
105
- set_style(div1, "bottom", `${/*itemLabel*/ ctx[0].strokeLength}px`);
106
- attr(div2, "class", div2_class_value = "" + (null_to_empty(classNames("item-label-item__bar", { anchor: /*anchorEnabled*/ ctx[1] })) + " svelte-1gam1w3"));
107
- set_style(div2, "height", `${/*itemLabel*/ ctx[0].strokeLength}px`);
108
- attr(div3, "class", div3_class_value = "" + (null_to_empty(classNames("item-label-item", { fold: /*itemLabel*/ ctx[0].isFold })) + " svelte-1gam1w3"));
109
- set_style(div3, "z-index", /*itemLabel*/ ctx[0].zIndex, false);
110
- set_style(div3, "transform", /*itemLabel*/ ctx[0].transform, false);
178
+ div0 = element("div");
179
+ if_block.c();
180
+ t = space();
181
+ div1 = element("div");
182
+ attr(div0, "class", div0_class_value = "" + (null_to_empty(classNames('item-label-item__text-wrap')) + " svelte-fxbyy"));
183
+ set_style(div0, "bottom", `${/*itemLabel*/ ctx[0].strokeLength}px`);
184
+ attr(div1, "class", div1_class_value = "" + (null_to_empty(classNames('item-label-item__bar', { anchor: /*anchorEnabled*/ ctx[1] })) + " svelte-fxbyy"));
185
+ set_style(div1, "height", `${/*itemLabel*/ ctx[0].strokeLength}px`);
186
+ attr(div2, "class", div2_class_value = "" + (null_to_empty(classNames('item-label-item', { fold: /*itemLabel*/ ctx[0].isFold })) + " svelte-fxbyy"));
187
+ set_style(div2, "z-index", /*itemLabel*/ ctx[0].zIndex, false);
188
+ set_style(div2, "transform", /*itemLabel*/ ctx[0].transform, false);
111
189
  },
112
190
  m(target, anchor) {
113
- insert(target, div3, anchor);
114
- append(div3, div1);
115
- if (if_block) if_block.m(div1, null);
116
- append(div1, t0);
117
- append(div1, div0);
118
- append(div0, span0);
119
- append(span0, t1);
120
- append(div0, t2);
121
- append(div0, span1);
122
- append(span1, t3);
123
- append(div3, t4);
124
- append(div3, div2);
191
+ insert(target, div2, anchor);
192
+ append(div2, div0);
193
+ if_block.m(div0, null);
194
+ append(div2, t);
195
+ append(div2, div1);
125
196
 
126
197
  if (!mounted) {
127
- dispose = listen(div1, "click", /*onClick*/ ctx[3]);
198
+ dispose = listen(div0, "click", /*onClick*/ ctx[3]);
128
199
  mounted = true;
129
200
  }
130
201
  },
131
202
  p(ctx, [dirty]) {
132
- if (/*itemLabel*/ ctx[0].icon) {
203
+ if (current_block_type === (current_block_type = select_block_type(ctx, dirty)) && if_block) {
204
+ if_block.p(ctx, dirty);
205
+ } else {
206
+ if_block.d(1);
207
+ if_block = current_block_type(ctx);
208
+
133
209
  if (if_block) {
134
- if_block.p(ctx, dirty);
135
- } else {
136
- if_block = create_if_block(ctx);
137
210
  if_block.c();
138
- if_block.m(div1, t0);
211
+ if_block.m(div0, null);
139
212
  }
140
- } else if (if_block) {
141
- if_block.d(1);
142
- if_block = null;
143
213
  }
144
214
 
145
- if (dirty & /*itemLabel*/ 1 && t1_value !== (t1_value = (/*itemLabel*/ ctx[0].code || /*itemLabel*/ ctx[0].id) + "")) set_data(t1, t1_value);
146
- if (dirty & /*itemLabel*/ 1 && t3_value !== (t3_value = /*itemLabel*/ ctx[0].name + "")) set_data(t3, t3_value);
147
-
148
215
  if (dirty & /*itemLabel*/ 1) {
149
- set_style(div1, "bottom", `${/*itemLabel*/ ctx[0].strokeLength}px`);
216
+ set_style(div0, "bottom", `${/*itemLabel*/ ctx[0].strokeLength}px`);
150
217
  }
151
218
 
152
- if (dirty & /*anchorEnabled*/ 2 && div2_class_value !== (div2_class_value = "" + (null_to_empty(classNames("item-label-item__bar", { anchor: /*anchorEnabled*/ ctx[1] })) + " svelte-1gam1w3"))) {
153
- attr(div2, "class", div2_class_value);
219
+ if (dirty & /*anchorEnabled*/ 2 && div1_class_value !== (div1_class_value = "" + (null_to_empty(classNames('item-label-item__bar', { anchor: /*anchorEnabled*/ ctx[1] })) + " svelte-fxbyy"))) {
220
+ attr(div1, "class", div1_class_value);
154
221
  }
155
222
 
156
223
  if (dirty & /*itemLabel*/ 1) {
157
- set_style(div2, "height", `${/*itemLabel*/ ctx[0].strokeLength}px`);
224
+ set_style(div1, "height", `${/*itemLabel*/ ctx[0].strokeLength}px`);
158
225
  }
159
226
 
160
- if (dirty & /*itemLabel*/ 1 && div3_class_value !== (div3_class_value = "" + (null_to_empty(classNames("item-label-item", { fold: /*itemLabel*/ ctx[0].isFold })) + " svelte-1gam1w3"))) {
161
- attr(div3, "class", div3_class_value);
227
+ if (dirty & /*itemLabel*/ 1 && div2_class_value !== (div2_class_value = "" + (null_to_empty(classNames('item-label-item', { fold: /*itemLabel*/ ctx[0].isFold })) + " svelte-fxbyy"))) {
228
+ attr(div2, "class", div2_class_value);
162
229
  }
163
230
 
164
231
  if (dirty & /*itemLabel*/ 1) {
165
- set_style(div3, "z-index", /*itemLabel*/ ctx[0].zIndex, false);
232
+ set_style(div2, "z-index", /*itemLabel*/ ctx[0].zIndex, false);
166
233
  }
167
234
 
168
235
  if (dirty & /*itemLabel*/ 1) {
169
- set_style(div3, "transform", /*itemLabel*/ ctx[0].transform, false);
236
+ set_style(div2, "transform", /*itemLabel*/ ctx[0].transform, false);
170
237
  }
171
238
  },
172
239
  i: noop,
173
240
  o: noop,
174
241
  d(detaching) {
175
- if (detaching) detach(div3);
176
- if (if_block) if_block.d();
242
+ if (detaching) detach(div2);
243
+ if_block.d();
177
244
  mounted = false;
178
245
  dispose();
179
246
  }