@realsee/dnalogel 2.0.0-alpha.14 → 2.0.0-alpha.17

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 (48) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/ModelItemLabelPlugin/index.js +77 -100
  3. package/dist/ModelItemLabelPlugin/typings.d.ts +2 -2
  4. package/dist/ModelRoomLabelPlugin/index.js +7 -6
  5. package/dist/PanoSpatialTagPlugin/index.js +11 -11
  6. package/dist/floorplan/ModelFloorplanPlugin/index.js +37 -38
  7. package/dist/floorplan/PanoFloorplanRadarPlugin/index.js +23 -24
  8. package/dist/floorplan/TopviewFloorplanPlugin/index.js +37 -38
  9. package/dist/index.es.js +143 -166
  10. package/dist/index.js +143 -166
  11. package/dist/index.umd.js +143 -166
  12. package/docs/classes/ModelRoomLabelController.html +6 -6
  13. package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +1 -1
  14. package/docs/enums/ModelFloorplanErrorType.html +1 -1
  15. package/docs/interfaces/LineJson.html +1 -1
  16. package/docs/interfaces/ModelChassisCompassPluginData.html +1 -1
  17. package/docs/interfaces/ModelChassisCompassPluginExportType.html +1 -1
  18. package/docs/interfaces/ModelChassisCompassPluginParameterType.html +1 -1
  19. package/docs/interfaces/ModelEntryDoorGuidePluginData.html +1 -1
  20. package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +1 -1
  21. package/docs/interfaces/ModelFloorplanParameterType.html +1 -1
  22. package/docs/interfaces/ModelFloorplanViewEvent.html +2 -2
  23. package/docs/interfaces/ModelItemLabelPluginData.html +1 -1
  24. package/docs/interfaces/ModelItemLabelPluginExportReturnsType.html +1 -1
  25. package/docs/interfaces/ModelItemLabelPluginParametersType.html +1 -1
  26. package/docs/interfaces/ModelRoomLabelPluginData.html +1 -1
  27. package/docs/interfaces/ModelTVVideoPluginData.html +1 -1
  28. package/docs/interfaces/ModelTVVideoPluginExportType.html +1 -1
  29. package/docs/interfaces/ModelTVVideoPluginParameterType.html +1 -1
  30. package/docs/interfaces/PanoCompassPluginData.html +1 -1
  31. package/docs/interfaces/PanoCompassPluginParameterType.html +1 -1
  32. package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +6 -6
  33. package/docs/interfaces/PanoRulerPluginExportType.html +1 -1
  34. package/docs/interfaces/PanoRulerPluginOptions.html +1 -1
  35. package/docs/interfaces/PanoRulerPluginParameterType.html +1 -1
  36. package/docs/interfaces/PanoSpatialTagPluginData.html +1 -1
  37. package/docs/interfaces/PanoSpatialTagPluginExportType.html +1 -1
  38. package/docs/interfaces/PanoSpatialTagPluginParameterType.html +1 -1
  39. package/docs/interfaces/PointJson.html +1 -1
  40. package/docs/interfaces/RoomLabel.html +7 -7
  41. package/docs/interfaces/TopviewFloorplanPluginParameterType.html +1 -1
  42. package/docs/modules.html +12 -12
  43. package/libs/ModelItemLabelPlugin/ItemLabelComponent.js +48 -61
  44. package/libs/ModelItemLabelPlugin/index.js +2 -66
  45. package/libs/ModelItemLabelPlugin/typings.d.ts +2 -2
  46. package/libs/ModelItemLabelPlugin/typings.js +1 -0
  47. package/libs/ModelRoomLabelPlugin/Controller.js +1 -0
  48. package/package.json +4 -1
