@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.
- package/CHANGELOG.md +6 -0
- package/dist/dnalogel.cjs.js +2 -2
- package/dist/dnalogel.es.js +186 -59
- package/dist/dnalogel.umd.js +2 -2
- package/dist/style.css +1 -1
- package/docs/.nojekyll +1 -0
- package/docs/assets/highlight.css +29 -0
- package/docs/assets/icons.css +1043 -0
- package/docs/assets/icons.png +0 -0
- package/docs/assets/icons@2x.png +0 -0
- package/docs/assets/main.js +52 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1413 -0
- package/docs/assets/widgets.png +0 -0
- package/docs/assets/widgets@2x.png +0 -0
- package/docs/classes/ModelRoomLabelController.html +20 -0
- package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +1 -0
- package/docs/enums/ModelFloorplanErrorType.html +1 -0
- package/docs/index.html +10 -0
- package/docs/interfaces/ModelChassisCompassPluginData.html +1 -0
- package/docs/interfaces/ModelChassisCompassPluginExportType.html +1 -0
- package/docs/interfaces/ModelChassisCompassPluginParameterType.html +1 -0
- package/docs/interfaces/ModelEntryDoorGuidePluginData.html +1 -0
- package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +1 -0
- package/docs/interfaces/ModelFloorplanParameterType.html +1 -0
- package/docs/interfaces/ModelFloorplanViewEvent.html +5 -0
- package/docs/interfaces/ModelRoomLabelPluginData.html +1 -0
- package/docs/interfaces/PanoCompassPluginData.html +1 -0
- package/docs/interfaces/PanoCompassPluginParameterType.html +1 -0
- package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +11 -0
- package/docs/interfaces/PanoRulerPluginExportType.html +1 -0
- package/docs/interfaces/PanoRulerPluginOptions.html +1 -0
- package/docs/interfaces/PanoRulerPluginParameterType.html +1 -0
- package/docs/interfaces/RoomLabel.html +13 -0
- package/docs/interfaces/TopviewFloorplanPluginParameterType.html +1 -0
- package/docs/modules.html +26 -0
- package/libs/CSS3DRenderPlugin/index.js +1 -1
- package/libs/PanoCompassPlugin/Assets/roomInfoIcon.d.ts +1 -0
- package/libs/PanoCompassPlugin/Assets/roomInfoIcon.js +1 -0
- package/libs/PanoCompassPlugin/getRoomInfoInstance.d.ts +8 -0
- package/libs/PanoCompassPlugin/getRoomInfoInstance.js +48 -0
- package/libs/PanoCompassPlugin/index.d.ts +29 -3
- package/libs/PanoCompassPlugin/index.js +106 -36
- package/libs/PanoRulerPlugin/index.js +1 -0
- package/libs/PanoRulerPlugin/style.d.ts +1 -1
- package/libs/PanoRulerPlugin/style.js +1 -0
- package/libs/floorplan/ModelFloorplanPlugin/Components/Camera.svelte +3 -3
- package/libs/floorplan/ModelFloorplanPlugin/Components/Camera.svelte.map +1 -1
- package/libs/floorplan/ModelFloorplanPlugin/Controller.d.ts +2 -0
- package/libs/floorplan/ModelFloorplanPlugin/Controller.js +3 -1
- package/libs/floorplan/TopviewFloorplanPlugin/Controller.d.ts +2 -0
- package/libs/floorplan/TopviewFloorplanPlugin/Controller.js +4 -3
- package/libs/floorplan/constant.d.ts +5 -0
- package/libs/floorplan/constant.js +6 -0
- package/libs/floorplan/typings/floorplanServerData.d.ts +4 -0
- package/libs/index.d.ts +1 -0
- package/libs/index.js +2 -0
- package/libs/shared-utils/getPxmm.d.ts +6 -1
- package/libs/shared-utils/getPxmm.js +26 -12
- package/package.json +2 -1
package/dist/dnalogel.es.js
CHANGED
|
@@ -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 :
|
|
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
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
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-
|
|
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
|
-
|
|
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
|
|
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
|
|
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, "
|
|
37727
|
-
|
|
37728
|
-
|
|
37729
|
-
|
|
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 (
|
|
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.
|
|
37759
|
-
|
|
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.
|
|
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.
|
|
37776
|
-
this.
|
|
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
|
-
|
|
37782
|
-
if (!this.
|
|
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 };
|