@realsee/dnalogel 2.0.0-alpha.5 → 2.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/dnalogel.cjs.js +2 -2
  3. package/dist/dnalogel.es.js +186 -59
  4. package/dist/dnalogel.umd.js +2 -2
  5. package/dist/style.css +1 -1
  6. package/docs/.nojekyll +1 -0
  7. package/docs/assets/highlight.css +29 -0
  8. package/docs/assets/icons.css +1043 -0
  9. package/docs/assets/icons.png +0 -0
  10. package/docs/assets/icons@2x.png +0 -0
  11. package/docs/assets/main.js +52 -0
  12. package/docs/assets/search.js +1 -0
  13. package/docs/assets/style.css +1413 -0
  14. package/docs/assets/widgets.png +0 -0
  15. package/docs/assets/widgets@2x.png +0 -0
  16. package/docs/classes/ModelRoomLabelController.html +20 -0
  17. package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +1 -0
  18. package/docs/enums/ModelFloorplanErrorType.html +1 -0
  19. package/docs/index.html +10 -0
  20. package/docs/interfaces/ModelChassisCompassPluginData.html +1 -0
  21. package/docs/interfaces/ModelChassisCompassPluginExportType.html +1 -0
  22. package/docs/interfaces/ModelChassisCompassPluginParameterType.html +1 -0
  23. package/docs/interfaces/ModelEntryDoorGuidePluginData.html +1 -0
  24. package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +1 -0
  25. package/docs/interfaces/ModelFloorplanParameterType.html +1 -0
  26. package/docs/interfaces/ModelFloorplanViewEvent.html +5 -0
  27. package/docs/interfaces/ModelRoomLabelPluginData.html +1 -0
  28. package/docs/interfaces/PanoCompassPluginData.html +1 -0
  29. package/docs/interfaces/PanoCompassPluginParameterType.html +1 -0
  30. package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +11 -0
  31. package/docs/interfaces/PanoRulerPluginExportType.html +1 -0
  32. package/docs/interfaces/PanoRulerPluginOptions.html +1 -0
  33. package/docs/interfaces/PanoRulerPluginParameterType.html +1 -0
  34. package/docs/interfaces/RoomLabel.html +13 -0
  35. package/docs/interfaces/TopviewFloorplanPluginParameterType.html +1 -0
  36. package/docs/modules.html +26 -0
  37. package/libs/CSS3DRenderPlugin/index.js +1 -1
  38. package/libs/PanoCompassPlugin/Assets/roomInfoIcon.d.ts +1 -0
  39. package/libs/PanoCompassPlugin/Assets/roomInfoIcon.js +1 -0
  40. package/libs/PanoCompassPlugin/getRoomInfoInstance.d.ts +8 -0
  41. package/libs/PanoCompassPlugin/getRoomInfoInstance.js +48 -0
  42. package/libs/PanoCompassPlugin/index.d.ts +29 -3
  43. package/libs/PanoCompassPlugin/index.js +106 -36
  44. package/libs/PanoRulerPlugin/index.js +1 -0
  45. package/libs/PanoRulerPlugin/style.d.ts +1 -1
  46. package/libs/PanoRulerPlugin/style.js +1 -0
  47. package/libs/floorplan/ModelFloorplanPlugin/Components/Camera.svelte +3 -3
  48. package/libs/floorplan/ModelFloorplanPlugin/Components/Camera.svelte.map +1 -1
  49. package/libs/floorplan/ModelFloorplanPlugin/Controller.d.ts +2 -0
  50. package/libs/floorplan/ModelFloorplanPlugin/Controller.js +3 -1
  51. package/libs/floorplan/TopviewFloorplanPlugin/Controller.d.ts +2 -0
  52. package/libs/floorplan/TopviewFloorplanPlugin/Controller.js +4 -3
  53. package/libs/floorplan/constant.d.ts +5 -0
  54. package/libs/floorplan/constant.js +6 -0
  55. package/libs/floorplan/typings/floorplanServerData.d.ts +4 -0
  56. package/libs/index.d.ts +1 -0
  57. package/libs/index.js +2 -0
  58. package/libs/shared-utils/getPxmm.d.ts +6 -1
  59. package/libs/shared-utils/getPxmm.js +26 -12
  60. package/package.json +2 -1