@@ -17,6 +17,7 @@ import {
17
17
  mount_component,
18
18
  outro_and_destroy_block,
19
19
  safe_not_equal,
20
+ set_style,
20
21
  transition_in,
21
22
  transition_out,
22
23
  update_keyed_each
@@ -27,6 +28,7 @@ import { beforeUpdate, onDestroy, onMount } from "svelte";
27
28
  import * as THREE from 'three';
28
29
  import ItemLabelItem from './ItemLabelItem';
29
30
  import "./events.type";
31
+ import debounce from '../shared-utils/debounce';
30
32
 
31
33
  function add_css(target) {
32
34
  append_styles(target, "svelte-rmdeb", ".item-labels-container.svelte-rmdeb{width:100%;height:100%;position:relative}");
@@ -34,11 +36,11 @@ function add_css(target) {
34
36
 
35
37
  function get_each_context(ctx, list, i) {
36
38
  const child_ctx = ctx.slice();
37
- child_ctx[26] = list[i];
39
+ child_ctx[28] = list[i];
38
40
  return child_ctx;
39
41
  }
40
42
 
41
- // (179:1) {#each renderItemLabels as itemLabelItem (itemLabelItem.id)}
43
+ // (162:1) {#each renderItemLabels as itemLabelItem (itemLabelItem.id)}
42
44
  function create_each_block(key_1, ctx) {
43
45
  let first;
44
46
  let itemlabelitem;
@@ -46,7 +48,7 @@ function create_each_block(key_1, ctx) {
46
48
 
47
49
  itemlabelitem = new ItemLabelItem({
48
50
  props: {
49
- itemLabel: /*itemLabelItem*/ ctx[26],
51
+ itemLabel: /*itemLabelItem*/ ctx[28],
50
52
  hooks: /*hooks*/ ctx[0]
51
53
  }
52
54
  });
@@ -67,7 +69,7 @@ function create_each_block(key_1, ctx) {
67
69
  p(new_ctx, dirty) {
68
70
  ctx = new_ctx;
69
71
  const itemlabelitem_changes = {};
70
- if (dirty & /*renderItemLabels*/ 2) itemlabelitem_changes.itemLabel = /*itemLabelItem*/ ctx[26];
72
+ if (dirty & /*renderItemLabels*/ 2) itemlabelitem_changes.itemLabel = /*itemLabelItem*/ ctx[28];
71
73
  if (dirty & /*hooks*/ 1) itemlabelitem_changes.hooks = /*hooks*/ ctx[0];
72
74
  itemlabelitem.$set(itemlabelitem_changes);
73
75
  },
@@ -94,7 +96,7 @@ function create_fragment(ctx) {
94
96
  let div_resize_listener;
95
97
  let current;
96
98
  let each_value = /*renderItemLabels*/ ctx[1];
97
- const get_key = ctx => /*itemLabelItem*/ ctx[26].id;
99
+ const get_key = ctx => /*itemLabelItem*/ ctx[28].id;
98
100
 
99
101
  for (let i = 0; i < each_value.length; i += 1) {
100
102
  let child_ctx = get_each_context(ctx, each_value, i);
@@ -111,7 +113,8 @@ function create_fragment(ctx) {
111
113
  }
112
114
 
113
115
  attr(div, "class", "item-labels-container svelte-rmdeb");
114
- add_render_callback(() => /*div_elementresize_handler*/ ctx[9].call(div));
116
+ add_render_callback(() => /*div_elementresize_handler*/ ctx[10].call(div));
117
+ set_style(div, "opacity", /*itemsVisible*/ ctx[4] ? 1 : 0, false);
115
118
  },
116
119
  m(target, anchor) {
117
120
  insert(target, div, anchor);
@@ -120,7 +123,7 @@ function create_fragment(ctx) {
120
123
  each_blocks[i].m(div, null);
121
124
  }
122
125
 
123
- div_resize_listener = add_resize_listener(div, /*div_elementresize_handler*/ ctx[9].bind(div));
126
+ div_resize_listener = add_resize_listener(div, /*div_elementresize_handler*/ ctx[10].bind(div));
124
127
  current = true;
125
128
  },
126
129
  p(ctx, [dirty]) {
@@ -130,6 +133,10 @@ function create_fragment(ctx) {
130
133
  each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value, each_1_lookup, div, outro_and_destroy_block, create_each_block, null, get_each_context);
131
134
  check_outros();
132
135
  }
136
+
137
+ if (dirty & /*itemsVisible*/ 16) {
138
+ set_style(div, "opacity", /*itemsVisible*/ ctx[4] ? 1 : 0, false);
139
+ }
133
140
  },
134
141
  i(local) {
135
142
  if (current) return;
@@ -179,46 +186,14 @@ function instance($$self, $$props, $$invalidate) {
179
186
  // 计算重叠
180
187
  let cssOffsetLists = [];
181
188
 
189
+ // 动画过程中 itemsVisible 为 false
190
+ let itemsVisible = true;
191
+
182
192
  /**
183
193
  * 可见性策略:
184
194
  * 1、当前楼层(假设先不考虑多楼层)
185
195
  * 2、模型未被遮挡(一个 box 有没有被遮挡的计算? TODO)
186
196
  * */
187
- // 画辅助线
188
- function addHelper(x, y, z, type, helper) {
189
- let geometry, materials, mesh;
190
-
191
- if (type === 'box') {
192
- geometry = new THREE.BoxGeometry(0.6, 2.5, 1.010696);
193
- let mats = [];
194
-
195
- for (let i = 0; i < geometry.faces.length; i++) {
196
- const material = new THREE.MeshBasicMaterial({
197
- color: new THREE.Color(Math.random() * 0xffffff)
198
- });
199
-
200
- mats.push(material);
201
- }
202
-
203
- materials = mats;
204
- } else if (type === 'ball') {
205
- geometry = new THREE.SphereGeometry(0.02, 0.02, 64);
206
- materials = new THREE.MeshBasicMaterial({ color: new THREE.Color(0xffffff) });
207
- }
208
-
209
- mesh = new THREE.Mesh(geometry, materials);
210
-
211
- // y 轴需要加一半的高度,因为position是从地面开始的,或者我应该算偏移更合理
212
- mesh.position.set(x, y, z);
213
-
214
- if (helper) {
215
- const helper = new THREE.AxesHelper(5);
216
- mesh.add(helper);
217
- }
218
-
219
- five.scene.add(mesh);
220
- }
221
-
222
197
  const getLabelVisible = (five, itemLabel) => {
223
198
  // 虚拟 VR 仅有一层,不考虑楼层信息
224
199
  const raycaster = new Raycaster();
@@ -272,6 +247,8 @@ function instance($$self, $$props, $$invalidate) {
272
247
  return Math.ceil(-38.9 * itemSpaceHeight + 130);
273
248
  case DISPLAY_STRATEGY_TYPE.LARGE:
274
249
  return Math.ceil(-44.44 * itemSpaceHeight + 140);
250
+ case DISPLAY_STRATEGY_TYPE.EXTRA_LARGE:
251
+ return Math.ceil(-92.59 * itemSpaceHeight + 300);
275
252
  }
276
253
  }
277
254
 
@@ -318,15 +295,27 @@ function instance($$self, $$props, $$invalidate) {
318
295
  addDataUpdateListener();
319
296
  });
320
297
 
298
+ const handleCameraUpdateCallback = () => {
299
+ $$invalidate(4, itemsVisible = false);
300
+ handleCameraUpdate();
301
+ };
302
+
321
303
  onMount(() => {
322
304
  $$invalidate(1, renderItemLabels = itemLabels);
323
305
  curItemLabels = itemLabels;
324
306
  onItemLabelUpdate();
325
-
326
- // five.on('cameraUpdate', onItemLabelUpdate)
327
307
  addResizeListener();
308
+ five.on('cameraUpdate', handleCameraUpdateCallback);
328
309
  });
329
310
 
311
+ const handleCameraUpdate = debounce(
312
+ () => {
313
+ $$invalidate(4, itemsVisible = true);
314
+ onItemLabelUpdate();
315
+ },
316
+ 300
317
+ );
318
+
330
319
  const addResizeListener = () => {
331
320
  wrapperSize = {
332
321
  width: wrapper.clientWidth,
@@ -340,7 +329,6 @@ function instance($$self, $$props, $$invalidate) {
340
329
  if (curItemLabels !== itemLabels) {
341
330
  $$invalidate(1, renderItemLabels = itemLabels);
342
331
  curItemLabels = itemLabels;
343
- console.log('--debug--update--');
344
332
  onItemLabelUpdate();
345
333
  }
346
334
  };
@@ -358,13 +346,11 @@ function instance($$self, $$props, $$invalidate) {
358
346
  });
359
347
 
360
348
  onDestroy(() => {
361
- // five.off('cameraUpdate', onItemLabelUpdate)
349
+ five.off('cameraUpdate', handleCameraUpdateCallback);
362
350
  resizeObserver.unobserve(wrapper);
363
-
364
- curItemLabels = null;
365
- $$invalidate(1, renderItemLabels = null);
366
- wrapperSize = { width: 0, height: 0 };
367
- });
351
+ }); // curItemLabels = null
352
+ // renderItemLabels = null
353
+ // wrapperSize = { width: 0, height: 0 }
368
354
 
369
355
  function div_elementresize_handler() {
370
356
  containerWidth = this.clientWidth;
@@ -374,12 +360,12 @@ function instance($$self, $$props, $$invalidate) {
374
360
  }
375
361
 
376
362
  $$self.$$set = $$props => {
377
- if ('five' in $$props) $$invalidate(4, five = $$props.five);
378
- if ('modelOcclusionEnable' in $$props) $$invalidate(5, modelOcclusionEnable = $$props.modelOcclusionEnable);
379
- if ('itemLabels' in $$props) $$invalidate(6, itemLabels = $$props.itemLabels);
380
- if ('wrapper' in $$props) $$invalidate(7, wrapper = $$props.wrapper);
363
+ if ('five' in $$props) $$invalidate(5, five = $$props.five);
364
+ if ('modelOcclusionEnable' in $$props) $$invalidate(6, modelOcclusionEnable = $$props.modelOcclusionEnable);
365
+ if ('itemLabels' in $$props) $$invalidate(7, itemLabels = $$props.itemLabels);
366
+ if ('wrapper' in $$props) $$invalidate(8, wrapper = $$props.wrapper);
381
367
  if ('hooks' in $$props) $$invalidate(0, hooks = $$props.hooks);
382
- if ('displayStrategyType' in $$props) $$invalidate(8, displayStrategyType = $$props.displayStrategyType);
368
+ if ('displayStrategyType' in $$props) $$invalidate(9, displayStrategyType = $$props.displayStrategyType);
383
369
  };
384
370
 
385
371
  return [
@@ -387,6 +373,7 @@ function instance($$self, $$props, $$invalidate) {
387
373
  renderItemLabels,
388
374
  containerWidth,
389
375
  containerHeight,
376
+ itemsVisible,
390
377
  five,
391
378
  modelOcclusionEnable,
392
379
  itemLabels,
@@ -407,12 +394,12 @@ class Component extends SvelteComponent {
407
394
  create_fragment,
408
395
  safe_not_equal,
409
396
  {
410
- five: 4,
411
- modelOcclusionEnable: 5,
412
- itemLabels: 6,
413
- wrapper: 7,
397
+ five: 5,
398
+ modelOcclusionEnable: 6,
399
+ itemLabels: 7,
400
+ wrapper: 8,
414
401
  hooks: 0,
415
- displayStrategyType: 8
402
+ displayStrategyType: 9
416
403
  },
417
404
  add_css
418
405
  );
@@ -15,7 +15,6 @@ export const ModelItemLabelPlugin = (five, params) => {
15
15
  hooks: new Subscribe(),
16
16
  modelOcclusionEnable: (_a = params === null || params === void 0 ? void 0 : params.modelOcclusionEnable) !== null && _a !== void 0 ? _a : true,
17
17
  displayStrategyType: (_b = params === null || params === void 0 ? void 0 : params.displayStrategyType) !== null && _b !== void 0 ? _b : DISPLAY_STRATEGY_TYPE.SMALL,
18
- pending: false
19
18
  };
20
19
  pluginState.container.setAttribute('class', 'model-item-label-plugin-container');
21
20
  pluginState.container.style.cssText = `
@@ -24,6 +23,7 @@ export const ModelItemLabelPlugin = (five, params) => {
24
23
  top: 0;
25
24
  width: 100%;
26
25
  height: 100%;
26
+ z-index: 5;
27
27
  `;
28
28
  pluginState.container.style.pointerEvents = 'none'; // 写到 cssText 里不生效
29
29
  const appendTo = (wrapper) => {
@@ -54,50 +54,6 @@ export const ModelItemLabelPlugin = (five, params) => {
54
54
  removeListener4Five();
55
55
  pluginState.container.remove();
56
56
  };
57
- const handleRerender = () => {
58
- if (!pluginState.enabled || !pluginState.fiveModeEnabled || pluginState.pending)
59
- return;
60
- pluginState.pending = true;
61
- disable();
62
- };
63
- const rerender = (a, b, c) => {
64
- if (!pluginState.pending)
65
- return;
66
- if (!pluginState.fiveModeEnabled)
67
- return;
68
- if (!c)
69
- return;
70
- pluginState.pending = false;
71
- enable();
72
- render();
73
- };
74
- const handleInteriaPanRerender = (a, b) => {
75
- if (!pluginState.pending)
76
- return;
77
- if (!pluginState.fiveModeEnabled)
78
- return;
79
- if (!b)
80
- return;
81
- pluginState.pending = false;
82
- enable();
83
- render();
84
- };
85
- const handleWantsPanGesture = (pose, final) => {
86
- if (pose) {
87
- handleRerender();
88
- }
89
- };
90
- const handlePanGesture = (pose, final) => {
91
- if (!pluginState.pending)
92
- return;
93
- if (!pluginState.fiveModeEnabled)
94
- return;
95
- if (!final)
96
- return;
97
- pluginState.pending = false;
98
- enable();
99
- render();
100
- };
101
57
  const render = () => {
102
58
  var _a;
103
59
  if (!pluginState.wrapper)
@@ -133,33 +89,13 @@ export const ModelItemLabelPlugin = (five, params) => {
133
89
  const addListener4Five = () => {
134
90
  five.on('modeChange', onFiveModeChange);
135
91
  five.once('dispose', dispose);
136
- // five.on('wantsGesture', handleRerender)
137
- // five.on('gesture', rerender)
138
- five.on('wantsMouseWheel', handleRerender);
139
- five.on('mouseWheel', rerender);
140
- five.on('wantsInteriaPan', handleRerender);
141
- five.on('interiaPan', handleInteriaPanRerender);
142
- five.on('wantsPanGesture', handleWantsPanGesture);
143
- five.on('panGesture', handlePanGesture);
144
- five.on('wantsPinchGesture', handleRerender);
145
- five.on('pinchGesture', rerender);
146
92
  };
147
93
  // 取消 five 监听
148
94
  const removeListener4Five = () => {
149
95
  five.off('modeChange', onFiveModeChange);
150
- // five.off('wantsGesture', handleRerender)
151
- // five.off('gesture', rerender)
152
- five.off('wantsMouseWheel', handleRerender);
153
- five.off('mouseWheel', rerender);
154
- five.off('wantsInteriaPan', handleRerender);
155
- five.off('interiaPan', handleInteriaPanRerender);
156
- five.off('wantsPanGesture', handleWantsPanGesture);
157
- five.off('panGesture', handlePanGesture);
158
- five.off('wantsPinchGesture', handleRerender);
159
- five.off('pinchGesture', rerender);
160
96
  };
161
97
  const onFiveModeChange = (mode) => {
162
- if (!pluginState.enabled || pluginState.pending)
98
+ if (!pluginState.enabled)
163
99
  return;
164
100
  if (mode !== Five.Mode.Floorplan) {
165
101
  pluginState.fiveModeEnabled = false;
@@ -4,7 +4,8 @@ import { PluginEvent } from "./events.type";
4
4
  export declare enum DISPLAY_STRATEGY_TYPE {
5
5
  SMALL = "small",
6
6
  MIDLLE = "middle",
7
- LARGE = "large"
7
+ LARGE = "large",
8
+ EXTRA_LARGE = "x-large"
8
9
  }
9
10
  export interface ModelItemLabelPluginParametersType {
10
11
  modelOcclusionEnable?: boolean;
@@ -52,5 +53,4 @@ export interface ModelItemLabelPluginState {
52
53
  hooks: Subscribe<PluginEvent>;
53
54
  modelOcclusionEnable: boolean;
54
55
  displayStrategyType: Partial<DISPLAY_STRATEGY_TYPE>;
55
- pending: boolean;
56
56
  }
@@ -3,4 +3,5 @@ export var DISPLAY_STRATEGY_TYPE;
3
3
  DISPLAY_STRATEGY_TYPE["SMALL"] = "small";
4
4
  DISPLAY_STRATEGY_TYPE["MIDLLE"] = "middle";
5
5
  DISPLAY_STRATEGY_TYPE["LARGE"] = "large";
6
+ DISPLAY_STRATEGY_TYPE["EXTRA_LARGE"] = "x-large";
6
7
  })(DISPLAY_STRATEGY_TYPE || (DISPLAY_STRATEGY_TYPE = {}));
@@ -74,6 +74,7 @@ export class ModelRoomLabelController {
74
74
  this.container.style.pointerEvents = 'none';
75
75
  this.container.style.left = '0';
76
76
  this.container.style.top = '0';
77
+ this.container.style.zIndex = '5';
77
78
  // five listener
78
79
  this.five.once('dispose', () => this.dispose());
79
80
  this.five.on('modeChange', this.onFiveModeChange);
package/package.json CHANGED
@@ -5,8 +5,9 @@
5
5
  "type": "module",
6
6
  "author": "REALSEE-DEVELOPER",
7
7
  "repository": "https://github.com/realsee-developer/dnalogel.git",
8
+ "description": "如视 VR 看房插件合集",
8
9
  "private": false,
9
- "version": "2.0.0-alpha.14",
10
+ "version": "2.0.0-alpha.17",
10
11
  "license": "SEE LICENSE IN TERMS.txt",
11
12
  "scripts": {
12
13
  "build": "yarn run tsb && yarn run build:rollup && yarn build:docs",
@@ -30,6 +31,7 @@
30
31
  "@rollup/plugin-alias": "^3.1.9",
31
32
  "@rollup/plugin-commonjs": "^21.1.0",
32
33
  "@rollup/plugin-typescript": "^8.3.2",
34
+ "@sveltejs/vite-plugin-svelte": "^1.0.0-next.44",
33
35
  "@tsconfig/svelte": "^2.0.1",
34
36
  "@typescript-eslint/eslint-plugin": "^5.12.1",
35
37
  "@typescript-eslint/parser": "^5.12.1",
@@ -43,6 +45,7 @@
43
45
  "postcss-plugin-px2rem": "^0.8.1",
44
46
  "replace": "^1.2.1",
45
47
  "rollup-plugin-multi-input": "^1.3.1",
48
+ "rollup-plugin-postcss": "^4.0.2",
46
49
  "rollup-plugin-svelte": "^7.1.0",
47
50
  "svelte-check": "^2.2.7",
48
51
  "svelte-preprocess": "^4.10.6",