@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.
- package/dist/CSS3DRenderPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/CameraMovementPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/ItemLabelPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/ItemLabelPlugin/index.js +138 -73
- package/dist/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/ModelChassisCompassPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/ModelEntryDoorGuidePlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/ModelItemLabelPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/ModelRoomLabelPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/ModelTVVideoPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/ModelViewPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/PanoCompassPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/PanoCursorRaycasterPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/PanoMeasurePlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/PanoRulerPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/PanoRulerProPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/PanoSpatialTagPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/floorplan/ModelFloorplanPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/floorplan/PanoFloorplanRadarPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/floorplan/TopviewFloorplanPlugin/ItemLabelPlugin/typings.d.ts +1 -0
- package/dist/index.es.js +156 -91
- package/dist/index.js +156 -91
- package/dist/index.umd.js +156 -91
- package/docs/classes/Magnifier.html +4 -4
- package/docs/classes/ModelRoomLabelController.html +4 -4
- package/docs/enums/CameraMovementEffect.html +1 -1
- package/docs/enums/DIRECTION.html +1 -1
- package/docs/enums/DISPLAY_STRATEGY_TYPE.html +1 -1
- package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +1 -1
- package/docs/enums/ITEM_LABEL_PLUGIN_DISPLAY_STRATEGY_TYPE.html +1 -1
- package/docs/enums/Rotation.html +1 -1
- package/docs/interfaces/CSS3DRenderPluginExportType.html +2 -2
- package/docs/interfaces/CameraMovementPluginExportType.html +2 -2
- package/docs/interfaces/FloorplanBounding.html +3 -3
- package/docs/interfaces/FloorplanData.html +1 -1
- package/docs/interfaces/FloorplanEntrance.html +6 -6
- package/docs/interfaces/FloorplanExtraObject.html +2 -2
- package/docs/interfaces/FloorplanExtraObject3D.html +1 -1
- package/docs/interfaces/FloorplanFloorData.html +1 -1
- package/docs/interfaces/FloorplanImagePosition.html +1 -1
- package/docs/interfaces/FloorplanObserver.html +1 -1
- package/docs/interfaces/FloorplanOutlineItem.html +1 -1
- package/docs/interfaces/FloorplanPosition.html +1 -1
- package/docs/interfaces/FloorplanRoomItem.html +5 -5
- package/docs/interfaces/FloorplanRoomLabelItem.html +2 -2
- package/docs/interfaces/FloorplanServerBounding.html +3 -3
- package/docs/interfaces/FloorplanServerComputedData.html +1 -1
- package/docs/interfaces/FloorplanServerData.html +1 -1
- package/docs/interfaces/FloorplanServerEntrance.html +6 -6
- package/docs/interfaces/FloorplanServerFloorData.html +1 -1
- package/docs/interfaces/FloorplanServerImagePosition.html +1 -1
- package/docs/interfaces/FloorplanServerObserver.html +1 -1
- package/docs/interfaces/FloorplanServerOutlineItem.html +1 -1
- package/docs/interfaces/FloorplanServerPosition.html +1 -1
- package/docs/interfaces/FloorplanServerRoomItem.html +6 -6
- package/docs/interfaces/FloorplanServerRoomLabelItem.html +2 -2
- package/docs/interfaces/ItemLabelPluginData.html +1 -1
- package/docs/interfaces/ItemLabelPluginExportReturnsType.html +1 -1
- package/docs/interfaces/ItemLabelPluginParametersType.html +1 -1
- package/docs/interfaces/LineJson.html +1 -1
- package/docs/interfaces/ModelChassisCompassPluginData.html +1 -1
- package/docs/interfaces/ModelChassisCompassPluginExportType.html +1 -1
- package/docs/interfaces/ModelChassisCompassPluginParameterType.html +1 -1
- package/docs/interfaces/ModelEntryDoorGuidePluginData.html +1 -1
- package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +1 -1
- package/docs/interfaces/ModelItemLabelPluginData.html +1 -1
- package/docs/interfaces/ModelItemLabelPluginExportReturnsType.html +1 -1
- package/docs/interfaces/ModelItemLabelPluginParametersType.html +1 -1
- package/docs/interfaces/ModelRoomLabelPluginData.html +1 -1
- package/docs/interfaces/ModelTVVideoPluginData.html +1 -1
- package/docs/interfaces/ModelTVVideoPluginExportType.html +1 -1
- package/docs/interfaces/ModelTVVideoPluginParameterType.html +1 -1
- package/docs/interfaces/ModelViewPluginExportType.html +1 -1
- package/docs/interfaces/OpenParameter.html +1 -1
- package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +6 -6
- package/docs/interfaces/PanoMeasureParameterType.html +1 -1
- package/docs/interfaces/PanoRulerPluginExportType.html +1 -1
- package/docs/interfaces/PanoRulerPluginOptions.html +1 -1
- package/docs/interfaces/PanoRulerPluginParameterType.html +1 -1
- package/docs/interfaces/PanoRulerProPluginExportType.html +1 -1
- package/docs/interfaces/PanoRulerProPluginOptions.html +1 -1
- package/docs/interfaces/PanoRulerProPluginParameterType.html +1 -1
- package/docs/interfaces/PanoRulerProPluginState.html +1 -1
- package/docs/interfaces/PanoSpatialTagPluginData.html +1 -1
- package/docs/interfaces/PanoSpatialTagPluginDataElement.html +1 -1
- package/docs/interfaces/PanoSpatialTagPluginExportType.html +1 -1
- package/docs/interfaces/PanoSpatialTagPluginOriginElement.html +1 -1
- package/docs/interfaces/PanoSpatialTagPluginParameterType.html +1 -1
- package/docs/interfaces/PanoSpatialTagPluginPointElement.html +1 -1
- package/docs/interfaces/PanoSpatialTagPluginTagElement.html +1 -1
- package/docs/interfaces/Point.html +1 -1
- package/docs/interfaces/PointJson.html +1 -1
- package/docs/interfaces/Room.html +1 -1
- package/docs/interfaces/RoomInfo.html +1 -1
- package/docs/interfaces/RoomLabel.html +7 -7
- package/docs/modules.html +18 -18
- package/libs/ItemLabelPlugin/ItemLabelComponent.js +2 -2
- package/libs/ItemLabelPlugin/ItemLabelComponent.svelte +251 -0
- package/libs/ItemLabelPlugin/ItemLabelItem.js +141 -74
- package/libs/ItemLabelPlugin/ItemLabelItem.svelte +180 -0
- package/libs/ItemLabelPlugin/Plugin.js +1 -1
- package/libs/ItemLabelPlugin/typings.d.ts +3 -1
- package/libs/ModelItemLabelPlugin/ItemLabelComponent.js +2 -2
- package/libs/ModelItemLabelPlugin/ItemLabelComponent.svelte +155 -0
- package/libs/ModelItemLabelPlugin/ItemLabelItem.js +6 -6
- package/libs/ModelItemLabelPlugin/ItemLabelItem.svelte +100 -0
- package/libs/ModelItemLabelPlugin/ModelItemLabelPlugin.js +1 -1
- package/libs/ModelItemLabelPlugin/typings.d.ts +1 -1
- package/libs/ModelRoomLabelPlugin/Controller.js +1 -1
- package/libs/ModelRoomLabelPlugin/RoomLabelItem.js +4 -4
- package/libs/ModelRoomLabelPlugin/RoomLabelItem.svelte +63 -0
- package/libs/ModelRoomLabelPlugin/RoomLabelItems.js +2 -2
- package/libs/ModelRoomLabelPlugin/RoomLabelItems.svelte +94 -0
- package/libs/PanoRulerProPlugin/Controller.js +1 -1
- package/libs/PanoRulerProPlugin/RulerItem.js +9 -9
- package/libs/PanoRulerProPlugin/RulerItem.svelte +166 -0
- package/libs/PanoRulerProPlugin/RulerItems.svelte +212 -0
- package/libs/PanoSpatialTagPlugin/Components/origins.js +2 -2
- package/libs/PanoSpatialTagPlugin/Components/origins.svelte +58 -0
- package/libs/PanoSpatialTagPlugin/Components/tag.js +9 -9
- package/libs/PanoSpatialTagPlugin/Components/tag.svelte +292 -0
- package/libs/PanoSpatialTagPlugin/Plugin.js +2 -2
- package/libs/floorplan/Components/BaseImage.js +2 -2
- package/libs/floorplan/Components/BaseImage.svelte +26 -0
- package/libs/floorplan/Components/Camera.js +3 -3
- package/libs/floorplan/Components/Camera.svelte +46 -0
- package/libs/floorplan/Components/Compass.js +4 -4
- package/libs/floorplan/Components/Compass.svelte +51 -0
- package/libs/floorplan/Components/CurrentFloor.js +3 -3
- package/libs/floorplan/Components/CurrentFloor.svelte +46 -0
- package/libs/floorplan/Components/Main.js +2 -2
- package/libs/floorplan/Components/Main.svelte +51 -0
- package/libs/floorplan/Components/Normalmage.js +2 -2
- package/libs/floorplan/Components/Normalmage.svelte +11 -0
- package/libs/floorplan/Components/RoomHighlight/Room.js +2 -2
- package/libs/floorplan/Components/RoomHighlight/Room.svelte +27 -0
- package/libs/floorplan/Components/RoomHighlight/RoomHighlight.js +3 -3
- package/libs/floorplan/Components/RoomHighlight/RoomHighlight.svelte +29 -0
- package/libs/floorplan/Components/RoomLabels/RoomLabel.js +3 -3
- package/libs/floorplan/Components/RoomLabels/RoomLabel.svelte +119 -0
- package/libs/floorplan/Components/RoomLabels/RoomLabels.js +2 -2
- package/libs/floorplan/Components/RoomLabels/RoomLabels.svelte +35 -0
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial.js +3 -3
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial.svelte +42 -0
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial_0.svelte +7 -0
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial_1.svelte +24 -0
- package/libs/floorplan/Components/RoomMaterials/RoomMaterial_2.svelte +33 -0
- package/libs/floorplan/Components/RuleLabels/RuleItem.js +9 -9
- package/libs/floorplan/Components/RuleLabels/RuleItem.svelte +174 -0
- package/libs/floorplan/Components/RuleLabels/RuleLabels.js +2 -2
- package/libs/floorplan/Components/RuleLabels/RuleLabels.svelte +32 -0
- package/libs/floorplan/Components/SvgImage.js +3 -4
- package/libs/floorplan/Components/SvgImage.svelte +28 -0
- package/libs/floorplan/ModelFloorplanPlugin/Controller.js +1 -1
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.js +4 -4
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Camera.svelte +85 -0
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/CurrentFloor.svelte +18 -0
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.js +4 -4
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/CurrentFloor/ExtraObjects.svelte +40 -0
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.js +3 -3
- package/libs/floorplan/PanoFloorplanRadarPlugin/Components/Main.svelte +64 -0
- package/libs/floorplan/PanoFloorplanRadarPlugin/Controller.js +1 -1
- package/libs/floorplan/TopviewFloorplanPlugin/Controller.js +1 -1
- 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-
|
|
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-
|
|
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
|
|
23
|
+
import './events.type';
|
|
22
24
|
import classNames from 'classnames';
|
|
23
25
|
|
|
24
26
|
function add_css(target) {
|
|
25
|
-
append_styles(target, "svelte-
|
|
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
|
-
// (
|
|
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-
|
|
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-
|
|
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
|
|
68
|
-
let div1;
|
|
69
|
-
let t0;
|
|
157
|
+
let div2;
|
|
70
158
|
let div0;
|
|
71
|
-
let
|
|
72
|
-
let
|
|
73
|
-
let
|
|
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
|
-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
set_style(
|
|
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,
|
|
114
|
-
append(
|
|
115
|
-
|
|
116
|
-
append(
|
|
117
|
-
append(
|
|
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(
|
|
198
|
+
dispose = listen(div0, "click", /*onClick*/ ctx[3]);
|
|
128
199
|
mounted = true;
|
|
129
200
|
}
|
|
130
201
|
},
|
|
131
202
|
p(ctx, [dirty]) {
|
|
132
|
-
if (
|
|
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(
|
|
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(
|
|
216
|
+
set_style(div0, "bottom", `${/*itemLabel*/ ctx[0].strokeLength}px`);
|
|
150
217
|
}
|
|
151
218
|
|
|
152
|
-
if (dirty & /*anchorEnabled*/ 2 &&
|
|
153
|
-
attr(
|
|
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(
|
|
224
|
+
set_style(div1, "height", `${/*itemLabel*/ ctx[0].strokeLength}px`);
|
|
158
225
|
}
|
|
159
226
|
|
|
160
|
-
if (dirty & /*itemLabel*/ 1 &&
|
|
161
|
-
attr(
|
|
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(
|
|
232
|
+
set_style(div2, "z-index", /*itemLabel*/ ctx[0].zIndex, false);
|
|
166
233
|
}
|
|
167
234
|
|
|
168
235
|
if (dirty & /*itemLabel*/ 1) {
|
|
169
|
-
set_style(
|
|
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(
|
|
176
|
-
|
|
242
|
+
if (detaching) detach(div2);
|
|
243
|
+
if_block.d();
|
|
177
244
|
mounted = false;
|
|
178
245
|
dispose();
|
|
179
246
|
}
|