@@ -317,7 +317,7 @@ const CSS3DRenderPlugin = (five) => {
317
317
  const rotateXAngle = new Vector3$1(0, 1, 0).angleTo(new Vector3$1(0, vector12.y, vector12.z));
318
318
  const rotateYAngle = new Vector3$1(1, 0, 0).angleTo(new Vector3$1(vector01.x, 0, vector01.z));
319
319
  const rotateZAngle = vector01.angleTo(new Vector3$1(vector01.x, 0, vector01.z));
320
- const rotateX = (vector12.z > 0 ? 1 : -1) * rotateXAngle;
320
+ const rotateX = (vector12.z > 0 ? -1 : 1) * rotateXAngle;
321
321
  const rotateY = (vector01.z < 0 ? 1 : -1) * rotateYAngle;
322
322
  const rotateZ = (vector01.x > 0 && vector01.y < 0 || vector01.x < 0 && vector01.y > 0 ? -1 : 1) * rotateZAngle;
323
323
  css3DObject.rotateOnWorldAxis(new Vector3$1(1, 0, 0), rotateX);
@@ -1476,6 +1476,12 @@ class ModelRoomLabelController {
1476
1476
  const ModelRoomLabelPlugin = (five) => {
1477
1477
  return new ModelRoomLabelController(five);
1478
1478
  };
1479
+ var FLOOR_PLAN_ATTACHED_TO = /* @__PURE__ */ ((FLOOR_PLAN_ATTACHED_TO2) => {
1480
+ FLOOR_PLAN_ATTACHED_TO2[FLOOR_PLAN_ATTACHED_TO2["FLOOR"] = 1] = "FLOOR";
1481
+ FLOOR_PLAN_ATTACHED_TO2[FLOOR_PLAN_ATTACHED_TO2["CEILING"] = 2] = "CEILING";
1482
+ FLOOR_PLAN_ATTACHED_TO2[FLOOR_PLAN_ATTACHED_TO2["BOUNDING_CENTER"] = 3] = "BOUNDING_CENTER";
1483
+ return FLOOR_PLAN_ATTACHED_TO2;
1484
+ })(FLOOR_PLAN_ATTACHED_TO || {});
1479
1485
  const pluginStyle = {
1480
1486
  position: "absolute",
1481
1487
  left: "50%",
@@ -1634,16 +1640,27 @@ function omit(object, props) {
1634
1640
  }
1635
1641
  });
1636
1642
  }
1637
- function getPxmm(five, container) {
1638
- const boundingCenter = new THREE.Vector3(0, 0, 0);
1639
- five.model.bounding.getCenter(boundingCenter);
1640
- const { y: boundingCenterY } = boundingCenter;
1641
- const { longitude } = five.getCurrentState();
1642
- const X2 = 1 / Math.abs(Math.cos(longitude));
1643
- const originPosition = new THREE.Vector3(0, boundingCenterY, 0);
1644
- const originPositionXUnit = new THREE.Vector3(X2, boundingCenterY, 0);
1645
- const mouse = originPosition.project(five.camera);
1646
- const xUnitMouse = originPositionXUnit.project(five.camera);
1643
+ function getPxmm(five, container, floorIndex, options) {
1644
+ const maxFloorIndex = Math.max(...five.work.observers.map((ob) => ob.floorIndex));
1645
+ function getFloorY(floorIndex2) {
1646
+ return floorIndex2 > maxFloorIndex ? five.model.bounding.max.y : Math.max(...five.work.observers.filter((ob) => ob.floorIndex === floorIndex2).map((ob) => ob.standingPosition.y));
1647
+ }
1648
+ function getY() {
1649
+ const currentFloorY = getFloorY(floorIndex);
1650
+ const nextFloorY = getFloorY(floorIndex + 1);
1651
+ const attachedTo = (options == null ? void 0 : options.attachedTo) || FLOOR_PLAN_ATTACHED_TO.BOUNDING_CENTER;
1652
+ if (attachedTo === FLOOR_PLAN_ATTACHED_TO.BOUNDING_CENTER)
1653
+ return (five.model.bounding.max.y + five.model.bounding.min.y) / 2;
1654
+ else if (attachedTo === FLOOR_PLAN_ATTACHED_TO.CEILING)
1655
+ return nextFloorY;
1656
+ else
1657
+ return currentFloorY;
1658
+ }
1659
+ const y2 = getY();
1660
+ const originPosition = new THREE.Vector3(0, y2, 0);
1661
+ const originPositionXUnit = new THREE.Vector3(1, y2, 0);
1662
+ const mouse = originPosition.clone().project(five.camera);
1663
+ const xUnitMouse = originPositionXUnit.clone().project(five.camera);
1647
1664
  const pxmm = Math.abs((xUnitMouse.x - mouse.x) / 1e3) * (container.getBoundingClientRect().width / 2);
1648
1665
  return pxmm;
1649
1666
  }
@@ -1659,12 +1676,15 @@ function create_fragment$k(ctx) {
1659
1676
  c() {
1660
1677
  div1 = element("div");
1661
1678
  div0 = element("div");
1662
- attr(div0, "class", "floorplan__camera-rotate svelte-1kosz2p");
1679
+ attr(div0, "class", "floorplan__camera-rotate svelte-e8a2kn");
1663
1680
  set_style(div0, "background-image", `url(${ctx[0] || CAMERA_IMAGE})`);
1664
1681
  set_style(div0, "width", ctx[4], false);
1665
1682
  set_style(div0, "height", ctx[4], false);
1683
+ set_style(div0, "left", "-" + ctx[4], false);
1684
+ set_style(div0, "top", "-" + ctx[4], false);
1666
1685
  set_style(div0, "transform", `rotate(${ctx[3]}deg)`, false);
1667
- attr(div1, "class", "floorplan__camera-position svelte-1kosz2p");
1686
+ set_style(div0, "transform-origin", `${ctx[4]} ${ctx[4]}`, false);
1687
+ attr(div1, "class", "floorplan__camera-position svelte-e8a2kn");
1668
1688
  set_style(div1, "left", ctx[1], false);
1669
1689
  set_style(div1, "top", ctx[2], false);
1670
1690
  },
@@ -4384,6 +4404,7 @@ class TopviewFloorplanPluginController {
4384
4404
  if (shownFloor === null)
4385
4405
  return;
4386
4406
  this.floorIndex = shownFloor;
4407
+ this.updateSize();
4387
4408
  this.render();
4388
4409
  });
4389
4410
  __publicField(this, "handlePanoArrived", (index) => {
@@ -4435,7 +4456,8 @@ class TopviewFloorplanPluginController {
4435
4456
  const { min, max } = this.floorplanData.bounding;
4436
4457
  const width = max.x - min.x;
4437
4458
  const height = max.y - min.y;
4438
- const pxmm = getPxmm(this.five, this.wrapper);
4459
+ const options = this.configs.attachedTo ? { attachedTo: this.configs.attachedTo } : void 0;
4460
+ const pxmm = getPxmm(this.five, this.wrapper, this.floorIndex, options);
4439
4461
  const _width = Math.ceil(width * pxmm);
4440
4462
  const _height = Math.ceil(height * pxmm);
4441
4463
  this.pxmm = pxmm;
@@ -4467,8 +4489,8 @@ class TopviewFloorplanPluginController {
4467
4489
  }
4468
4490
  show() {
4469
4491
  this.visible = true;
4470
- this.updateSize();
4471
4492
  this.five.model.show(this.floorIndex);
4493
+ this.updateSize();
4472
4494
  const renderDuration = 500;
4473
4495
  const modelOpacity = this.configs.modelOpacity;
4474
4496
  if (typeof modelOpacity === "number") {
@@ -4502,7 +4524,6 @@ class TopviewFloorplanPluginController {
4502
4524
  ruleLabelsEnable
4503
4525
  } = this.configs;
4504
4526
  const handleClick = preventRoomClick ? () => false : void 0;
4505
- console.log("\u{1F680} ~ TopviewFloorplanPluginController ~ handleClick", handleClick);
4506
4527
  const props = {
4507
4528
  five: this.five,
4508
4529
  pxmm: this.pxmm,
@@ -5482,7 +5503,8 @@ class ModelFloorplanPluginController {
5482
5503
  const { min, max } = this.floorplanData.bounding;
5483
5504
  const width = max.x - min.x;
5484
5505
  const height = max.y - min.y;
5485
- const pxmm = getPxmm(this.five, this.wrapper);
5506
+ const options = this.configs.attachedTo ? { attachedTo: this.configs.attachedTo } : void 0;
5507
+ const pxmm = getPxmm(this.five, this.wrapper, this.floorIndex, options);
5486
5508
  const _width = Math.ceil(width * pxmm);
5487
5509
  const _height = Math.ceil(height * pxmm);
5488
5510
  if (this.size.width === _width && this.size.height === _height)
@@ -5574,6 +5596,7 @@ class ModelFloorplanPluginController {
5574
5596
  if (shownFloor === null)
5575
5597
  return;
5576
5598
  this.floorIndex = shownFloor;
5599
+ this.updateSize();
5577
5600
  this.render();
5578
5601
  });
5579
5602
  __publicField(this, "handleModelLoaded", () => {
@@ -37276,6 +37299,7 @@ const PanoRulerStyle = `<style type="text/css">
37276
37299
  padding: 0.1875rem 0.375rem;
37277
37300
  background: rgba(195,195,195,0.30);
37278
37301
  backdrop-filter: blur(0.25rem);
37302
+ -webkit-backdrop-filter: blur(0.25rem);
37279
37303
  border-radius: 6.25rem;
37280
37304
  border: 0.0625rem solid rgba(255,255,255,0.6);
37281
37305
  white-space: nowrap;
@@ -37617,6 +37641,7 @@ const PanoRulerPlugin = (five, params) => {
37617
37641
  if (labelWidth >= distance || labelWidth / 2 >= labelOffset / 100 * distance || labelWidth / 2 >= (1 - labelOffset / 100) * distance) {
37618
37642
  $line.style.display = "none";
37619
37643
  } else {
37644
+ $line.style.display = "block";
37620
37645
  $line.style.width = distance + "px";
37621
37646
  $line.style.left = startLeft + "px";
37622
37647
  $line.style.top = startTop + "px";
@@ -37667,6 +37692,51 @@ const PanoRulerPlugin = (five, params) => {
37667
37692
  state
37668
37693
  };
37669
37694
  };
37695
+ const roomInfoIcon = "data:image/png;base64,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";
37696
+ function getRoomInfoInstance() {
37697
+ const infoDom = document.createElement("div");
37698
+ const iconDom = document.createElement("i");
37699
+ const textDom = document.createElement("span");
37700
+ infoDom.appendChild(iconDom);
37701
+ infoDom.appendChild(textDom);
37702
+ infoDom.style.position = "relative";
37703
+ infoDom.style.width = "100%";
37704
+ infoDom.style.display = "flex";
37705
+ infoDom.style.flexDirection = "column";
37706
+ infoDom.style.alignItems = "center";
37707
+ infoDom.style.marginTop = `${150 / 16}rem`;
37708
+ infoDom.style.opacity = "0";
37709
+ infoDom.style.transition = "opacity 1000ms linear";
37710
+ iconDom.style.display = "block";
37711
+ iconDom.style.width = `${134 / 16}rem`;
37712
+ iconDom.style.height = `${22 / 16}rem`;
37713
+ iconDom.style.backgroundSize = "100%";
37714
+ iconDom.style.backgroundRepeat = "no-repeat";
37715
+ iconDom.style.backgroundImage = `url(${roomInfoIcon})`;
37716
+ textDom.style.marginTop = `${10 / 16}rem`;
37717
+ textDom.style.fontSize = `${16 / 16}rem`;
37718
+ textDom.style.color = "#fff";
37719
+ textDom.style.opacity = "0.7";
37720
+ textDom.style.textShadow = "0 2px 16px rgb(22 34 83 / 24%)";
37721
+ textDom.style.fontWeight = "bold";
37722
+ return {
37723
+ appendTo(element2) {
37724
+ element2.appendChild(infoDom);
37725
+ },
37726
+ dispose() {
37727
+ infoDom.remove();
37728
+ },
37729
+ setRoom(room) {
37730
+ textDom.innerHTML = room.name + " " + Math.floor(room.size / 1e6) + "\u33A1";
37731
+ },
37732
+ show() {
37733
+ infoDom.style.opacity = "1";
37734
+ },
37735
+ hide() {
37736
+ infoDom.style.opacity = "0";
37737
+ }
37738
+ };
37739
+ }
37670
37740
  const textureLoader = new THREE.TextureLoader();
37671
37741
  async function loadTexture(url) {
37672
37742
  return new Promise((resolve, reject) => {
@@ -37716,33 +37786,26 @@ class PanoCompassController {
37716
37786
  __publicField(this, "five");
37717
37787
  __publicField(this, "data");
37718
37788
  __publicField(this, "config");
37789
+ __publicField(this, "group", new THREE.Group());
37790
+ __publicField(this, "modelLoaded", false);
37791
+ __publicField(this, "roomInfoInstance");
37792
+ __publicField(this, "roomInfoWrapperInstance");
37719
37793
  __publicField(this, "compassMeshTween");
37720
37794
  __publicField(this, "compassMesh");
37795
+ __publicField(this, "entryDoorMesh");
37721
37796
  __publicField(this, "dispose", () => {
37797
+ var _a, _b, _c, _d;
37798
+ this.five.scene.remove(this.group);
37799
+ this.group.remove(...this.group.children);
37800
+ (_b = (_a = this.compassMesh) == null ? void 0 : _a.material.map) == null ? void 0 : _b.dispose();
37801
+ (_d = (_c = this.entryDoorMesh) == null ? void 0 : _c.material.map) == null ? void 0 : _d.dispose();
37722
37802
  this.five.off("panoArrived", this.onFivePanoArrived);
37723
37803
  this.five.off("panoWillArrive", this.onFivePanoWillArrive);
37724
- this.five.off();
37725
37804
  });
37726
- __publicField(this, "loadCompassMesh", async () => {
37727
- var _a;
37728
- const compassImageUrl = ((_a = this.config) == null ? void 0 : _a.compassImageUrl) || "//vrlab-image4.ljcdn.com/release/web/v3/north-point-circle.96498e69.png";
37729
- const texture = await loadTexture(compassImageUrl);
37730
- const compassGeometry = new THREE.CircleGeometry(0.7, 32);
37731
- const compassMaterial = new THREE.MeshBasicMaterial({
37732
- map: texture,
37733
- transparent: true,
37734
- opacity: 1,
37735
- depthTest: false
37736
- });
37737
- const compassMesh = new THREE.Mesh(compassGeometry, compassMaterial);
37738
- compassMesh.rotateX(-Math.PI / 2);
37739
- compassMesh.name = "pano-compass-mesh";
37740
- this.compassMesh = compassMesh;
37741
- this.fixPosition(this.five.panoIndex || 0);
37742
- if (!this.data)
37743
- return;
37744
- this.fixRotation(this.data.north_rad);
37745
- this.five.scene.add(compassMesh);
37805
+ __publicField(this, "onFiveFistPanoLoaded", () => {
37806
+ this.modelLoaded = true;
37807
+ if (this.data)
37808
+ this.init();
37746
37809
  });
37747
37810
  __publicField(this, "onFivePanoWillArrive", (panoIndex) => {
37748
37811
  var _a, _b;
@@ -37752,45 +37815,109 @@ class PanoCompassController {
37752
37815
  (_b = this.compassMesh) == null ? void 0 : _b.material.setValues({ opacity: 0 });
37753
37816
  });
37754
37817
  __publicField(this, "onFivePanoArrived", (panoIndex) => {
37755
- var _a, _b;
37756
- if (((_a = this.compassMesh) == null ? void 0 : _a.material.opacity) !== 0)
37818
+ var _a, _b, _c, _d;
37819
+ if (!this.compassMesh || !this.entryDoorMesh || !this.roomInfoInstance || !this.roomInfoWrapperInstance)
37820
+ return;
37821
+ if (!this.data)
37757
37822
  return;
37758
- this.fixPosition(panoIndex);
37759
- (_b = this.compassMeshTween) == null ? void 0 : _b.dispose();
37823
+ const standingPosition = this.five.work.observers[panoIndex].standingPosition;
37824
+ this.compassMesh.position.copy(standingPosition.clone().setY(standingPosition.y + 0.01));
37825
+ const entryDoorPosition = new THREE.Vector3(this.data.entrance.position.x, this.data.entrance.position.y, this.data.entrance.position.z);
37826
+ const panoToEntryDoorVector = entryDoorPosition.clone().setY(standingPosition.y).sub(standingPosition).normalize();
37827
+ const compassEntryDoorPosition = standingPosition.clone().add(panoToEntryDoorVector.clone().multiplyScalar(0.7)).setY(standingPosition.y + 0.01);
37828
+ this.entryDoorMesh.rotation.z = new THREE.Vector3(0, 0, -1).angleTo(panoToEntryDoorVector);
37829
+ this.entryDoorMesh.position.copy(compassEntryDoorPosition);
37830
+ this.roomInfoWrapperInstance.css3DObject.position.copy(standingPosition.clone().setY(standingPosition.y + 0.01));
37831
+ this.roomInfoInstance.setRoom(this.data.room_observers[panoIndex].room);
37832
+ ((_a = this.data) == null ? void 0 : _a.room_observers[panoIndex].room.type) === 1 ? (_b = this.entryDoorMesh) == null ? void 0 : _b.material.setValues({ opacity: 1 }) : (_c = this.entryDoorMesh) == null ? void 0 : _c.material.setValues({ opacity: 0 });
37833
+ this.five.needsRender = true;
37834
+ if (this.compassMesh.material.opacity !== 0)
37835
+ return;
37836
+ (_d = this.compassMeshTween) == null ? void 0 : _d.dispose();
37760
37837
  this.compassMeshTween = tweenProgress(1e3).onUpdate(({ progress }) => {
37761
37838
  var _a2;
37762
37839
  (_a2 = this.compassMesh) == null ? void 0 : _a2.material.setValues({ opacity: progress });
37763
37840
  this.five.needsRender = true;
37764
37841
  }).play();
37765
37842
  });
37843
+ __publicField(this, "onFiveCameraDirectionUpdate", ({ longitude, latitude }) => {
37844
+ var _a, _b;
37845
+ if (!this.roomInfoWrapperInstance)
37846
+ return;
37847
+ this.roomInfoWrapperInstance.css3DObject.rotation.z = longitude;
37848
+ latitude > 0.66 && this.five.getCurrentState().mode === "Panorama" ? (_a = this.roomInfoInstance) == null ? void 0 : _a.show() : (_b = this.roomInfoInstance) == null ? void 0 : _b.hide();
37849
+ });
37766
37850
  this.five = five;
37767
37851
  this.config = config;
37768
- five.once("panoLoaded", this.loadCompassMesh);
37852
+ this.five.scene.add(this.group);
37769
37853
  five.once("dispose", this.dispose);
37854
+ five.once("modelLoaded", this.onFiveFistPanoLoaded);
37770
37855
  this.five.on("panoArrived", this.onFivePanoArrived);
37771
37856
  this.five.on("panoWillArrive", this.onFivePanoWillArrive);
37857
+ this.five.on("cameraDirectionUpdate", this.onFiveCameraDirectionUpdate);
37772
37858
  }
37773
37859
  load(data) {
37774
37860
  this.data = data;
37775
- if (this.compassMesh && !this.five.scene.children.includes(this.compassMesh)) {
37776
- this.fixRotation(data.north_rad);
37777
- this.fixPosition(this.five.panoIndex || 0);
37778
- this.five.scene.add(this.compassMesh);
37779
- }
37861
+ if (this.modelLoaded)
37862
+ this.init();
37780
37863
  }
37781
- fixPosition(panoIndex) {
37782
- if (!this.compassMesh)
37783
- return;
37784
- const standingPosition = this.five.work.observers[panoIndex].standingPosition;
37785
- const compassPosition = standingPosition.clone().add(new THREE.Vector3(0, 0.01, 0));
37786
- this.compassMesh.position.copy(compassPosition);
37787
- this.five.needsRender = true;
37788
- }
37789
- fixRotation(northRad) {
37790
- if (!this.compassMesh)
37864
+ async init() {
37865
+ if (!this.data || !this.modelLoaded)
37791
37866
  return;
37867
+ this.compassMesh = await this.loadCompassMesh();
37868
+ this.entryDoorMesh = await this.loadEntryDoorMesh();
37869
+ this.roomInfoWrapperInstance = this.loadRoomInfo();
37870
+ this.roomInfoInstance = getRoomInfoInstance();
37871
+ this.compassMesh.rotateX(-Math.PI / 2);
37872
+ this.entryDoorMesh.rotateX(-Math.PI / 2);
37873
+ const northRad = this.data.entrance.north_rad;
37792
37874
  this.compassMesh.rotateZ(northRad - Math.PI / 2);
37875
+ this.onFivePanoArrived(this.five.panoIndex || 0);
37876
+ this.group.add(this.compassMesh);
37877
+ this.group.add(this.entryDoorMesh);
37878
+ if (this.roomInfoWrapperInstance)
37879
+ this.roomInfoInstance.appendTo(this.roomInfoWrapperInstance.container);
37793
37880
  this.five.needsRender = true;
37794
37881
  }
37882
+ async loadCompassMesh() {
37883
+ var _a;
37884
+ const compassImageUrl = ((_a = this.config) == null ? void 0 : _a.compassImageUrl) || "//vrlab-image4.ljcdn.com/release/web/v3/north-point-circle.96498e69.png";
37885
+ const compassTexture = await loadTexture(compassImageUrl);
37886
+ const compassGeometry = new THREE.CircleGeometry(0.7, 32);
37887
+ const compassMaterial = new THREE.MeshBasicMaterial({
37888
+ map: compassTexture,
37889
+ transparent: true,
37890
+ opacity: 0,
37891
+ depthTest: false
37892
+ });
37893
+ const compassMesh = new THREE.Mesh(compassGeometry, compassMaterial);
37894
+ compassMesh.name = "pano-compass-mesh";
37895
+ return compassMesh;
37896
+ }
37897
+ async loadEntryDoorMesh() {
37898
+ var _a;
37899
+ const entryDoorImageUrl = ((_a = this.config) == null ? void 0 : _a.entryDoorImageUrl) || "//vrlab-image4.ljcdn.com/release/web/enterDoor.831b8208.png";
37900
+ const entryDoorTexture = await loadTexture(entryDoorImageUrl);
37901
+ const entryDoorGeometry = new THREE.PlaneGeometry(0.2, 0.16);
37902
+ const entryDoorMaterial = new THREE.MeshBasicMaterial({
37903
+ map: entryDoorTexture,
37904
+ transparent: true,
37905
+ opacity: 0.8,
37906
+ depthTest: false
37907
+ });
37908
+ const entryDoorMesh = new THREE.Mesh(entryDoorGeometry, entryDoorMaterial);
37909
+ entryDoorMesh.name = "pano-compass-entry-door";
37910
+ return entryDoorMesh;
37911
+ }
37912
+ loadRoomInfo() {
37913
+ const points = [
37914
+ new THREE.Vector3(-0.7, 0, -0.7),
37915
+ new THREE.Vector3(0.7, 0, -0.7),
37916
+ new THREE.Vector3(0.7, 0, 0.7),
37917
+ new THREE.Vector3(-0.7, 0, 0.7)
37918
+ ];
37919
+ const roomInfo = CSS3DRenderPlugin(this.five).create3DDomContainer(points);
37920
+ return roomInfo;
37921
+ }
37795
37922
  }
37796
- export { CSS3DRenderPlugin, CameraMovementPlugin, ModelChassisCompassPlugin, ModelEntryDoorGuidePlugin, ModelFloorplanPlugin, ModelRoomLabelPlugin, ModelViewPlugin, PanoCompassPlugin, PanoCursorRaycasterPlugin, PanoFloorplanRadarPlugin, PanoRulerPlugin, TopviewFloorplanPlugin };
37923
+ export { CSS3DRenderPlugin, CameraMovementPlugin, FLOOR_PLAN_ATTACHED_TO, ModelChassisCompassPlugin, ModelEntryDoorGuidePlugin, ModelFloorplanPlugin, ModelRoomLabelPlugin, ModelViewPlugin, PanoCompassPlugin, PanoCursorRaycasterPlugin, PanoFloorplanRadarPlugin, PanoRulerPlugin, TopviewFloorplanPlugin };