@realsee/dnalogel 2.0.0-alpha.5 → 2.0.0-alpha.8
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 +17 -0
- package/README.md +44 -5
- package/dist/dnalogel.cjs.js +7 -2
- package/dist/dnalogel.es.js +3675 -191
- package/dist/dnalogel.umd.js +7 -2
- package/dist/style.css +1 -1
- package/docs/.nojekyll +1 -0
- package/docs/assets/highlight.css +78 -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 +43 -0
- package/docs/interfaces/LineJson.html +1 -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/PointJson.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/ModelEntryDoorGuidePlugin/index.js +1 -0
- package/libs/ModelViewPlugin/index.js +6 -6
- 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 +126 -44
- package/libs/PanoMeasurePlugin/Controller/BaseController.d.ts +36 -0
- package/libs/PanoMeasurePlugin/Controller/BaseController.js +69 -0
- package/libs/PanoMeasurePlugin/Controller/EditController.d.ts +52 -0
- package/libs/PanoMeasurePlugin/Controller/EditController.js +216 -0
- package/libs/PanoMeasurePlugin/Controller/ShortcutKeyController.d.ts +12 -0
- package/libs/PanoMeasurePlugin/Controller/ShortcutKeyController.js +44 -0
- package/libs/PanoMeasurePlugin/Controller/WatchController.d.ts +25 -0
- package/libs/PanoMeasurePlugin/Controller/WatchController.js +223 -0
- package/libs/PanoMeasurePlugin/Controller/index.d.ts +61 -0
- package/libs/PanoMeasurePlugin/Controller/index.js +176 -0
- package/libs/PanoMeasurePlugin/Model/index.d.ts +38 -0
- package/libs/PanoMeasurePlugin/Model/index.js +114 -0
- package/libs/PanoMeasurePlugin/Model/line.d.ts +30 -0
- package/libs/PanoMeasurePlugin/Model/line.js +64 -0
- package/libs/PanoMeasurePlugin/Model/point.d.ts +16 -0
- package/libs/PanoMeasurePlugin/Model/point.js +28 -0
- package/libs/PanoMeasurePlugin/Model/polyline.d.ts +16 -0
- package/libs/PanoMeasurePlugin/Model/polyline.js +48 -0
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.d.ts +2 -0
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete.svg.js +15 -0
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.d.ts +2 -0
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_bg.png.js +2 -0
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.d.ts +2 -0
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/_Assets/delete_hover_bg.png.js +2 -0
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/index.d.ts +22 -0
- package/libs/PanoMeasurePlugin/Modules/DeleteDom/index.js +108 -0
- package/libs/PanoMeasurePlugin/Modules/FiveHelper.d.ts +11 -0
- package/libs/PanoMeasurePlugin/Modules/FiveHelper.js +33 -0
- package/libs/PanoMeasurePlugin/Modules/GuideController.d.ts +18 -0
- package/libs/PanoMeasurePlugin/Modules/GuideController.js +75 -0
- package/libs/PanoMeasurePlugin/Modules/Magnifier.d.ts +24 -0
- package/libs/PanoMeasurePlugin/Modules/Magnifier.js +103 -0
- package/libs/PanoMeasurePlugin/Modules/UIController/HTML.d.ts +6 -0
- package/libs/PanoMeasurePlugin/Modules/UIController/HTML.js +117 -0
- package/libs/PanoMeasurePlugin/Modules/UIController/MainBtnController.d.ts +18 -0
- package/libs/PanoMeasurePlugin/Modules/UIController/MainBtnController.js +102 -0
- package/libs/PanoMeasurePlugin/Modules/UIController/Revoke/index.d.ts +12 -0
- package/libs/PanoMeasurePlugin/Modules/UIController/Revoke/index.js +35 -0
- package/libs/PanoMeasurePlugin/Modules/UIController/index.d.ts +16 -0
- package/libs/PanoMeasurePlugin/Modules/UIController/index.js +69 -0
- package/libs/PanoMeasurePlugin/Modules/UIController/style.d.ts +17 -0
- package/libs/PanoMeasurePlugin/Modules/UIController/style.js +78 -0
- package/libs/PanoMeasurePlugin/index.d.ts +7 -0
- package/libs/PanoMeasurePlugin/index.js +5 -0
- package/libs/PanoMeasurePlugin/typings/data.d.ts +28 -0
- package/libs/PanoMeasurePlugin/typings/data.js +1 -0
- package/libs/PanoMeasurePlugin/typings/event.type.d.ts +28 -0
- package/libs/PanoMeasurePlugin/typings/event.type.js +1 -0
- package/libs/PanoMeasurePlugin/typings/utils.type.d.ts +1 -0
- package/libs/PanoMeasurePlugin/typings/utils.type.js +1 -0
- package/libs/PanoMeasurePlugin/utils/clearGroup.d.ts +2 -0
- package/libs/PanoMeasurePlugin/utils/clearGroup.js +3 -0
- package/libs/PanoMeasurePlugin/utils/constants.d.ts +4 -0
- package/libs/PanoMeasurePlugin/utils/constants.js +31 -0
- package/libs/PanoMeasurePlugin/utils/distanceDom.d.ts +28 -0
- package/libs/PanoMeasurePlugin/utils/distanceDom.js +114 -0
- package/libs/PanoMeasurePlugin/utils/findAssociatedLines.d.ts +2 -0
- package/libs/PanoMeasurePlugin/utils/findAssociatedLines.js +21 -0
- package/libs/PanoMeasurePlugin/utils/findClosestPoint.d.ts +10 -0
- package/libs/PanoMeasurePlugin/utils/findClosestPoint.js +27 -0
- package/libs/PanoMeasurePlugin/utils/getIntersectionFromEvent.d.ts +4 -0
- package/libs/PanoMeasurePlugin/utils/getIntersectionFromEvent.js +9 -0
- package/libs/PanoMeasurePlugin/utils/getPointFromHammerEvent.d.ts +10 -0
- package/libs/PanoMeasurePlugin/utils/getPointFromHammerEvent.js +14 -0
- package/libs/PanoMeasurePlugin/utils/ironbox.d.ts +1 -0
- package/libs/PanoMeasurePlugin/utils/ironbox.js +1 -0
- package/libs/PanoMeasurePlugin/utils/isNDCPointInScreen.d.ts +2 -0
- package/libs/PanoMeasurePlugin/utils/isNDCPointInScreen.js +6 -0
- package/libs/PanoMeasurePlugin/utils/line.d.ts +17 -0
- package/libs/PanoMeasurePlugin/utils/line.js +32 -0
- package/libs/PanoMeasurePlugin/utils/math.d.ts +17 -0
- package/libs/PanoMeasurePlugin/utils/math.js +44 -0
- package/libs/PanoMeasurePlugin/utils/mouseGroup.d.ts +2 -0
- package/libs/PanoMeasurePlugin/utils/mouseGroup.js +21 -0
- package/libs/PanoMeasurePlugin/utils/ndc2Screen.d.ts +5 -0
- package/libs/PanoMeasurePlugin/utils/ndc2Screen.js +6 -0
- 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 -2
- 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 +3 -0
- package/libs/index.js +3 -0
- package/libs/shared-utils/getPxmm.d.ts +6 -1
- package/libs/shared-utils/getPxmm.js +26 -12
- package/package.json +4 -3
package/dist/dnalogel.es.js
CHANGED
|
@@ -22,12 +22,13 @@ var __publicField = (obj, key, value) => {
|
|
|
22
22
|
return value;
|
|
23
23
|
};
|
|
24
24
|
import * as THREE from "three";
|
|
25
|
-
import { Vector3 as Vector3$1, Scene as Scene$1, Group as Group$2, Raycaster as Raycaster$1, Vector2 as Vector2$1, MeshBasicMaterial as MeshBasicMaterial$1, CanvasTexture as CanvasTexture$1, AnimationMixer as AnimationMixer$1 } from "three";
|
|
25
|
+
import { Vector3 as Vector3$1, Scene as Scene$1, Group as Group$2, Raycaster as Raycaster$1, Vector2 as Vector2$1, MeshBasicMaterial as MeshBasicMaterial$1, CanvasTexture as CanvasTexture$1, AnimationMixer as AnimationMixer$1, Color as Color$1, TextureLoader as TextureLoader$1, PlaneGeometry as PlaneGeometry$1, sRGBEncoding as sRGBEncoding$1, Mesh as Mesh$1, CurvePath as CurvePath$1, LineCurve3 as LineCurve3$1, TubeGeometry as TubeGeometry$1, DoubleSide as DoubleSide$1, SphereGeometry as SphereGeometry$1 } from "three";
|
|
26
26
|
import { CSS3DRenderer, CSS3DObject } from "three/examples/jsm/renderers/CSS3DRenderer";
|
|
27
|
-
import { Line as Line$
|
|
27
|
+
import { Line as Line$2 } from "@realsee/five/line";
|
|
28
28
|
import { Five, Subscribe } from "@realsee/five";
|
|
29
29
|
const ModelViewPlugin = (five) => {
|
|
30
30
|
let needsRender = true;
|
|
31
|
+
let renderer = null;
|
|
31
32
|
const scene = new THREE.Scene();
|
|
32
33
|
const camera = new THREE.PerspectiveCamera(60, 1, 0.1, 1e3);
|
|
33
34
|
let model = new THREE.Object3D();
|
|
@@ -45,7 +46,6 @@ const ModelViewPlugin = (five) => {
|
|
|
45
46
|
scene.add(light);
|
|
46
47
|
}
|
|
47
48
|
scene.add(model);
|
|
48
|
-
let renderer = null;
|
|
49
49
|
const initRendererIfNeeds = () => {
|
|
50
50
|
if (!five.renderer)
|
|
51
51
|
return;
|
|
@@ -58,7 +58,7 @@ const ModelViewPlugin = (five) => {
|
|
|
58
58
|
}
|
|
59
59
|
return renderer;
|
|
60
60
|
};
|
|
61
|
-
const
|
|
61
|
+
const handleModelWillLoad = () => {
|
|
62
62
|
model.traverse((object) => {
|
|
63
63
|
if (object instanceof THREE.Mesh) {
|
|
64
64
|
const materials = [].concat(object.material);
|
|
@@ -70,7 +70,7 @@ const ModelViewPlugin = (five) => {
|
|
|
70
70
|
scene.add(model);
|
|
71
71
|
update2();
|
|
72
72
|
};
|
|
73
|
-
const
|
|
73
|
+
const handleModelLoaded = () => {
|
|
74
74
|
function cloneMaterial(material) {
|
|
75
75
|
material = material.clone();
|
|
76
76
|
material.uniforms.modelAlpha.value = 1;
|
|
@@ -120,7 +120,7 @@ const ModelViewPlugin = (five) => {
|
|
|
120
120
|
camera.aspect = width / height;
|
|
121
121
|
camera.updateProjectionMatrix();
|
|
122
122
|
}
|
|
123
|
-
|
|
123
|
+
update2();
|
|
124
124
|
};
|
|
125
125
|
const cameraDistance = () => {
|
|
126
126
|
const bounding = five.model.bounding;
|
|
@@ -162,8 +162,8 @@ const ModelViewPlugin = (five) => {
|
|
|
162
162
|
renderer.dispose();
|
|
163
163
|
renderer = null;
|
|
164
164
|
};
|
|
165
|
-
five.on("modelLoaded",
|
|
166
|
-
five.on("modelWillLoad",
|
|
165
|
+
five.on("modelLoaded", handleModelLoaded);
|
|
166
|
+
five.on("modelWillLoad", handleModelWillLoad);
|
|
167
167
|
five.on("cameraDirectionUpdate", update2);
|
|
168
168
|
five.on("dispose", dispose);
|
|
169
169
|
five.on("renderFrame", render);
|
|
@@ -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);
|
|
@@ -349,7 +349,7 @@ const CSS3DRenderPlugin = (five) => {
|
|
|
349
349
|
};
|
|
350
350
|
};
|
|
351
351
|
function createLine(point1, point2, color = new Vector3$1(1, 1, 1), dashed = false) {
|
|
352
|
-
const line = new Line$
|
|
352
|
+
const line = new Line$2(point1, point2);
|
|
353
353
|
line.setMaterial({ dashed, color, linewidth: 1 });
|
|
354
354
|
line.remove(line.points);
|
|
355
355
|
return line;
|
|
@@ -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
|
},
|
|
@@ -3213,7 +3233,7 @@ function create_if_block$4(ctx) {
|
|
|
3213
3233
|
};
|
|
3214
3234
|
}
|
|
3215
3235
|
function create_each_block$2(ctx) {
|
|
3216
|
-
let
|
|
3236
|
+
let svg2;
|
|
3217
3237
|
let current_block_type_index;
|
|
3218
3238
|
let if_block;
|
|
3219
3239
|
let current;
|
|
@@ -3230,13 +3250,13 @@ function create_each_block$2(ctx) {
|
|
|
3230
3250
|
if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
|
|
3231
3251
|
return {
|
|
3232
3252
|
c() {
|
|
3233
|
-
|
|
3253
|
+
svg2 = svg_element("svg");
|
|
3234
3254
|
if_block.c();
|
|
3235
|
-
attr(
|
|
3255
|
+
attr(svg2, "class", "svelte-1b0icjc");
|
|
3236
3256
|
},
|
|
3237
3257
|
m(target, anchor) {
|
|
3238
|
-
insert(target,
|
|
3239
|
-
if_blocks[current_block_type_index].m(
|
|
3258
|
+
insert(target, svg2, anchor);
|
|
3259
|
+
if_blocks[current_block_type_index].m(svg2, null);
|
|
3240
3260
|
current = true;
|
|
3241
3261
|
},
|
|
3242
3262
|
p(ctx2, dirty) {
|
|
@@ -3258,7 +3278,7 @@ function create_each_block$2(ctx) {
|
|
|
3258
3278
|
if_block.p(ctx2, dirty);
|
|
3259
3279
|
}
|
|
3260
3280
|
transition_in(if_block, 1);
|
|
3261
|
-
if_block.m(
|
|
3281
|
+
if_block.m(svg2, null);
|
|
3262
3282
|
}
|
|
3263
3283
|
},
|
|
3264
3284
|
i(local) {
|
|
@@ -3273,7 +3293,7 @@ function create_each_block$2(ctx) {
|
|
|
3273
3293
|
},
|
|
3274
3294
|
d(detaching) {
|
|
3275
3295
|
if (detaching)
|
|
3276
|
-
detach(
|
|
3296
|
+
detach(svg2);
|
|
3277
3297
|
if_blocks[current_block_type_index].d();
|
|
3278
3298
|
}
|
|
3279
3299
|
};
|
|
@@ -3489,7 +3509,7 @@ function create_each_block$1(key_1, ctx) {
|
|
|
3489
3509
|
}
|
|
3490
3510
|
function create_fragment$6(ctx) {
|
|
3491
3511
|
let div;
|
|
3492
|
-
let
|
|
3512
|
+
let svg2;
|
|
3493
3513
|
let each_blocks = [];
|
|
3494
3514
|
let each_1_lookup = /* @__PURE__ */ new Map();
|
|
3495
3515
|
let div_resize_listener;
|
|
@@ -3506,19 +3526,19 @@ function create_fragment$6(ctx) {
|
|
|
3506
3526
|
return {
|
|
3507
3527
|
c() {
|
|
3508
3528
|
div = element("div");
|
|
3509
|
-
|
|
3529
|
+
svg2 = svg_element("svg");
|
|
3510
3530
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
3511
3531
|
each_blocks[i].c();
|
|
3512
3532
|
}
|
|
3513
|
-
attr(
|
|
3533
|
+
attr(svg2, "class", "svelte-1aais5l");
|
|
3514
3534
|
attr(div, "class", "floorplan-plugin__room-highlight svelte-1aais5l");
|
|
3515
3535
|
add_render_callback(() => ctx[10].call(div));
|
|
3516
3536
|
},
|
|
3517
3537
|
m(target, anchor) {
|
|
3518
3538
|
insert(target, div, anchor);
|
|
3519
|
-
append(div,
|
|
3539
|
+
append(div, svg2);
|
|
3520
3540
|
for (let i = 0; i < each_blocks.length; i += 1) {
|
|
3521
|
-
each_blocks[i].m(
|
|
3541
|
+
each_blocks[i].m(svg2, null);
|
|
3522
3542
|
}
|
|
3523
3543
|
ctx[9](div);
|
|
3524
3544
|
div_resize_listener = add_resize_listener(div, ctx[10].bind(div));
|
|
@@ -3532,7 +3552,7 @@ function create_fragment$6(ctx) {
|
|
|
3532
3552
|
if (dirty & 7) {
|
|
3533
3553
|
each_value = ctx2[2].floorDatas[ctx2[1]].rooms;
|
|
3534
3554
|
group_outros();
|
|
3535
|
-
each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx2, each_value, each_1_lookup,
|
|
3555
|
+
each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx2, each_value, each_1_lookup, svg2, outro_and_destroy_block, create_each_block$1, null, get_each_context$1);
|
|
3536
3556
|
check_outros();
|
|
3537
3557
|
}
|
|
3538
3558
|
},
|
|
@@ -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", () => {
|
|
@@ -5672,7 +5695,6 @@ class ModelFloorplanPluginController {
|
|
|
5672
5695
|
this.five.model.loaded ? this.handleModelLoaded() : five.once("modelLoaded", this.handleModelLoaded);
|
|
5673
5696
|
five.once("dispose", this.dispose);
|
|
5674
5697
|
five.on("modeChange", this.handleModeChange);
|
|
5675
|
-
five.on("panGesture", this.handlePanGesture);
|
|
5676
5698
|
five.on("panoArrived", this.handlePanoArrived);
|
|
5677
5699
|
five.on("wantsChangeMode", this.handleWantsChangeMode);
|
|
5678
5700
|
five.on("wantsInteriaPan", this.handleWantsInteriaPan);
|
|
@@ -5993,8 +6015,8 @@ var MathUtils = {
|
|
|
5993
6015
|
var d1 = Math.random() * 4294967295 | 0;
|
|
5994
6016
|
var d2 = Math.random() * 4294967295 | 0;
|
|
5995
6017
|
var d3 = Math.random() * 4294967295 | 0;
|
|
5996
|
-
var
|
|
5997
|
-
return
|
|
6018
|
+
var uuid2 = _lut[d0 & 255] + _lut[d0 >> 8 & 255] + _lut[d0 >> 16 & 255] + _lut[d0 >> 24 & 255] + "-" + _lut[d1 & 255] + _lut[d1 >> 8 & 255] + "-" + _lut[d1 >> 16 & 15 | 64] + _lut[d1 >> 24 & 255] + "-" + _lut[d2 & 63 | 128] + _lut[d2 >> 8 & 255] + "-" + _lut[d2 >> 16 & 255] + _lut[d2 >> 24 & 255] + _lut[d3 & 255] + _lut[d3 >> 8 & 255] + _lut[d3 >> 16 & 255] + _lut[d3 >> 24 & 255];
|
|
6019
|
+
return uuid2.toUpperCase();
|
|
5998
6020
|
},
|
|
5999
6021
|
clamp: function(value, min, max) {
|
|
6000
6022
|
return Math.max(min, Math.min(max, value));
|
|
@@ -6591,22 +6613,22 @@ Object.assign(Matrix3.prototype, {
|
|
|
6591
6613
|
});
|
|
6592
6614
|
var _canvas;
|
|
6593
6615
|
var ImageUtils = {
|
|
6594
|
-
getDataURL: function(
|
|
6616
|
+
getDataURL: function(image2) {
|
|
6595
6617
|
var canvas;
|
|
6596
6618
|
if (typeof HTMLCanvasElement == "undefined") {
|
|
6597
|
-
return
|
|
6598
|
-
} else if (
|
|
6599
|
-
canvas =
|
|
6619
|
+
return image2.src;
|
|
6620
|
+
} else if (image2 instanceof HTMLCanvasElement) {
|
|
6621
|
+
canvas = image2;
|
|
6600
6622
|
} else {
|
|
6601
6623
|
if (_canvas === void 0)
|
|
6602
6624
|
_canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
|
|
6603
|
-
_canvas.width =
|
|
6604
|
-
_canvas.height =
|
|
6625
|
+
_canvas.width = image2.width;
|
|
6626
|
+
_canvas.height = image2.height;
|
|
6605
6627
|
var context = _canvas.getContext("2d");
|
|
6606
|
-
if (
|
|
6607
|
-
context.putImageData(
|
|
6628
|
+
if (image2 instanceof ImageData) {
|
|
6629
|
+
context.putImageData(image2, 0, 0);
|
|
6608
6630
|
} else {
|
|
6609
|
-
context.drawImage(
|
|
6631
|
+
context.drawImage(image2, 0, 0, image2.width, image2.height);
|
|
6610
6632
|
}
|
|
6611
6633
|
canvas = _canvas;
|
|
6612
6634
|
}
|
|
@@ -6618,11 +6640,11 @@ var ImageUtils = {
|
|
|
6618
6640
|
}
|
|
6619
6641
|
};
|
|
6620
6642
|
var textureId = 0;
|
|
6621
|
-
function Texture(
|
|
6643
|
+
function Texture(image2, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding) {
|
|
6622
6644
|
Object.defineProperty(this, "id", { value: textureId++ });
|
|
6623
6645
|
this.uuid = MathUtils.generateUUID();
|
|
6624
6646
|
this.name = "";
|
|
6625
|
-
this.image =
|
|
6647
|
+
this.image = image2 !== void 0 ? image2 : Texture.DEFAULT_IMAGE;
|
|
6626
6648
|
this.mipmaps = [];
|
|
6627
6649
|
this.mapping = mapping !== void 0 ? mapping : Texture.DEFAULT_MAPPING;
|
|
6628
6650
|
this.wrapS = wrapS !== void 0 ? wrapS : ClampToEdgeWrapping;
|
|
@@ -6714,26 +6736,26 @@ Texture.prototype = Object.assign(Object.create(EventDispatcher.prototype), {
|
|
|
6714
6736
|
unpackAlignment: this.unpackAlignment
|
|
6715
6737
|
};
|
|
6716
6738
|
if (this.image !== void 0) {
|
|
6717
|
-
var
|
|
6718
|
-
if (
|
|
6719
|
-
|
|
6739
|
+
var image2 = this.image;
|
|
6740
|
+
if (image2.uuid === void 0) {
|
|
6741
|
+
image2.uuid = MathUtils.generateUUID();
|
|
6720
6742
|
}
|
|
6721
|
-
if (!isRootObject && meta.images[
|
|
6743
|
+
if (!isRootObject && meta.images[image2.uuid] === void 0) {
|
|
6722
6744
|
var url;
|
|
6723
|
-
if (Array.isArray(
|
|
6745
|
+
if (Array.isArray(image2)) {
|
|
6724
6746
|
url = [];
|
|
6725
|
-
for (var i = 0, l2 =
|
|
6726
|
-
url.push(ImageUtils.getDataURL(
|
|
6747
|
+
for (var i = 0, l2 = image2.length; i < l2; i++) {
|
|
6748
|
+
url.push(ImageUtils.getDataURL(image2[i]));
|
|
6727
6749
|
}
|
|
6728
6750
|
} else {
|
|
6729
|
-
url = ImageUtils.getDataURL(
|
|
6751
|
+
url = ImageUtils.getDataURL(image2);
|
|
6730
6752
|
}
|
|
6731
|
-
meta.images[
|
|
6732
|
-
uuid:
|
|
6753
|
+
meta.images[image2.uuid] = {
|
|
6754
|
+
uuid: image2.uuid,
|
|
6733
6755
|
url
|
|
6734
6756
|
};
|
|
6735
6757
|
}
|
|
6736
|
-
output.image =
|
|
6758
|
+
output.image = image2.uuid;
|
|
6737
6759
|
}
|
|
6738
6760
|
if (!isRootObject) {
|
|
6739
6761
|
meta.textures[this.uuid] = output;
|
|
@@ -18006,36 +18028,36 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils,
|
|
|
18006
18028
|
function createCanvas(width, height) {
|
|
18007
18029
|
return useOffscreenCanvas ? new OffscreenCanvas(width, height) : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
|
|
18008
18030
|
}
|
|
18009
|
-
function resizeImage(
|
|
18031
|
+
function resizeImage(image2, needsPowerOfTwo, needsNewCanvas, maxSize) {
|
|
18010
18032
|
var scale = 1;
|
|
18011
|
-
if (
|
|
18012
|
-
scale = maxSize / Math.max(
|
|
18033
|
+
if (image2.width > maxSize || image2.height > maxSize) {
|
|
18034
|
+
scale = maxSize / Math.max(image2.width, image2.height);
|
|
18013
18035
|
}
|
|
18014
18036
|
if (scale < 1 || needsPowerOfTwo === true) {
|
|
18015
|
-
if (typeof HTMLImageElement !== "undefined" &&
|
|
18037
|
+
if (typeof HTMLImageElement !== "undefined" && image2 instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image2 instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image2 instanceof ImageBitmap) {
|
|
18016
18038
|
var floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor;
|
|
18017
|
-
var width = floor(scale *
|
|
18018
|
-
var height = floor(scale *
|
|
18039
|
+
var width = floor(scale * image2.width);
|
|
18040
|
+
var height = floor(scale * image2.height);
|
|
18019
18041
|
if (_canvas2 === void 0)
|
|
18020
18042
|
_canvas2 = createCanvas(width, height);
|
|
18021
18043
|
var canvas = needsNewCanvas ? createCanvas(width, height) : _canvas2;
|
|
18022
18044
|
canvas.width = width;
|
|
18023
18045
|
canvas.height = height;
|
|
18024
18046
|
var context = canvas.getContext("2d");
|
|
18025
|
-
context.drawImage(
|
|
18026
|
-
console.warn("THREE.WebGLRenderer: Texture has been resized from (" +
|
|
18047
|
+
context.drawImage(image2, 0, 0, width, height);
|
|
18048
|
+
console.warn("THREE.WebGLRenderer: Texture has been resized from (" + image2.width + "x" + image2.height + ") to (" + width + "x" + height + ").");
|
|
18027
18049
|
return canvas;
|
|
18028
18050
|
} else {
|
|
18029
|
-
if ("data" in
|
|
18030
|
-
console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" +
|
|
18051
|
+
if ("data" in image2) {
|
|
18052
|
+
console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + image2.width + "x" + image2.height + ").");
|
|
18031
18053
|
}
|
|
18032
|
-
return
|
|
18054
|
+
return image2;
|
|
18033
18055
|
}
|
|
18034
18056
|
}
|
|
18035
|
-
return
|
|
18057
|
+
return image2;
|
|
18036
18058
|
}
|
|
18037
|
-
function isPowerOfTwo(
|
|
18038
|
-
return MathUtils.isPowerOfTwo(
|
|
18059
|
+
function isPowerOfTwo(image2) {
|
|
18060
|
+
return MathUtils.isPowerOfTwo(image2.width) && MathUtils.isPowerOfTwo(image2.height);
|
|
18039
18061
|
}
|
|
18040
18062
|
function textureNeedsPowerOfTwo(texture) {
|
|
18041
18063
|
if (isWebGL2)
|
|
@@ -18164,10 +18186,10 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils,
|
|
|
18164
18186
|
if (texture.isVideoTexture)
|
|
18165
18187
|
updateVideoTexture(texture);
|
|
18166
18188
|
if (texture.version > 0 && textureProperties.__version !== texture.version) {
|
|
18167
|
-
var
|
|
18168
|
-
if (
|
|
18189
|
+
var image2 = texture.image;
|
|
18190
|
+
if (image2 === void 0) {
|
|
18169
18191
|
console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");
|
|
18170
|
-
} else if (
|
|
18192
|
+
} else if (image2.complete === false) {
|
|
18171
18193
|
console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");
|
|
18172
18194
|
} else {
|
|
18173
18195
|
uploadTexture(textureProperties, texture, slot);
|
|
@@ -18214,7 +18236,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils,
|
|
|
18214
18236
|
cubeImage[i] = isDataTexture ? texture.image[i].image : texture.image[i];
|
|
18215
18237
|
}
|
|
18216
18238
|
}
|
|
18217
|
-
var
|
|
18239
|
+
var image2 = cubeImage[0], supportsMips = isPowerOfTwo(image2) || isWebGL2, glFormat = utils.convert(texture.format), glType = utils.convert(texture.type), glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType);
|
|
18218
18240
|
setTextureParameters(34067, texture, supportsMips);
|
|
18219
18241
|
var mipmaps;
|
|
18220
18242
|
if (isCompressed) {
|
|
@@ -18255,7 +18277,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils,
|
|
|
18255
18277
|
textureProperties.__maxMipLevel = mipmaps.length;
|
|
18256
18278
|
}
|
|
18257
18279
|
if (textureNeedsGenerateMipmaps(texture, supportsMips)) {
|
|
18258
|
-
generateMipmap(34067, texture,
|
|
18280
|
+
generateMipmap(34067, texture, image2.width, image2.height);
|
|
18259
18281
|
}
|
|
18260
18282
|
textureProperties.__version = texture.version;
|
|
18261
18283
|
if (texture.onUpdate)
|
|
@@ -18339,8 +18361,8 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils,
|
|
|
18339
18361
|
_gl.pixelStorei(37441, texture.premultiplyAlpha);
|
|
18340
18362
|
_gl.pixelStorei(3317, texture.unpackAlignment);
|
|
18341
18363
|
var needsPowerOfTwo = textureNeedsPowerOfTwo(texture) && isPowerOfTwo(texture.image) === false;
|
|
18342
|
-
var
|
|
18343
|
-
var supportsMips = isPowerOfTwo(
|
|
18364
|
+
var image2 = resizeImage(texture.image, needsPowerOfTwo, false, maxTextureSize);
|
|
18365
|
+
var supportsMips = isPowerOfTwo(image2) || isWebGL2, glFormat = utils.convert(texture.format), glType = utils.convert(texture.type), glInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType);
|
|
18344
18366
|
setTextureParameters(textureType, texture, supportsMips);
|
|
18345
18367
|
var mipmap, mipmaps = texture.mipmaps;
|
|
18346
18368
|
if (texture.isDepthTexture) {
|
|
@@ -18375,7 +18397,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils,
|
|
|
18375
18397
|
glType = utils.convert(texture.type);
|
|
18376
18398
|
}
|
|
18377
18399
|
}
|
|
18378
|
-
state.texImage2D(3553, 0, glInternalFormat,
|
|
18400
|
+
state.texImage2D(3553, 0, glInternalFormat, image2.width, image2.height, 0, glFormat, glType, null);
|
|
18379
18401
|
} else if (texture.isDataTexture) {
|
|
18380
18402
|
if (mipmaps.length > 0 && supportsMips) {
|
|
18381
18403
|
for (var i = 0, il = mipmaps.length; i < il; i++) {
|
|
@@ -18385,7 +18407,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils,
|
|
|
18385
18407
|
texture.generateMipmaps = false;
|
|
18386
18408
|
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
18387
18409
|
} else {
|
|
18388
|
-
state.texImage2D(3553, 0, glInternalFormat,
|
|
18410
|
+
state.texImage2D(3553, 0, glInternalFormat, image2.width, image2.height, 0, glFormat, glType, image2.data);
|
|
18389
18411
|
textureProperties.__maxMipLevel = 0;
|
|
18390
18412
|
}
|
|
18391
18413
|
} else if (texture.isCompressedTexture) {
|
|
@@ -18403,10 +18425,10 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils,
|
|
|
18403
18425
|
}
|
|
18404
18426
|
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
18405
18427
|
} else if (texture.isDataTexture2DArray) {
|
|
18406
|
-
state.texImage3D(35866, 0, glInternalFormat,
|
|
18428
|
+
state.texImage3D(35866, 0, glInternalFormat, image2.width, image2.height, image2.depth, 0, glFormat, glType, image2.data);
|
|
18407
18429
|
textureProperties.__maxMipLevel = 0;
|
|
18408
18430
|
} else if (texture.isDataTexture3D) {
|
|
18409
|
-
state.texImage3D(32879, 0, glInternalFormat,
|
|
18431
|
+
state.texImage3D(32879, 0, glInternalFormat, image2.width, image2.height, image2.depth, 0, glFormat, glType, image2.data);
|
|
18410
18432
|
textureProperties.__maxMipLevel = 0;
|
|
18411
18433
|
} else {
|
|
18412
18434
|
if (mipmaps.length > 0 && supportsMips) {
|
|
@@ -18417,12 +18439,12 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils,
|
|
|
18417
18439
|
texture.generateMipmaps = false;
|
|
18418
18440
|
textureProperties.__maxMipLevel = mipmaps.length - 1;
|
|
18419
18441
|
} else {
|
|
18420
|
-
state.texImage2D(3553, 0, glInternalFormat, glFormat, glType,
|
|
18442
|
+
state.texImage2D(3553, 0, glInternalFormat, glFormat, glType, image2);
|
|
18421
18443
|
textureProperties.__maxMipLevel = 0;
|
|
18422
18444
|
}
|
|
18423
18445
|
}
|
|
18424
18446
|
if (textureNeedsGenerateMipmaps(texture, supportsMips)) {
|
|
18425
|
-
generateMipmap(textureType, texture,
|
|
18447
|
+
generateMipmap(textureType, texture, image2.width, image2.height);
|
|
18426
18448
|
}
|
|
18427
18449
|
textureProperties.__version = texture.version;
|
|
18428
18450
|
if (texture.onUpdate)
|
|
@@ -19891,10 +19913,10 @@ function WebGLRenderer(parameters) {
|
|
|
19891
19913
|
renderer.setMode(4);
|
|
19892
19914
|
}
|
|
19893
19915
|
} else if (object.isLine) {
|
|
19894
|
-
var
|
|
19895
|
-
if (
|
|
19896
|
-
|
|
19897
|
-
state.setLineWidth(
|
|
19916
|
+
var lineWidth2 = material.linewidth;
|
|
19917
|
+
if (lineWidth2 === void 0)
|
|
19918
|
+
lineWidth2 = 1;
|
|
19919
|
+
state.setLineWidth(lineWidth2 * getTargetPixelRatio());
|
|
19898
19920
|
if (object.isLineSegments) {
|
|
19899
19921
|
renderer.setMode(1);
|
|
19900
19922
|
} else if (object.isLineLoop) {
|
|
@@ -21270,7 +21292,7 @@ var _end = new Vector3();
|
|
|
21270
21292
|
var _inverseMatrix$1 = new Matrix4();
|
|
21271
21293
|
var _ray$1 = new Ray();
|
|
21272
21294
|
var _sphere$2 = new Sphere();
|
|
21273
|
-
function Line(geometry, material, mode) {
|
|
21295
|
+
function Line$1(geometry, material, mode) {
|
|
21274
21296
|
if (mode === 1) {
|
|
21275
21297
|
console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.");
|
|
21276
21298
|
}
|
|
@@ -21280,8 +21302,8 @@ function Line(geometry, material, mode) {
|
|
|
21280
21302
|
this.material = material !== void 0 ? material : new LineBasicMaterial();
|
|
21281
21303
|
this.updateMorphTargets();
|
|
21282
21304
|
}
|
|
21283
|
-
Line.prototype = Object.assign(Object.create(Object3D.prototype), {
|
|
21284
|
-
constructor: Line,
|
|
21305
|
+
Line$1.prototype = Object.assign(Object.create(Object3D.prototype), {
|
|
21306
|
+
constructor: Line$1,
|
|
21285
21307
|
isLine: true,
|
|
21286
21308
|
computeLineDistances: function() {
|
|
21287
21309
|
var geometry = this.geometry;
|
|
@@ -21432,10 +21454,10 @@ Line.prototype = Object.assign(Object.create(Object3D.prototype), {
|
|
|
21432
21454
|
var _start$1 = new Vector3();
|
|
21433
21455
|
var _end$1 = new Vector3();
|
|
21434
21456
|
function LineSegments(geometry, material) {
|
|
21435
|
-
Line.call(this, geometry, material);
|
|
21457
|
+
Line$1.call(this, geometry, material);
|
|
21436
21458
|
this.type = "LineSegments";
|
|
21437
21459
|
}
|
|
21438
|
-
LineSegments.prototype = Object.assign(Object.create(Line.prototype), {
|
|
21460
|
+
LineSegments.prototype = Object.assign(Object.create(Line$1.prototype), {
|
|
21439
21461
|
constructor: LineSegments,
|
|
21440
21462
|
isLineSegments: true,
|
|
21441
21463
|
computeLineDistances: function() {
|
|
@@ -21468,10 +21490,10 @@ LineSegments.prototype = Object.assign(Object.create(Line.prototype), {
|
|
|
21468
21490
|
}
|
|
21469
21491
|
});
|
|
21470
21492
|
function LineLoop(geometry, material) {
|
|
21471
|
-
Line.call(this, geometry, material);
|
|
21493
|
+
Line$1.call(this, geometry, material);
|
|
21472
21494
|
this.type = "LineLoop";
|
|
21473
21495
|
}
|
|
21474
|
-
LineLoop.prototype = Object.assign(Object.create(Line.prototype), {
|
|
21496
|
+
LineLoop.prototype = Object.assign(Object.create(Line$1.prototype), {
|
|
21475
21497
|
constructor: LineLoop,
|
|
21476
21498
|
isLineLoop: true
|
|
21477
21499
|
});
|
|
@@ -26080,32 +26102,32 @@ ImageLoader.prototype = Object.assign(Object.create(Loader.prototype), {
|
|
|
26080
26102
|
}, 0);
|
|
26081
26103
|
return cached;
|
|
26082
26104
|
}
|
|
26083
|
-
var
|
|
26105
|
+
var image2 = document.createElementNS("http://www.w3.org/1999/xhtml", "img");
|
|
26084
26106
|
function onImageLoad() {
|
|
26085
|
-
|
|
26086
|
-
|
|
26107
|
+
image2.removeEventListener("load", onImageLoad, false);
|
|
26108
|
+
image2.removeEventListener("error", onImageError, false);
|
|
26087
26109
|
Cache.add(url, this);
|
|
26088
26110
|
if (onLoad)
|
|
26089
26111
|
onLoad(this);
|
|
26090
26112
|
scope.manager.itemEnd(url);
|
|
26091
26113
|
}
|
|
26092
26114
|
function onImageError(event) {
|
|
26093
|
-
|
|
26094
|
-
|
|
26115
|
+
image2.removeEventListener("load", onImageLoad, false);
|
|
26116
|
+
image2.removeEventListener("error", onImageError, false);
|
|
26095
26117
|
if (onError)
|
|
26096
26118
|
onError(event);
|
|
26097
26119
|
scope.manager.itemError(url);
|
|
26098
26120
|
scope.manager.itemEnd(url);
|
|
26099
26121
|
}
|
|
26100
|
-
|
|
26101
|
-
|
|
26122
|
+
image2.addEventListener("load", onImageLoad, false);
|
|
26123
|
+
image2.addEventListener("error", onImageError, false);
|
|
26102
26124
|
if (url.substr(0, 5) !== "data:") {
|
|
26103
26125
|
if (this.crossOrigin !== void 0)
|
|
26104
|
-
|
|
26126
|
+
image2.crossOrigin = this.crossOrigin;
|
|
26105
26127
|
}
|
|
26106
26128
|
scope.manager.itemStart(url);
|
|
26107
|
-
|
|
26108
|
-
return
|
|
26129
|
+
image2.src = url;
|
|
26130
|
+
return image2;
|
|
26109
26131
|
}
|
|
26110
26132
|
});
|
|
26111
26133
|
function CubeTextureLoader(manager) {
|
|
@@ -26120,8 +26142,8 @@ CubeTextureLoader.prototype = Object.assign(Object.create(Loader.prototype), {
|
|
|
26120
26142
|
loader.setPath(this.path);
|
|
26121
26143
|
var loaded = 0;
|
|
26122
26144
|
function loadTexture2(i2) {
|
|
26123
|
-
loader.load(urls[i2], function(
|
|
26124
|
-
texture.images[i2] =
|
|
26145
|
+
loader.load(urls[i2], function(image2) {
|
|
26146
|
+
texture.images[i2] = image2;
|
|
26125
26147
|
loaded++;
|
|
26126
26148
|
if (loaded === 6) {
|
|
26127
26149
|
texture.needsUpdate = true;
|
|
@@ -26146,8 +26168,8 @@ TextureLoader.prototype = Object.assign(Object.create(Loader.prototype), {
|
|
|
26146
26168
|
var loader = new ImageLoader(this.manager);
|
|
26147
26169
|
loader.setCrossOrigin(this.crossOrigin);
|
|
26148
26170
|
loader.setPath(this.path);
|
|
26149
|
-
loader.load(url, function(
|
|
26150
|
-
texture.image =
|
|
26171
|
+
loader.load(url, function(image2) {
|
|
26172
|
+
texture.image = image2;
|
|
26151
26173
|
var isJPEG = url.search(/\.jpe?g($|\?)/i) > 0 || url.search(/^data\:image\/jpeg/) === 0;
|
|
26152
26174
|
texture.format = isJPEG ? RGBFormat : RGBAFormat;
|
|
26153
26175
|
texture.needsUpdate = true;
|
|
@@ -28352,18 +28374,18 @@ ObjectLoader.prototype = Object.assign(Object.create(Loader.prototype), {
|
|
|
28352
28374
|
var loader = new ImageLoader(manager);
|
|
28353
28375
|
loader.setCrossOrigin(this.crossOrigin);
|
|
28354
28376
|
for (var i = 0, il = json.length; i < il; i++) {
|
|
28355
|
-
var
|
|
28356
|
-
var url =
|
|
28377
|
+
var image2 = json[i];
|
|
28378
|
+
var url = image2.url;
|
|
28357
28379
|
if (Array.isArray(url)) {
|
|
28358
|
-
images[
|
|
28380
|
+
images[image2.uuid] = [];
|
|
28359
28381
|
for (var j = 0, jl = url.length; j < jl; j++) {
|
|
28360
28382
|
var currentUrl = url[j];
|
|
28361
28383
|
var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(currentUrl) ? currentUrl : scope.resourcePath + currentUrl;
|
|
28362
|
-
images[
|
|
28384
|
+
images[image2.uuid].push(loadImage(path));
|
|
28363
28385
|
}
|
|
28364
28386
|
} else {
|
|
28365
|
-
var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(
|
|
28366
|
-
images[
|
|
28387
|
+
var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(image2.url) ? image2.url : scope.resourcePath + image2.url;
|
|
28388
|
+
images[image2.uuid] = loadImage(path);
|
|
28367
28389
|
}
|
|
28368
28390
|
}
|
|
28369
28391
|
}
|
|
@@ -28447,11 +28469,11 @@ ObjectLoader.prototype = Object.assign(Object.create(Loader.prototype), {
|
|
|
28447
28469
|
if (Array.isArray(name)) {
|
|
28448
28470
|
var array = [];
|
|
28449
28471
|
for (var i2 = 0, l3 = name.length; i2 < l3; i2++) {
|
|
28450
|
-
var
|
|
28451
|
-
if (materials[
|
|
28452
|
-
console.warn("THREE.ObjectLoader: Undefined material",
|
|
28472
|
+
var uuid2 = name[i2];
|
|
28473
|
+
if (materials[uuid2] === void 0) {
|
|
28474
|
+
console.warn("THREE.ObjectLoader: Undefined material", uuid2);
|
|
28453
28475
|
}
|
|
28454
|
-
array.push(materials[
|
|
28476
|
+
array.push(materials[uuid2]);
|
|
28455
28477
|
}
|
|
28456
28478
|
return array;
|
|
28457
28479
|
}
|
|
@@ -28536,7 +28558,7 @@ ObjectLoader.prototype = Object.assign(Object.create(Loader.prototype), {
|
|
|
28536
28558
|
object = new LOD();
|
|
28537
28559
|
break;
|
|
28538
28560
|
case "Line":
|
|
28539
|
-
object = new Line(getGeometry(data.geometry), getMaterial(data.material), data.mode);
|
|
28561
|
+
object = new Line$1(getGeometry(data.geometry), getMaterial(data.material), data.mode);
|
|
28540
28562
|
break;
|
|
28541
28563
|
case "LineLoop":
|
|
28542
28564
|
object = new LineLoop(getGeometry(data.geometry), getMaterial(data.material));
|
|
@@ -30024,10 +30046,10 @@ Object.assign(AnimationObjectGroup.prototype, {
|
|
|
30024
30046
|
add: function() {
|
|
30025
30047
|
var objects = this._objects, nObjects = objects.length, nCachedObjects = this.nCachedObjects_, indicesByUUID = this._indicesByUUID, paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, nBindings = bindings.length, knownObject = void 0;
|
|
30026
30048
|
for (var i = 0, n = arguments.length; i !== n; ++i) {
|
|
30027
|
-
var object = arguments[i],
|
|
30049
|
+
var object = arguments[i], uuid2 = object.uuid, index = indicesByUUID[uuid2];
|
|
30028
30050
|
if (index === void 0) {
|
|
30029
30051
|
index = nObjects++;
|
|
30030
|
-
indicesByUUID[
|
|
30052
|
+
indicesByUUID[uuid2] = index;
|
|
30031
30053
|
objects.push(object);
|
|
30032
30054
|
for (var j = 0, m = nBindings; j !== m; ++j) {
|
|
30033
30055
|
bindings[j].push(new PropertyBinding(object, paths[j], parsedPaths[j]));
|
|
@@ -30037,7 +30059,7 @@ Object.assign(AnimationObjectGroup.prototype, {
|
|
|
30037
30059
|
var firstActiveIndex = --nCachedObjects, lastCachedObject = objects[firstActiveIndex];
|
|
30038
30060
|
indicesByUUID[lastCachedObject.uuid] = index;
|
|
30039
30061
|
objects[index] = lastCachedObject;
|
|
30040
|
-
indicesByUUID[
|
|
30062
|
+
indicesByUUID[uuid2] = firstActiveIndex;
|
|
30041
30063
|
objects[firstActiveIndex] = object;
|
|
30042
30064
|
for (var j = 0, m = nBindings; j !== m; ++j) {
|
|
30043
30065
|
var bindingsForPath = bindings[j], lastCached = bindingsForPath[firstActiveIndex], binding = bindingsForPath[index];
|
|
@@ -30056,12 +30078,12 @@ Object.assign(AnimationObjectGroup.prototype, {
|
|
|
30056
30078
|
remove: function() {
|
|
30057
30079
|
var objects = this._objects, nCachedObjects = this.nCachedObjects_, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length;
|
|
30058
30080
|
for (var i = 0, n = arguments.length; i !== n; ++i) {
|
|
30059
|
-
var object = arguments[i],
|
|
30081
|
+
var object = arguments[i], uuid2 = object.uuid, index = indicesByUUID[uuid2];
|
|
30060
30082
|
if (index !== void 0 && index >= nCachedObjects) {
|
|
30061
30083
|
var lastCachedIndex = nCachedObjects++, firstActiveObject = objects[lastCachedIndex];
|
|
30062
30084
|
indicesByUUID[firstActiveObject.uuid] = index;
|
|
30063
30085
|
objects[index] = firstActiveObject;
|
|
30064
|
-
indicesByUUID[
|
|
30086
|
+
indicesByUUID[uuid2] = lastCachedIndex;
|
|
30065
30087
|
objects[lastCachedIndex] = object;
|
|
30066
30088
|
for (var j = 0, m = nBindings; j !== m; ++j) {
|
|
30067
30089
|
var bindingsForPath = bindings[j], firstActive = bindingsForPath[lastCachedIndex], binding = bindingsForPath[index];
|
|
@@ -30075,9 +30097,9 @@ Object.assign(AnimationObjectGroup.prototype, {
|
|
|
30075
30097
|
uncache: function() {
|
|
30076
30098
|
var objects = this._objects, nObjects = objects.length, nCachedObjects = this.nCachedObjects_, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length;
|
|
30077
30099
|
for (var i = 0, n = arguments.length; i !== n; ++i) {
|
|
30078
|
-
var object = arguments[i],
|
|
30100
|
+
var object = arguments[i], uuid2 = object.uuid, index = indicesByUUID[uuid2];
|
|
30079
30101
|
if (index !== void 0) {
|
|
30080
|
-
delete indicesByUUID[
|
|
30102
|
+
delete indicesByUUID[uuid2];
|
|
30081
30103
|
if (index < nCachedObjects) {
|
|
30082
30104
|
var firstActiveIndex = --nCachedObjects, lastCachedObject = objects[firstActiveIndex], lastIndex = --nObjects, lastObject = objects[lastIndex];
|
|
30083
30105
|
indicesByUUID[lastCachedObject.uuid] = index;
|
|
@@ -31505,11 +31527,11 @@ function DirectionalLightHelper(light, size, color) {
|
|
|
31505
31527
|
0
|
|
31506
31528
|
], 3));
|
|
31507
31529
|
var material = new LineBasicMaterial({ fog: false, toneMapped: false });
|
|
31508
|
-
this.lightPlane = new Line(geometry, material);
|
|
31530
|
+
this.lightPlane = new Line$1(geometry, material);
|
|
31509
31531
|
this.add(this.lightPlane);
|
|
31510
31532
|
geometry = new BufferGeometry();
|
|
31511
31533
|
geometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 0, 0, 1], 3));
|
|
31512
|
-
this.targetLine = new Line(geometry, material);
|
|
31534
|
+
this.targetLine = new Line$1(geometry, material);
|
|
31513
31535
|
this.add(this.targetLine);
|
|
31514
31536
|
this.update();
|
|
31515
31537
|
}
|
|
@@ -31740,7 +31762,7 @@ function PlaneHelper(plane, size, hex) {
|
|
|
31740
31762
|
var geometry = new BufferGeometry();
|
|
31741
31763
|
geometry.setAttribute("position", new Float32BufferAttribute(positions, 3));
|
|
31742
31764
|
geometry.computeBoundingSphere();
|
|
31743
|
-
Line.call(this, geometry, new LineBasicMaterial({ color, toneMapped: false }));
|
|
31765
|
+
Line$1.call(this, geometry, new LineBasicMaterial({ color, toneMapped: false }));
|
|
31744
31766
|
this.type = "PlaneHelper";
|
|
31745
31767
|
var positions2 = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1];
|
|
31746
31768
|
var geometry2 = new BufferGeometry();
|
|
@@ -31748,7 +31770,7 @@ function PlaneHelper(plane, size, hex) {
|
|
|
31748
31770
|
geometry2.computeBoundingSphere();
|
|
31749
31771
|
this.add(new Mesh(geometry2, new MeshBasicMaterial({ color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false })));
|
|
31750
31772
|
}
|
|
31751
|
-
PlaneHelper.prototype = Object.create(Line.prototype);
|
|
31773
|
+
PlaneHelper.prototype = Object.create(Line$1.prototype);
|
|
31752
31774
|
PlaneHelper.prototype.constructor = PlaneHelper;
|
|
31753
31775
|
PlaneHelper.prototype.updateMatrixWorld = function(force) {
|
|
31754
31776
|
var scale = -this.plane.constant;
|
|
@@ -31783,7 +31805,7 @@ function ArrowHelper(dir, origin, length, color, headLength, headWidth) {
|
|
|
31783
31805
|
_coneGeometry.translate(0, -0.5, 0);
|
|
31784
31806
|
}
|
|
31785
31807
|
this.position.copy(origin);
|
|
31786
|
-
this.line = new Line(_lineGeometry, new LineBasicMaterial({ color, toneMapped: false }));
|
|
31808
|
+
this.line = new Line$1(_lineGeometry, new LineBasicMaterial({ color, toneMapped: false }));
|
|
31787
31809
|
this.line.matrixAutoUpdate = false;
|
|
31788
31810
|
this.add(this.line);
|
|
31789
31811
|
this.cone = new Mesh(_coneGeometry, new MeshBasicMaterial({ color, toneMapped: false }));
|
|
@@ -33791,8 +33813,8 @@ var FBXLoader = function() {
|
|
|
33791
33813
|
var arrayBufferContent = videoNode.Content instanceof ArrayBuffer && videoNode.Content.byteLength > 0;
|
|
33792
33814
|
var base64Content = typeof videoNode.Content === "string" && videoNode.Content !== "";
|
|
33793
33815
|
if (arrayBufferContent || base64Content) {
|
|
33794
|
-
var
|
|
33795
|
-
blobs[videoNode.RelativeFilename || videoNode.Filename] =
|
|
33816
|
+
var image2 = this.parseImage(videoNodes[nodeID]);
|
|
33817
|
+
blobs[videoNode.RelativeFilename || videoNode.Filename] = image2;
|
|
33796
33818
|
}
|
|
33797
33819
|
}
|
|
33798
33820
|
}
|
|
@@ -34368,7 +34390,7 @@ var FBXLoader = function() {
|
|
|
34368
34390
|
return geo;
|
|
34369
34391
|
}, null);
|
|
34370
34392
|
var material = new LineBasicMaterial({ color: 3342591, linewidth: 1 });
|
|
34371
|
-
return new Line(geometry, material);
|
|
34393
|
+
return new Line$1(geometry, material);
|
|
34372
34394
|
},
|
|
34373
34395
|
getTransformData: function(model, modelNode) {
|
|
34374
34396
|
var transformData = {};
|
|
@@ -34484,17 +34506,17 @@ var FBXLoader = function() {
|
|
|
34484
34506
|
});
|
|
34485
34507
|
},
|
|
34486
34508
|
setupMorphMaterial: function(child, material, index) {
|
|
34487
|
-
var
|
|
34509
|
+
var uuid2 = child.uuid;
|
|
34488
34510
|
var matUuid = material.uuid;
|
|
34489
34511
|
var sharedMat = false;
|
|
34490
34512
|
sceneGraph.traverse(function(node) {
|
|
34491
34513
|
if (node.isMesh) {
|
|
34492
34514
|
if (Array.isArray(node.material)) {
|
|
34493
34515
|
node.material.forEach(function(mat) {
|
|
34494
|
-
if (mat.uuid === matUuid && node.uuid !==
|
|
34516
|
+
if (mat.uuid === matUuid && node.uuid !== uuid2)
|
|
34495
34517
|
sharedMat = true;
|
|
34496
34518
|
});
|
|
34497
|
-
} else if (node.material.uuid === matUuid && node.uuid !==
|
|
34519
|
+
} else if (node.material.uuid === matUuid && node.uuid !== uuid2)
|
|
34498
34520
|
sharedMat = true;
|
|
34499
34521
|
}
|
|
34500
34522
|
});
|
|
@@ -36264,6 +36286,7 @@ const ModelEntryDoorGuidePlugin = (five, params) => {
|
|
|
36264
36286
|
if (!state.enabled)
|
|
36265
36287
|
return true;
|
|
36266
36288
|
state.enabled = false;
|
|
36289
|
+
hide();
|
|
36267
36290
|
five.off("modeChange", modeChangeHandler);
|
|
36268
36291
|
return true;
|
|
36269
36292
|
};
|
|
@@ -37159,7 +37182,7 @@ const CameraMovementPlugin = (five) => {
|
|
|
37159
37182
|
rotate
|
|
37160
37183
|
};
|
|
37161
37184
|
};
|
|
37162
|
-
function samePointAt(point1, point2) {
|
|
37185
|
+
function samePointAt$1(point1, point2) {
|
|
37163
37186
|
return point1.x === point2.x && point1.y === point2.y;
|
|
37164
37187
|
}
|
|
37165
37188
|
function sameK(k1, k2) {
|
|
@@ -37200,9 +37223,9 @@ function intersectionOfLine(linePoints1, linePoints2, needIntersectionInLine) {
|
|
|
37200
37223
|
return { x, y: y2 };
|
|
37201
37224
|
}
|
|
37202
37225
|
function pointOnLine(point, linePoints) {
|
|
37203
|
-
if (samePointAt(point, linePoints[0]))
|
|
37226
|
+
if (samePointAt$1(point, linePoints[0]))
|
|
37204
37227
|
return true;
|
|
37205
|
-
if (samePointAt(point, linePoints[1]))
|
|
37228
|
+
if (samePointAt$1(point, linePoints[1]))
|
|
37206
37229
|
return true;
|
|
37207
37230
|
return (linePoints[0].x - point.x) * (point.x - linePoints[1].x) >= 0 && (linePoints[0].y - point.y) * (point.y - linePoints[1].y) >= 0 && sameK(getK(linePoints[0], point), getK(point, linePoints[1]));
|
|
37208
37231
|
}
|
|
@@ -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,3466 @@ class PanoCompassController {
|
|
|
37752
37815
|
(_b = this.compassMesh) == null ? void 0 : _b.material.setValues({ opacity: 0 });
|
|
37753
37816
|
});
|
|
37754
37817
|
__publicField(this, "onFivePanoArrived", (panoIndex) => {
|
|
37818
|
+
var _a, _b, _c, _d;
|
|
37819
|
+
const standingPosition = this.five.work.observers[panoIndex].standingPosition;
|
|
37820
|
+
if (this.compassMesh) {
|
|
37821
|
+
this.compassMesh.position.copy(standingPosition.clone().setY(standingPosition.y + 0.01));
|
|
37822
|
+
if (this.compassMesh.material.opacity !== 0)
|
|
37823
|
+
return;
|
|
37824
|
+
(_a = this.compassMeshTween) == null ? void 0 : _a.dispose();
|
|
37825
|
+
this.compassMeshTween = tweenProgress(1e3).onUpdate(({ progress }) => {
|
|
37826
|
+
var _a2;
|
|
37827
|
+
(_a2 = this.compassMesh) == null ? void 0 : _a2.material.setValues({ opacity: progress });
|
|
37828
|
+
this.five.needsRender = true;
|
|
37829
|
+
}).play();
|
|
37830
|
+
}
|
|
37831
|
+
if (this.entryDoorMesh) {
|
|
37832
|
+
const entryDoorPosition = new THREE.Vector3(this.data.entrance.position.x, this.data.entrance.position.y, this.data.entrance.position.z);
|
|
37833
|
+
const panoToEntryDoorVector = entryDoorPosition.clone().setY(standingPosition.y).sub(standingPosition).normalize();
|
|
37834
|
+
const compassEntryDoorPosition = standingPosition.clone().add(panoToEntryDoorVector.clone().multiplyScalar(0.7)).setY(standingPosition.y + 0.01);
|
|
37835
|
+
this.entryDoorMesh.rotation.z = new THREE.Vector3(0, 0, -1).angleTo(panoToEntryDoorVector);
|
|
37836
|
+
this.entryDoorMesh.position.copy(compassEntryDoorPosition);
|
|
37837
|
+
((_b = this.data) == null ? void 0 : _b.room_observers[panoIndex].room.type) === 1 ? (_c = this.entryDoorMesh) == null ? void 0 : _c.material.setValues({ opacity: 1 }) : (_d = this.entryDoorMesh) == null ? void 0 : _d.material.setValues({ opacity: 0 });
|
|
37838
|
+
}
|
|
37839
|
+
if (this.roomInfoInstance && this.roomInfoWrapperInstance) {
|
|
37840
|
+
this.roomInfoWrapperInstance.css3DObject.position.copy(standingPosition.clone().setY(standingPosition.y + 0.01));
|
|
37841
|
+
this.roomInfoInstance.setRoom(this.data.room_observers[panoIndex].room);
|
|
37842
|
+
}
|
|
37843
|
+
this.five.needsRender = true;
|
|
37844
|
+
});
|
|
37845
|
+
__publicField(this, "onFiveCameraDirectionUpdate", ({
|
|
37846
|
+
longitude,
|
|
37847
|
+
latitude
|
|
37848
|
+
}) => {
|
|
37755
37849
|
var _a, _b;
|
|
37756
|
-
if (
|
|
37850
|
+
if (!this.roomInfoWrapperInstance)
|
|
37757
37851
|
return;
|
|
37758
|
-
this.
|
|
37759
|
-
(_b = this.
|
|
37760
|
-
this.compassMeshTween = tweenProgress(1e3).onUpdate(({ progress }) => {
|
|
37761
|
-
var _a2;
|
|
37762
|
-
(_a2 = this.compassMesh) == null ? void 0 : _a2.material.setValues({ opacity: progress });
|
|
37763
|
-
this.five.needsRender = true;
|
|
37764
|
-
}).play();
|
|
37852
|
+
this.roomInfoWrapperInstance.css3DObject.rotation.z = longitude;
|
|
37853
|
+
latitude > 0.66 && this.five.getCurrentState().mode === "Panorama" ? (_a = this.roomInfoInstance) == null ? void 0 : _a.show() : (_b = this.roomInfoInstance) == null ? void 0 : _b.hide();
|
|
37765
37854
|
});
|
|
37766
37855
|
this.five = five;
|
|
37767
37856
|
this.config = config;
|
|
37768
|
-
five.
|
|
37857
|
+
this.five.scene.add(this.group);
|
|
37769
37858
|
five.once("dispose", this.dispose);
|
|
37859
|
+
five.once("modelLoaded", this.onFiveFistPanoLoaded);
|
|
37770
37860
|
this.five.on("panoArrived", this.onFivePanoArrived);
|
|
37771
37861
|
this.five.on("panoWillArrive", this.onFivePanoWillArrive);
|
|
37862
|
+
this.five.on("cameraDirectionUpdate", this.onFiveCameraDirectionUpdate);
|
|
37772
37863
|
}
|
|
37773
37864
|
load(data) {
|
|
37774
37865
|
this.data = data;
|
|
37775
|
-
if (this.
|
|
37776
|
-
this.
|
|
37777
|
-
|
|
37778
|
-
|
|
37866
|
+
if (this.modelLoaded)
|
|
37867
|
+
this.init();
|
|
37868
|
+
}
|
|
37869
|
+
async init() {
|
|
37870
|
+
if (!this.data || !this.modelLoaded)
|
|
37871
|
+
return;
|
|
37872
|
+
const northRad = this.data.north_rad;
|
|
37873
|
+
if (northRad != null) {
|
|
37874
|
+
this.compassMesh = await this.loadCompassMesh();
|
|
37875
|
+
this.compassMesh.rotateX(-Math.PI / 2);
|
|
37876
|
+
this.compassMesh.rotateZ(northRad - Math.PI / 2);
|
|
37877
|
+
this.group.add(this.compassMesh);
|
|
37878
|
+
}
|
|
37879
|
+
if (this.data.entrance != null) {
|
|
37880
|
+
this.entryDoorMesh = await this.loadEntryDoorMesh();
|
|
37881
|
+
this.roomInfoWrapperInstance = this.loadRoomInfo();
|
|
37882
|
+
this.roomInfoInstance = getRoomInfoInstance();
|
|
37883
|
+
this.entryDoorMesh.rotateX(-Math.PI / 2);
|
|
37884
|
+
if (this.roomInfoWrapperInstance)
|
|
37885
|
+
this.roomInfoInstance.appendTo(this.roomInfoWrapperInstance.container);
|
|
37886
|
+
this.group.add(this.entryDoorMesh);
|
|
37887
|
+
}
|
|
37888
|
+
this.onFivePanoArrived(this.five.panoIndex || 0);
|
|
37889
|
+
this.five.needsRender = true;
|
|
37890
|
+
}
|
|
37891
|
+
async loadCompassMesh() {
|
|
37892
|
+
var _a;
|
|
37893
|
+
const compassImageUrl = ((_a = this.config) == null ? void 0 : _a.compassImageUrl) || "//vrlab-image4.ljcdn.com/release/web/v3/north-point-circle.96498e69.png";
|
|
37894
|
+
const compassTexture = await loadTexture(compassImageUrl);
|
|
37895
|
+
const compassGeometry = new THREE.CircleGeometry(0.7, 32);
|
|
37896
|
+
const compassMaterial = new THREE.MeshBasicMaterial({
|
|
37897
|
+
map: compassTexture,
|
|
37898
|
+
transparent: true,
|
|
37899
|
+
opacity: 0,
|
|
37900
|
+
depthTest: false
|
|
37901
|
+
});
|
|
37902
|
+
const compassMesh = new THREE.Mesh(compassGeometry, compassMaterial);
|
|
37903
|
+
compassMesh.name = "pano-compass-mesh";
|
|
37904
|
+
return compassMesh;
|
|
37905
|
+
}
|
|
37906
|
+
async loadEntryDoorMesh() {
|
|
37907
|
+
var _a;
|
|
37908
|
+
const entryDoorImageUrl = ((_a = this.config) == null ? void 0 : _a.entryDoorImageUrl) || "//vrlab-image4.ljcdn.com/release/web/enterDoor.831b8208.png";
|
|
37909
|
+
const entryDoorTexture = await loadTexture(entryDoorImageUrl);
|
|
37910
|
+
const entryDoorGeometry = new THREE.PlaneGeometry(0.2, 0.16);
|
|
37911
|
+
const entryDoorMaterial = new THREE.MeshBasicMaterial({
|
|
37912
|
+
map: entryDoorTexture,
|
|
37913
|
+
transparent: true,
|
|
37914
|
+
opacity: 0.8,
|
|
37915
|
+
depthTest: false
|
|
37916
|
+
});
|
|
37917
|
+
const entryDoorMesh = new THREE.Mesh(entryDoorGeometry, entryDoorMaterial);
|
|
37918
|
+
entryDoorMesh.name = "pano-compass-entry-door";
|
|
37919
|
+
return entryDoorMesh;
|
|
37920
|
+
}
|
|
37921
|
+
loadRoomInfo() {
|
|
37922
|
+
const points = [
|
|
37923
|
+
new THREE.Vector3(-0.7, 0, -0.7),
|
|
37924
|
+
new THREE.Vector3(0.7, 0, -0.7),
|
|
37925
|
+
new THREE.Vector3(0.7, 0, 0.7),
|
|
37926
|
+
new THREE.Vector3(-0.7, 0, 0.7)
|
|
37927
|
+
];
|
|
37928
|
+
const roomInfo = CSS3DRenderPlugin(this.five).create3DDomContainer(points);
|
|
37929
|
+
return roomInfo;
|
|
37930
|
+
}
|
|
37931
|
+
}
|
|
37932
|
+
function exchange(array, index1, index2) {
|
|
37933
|
+
const value = array[index1];
|
|
37934
|
+
array[index1] = array[index2];
|
|
37935
|
+
array[index2] = value;
|
|
37936
|
+
}
|
|
37937
|
+
class Magnifier {
|
|
37938
|
+
constructor(five, options) {
|
|
37939
|
+
__publicField(this, "five");
|
|
37940
|
+
__publicField(this, "scale");
|
|
37941
|
+
__publicField(this, "width");
|
|
37942
|
+
__publicField(this, "height");
|
|
37943
|
+
__publicField(this, "pixelRatio");
|
|
37944
|
+
__publicField(this, "originWidth");
|
|
37945
|
+
__publicField(this, "originHeight");
|
|
37946
|
+
__publicField(this, "context");
|
|
37947
|
+
__publicField(this, "canvas", document.createElement("canvas"));
|
|
37948
|
+
__publicField(this, "container");
|
|
37949
|
+
if (!five.renderer)
|
|
37950
|
+
throw new Error("Five Render \u672A\u521D\u59CB\u5316");
|
|
37951
|
+
this.five = five;
|
|
37952
|
+
const scale = options.scale;
|
|
37953
|
+
const pixelRatio = five.renderer.getPixelRatio();
|
|
37954
|
+
const originWidth = options.width;
|
|
37955
|
+
const originHeight = options.height;
|
|
37956
|
+
const width = originWidth * pixelRatio;
|
|
37957
|
+
const height = originHeight * pixelRatio;
|
|
37958
|
+
const magnifier = this.canvas;
|
|
37959
|
+
const context = this.canvas.getContext("2d");
|
|
37960
|
+
if (!context)
|
|
37961
|
+
throw new Error("CANNOT CREATE CONTEXT2D");
|
|
37962
|
+
this.scale = scale;
|
|
37963
|
+
this.context = context;
|
|
37964
|
+
this.width = width;
|
|
37965
|
+
this.height = height;
|
|
37966
|
+
this.originWidth = originWidth;
|
|
37967
|
+
this.originHeight = originHeight;
|
|
37968
|
+
this.pixelRatio = pixelRatio;
|
|
37969
|
+
magnifier.classList.add("plugin-measure-magnifier");
|
|
37970
|
+
magnifier.style.position = "absolute";
|
|
37971
|
+
magnifier.style.pointerEvents = "none";
|
|
37972
|
+
magnifier.style.borderRadius = "50%";
|
|
37973
|
+
magnifier.style.left = -width / 2 + "px";
|
|
37974
|
+
magnifier.style.top = -height - 90 + "px";
|
|
37975
|
+
magnifier.setAttribute("width", width.toString());
|
|
37976
|
+
magnifier.setAttribute("height", height.toString());
|
|
37977
|
+
this.canvas.style.width = originWidth + "px";
|
|
37978
|
+
this.canvas.style.height = originHeight + "px";
|
|
37979
|
+
}
|
|
37980
|
+
dispose() {
|
|
37981
|
+
this.clear();
|
|
37982
|
+
this.canvas.remove();
|
|
37983
|
+
}
|
|
37984
|
+
clear() {
|
|
37985
|
+
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
|
37986
|
+
}
|
|
37987
|
+
appendTo(element2) {
|
|
37988
|
+
this.container = element2;
|
|
37989
|
+
element2.append(this.canvas);
|
|
37990
|
+
}
|
|
37991
|
+
updateWithPoint(point) {
|
|
37992
|
+
if (!this.five.renderer || !this.container)
|
|
37993
|
+
return;
|
|
37994
|
+
const { scale, pixelRatio, context, originWidth, originHeight, width, height } = this;
|
|
37995
|
+
const position2d = point.clone().project(this.five.camera);
|
|
37996
|
+
const left = (position2d.x + 1) / 2 * this.container.clientWidth;
|
|
37997
|
+
const right = -(position2d.x - 1) / 2 * this.container.clientWidth;
|
|
37998
|
+
const top = -(position2d.y - 1) / 2 * this.container.clientHeight;
|
|
37999
|
+
if (left < 183) {
|
|
38000
|
+
this.canvas.style.top = -originHeight / 2 + "px";
|
|
38001
|
+
this.canvas.style.left = 90 + "px";
|
|
38002
|
+
} else if (top < 183) {
|
|
38003
|
+
this.canvas.style.top = 90 + "px";
|
|
38004
|
+
this.canvas.style.left = -originWidth / 2 + "px";
|
|
38005
|
+
} else if (right < 183) {
|
|
38006
|
+
this.canvas.style.top = -originHeight / 2 + "px";
|
|
38007
|
+
this.canvas.style.left = -originWidth - 90 + "px";
|
|
38008
|
+
} else {
|
|
38009
|
+
this.canvas.style.left = -originWidth / 2 + "px";
|
|
38010
|
+
this.canvas.style.top = -originHeight - 90 + "px";
|
|
38011
|
+
}
|
|
38012
|
+
this.canvas.style.transform = `translate3d(${left}px, ${top}px, 10px)`;
|
|
38013
|
+
const renderSize = this.five.renderer.getSize(new Vector2$1());
|
|
38014
|
+
const x = (position2d.x + 1) / 2 * renderSize.x;
|
|
38015
|
+
const y2 = (position2d.y + 1) / 2 * renderSize.y;
|
|
38016
|
+
const pixels = this.five.getPixels(x - originWidth / scale / 2, y2 - originHeight / scale / 2, originWidth / scale, originHeight / scale, pixelRatio * scale);
|
|
38017
|
+
const length = width * height / 2;
|
|
38018
|
+
for (let index = 0; index < length; index++) {
|
|
38019
|
+
const targetIndex = (height - Math.floor(index / width) - 1) * width + index % width;
|
|
38020
|
+
exchange(pixels, index * 4 + 0, targetIndex * 4 + 0);
|
|
38021
|
+
exchange(pixels, index * 4 + 1, targetIndex * 4 + 1);
|
|
38022
|
+
exchange(pixels, index * 4 + 2, targetIndex * 4 + 2);
|
|
38023
|
+
exchange(pixels, index * 4 + 3, targetIndex * 4 + 3);
|
|
38024
|
+
}
|
|
38025
|
+
const imageData = context.createImageData(width, height);
|
|
38026
|
+
imageData.data.set(pixels);
|
|
38027
|
+
context.putImageData(imageData, 0, 0);
|
|
38028
|
+
}
|
|
38029
|
+
}
|
|
38030
|
+
class FiveHelper {
|
|
38031
|
+
constructor(five) {
|
|
38032
|
+
__publicField(this, "edges", []);
|
|
38033
|
+
__publicField(this, "five");
|
|
38034
|
+
__publicField(this, "onModelLoaded", () => {
|
|
38035
|
+
if (!this.five.model)
|
|
38036
|
+
return;
|
|
38037
|
+
this.edges = this.five.model.getEdges();
|
|
38038
|
+
});
|
|
38039
|
+
this.five = five;
|
|
38040
|
+
this.five.model.loaded ? this.onModelLoaded() : this.five.on("modelLoaded", this.onModelLoaded);
|
|
38041
|
+
}
|
|
38042
|
+
dispose() {
|
|
38043
|
+
}
|
|
38044
|
+
getAdsorbentPoint(intersection) {
|
|
38045
|
+
if (this.edges.length === 0)
|
|
38046
|
+
return null;
|
|
38047
|
+
let distance = Infinity;
|
|
38048
|
+
let closestPoint;
|
|
38049
|
+
this.edges.forEach((line) => {
|
|
38050
|
+
const _closestPoint = line.closestPointToPoint(intersection.point, true, new Vector3$1());
|
|
38051
|
+
const _distance = _closestPoint.distanceTo(intersection.point);
|
|
38052
|
+
if (_distance < distance) {
|
|
38053
|
+
closestPoint = _closestPoint;
|
|
38054
|
+
distance = _distance;
|
|
38055
|
+
}
|
|
38056
|
+
});
|
|
38057
|
+
if (distance > 0.1)
|
|
38058
|
+
return null;
|
|
38059
|
+
return closestPoint || null;
|
|
38060
|
+
}
|
|
38061
|
+
}
|
|
38062
|
+
var hammer = { exports: {} };
|
|
38063
|
+
/*! Hammer.JS - v2.0.7 - 2016-04-22
|
|
38064
|
+
* http://hammerjs.github.io/
|
|
38065
|
+
*
|
|
38066
|
+
* Copyright (c) 2016 Jorik Tangelder;
|
|
38067
|
+
* Licensed under the MIT license */
|
|
38068
|
+
(function(module) {
|
|
38069
|
+
(function(window2, document2, exportName, undefined$1) {
|
|
38070
|
+
var VENDOR_PREFIXES = ["", "webkit", "Moz", "MS", "ms", "o"];
|
|
38071
|
+
var TEST_ELEMENT = document2.createElement("div");
|
|
38072
|
+
var TYPE_FUNCTION = "function";
|
|
38073
|
+
var round = Math.round;
|
|
38074
|
+
var abs = Math.abs;
|
|
38075
|
+
var now2 = Date.now;
|
|
38076
|
+
function setTimeoutContext(fn, timeout, context) {
|
|
38077
|
+
return setTimeout(bindFn(fn, context), timeout);
|
|
38078
|
+
}
|
|
38079
|
+
function invokeArrayArg(arg, fn, context) {
|
|
38080
|
+
if (Array.isArray(arg)) {
|
|
38081
|
+
each(arg, context[fn], context);
|
|
38082
|
+
return true;
|
|
38083
|
+
}
|
|
38084
|
+
return false;
|
|
38085
|
+
}
|
|
38086
|
+
function each(obj, iterator, context) {
|
|
38087
|
+
var i;
|
|
38088
|
+
if (!obj) {
|
|
38089
|
+
return;
|
|
38090
|
+
}
|
|
38091
|
+
if (obj.forEach) {
|
|
38092
|
+
obj.forEach(iterator, context);
|
|
38093
|
+
} else if (obj.length !== undefined$1) {
|
|
38094
|
+
i = 0;
|
|
38095
|
+
while (i < obj.length) {
|
|
38096
|
+
iterator.call(context, obj[i], i, obj);
|
|
38097
|
+
i++;
|
|
38098
|
+
}
|
|
38099
|
+
} else {
|
|
38100
|
+
for (i in obj) {
|
|
38101
|
+
obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);
|
|
38102
|
+
}
|
|
38103
|
+
}
|
|
38104
|
+
}
|
|
38105
|
+
function deprecate(method, name, message) {
|
|
38106
|
+
var deprecationMessage = "DEPRECATED METHOD: " + name + "\n" + message + " AT \n";
|
|
38107
|
+
return function() {
|
|
38108
|
+
var e = new Error("get-stack-trace");
|
|
38109
|
+
var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, "").replace(/^\s+at\s+/gm, "").replace(/^Object.<anonymous>\s*\(/gm, "{anonymous}()@") : "Unknown Stack Trace";
|
|
38110
|
+
var log = window2.console && (window2.console.warn || window2.console.log);
|
|
38111
|
+
if (log) {
|
|
38112
|
+
log.call(window2.console, deprecationMessage, stack);
|
|
38113
|
+
}
|
|
38114
|
+
return method.apply(this, arguments);
|
|
38115
|
+
};
|
|
38116
|
+
}
|
|
38117
|
+
var assign2;
|
|
38118
|
+
if (typeof Object.assign !== "function") {
|
|
38119
|
+
assign2 = function assign3(target) {
|
|
38120
|
+
if (target === undefined$1 || target === null) {
|
|
38121
|
+
throw new TypeError("Cannot convert undefined or null to object");
|
|
38122
|
+
}
|
|
38123
|
+
var output = Object(target);
|
|
38124
|
+
for (var index = 1; index < arguments.length; index++) {
|
|
38125
|
+
var source = arguments[index];
|
|
38126
|
+
if (source !== undefined$1 && source !== null) {
|
|
38127
|
+
for (var nextKey in source) {
|
|
38128
|
+
if (source.hasOwnProperty(nextKey)) {
|
|
38129
|
+
output[nextKey] = source[nextKey];
|
|
38130
|
+
}
|
|
38131
|
+
}
|
|
38132
|
+
}
|
|
38133
|
+
}
|
|
38134
|
+
return output;
|
|
38135
|
+
};
|
|
38136
|
+
} else {
|
|
38137
|
+
assign2 = Object.assign;
|
|
38138
|
+
}
|
|
38139
|
+
var extend = deprecate(function extend2(dest, src, merge2) {
|
|
38140
|
+
var keys = Object.keys(src);
|
|
38141
|
+
var i = 0;
|
|
38142
|
+
while (i < keys.length) {
|
|
38143
|
+
if (!merge2 || merge2 && dest[keys[i]] === undefined$1) {
|
|
38144
|
+
dest[keys[i]] = src[keys[i]];
|
|
38145
|
+
}
|
|
38146
|
+
i++;
|
|
38147
|
+
}
|
|
38148
|
+
return dest;
|
|
38149
|
+
}, "extend", "Use `assign`.");
|
|
38150
|
+
var merge = deprecate(function merge2(dest, src) {
|
|
38151
|
+
return extend(dest, src, true);
|
|
38152
|
+
}, "merge", "Use `assign`.");
|
|
38153
|
+
function inherit(child, base, properties) {
|
|
38154
|
+
var baseP = base.prototype, childP;
|
|
38155
|
+
childP = child.prototype = Object.create(baseP);
|
|
38156
|
+
childP.constructor = child;
|
|
38157
|
+
childP._super = baseP;
|
|
38158
|
+
if (properties) {
|
|
38159
|
+
assign2(childP, properties);
|
|
38160
|
+
}
|
|
38161
|
+
}
|
|
38162
|
+
function bindFn(fn, context) {
|
|
38163
|
+
return function boundFn() {
|
|
38164
|
+
return fn.apply(context, arguments);
|
|
38165
|
+
};
|
|
38166
|
+
}
|
|
38167
|
+
function boolOrFn(val, args) {
|
|
38168
|
+
if (typeof val == TYPE_FUNCTION) {
|
|
38169
|
+
return val.apply(args ? args[0] || undefined$1 : undefined$1, args);
|
|
38170
|
+
}
|
|
38171
|
+
return val;
|
|
38172
|
+
}
|
|
38173
|
+
function ifUndefined(val1, val2) {
|
|
38174
|
+
return val1 === undefined$1 ? val2 : val1;
|
|
38175
|
+
}
|
|
38176
|
+
function addEventListeners(target, types, handler) {
|
|
38177
|
+
each(splitStr(types), function(type) {
|
|
38178
|
+
target.addEventListener(type, handler, false);
|
|
38179
|
+
});
|
|
38180
|
+
}
|
|
38181
|
+
function removeEventListeners(target, types, handler) {
|
|
38182
|
+
each(splitStr(types), function(type) {
|
|
38183
|
+
target.removeEventListener(type, handler, false);
|
|
38184
|
+
});
|
|
38185
|
+
}
|
|
38186
|
+
function hasParent(node, parent) {
|
|
38187
|
+
while (node) {
|
|
38188
|
+
if (node == parent) {
|
|
38189
|
+
return true;
|
|
38190
|
+
}
|
|
38191
|
+
node = node.parentNode;
|
|
38192
|
+
}
|
|
38193
|
+
return false;
|
|
38194
|
+
}
|
|
38195
|
+
function inStr(str, find) {
|
|
38196
|
+
return str.indexOf(find) > -1;
|
|
38197
|
+
}
|
|
38198
|
+
function splitStr(str) {
|
|
38199
|
+
return str.trim().split(/\s+/g);
|
|
38200
|
+
}
|
|
38201
|
+
function inArray(src, find, findByKey) {
|
|
38202
|
+
if (src.indexOf && !findByKey) {
|
|
38203
|
+
return src.indexOf(find);
|
|
38204
|
+
} else {
|
|
38205
|
+
var i = 0;
|
|
38206
|
+
while (i < src.length) {
|
|
38207
|
+
if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {
|
|
38208
|
+
return i;
|
|
38209
|
+
}
|
|
38210
|
+
i++;
|
|
38211
|
+
}
|
|
38212
|
+
return -1;
|
|
38213
|
+
}
|
|
38214
|
+
}
|
|
38215
|
+
function toArray(obj) {
|
|
38216
|
+
return Array.prototype.slice.call(obj, 0);
|
|
38217
|
+
}
|
|
38218
|
+
function uniqueArray(src, key, sort) {
|
|
38219
|
+
var results = [];
|
|
38220
|
+
var values = [];
|
|
38221
|
+
var i = 0;
|
|
38222
|
+
while (i < src.length) {
|
|
38223
|
+
var val = key ? src[i][key] : src[i];
|
|
38224
|
+
if (inArray(values, val) < 0) {
|
|
38225
|
+
results.push(src[i]);
|
|
38226
|
+
}
|
|
38227
|
+
values[i] = val;
|
|
38228
|
+
i++;
|
|
38229
|
+
}
|
|
38230
|
+
if (sort) {
|
|
38231
|
+
if (!key) {
|
|
38232
|
+
results = results.sort();
|
|
38233
|
+
} else {
|
|
38234
|
+
results = results.sort(function sortUniqueArray(a, b) {
|
|
38235
|
+
return a[key] > b[key];
|
|
38236
|
+
});
|
|
38237
|
+
}
|
|
38238
|
+
}
|
|
38239
|
+
return results;
|
|
38240
|
+
}
|
|
38241
|
+
function prefixed(obj, property) {
|
|
38242
|
+
var prefix, prop;
|
|
38243
|
+
var camelProp = property[0].toUpperCase() + property.slice(1);
|
|
38244
|
+
var i = 0;
|
|
38245
|
+
while (i < VENDOR_PREFIXES.length) {
|
|
38246
|
+
prefix = VENDOR_PREFIXES[i];
|
|
38247
|
+
prop = prefix ? prefix + camelProp : property;
|
|
38248
|
+
if (prop in obj) {
|
|
38249
|
+
return prop;
|
|
38250
|
+
}
|
|
38251
|
+
i++;
|
|
38252
|
+
}
|
|
38253
|
+
return undefined$1;
|
|
38254
|
+
}
|
|
38255
|
+
var _uniqueId = 1;
|
|
38256
|
+
function uniqueId() {
|
|
38257
|
+
return _uniqueId++;
|
|
38258
|
+
}
|
|
38259
|
+
function getWindowForElement(element2) {
|
|
38260
|
+
var doc = element2.ownerDocument || element2;
|
|
38261
|
+
return doc.defaultView || doc.parentWindow || window2;
|
|
38262
|
+
}
|
|
38263
|
+
var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;
|
|
38264
|
+
var SUPPORT_TOUCH = "ontouchstart" in window2;
|
|
38265
|
+
var SUPPORT_POINTER_EVENTS = prefixed(window2, "PointerEvent") !== undefined$1;
|
|
38266
|
+
var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);
|
|
38267
|
+
var INPUT_TYPE_TOUCH = "touch";
|
|
38268
|
+
var INPUT_TYPE_PEN = "pen";
|
|
38269
|
+
var INPUT_TYPE_MOUSE = "mouse";
|
|
38270
|
+
var INPUT_TYPE_KINECT = "kinect";
|
|
38271
|
+
var COMPUTE_INTERVAL = 25;
|
|
38272
|
+
var INPUT_START = 1;
|
|
38273
|
+
var INPUT_MOVE = 2;
|
|
38274
|
+
var INPUT_END = 4;
|
|
38275
|
+
var INPUT_CANCEL = 8;
|
|
38276
|
+
var DIRECTION_NONE = 1;
|
|
38277
|
+
var DIRECTION_LEFT = 2;
|
|
38278
|
+
var DIRECTION_RIGHT = 4;
|
|
38279
|
+
var DIRECTION_UP = 8;
|
|
38280
|
+
var DIRECTION_DOWN = 16;
|
|
38281
|
+
var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;
|
|
38282
|
+
var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;
|
|
38283
|
+
var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;
|
|
38284
|
+
var PROPS_XY = ["x", "y"];
|
|
38285
|
+
var PROPS_CLIENT_XY = ["clientX", "clientY"];
|
|
38286
|
+
function Input(manager, callback) {
|
|
38287
|
+
var self2 = this;
|
|
38288
|
+
this.manager = manager;
|
|
38289
|
+
this.callback = callback;
|
|
38290
|
+
this.element = manager.element;
|
|
38291
|
+
this.target = manager.options.inputTarget;
|
|
38292
|
+
this.domHandler = function(ev) {
|
|
38293
|
+
if (boolOrFn(manager.options.enable, [manager])) {
|
|
38294
|
+
self2.handler(ev);
|
|
38295
|
+
}
|
|
38296
|
+
};
|
|
38297
|
+
this.init();
|
|
38298
|
+
}
|
|
38299
|
+
Input.prototype = {
|
|
38300
|
+
handler: function() {
|
|
38301
|
+
},
|
|
38302
|
+
init: function() {
|
|
38303
|
+
this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);
|
|
38304
|
+
this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);
|
|
38305
|
+
this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
|
|
38306
|
+
},
|
|
38307
|
+
destroy: function() {
|
|
38308
|
+
this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);
|
|
38309
|
+
this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);
|
|
38310
|
+
this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
|
|
38311
|
+
}
|
|
38312
|
+
};
|
|
38313
|
+
function createInputInstance(manager) {
|
|
38314
|
+
var Type;
|
|
38315
|
+
var inputClass = manager.options.inputClass;
|
|
38316
|
+
if (inputClass) {
|
|
38317
|
+
Type = inputClass;
|
|
38318
|
+
} else if (SUPPORT_POINTER_EVENTS) {
|
|
38319
|
+
Type = PointerEventInput;
|
|
38320
|
+
} else if (SUPPORT_ONLY_TOUCH) {
|
|
38321
|
+
Type = TouchInput;
|
|
38322
|
+
} else if (!SUPPORT_TOUCH) {
|
|
38323
|
+
Type = MouseInput;
|
|
38324
|
+
} else {
|
|
38325
|
+
Type = TouchMouseInput;
|
|
38326
|
+
}
|
|
38327
|
+
return new Type(manager, inputHandler);
|
|
38328
|
+
}
|
|
38329
|
+
function inputHandler(manager, eventType, input) {
|
|
38330
|
+
var pointersLen = input.pointers.length;
|
|
38331
|
+
var changedPointersLen = input.changedPointers.length;
|
|
38332
|
+
var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;
|
|
38333
|
+
var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;
|
|
38334
|
+
input.isFirst = !!isFirst;
|
|
38335
|
+
input.isFinal = !!isFinal;
|
|
38336
|
+
if (isFirst) {
|
|
38337
|
+
manager.session = {};
|
|
38338
|
+
}
|
|
38339
|
+
input.eventType = eventType;
|
|
38340
|
+
computeInputData(manager, input);
|
|
38341
|
+
manager.emit("hammer.input", input);
|
|
38342
|
+
manager.recognize(input);
|
|
38343
|
+
manager.session.prevInput = input;
|
|
38344
|
+
}
|
|
38345
|
+
function computeInputData(manager, input) {
|
|
38346
|
+
var session = manager.session;
|
|
38347
|
+
var pointers = input.pointers;
|
|
38348
|
+
var pointersLength = pointers.length;
|
|
38349
|
+
if (!session.firstInput) {
|
|
38350
|
+
session.firstInput = simpleCloneInputData(input);
|
|
38351
|
+
}
|
|
38352
|
+
if (pointersLength > 1 && !session.firstMultiple) {
|
|
38353
|
+
session.firstMultiple = simpleCloneInputData(input);
|
|
38354
|
+
} else if (pointersLength === 1) {
|
|
38355
|
+
session.firstMultiple = false;
|
|
38356
|
+
}
|
|
38357
|
+
var firstInput = session.firstInput;
|
|
38358
|
+
var firstMultiple = session.firstMultiple;
|
|
38359
|
+
var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;
|
|
38360
|
+
var center = input.center = getCenter(pointers);
|
|
38361
|
+
input.timeStamp = now2();
|
|
38362
|
+
input.deltaTime = input.timeStamp - firstInput.timeStamp;
|
|
38363
|
+
input.angle = getAngle(offsetCenter, center);
|
|
38364
|
+
input.distance = getDistance2(offsetCenter, center);
|
|
38365
|
+
computeDeltaXY(session, input);
|
|
38366
|
+
input.offsetDirection = getDirection(input.deltaX, input.deltaY);
|
|
38367
|
+
var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);
|
|
38368
|
+
input.overallVelocityX = overallVelocity.x;
|
|
38369
|
+
input.overallVelocityY = overallVelocity.y;
|
|
38370
|
+
input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;
|
|
38371
|
+
input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;
|
|
38372
|
+
input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;
|
|
38373
|
+
input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;
|
|
38374
|
+
computeIntervalInputData(session, input);
|
|
38375
|
+
var target = manager.element;
|
|
38376
|
+
if (hasParent(input.srcEvent.target, target)) {
|
|
38377
|
+
target = input.srcEvent.target;
|
|
38378
|
+
}
|
|
38379
|
+
input.target = target;
|
|
38380
|
+
}
|
|
38381
|
+
function computeDeltaXY(session, input) {
|
|
38382
|
+
var center = input.center;
|
|
38383
|
+
var offset = session.offsetDelta || {};
|
|
38384
|
+
var prevDelta = session.prevDelta || {};
|
|
38385
|
+
var prevInput = session.prevInput || {};
|
|
38386
|
+
if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {
|
|
38387
|
+
prevDelta = session.prevDelta = {
|
|
38388
|
+
x: prevInput.deltaX || 0,
|
|
38389
|
+
y: prevInput.deltaY || 0
|
|
38390
|
+
};
|
|
38391
|
+
offset = session.offsetDelta = {
|
|
38392
|
+
x: center.x,
|
|
38393
|
+
y: center.y
|
|
38394
|
+
};
|
|
38395
|
+
}
|
|
38396
|
+
input.deltaX = prevDelta.x + (center.x - offset.x);
|
|
38397
|
+
input.deltaY = prevDelta.y + (center.y - offset.y);
|
|
38398
|
+
}
|
|
38399
|
+
function computeIntervalInputData(session, input) {
|
|
38400
|
+
var last = session.lastInterval || input, deltaTime = input.timeStamp - last.timeStamp, velocity, velocityX, velocityY, direction;
|
|
38401
|
+
if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined$1)) {
|
|
38402
|
+
var deltaX = input.deltaX - last.deltaX;
|
|
38403
|
+
var deltaY = input.deltaY - last.deltaY;
|
|
38404
|
+
var v2 = getVelocity(deltaTime, deltaX, deltaY);
|
|
38405
|
+
velocityX = v2.x;
|
|
38406
|
+
velocityY = v2.y;
|
|
38407
|
+
velocity = abs(v2.x) > abs(v2.y) ? v2.x : v2.y;
|
|
38408
|
+
direction = getDirection(deltaX, deltaY);
|
|
38409
|
+
session.lastInterval = input;
|
|
38410
|
+
} else {
|
|
38411
|
+
velocity = last.velocity;
|
|
38412
|
+
velocityX = last.velocityX;
|
|
38413
|
+
velocityY = last.velocityY;
|
|
38414
|
+
direction = last.direction;
|
|
38415
|
+
}
|
|
38416
|
+
input.velocity = velocity;
|
|
38417
|
+
input.velocityX = velocityX;
|
|
38418
|
+
input.velocityY = velocityY;
|
|
38419
|
+
input.direction = direction;
|
|
38420
|
+
}
|
|
38421
|
+
function simpleCloneInputData(input) {
|
|
38422
|
+
var pointers = [];
|
|
38423
|
+
var i = 0;
|
|
38424
|
+
while (i < input.pointers.length) {
|
|
38425
|
+
pointers[i] = {
|
|
38426
|
+
clientX: round(input.pointers[i].clientX),
|
|
38427
|
+
clientY: round(input.pointers[i].clientY)
|
|
38428
|
+
};
|
|
38429
|
+
i++;
|
|
38430
|
+
}
|
|
38431
|
+
return {
|
|
38432
|
+
timeStamp: now2(),
|
|
38433
|
+
pointers,
|
|
38434
|
+
center: getCenter(pointers),
|
|
38435
|
+
deltaX: input.deltaX,
|
|
38436
|
+
deltaY: input.deltaY
|
|
38437
|
+
};
|
|
38438
|
+
}
|
|
38439
|
+
function getCenter(pointers) {
|
|
38440
|
+
var pointersLength = pointers.length;
|
|
38441
|
+
if (pointersLength === 1) {
|
|
38442
|
+
return {
|
|
38443
|
+
x: round(pointers[0].clientX),
|
|
38444
|
+
y: round(pointers[0].clientY)
|
|
38445
|
+
};
|
|
38446
|
+
}
|
|
38447
|
+
var x = 0, y2 = 0, i = 0;
|
|
38448
|
+
while (i < pointersLength) {
|
|
38449
|
+
x += pointers[i].clientX;
|
|
38450
|
+
y2 += pointers[i].clientY;
|
|
38451
|
+
i++;
|
|
38452
|
+
}
|
|
38453
|
+
return {
|
|
38454
|
+
x: round(x / pointersLength),
|
|
38455
|
+
y: round(y2 / pointersLength)
|
|
38456
|
+
};
|
|
38457
|
+
}
|
|
38458
|
+
function getVelocity(deltaTime, x, y2) {
|
|
38459
|
+
return {
|
|
38460
|
+
x: x / deltaTime || 0,
|
|
38461
|
+
y: y2 / deltaTime || 0
|
|
38462
|
+
};
|
|
38463
|
+
}
|
|
38464
|
+
function getDirection(x, y2) {
|
|
38465
|
+
if (x === y2) {
|
|
38466
|
+
return DIRECTION_NONE;
|
|
38467
|
+
}
|
|
38468
|
+
if (abs(x) >= abs(y2)) {
|
|
38469
|
+
return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;
|
|
38470
|
+
}
|
|
38471
|
+
return y2 < 0 ? DIRECTION_UP : DIRECTION_DOWN;
|
|
38472
|
+
}
|
|
38473
|
+
function getDistance2(p1, p2, props) {
|
|
38474
|
+
if (!props) {
|
|
38475
|
+
props = PROPS_XY;
|
|
38476
|
+
}
|
|
38477
|
+
var x = p2[props[0]] - p1[props[0]], y2 = p2[props[1]] - p1[props[1]];
|
|
38478
|
+
return Math.sqrt(x * x + y2 * y2);
|
|
38479
|
+
}
|
|
38480
|
+
function getAngle(p1, p2, props) {
|
|
38481
|
+
if (!props) {
|
|
38482
|
+
props = PROPS_XY;
|
|
38483
|
+
}
|
|
38484
|
+
var x = p2[props[0]] - p1[props[0]], y2 = p2[props[1]] - p1[props[1]];
|
|
38485
|
+
return Math.atan2(y2, x) * 180 / Math.PI;
|
|
38486
|
+
}
|
|
38487
|
+
function getRotation(start, end) {
|
|
38488
|
+
return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);
|
|
38489
|
+
}
|
|
38490
|
+
function getScale(start, end) {
|
|
38491
|
+
return getDistance2(end[0], end[1], PROPS_CLIENT_XY) / getDistance2(start[0], start[1], PROPS_CLIENT_XY);
|
|
38492
|
+
}
|
|
38493
|
+
var MOUSE_INPUT_MAP = {
|
|
38494
|
+
mousedown: INPUT_START,
|
|
38495
|
+
mousemove: INPUT_MOVE,
|
|
38496
|
+
mouseup: INPUT_END
|
|
38497
|
+
};
|
|
38498
|
+
var MOUSE_ELEMENT_EVENTS = "mousedown";
|
|
38499
|
+
var MOUSE_WINDOW_EVENTS = "mousemove mouseup";
|
|
38500
|
+
function MouseInput() {
|
|
38501
|
+
this.evEl = MOUSE_ELEMENT_EVENTS;
|
|
38502
|
+
this.evWin = MOUSE_WINDOW_EVENTS;
|
|
38503
|
+
this.pressed = false;
|
|
38504
|
+
Input.apply(this, arguments);
|
|
38505
|
+
}
|
|
38506
|
+
inherit(MouseInput, Input, {
|
|
38507
|
+
handler: function MEhandler(ev) {
|
|
38508
|
+
var eventType = MOUSE_INPUT_MAP[ev.type];
|
|
38509
|
+
if (eventType & INPUT_START && ev.button === 0) {
|
|
38510
|
+
this.pressed = true;
|
|
38511
|
+
}
|
|
38512
|
+
if (eventType & INPUT_MOVE && ev.which !== 1) {
|
|
38513
|
+
eventType = INPUT_END;
|
|
38514
|
+
}
|
|
38515
|
+
if (!this.pressed) {
|
|
38516
|
+
return;
|
|
38517
|
+
}
|
|
38518
|
+
if (eventType & INPUT_END) {
|
|
38519
|
+
this.pressed = false;
|
|
38520
|
+
}
|
|
38521
|
+
this.callback(this.manager, eventType, {
|
|
38522
|
+
pointers: [ev],
|
|
38523
|
+
changedPointers: [ev],
|
|
38524
|
+
pointerType: INPUT_TYPE_MOUSE,
|
|
38525
|
+
srcEvent: ev
|
|
38526
|
+
});
|
|
38527
|
+
}
|
|
38528
|
+
});
|
|
38529
|
+
var POINTER_INPUT_MAP = {
|
|
38530
|
+
pointerdown: INPUT_START,
|
|
38531
|
+
pointermove: INPUT_MOVE,
|
|
38532
|
+
pointerup: INPUT_END,
|
|
38533
|
+
pointercancel: INPUT_CANCEL,
|
|
38534
|
+
pointerout: INPUT_CANCEL
|
|
38535
|
+
};
|
|
38536
|
+
var IE10_POINTER_TYPE_ENUM = {
|
|
38537
|
+
2: INPUT_TYPE_TOUCH,
|
|
38538
|
+
3: INPUT_TYPE_PEN,
|
|
38539
|
+
4: INPUT_TYPE_MOUSE,
|
|
38540
|
+
5: INPUT_TYPE_KINECT
|
|
38541
|
+
};
|
|
38542
|
+
var POINTER_ELEMENT_EVENTS = "pointerdown";
|
|
38543
|
+
var POINTER_WINDOW_EVENTS = "pointermove pointerup pointercancel";
|
|
38544
|
+
if (window2.MSPointerEvent && !window2.PointerEvent) {
|
|
38545
|
+
POINTER_ELEMENT_EVENTS = "MSPointerDown";
|
|
38546
|
+
POINTER_WINDOW_EVENTS = "MSPointerMove MSPointerUp MSPointerCancel";
|
|
38547
|
+
}
|
|
38548
|
+
function PointerEventInput() {
|
|
38549
|
+
this.evEl = POINTER_ELEMENT_EVENTS;
|
|
38550
|
+
this.evWin = POINTER_WINDOW_EVENTS;
|
|
38551
|
+
Input.apply(this, arguments);
|
|
38552
|
+
this.store = this.manager.session.pointerEvents = [];
|
|
38553
|
+
}
|
|
38554
|
+
inherit(PointerEventInput, Input, {
|
|
38555
|
+
handler: function PEhandler(ev) {
|
|
38556
|
+
var store = this.store;
|
|
38557
|
+
var removePointer = false;
|
|
38558
|
+
var eventTypeNormalized = ev.type.toLowerCase().replace("ms", "");
|
|
38559
|
+
var eventType = POINTER_INPUT_MAP[eventTypeNormalized];
|
|
38560
|
+
var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;
|
|
38561
|
+
var isTouch = pointerType == INPUT_TYPE_TOUCH;
|
|
38562
|
+
var storeIndex = inArray(store, ev.pointerId, "pointerId");
|
|
38563
|
+
if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {
|
|
38564
|
+
if (storeIndex < 0) {
|
|
38565
|
+
store.push(ev);
|
|
38566
|
+
storeIndex = store.length - 1;
|
|
38567
|
+
}
|
|
38568
|
+
} else if (eventType & (INPUT_END | INPUT_CANCEL)) {
|
|
38569
|
+
removePointer = true;
|
|
38570
|
+
}
|
|
38571
|
+
if (storeIndex < 0) {
|
|
38572
|
+
return;
|
|
38573
|
+
}
|
|
38574
|
+
store[storeIndex] = ev;
|
|
38575
|
+
this.callback(this.manager, eventType, {
|
|
38576
|
+
pointers: store,
|
|
38577
|
+
changedPointers: [ev],
|
|
38578
|
+
pointerType,
|
|
38579
|
+
srcEvent: ev
|
|
38580
|
+
});
|
|
38581
|
+
if (removePointer) {
|
|
38582
|
+
store.splice(storeIndex, 1);
|
|
38583
|
+
}
|
|
38584
|
+
}
|
|
38585
|
+
});
|
|
38586
|
+
var SINGLE_TOUCH_INPUT_MAP = {
|
|
38587
|
+
touchstart: INPUT_START,
|
|
38588
|
+
touchmove: INPUT_MOVE,
|
|
38589
|
+
touchend: INPUT_END,
|
|
38590
|
+
touchcancel: INPUT_CANCEL
|
|
38591
|
+
};
|
|
38592
|
+
var SINGLE_TOUCH_TARGET_EVENTS = "touchstart";
|
|
38593
|
+
var SINGLE_TOUCH_WINDOW_EVENTS = "touchstart touchmove touchend touchcancel";
|
|
38594
|
+
function SingleTouchInput() {
|
|
38595
|
+
this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;
|
|
38596
|
+
this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;
|
|
38597
|
+
this.started = false;
|
|
38598
|
+
Input.apply(this, arguments);
|
|
38599
|
+
}
|
|
38600
|
+
inherit(SingleTouchInput, Input, {
|
|
38601
|
+
handler: function TEhandler(ev) {
|
|
38602
|
+
var type = SINGLE_TOUCH_INPUT_MAP[ev.type];
|
|
38603
|
+
if (type === INPUT_START) {
|
|
38604
|
+
this.started = true;
|
|
38605
|
+
}
|
|
38606
|
+
if (!this.started) {
|
|
38607
|
+
return;
|
|
38608
|
+
}
|
|
38609
|
+
var touches = normalizeSingleTouches.call(this, ev, type);
|
|
38610
|
+
if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {
|
|
38611
|
+
this.started = false;
|
|
38612
|
+
}
|
|
38613
|
+
this.callback(this.manager, type, {
|
|
38614
|
+
pointers: touches[0],
|
|
38615
|
+
changedPointers: touches[1],
|
|
38616
|
+
pointerType: INPUT_TYPE_TOUCH,
|
|
38617
|
+
srcEvent: ev
|
|
38618
|
+
});
|
|
38619
|
+
}
|
|
38620
|
+
});
|
|
38621
|
+
function normalizeSingleTouches(ev, type) {
|
|
38622
|
+
var all = toArray(ev.touches);
|
|
38623
|
+
var changed = toArray(ev.changedTouches);
|
|
38624
|
+
if (type & (INPUT_END | INPUT_CANCEL)) {
|
|
38625
|
+
all = uniqueArray(all.concat(changed), "identifier", true);
|
|
38626
|
+
}
|
|
38627
|
+
return [all, changed];
|
|
38628
|
+
}
|
|
38629
|
+
var TOUCH_INPUT_MAP = {
|
|
38630
|
+
touchstart: INPUT_START,
|
|
38631
|
+
touchmove: INPUT_MOVE,
|
|
38632
|
+
touchend: INPUT_END,
|
|
38633
|
+
touchcancel: INPUT_CANCEL
|
|
38634
|
+
};
|
|
38635
|
+
var TOUCH_TARGET_EVENTS = "touchstart touchmove touchend touchcancel";
|
|
38636
|
+
function TouchInput() {
|
|
38637
|
+
this.evTarget = TOUCH_TARGET_EVENTS;
|
|
38638
|
+
this.targetIds = {};
|
|
38639
|
+
Input.apply(this, arguments);
|
|
38640
|
+
}
|
|
38641
|
+
inherit(TouchInput, Input, {
|
|
38642
|
+
handler: function MTEhandler(ev) {
|
|
38643
|
+
var type = TOUCH_INPUT_MAP[ev.type];
|
|
38644
|
+
var touches = getTouches.call(this, ev, type);
|
|
38645
|
+
if (!touches) {
|
|
38646
|
+
return;
|
|
38647
|
+
}
|
|
38648
|
+
this.callback(this.manager, type, {
|
|
38649
|
+
pointers: touches[0],
|
|
38650
|
+
changedPointers: touches[1],
|
|
38651
|
+
pointerType: INPUT_TYPE_TOUCH,
|
|
38652
|
+
srcEvent: ev
|
|
38653
|
+
});
|
|
38654
|
+
}
|
|
38655
|
+
});
|
|
38656
|
+
function getTouches(ev, type) {
|
|
38657
|
+
var allTouches = toArray(ev.touches);
|
|
38658
|
+
var targetIds = this.targetIds;
|
|
38659
|
+
if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {
|
|
38660
|
+
targetIds[allTouches[0].identifier] = true;
|
|
38661
|
+
return [allTouches, allTouches];
|
|
38662
|
+
}
|
|
38663
|
+
var i, targetTouches, changedTouches = toArray(ev.changedTouches), changedTargetTouches = [], target = this.target;
|
|
38664
|
+
targetTouches = allTouches.filter(function(touch) {
|
|
38665
|
+
return hasParent(touch.target, target);
|
|
38666
|
+
});
|
|
38667
|
+
if (type === INPUT_START) {
|
|
38668
|
+
i = 0;
|
|
38669
|
+
while (i < targetTouches.length) {
|
|
38670
|
+
targetIds[targetTouches[i].identifier] = true;
|
|
38671
|
+
i++;
|
|
38672
|
+
}
|
|
38673
|
+
}
|
|
38674
|
+
i = 0;
|
|
38675
|
+
while (i < changedTouches.length) {
|
|
38676
|
+
if (targetIds[changedTouches[i].identifier]) {
|
|
38677
|
+
changedTargetTouches.push(changedTouches[i]);
|
|
38678
|
+
}
|
|
38679
|
+
if (type & (INPUT_END | INPUT_CANCEL)) {
|
|
38680
|
+
delete targetIds[changedTouches[i].identifier];
|
|
38681
|
+
}
|
|
38682
|
+
i++;
|
|
38683
|
+
}
|
|
38684
|
+
if (!changedTargetTouches.length) {
|
|
38685
|
+
return;
|
|
38686
|
+
}
|
|
38687
|
+
return [
|
|
38688
|
+
uniqueArray(targetTouches.concat(changedTargetTouches), "identifier", true),
|
|
38689
|
+
changedTargetTouches
|
|
38690
|
+
];
|
|
38691
|
+
}
|
|
38692
|
+
var DEDUP_TIMEOUT = 2500;
|
|
38693
|
+
var DEDUP_DISTANCE = 25;
|
|
38694
|
+
function TouchMouseInput() {
|
|
38695
|
+
Input.apply(this, arguments);
|
|
38696
|
+
var handler = bindFn(this.handler, this);
|
|
38697
|
+
this.touch = new TouchInput(this.manager, handler);
|
|
38698
|
+
this.mouse = new MouseInput(this.manager, handler);
|
|
38699
|
+
this.primaryTouch = null;
|
|
38700
|
+
this.lastTouches = [];
|
|
38701
|
+
}
|
|
38702
|
+
inherit(TouchMouseInput, Input, {
|
|
38703
|
+
handler: function TMEhandler(manager, inputEvent, inputData) {
|
|
38704
|
+
var isTouch = inputData.pointerType == INPUT_TYPE_TOUCH, isMouse = inputData.pointerType == INPUT_TYPE_MOUSE;
|
|
38705
|
+
if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {
|
|
38706
|
+
return;
|
|
38707
|
+
}
|
|
38708
|
+
if (isTouch) {
|
|
38709
|
+
recordTouches.call(this, inputEvent, inputData);
|
|
38710
|
+
} else if (isMouse && isSyntheticEvent.call(this, inputData)) {
|
|
38711
|
+
return;
|
|
38712
|
+
}
|
|
38713
|
+
this.callback(manager, inputEvent, inputData);
|
|
38714
|
+
},
|
|
38715
|
+
destroy: function destroy() {
|
|
38716
|
+
this.touch.destroy();
|
|
38717
|
+
this.mouse.destroy();
|
|
38718
|
+
}
|
|
38719
|
+
});
|
|
38720
|
+
function recordTouches(eventType, eventData) {
|
|
38721
|
+
if (eventType & INPUT_START) {
|
|
38722
|
+
this.primaryTouch = eventData.changedPointers[0].identifier;
|
|
38723
|
+
setLastTouch.call(this, eventData);
|
|
38724
|
+
} else if (eventType & (INPUT_END | INPUT_CANCEL)) {
|
|
38725
|
+
setLastTouch.call(this, eventData);
|
|
38726
|
+
}
|
|
38727
|
+
}
|
|
38728
|
+
function setLastTouch(eventData) {
|
|
38729
|
+
var touch = eventData.changedPointers[0];
|
|
38730
|
+
if (touch.identifier === this.primaryTouch) {
|
|
38731
|
+
var lastTouch = { x: touch.clientX, y: touch.clientY };
|
|
38732
|
+
this.lastTouches.push(lastTouch);
|
|
38733
|
+
var lts = this.lastTouches;
|
|
38734
|
+
var removeLastTouch = function() {
|
|
38735
|
+
var i = lts.indexOf(lastTouch);
|
|
38736
|
+
if (i > -1) {
|
|
38737
|
+
lts.splice(i, 1);
|
|
38738
|
+
}
|
|
38739
|
+
};
|
|
38740
|
+
setTimeout(removeLastTouch, DEDUP_TIMEOUT);
|
|
38741
|
+
}
|
|
38742
|
+
}
|
|
38743
|
+
function isSyntheticEvent(eventData) {
|
|
38744
|
+
var x = eventData.srcEvent.clientX, y2 = eventData.srcEvent.clientY;
|
|
38745
|
+
for (var i = 0; i < this.lastTouches.length; i++) {
|
|
38746
|
+
var t2 = this.lastTouches[i];
|
|
38747
|
+
var dx = Math.abs(x - t2.x), dy = Math.abs(y2 - t2.y);
|
|
38748
|
+
if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {
|
|
38749
|
+
return true;
|
|
38750
|
+
}
|
|
38751
|
+
}
|
|
38752
|
+
return false;
|
|
38753
|
+
}
|
|
38754
|
+
var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, "touchAction");
|
|
38755
|
+
var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined$1;
|
|
38756
|
+
var TOUCH_ACTION_COMPUTE = "compute";
|
|
38757
|
+
var TOUCH_ACTION_AUTO = "auto";
|
|
38758
|
+
var TOUCH_ACTION_MANIPULATION = "manipulation";
|
|
38759
|
+
var TOUCH_ACTION_NONE = "none";
|
|
38760
|
+
var TOUCH_ACTION_PAN_X = "pan-x";
|
|
38761
|
+
var TOUCH_ACTION_PAN_Y = "pan-y";
|
|
38762
|
+
var TOUCH_ACTION_MAP = getTouchActionProps();
|
|
38763
|
+
function TouchAction(manager, value) {
|
|
38764
|
+
this.manager = manager;
|
|
38765
|
+
this.set(value);
|
|
38766
|
+
}
|
|
38767
|
+
TouchAction.prototype = {
|
|
38768
|
+
set: function(value) {
|
|
38769
|
+
if (value == TOUCH_ACTION_COMPUTE) {
|
|
38770
|
+
value = this.compute();
|
|
38771
|
+
}
|
|
38772
|
+
if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {
|
|
38773
|
+
this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;
|
|
38774
|
+
}
|
|
38775
|
+
this.actions = value.toLowerCase().trim();
|
|
38776
|
+
},
|
|
38777
|
+
update: function() {
|
|
38778
|
+
this.set(this.manager.options.touchAction);
|
|
38779
|
+
},
|
|
38780
|
+
compute: function() {
|
|
38781
|
+
var actions = [];
|
|
38782
|
+
each(this.manager.recognizers, function(recognizer) {
|
|
38783
|
+
if (boolOrFn(recognizer.options.enable, [recognizer])) {
|
|
38784
|
+
actions = actions.concat(recognizer.getTouchAction());
|
|
38785
|
+
}
|
|
38786
|
+
});
|
|
38787
|
+
return cleanTouchActions(actions.join(" "));
|
|
38788
|
+
},
|
|
38789
|
+
preventDefaults: function(input) {
|
|
38790
|
+
var srcEvent = input.srcEvent;
|
|
38791
|
+
var direction = input.offsetDirection;
|
|
38792
|
+
if (this.manager.session.prevented) {
|
|
38793
|
+
srcEvent.preventDefault();
|
|
38794
|
+
return;
|
|
38795
|
+
}
|
|
38796
|
+
var actions = this.actions;
|
|
38797
|
+
var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];
|
|
38798
|
+
var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];
|
|
38799
|
+
var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];
|
|
38800
|
+
if (hasNone) {
|
|
38801
|
+
var isTapPointer = input.pointers.length === 1;
|
|
38802
|
+
var isTapMovement = input.distance < 2;
|
|
38803
|
+
var isTapTouchTime = input.deltaTime < 250;
|
|
38804
|
+
if (isTapPointer && isTapMovement && isTapTouchTime) {
|
|
38805
|
+
return;
|
|
38806
|
+
}
|
|
38807
|
+
}
|
|
38808
|
+
if (hasPanX && hasPanY) {
|
|
38809
|
+
return;
|
|
38810
|
+
}
|
|
38811
|
+
if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {
|
|
38812
|
+
return this.preventSrc(srcEvent);
|
|
38813
|
+
}
|
|
38814
|
+
},
|
|
38815
|
+
preventSrc: function(srcEvent) {
|
|
38816
|
+
this.manager.session.prevented = true;
|
|
38817
|
+
srcEvent.preventDefault();
|
|
38818
|
+
}
|
|
38819
|
+
};
|
|
38820
|
+
function cleanTouchActions(actions) {
|
|
38821
|
+
if (inStr(actions, TOUCH_ACTION_NONE)) {
|
|
38822
|
+
return TOUCH_ACTION_NONE;
|
|
38823
|
+
}
|
|
38824
|
+
var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);
|
|
38825
|
+
var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);
|
|
38826
|
+
if (hasPanX && hasPanY) {
|
|
38827
|
+
return TOUCH_ACTION_NONE;
|
|
38828
|
+
}
|
|
38829
|
+
if (hasPanX || hasPanY) {
|
|
38830
|
+
return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;
|
|
38831
|
+
}
|
|
38832
|
+
if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {
|
|
38833
|
+
return TOUCH_ACTION_MANIPULATION;
|
|
38834
|
+
}
|
|
38835
|
+
return TOUCH_ACTION_AUTO;
|
|
38836
|
+
}
|
|
38837
|
+
function getTouchActionProps() {
|
|
38838
|
+
if (!NATIVE_TOUCH_ACTION) {
|
|
38839
|
+
return false;
|
|
38840
|
+
}
|
|
38841
|
+
var touchMap = {};
|
|
38842
|
+
var cssSupports = window2.CSS && window2.CSS.supports;
|
|
38843
|
+
["auto", "manipulation", "pan-y", "pan-x", "pan-x pan-y", "none"].forEach(function(val) {
|
|
38844
|
+
touchMap[val] = cssSupports ? window2.CSS.supports("touch-action", val) : true;
|
|
38845
|
+
});
|
|
38846
|
+
return touchMap;
|
|
38847
|
+
}
|
|
38848
|
+
var STATE_POSSIBLE = 1;
|
|
38849
|
+
var STATE_BEGAN = 2;
|
|
38850
|
+
var STATE_CHANGED = 4;
|
|
38851
|
+
var STATE_ENDED = 8;
|
|
38852
|
+
var STATE_RECOGNIZED = STATE_ENDED;
|
|
38853
|
+
var STATE_CANCELLED = 16;
|
|
38854
|
+
var STATE_FAILED = 32;
|
|
38855
|
+
function Recognizer(options) {
|
|
38856
|
+
this.options = assign2({}, this.defaults, options || {});
|
|
38857
|
+
this.id = uniqueId();
|
|
38858
|
+
this.manager = null;
|
|
38859
|
+
this.options.enable = ifUndefined(this.options.enable, true);
|
|
38860
|
+
this.state = STATE_POSSIBLE;
|
|
38861
|
+
this.simultaneous = {};
|
|
38862
|
+
this.requireFail = [];
|
|
38863
|
+
}
|
|
38864
|
+
Recognizer.prototype = {
|
|
38865
|
+
defaults: {},
|
|
38866
|
+
set: function(options) {
|
|
38867
|
+
assign2(this.options, options);
|
|
38868
|
+
this.manager && this.manager.touchAction.update();
|
|
38869
|
+
return this;
|
|
38870
|
+
},
|
|
38871
|
+
recognizeWith: function(otherRecognizer) {
|
|
38872
|
+
if (invokeArrayArg(otherRecognizer, "recognizeWith", this)) {
|
|
38873
|
+
return this;
|
|
38874
|
+
}
|
|
38875
|
+
var simultaneous = this.simultaneous;
|
|
38876
|
+
otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
|
|
38877
|
+
if (!simultaneous[otherRecognizer.id]) {
|
|
38878
|
+
simultaneous[otherRecognizer.id] = otherRecognizer;
|
|
38879
|
+
otherRecognizer.recognizeWith(this);
|
|
38880
|
+
}
|
|
38881
|
+
return this;
|
|
38882
|
+
},
|
|
38883
|
+
dropRecognizeWith: function(otherRecognizer) {
|
|
38884
|
+
if (invokeArrayArg(otherRecognizer, "dropRecognizeWith", this)) {
|
|
38885
|
+
return this;
|
|
38886
|
+
}
|
|
38887
|
+
otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
|
|
38888
|
+
delete this.simultaneous[otherRecognizer.id];
|
|
38889
|
+
return this;
|
|
38890
|
+
},
|
|
38891
|
+
requireFailure: function(otherRecognizer) {
|
|
38892
|
+
if (invokeArrayArg(otherRecognizer, "requireFailure", this)) {
|
|
38893
|
+
return this;
|
|
38894
|
+
}
|
|
38895
|
+
var requireFail = this.requireFail;
|
|
38896
|
+
otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
|
|
38897
|
+
if (inArray(requireFail, otherRecognizer) === -1) {
|
|
38898
|
+
requireFail.push(otherRecognizer);
|
|
38899
|
+
otherRecognizer.requireFailure(this);
|
|
38900
|
+
}
|
|
38901
|
+
return this;
|
|
38902
|
+
},
|
|
38903
|
+
dropRequireFailure: function(otherRecognizer) {
|
|
38904
|
+
if (invokeArrayArg(otherRecognizer, "dropRequireFailure", this)) {
|
|
38905
|
+
return this;
|
|
38906
|
+
}
|
|
38907
|
+
otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
|
|
38908
|
+
var index = inArray(this.requireFail, otherRecognizer);
|
|
38909
|
+
if (index > -1) {
|
|
38910
|
+
this.requireFail.splice(index, 1);
|
|
38911
|
+
}
|
|
38912
|
+
return this;
|
|
38913
|
+
},
|
|
38914
|
+
hasRequireFailures: function() {
|
|
38915
|
+
return this.requireFail.length > 0;
|
|
38916
|
+
},
|
|
38917
|
+
canRecognizeWith: function(otherRecognizer) {
|
|
38918
|
+
return !!this.simultaneous[otherRecognizer.id];
|
|
38919
|
+
},
|
|
38920
|
+
emit: function(input) {
|
|
38921
|
+
var self2 = this;
|
|
38922
|
+
var state = this.state;
|
|
38923
|
+
function emit(event) {
|
|
38924
|
+
self2.manager.emit(event, input);
|
|
38925
|
+
}
|
|
38926
|
+
if (state < STATE_ENDED) {
|
|
38927
|
+
emit(self2.options.event + stateStr(state));
|
|
38928
|
+
}
|
|
38929
|
+
emit(self2.options.event);
|
|
38930
|
+
if (input.additionalEvent) {
|
|
38931
|
+
emit(input.additionalEvent);
|
|
38932
|
+
}
|
|
38933
|
+
if (state >= STATE_ENDED) {
|
|
38934
|
+
emit(self2.options.event + stateStr(state));
|
|
38935
|
+
}
|
|
38936
|
+
},
|
|
38937
|
+
tryEmit: function(input) {
|
|
38938
|
+
if (this.canEmit()) {
|
|
38939
|
+
return this.emit(input);
|
|
38940
|
+
}
|
|
38941
|
+
this.state = STATE_FAILED;
|
|
38942
|
+
},
|
|
38943
|
+
canEmit: function() {
|
|
38944
|
+
var i = 0;
|
|
38945
|
+
while (i < this.requireFail.length) {
|
|
38946
|
+
if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {
|
|
38947
|
+
return false;
|
|
38948
|
+
}
|
|
38949
|
+
i++;
|
|
38950
|
+
}
|
|
38951
|
+
return true;
|
|
38952
|
+
},
|
|
38953
|
+
recognize: function(inputData) {
|
|
38954
|
+
var inputDataClone = assign2({}, inputData);
|
|
38955
|
+
if (!boolOrFn(this.options.enable, [this, inputDataClone])) {
|
|
38956
|
+
this.reset();
|
|
38957
|
+
this.state = STATE_FAILED;
|
|
38958
|
+
return;
|
|
38959
|
+
}
|
|
38960
|
+
if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {
|
|
38961
|
+
this.state = STATE_POSSIBLE;
|
|
38962
|
+
}
|
|
38963
|
+
this.state = this.process(inputDataClone);
|
|
38964
|
+
if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {
|
|
38965
|
+
this.tryEmit(inputDataClone);
|
|
38966
|
+
}
|
|
38967
|
+
},
|
|
38968
|
+
process: function(inputData) {
|
|
38969
|
+
},
|
|
38970
|
+
getTouchAction: function() {
|
|
38971
|
+
},
|
|
38972
|
+
reset: function() {
|
|
38973
|
+
}
|
|
38974
|
+
};
|
|
38975
|
+
function stateStr(state) {
|
|
38976
|
+
if (state & STATE_CANCELLED) {
|
|
38977
|
+
return "cancel";
|
|
38978
|
+
} else if (state & STATE_ENDED) {
|
|
38979
|
+
return "end";
|
|
38980
|
+
} else if (state & STATE_CHANGED) {
|
|
38981
|
+
return "move";
|
|
38982
|
+
} else if (state & STATE_BEGAN) {
|
|
38983
|
+
return "start";
|
|
38984
|
+
}
|
|
38985
|
+
return "";
|
|
38986
|
+
}
|
|
38987
|
+
function directionStr(direction) {
|
|
38988
|
+
if (direction == DIRECTION_DOWN) {
|
|
38989
|
+
return "down";
|
|
38990
|
+
} else if (direction == DIRECTION_UP) {
|
|
38991
|
+
return "up";
|
|
38992
|
+
} else if (direction == DIRECTION_LEFT) {
|
|
38993
|
+
return "left";
|
|
38994
|
+
} else if (direction == DIRECTION_RIGHT) {
|
|
38995
|
+
return "right";
|
|
38996
|
+
}
|
|
38997
|
+
return "";
|
|
38998
|
+
}
|
|
38999
|
+
function getRecognizerByNameIfManager(otherRecognizer, recognizer) {
|
|
39000
|
+
var manager = recognizer.manager;
|
|
39001
|
+
if (manager) {
|
|
39002
|
+
return manager.get(otherRecognizer);
|
|
39003
|
+
}
|
|
39004
|
+
return otherRecognizer;
|
|
39005
|
+
}
|
|
39006
|
+
function AttrRecognizer() {
|
|
39007
|
+
Recognizer.apply(this, arguments);
|
|
39008
|
+
}
|
|
39009
|
+
inherit(AttrRecognizer, Recognizer, {
|
|
39010
|
+
defaults: {
|
|
39011
|
+
pointers: 1
|
|
39012
|
+
},
|
|
39013
|
+
attrTest: function(input) {
|
|
39014
|
+
var optionPointers = this.options.pointers;
|
|
39015
|
+
return optionPointers === 0 || input.pointers.length === optionPointers;
|
|
39016
|
+
},
|
|
39017
|
+
process: function(input) {
|
|
39018
|
+
var state = this.state;
|
|
39019
|
+
var eventType = input.eventType;
|
|
39020
|
+
var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);
|
|
39021
|
+
var isValid = this.attrTest(input);
|
|
39022
|
+
if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {
|
|
39023
|
+
return state | STATE_CANCELLED;
|
|
39024
|
+
} else if (isRecognized || isValid) {
|
|
39025
|
+
if (eventType & INPUT_END) {
|
|
39026
|
+
return state | STATE_ENDED;
|
|
39027
|
+
} else if (!(state & STATE_BEGAN)) {
|
|
39028
|
+
return STATE_BEGAN;
|
|
39029
|
+
}
|
|
39030
|
+
return state | STATE_CHANGED;
|
|
39031
|
+
}
|
|
39032
|
+
return STATE_FAILED;
|
|
39033
|
+
}
|
|
39034
|
+
});
|
|
39035
|
+
function PanRecognizer() {
|
|
39036
|
+
AttrRecognizer.apply(this, arguments);
|
|
39037
|
+
this.pX = null;
|
|
39038
|
+
this.pY = null;
|
|
39039
|
+
}
|
|
39040
|
+
inherit(PanRecognizer, AttrRecognizer, {
|
|
39041
|
+
defaults: {
|
|
39042
|
+
event: "pan",
|
|
39043
|
+
threshold: 10,
|
|
39044
|
+
pointers: 1,
|
|
39045
|
+
direction: DIRECTION_ALL
|
|
39046
|
+
},
|
|
39047
|
+
getTouchAction: function() {
|
|
39048
|
+
var direction = this.options.direction;
|
|
39049
|
+
var actions = [];
|
|
39050
|
+
if (direction & DIRECTION_HORIZONTAL) {
|
|
39051
|
+
actions.push(TOUCH_ACTION_PAN_Y);
|
|
39052
|
+
}
|
|
39053
|
+
if (direction & DIRECTION_VERTICAL) {
|
|
39054
|
+
actions.push(TOUCH_ACTION_PAN_X);
|
|
39055
|
+
}
|
|
39056
|
+
return actions;
|
|
39057
|
+
},
|
|
39058
|
+
directionTest: function(input) {
|
|
39059
|
+
var options = this.options;
|
|
39060
|
+
var hasMoved = true;
|
|
39061
|
+
var distance = input.distance;
|
|
39062
|
+
var direction = input.direction;
|
|
39063
|
+
var x = input.deltaX;
|
|
39064
|
+
var y2 = input.deltaY;
|
|
39065
|
+
if (!(direction & options.direction)) {
|
|
39066
|
+
if (options.direction & DIRECTION_HORIZONTAL) {
|
|
39067
|
+
direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;
|
|
39068
|
+
hasMoved = x != this.pX;
|
|
39069
|
+
distance = Math.abs(input.deltaX);
|
|
39070
|
+
} else {
|
|
39071
|
+
direction = y2 === 0 ? DIRECTION_NONE : y2 < 0 ? DIRECTION_UP : DIRECTION_DOWN;
|
|
39072
|
+
hasMoved = y2 != this.pY;
|
|
39073
|
+
distance = Math.abs(input.deltaY);
|
|
39074
|
+
}
|
|
39075
|
+
}
|
|
39076
|
+
input.direction = direction;
|
|
39077
|
+
return hasMoved && distance > options.threshold && direction & options.direction;
|
|
39078
|
+
},
|
|
39079
|
+
attrTest: function(input) {
|
|
39080
|
+
return AttrRecognizer.prototype.attrTest.call(this, input) && (this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));
|
|
39081
|
+
},
|
|
39082
|
+
emit: function(input) {
|
|
39083
|
+
this.pX = input.deltaX;
|
|
39084
|
+
this.pY = input.deltaY;
|
|
39085
|
+
var direction = directionStr(input.direction);
|
|
39086
|
+
if (direction) {
|
|
39087
|
+
input.additionalEvent = this.options.event + direction;
|
|
39088
|
+
}
|
|
39089
|
+
this._super.emit.call(this, input);
|
|
39090
|
+
}
|
|
39091
|
+
});
|
|
39092
|
+
function PinchRecognizer() {
|
|
39093
|
+
AttrRecognizer.apply(this, arguments);
|
|
39094
|
+
}
|
|
39095
|
+
inherit(PinchRecognizer, AttrRecognizer, {
|
|
39096
|
+
defaults: {
|
|
39097
|
+
event: "pinch",
|
|
39098
|
+
threshold: 0,
|
|
39099
|
+
pointers: 2
|
|
39100
|
+
},
|
|
39101
|
+
getTouchAction: function() {
|
|
39102
|
+
return [TOUCH_ACTION_NONE];
|
|
39103
|
+
},
|
|
39104
|
+
attrTest: function(input) {
|
|
39105
|
+
return this._super.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);
|
|
39106
|
+
},
|
|
39107
|
+
emit: function(input) {
|
|
39108
|
+
if (input.scale !== 1) {
|
|
39109
|
+
var inOut = input.scale < 1 ? "in" : "out";
|
|
39110
|
+
input.additionalEvent = this.options.event + inOut;
|
|
39111
|
+
}
|
|
39112
|
+
this._super.emit.call(this, input);
|
|
39113
|
+
}
|
|
39114
|
+
});
|
|
39115
|
+
function PressRecognizer() {
|
|
39116
|
+
Recognizer.apply(this, arguments);
|
|
39117
|
+
this._timer = null;
|
|
39118
|
+
this._input = null;
|
|
39119
|
+
}
|
|
39120
|
+
inherit(PressRecognizer, Recognizer, {
|
|
39121
|
+
defaults: {
|
|
39122
|
+
event: "press",
|
|
39123
|
+
pointers: 1,
|
|
39124
|
+
time: 251,
|
|
39125
|
+
threshold: 9
|
|
39126
|
+
},
|
|
39127
|
+
getTouchAction: function() {
|
|
39128
|
+
return [TOUCH_ACTION_AUTO];
|
|
39129
|
+
},
|
|
39130
|
+
process: function(input) {
|
|
39131
|
+
var options = this.options;
|
|
39132
|
+
var validPointers = input.pointers.length === options.pointers;
|
|
39133
|
+
var validMovement = input.distance < options.threshold;
|
|
39134
|
+
var validTime = input.deltaTime > options.time;
|
|
39135
|
+
this._input = input;
|
|
39136
|
+
if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {
|
|
39137
|
+
this.reset();
|
|
39138
|
+
} else if (input.eventType & INPUT_START) {
|
|
39139
|
+
this.reset();
|
|
39140
|
+
this._timer = setTimeoutContext(function() {
|
|
39141
|
+
this.state = STATE_RECOGNIZED;
|
|
39142
|
+
this.tryEmit();
|
|
39143
|
+
}, options.time, this);
|
|
39144
|
+
} else if (input.eventType & INPUT_END) {
|
|
39145
|
+
return STATE_RECOGNIZED;
|
|
39146
|
+
}
|
|
39147
|
+
return STATE_FAILED;
|
|
39148
|
+
},
|
|
39149
|
+
reset: function() {
|
|
39150
|
+
clearTimeout(this._timer);
|
|
39151
|
+
},
|
|
39152
|
+
emit: function(input) {
|
|
39153
|
+
if (this.state !== STATE_RECOGNIZED) {
|
|
39154
|
+
return;
|
|
39155
|
+
}
|
|
39156
|
+
if (input && input.eventType & INPUT_END) {
|
|
39157
|
+
this.manager.emit(this.options.event + "up", input);
|
|
39158
|
+
} else {
|
|
39159
|
+
this._input.timeStamp = now2();
|
|
39160
|
+
this.manager.emit(this.options.event, this._input);
|
|
39161
|
+
}
|
|
39162
|
+
}
|
|
39163
|
+
});
|
|
39164
|
+
function RotateRecognizer() {
|
|
39165
|
+
AttrRecognizer.apply(this, arguments);
|
|
39166
|
+
}
|
|
39167
|
+
inherit(RotateRecognizer, AttrRecognizer, {
|
|
39168
|
+
defaults: {
|
|
39169
|
+
event: "rotate",
|
|
39170
|
+
threshold: 0,
|
|
39171
|
+
pointers: 2
|
|
39172
|
+
},
|
|
39173
|
+
getTouchAction: function() {
|
|
39174
|
+
return [TOUCH_ACTION_NONE];
|
|
39175
|
+
},
|
|
39176
|
+
attrTest: function(input) {
|
|
39177
|
+
return this._super.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);
|
|
39178
|
+
}
|
|
39179
|
+
});
|
|
39180
|
+
function SwipeRecognizer() {
|
|
39181
|
+
AttrRecognizer.apply(this, arguments);
|
|
39182
|
+
}
|
|
39183
|
+
inherit(SwipeRecognizer, AttrRecognizer, {
|
|
39184
|
+
defaults: {
|
|
39185
|
+
event: "swipe",
|
|
39186
|
+
threshold: 10,
|
|
39187
|
+
velocity: 0.3,
|
|
39188
|
+
direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,
|
|
39189
|
+
pointers: 1
|
|
39190
|
+
},
|
|
39191
|
+
getTouchAction: function() {
|
|
39192
|
+
return PanRecognizer.prototype.getTouchAction.call(this);
|
|
39193
|
+
},
|
|
39194
|
+
attrTest: function(input) {
|
|
39195
|
+
var direction = this.options.direction;
|
|
39196
|
+
var velocity;
|
|
39197
|
+
if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {
|
|
39198
|
+
velocity = input.overallVelocity;
|
|
39199
|
+
} else if (direction & DIRECTION_HORIZONTAL) {
|
|
39200
|
+
velocity = input.overallVelocityX;
|
|
39201
|
+
} else if (direction & DIRECTION_VERTICAL) {
|
|
39202
|
+
velocity = input.overallVelocityY;
|
|
39203
|
+
}
|
|
39204
|
+
return this._super.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers == this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;
|
|
39205
|
+
},
|
|
39206
|
+
emit: function(input) {
|
|
39207
|
+
var direction = directionStr(input.offsetDirection);
|
|
39208
|
+
if (direction) {
|
|
39209
|
+
this.manager.emit(this.options.event + direction, input);
|
|
39210
|
+
}
|
|
39211
|
+
this.manager.emit(this.options.event, input);
|
|
39212
|
+
}
|
|
39213
|
+
});
|
|
39214
|
+
function TapRecognizer() {
|
|
39215
|
+
Recognizer.apply(this, arguments);
|
|
39216
|
+
this.pTime = false;
|
|
39217
|
+
this.pCenter = false;
|
|
39218
|
+
this._timer = null;
|
|
39219
|
+
this._input = null;
|
|
39220
|
+
this.count = 0;
|
|
39221
|
+
}
|
|
39222
|
+
inherit(TapRecognizer, Recognizer, {
|
|
39223
|
+
defaults: {
|
|
39224
|
+
event: "tap",
|
|
39225
|
+
pointers: 1,
|
|
39226
|
+
taps: 1,
|
|
39227
|
+
interval: 300,
|
|
39228
|
+
time: 250,
|
|
39229
|
+
threshold: 9,
|
|
39230
|
+
posThreshold: 10
|
|
39231
|
+
},
|
|
39232
|
+
getTouchAction: function() {
|
|
39233
|
+
return [TOUCH_ACTION_MANIPULATION];
|
|
39234
|
+
},
|
|
39235
|
+
process: function(input) {
|
|
39236
|
+
var options = this.options;
|
|
39237
|
+
var validPointers = input.pointers.length === options.pointers;
|
|
39238
|
+
var validMovement = input.distance < options.threshold;
|
|
39239
|
+
var validTouchTime = input.deltaTime < options.time;
|
|
39240
|
+
this.reset();
|
|
39241
|
+
if (input.eventType & INPUT_START && this.count === 0) {
|
|
39242
|
+
return this.failTimeout();
|
|
39243
|
+
}
|
|
39244
|
+
if (validMovement && validTouchTime && validPointers) {
|
|
39245
|
+
if (input.eventType != INPUT_END) {
|
|
39246
|
+
return this.failTimeout();
|
|
39247
|
+
}
|
|
39248
|
+
var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;
|
|
39249
|
+
var validMultiTap = !this.pCenter || getDistance2(this.pCenter, input.center) < options.posThreshold;
|
|
39250
|
+
this.pTime = input.timeStamp;
|
|
39251
|
+
this.pCenter = input.center;
|
|
39252
|
+
if (!validMultiTap || !validInterval) {
|
|
39253
|
+
this.count = 1;
|
|
39254
|
+
} else {
|
|
39255
|
+
this.count += 1;
|
|
39256
|
+
}
|
|
39257
|
+
this._input = input;
|
|
39258
|
+
var tapCount = this.count % options.taps;
|
|
39259
|
+
if (tapCount === 0) {
|
|
39260
|
+
if (!this.hasRequireFailures()) {
|
|
39261
|
+
return STATE_RECOGNIZED;
|
|
39262
|
+
} else {
|
|
39263
|
+
this._timer = setTimeoutContext(function() {
|
|
39264
|
+
this.state = STATE_RECOGNIZED;
|
|
39265
|
+
this.tryEmit();
|
|
39266
|
+
}, options.interval, this);
|
|
39267
|
+
return STATE_BEGAN;
|
|
39268
|
+
}
|
|
39269
|
+
}
|
|
39270
|
+
}
|
|
39271
|
+
return STATE_FAILED;
|
|
39272
|
+
},
|
|
39273
|
+
failTimeout: function() {
|
|
39274
|
+
this._timer = setTimeoutContext(function() {
|
|
39275
|
+
this.state = STATE_FAILED;
|
|
39276
|
+
}, this.options.interval, this);
|
|
39277
|
+
return STATE_FAILED;
|
|
39278
|
+
},
|
|
39279
|
+
reset: function() {
|
|
39280
|
+
clearTimeout(this._timer);
|
|
39281
|
+
},
|
|
39282
|
+
emit: function() {
|
|
39283
|
+
if (this.state == STATE_RECOGNIZED) {
|
|
39284
|
+
this._input.tapCount = this.count;
|
|
39285
|
+
this.manager.emit(this.options.event, this._input);
|
|
39286
|
+
}
|
|
39287
|
+
}
|
|
39288
|
+
});
|
|
39289
|
+
function Hammer2(element2, options) {
|
|
39290
|
+
options = options || {};
|
|
39291
|
+
options.recognizers = ifUndefined(options.recognizers, Hammer2.defaults.preset);
|
|
39292
|
+
return new Manager(element2, options);
|
|
39293
|
+
}
|
|
39294
|
+
Hammer2.VERSION = "2.0.7";
|
|
39295
|
+
Hammer2.defaults = {
|
|
39296
|
+
domEvents: false,
|
|
39297
|
+
touchAction: TOUCH_ACTION_COMPUTE,
|
|
39298
|
+
enable: true,
|
|
39299
|
+
inputTarget: null,
|
|
39300
|
+
inputClass: null,
|
|
39301
|
+
preset: [
|
|
39302
|
+
[RotateRecognizer, { enable: false }],
|
|
39303
|
+
[PinchRecognizer, { enable: false }, ["rotate"]],
|
|
39304
|
+
[SwipeRecognizer, { direction: DIRECTION_HORIZONTAL }],
|
|
39305
|
+
[PanRecognizer, { direction: DIRECTION_HORIZONTAL }, ["swipe"]],
|
|
39306
|
+
[TapRecognizer],
|
|
39307
|
+
[TapRecognizer, { event: "doubletap", taps: 2 }, ["tap"]],
|
|
39308
|
+
[PressRecognizer]
|
|
39309
|
+
],
|
|
39310
|
+
cssProps: {
|
|
39311
|
+
userSelect: "none",
|
|
39312
|
+
touchSelect: "none",
|
|
39313
|
+
touchCallout: "none",
|
|
39314
|
+
contentZooming: "none",
|
|
39315
|
+
userDrag: "none",
|
|
39316
|
+
tapHighlightColor: "rgba(0,0,0,0)"
|
|
39317
|
+
}
|
|
39318
|
+
};
|
|
39319
|
+
var STOP = 1;
|
|
39320
|
+
var FORCED_STOP = 2;
|
|
39321
|
+
function Manager(element2, options) {
|
|
39322
|
+
this.options = assign2({}, Hammer2.defaults, options || {});
|
|
39323
|
+
this.options.inputTarget = this.options.inputTarget || element2;
|
|
39324
|
+
this.handlers = {};
|
|
39325
|
+
this.session = {};
|
|
39326
|
+
this.recognizers = [];
|
|
39327
|
+
this.oldCssProps = {};
|
|
39328
|
+
this.element = element2;
|
|
39329
|
+
this.input = createInputInstance(this);
|
|
39330
|
+
this.touchAction = new TouchAction(this, this.options.touchAction);
|
|
39331
|
+
toggleCssProps(this, true);
|
|
39332
|
+
each(this.options.recognizers, function(item) {
|
|
39333
|
+
var recognizer = this.add(new item[0](item[1]));
|
|
39334
|
+
item[2] && recognizer.recognizeWith(item[2]);
|
|
39335
|
+
item[3] && recognizer.requireFailure(item[3]);
|
|
39336
|
+
}, this);
|
|
39337
|
+
}
|
|
39338
|
+
Manager.prototype = {
|
|
39339
|
+
set: function(options) {
|
|
39340
|
+
assign2(this.options, options);
|
|
39341
|
+
if (options.touchAction) {
|
|
39342
|
+
this.touchAction.update();
|
|
39343
|
+
}
|
|
39344
|
+
if (options.inputTarget) {
|
|
39345
|
+
this.input.destroy();
|
|
39346
|
+
this.input.target = options.inputTarget;
|
|
39347
|
+
this.input.init();
|
|
39348
|
+
}
|
|
39349
|
+
return this;
|
|
39350
|
+
},
|
|
39351
|
+
stop: function(force) {
|
|
39352
|
+
this.session.stopped = force ? FORCED_STOP : STOP;
|
|
39353
|
+
},
|
|
39354
|
+
recognize: function(inputData) {
|
|
39355
|
+
var session = this.session;
|
|
39356
|
+
if (session.stopped) {
|
|
39357
|
+
return;
|
|
39358
|
+
}
|
|
39359
|
+
this.touchAction.preventDefaults(inputData);
|
|
39360
|
+
var recognizer;
|
|
39361
|
+
var recognizers = this.recognizers;
|
|
39362
|
+
var curRecognizer = session.curRecognizer;
|
|
39363
|
+
if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {
|
|
39364
|
+
curRecognizer = session.curRecognizer = null;
|
|
39365
|
+
}
|
|
39366
|
+
var i = 0;
|
|
39367
|
+
while (i < recognizers.length) {
|
|
39368
|
+
recognizer = recognizers[i];
|
|
39369
|
+
if (session.stopped !== FORCED_STOP && (!curRecognizer || recognizer == curRecognizer || recognizer.canRecognizeWith(curRecognizer))) {
|
|
39370
|
+
recognizer.recognize(inputData);
|
|
39371
|
+
} else {
|
|
39372
|
+
recognizer.reset();
|
|
39373
|
+
}
|
|
39374
|
+
if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {
|
|
39375
|
+
curRecognizer = session.curRecognizer = recognizer;
|
|
39376
|
+
}
|
|
39377
|
+
i++;
|
|
39378
|
+
}
|
|
39379
|
+
},
|
|
39380
|
+
get: function(recognizer) {
|
|
39381
|
+
if (recognizer instanceof Recognizer) {
|
|
39382
|
+
return recognizer;
|
|
39383
|
+
}
|
|
39384
|
+
var recognizers = this.recognizers;
|
|
39385
|
+
for (var i = 0; i < recognizers.length; i++) {
|
|
39386
|
+
if (recognizers[i].options.event == recognizer) {
|
|
39387
|
+
return recognizers[i];
|
|
39388
|
+
}
|
|
39389
|
+
}
|
|
39390
|
+
return null;
|
|
39391
|
+
},
|
|
39392
|
+
add: function(recognizer) {
|
|
39393
|
+
if (invokeArrayArg(recognizer, "add", this)) {
|
|
39394
|
+
return this;
|
|
39395
|
+
}
|
|
39396
|
+
var existing = this.get(recognizer.options.event);
|
|
39397
|
+
if (existing) {
|
|
39398
|
+
this.remove(existing);
|
|
39399
|
+
}
|
|
39400
|
+
this.recognizers.push(recognizer);
|
|
39401
|
+
recognizer.manager = this;
|
|
39402
|
+
this.touchAction.update();
|
|
39403
|
+
return recognizer;
|
|
39404
|
+
},
|
|
39405
|
+
remove: function(recognizer) {
|
|
39406
|
+
if (invokeArrayArg(recognizer, "remove", this)) {
|
|
39407
|
+
return this;
|
|
39408
|
+
}
|
|
39409
|
+
recognizer = this.get(recognizer);
|
|
39410
|
+
if (recognizer) {
|
|
39411
|
+
var recognizers = this.recognizers;
|
|
39412
|
+
var index = inArray(recognizers, recognizer);
|
|
39413
|
+
if (index !== -1) {
|
|
39414
|
+
recognizers.splice(index, 1);
|
|
39415
|
+
this.touchAction.update();
|
|
39416
|
+
}
|
|
39417
|
+
}
|
|
39418
|
+
return this;
|
|
39419
|
+
},
|
|
39420
|
+
on: function(events, handler) {
|
|
39421
|
+
if (events === undefined$1) {
|
|
39422
|
+
return;
|
|
39423
|
+
}
|
|
39424
|
+
if (handler === undefined$1) {
|
|
39425
|
+
return;
|
|
39426
|
+
}
|
|
39427
|
+
var handlers = this.handlers;
|
|
39428
|
+
each(splitStr(events), function(event) {
|
|
39429
|
+
handlers[event] = handlers[event] || [];
|
|
39430
|
+
handlers[event].push(handler);
|
|
39431
|
+
});
|
|
39432
|
+
return this;
|
|
39433
|
+
},
|
|
39434
|
+
off: function(events, handler) {
|
|
39435
|
+
if (events === undefined$1) {
|
|
39436
|
+
return;
|
|
39437
|
+
}
|
|
39438
|
+
var handlers = this.handlers;
|
|
39439
|
+
each(splitStr(events), function(event) {
|
|
39440
|
+
if (!handler) {
|
|
39441
|
+
delete handlers[event];
|
|
39442
|
+
} else {
|
|
39443
|
+
handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);
|
|
39444
|
+
}
|
|
39445
|
+
});
|
|
39446
|
+
return this;
|
|
39447
|
+
},
|
|
39448
|
+
emit: function(event, data) {
|
|
39449
|
+
if (this.options.domEvents) {
|
|
39450
|
+
triggerDomEvent(event, data);
|
|
39451
|
+
}
|
|
39452
|
+
var handlers = this.handlers[event] && this.handlers[event].slice();
|
|
39453
|
+
if (!handlers || !handlers.length) {
|
|
39454
|
+
return;
|
|
39455
|
+
}
|
|
39456
|
+
data.type = event;
|
|
39457
|
+
data.preventDefault = function() {
|
|
39458
|
+
data.srcEvent.preventDefault();
|
|
39459
|
+
};
|
|
39460
|
+
var i = 0;
|
|
39461
|
+
while (i < handlers.length) {
|
|
39462
|
+
handlers[i](data);
|
|
39463
|
+
i++;
|
|
39464
|
+
}
|
|
39465
|
+
},
|
|
39466
|
+
destroy: function() {
|
|
39467
|
+
this.element && toggleCssProps(this, false);
|
|
39468
|
+
this.handlers = {};
|
|
39469
|
+
this.session = {};
|
|
39470
|
+
this.input.destroy();
|
|
39471
|
+
this.element = null;
|
|
39472
|
+
}
|
|
39473
|
+
};
|
|
39474
|
+
function toggleCssProps(manager, add2) {
|
|
39475
|
+
var element2 = manager.element;
|
|
39476
|
+
if (!element2.style) {
|
|
39477
|
+
return;
|
|
39478
|
+
}
|
|
39479
|
+
var prop;
|
|
39480
|
+
each(manager.options.cssProps, function(value, name) {
|
|
39481
|
+
prop = prefixed(element2.style, name);
|
|
39482
|
+
if (add2) {
|
|
39483
|
+
manager.oldCssProps[prop] = element2.style[prop];
|
|
39484
|
+
element2.style[prop] = value;
|
|
39485
|
+
} else {
|
|
39486
|
+
element2.style[prop] = manager.oldCssProps[prop] || "";
|
|
39487
|
+
}
|
|
39488
|
+
});
|
|
39489
|
+
if (!add2) {
|
|
39490
|
+
manager.oldCssProps = {};
|
|
39491
|
+
}
|
|
39492
|
+
}
|
|
39493
|
+
function triggerDomEvent(event, data) {
|
|
39494
|
+
var gestureEvent = document2.createEvent("Event");
|
|
39495
|
+
gestureEvent.initEvent(event, true, true);
|
|
39496
|
+
gestureEvent.gesture = data;
|
|
39497
|
+
data.target.dispatchEvent(gestureEvent);
|
|
39498
|
+
}
|
|
39499
|
+
assign2(Hammer2, {
|
|
39500
|
+
INPUT_START,
|
|
39501
|
+
INPUT_MOVE,
|
|
39502
|
+
INPUT_END,
|
|
39503
|
+
INPUT_CANCEL,
|
|
39504
|
+
STATE_POSSIBLE,
|
|
39505
|
+
STATE_BEGAN,
|
|
39506
|
+
STATE_CHANGED,
|
|
39507
|
+
STATE_ENDED,
|
|
39508
|
+
STATE_RECOGNIZED,
|
|
39509
|
+
STATE_CANCELLED,
|
|
39510
|
+
STATE_FAILED,
|
|
39511
|
+
DIRECTION_NONE,
|
|
39512
|
+
DIRECTION_LEFT,
|
|
39513
|
+
DIRECTION_RIGHT,
|
|
39514
|
+
DIRECTION_UP,
|
|
39515
|
+
DIRECTION_DOWN,
|
|
39516
|
+
DIRECTION_HORIZONTAL,
|
|
39517
|
+
DIRECTION_VERTICAL,
|
|
39518
|
+
DIRECTION_ALL,
|
|
39519
|
+
Manager,
|
|
39520
|
+
Input,
|
|
39521
|
+
TouchAction,
|
|
39522
|
+
TouchInput,
|
|
39523
|
+
MouseInput,
|
|
39524
|
+
PointerEventInput,
|
|
39525
|
+
TouchMouseInput,
|
|
39526
|
+
SingleTouchInput,
|
|
39527
|
+
Recognizer,
|
|
39528
|
+
AttrRecognizer,
|
|
39529
|
+
Tap: TapRecognizer,
|
|
39530
|
+
Pan: PanRecognizer,
|
|
39531
|
+
Swipe: SwipeRecognizer,
|
|
39532
|
+
Pinch: PinchRecognizer,
|
|
39533
|
+
Rotate: RotateRecognizer,
|
|
39534
|
+
Press: PressRecognizer,
|
|
39535
|
+
on: addEventListeners,
|
|
39536
|
+
off: removeEventListeners,
|
|
39537
|
+
each,
|
|
39538
|
+
merge,
|
|
39539
|
+
extend,
|
|
39540
|
+
assign: assign2,
|
|
39541
|
+
inherit,
|
|
39542
|
+
bindFn,
|
|
39543
|
+
prefixed
|
|
39544
|
+
});
|
|
39545
|
+
var freeGlobal = typeof window2 !== "undefined" ? window2 : typeof self !== "undefined" ? self : {};
|
|
39546
|
+
freeGlobal.Hammer = Hammer2;
|
|
39547
|
+
if (typeof undefined$1 === "function" && undefined$1.amd) {
|
|
39548
|
+
undefined$1(function() {
|
|
39549
|
+
return Hammer2;
|
|
39550
|
+
});
|
|
39551
|
+
} else if (module.exports) {
|
|
39552
|
+
module.exports = Hammer2;
|
|
39553
|
+
} else {
|
|
39554
|
+
window2[exportName] = Hammer2;
|
|
37779
39555
|
}
|
|
39556
|
+
})(window, document, "Hammer");
|
|
39557
|
+
})(hammer);
|
|
39558
|
+
var Hammer = hammer.exports;
|
|
39559
|
+
function S4() {
|
|
39560
|
+
return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1);
|
|
39561
|
+
}
|
|
39562
|
+
function uuid() {
|
|
39563
|
+
return (S4() + S4() + "-" + S4() + "-4" + S4().substr(0, 3) + "-" + S4() + "-" + S4() + S4() + S4()).toLowerCase();
|
|
39564
|
+
}
|
|
39565
|
+
class Polyline {
|
|
39566
|
+
constructor() {
|
|
39567
|
+
__publicField(this, "id", uuid());
|
|
39568
|
+
__publicField(this, "points", []);
|
|
39569
|
+
__publicField(this, "lines", []);
|
|
39570
|
+
}
|
|
39571
|
+
push(line) {
|
|
39572
|
+
const next = this.getNext(line);
|
|
39573
|
+
if (!next)
|
|
39574
|
+
throw new Error("\u5F53\u524D\u7EBF\u6BB5\u4E8E\u4E0A\u4E00\u6761\u7EBF\u6BB5\u65E0\u6CD5\u6784\u6210\u6298\u7EBF");
|
|
39575
|
+
this.lines.push(next.line);
|
|
39576
|
+
this.points.push(...next.points);
|
|
39577
|
+
return this.lines.length;
|
|
39578
|
+
}
|
|
39579
|
+
pop() {
|
|
39580
|
+
const lastPoint = this.lines.pop();
|
|
39581
|
+
const polylineLength = this.lines.length;
|
|
39582
|
+
if (polylineLength === 0)
|
|
39583
|
+
this.points.slice(0, this.points.length);
|
|
39584
|
+
else
|
|
39585
|
+
this.points.pop();
|
|
39586
|
+
return lastPoint;
|
|
39587
|
+
}
|
|
39588
|
+
getNext(line) {
|
|
39589
|
+
const lastPoint = this.points.slice(-1)[0];
|
|
39590
|
+
if (!lastPoint)
|
|
39591
|
+
return { line, points: line.points };
|
|
39592
|
+
if (!line.points.includes(lastPoint))
|
|
39593
|
+
return null;
|
|
39594
|
+
const nextPoint = line.points.find((point) => point !== lastPoint);
|
|
39595
|
+
if (!nextPoint)
|
|
39596
|
+
return null;
|
|
39597
|
+
return { line, points: [nextPoint] };
|
|
39598
|
+
}
|
|
39599
|
+
toJson() {
|
|
39600
|
+
return {
|
|
39601
|
+
id: this.id,
|
|
39602
|
+
lines: this.lines.map((line) => line.id),
|
|
39603
|
+
points: this.points.map((point) => point.id)
|
|
39604
|
+
};
|
|
39605
|
+
}
|
|
39606
|
+
toCompletelyJson() {
|
|
39607
|
+
return {
|
|
39608
|
+
id: this.id,
|
|
39609
|
+
points: this.points.map((point) => point.toJson()),
|
|
39610
|
+
lines: this.lines.map((line) => line.toCompletelyJson())
|
|
39611
|
+
};
|
|
37780
39612
|
}
|
|
37781
|
-
|
|
37782
|
-
|
|
39613
|
+
}
|
|
39614
|
+
const lineWidth = 2;
|
|
39615
|
+
const lightLineWidth = 4;
|
|
39616
|
+
const lineColor = new Color$1(16777215);
|
|
39617
|
+
const lightLineColor = new Color$1(2981119);
|
|
39618
|
+
const pointColor = new Color$1(16777215);
|
|
39619
|
+
const lightPointColor = new Color$1(2981119);
|
|
39620
|
+
const pointSize = 8;
|
|
39621
|
+
const lightPointSize = 16;
|
|
39622
|
+
const pointImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgBAMAAACBVGfHAAAAIVBMVEUAAAD////////////////////////////////////////PIev5AAAACnRSTlMAG/Py2baba05un7UgfgAAAHJJREFUKM9joBpgLHVSCRdA4metAoJlCJHmVWBgAeNzroKCCVCBLpjACqgJVjCBxRBT2FbBQQJYQAohsBAsUIUQWA4WiEIILAULeCEEloAFtBACizAEMLRgGIphLabDMJ2O6TlM72MGECIIMQIZIxqoBQCPvpJ/e9FaAAAAAABJRU5ErkJggg==";
|
|
39623
|
+
const pointTexture = new TextureLoader$1().load(pointImage);
|
|
39624
|
+
const normalLineOpts = {
|
|
39625
|
+
pointTexture,
|
|
39626
|
+
pointSize,
|
|
39627
|
+
lineWidth,
|
|
39628
|
+
lineColor,
|
|
39629
|
+
pointColor,
|
|
39630
|
+
lineRenderOrder: 20,
|
|
39631
|
+
pointsRenderOrder: 20
|
|
39632
|
+
};
|
|
39633
|
+
Object.assign({}, normalLineOpts, { dashed: true });
|
|
39634
|
+
const lightLineOpts = {
|
|
39635
|
+
pointTexture,
|
|
39636
|
+
pointSize: lightPointSize,
|
|
39637
|
+
lineWidth: lightLineWidth,
|
|
39638
|
+
lineColor: lightLineColor,
|
|
39639
|
+
pointColor: lightPointColor,
|
|
39640
|
+
lineRenderOrder: 10,
|
|
39641
|
+
pointsRenderOrder: 10
|
|
39642
|
+
};
|
|
39643
|
+
function creatLine(start, end, opts) {
|
|
39644
|
+
var _a, _b, _c, _d, _e;
|
|
39645
|
+
const lineWidth2 = (_a = opts == null ? void 0 : opts.lineWidth) != null ? _a : 2;
|
|
39646
|
+
const lineColor2 = (_b = opts == null ? void 0 : opts.lineColor) != null ? _b : new Color$1(16777215);
|
|
39647
|
+
const pointSize2 = (_c = opts == null ? void 0 : opts.pointSize) != null ? _c : 5;
|
|
39648
|
+
const lineRenderOrder = (_d = opts == null ? void 0 : opts.lineRenderOrder) != null ? _d : 10;
|
|
39649
|
+
const pointsRenderOrder = (_e = opts == null ? void 0 : opts.lineRenderOrder) != null ? _e : 20;
|
|
39650
|
+
const line = new Line$2(start, end);
|
|
39651
|
+
line.setMaterial({ linewidth: lineWidth2, color: lineColor2 });
|
|
39652
|
+
line.line.material.depthTest = false;
|
|
39653
|
+
line.line.material.transparent = true;
|
|
39654
|
+
line.line.renderOrder = lineRenderOrder;
|
|
39655
|
+
line.points.renderOrder = pointsRenderOrder;
|
|
39656
|
+
const pointMaterial = line.points.material;
|
|
39657
|
+
pointMaterial.depthTest = false;
|
|
39658
|
+
pointMaterial.size = pointSize2;
|
|
39659
|
+
(opts == null ? void 0 : opts.pointColor) && pointMaterial.color.set(opts.pointColor).convertSRGBToLinear();
|
|
39660
|
+
if (opts == null ? void 0 : opts.pointTexture)
|
|
39661
|
+
pointMaterial.map = opts.pointTexture;
|
|
39662
|
+
return line;
|
|
39663
|
+
}
|
|
39664
|
+
function creatLineMesh(line, type) {
|
|
39665
|
+
const [point, anotherPoint] = line.points;
|
|
39666
|
+
const opts = type === "light" ? lightLineOpts : normalLineOpts;
|
|
39667
|
+
const fiveLine = creatLine(point.position, anotherPoint.position, opts);
|
|
39668
|
+
fiveLine.name = "normalLine_" + line.id;
|
|
39669
|
+
return fiveLine;
|
|
39670
|
+
}
|
|
39671
|
+
function isNDCPointInScreen(ndcPoint) {
|
|
39672
|
+
const { x, y: y2, z } = ndcPoint;
|
|
39673
|
+
if (Math.abs(x) > 1 || Math.abs(y2) > 1 || Math.abs(z) > 1)
|
|
39674
|
+
return false;
|
|
39675
|
+
return true;
|
|
39676
|
+
}
|
|
39677
|
+
function creatContentDom() {
|
|
39678
|
+
const contentDom = document.createElement("div");
|
|
39679
|
+
contentDom.style.height = "24px";
|
|
39680
|
+
contentDom.style.width = "62px";
|
|
39681
|
+
contentDom.style.lineHeight = "24px";
|
|
39682
|
+
contentDom.style.textAlign = "center";
|
|
39683
|
+
contentDom.style.transform = "translate(-50%, -50%)";
|
|
39684
|
+
contentDom.style.borderRadius = "12px";
|
|
39685
|
+
contentDom.style.fontSize = "14px";
|
|
39686
|
+
contentDom.style.color = "#000000";
|
|
39687
|
+
contentDom.style.background = "#fff";
|
|
39688
|
+
contentDom.style.pointerEvents = "all";
|
|
39689
|
+
contentDom.style.cursor = "pointer";
|
|
39690
|
+
return contentDom;
|
|
39691
|
+
}
|
|
39692
|
+
function createContainerDom(line) {
|
|
39693
|
+
const containerDom = document.createElement("div");
|
|
39694
|
+
containerDom.id = "distance_" + line.id;
|
|
39695
|
+
containerDom.classList.add("five-plugin-measure__distance");
|
|
39696
|
+
containerDom.style.opacity = "0";
|
|
39697
|
+
containerDom.style.position = "absolute";
|
|
39698
|
+
containerDom.style.left = "0";
|
|
39699
|
+
containerDom.style.top = "0";
|
|
39700
|
+
containerDom.style.transform = "translate3d(0, 0, 0)";
|
|
39701
|
+
return containerDom;
|
|
39702
|
+
}
|
|
39703
|
+
function creatDistanceItem(props) {
|
|
39704
|
+
function handleClick() {
|
|
39705
|
+
var _a;
|
|
39706
|
+
highlight();
|
|
39707
|
+
(_a = props.clickCallback) == null ? void 0 : _a.call(props, distanceItem);
|
|
39708
|
+
}
|
|
39709
|
+
function highlight() {
|
|
39710
|
+
if (userDistanceItem)
|
|
39711
|
+
return userDistanceItem.highlight();
|
|
39712
|
+
contentDom.style.border = "1px solid #538FFF";
|
|
39713
|
+
contentDom.style.color = "#538FFF";
|
|
39714
|
+
}
|
|
39715
|
+
function unHighlight() {
|
|
39716
|
+
if (userDistanceItem)
|
|
39717
|
+
return userDistanceItem.unHighlight();
|
|
39718
|
+
contentDom.style.border = "none";
|
|
39719
|
+
contentDom.style.color = "#000";
|
|
39720
|
+
}
|
|
39721
|
+
function update2(five) {
|
|
39722
|
+
const fiveElement = five.getElement();
|
|
39723
|
+
if (!fiveElement)
|
|
39724
|
+
return;
|
|
39725
|
+
const screenWidth = fiveElement.clientWidth;
|
|
39726
|
+
const screenHeight = fiveElement.clientHeight;
|
|
39727
|
+
if (line.points.length < 2)
|
|
37783
39728
|
return;
|
|
37784
|
-
const
|
|
37785
|
-
const
|
|
37786
|
-
|
|
39729
|
+
const [startPoint, endPoint] = line.points;
|
|
39730
|
+
const ndcStartPosition = startPoint.position.clone().project(five.camera);
|
|
39731
|
+
const ndcEndPosition = endPoint.position.clone().project(five.camera);
|
|
39732
|
+
const ndcDomPosition = ndcStartPosition.clone().lerp(ndcEndPosition, 0.5);
|
|
39733
|
+
const visible = (() => {
|
|
39734
|
+
if (Math.abs(ndcStartPosition.z) > 1 || Math.abs(ndcEndPosition.z) > 1)
|
|
39735
|
+
return false;
|
|
39736
|
+
if (!isNDCPointInScreen(ndcStartPosition) && !isNDCPointInScreen(ndcEndPosition))
|
|
39737
|
+
return false;
|
|
39738
|
+
if (!isNDCPointInScreen(ndcDomPosition))
|
|
39739
|
+
return false;
|
|
39740
|
+
const screenStartPosition = new Vector2$1(ndcStartPosition.x * screenWidth, ndcStartPosition.y * screenHeight);
|
|
39741
|
+
const screenEndPosition = new Vector2$1(ndcEndPosition.x * screenWidth, ndcEndPosition.y * screenHeight);
|
|
39742
|
+
if (screenStartPosition.distanceTo(screenEndPosition) < 20)
|
|
39743
|
+
return false;
|
|
39744
|
+
return true;
|
|
39745
|
+
})();
|
|
39746
|
+
if (visible === false) {
|
|
39747
|
+
containerDom.style.opacity = "0";
|
|
39748
|
+
containerDom.style.pointerEvents = "none";
|
|
39749
|
+
return;
|
|
39750
|
+
}
|
|
39751
|
+
const left = (ndcDomPosition.x + 1) / 2 * screenWidth;
|
|
39752
|
+
const top = -(ndcDomPosition.y - 1) / 2 * screenHeight;
|
|
39753
|
+
containerDom.style.transform = `translate3d(${left}px, ${top}px, 10px)`;
|
|
39754
|
+
containerDom.style.opacity = "1";
|
|
39755
|
+
containerDom.style.pointerEvents = "all";
|
|
39756
|
+
if (userDistanceItem) {
|
|
39757
|
+
userDistanceItem.update({ line: line.toCompletelyJson(), polyline: line.getPolyline().toCompletelyJson() });
|
|
39758
|
+
}
|
|
39759
|
+
const distanceString = startPoint.position.clone().distanceTo(endPoint.position).toFixed(2) + "m";
|
|
39760
|
+
contentDom.innerText !== distanceString && (contentDom.innerText = distanceString);
|
|
39761
|
+
}
|
|
39762
|
+
function appendTo(container) {
|
|
39763
|
+
container.appendChild(containerDom);
|
|
39764
|
+
containerDom.addEventListener("click", handleClick);
|
|
39765
|
+
}
|
|
39766
|
+
function remove2() {
|
|
39767
|
+
contentDom.removeEventListener("click", handleClick);
|
|
39768
|
+
containerDom.remove();
|
|
39769
|
+
}
|
|
39770
|
+
const { line } = props;
|
|
39771
|
+
const lineID = line.id;
|
|
39772
|
+
const contentDom = creatContentDom();
|
|
39773
|
+
const containerDom = createContainerDom(line);
|
|
39774
|
+
const userDistanceItem = props.userDistanceItem;
|
|
39775
|
+
const ndcPosition = new Vector3$1(0, 0, 0);
|
|
39776
|
+
const distanceItem = {
|
|
39777
|
+
lineID,
|
|
39778
|
+
ndcPosition,
|
|
39779
|
+
update: update2,
|
|
39780
|
+
appendTo,
|
|
39781
|
+
remove: remove2,
|
|
39782
|
+
highlight,
|
|
39783
|
+
unHighlight
|
|
39784
|
+
};
|
|
39785
|
+
(userDistanceItem == null ? void 0 : userDistanceItem.element) ? containerDom.appendChild(userDistanceItem.element) : containerDom.appendChild(contentDom);
|
|
39786
|
+
return distanceItem;
|
|
39787
|
+
}
|
|
39788
|
+
class Line {
|
|
39789
|
+
constructor(point, anotherPoint, model) {
|
|
39790
|
+
__publicField(this, "id");
|
|
39791
|
+
__publicField(this, "selected", false);
|
|
39792
|
+
__publicField(this, "type", "line");
|
|
39793
|
+
__publicField(this, "model");
|
|
39794
|
+
__publicField(this, "mesh");
|
|
39795
|
+
__publicField(this, "points");
|
|
39796
|
+
__publicField(this, "lightMesh");
|
|
39797
|
+
__publicField(this, "hook");
|
|
39798
|
+
__publicField(this, "distanceItem");
|
|
39799
|
+
__publicField(this, "polyline");
|
|
39800
|
+
this.id = uuid();
|
|
39801
|
+
this.model = model;
|
|
39802
|
+
if (point.id === anotherPoint.id)
|
|
39803
|
+
throw new Error("\u65E0\u6548\u7684\u7EBF\u6BB5, \u4E00\u4E2A\u70B9\u65E0\u6CD5\u6784\u6210\u7EBF\u6BB5");
|
|
39804
|
+
this.hook = new Subscribe();
|
|
39805
|
+
this.points = [point, anotherPoint];
|
|
39806
|
+
this.mesh = creatLineMesh(this, "normal");
|
|
39807
|
+
this.lightMesh = creatLineMesh(this, "light");
|
|
39808
|
+
this.distanceItem = creatDistanceItem({
|
|
39809
|
+
line: this,
|
|
39810
|
+
clickCallback: () => this.hook.emit("selected", this),
|
|
39811
|
+
userDistanceItem: this.model.params.userDistanceItemCreator ? this.model.params.userDistanceItemCreator() : void 0
|
|
39812
|
+
});
|
|
39813
|
+
point.lines.push(this);
|
|
39814
|
+
anotherPoint.lines.push(this);
|
|
39815
|
+
}
|
|
39816
|
+
clear() {
|
|
39817
|
+
this.selected = false;
|
|
39818
|
+
this.polyline = void 0;
|
|
39819
|
+
}
|
|
39820
|
+
getPolyline() {
|
|
39821
|
+
if (this.polyline)
|
|
39822
|
+
return this.polyline;
|
|
39823
|
+
const modelPolyline = this.model.polylines.find((polyline2) => polyline2.lines.includes(this));
|
|
39824
|
+
this.polyline = modelPolyline;
|
|
39825
|
+
if (modelPolyline)
|
|
39826
|
+
return modelPolyline;
|
|
39827
|
+
const polyline = new Polyline();
|
|
39828
|
+
polyline.push(this);
|
|
39829
|
+
return polyline;
|
|
39830
|
+
}
|
|
39831
|
+
findAnotherPoint(point) {
|
|
39832
|
+
return this.points.find(({ id }) => id !== point.id);
|
|
39833
|
+
}
|
|
39834
|
+
toJson() {
|
|
39835
|
+
return { id: this.id, points: this.points.map(({ id }) => id) };
|
|
39836
|
+
}
|
|
39837
|
+
toCompletelyJson() {
|
|
39838
|
+
return { id: this.id, points: this.points.map((point) => point.toJson()) };
|
|
39839
|
+
}
|
|
39840
|
+
clone() {
|
|
39841
|
+
const line = new Line(this.points[0].clone(), this.points[1].clone(), this.model);
|
|
39842
|
+
return line;
|
|
39843
|
+
}
|
|
39844
|
+
}
|
|
39845
|
+
function removeArrayItem(item, array) {
|
|
39846
|
+
for (let index = 0, len = array.length; index < len; index++) {
|
|
39847
|
+
if (item === array[index])
|
|
39848
|
+
return array.splice(index, 1)[0];
|
|
39849
|
+
}
|
|
39850
|
+
}
|
|
39851
|
+
class Point {
|
|
39852
|
+
constructor(position) {
|
|
39853
|
+
__publicField(this, "id");
|
|
39854
|
+
__publicField(this, "lines");
|
|
39855
|
+
__publicField(this, "position");
|
|
39856
|
+
__publicField(this, "type", "point");
|
|
39857
|
+
this.id = uuid();
|
|
39858
|
+
this.lines = [];
|
|
39859
|
+
this.position = new Vector3$1();
|
|
39860
|
+
position instanceof Vector3$1 ? this.position.copy(position) : this.position.fromArray(position);
|
|
39861
|
+
}
|
|
39862
|
+
toJson() {
|
|
39863
|
+
return { id: this.id, lines: this.lines.map(({ id }) => id), position: this.position.toArray() };
|
|
39864
|
+
}
|
|
39865
|
+
addLine(line) {
|
|
39866
|
+
this.lines.push(line);
|
|
39867
|
+
}
|
|
39868
|
+
removeLine(line) {
|
|
39869
|
+
removeArrayItem(line, this.lines);
|
|
39870
|
+
}
|
|
39871
|
+
clone() {
|
|
39872
|
+
const point = new Point(this.position);
|
|
39873
|
+
return point;
|
|
39874
|
+
}
|
|
39875
|
+
}
|
|
39876
|
+
class Model {
|
|
39877
|
+
constructor(params) {
|
|
39878
|
+
__publicField(this, "lines", []);
|
|
39879
|
+
__publicField(this, "points", []);
|
|
39880
|
+
__publicField(this, "params");
|
|
39881
|
+
__publicField(this, "polylines", []);
|
|
39882
|
+
__publicField(this, "hook", new Subscribe());
|
|
39883
|
+
this.params = params;
|
|
39884
|
+
}
|
|
39885
|
+
addLine(line) {
|
|
39886
|
+
const [startPoint, endPoint] = line.points;
|
|
39887
|
+
if (!startPoint || !endPoint)
|
|
39888
|
+
return this;
|
|
39889
|
+
if (!this.includes(startPoint))
|
|
39890
|
+
this.points.push(startPoint);
|
|
39891
|
+
if (!this.includes(endPoint))
|
|
39892
|
+
this.points.push(endPoint);
|
|
39893
|
+
this.lines.push(line);
|
|
39894
|
+
const lastPolyline = this.polylines.find((polyline) => !!polyline.getNext(line));
|
|
39895
|
+
if (lastPolyline) {
|
|
39896
|
+
lastPolyline.push(line);
|
|
39897
|
+
} else {
|
|
39898
|
+
const polyline = new Polyline();
|
|
39899
|
+
polyline.push(line);
|
|
39900
|
+
this.polylines.push(polyline);
|
|
39901
|
+
}
|
|
39902
|
+
this.hook.emit("lineAdded", line);
|
|
39903
|
+
}
|
|
39904
|
+
removeLineByID(lineID) {
|
|
39905
|
+
const line = this.getLineByID(lineID);
|
|
39906
|
+
if (line)
|
|
39907
|
+
this.removeLine(line);
|
|
39908
|
+
}
|
|
39909
|
+
removeLine(line) {
|
|
39910
|
+
const polyline = this.polylines.find((polyline2) => polyline2.lines.includes(line));
|
|
39911
|
+
if (polyline) {
|
|
39912
|
+
if (polyline.lines.slice(-1)[0] !== line)
|
|
39913
|
+
throw new Error("\u4E0D\u80FD\u4ECE\u4E2D\u95F4\u5220\u9664\u7EBF\u6BB5");
|
|
39914
|
+
polyline.pop();
|
|
39915
|
+
if (polyline.lines.length === 0)
|
|
39916
|
+
removeArrayItem(polyline, this.polylines);
|
|
39917
|
+
}
|
|
39918
|
+
const [point, anotherPoint] = line.points;
|
|
39919
|
+
if (point.lines.length === 0)
|
|
39920
|
+
removeArrayItem(point, this.points);
|
|
39921
|
+
if (anotherPoint.lines.length === 0)
|
|
39922
|
+
removeArrayItem(anotherPoint, this.points);
|
|
39923
|
+
removeArrayItem(line, this.lines);
|
|
39924
|
+
line.clear();
|
|
39925
|
+
this.hook.emit("lineRemoved", line);
|
|
39926
|
+
return this;
|
|
39927
|
+
}
|
|
39928
|
+
mergeModel(model) {
|
|
39929
|
+
model.lines.forEach((line) => this.addLine(line));
|
|
39930
|
+
}
|
|
39931
|
+
includes(item) {
|
|
39932
|
+
if (item.type === "point") {
|
|
39933
|
+
return this.points.find(({ id }) => id === item.id) !== void 0;
|
|
39934
|
+
} else if (item.type === "line") {
|
|
39935
|
+
return this.lines.find(({ id }) => id === item.id) !== void 0;
|
|
39936
|
+
}
|
|
39937
|
+
}
|
|
39938
|
+
getPointByID(id) {
|
|
39939
|
+
return this.points.find(({ id: _id }) => _id === id);
|
|
39940
|
+
}
|
|
39941
|
+
getLineByID(id) {
|
|
39942
|
+
return this.lines.find(({ id: _id }) => _id === id);
|
|
39943
|
+
}
|
|
39944
|
+
getClosestPoint() {
|
|
39945
|
+
}
|
|
39946
|
+
parse(data) {
|
|
39947
|
+
const points = data.points.map(({ id, position }) => {
|
|
39948
|
+
const point = new Point(position);
|
|
39949
|
+
point.id = id;
|
|
39950
|
+
return point;
|
|
39951
|
+
});
|
|
39952
|
+
const lines = data.lines.map((data2) => {
|
|
39953
|
+
const [pointID, anotherPointID] = data2.points;
|
|
39954
|
+
const point = this.getPointByID.call({ points }, pointID);
|
|
39955
|
+
const anotherPoint = this.getPointByID.call({ points }, anotherPointID);
|
|
39956
|
+
if (!point || !anotherPoint)
|
|
39957
|
+
throw new Error("\u7EBF\u4E0A\u7684\u70B9\u4E0D\u5B58\u5728");
|
|
39958
|
+
const line = new Line(point, anotherPoint, this);
|
|
39959
|
+
line.id = data2.id;
|
|
39960
|
+
return line;
|
|
39961
|
+
});
|
|
39962
|
+
const polylines = data.polylines.map((polylineJson) => {
|
|
39963
|
+
const polyline = new Polyline();
|
|
39964
|
+
polylineJson.lines.forEach((lineID) => {
|
|
39965
|
+
const line = lines.find(({ id }) => id === lineID);
|
|
39966
|
+
line && polyline.push(line);
|
|
39967
|
+
});
|
|
39968
|
+
return polyline;
|
|
39969
|
+
});
|
|
39970
|
+
this.points.splice(0, this.points.length, ...points);
|
|
39971
|
+
this.lines.splice(0, this.lines.length, ...lines);
|
|
39972
|
+
this.polylines.splice(0, this.polylines.length, ...polylines);
|
|
39973
|
+
return this;
|
|
39974
|
+
}
|
|
39975
|
+
toJson() {
|
|
39976
|
+
return {
|
|
39977
|
+
points: this.points.map((point) => point.toJson()),
|
|
39978
|
+
lines: this.lines.map((line) => line.toJson()),
|
|
39979
|
+
polylines: this.polylines.map((polyline) => polyline.toJson()).filter((polylines) => polylines.lines.length > 0)
|
|
39980
|
+
};
|
|
39981
|
+
}
|
|
39982
|
+
}
|
|
39983
|
+
const preventDefault = (e) => e.preventDefault();
|
|
39984
|
+
class BaseController {
|
|
39985
|
+
constructor(params) {
|
|
39986
|
+
__publicField(this, "five");
|
|
39987
|
+
__publicField(this, "group");
|
|
39988
|
+
__publicField(this, "model");
|
|
39989
|
+
__publicField(this, "disposed", false);
|
|
39990
|
+
__publicField(this, "mouseGroup");
|
|
39991
|
+
__publicField(this, "container");
|
|
39992
|
+
__publicField(this, "fiveHelper");
|
|
39993
|
+
__publicField(this, "hook");
|
|
39994
|
+
__publicField(this, "magnifier");
|
|
39995
|
+
__publicField(this, "userDistanceItemCreator");
|
|
39996
|
+
__publicField(this, "updateDistanceUI", () => {
|
|
39997
|
+
this.model.lines.forEach((line) => line.distanceItem.update(this.five));
|
|
39998
|
+
});
|
|
39999
|
+
this.five = params.five;
|
|
40000
|
+
this.hook = params.hook;
|
|
40001
|
+
this.model = params.model;
|
|
40002
|
+
this.magnifier = params.magnifier;
|
|
40003
|
+
this.container = params.container;
|
|
40004
|
+
this.fiveHelper = params.fiveHelper;
|
|
40005
|
+
this.userDistanceItemCreator = params.userDistanceItemCreator;
|
|
40006
|
+
this.group = params.group;
|
|
40007
|
+
this.mouseGroup = params.mouseGroup;
|
|
40008
|
+
const fiveElement = this.five.getElement();
|
|
40009
|
+
if (fiveElement) {
|
|
40010
|
+
fiveElement.addEventListener("touchstart", preventDefault);
|
|
40011
|
+
fiveElement.addEventListener("contextmenu", preventDefault);
|
|
40012
|
+
}
|
|
40013
|
+
}
|
|
40014
|
+
removeLine(line) {
|
|
40015
|
+
this.group.remove(line.mesh, line.lightMesh);
|
|
40016
|
+
line.distanceItem.remove();
|
|
40017
|
+
this.five.needsRender = true;
|
|
40018
|
+
}
|
|
40019
|
+
updateMouseGroup(intersection, mesh) {
|
|
40020
|
+
if (!intersection)
|
|
40021
|
+
return this.mouseGroup;
|
|
40022
|
+
const adsorbentPoint = this.fiveHelper.getAdsorbentPoint(intersection);
|
|
40023
|
+
const viewPosition = adsorbentPoint ? adsorbentPoint : intersection.point;
|
|
40024
|
+
this.mouseGroup.position.copy(viewPosition);
|
|
40025
|
+
if (mesh) {
|
|
40026
|
+
this.mouseGroup.quaternion.copy(mesh.quaternion);
|
|
40027
|
+
} else if (intersection.face) {
|
|
40028
|
+
const normal = intersection.face.normal;
|
|
40029
|
+
const positionVector = normal.clone().multiplyScalar(0.05);
|
|
40030
|
+
const position = intersection.point.clone().add(positionVector);
|
|
40031
|
+
const lookAtVector = position.clone().add(positionVector);
|
|
40032
|
+
this.mouseGroup.lookAt(lookAtVector);
|
|
40033
|
+
}
|
|
40034
|
+
return this.mouseGroup;
|
|
40035
|
+
}
|
|
40036
|
+
dispose() {
|
|
40037
|
+
this.disposed = true;
|
|
40038
|
+
this.magnifier.dispose();
|
|
40039
|
+
this.model.lines.forEach((line) => this.removeLine(line));
|
|
40040
|
+
const fiveElement = this.five.getElement();
|
|
40041
|
+
if (fiveElement) {
|
|
40042
|
+
fiveElement.removeEventListener("touchstart", preventDefault);
|
|
40043
|
+
fiveElement.removeEventListener("contextmenu", preventDefault);
|
|
40044
|
+
}
|
|
40045
|
+
}
|
|
40046
|
+
}
|
|
40047
|
+
function getPointFromHammerEvent(event) {
|
|
40048
|
+
const { x: clientX, y: clientY } = event.center;
|
|
40049
|
+
const { clientWidth, clientHeight } = event.target;
|
|
40050
|
+
const clientRect = event.target.getBoundingClientRect();
|
|
40051
|
+
const position = new Vector2$1(clientX, clientY).sub(new Vector2$1(clientRect.left, clientRect.top));
|
|
40052
|
+
const mouse = new Vector2$1(position.x / clientWidth * 2 - 1, -(position.y / clientHeight) * 2 + 1);
|
|
40053
|
+
return { point: position, ndcPoint: mouse };
|
|
40054
|
+
}
|
|
40055
|
+
function getIntersectionFromEvent(five, event) {
|
|
40056
|
+
const mouse = getPointFromHammerEvent(event).ndcPoint;
|
|
40057
|
+
const raycaster = new Raycaster$1();
|
|
40058
|
+
raycaster.setFromCamera(mouse, five.camera);
|
|
40059
|
+
return five.model.intersectRaycaster(raycaster);
|
|
40060
|
+
}
|
|
40061
|
+
class EditController extends BaseController {
|
|
40062
|
+
constructor(params) {
|
|
40063
|
+
super(params);
|
|
40064
|
+
__publicField(this, "type", "edit");
|
|
40065
|
+
__publicField(this, "model", new Model({ userDistanceItemCreator: this.userDistanceItemCreator }));
|
|
40066
|
+
__publicField(this, "pressPoint");
|
|
40067
|
+
__publicField(this, "hasAppendDashed", false);
|
|
40068
|
+
__publicField(this, "hasAppendMouseGroup", false);
|
|
40069
|
+
__publicField(this, "fiveElement");
|
|
40070
|
+
__publicField(this, "lastPoint", null);
|
|
40071
|
+
__publicField(this, "dashed");
|
|
40072
|
+
__publicField(this, "hammer");
|
|
40073
|
+
__publicField(this, "onIntersectionUpdate", throttle((intersection, mesh) => {
|
|
40074
|
+
var _a;
|
|
40075
|
+
if (this.hasAppendMouseGroup === false) {
|
|
40076
|
+
this.group.add(this.mouseGroup);
|
|
40077
|
+
this.magnifier.appendTo(this.container);
|
|
40078
|
+
this.hasAppendMouseGroup = true;
|
|
40079
|
+
}
|
|
40080
|
+
const position = this.updateMouseGroup(intersection, mesh).position;
|
|
40081
|
+
(_a = this.pressPoint) == null ? void 0 : _a.position.copy(position);
|
|
40082
|
+
this.updateDashed();
|
|
40083
|
+
requestAnimationFrame(() => this.magnifier.updateWithPoint(this.mouseGroup.position));
|
|
40084
|
+
this.five.needsRender = true;
|
|
40085
|
+
}, 20));
|
|
40086
|
+
__publicField(this, "revoke", () => {
|
|
40087
|
+
if (this.model.lines.length === 0 && this.lastPoint) {
|
|
40088
|
+
this.lastPoint = null;
|
|
40089
|
+
this.hasAppendDashed = false;
|
|
40090
|
+
this.dashed.distanceItem.remove();
|
|
40091
|
+
this.group.remove(this.dashed.mesh);
|
|
40092
|
+
this.hook.emit("anchorChange", null);
|
|
40093
|
+
this.five.needsRender = true;
|
|
40094
|
+
return;
|
|
40095
|
+
}
|
|
40096
|
+
if (this.model.lines.length === 0 && !this.lastPoint)
|
|
40097
|
+
return;
|
|
40098
|
+
if (!this.lastPoint)
|
|
40099
|
+
return;
|
|
40100
|
+
const revokedLine = this.model.lines[this.model.lines.length - 1];
|
|
40101
|
+
const lastPoint = revokedLine.findAnotherPoint(this.lastPoint);
|
|
40102
|
+
if (!lastPoint)
|
|
40103
|
+
return;
|
|
40104
|
+
this.lastPoint = lastPoint;
|
|
40105
|
+
this.hook.emit("anchorChange", lastPoint.position);
|
|
40106
|
+
this.group.remove(revokedLine.mesh);
|
|
40107
|
+
this.model.removeLine(revokedLine);
|
|
40108
|
+
this.hasAppendMouseGroup = false;
|
|
40109
|
+
this.mouseGroup.position.copy(this.lastPoint.position);
|
|
40110
|
+
this.group.remove(this.mouseGroup);
|
|
40111
|
+
revokedLine.distanceItem.remove();
|
|
40112
|
+
this.updateDashed();
|
|
40113
|
+
this.magnifier.dispose();
|
|
40114
|
+
this.five.needsRender = true;
|
|
40115
|
+
});
|
|
40116
|
+
__publicField(this, "onMouseLeave", () => {
|
|
40117
|
+
this.magnifier.dispose();
|
|
40118
|
+
this.group.remove(this.mouseGroup);
|
|
40119
|
+
this.hasAppendMouseGroup = false;
|
|
40120
|
+
if (this.lastPoint) {
|
|
40121
|
+
this.mouseGroup.position.copy(this.lastPoint.position);
|
|
40122
|
+
this.updateDashed();
|
|
40123
|
+
}
|
|
40124
|
+
});
|
|
40125
|
+
__publicField(this, "onLineChanged", () => {
|
|
40126
|
+
this.hook.emit("editedLineChange", this.model.lines.map((line) => line.toCompletelyJson()));
|
|
40127
|
+
});
|
|
40128
|
+
__publicField(this, "onPress", (e) => {
|
|
40129
|
+
const [intersection] = getIntersectionFromEvent(this.five, e);
|
|
40130
|
+
if (!intersection || !intersection.face)
|
|
40131
|
+
return;
|
|
40132
|
+
const nowPoint = new Point(intersection.point);
|
|
40133
|
+
this.pressPoint = nowPoint;
|
|
40134
|
+
this.onIntersectionUpdate(intersection);
|
|
40135
|
+
});
|
|
40136
|
+
__publicField(this, "onPan", (e) => {
|
|
40137
|
+
if (!this.pressPoint)
|
|
40138
|
+
return;
|
|
40139
|
+
const [intersection] = getIntersectionFromEvent(this.five, e);
|
|
40140
|
+
if (!intersection || !intersection.face)
|
|
40141
|
+
return;
|
|
40142
|
+
this.onIntersectionUpdate(intersection);
|
|
40143
|
+
});
|
|
40144
|
+
__publicField(this, "onPanEnd", (e) => {
|
|
40145
|
+
if (!this.pressPoint)
|
|
40146
|
+
return;
|
|
40147
|
+
this.onTap(e);
|
|
40148
|
+
});
|
|
40149
|
+
__publicField(this, "onTap", (e) => {
|
|
40150
|
+
if (!this.hasAppendDashed) {
|
|
40151
|
+
this.dashed.distanceItem.appendTo(this.container);
|
|
40152
|
+
this.group.add(this.dashed.mesh);
|
|
40153
|
+
}
|
|
40154
|
+
this.hasAppendDashed = true;
|
|
40155
|
+
const [intersection] = getIntersectionFromEvent(this.five, e);
|
|
40156
|
+
this.updateMouseGroup(intersection);
|
|
40157
|
+
const nowPoint = new Point(this.mouseGroup.position);
|
|
40158
|
+
const lastPoint = this.lastPoint;
|
|
40159
|
+
if (nowPoint)
|
|
40160
|
+
this.lastPoint = nowPoint;
|
|
40161
|
+
if (nowPoint && lastPoint) {
|
|
40162
|
+
const line = new Line(lastPoint, nowPoint, this.model);
|
|
40163
|
+
line.distanceItem.appendTo(this.container);
|
|
40164
|
+
this.model.addLine(line);
|
|
40165
|
+
this.group.add(line.mesh);
|
|
40166
|
+
line.distanceItem.update(this.five);
|
|
40167
|
+
}
|
|
40168
|
+
this.pressPoint = void 0;
|
|
40169
|
+
this.hasAppendMouseGroup = false;
|
|
40170
|
+
this.magnifier.dispose();
|
|
40171
|
+
this.group.remove(this.mouseGroup);
|
|
40172
|
+
this.updateDashed();
|
|
40173
|
+
this.five.needsRender = true;
|
|
40174
|
+
this.hook.emit("anchorChange", nowPoint.position);
|
|
40175
|
+
});
|
|
40176
|
+
__publicField(this, "onWantsTapGesture", () => false);
|
|
40177
|
+
__publicField(this, "onWantsToMoveToPano", () => false);
|
|
40178
|
+
__publicField(this, "onWantsPanGesture", () => this.pressPoint ? false : void 0);
|
|
40179
|
+
__publicField(this, "onCameraUpdate", () => {
|
|
40180
|
+
this.updateDistanceUI();
|
|
40181
|
+
this.dashed.distanceItem.update(this.five);
|
|
40182
|
+
});
|
|
40183
|
+
__publicField(this, "updateDashed", () => {
|
|
40184
|
+
if (!this.lastPoint)
|
|
40185
|
+
return;
|
|
40186
|
+
this.dashed.points[0].position.copy(this.lastPoint.position);
|
|
40187
|
+
this.dashed.points[1].position.copy(this.mouseGroup.position);
|
|
40188
|
+
this.dashed.mesh.setPoints(this.lastPoint.position, this.mouseGroup.position);
|
|
40189
|
+
this.dashed.distanceItem.update(this.five);
|
|
40190
|
+
});
|
|
40191
|
+
var _a;
|
|
40192
|
+
this.dashed = new Line(new Point([0, 0, 0]), new Point([0, 0, 0]), this.model);
|
|
40193
|
+
this.dashed.mesh.setMaterial({ dashed: true, dashScale: 100 });
|
|
40194
|
+
this.five.on("cameraUpdate", this.onCameraUpdate);
|
|
40195
|
+
this.five.on("wantsPanGesture", this.onWantsPanGesture);
|
|
40196
|
+
this.five.on("wantsTapGesture", this.onWantsTapGesture);
|
|
40197
|
+
this.five.on("wantsToMoveToPano", this.onWantsToMoveToPano);
|
|
40198
|
+
this.five.on("intersectionOnModelUpdate", this.onIntersectionUpdate);
|
|
40199
|
+
this.model.hook.on("lineAdded", this.onLineChanged);
|
|
40200
|
+
this.model.hook.on("lineRemoved", this.onLineChanged);
|
|
40201
|
+
const fiveElement = this.five.getElement();
|
|
40202
|
+
if (fiveElement) {
|
|
40203
|
+
this.fiveElement = fiveElement;
|
|
40204
|
+
const hammer2 = new Hammer(fiveElement);
|
|
40205
|
+
this.hammer = hammer2;
|
|
40206
|
+
hammer2.on("tap", this.onTap);
|
|
40207
|
+
hammer2.on("pan", this.onPan);
|
|
40208
|
+
hammer2.on("press", this.onPress);
|
|
40209
|
+
hammer2.on("panend", this.onPanEnd);
|
|
40210
|
+
}
|
|
40211
|
+
(_a = this.fiveElement) == null ? void 0 : _a.addEventListener("mouseleave", this.onMouseLeave);
|
|
40212
|
+
this.hook.emit("anchorChange", null);
|
|
40213
|
+
this.five.refresh();
|
|
40214
|
+
}
|
|
40215
|
+
dispose() {
|
|
40216
|
+
var _a, _b;
|
|
40217
|
+
super.dispose();
|
|
40218
|
+
this.group.remove(this.mouseGroup, this.dashed.mesh);
|
|
40219
|
+
this.five.off("cameraUpdate", this.onCameraUpdate);
|
|
40220
|
+
this.five.off("wantsPanGesture", this.onWantsPanGesture);
|
|
40221
|
+
this.five.off("wantsTapGesture", this.onWantsTapGesture);
|
|
40222
|
+
this.five.off("wantsToMoveToPano", this.onWantsToMoveToPano);
|
|
40223
|
+
this.five.off("intersectionOnModelUpdate", this.onIntersectionUpdate);
|
|
40224
|
+
this.model.hook.off("lineAdded", this.onLineChanged);
|
|
40225
|
+
this.model.hook.off("lineRemoved", this.onLineChanged);
|
|
40226
|
+
(_a = this.hammer) == null ? void 0 : _a.destroy();
|
|
40227
|
+
(_b = this.fiveElement) == null ? void 0 : _b.removeEventListener("mouseleave", this.onMouseLeave);
|
|
40228
|
+
this.magnifier.dispose();
|
|
40229
|
+
this.dashed.distanceItem.remove();
|
|
37787
40230
|
this.five.needsRender = true;
|
|
37788
40231
|
}
|
|
37789
|
-
|
|
37790
|
-
|
|
40232
|
+
getEditingLines() {
|
|
40233
|
+
return this.model.lines;
|
|
40234
|
+
}
|
|
40235
|
+
}
|
|
40236
|
+
const svg = `<svg class="fpm__delete-icon" width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
|
|
40237
|
+
<defs>
|
|
40238
|
+
<linearGradient x1="21.443%" y1="100%" x2="67.281%" y2="6.672%" id="a">
|
|
40239
|
+
<stop stop-color="#FFFCFC" stop-opacity=".6" offset="0%" />
|
|
40240
|
+
<stop stop-color="#FFF" offset="100%" />
|
|
40241
|
+
</linearGradient>
|
|
40242
|
+
</defs>
|
|
40243
|
+
<path
|
|
40244
|
+
d="M14.932 3.545a.75.75 0 0 1 .102 1.494l-.102.006H13.83l-.979 8.813a2.05 2.05 0 0 1-1.882 1.818l-.155.006H4.868a2.05 2.05 0 0 1-2.037-1.824l-.98-8.813H.75a.75.75 0 0 1-.102-1.493l.102-.007h14.182zm-2.611 1.5H3.36l.961 8.648a.55.55 0 0 0 .369.46l.087.021.091.008h5.946a.55.55 0 0 0 .546-.49l.961-8.647zM10.795 0a.75.75 0 0 1 .102 1.493l-.102.007H4.886A.75.75 0 0 1 4.785.007L4.886 0h5.91z"
|
|
40245
|
+
transform="translate(2.16 2.16)"
|
|
40246
|
+
fill="url(#a)"
|
|
40247
|
+
fill-rule="nonzero"
|
|
40248
|
+
/>
|
|
40249
|
+
</svg>`;
|
|
40250
|
+
const image$1 = `data:image/png;base64,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`;
|
|
40251
|
+
const image = `data:image/png;base64,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`;
|
|
40252
|
+
class DeleteDom {
|
|
40253
|
+
constructor(five, opts) {
|
|
40254
|
+
__publicField(this, "visible", false);
|
|
40255
|
+
__publicField(this, "five");
|
|
40256
|
+
__publicField(this, "lines", []);
|
|
40257
|
+
__publicField(this, "points", []);
|
|
40258
|
+
__publicField(this, "onClick");
|
|
40259
|
+
__publicField(this, "content", document.createElement("div"));
|
|
40260
|
+
__publicField(this, "container", document.createElement("div"));
|
|
40261
|
+
__publicField(this, "onMouseEnter", () => {
|
|
40262
|
+
this.content.style.backgroundImage = `url(${image})`;
|
|
40263
|
+
});
|
|
40264
|
+
__publicField(this, "onMouseLeave", () => {
|
|
40265
|
+
this.content.style.backgroundImage = `url(${image$1})`;
|
|
40266
|
+
});
|
|
40267
|
+
this.five = five;
|
|
40268
|
+
this.onClick = (opts == null ? void 0 : opts.onClick) || (() => void 0);
|
|
40269
|
+
this.container.classList.add("fpm__delete");
|
|
40270
|
+
this.container.style.opacity = "0";
|
|
40271
|
+
this.container.style.position = "absolute";
|
|
40272
|
+
this.container.style.left = "0";
|
|
40273
|
+
this.container.style.top = "0";
|
|
40274
|
+
this.container.style.transform = `translate3d(0, 0, 10px)`;
|
|
40275
|
+
this.container.style.pointerEvents = `none`;
|
|
40276
|
+
this.content.classList.add("fpm__delete-content");
|
|
40277
|
+
this.content.style.width = "67px";
|
|
40278
|
+
this.content.style.height = "31px";
|
|
40279
|
+
this.content.style.display = "flex";
|
|
40280
|
+
this.content.style.alignItems = "center";
|
|
40281
|
+
this.content.style.justifyContent = "center";
|
|
40282
|
+
this.content.style.transform = "translate(-50%, -50%)";
|
|
40283
|
+
this.content.style.color = "#fff";
|
|
40284
|
+
this.content.style.fontSize = "14px";
|
|
40285
|
+
this.content.style.lineHeight = "31px";
|
|
40286
|
+
this.content.style.borderRadius = "15px";
|
|
40287
|
+
this.content.style.backgroundSize = "100% 100%";
|
|
40288
|
+
this.content.style.cursor = "pointer";
|
|
40289
|
+
this.content.style.userSelect = "none";
|
|
40290
|
+
this.content.style.backgroundImage = `url(${image$1})`;
|
|
40291
|
+
this.content.innerHTML = `
|
|
40292
|
+
${svg}
|
|
40293
|
+
<span>\u5220\u9664</span>
|
|
40294
|
+
`;
|
|
40295
|
+
this.container.append(this.content);
|
|
40296
|
+
const deleteSvgDom = this.content.querySelector(".fpm__delete-icon");
|
|
40297
|
+
if (deleteSvgDom) {
|
|
40298
|
+
deleteSvgDom.style.width = "20px";
|
|
40299
|
+
deleteSvgDom.style.height = "20px";
|
|
40300
|
+
deleteSvgDom.style.marginRight = "2px";
|
|
40301
|
+
}
|
|
40302
|
+
this.content.addEventListener("click", this.onClick);
|
|
40303
|
+
this.content.addEventListener("mouseenter", this.onMouseEnter);
|
|
40304
|
+
this.content.addEventListener("mouseleave", this.onMouseLeave);
|
|
40305
|
+
}
|
|
40306
|
+
dispose() {
|
|
40307
|
+
this.content.removeEventListener("click", this.onClick);
|
|
40308
|
+
this.content.removeEventListener("mouseenter", this.onMouseEnter);
|
|
40309
|
+
this.content.removeEventListener("mouseleave", this.onMouseLeave);
|
|
40310
|
+
this.container.remove();
|
|
40311
|
+
}
|
|
40312
|
+
appendTo(element2) {
|
|
40313
|
+
element2.append(this.container);
|
|
40314
|
+
return this;
|
|
40315
|
+
}
|
|
40316
|
+
setLines(lines) {
|
|
40317
|
+
this.lines = lines;
|
|
40318
|
+
this.points = Array.from(new Set(this.lines.map((line) => [line.points[0], line.points[1]]).flat(1)));
|
|
40319
|
+
return this;
|
|
40320
|
+
}
|
|
40321
|
+
updatePosition() {
|
|
40322
|
+
if (this.lines.length === 0)
|
|
40323
|
+
return this;
|
|
40324
|
+
const points = this.points.map((point) => point.position);
|
|
40325
|
+
const ndcPoints = points.map((point) => point.clone().project(this.five.camera));
|
|
40326
|
+
if (ndcPoints.some((ndcPoint) => Math.abs(ndcPoint.z) > 1))
|
|
40327
|
+
return this.hide();
|
|
40328
|
+
const xArray = ndcPoints.map((point) => point.x);
|
|
40329
|
+
const yArray = ndcPoints.map((point) => point.y);
|
|
40330
|
+
const centerX = (Math.min(...xArray) + Math.max(...xArray)) / 2;
|
|
40331
|
+
const maxY = Math.max(...yArray);
|
|
40332
|
+
const wrapper = this.container.parentElement;
|
|
40333
|
+
if (!wrapper)
|
|
40334
|
+
return this;
|
|
40335
|
+
const centerScreenX = (centerX + 1) / 2 * wrapper.clientWidth;
|
|
40336
|
+
const maxScreenY = -(maxY - 1) / 2 * wrapper.clientHeight;
|
|
40337
|
+
const x = centerScreenX;
|
|
40338
|
+
const y2 = maxScreenY - 34;
|
|
40339
|
+
this.container.style.transform = `translate3d(${x}px, ${y2}px, 10px)`;
|
|
40340
|
+
return this.show();
|
|
40341
|
+
}
|
|
40342
|
+
hide() {
|
|
40343
|
+
this.visible = false;
|
|
40344
|
+
this.container.style.opacity = "0";
|
|
40345
|
+
this.container.style.pointerEvents = "none";
|
|
40346
|
+
return this;
|
|
40347
|
+
}
|
|
40348
|
+
show() {
|
|
40349
|
+
this.visible = true;
|
|
40350
|
+
this.container.style.opacity = "1";
|
|
40351
|
+
this.container.style.pointerEvents = "auto";
|
|
40352
|
+
return this;
|
|
40353
|
+
}
|
|
40354
|
+
}
|
|
40355
|
+
function closestPointOnLine(point, linePoints) {
|
|
40356
|
+
const tA = point.x - linePoints[0].x;
|
|
40357
|
+
const tB = point.y - linePoints[0].y;
|
|
40358
|
+
const tC = linePoints[1].x - linePoints[0].x;
|
|
40359
|
+
const tD = linePoints[1].y - linePoints[0].y;
|
|
40360
|
+
const tDot = tA * tC + tB * tD;
|
|
40361
|
+
const tLenSq = tC * tC + tD * tD;
|
|
40362
|
+
const tParam = tDot / tLenSq;
|
|
40363
|
+
let tXx, tYy;
|
|
40364
|
+
if (tParam < 0 || samePointAt(linePoints[0], linePoints[1])) {
|
|
40365
|
+
tXx = linePoints[0].x;
|
|
40366
|
+
tYy = linePoints[0].y;
|
|
40367
|
+
} else if (tParam > 1) {
|
|
40368
|
+
tXx = linePoints[1].x;
|
|
40369
|
+
tYy = linePoints[1].y;
|
|
40370
|
+
} else {
|
|
40371
|
+
tXx = linePoints[0].x + tParam * tC;
|
|
40372
|
+
tYy = linePoints[0].y + tParam * tD;
|
|
40373
|
+
}
|
|
40374
|
+
return new Vector2$1(tXx, tYy);
|
|
40375
|
+
}
|
|
40376
|
+
function samePointAt(point1, point2) {
|
|
40377
|
+
return point1.x === point2.x && point1.y === point2.y;
|
|
40378
|
+
}
|
|
40379
|
+
function ndc2Screen(ndcPosition, containerSize) {
|
|
40380
|
+
const left = (ndcPosition.x + 1) / 2 * containerSize.width;
|
|
40381
|
+
const top = -(ndcPosition.y - 1) / 2 * containerSize.height;
|
|
40382
|
+
return new Vector2$1(left, top);
|
|
40383
|
+
}
|
|
40384
|
+
function findClosestPoint(five, points, tapPoint, maxDistance) {
|
|
40385
|
+
const container = five.getElement();
|
|
40386
|
+
if (!container)
|
|
40387
|
+
return null;
|
|
40388
|
+
if (points.length === 0)
|
|
40389
|
+
return null;
|
|
40390
|
+
const containerSize = { width: container.clientWidth, height: container.clientHeight };
|
|
40391
|
+
const ndcPoints = points.map((point) => {
|
|
40392
|
+
const ndcPosition = point.position.clone().project(five.camera);
|
|
40393
|
+
if (!isNDCPointInScreen(ndcPosition))
|
|
40394
|
+
return { distance: Infinity, point };
|
|
40395
|
+
const screenPosition = ndc2Screen(ndcPosition, containerSize);
|
|
40396
|
+
const distance = screenPosition.distanceTo(tapPoint);
|
|
40397
|
+
return { distance, point };
|
|
40398
|
+
}).sort((a, b) => a.distance - b.distance);
|
|
40399
|
+
if (typeof maxDistance === "number" && ndcPoints[0].distance > maxDistance)
|
|
40400
|
+
return null;
|
|
40401
|
+
return ndcPoints[0];
|
|
40402
|
+
}
|
|
40403
|
+
function findAssociatedLines(line) {
|
|
40404
|
+
const mergeNextLine = (point, nextIndex, target) => {
|
|
40405
|
+
const nextLine = point.lines.find((line2) => {
|
|
40406
|
+
const pointIndex = line2.points.findIndex(({ id }) => id === point.id);
|
|
40407
|
+
if (pointIndex === nextIndex)
|
|
40408
|
+
return false;
|
|
40409
|
+
return true;
|
|
40410
|
+
});
|
|
40411
|
+
if (!nextLine)
|
|
40412
|
+
return target;
|
|
40413
|
+
const nextPoint = nextLine.points[nextIndex];
|
|
40414
|
+
if (!nextPoint)
|
|
40415
|
+
return target;
|
|
40416
|
+
return mergeNextLine(nextPoint, nextIndex, target.concat(nextLine));
|
|
40417
|
+
};
|
|
40418
|
+
const rightLines = mergeNextLine(line.points[0], 1, []);
|
|
40419
|
+
const leftLines = mergeNextLine(line.points[0], 0, []);
|
|
40420
|
+
const lines = rightLines.concat(leftLines);
|
|
40421
|
+
return lines;
|
|
40422
|
+
}
|
|
40423
|
+
class WatchController extends BaseController {
|
|
40424
|
+
constructor(params) {
|
|
40425
|
+
super(params);
|
|
40426
|
+
__publicField(this, "type", "watch");
|
|
40427
|
+
__publicField(this, "deleteDom");
|
|
40428
|
+
__publicField(this, "highlightedLines", []);
|
|
40429
|
+
__publicField(this, "fiveElement");
|
|
40430
|
+
__publicField(this, "editPointState");
|
|
40431
|
+
__publicField(this, "hammer");
|
|
40432
|
+
__publicField(this, "onPanStart", (e) => {
|
|
40433
|
+
var _a;
|
|
40434
|
+
if (this.model.points.length === 0 || !this.fiveElement)
|
|
40435
|
+
return;
|
|
40436
|
+
const mouse = getPointFromHammerEvent(e).point;
|
|
40437
|
+
const closestPoint = (_a = findClosestPoint(this.five, this.model.points, mouse, 20)) == null ? void 0 : _a.point;
|
|
40438
|
+
if (!closestPoint) {
|
|
40439
|
+
this.editPointState = void 0;
|
|
40440
|
+
return;
|
|
40441
|
+
}
|
|
40442
|
+
const editPointState = {
|
|
40443
|
+
point: closestPoint,
|
|
40444
|
+
associatedLines: findAssociatedLines(closestPoint.lines[0])
|
|
40445
|
+
};
|
|
40446
|
+
const cancelDragLine = this.hook.emit("wantsDragLine", {
|
|
40447
|
+
point: closestPoint.id,
|
|
40448
|
+
lines: editPointState.associatedLines.map(({ id }) => id)
|
|
40449
|
+
});
|
|
40450
|
+
if (cancelDragLine)
|
|
40451
|
+
return;
|
|
40452
|
+
this.editPointState = editPointState;
|
|
40453
|
+
this.magnifier.appendTo(this.container);
|
|
40454
|
+
this.group.add(this.mouseGroup);
|
|
40455
|
+
});
|
|
40456
|
+
__publicField(this, "onPanEnd", () => {
|
|
40457
|
+
if (!this.editPointState)
|
|
40458
|
+
return;
|
|
40459
|
+
this.editPointState.point.lines.forEach((line) => line.mesh.setMaterial({ dashed: false }));
|
|
40460
|
+
this.highlightLines(this.editPointState.associatedLines);
|
|
40461
|
+
this.editPointState = void 0;
|
|
40462
|
+
this.magnifier.dispose();
|
|
40463
|
+
this.group.remove(this.mouseGroup);
|
|
40464
|
+
});
|
|
40465
|
+
__publicField(this, "onPan", (e) => {
|
|
40466
|
+
if (!this.editPointState || !this.fiveElement)
|
|
40467
|
+
return;
|
|
40468
|
+
const mouse = getPointFromHammerEvent(e).ndcPoint;
|
|
40469
|
+
const raycaster = new Raycaster$1();
|
|
40470
|
+
raycaster.setFromCamera(mouse, this.five.camera);
|
|
40471
|
+
const [intersection] = this.five.model.intersectRaycaster(raycaster);
|
|
40472
|
+
if (!intersection)
|
|
40473
|
+
return;
|
|
40474
|
+
this.onIntersectionUpdate(intersection);
|
|
40475
|
+
});
|
|
40476
|
+
__publicField(this, "onIntersectionUpdate", (intersection, mesh) => {
|
|
40477
|
+
if (!this.editPointState)
|
|
40478
|
+
return;
|
|
40479
|
+
this.clearHighlightLines();
|
|
40480
|
+
this.editPointState.point.position.copy(intersection.point);
|
|
40481
|
+
this.editPointState.point.lines.forEach((line) => {
|
|
40482
|
+
line.mesh.setPoints(line.points[0].position.clone(), line.points[1].position.clone());
|
|
40483
|
+
line.lightMesh.setPoints(line.points[0].position.clone(), line.points[1].position.clone());
|
|
40484
|
+
line.mesh.setMaterial({ dashed: true });
|
|
40485
|
+
});
|
|
40486
|
+
this.updateDistanceUI();
|
|
40487
|
+
this.magnifier.updateWithPoint(intersection.point);
|
|
40488
|
+
this.mouseGroup.position.copy(intersection.point);
|
|
40489
|
+
if (mesh) {
|
|
40490
|
+
this.mouseGroup.quaternion.copy(mesh.quaternion);
|
|
40491
|
+
} else if (intersection.face) {
|
|
40492
|
+
const face = intersection.face.normal;
|
|
40493
|
+
const positionVector = face.clone().multiplyScalar(0.05);
|
|
40494
|
+
const position = intersection.point.clone().add(positionVector);
|
|
40495
|
+
const lookAtVector = position.clone().add(positionVector);
|
|
40496
|
+
this.mouseGroup.lookAt(lookAtVector);
|
|
40497
|
+
}
|
|
40498
|
+
this.five.needsRender = true;
|
|
40499
|
+
this.hook.emit("selectedChange", this.editPointState.associatedLines.map((line) => line.toCompletelyJson()));
|
|
40500
|
+
});
|
|
40501
|
+
__publicField(this, "wantsPanGesture", () => {
|
|
40502
|
+
if (this.editPointState)
|
|
40503
|
+
return false;
|
|
40504
|
+
});
|
|
40505
|
+
__publicField(this, "wantsTapGesture", (raycaster) => {
|
|
40506
|
+
const [target] = this.five.model.intersectRaycaster(raycaster);
|
|
40507
|
+
if (!target)
|
|
40508
|
+
return;
|
|
40509
|
+
const camera = this.five.camera;
|
|
40510
|
+
const ndcTarget = target.point.clone().project(camera);
|
|
40511
|
+
const screenWidth = this.container.clientWidth;
|
|
40512
|
+
const screenHeight = this.container.clientHeight;
|
|
40513
|
+
const targetScreenPosition = new Vector2$1(ndcTarget.x * screenWidth, ndcTarget.y * screenHeight);
|
|
40514
|
+
const screenLines = this.model.lines.map((line) => {
|
|
40515
|
+
const [startPoint, endPoint] = line.points;
|
|
40516
|
+
const ndcStartPoint = startPoint.position.clone().project(camera);
|
|
40517
|
+
const ndcEndPoint = endPoint.position.clone().project(camera);
|
|
40518
|
+
if (!isNDCPointInScreen(ndcStartPoint) && !isNDCPointInScreen(ndcEndPoint))
|
|
40519
|
+
return null;
|
|
40520
|
+
const startScreenPosition = new Vector2$1(ndcStartPoint.x * screenWidth, ndcStartPoint.y * screenHeight);
|
|
40521
|
+
const endScreenPosition = new Vector2$1(ndcEndPoint.x * screenWidth, ndcEndPoint.y * screenHeight);
|
|
40522
|
+
return { id: line.id, points: [startScreenPosition, endScreenPosition] };
|
|
40523
|
+
}).filter((line) => !!line);
|
|
40524
|
+
if (screenLines.length === 0)
|
|
40525
|
+
return;
|
|
40526
|
+
const distanceLines = screenLines.map((line) => {
|
|
40527
|
+
const closestPoint = closestPointOnLine(targetScreenPosition, line.points);
|
|
40528
|
+
return { id: line.id, distance: closestPoint.distanceTo(targetScreenPosition) };
|
|
40529
|
+
}).sort((a, b) => a.distance - b.distance);
|
|
40530
|
+
const closestScreenLine = distanceLines[0];
|
|
40531
|
+
if (closestScreenLine.distance > 20)
|
|
40532
|
+
return;
|
|
40533
|
+
const closestLine = this.model.lines.find(({ id }) => id === closestScreenLine.id);
|
|
40534
|
+
if (!closestLine)
|
|
40535
|
+
return;
|
|
40536
|
+
this.chooseLine(closestLine);
|
|
40537
|
+
return false;
|
|
40538
|
+
});
|
|
40539
|
+
__publicField(this, "chooseLine", (line) => {
|
|
40540
|
+
const highlightLines = findAssociatedLines(line);
|
|
40541
|
+
this.highlightLines(highlightLines);
|
|
40542
|
+
this.five.needsRender = true;
|
|
40543
|
+
this.hook.emit("selectedChange", highlightLines.map((line2) => line2.toCompletelyJson()));
|
|
40544
|
+
});
|
|
40545
|
+
__publicField(this, "lineRemoved", (line) => {
|
|
40546
|
+
this.removeLine(line);
|
|
40547
|
+
this.hook.emit("selectedChange", this.model.lines.filter((line2) => line2.selected).map((line2) => line2.toCompletelyJson()));
|
|
40548
|
+
});
|
|
40549
|
+
__publicField(this, "onCameraUpdate", () => {
|
|
40550
|
+
this.updateDistanceUI();
|
|
40551
|
+
this.highlightedLines.length > 0 && this.deleteDom.updatePosition();
|
|
40552
|
+
});
|
|
40553
|
+
__publicField(this, "deleteDomClickCallback", () => {
|
|
40554
|
+
const firstLine = this.highlightedLines[0];
|
|
40555
|
+
firstLine.getPolyline().lines.slice().reverse().forEach((line) => this.model.removeLine(line));
|
|
40556
|
+
this.highlightedLines = [];
|
|
40557
|
+
this.deleteDom.setLines([]).hide();
|
|
40558
|
+
});
|
|
40559
|
+
this.deleteDom = new DeleteDom(this.five, { onClick: this.deleteDomClickCallback }).appendTo(this.container);
|
|
40560
|
+
this.model.lines.forEach((line) => {
|
|
40561
|
+
line.distanceItem.appendTo(this.container);
|
|
40562
|
+
line.distanceItem.update(this.five);
|
|
40563
|
+
line.hook.on("selected", this.chooseLine);
|
|
40564
|
+
this.group.add(line.mesh);
|
|
40565
|
+
});
|
|
40566
|
+
const fiveElement = this.five.getElement();
|
|
40567
|
+
if (fiveElement) {
|
|
40568
|
+
this.fiveElement = fiveElement;
|
|
40569
|
+
const hammer2 = new Hammer(fiveElement);
|
|
40570
|
+
this.hammer = hammer2;
|
|
40571
|
+
hammer2.on("pan", this.onPan);
|
|
40572
|
+
hammer2.on("panstart", this.onPanStart);
|
|
40573
|
+
hammer2.on("panend", this.onPanEnd);
|
|
40574
|
+
}
|
|
40575
|
+
this.model.hook.on("lineRemoved", this.lineRemoved);
|
|
40576
|
+
this.five.on("cameraUpdate", this.onCameraUpdate);
|
|
40577
|
+
this.five.on("wantsTapGesture", this.wantsTapGesture);
|
|
40578
|
+
this.five.on("wantsPanGesture", this.wantsPanGesture);
|
|
40579
|
+
this.five.needsRender = true;
|
|
40580
|
+
}
|
|
40581
|
+
dispose() {
|
|
40582
|
+
var _a;
|
|
40583
|
+
super.dispose();
|
|
40584
|
+
this.deleteDom.dispose();
|
|
40585
|
+
this.model.hook.off("lineRemoved", this.lineRemoved);
|
|
40586
|
+
this.five.off("cameraUpdate", this.onCameraUpdate);
|
|
40587
|
+
this.five.off("wantsPanGesture", this.wantsPanGesture);
|
|
40588
|
+
this.five.off("wantsTapGesture", this.wantsTapGesture);
|
|
40589
|
+
this.five.needsRender = true;
|
|
40590
|
+
this.hook.emit("selectedChange", []);
|
|
40591
|
+
(_a = this.hammer) == null ? void 0 : _a.destroy();
|
|
40592
|
+
}
|
|
40593
|
+
highlightLine(line) {
|
|
40594
|
+
if (line.selected)
|
|
37791
40595
|
return;
|
|
37792
|
-
|
|
40596
|
+
line.selected = true;
|
|
40597
|
+
this.group.add(line.lightMesh);
|
|
40598
|
+
line.distanceItem.highlight();
|
|
37793
40599
|
this.five.needsRender = true;
|
|
37794
40600
|
}
|
|
40601
|
+
clearHighlightLines() {
|
|
40602
|
+
if (this.group.children.length === 0)
|
|
40603
|
+
return;
|
|
40604
|
+
this.deleteDom.setLines([]).hide();
|
|
40605
|
+
this.model.lines.forEach((line) => {
|
|
40606
|
+
line.selected = false;
|
|
40607
|
+
line.distanceItem.unHighlight();
|
|
40608
|
+
this.group.remove(line.lightMesh);
|
|
40609
|
+
});
|
|
40610
|
+
this.highlightedLines = [];
|
|
40611
|
+
this.five.needsRender = true;
|
|
40612
|
+
}
|
|
40613
|
+
highlightLines(lines) {
|
|
40614
|
+
this.clearHighlightLines();
|
|
40615
|
+
this.highlightedLines = lines;
|
|
40616
|
+
this.deleteDom.setLines(lines).updatePosition().show();
|
|
40617
|
+
lines.forEach((line) => this.highlightLine(line));
|
|
40618
|
+
}
|
|
40619
|
+
}
|
|
40620
|
+
const planTextureUrl = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjoAAAI6CAMAAAAZlhLyAAACB1BMVEUAAAD+/v6qqqqgoKCLi4t7e3u4uLhvb29MTExZWVlCQkJgYGBqamo4ODi9vb3///9FRUXPz887Ozv///9QUFBWVlZdXV38/Pzj4+Pn5+f8/Pz5+fn9/f329vZoaGje3t78/Pz////x8fH8/Pzs7OyBgYHd3d39/f319fX+/v79/f2Kior6+vr////+/v76+vr+/v7////8/Pz9/f3+/v7m5ub7+/v+/v7+/v7j4+P////+/v79/f3d3d3h4eH4+Pj+/v79/f12dnbc3Nz9/f3w8PD9/f34+Pj9/f3+/v5jY2P8/Pz9/f2ioqJubm7v7+/+/v76+vr5+fnv7+/09PSDg4P////t7e3+/v7+/v7+/v7///+ZmZl7e3v7+/vy8vL+/v7+/v7p6en19fX////s7Oz+/v6lpaX+/v7r6+vg4OD9/f3q6ur///////+UlJTt7e329vbz8/Pg4OD///+wsLCdnZ2QkJDe3t77+/vz8/Pw8PD+/v7c3Nyqqqrw8PD4+Pj+/v7////4+Pj////s7Oyurq7f39/p6en8/Pz////8/Pz19fVycnK0tLT////q6ure3t7o6Oj////s7Oz39/fd3d3h4eH+/v7j4+P////+/v7n5+f///////////////+ysrLe3t7////////8/PzHx8fl5eX////39/fv7+/d3d3///8S/hbOAAAArHRSTlMAzhATFhkNGyEfIx4dJQ/OKwoozS4wMh3Uy4SPbjs34kJ9EAkGP+8Snk1nRRo5JYl2eDQiA88wY3PXRDYN6dyTX0s751SxPJdhPjRdV1M4ti0XFa+pQiq5aShQSE09IKJwWMilWr9SVzLC3wvFwplKvKKY9spfUEjge6yqnexaLpqQakgBtVz1wQe9i4s6ZaG788fGKIXx95TZzKbSuKu1s2LlsJb7dqiu/cSWYhzVwQAALl1JREFUeNrs0jFqalEUheE9C9ugAQloCg0WmuIJIbxHUsQUQhQEQUTINNI463fvqU2xT3G5xfetNYQ/+M3PT7SDfDo/T0/SIe+pCJAOt0mHvrgvAqRDUn061/vrNSDrOhqNpEOFURGQNfqWDlW+i4CadJ6lQ95zESAdbpMOfTEcPg+Hw4CsphvpUGM4bsoZB2SNW9JBOnRm/Dkef0qHvM8iQDp0ZNOSDnmbIiBrM5lMNpOArElLOkiHzkwGk4F0qDAoAqTDbdKhL6RDpcHhMBgcArIOLemQNz8c5od5QNa8JR2kQ2fmrceArMeWdJAOv5EOffH12Ew65H0VAVlf2+1WOlTYFgHSoSMf0qHORxEgHW6TDn2x+Fg0D8hatKRD3uVyWSwuAVmXlnSoSWc2kw4VZkVA1mwlHaqsigDpcJt06IvVdLWaTgOypg3pIB26UtJ5fZUOea9FgHToyL8iQDok1adz1zwg664lHaRDV0o6y2VA1rIhHaTDr6RDXyz3y710qExnvw/IarqRDtKhQ+v9fr2WDnnrIiCfzoN0qPFQBEiH26RDXzzsds0DsnYN6VBhd97tzueArHNDOlR4OTeTDnkvRYB06Mh7ESAdOnI8vh+Px4CsphvpUON4aso5BWSdWtJBOnTm9HY6vUmHvLciIOtPESAdbpMOffG3CP6zd38vTYVhAMffeebxJjbivRDmhG0K6TC3WaRkkIGloWBplBWU/STJjYLdJIM1swvnxS70QhR1oBf9mZ09bm6e93nPOe/pzG32fCblMLrp2/O+79lxEkqHXJJxI5zxcUaIqnEDpUMoHXJpIJ04pUPUxQEjhNIhOEqHtItlwAihdMglWd5Y3tigdIi6DcAIcZVOmBGiKlxB6RBKh8hQOqRdrKyshFcoHaJuBTBCVK1MTExQOsQFoxyjHkaIqgkDpUNcSCaNcpKMEFXJCkqHUDpEhtIh7SKVTBkfjBBVqQpKh1A6RIbSIe0iFY1GKR3iQjRaiYcRosrohtIhlA6Ro3RIa8TuDI+nCgfFsUHD1nVDCFy/vrU1WDF2WNpeefd49B4j5Mzio9lQqcg591X0Xwf1dGr6fQbO+X76IDR1c5GR/9qNyHLhEKIB9ukAKKiY2XgcY+R/NDIc/VOLRi2dekAnoeleRv4ng49Sx6ZsxHQSoVAiIaQj5FOOvr7ByH8h9mA7zX0yN+vpgPOnN30yfP8gPsrIFdf7MZeFblyng+MnE19uM3JVjW4ccZ+Nm7p+HR56Aui155COFX64QRufK2lguMR99vr1qlo6Nf0+ezwzPMDI1TKagv2NSjrbAE1HjqejTxi5MqoDRzWdvj7jQykdwI/m6Mh1NYwmYeAop9MHFNMBPLv9kpFO9yXjvJugTTpBhXoKdxjpZGMOwwlWfwkGLdKBrzuPJzPJSKdyFg4EYTyC2XImOjui19zvqzz0mpGpZOEgbfy5CmfxlB4x0okchROEWXKy92MushvQL7gP9IsW8w8mcumz1hzEc3B3k5EO4yCcYMVOLhx5qldh6WB2H6xkio7GDz+6y0gnGbULB1ao4+25OzBqVNMBtx78KDuoh2duMdIp7iWztnubncLnXh0opCPYncpkbfPJTtCdhR3i9aHNYSqYTvyK6aiuupmZ+zMzM111Oir2K3psN3qKw7Tl6QC3Mtx64hz+eBRAmhHMgC6BLsrHT6xHDy89Z6S9DYSzlvubYnLMqpqA8QG/1dOB57UvyvuZDJ2du2T2o/TqRFu7e8ytDlSlVzF5NfBLpR3jl8rHDKg/D5xHhPcTm85ZjR6enmakXT3d4xYTZyeaR7s5KwKaMS1YP38KCxZUZPyG17MbPrS44Mz3aPC0qUiRyyfO0bsbQja1biAcwU/QJYA/L1u8AhGr0VN8zEj7GUhx+RWcvjG9gbC3AXbpiPMHr6f/VL7n4Sm6FaztjB5x6cQp5PUGYjS4oaGfQ0NDXZYC6Mp1pyCNh/+ho1abmd+Rjpy9O0I3sOLYGQJddmDJM9eTT+zL4snO0u3vbSRW4Gg3htMv5m5k2ainI/59+rndUFYSD8+NMNImJg9la1VmTAgHZoR6OuoL1+6ebNFKRxhpB5vxfdmpql9xhwM0Q5fxeDtUeRhP4bnzevRzkRNJPPuzjLTeYIJLruOMB/Qah9lAMjXf3xq+a6Baj11A5ngC4zv4qsVDg4y02I0cx2dO4Y3zPU4lDMHb74a3Gsb55OlNBPF2cvQ2GS325sSHOo7oNXbZGB+o70BDQGg29eg1kwf44CnTbTwtNZlGNznZlRi+VOHdyNP5AOnI8pHFc/GsHpjbQdtJ053LLfQq68Pk8o3hyLux9gFolvB8zMvW7gHaTvYjI62xGebov0g8YL9WaTj1dPDDl3nwhPexeHiUrg62xMA2xy4eH0/ajxwNKKSjXo9p8PSX0XYKdNBqgYEMx7Y5fYt24WgOPQOaQ3b75cVQMEjttAWxnMpBZuedXiWbN3g5eDof8HRwtqvWgyLWzt4WI8q8nzlHeeuRowH3U0d93Qo0xNObw47pe3QbhjLvy4nGLMvR1Kyvrz97tq5pfg24iufiohUIYRueU2rnEg2cIuFkpy9cyxHCUUnHb4Chs+43aJpCQGg8etUsF+PhGWpHhfflpB817HKEchwXU7cO/I1U2sEHTyRN7bTQ1ilyKj8+3+agFKpB0lHtx2Lw5MviSYvnvjIiuoxygsGDXv2Mm12OH7W0tLS+tOTHKW55AvV2RnLI3MnRGf0S3C4g5RRi8nBcZAOWgF9KKR5Q2ywjcydB31ncfElktUoGdKA6cfxWHj5cevjwoR+o1yNpB8SRdpYZabJ5cebsz1mcrNx1A+kAvw3HG57GKzzjyJo1zEhT3cwKixX/LC1H61LuRp6Oej3yq4NT4tzJjjHSRLfSPjM+rctWK/Vw1NMB6u3Mid+plaZ7v5roRlncIU8LI0c5HNzCglHOgt8ZTUZ2Sp8X16wyfUt60wyWxB3yfL0cpYljbwH4nVJtZ1rc7pfopdBmCYlb5DnpodxlN93dfuNR+WRh4beRTv25345iO5+F27/4Nh3RmyOOlYOvVq4mjpFIowVQfw5fdxcP3s4wF9qJM9IEkX1hnzOlg38fOdAFkKcD7PLBrw9KrizPisesL4x4brEo3NkVV5k51msU4gXoxvgtqKxZP4Qz+jF9e5bnNk+5uZyQbOaohQMU0gFWex/na1Zgz2dWYMRjU9w8dHIB5zPHcnujng6Qx+N87sQOhO3OPCOeeilcRS6PNJQTsCxHPRtI59u3b9V0lPPRRPiLEr3H5nZ26IcXe2rgj7mcdF4HtjPHr6mHA4xwjHjgU/V4HLyYroN82tzOEd345aWo8JJnBN3oaAJ34UA6oNuWH4e0gx6z+rOmdniUEc9EhC2y5FjurJxuoJ6OnPKiFTAetcvKQXM79MNsPPO06DOJKpejns4n0O1hO114OyGfSZreMc4jmxmrw5VCOPhSpZ4ODmlHrAd7HT32xzx26ITukVfc/L/yjftyHOg58wlUn7icPEI5aDv5HfMJnd5s0BP3iubXH4bR7w32YJfT02h1dfXTKqRzzoN2GtS3yu/M250ynbK8ILwLe0IHdtdzFLvpMVsFPWaKJ3VNgB2z+sxjJ8zIP3tpftWzvIguV/ZXc2yykaejkI/S3AF6xaL5ymCWbhn8Z5sl8xWdSfRSoPuZ0yOxumaUswafqtajvmaNma/uZBjxdo8c9IV1YLNFVgoHtwbkX3fdjunSoA7GTdsd/poRb/fIpfq5XGHmKHSDp4NztuOxO6LrwPwOKkX6WbP/JmUqJ70rbnTsw/GrhQOura29N1zrseRq7uAn9L/sndtrE0EUxndRqDGbrph616pV44OKN1KvFVQoWkFUKKigqIgPgvoiiJAiXkBQRKQiXtIq6oN/prNfE8O3eyZnZxLf5heFXdsX4cd3zpmZ7D6OmQNRYIgb5ukFqUVWOmQ3cZJkBJ/kDkg694PJo2yF4j91NI2Jr9eigDevWjGzOFqi0fEXJ+nRU6eHxaBSucP2SOpMfI+Z31FgWNueabpFmq7czZGsGUmY6h1QTXpYA8i3ZnHJepnvlMNBZX++xUS636fRKSLGDXtj2GC4syG7SvII7qjNcomVwedhQB8W53OhM7+OypX4tXLHyOHAqUIa8xfqAFwC/Nxqj+6O1O7wlHVzPsTOfwqdI90NCPtc7hw5FDUEqQM4gJw7Hj12zoXYGQ7TudD5JSzpqNVKF4e9YXWaUIexyuPa7xQ75dHFXOyEp1/48Z7NSaeFcsU4Ro7dm4r502xm7mTXFas9avCoYxaXrOk0DbEzOCfqMbFJX9IRFgJdxalk1gCjTrPZrAC4VCJ5lH5nmTqht0LsDIEWh87jj+qSjkuxEryBND2aoNJD1GdEcYdR1dkSup3BOZQLnY1So+NvzkhRnAqwqwNgD2ePnzuguLjzO8TOwDzk0KkroaMOV8XIqSY9bwTazXa7DXVs8iQUPT7uCKcv0jQNsTMQk7nQeevaI+vVivKmSLNtQqddEaHgUdxxnLI+x0Q9nPlyZWNuvHqm1avS1SrJZU7FQhtUgC6Pjzu8h95RZzJNwwb6IJycZ3WesznAJ3M4cWRzVix91me0V+De5g6gnVF9gUeLnecx8SCccHfjdp3Vmfx3kl0rVxjLFXOs3sCcDutB9w5KWZqepKrnjt4p/zu4U0/DA5UHYDEmPmvlyitzZGtEdUBRng5av7Oc0Ab0TVyx3kcBBy7lQucQhY63OdzlCN6QOseOmT8rGGSPIo+aO0q3syXl2AlPTXFhO5vzcJDQsQ5W3N4UOJaB1MkjVa0E2N1xGdBzO1kHo0BpdjxgdV7SZK6bo/c5cuCwOkBUh+VR3dE7ZY6dC6FRHtI3aNI3o96ho5uDxNHVYSrO7rh0O1fmuWJdjwKe21dHhXrlbE4CRHFkvhwzH1JHsQfmlMsdZcjaHodG2Y/DuSb5I8zxqVeWTStVnJXm8wWYC0IsW1XZHe/YeZbGoVH24iib0/LrdFgdOXMka7qcOvXFfDo3okGFopUAtWTpsfM+Jl5EgVK8WoiJe0q9cjZHFwfqgH+35kf9gkec0b0r1nWOncUo4LPz+WBCXdPRW2SpQy5oQ+awOgC/wvwndybecKO8LgqU4RbXq+1Ur/zUUTMH7Q0Q1CFkddgdvVNmdYqPLzgQE3ejQBl+kDnd7Sv/ciVP5eyNwH1QVIfs0XJH73bkPdBDvKLcigIluMaLOt/s5oAS5owIo5ViDqnjFjyyO3rFYncWSJ3H4a0jZbiamy6E7Su3wby3b0UzOYmjq8PJ02/QKjllKUs7YfvcnfdCvRoodDLoNKAuTm1Jna2ZOjVZHmnQqrI6euzYS9Y0v1f2bRRQmfhK6iyIB0v10OHMsZcrSZoa2ApqQPCHgkcpWR6xM8rvjniwMwpoHK/LX4QY1ZtkRZ1SDXIN5NQBojpy7uixozfK+3lBeToKOJ63eDmE0LH3OWwNxJHVAfgVLXeKpwbdtyPwyJSYCO8c0eEHFM1PeIaOfbqyiEPekDqELXkK21kjyWAVa4K3z79HAaetz/S3X73icqX3OfBGVwewO4I8BrfYkWes59Qn18MrRzTu1YVnB3qHDs/ldnNqgjo/gaIOu8PqeMZOV517YTwf6PtXh8VWxz90bG0OKKhz9ufZmoTc7lDJ0oYsvWLdTNPQ7Ljwh8xZ7L9pbg8d3ZwVFnNWdzkL/t2SOjVpgYenLE0dfcbiru9PFOjLbq5XT0kdr9CxlCsqVqSNrA5Q+p1KB+fYkZudt1yxdkeBfmxjda4L5jiGDrD3OYI3q5aYAp2bgj1at8PuOK8o43R7eEeWC5uFo6Ve9QqImSOrQ9oU1AEsT98R3bVigfzJi0k+73U1CvTjNz/Wn0bzIXY6gjjszdjY2BQwFwV7BHf8Y8fe7Izyyk54q2N/+G0iLW91AAZzwZyVeXVYnDGwxngzNzW1ZgywPDWgxU510GanReosRIE+XOFW55bjqo48mQvlym4OrAFzhqm5NWvNJfxxcEdZFtQPCy6ps5kXBa9EATv7eO/ztE+XLJkDbH0OiQNr1mY0AC7xjyRPfkZXhiwpdvSVnW1p2AEtzTk+q3NT6JLV0dwhdNgciANvZsZnxsdN6DTm5sbHx2dmYA/kodxxiB2vinWZ1TkXBcquJb/xqVfKmo5oDtRBpYI3hosXLzaAucjuZyBPt2zJ7sg7WW4Vi5udX+TOxihQ9oTgZ31BUJ+vBHHEzFkSZ2Ym0+bdGUMDZFfvjD7IHgSPmDvWnayRQdT5nIbvD5dlgdTZrKij1SvZHVanZ04ncTJvbtzYtWtXA5iLGzcye5A8a3tFy1qyvJod+ZEXT1MK4ShgZQcfLj2tjuZ2dSCObk6vWiFyMnHgzezsbKPx6VOjYS5gj5EHwQN3qGRp3Y5PsyOvJ4evRdi5yQPWIeG7EGroKOr0xAFkjokciDM7u8fwKeNDdjU7C3lM8JA7vKxM5ijNznJtVVAesSajQLnZPN3rWq/0TQg5dGAOIseIk3nz5NGjRx9efzCYiyeZPUYeBA/c4dixuOPU7MhbER/TNBzZKcdf9s6et2koCsMOQkiACoqYUwmJLe3CwsDCwMCSf+A9Gx4s21tGVxXqZWRgwUMcNfGP5Nw3vT697XXO1am63WfKHD1633M/bH//4H05jfeS2ZzYKZlDJ3wE4YcOm0PiNE2R53l9BWr6WTQNycPucOx47giDsqKw3vlfzf2SJYTDT76so04dOXQA1xXMQeRYcerVanUF6Edt5UHwwB2urDMhdvSbglCH+Pc+vVQwjl+z+/BrtlV99fbklPw4dGDOKM56XZI4Zblej/LAHT925GFHEzuszs9ZOgCN47dwz0uxISj1FcxB6FBbwZzaerPZtCVoNxtrT03uoLMQO3BHbKzIOfnUKdZHb9j5myXitnW+8aijUieur6COZw6J07ZVVYKqalsrj+/O6cZ6HW4sxb2LH7O0sRPH5wVxebk4cvG0UUeqK+Je6NywOZQ4VdeZP8B0XUXJw+7cuNiBOuD55uSLBTH+JV+zxBSf5uAV46eOYE5gQ1AIHacOQme5PJpDiWNMv7vdDsP2dtcbQ8lzdGe5ROyEGytcWJObgvLqnJkfSc+dC+oQIXXib1zIB1hnnjocOnfmdKbfDyP73nR37nDsKIYdzSmWI6mjSB1BHeEASxp13MocodMUzpwDBQ6zPTh3isbFDtbnwdQB8hJLUielzlPUEa5cyKOOnDrcV2PokDm74QE7cmeMHagzPeyAiWFHnnWSOkquPXUUF5OFGxdsDnjQV0WO0DGH4REHg9jJC24sQR2gTp3wrHOdJaaYR6fOS03qcF/56pyf275C6JA5PdrKZ9uTOzZ20Fjx6hAwR1qdy4UFsoSgTmBMVqojrs0x6nBf2dDZDwH2NnZcY7lhB+oAcXWuVwckdTSpIz8zHH2C9eakOuirquuHIH1XobF8dcKxo9/YeeFI6vyn7v5ekwrjOI73L3QRaRZZRypH9mNraWk5mW2NCS0Xzi1wWktcDtqPm5MRG81oIy+a2EToKojov+zz/T7Pc74+Z4e8qJvedD1Y58Xne8p+/As6crH+7sPP4N/WkbfkN+pe/Qym81NdLI/OGVmdf/mr8/+JTvsOisUOHcdpNjOZzOXLl69eLRafouvXr5+lKhMTEzfQ8vJyqbSA7t5tNMbHx9PpdCKRmJmZQ9Fo9D56jnK5eDy+srJSr+fzhUKtVltbW5ufQo+TaGxsrFz+8OE8qlarqdQtdJu6hM6hm9TnCJVFs7Oze7N7e9fQ6urq1kv0DLVarcXFR+gJtbS0tLm5+Qqto42NFyhMTVLfQqHQPWpwD//8+mt0kfs+Pf2AusIdH9GnnTv9X8F0fvX7O/QHeI6voPfvpx9Mc/gyrgpfmv7XPtPkZFjV7XY3ugeqL9xH1aLqnWpVhW9zW5fdjlAd1VfqLYWfsFQqVa2ep8rl8hiVTD5GU1PzqFaoFQr5fL5ex1OIx3PUPnU/iubmZtCFxIV0ehw17lILu6USHu8NhIddqVTw2PH4SUGxeBWBBXA4Tcc5jMViINNun2q3FZ1DyGE6kEN2iiKnMoG0nBLLAZ0G5IAOEjpI0UEn6eBb03S0HZLDdgiOpoP8dGBH6GwF06HYDsthOywn7NEJEZ2HlCdH08FfmTF0YKf/I5jOj/4O0Tk+Zjmgw3hcz85D16Izqel0VQqObUfBWVRwQGdL6Ogi2x0t55ymw2k6xo6Wgx8sh+1oOnXIibMcLsp0EOTQ5xrA02iQnd1dbacHOghyyA7jAQXIQZkmck4bOpgda3UQ6KjVEToVszolJKuj5ICwf3VyQ6tT8NNBJEfoaDsnVydr6PDqIMjRdFoIcihrddYRy0FEx1qdwWCgVse16Sg5ho5osaPV+TRMh3MNHchxQx6dcEhGB3BAR9mxVuejbA7ZYTnIuIls26ODjBzKyDF2khgdZadQo9VBhg5SdPZZDo3OBZodHh2O6OzS7PR6PW910NDqZFDTQZBDCR3YsVYHdJBenQA6jREHS+ismYNlr46xM/pgQY6yQ3LM6iB7dTYDVkeNjqzOIOBgyeocQc4oOkc+OhdlddzQIOQ/WF2ZHRkdgYM8OXKwNJ5sVg7W14DVOW/syMGa1wcLycHyrY6hIwdLrQ7LQWp1gg5Wkw+Wc2gO1il1sLScYDqV4YOFTh6sqHWwct7BylsHK2nRsVfnTwfLvOv4VkfReaRXx09H7Fh02M7fH6wH5mC5rqZDqyNywnKweHV0io7ggRydyJEiHUPnZsdeHT5YMjpMB3jMwfK/6+yLHaKDEgllp6HoLCyU6GD15F0HmdUpenQg5zTJYTpmdWLymmxfLJZDdMROwGsyexY5yHew5kesjv9geReL4Zx4TW49M3SUHKGDhugQHD07SOTYr8n6Yo14TRY6vtUJfE3GxRI7GwcH68Gvye+C7cjqdBSd35qK3ky2QG8mm0NKHUTKwWwmKyCSDrjUgddYoEIH1kyeAk47iFInELnUAQEVSNphGFyAvHEdskeT6dY5Hx0SxAIG97gO/k1YQhQMCYqJiOBbdUHSkCALtvU6o0mHDhMRhEsd3Gd5IdZcED8REUv0RAQn1SYiRqc/KSt1KN9KQ43pT/SZc8pLndH1OlQAnXRar0P5oovR9TqDDKjQab0OnZZ6kbFKcHRtMoC982eNKoii+Iy4UQTzigemCSaxCSlEVIiVsGIQRRs7m4C9ZJu1EbTYKpBuUQwoqESLfEwnlw1vL7kzZ3Je/hX3bLNsufyYuTNz7zlXoEsQdF2cdYOpRgda7Fz3DSuES29rH1yZtvab3tZ+UcLo8HNYem7YXHT4YZrsRITtnkyYMzk6/Ub4YK2DjS4ucoQPeMIR6HQjfPKfPAquOsPtl+c3OHy7YnB4f5w++9bgsJBTbXVxg2gSPN6whm66XamfauZ8jelrJ8Y/WbsCMDiMbb1wf+mn6D6UdZoodEaE0wU29ao3SRnvjoFJSqW/Dt9fOmmih51X6WGc1x/+iIX9dbA103Q3aYqsmer9dQbE8OevOK/l4MrpiVp1Pi4qdLgdK0cONoSbighDuI4d8AyBXb125v112jfBldNGq3z+v/VBB71FQBvK79OcDaW5X0HPbcbp30MiarWpHUxXKXTw8VyEzW9FwPwWLDqMqZfIClNrHwdXTvcUOvE18E0GNilGGJZadpDltghYbnfogEgsKkztWZzXjw/BldUeFxpLZEQAo//tzuh/Gxj9gyKZSzWaBWK50X/veBHmiAWck/vHixTZ6V/qJI2a6C6UTKhR8xesOuhmB4dEaHYSPEIPEWoEkmPJx8+96KFGVJRabN7Oih0i5bw6YMSOUktKQzZJiZq7KkotH4clAil8lc8Qps//MLjyemEfsRQ6dEpEvtxJOhng+EVUDHAUnUOpY1bJ7f3gqo2Njcug24sJxBJ0cGzsnaPE4TSnJdTg2FibnJ4Xgu9j9NhY0nT780LvHSv7kIXDqkUorJq/D8TojPyART+Afl0kcmNRoazh4SLyRWREfv0Ba0eh8y+4Snqn6+RN4z6ZX3ZsdDp4ND1PRYobAxwhh190ylWyP36eQqvWfXLNpSBGR7NjwyM6Rkc8dBQ2Ao5BDo9Oyap9Qz9DvAquktb1EesBuBTEOxZmR+DR9Iiei+Sr5qaeHA4du8+rXQ+uog4VOr8XmOO5fcgSFdERmegINgoccKWDB7BwqaNTzg+Dq6w1hU6zxBU7qNqx4dEIrRwkG5WD7gdAjlUjE0WyaFbq+F0y37ITm63a4/kgu+zgU5YNz4oIgaPJ0Yk0gBwQcj7Upc5WcJW1pNGZcDuWXnZQuSOqRedWac3hK51r4O2z/c/embRGGQRhuEt0xG36MAeJC+goiCKuuERFFEQUBZeDQQXRYMBtZA5zUAgE0Yt6CBgPcbIo6MGf6ZfCMXm/KfJO93wBD/WYgwlzfHirqrun+1FwCN9lJTPNv6kzfOywmrWZqaPiQINsm2OHDl9KxnrV7OBB7eAkHW2P8p6kTkK3Q9xZssJQBwLHyBze6Vji8NR5L8De4CQ+k7+jRhrl9JKFDQ9iqAOVivQ5uO+ZHzoFe7FenQsOY38L1GnBXkSqOnbJMoLHqFxL9yu/eQHeGOKYczkNHX62tLYgK93pNoND+Yzj+W5InUR3lMKc1WqWIY/+vHnxprBnm/4O9GfOv2oF0xUNndVWdaainxBM5jLuRcABZb59brsD6mjugD0mL5TNpjZG5iQt6fB6dQjMkUPB4TQ7bEE5r2ShPNyd4obli6oOL1ZoDleHh05tEVudI8EZgElj9zyxUebucHkuKsQbrVbEHKKOuR54AkPnZ3AG4YbQr9RwddQdMmYhTB0sVZg5imUOws2x5ys5G5z0BWVpNfMaZVQH+x3bHdDHUEc/Mog5iaGzrq9eNVu4a346OAOxKMY+FlQsshtB3eH2qDqjJXUU3uekhI5dr65g6Cz8by8y/LfsEmAaKlZuyYKahe6gPb3i9W3pPZJvvbQBb4Y0h9erSfEDglmcxAXlONVLHRI7pGRRd3CxZ/RbwaiRNoY4y9UK1Ekdr1YcLfWtz9wZC9hLKhaJHcwdo2rZjCr6X8ubUuRwc0jo4LdogMngZB7aaR2AimW7w3PHckdJV0e9oebw0LHVqS9g6BwMzqDswwEj3qyRISvdHR48o/pyH0mc5MyxQwdv998jQGtfcDJPXsQ5o1FmJYvnDkme4jnG4scMnGRzeI+s2E3y2+AMzpEGxs4JOGeacG6H5Q5ua6E6SoI4ljl26LCVZNyEuB2cBKYFeEcqFnWHy6P6EHU29QGRk2POuv7JfBbnq8XgpPCgYW5kDbi4Y8xZxqBly7PJVqf4s+UNLufwasV75NrpUug8DU5eo4zH2+ssdnjubITcMVFL5pfMmddf9PeyN73EMTInR526fc22dPyQVyLHUZ14Oq1kEXeYPKrO/Hzx1PUmBANH1eGZkxQ6U1HEr2gfhvsNAWbJkMVyB2sWymPrc0pZzRxNHDSHZw4LnaNRvEkejlk7dviAzt3B4EF5uDpblkk1h29B1L52BZgNTv7123idaR22IzLdUXUMe6g6xQcNcUi1IqEDk/mO6McthuaXAPEZdDu83el3Byi7o1JY6qA3hjhoTtZ0tRw6HQFeByedZ3bsgDuk3aHuoD0YPyNKb5xSa8AbEIdUK97o9MYrARrng5PBawHibuh2iDtUHixbiHoyUnBqBJQpN8ckcni1Ko9X16PvmVfBiYYAP+u4uKMQc5g7YA8yovSLo4A4YA66k1au6j9F/C2aNTi2Ew8lxA70Ozx4FKLOVhUHShXpcrg5GDpnRPyLe5VwvnRacOZRyR0lwx2UB7DUwbhRb5g5ClcHD1tsnymNV3uCU1HsvGOxw91BeVAfFGh8ZFzVUWmQjTni8NA5GgWY+xCcYW69wJv/4ZgycYd0PIBGCTD+Zbz4KTkD2oA5tFrR0Nkdo/jtFtUNWciPJs8d7o7KQ/UZV0Ab8AbE4ebwHnnOx6sKOdkRIO4iizvEHZDHRi3pqfPqlWENFYdXK2swvxEF6Pj3zIfisSCdryR2zCGdyGPzSiEfouLwzOmtI89EAY4FZxheLggQJ+uwH2FPWeoO2mOSqg4XJ79cTUcBPl0IzlA8bAiyq0b2shTDHZtV1Xn+/BXxJlscNEef+fRv0ADVb0d0d4M6ub0yl+e5kikOmsPVOd+NAkz7YF59p/z9LrTKebmDEHWIN9Qc3ujc/REF6N4LztCcbaA6cWevZNVXru7Q3EF5uD4TzycmQB3QhogD5rBGR0/pAI3jwam+U5Z4E9od4g6RB0B1FKINipNrzuVY7pH9LPuadMpx5iuZstAdHNM5ljobOOtJ5oA4UK4etUTEH4RYC2YbgszBorJhDw8ezoRCPpQZOTiXT0qJX94jV8SBTyLW/YK8VR7GnXa7PdFuJ4hDzcFqBY0O8MnfFg5VPn+O3PjXKkPNIrkDZYvRVtLF4ZmD5lyTKH7WYs04JiW6e2qwiU7cyYmesbF28S9FHJ45uF2u7OmWzfGXRKrk46KUaE2RmjW0PO0lc8Z4c5wqDg5XUy0p8duv06mUIzMCxPh9O8QOyZ0MfcYUGji2OazP6alz+IeU6NwPTqU8bQgSp3tjFshTQIIHu558ddarOTmRs3K4ioI0LgWnWj7AhI6ryugOL1oIV4cXKjSHtDmrDVeN135FMiFvQkfi4xWryugOl4dnz62xWwXEm1Rx0JxD0jeX3wlO5Vzt9rnzZNkdrFlcHm7PLcVob9QbLg7PnGsxCtL1ufwPe/fS2kQUBXB8boRZzqXcRSEPSFOhDxoTq6igYIWmVVrwVUQrVIsiQpmCMJuWQBqtizaLLNJFaGkbSBd+TJNDbXoyZ+YmY/M+f6M4LoTCj3Pv7aSTjvTctd25djcrhOno8NB+QBCmg8yAmkBwcKb706gh9dDgOlJYCa87oW48EIFHz+fy9fJ35uXvl1fXoCYYHHrmrLjl8Mfgd6rbWaGxEwwPXaY2czIZ/G96OLQcfLaCVqWLTva2wXWoRNXXjtXSotUqngwUFA4tpzFzFt1yKlMG17Hu2YLY76AND9Lj0U3TuaVZrPB9K5CjXHLsewbXwZKOnx1MB+wEx5N52xodxEZ/KIfWlWjOSRpcR1tU1JrlveEJricDBXYTorc50IL7i1CbBtfh0so9d6I+dqAget5CweCAHXcmZO1IKQS/Gbnr3c+77YhCgl6z9HyC07nlW8hzn5PIS/fMyfP9hy50u0zYKc6Z6KSF6WjyorOL6WA2ejj0Nmf8hJg5ZT6Wd6UDyk7lCC9aOjx6PruQng29y8E15OTOBYTlHBhcVzq4IPY79hKyQwwefZjO2tru7ppGjR4OnjlLdt15Uxcsp2tNbgtX0lk1fQdPqBU71wytQYSYYHCgRUcKVxf8tsDuRduRaQtteDR4dK1Bt9qKgtOQkwhLYoe8zXK6F9hRhJ0TvOHxPGx1hE4IwaG2OX+EYDm9bzKrhLvSuoluS1j/Q+dLW3QIOGjkmJslyXL6oi3KjpSpNw07qLbXrS9QEDaQhUfOm4ik5GRZTg+aLJB2KvNot0x2w3RCpBw0cubPpXCnCny26kn7n5VwJ51ZsxU8oYB09GzwWgXNOqScKP9sea/65lBzR25vmHi7HGjh+lFLR8fTDZKTywpKjsPPfOthSZuaO6I0ayE8oIfKlw6knTfatSrx2ZGUHJs/sKin3TkXJJ5qrHnVskJ0QegAGz0cKH5OwhGVDYPraW9OlKCSqXGEB9lxVbfgovPpE9Ah0dBZ9V8IzkZeCipV5HeT9rzJvCLpSHvBasZj+fEBO9cATdflTF9DA3/4BP89gmM9LEkp+GjVr92PHgsaz8m8ifHQeugNdGgaqv0FrkOaLLw5hpbOBC3neJaPVv1R8lRRdGqvSA7hQVtmXdNQqLUsoIPgxLaloDudN7g+aaqsPAYPjSdkBaGj2RljOPMXUtJ0VJ4fT9pH7a84gk6qQs6kRo91E3SAIV6poAdlgENVWjW4vupd1cuOADxYD6TRs1eXs6dh03wYh3J5KTxSZ/xRRX3XVlh54ZEEHr2ePUh3nnLDeRyRQnrJucu3O/uxZ7YSnnqy6wmsB38zhqKzvFd7+ZymLMLN1OaZD5xDfgZKnzZ+4WNHHqaPTFSDAsyQZkDLkGvUwBrlZgPlJvD3cXAqP2dw/dpHOKZ7j56ZBKkHI7rcwyxDjWvggs9TqMR6EdxIDzgVHjl93ZO0I3ySh4+OzObIY7aFpg6aNKCmufn0oRQ+OVHe5fR7H4rKz46Q1Ucxy6T96BYsyHRlxXZOpfCTo7b5MRYD0P6iLXyStQ7Dv9DKRQp6Wm8ZmaFK/ArbUkgpfDr9aHAD0RQ6p9N8SvnFOdO3p5Dp28a3fEno4Dhp/gTYwelBFvBo+FTDqzkrKB3rwUrhXOJdMb1W8ePXB6tkUQltUshSNhqfa5fO63g0W9KzATjfDW7QAjzaZL1K5PNqbMMyUZEanEjERFlH8ZWdclUSaxQNh++RD2ZLLeCRAn7XMTjV8s7CXIMOdHU593xiu+JIeTlsGM6Qt3SiRKtJQBHzohO7QsNwRqMXaPJo86EjhGA4o9WHu7bqLh1lp/mtFcPR1uKJap9OIRIpRArt01HFGb7nMES9miipNumkUoVUKtWgwwNnVHuyeabaowO1RUcV13ngDGWvono9sbEx0xxr0KlfwEtLR5395IEzxI0vFI99+STH/pWCri6Tvmyc7NdxgxvyptbzJdUCnXCrdJRdmOGfjxmRJuPhU0XziTXoQFeXMZqNOp9Y4udlj1bjM+GqUoHpAJs/EzP8duPR7HX8fflQqbbpKKVO8+/j/LCKEe8ve3es0kgUhmH4v47FQmFhmYBiIkxEmwgiCUmR3UKMAYmwhNyGdqbxArzZnXO6hQQ5UwxTPM//VVO/xXTn92z643Pf1PB9Ojma/eeP6cOfgMh+7arx8O1rP/rZ+Pg/nY/0bbT/ehuOq9oPMd85ywKkw2HSoS/OzobSoY1h4klOpMMx0qEvpENLl8PLZgGlLhPpIB06c5lcB5S6TqSDdDhGOvTFpnG9CSi1SaRDuZPNSbOAUieJdJAOnTl5lw6tvGcB0qEjT1mAdOjI0+BpMBgElGq6kQ7SoUPjwXgsHVoYZwHS4TDp0BfTLEA6dGQymTYXUGqSSAfp0Jn5ZDKfS4dy8yyg1N8sQDocJh364jWRDuVes4BSi9fFQjq0sMgCSi3u0wWUuk+kQ7ltKmcbUGqbSAfp0Jntc0M6lHvOAkpVz1VVSYdyVRYgHTpSVXfNAkrdJdJBOnRmvb5br9cBpZpupIN06ND6Jl1AqZtEOkiHY6RDX0iHlm5Ok4BSp9KhdTqzmXQoN8sCpENHZrOHZgGlHhLp0Cqdc+nQwnkWIB0Okw59cX6bLqDUbSIdpENnRrcj6dDGKAuQDh3Z7Xaj3S6g1K4hHVqo611d1wHl6dTSoY1lvazrZUCpZSIdpENnlsljQKnHRDpIh2OkQ1+sGo+rgFKrRDqUu1hdXEiHFi6yAOlwmHToi6ssQDocJh364uXqpVnAv3bp0IhBIAig6HaBh5uJQSJpghSQBtIGhq5zd5qIRTCI934LP+vTWIe8YfgM1uGCoQuwDuesw1NYh4vmapgDsubGOliH22zbXAvI2hrrkLe9rcMl7y7AOtzk1QVYh3PW4SnGxjrkjV1A1jquq3W4YO0CrMM56/AU3y7AOtxkmr61gKypsQ5501HPOQKyynGUYh3ySheQVZZSFuuQt3QB1uGcdXiKvY6z7wFpe4R1/vsBKXObiM3QZ5oAAAAASUVORK5CYII=`;
|
|
40621
|
+
function getMouseGroup() {
|
|
40622
|
+
const group = new Group$2();
|
|
40623
|
+
const planGeometry = new PlaneGeometry$1(0.3, 0.3);
|
|
40624
|
+
const planTexture = new TextureLoader$1().load(planTextureUrl);
|
|
40625
|
+
planTexture.encoding = sRGBEncoding$1;
|
|
40626
|
+
const planMaterial = new MeshBasicMaterial$1({ map: planTexture, transparent: true, depthTest: false });
|
|
40627
|
+
const planMesh = new Mesh$1(planGeometry, planMaterial);
|
|
40628
|
+
const zPath = new CurvePath$1();
|
|
40629
|
+
zPath.add(new LineCurve3$1(new Vector3$1(0, 0, 0), new Vector3$1(0, 0, 0.1)));
|
|
40630
|
+
const zGeometry = new TubeGeometry$1(zPath, 10, 5e-3);
|
|
40631
|
+
const zMaterial = new MeshBasicMaterial$1({ color: 3404271, depthTest: false, side: DoubleSide$1 });
|
|
40632
|
+
const zMesh = new Mesh$1(zGeometry, zMaterial);
|
|
40633
|
+
const ballGeometry = new SphereGeometry$1(0.01, 32, 32);
|
|
40634
|
+
const ballMesh = new Mesh$1(ballGeometry, zMaterial);
|
|
40635
|
+
ballMesh.position.set(0, 0, 0.1);
|
|
40636
|
+
group.name = "mouse-current";
|
|
40637
|
+
group.add(planMesh, zMesh, ballMesh);
|
|
40638
|
+
return group;
|
|
40639
|
+
}
|
|
40640
|
+
const MAIN_NORMAL_PATH = "M31.379 15.466a1.045 1.045 0 0 1-.92 1.076l-11.276.607a1.6 1.6 0 0 0-1.512 1.511l-.599 11.113a1.045 1.045 0 0 1-.92 1.075l-.164.008a1.183 1.183 0 0 1-1.123-.975l-.016-.164-.221-10.768a1.6 1.6 0 0 0-1.567-1.567l-11.3-.231-.165-.016a1.187 1.187 0 0 1-.964-.996l-.01-.127.007-.164c.061-.496.455-.876.958-.917l.118-.003 11.112-.599a1.6 1.6 0 0 0 1.498-1.37l.014-.142.607-11.276a1.045 1.045 0 0 1 1.076-.92c.573.015 1.055.46 1.13 1.019l.009.121.221 10.766a1.6 1.6 0 0 0 1.567 1.566l11.3.234a1.181 1.181 0 0 1 1.14 1.139z";
|
|
40641
|
+
const MAIN_DONE_PATH = "M27.1772552,8.15828895 C27.8664561,7.48070421 28.5574369,7.81156875 28.8336646,8.04968716 C29.1098924,8.28780557 29.3990219,9.110014 28.8256559,9.79263351 L28.7110903,9.9165024 L13.9697229,25.1399531 C13.3288458,25.7700285 12.3239388,25.8070917 11.6402346,25.2511429 L11.5159715,25.1399531 L3.7056151,18.0063788 C3.01641417,17.3287941 3.00699739,16.2207954 3.68458213,15.5315945 C4.32230894,14.8829348 5.3413021,14.8364368 6.03356826,15.3981178 L6.15936649,15.5105615 L12.6856594,21.9049888 L27.1772552,8.15828895 Z";
|
|
40642
|
+
const MAIN_MOUSE_ENTER_FILL = "url(#fpm__main-b)";
|
|
40643
|
+
const MAIN_MOUSE_LEAVE_FILL = "url(#fpm__main-c)";
|
|
40644
|
+
const revokeSvg = `
|
|
40645
|
+
<svg class="fpm__revoke-icon" width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
|
|
40646
|
+
<defs>
|
|
40647
|
+
<linearGradient x1="47.631%" y1="55.183%" x2="2.967%" y2="86.323%" id="fpm__revoke-a">
|
|
40648
|
+
<stop stop-color="#FFF" offset="0%" />
|
|
40649
|
+
<stop stop-color="#FFF" stop-opacity=".5" offset="100%" />
|
|
40650
|
+
</linearGradient>
|
|
40651
|
+
<linearGradient x1="5.297%" y1="43.016%" x2="38.238%" y2="79.932%" id="fpm__revoke-b">
|
|
40652
|
+
<stop stop-color="#FFF" offset="0%" />
|
|
40653
|
+
<stop stop-color="#FFF" stop-opacity="0" offset="100%" />
|
|
40654
|
+
</linearGradient>
|
|
40655
|
+
</defs>
|
|
40656
|
+
<path
|
|
40657
|
+
d="M13.388 7.108c.552 0 1.005.42 1.06.957l.006.11v1.224c0 .921.745 1.667 1.666 1.667h7.184c5.804 0 10.509 4.616 10.509 10.309 0 5.595-4.544 10.15-10.21 10.305l-.3.004H8.924c-.917 0-1.66-.729-1.66-1.628 0-.846.658-1.541 1.5-1.62l.16-.008h14.38c3.972 0 7.191-3.158 7.191-7.053 0-3.81-3.08-6.916-6.933-7.049l-.257-.004H10.029l-.109-.005H8.212c-.245 0-.482-.085-.67-.237l-.09-.082a1.066 1.066 0 0 1-.065-1.422l.079-.086 5.175-5.077c.2-.195.468-.305.747-.305z"
|
|
40658
|
+
fill="url(#fpm__revoke-a)"
|
|
40659
|
+
fill-rule="nonzero"
|
|
40660
|
+
stroke="url(#fpm__revoke-b)"
|
|
40661
|
+
stroke-width=".5"
|
|
40662
|
+
/>
|
|
40663
|
+
</svg>
|
|
40664
|
+
`;
|
|
40665
|
+
const exitSvg = `
|
|
40666
|
+
<svg class="fpm__exit-icon width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
|
|
40667
|
+
<defs>
|
|
40668
|
+
<linearGradient x1="36.288%" y1="73.736%" x2="54.242%" y2="97.166%" id="fpm__exit-a">
|
|
40669
|
+
<stop stop-color="#FFF" offset="0%" />
|
|
40670
|
+
<stop stop-color="#FFF" stop-opacity=".5" offset="100%" />
|
|
40671
|
+
</linearGradient>
|
|
40672
|
+
<linearGradient x1="100%" y1="47.234%" x2="24.047%" y2="47.234%" id="fpm__exit-b">
|
|
40673
|
+
<stop stop-color="#FFF" offset="0%" />
|
|
40674
|
+
<stop stop-color="#FFF" stop-opacity=".005" offset="99.535%" />
|
|
40675
|
+
<stop stop-color="#FFF" stop-opacity="0" offset="100%" />
|
|
40676
|
+
</linearGradient>
|
|
40677
|
+
</defs>
|
|
40678
|
+
<path
|
|
40679
|
+
d="M22 7a1.5 1.5 0 0 1 .144 2.993L22 10h-9a1.5 1.5 0 0 0-1.493 1.356l-.007.144v17a1.5 1.5 0 0 0 1.356 1.493L13 30h9a1.5 1.5 0 0 1 .144 2.993L22 33h-9a4.5 4.5 0 0 1-4.495-4.288L8.5 28.5v-17a4.5 4.5 0 0 1 4.288-4.495L13 7h9zm6.317 7.755a1 1 0 0 1 .7.286l4.856 4.764a1 1 0 0 1-.7 1.713h-5.856V21.5h-8.032a1.5 1.5 0 1 1 0-3h6.365c.92 0 1.666-.746 1.667-1.667v-1.078a1 1 0 0 1 1-1z"
|
|
40680
|
+
fill="url(#fpm__exit-a)"
|
|
40681
|
+
fill-rule="nonzero"
|
|
40682
|
+
stroke="url(#fpm__exit-b)"
|
|
40683
|
+
stroke-width=".5"
|
|
40684
|
+
/>
|
|
40685
|
+
</svg>
|
|
40686
|
+
`;
|
|
40687
|
+
const mainSvg = `
|
|
40688
|
+
<svg class="fpm__main-icon" width="60" height="60" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg">
|
|
40689
|
+
<defs>
|
|
40690
|
+
<mask id="fpm__main-icon-mask">
|
|
40691
|
+
<rect id="fpm__main-icon-mask-black" x="0" y="0" width="30" height="30" fill="black"></rect>
|
|
40692
|
+
<rect id="fpm__main-icon-mask-white" x="0" y="0" width="0" height="30" fill="white"></rect>
|
|
40693
|
+
</mask>
|
|
40694
|
+
<linearGradient id="fpm__main-a" x1="25.371%" y1="0%" x2="109.587%" y2="172.268%">
|
|
40695
|
+
<stop stop-color="#FFF" offset="0%" />
|
|
40696
|
+
<stop stop-color="#FFF" stop-opacity=".77" offset="44.051%" />
|
|
40697
|
+
<stop stop-color="#FFF" stop-opacity=".201" offset="100%" />
|
|
40698
|
+
</linearGradient>
|
|
40699
|
+
<radialGradient id="fpm__main-b" fx="50%" fy="50%" r="50.864%" gradientTransform="matrix(-.98302 0 0 -1 .992 1)">
|
|
40700
|
+
<stop stop-color="#2D7CFF" offset="0%" />
|
|
40701
|
+
<stop stop-color="#2D7CFF" stop-opacity=".3" offset="100%" />
|
|
40702
|
+
</radialGradient>
|
|
40703
|
+
<radialGradient id="fpm__main-c" fx="50%" fy="50%" r="50.864%" gradientTransform="matrix(-.98302 0 0 -1 .992 1)">
|
|
40704
|
+
<stop stop-opacity=".4" offset="0%" />
|
|
40705
|
+
<stop stop-opacity=".12" offset="100%" />
|
|
40706
|
+
</radialGradient>
|
|
40707
|
+
</defs>
|
|
40708
|
+
<g fill="none" fill-rule="evenodd">
|
|
40709
|
+
<circle fill="url(#fpm__main-a)" cx="30" cy="30" r="30" />
|
|
40710
|
+
<path
|
|
40711
|
+
class="fpm__main-icon-path"
|
|
40712
|
+
d="${MAIN_NORMAL_PATH}"
|
|
40713
|
+
fill="${MAIN_MOUSE_LEAVE_FILL}"
|
|
40714
|
+
fill-rule="nonzero"
|
|
40715
|
+
transform="translate(14 14)"
|
|
40716
|
+
/>
|
|
40717
|
+
</g>
|
|
40718
|
+
</svg>
|
|
40719
|
+
`;
|
|
40720
|
+
var htmlString = `
|
|
40721
|
+
<style>
|
|
40722
|
+
.fpm__revoke {
|
|
40723
|
+
opacity: 0.3;
|
|
40724
|
+
}
|
|
40725
|
+
|
|
40726
|
+
.fpm__revoke.enabled {
|
|
40727
|
+
opacity: 0.7;
|
|
40728
|
+
}
|
|
40729
|
+
|
|
40730
|
+
.fpm__revoke.enabled:hover {
|
|
40731
|
+
opacity: 1;
|
|
40732
|
+
}
|
|
40733
|
+
|
|
40734
|
+
.fpm__revoke-icon {
|
|
40735
|
+
width: 40px;
|
|
40736
|
+
height: 40px;
|
|
40737
|
+
margin-top: 10px;
|
|
40738
|
+
cursor: pointer;
|
|
40739
|
+
}
|
|
40740
|
+
</style>
|
|
40741
|
+
<div class="fpm_ui-bg"></div>
|
|
40742
|
+
<div class="fpm_operating-space">
|
|
40743
|
+
<div class="fpm__ui-item fpm__revoke">
|
|
40744
|
+
${revokeSvg}
|
|
40745
|
+
<span class="fpm__text fpm__revoke-text">\u64A4\u9500</span>
|
|
40746
|
+
</div>
|
|
40747
|
+
<div class="fpm__ui-item fpm__main">
|
|
40748
|
+
${mainSvg}
|
|
40749
|
+
<span class="fpm__text fpm__main-text">\u6DFB\u52A0</span>
|
|
40750
|
+
</div>
|
|
40751
|
+
<div class="fpm__ui-item fpm__exit">
|
|
40752
|
+
${exitSvg}
|
|
40753
|
+
<span class="fpm__text fpm__exit-text">\u9000\u51FA</span>
|
|
40754
|
+
</div>
|
|
40755
|
+
</div>
|
|
40756
|
+
`;
|
|
40757
|
+
const uiWrapperStyle = {
|
|
40758
|
+
position: "absolute",
|
|
40759
|
+
top: "0",
|
|
40760
|
+
left: "0",
|
|
40761
|
+
width: "100%",
|
|
40762
|
+
height: "100%",
|
|
40763
|
+
opacity: "0",
|
|
40764
|
+
transform: "translate(0, 10px)",
|
|
40765
|
+
transition: "opacity 500ms ease-in-out, transform 500ms ease-in-out"
|
|
40766
|
+
};
|
|
40767
|
+
const operatingSpaceStyle = {
|
|
40768
|
+
position: "absolute",
|
|
40769
|
+
left: "50%",
|
|
40770
|
+
bottom: "32px",
|
|
40771
|
+
transform: "translateX(-50%)",
|
|
40772
|
+
width: "300px",
|
|
40773
|
+
height: "89px",
|
|
40774
|
+
display: "flex",
|
|
40775
|
+
justifyContent: "space-between",
|
|
40776
|
+
fontSize: "16px",
|
|
40777
|
+
pointerEvents: "all",
|
|
40778
|
+
color: "#fff",
|
|
40779
|
+
zIndex: "10"
|
|
40780
|
+
};
|
|
40781
|
+
const buttonGroupStyle = {
|
|
40782
|
+
height: "100%",
|
|
40783
|
+
width: "max-content",
|
|
40784
|
+
display: "flex",
|
|
40785
|
+
flexDirection: "column",
|
|
40786
|
+
justifyContent: "space-between",
|
|
40787
|
+
alignItems: "center"
|
|
40788
|
+
};
|
|
40789
|
+
const controllerBackgroundStyle = {
|
|
40790
|
+
position: "absolute",
|
|
40791
|
+
bottom: "0",
|
|
40792
|
+
left: "0",
|
|
40793
|
+
opacity: "0.5",
|
|
40794
|
+
width: "100%",
|
|
40795
|
+
height: "184px",
|
|
40796
|
+
background: `linear-gradient(180deg, rgba(0,0,0,0.00) 0%, #000000 100%)`,
|
|
40797
|
+
zIndex: "0"
|
|
40798
|
+
};
|
|
40799
|
+
const mainItemStyle = {
|
|
40800
|
+
margin: "0 80px",
|
|
40801
|
+
opacity: "0.7"
|
|
40802
|
+
};
|
|
40803
|
+
const exitItemStyle = {
|
|
40804
|
+
opacity: "0.7"
|
|
40805
|
+
};
|
|
40806
|
+
const mainIconStyle = {
|
|
40807
|
+
width: "60px",
|
|
40808
|
+
height: "60px",
|
|
40809
|
+
backgroundSize: "100%",
|
|
40810
|
+
cursor: "pointer"
|
|
40811
|
+
};
|
|
40812
|
+
const exitIconStyle = {
|
|
40813
|
+
width: "40px",
|
|
40814
|
+
height: "40px",
|
|
40815
|
+
marginTop: "10px",
|
|
40816
|
+
backgroundSize: "100%",
|
|
40817
|
+
cursor: "pointer"
|
|
40818
|
+
};
|
|
40819
|
+
const textStyle = {
|
|
40820
|
+
cursor: "default",
|
|
40821
|
+
userSelect: "none"
|
|
40822
|
+
};
|
|
40823
|
+
class MainBtnController {
|
|
40824
|
+
constructor(measureController, container) {
|
|
40825
|
+
__publicField(this, "container");
|
|
40826
|
+
__publicField(this, "measureController");
|
|
40827
|
+
__publicField(this, "mainIconMaskTween");
|
|
40828
|
+
__publicField(this, "mainElement");
|
|
40829
|
+
__publicField(this, "onMouseEnter", () => {
|
|
40830
|
+
const { mainItem, pathDom } = this.mainElement;
|
|
40831
|
+
mainItem.style.opacity = "1";
|
|
40832
|
+
pathDom.setAttribute("fill", MAIN_MOUSE_ENTER_FILL);
|
|
40833
|
+
});
|
|
40834
|
+
__publicField(this, "onMouseLeave", () => {
|
|
40835
|
+
const { mainItem, pathDom } = this.mainElement;
|
|
40836
|
+
mainItem.style.opacity = "0.7";
|
|
40837
|
+
pathDom.setAttribute("fill", MAIN_MOUSE_LEAVE_FILL);
|
|
40838
|
+
});
|
|
40839
|
+
__publicField(this, "onClick", () => {
|
|
40840
|
+
const mode = this.measureController.getCurrentMode();
|
|
40841
|
+
mode === "Watch" ? this.measureController.changeMode("Edit") : this.measureController.save().changeMode("Watch");
|
|
40842
|
+
});
|
|
40843
|
+
__publicField(this, "editedLineChangeHandler", (lines) => {
|
|
40844
|
+
if (lines.length > 1)
|
|
40845
|
+
return;
|
|
40846
|
+
if (lines.length === 0)
|
|
40847
|
+
return this.change2Cancel(false);
|
|
40848
|
+
this.change2Done();
|
|
40849
|
+
});
|
|
40850
|
+
__publicField(this, "modeChangeHandler", (mode) => {
|
|
40851
|
+
mode === "Watch" ? this.change2Add() : this.change2Cancel();
|
|
40852
|
+
});
|
|
40853
|
+
this.measureController = measureController;
|
|
40854
|
+
this.container = container;
|
|
40855
|
+
this.mainElement = this.getMainElement();
|
|
40856
|
+
Object.assign(this.mainElement.mainIcon.style, mainIconStyle);
|
|
40857
|
+
Object.assign(this.mainElement.mainItem.style, mainItemStyle);
|
|
40858
|
+
this.change2Add();
|
|
40859
|
+
this.measureController.hook.on("modeChange", this.modeChangeHandler);
|
|
40860
|
+
this.mainElement.mainIcon.addEventListener("click", this.onClick);
|
|
40861
|
+
this.mainElement.mainIcon.addEventListener("mouseenter", this.onMouseEnter);
|
|
40862
|
+
this.mainElement.mainIcon.addEventListener("mouseleave", this.onMouseLeave);
|
|
40863
|
+
}
|
|
40864
|
+
dispose() {
|
|
40865
|
+
this.measureController.hook.off("modeChange", this.modeChangeHandler);
|
|
40866
|
+
this.measureController.hook.off("editedLineChange", this.editedLineChangeHandler);
|
|
40867
|
+
this.mainElement.mainIcon.removeEventListener("click", this.onClick);
|
|
40868
|
+
this.mainElement.mainIcon.removeEventListener("mouseenter", this.onMouseEnter);
|
|
40869
|
+
this.mainElement.mainIcon.removeEventListener("mouseleave", this.onMouseLeave);
|
|
40870
|
+
}
|
|
40871
|
+
getMainElement() {
|
|
40872
|
+
const mainTextDom = this.container.querySelector(".fpm__main-text");
|
|
40873
|
+
const mainItem = this.container.querySelector(".fpm__main");
|
|
40874
|
+
const mainIcon = this.container.querySelector(".fpm__main-icon");
|
|
40875
|
+
const pathDom = mainItem == null ? void 0 : mainItem.querySelector(".fpm__main-icon-path");
|
|
40876
|
+
const maskWhiteRect = mainIcon == null ? void 0 : mainIcon.querySelector("#fpm__main-icon-mask-white");
|
|
40877
|
+
if (!mainItem || !mainTextDom || !mainIcon || !pathDom || !maskWhiteRect)
|
|
40878
|
+
throw new Error("cannot find dom");
|
|
40879
|
+
return { mainTextDom, mainItem, mainIcon, pathDom, maskWhiteRect };
|
|
40880
|
+
}
|
|
40881
|
+
change2Add() {
|
|
40882
|
+
this.measureController.hook.off("editedLineChange", this.editedLineChangeHandler);
|
|
40883
|
+
const { mainIcon, mainTextDom, pathDom } = this.mainElement;
|
|
40884
|
+
mainIcon.style.transition = mainTextDom.innerText === "\u5B8C\u6210" ? "none" : "transform 300ms ease-in-out";
|
|
40885
|
+
mainIcon.style.transform = "rotate(0deg)";
|
|
40886
|
+
mainTextDom.innerText = "\u6DFB\u52A0";
|
|
40887
|
+
pathDom == null ? void 0 : pathDom.setAttribute("d", MAIN_NORMAL_PATH);
|
|
40888
|
+
}
|
|
40889
|
+
change2Cancel(withAnime = true) {
|
|
40890
|
+
const { mainIcon, mainTextDom, pathDom } = this.mainElement;
|
|
40891
|
+
pathDom.setAttribute("d", MAIN_NORMAL_PATH);
|
|
40892
|
+
pathDom.setAttribute("mask", "");
|
|
40893
|
+
mainIcon.style.transition = withAnime ? "transform 300ms ease-in-out" : "none";
|
|
40894
|
+
mainIcon.style.transform = "rotate(45deg)";
|
|
40895
|
+
mainTextDom && (mainTextDom.innerText = "\u53D6\u6D88");
|
|
40896
|
+
this.measureController.hook.on("editedLineChange", this.editedLineChangeHandler);
|
|
40897
|
+
}
|
|
40898
|
+
change2Done() {
|
|
40899
|
+
var _a;
|
|
40900
|
+
const { mainTextDom, mainIcon, pathDom, maskWhiteRect } = this.getMainElement();
|
|
40901
|
+
if (mainTextDom.innerText === "\u5B8C\u6210")
|
|
40902
|
+
return;
|
|
40903
|
+
mainIcon.style.transition = "none";
|
|
40904
|
+
mainIcon.style.transform = "rotate(0deg)";
|
|
40905
|
+
mainTextDom.innerText = "\u5B8C\u6210";
|
|
40906
|
+
pathDom.setAttribute("d", MAIN_DONE_PATH);
|
|
40907
|
+
pathDom.setAttribute("mask", `url(#fpm__main-icon-mask)`);
|
|
40908
|
+
(_a = this.mainIconMaskTween) == null ? void 0 : _a.dispose();
|
|
40909
|
+
this.mainIconMaskTween = tweenProgress().easing(exports.Easing.Quartic.InOut).onUpdate(({ progress }) => {
|
|
40910
|
+
maskWhiteRect.setAttribute("width", (progress * 30).toString());
|
|
40911
|
+
}).onComplete(() => {
|
|
40912
|
+
var _a2;
|
|
40913
|
+
return (_a2 = this.mainIconMaskTween) == null ? void 0 : _a2.dispose();
|
|
40914
|
+
}).play();
|
|
40915
|
+
}
|
|
40916
|
+
}
|
|
40917
|
+
class Revoke {
|
|
40918
|
+
constructor(measureController, container) {
|
|
40919
|
+
__publicField(this, "container");
|
|
40920
|
+
__publicField(this, "revokeIcon");
|
|
40921
|
+
__publicField(this, "revokeItem");
|
|
40922
|
+
__publicField(this, "measureController");
|
|
40923
|
+
__publicField(this, "onClick", () => {
|
|
40924
|
+
this.measureController.revoke();
|
|
40925
|
+
});
|
|
40926
|
+
__publicField(this, "onModeChange", (mode) => {
|
|
40927
|
+
if (mode !== "Edit") {
|
|
40928
|
+
this.revokeItem.classList.remove("enabled");
|
|
40929
|
+
return;
|
|
40930
|
+
}
|
|
40931
|
+
this.revokeItem.classList.add("enabled");
|
|
40932
|
+
});
|
|
40933
|
+
__publicField(this, "handleRevoke", () => {
|
|
40934
|
+
return () => {
|
|
40935
|
+
};
|
|
40936
|
+
});
|
|
40937
|
+
this.measureController = measureController;
|
|
40938
|
+
this.container = container;
|
|
40939
|
+
const revokeIcon = this.container.querySelector(".fpm__revoke-icon");
|
|
40940
|
+
const revokeItem = this.container.querySelector(".fpm__revoke");
|
|
40941
|
+
if (!revokeIcon || !revokeItem)
|
|
40942
|
+
throw new Error("\u4E0D\u6B63\u786E\u7684\u9009\u62E9\u5668");
|
|
40943
|
+
this.revokeIcon = revokeIcon;
|
|
40944
|
+
this.revokeItem = revokeItem;
|
|
40945
|
+
this.revokeIcon.addEventListener("click", this.onClick);
|
|
40946
|
+
measureController.hook.on("modeChange", this.onModeChange);
|
|
40947
|
+
}
|
|
40948
|
+
dispose() {
|
|
40949
|
+
this.revokeIcon.removeEventListener("click", this.onClick);
|
|
40950
|
+
this.measureController.hook.off("modeChange", this.onModeChange);
|
|
40951
|
+
}
|
|
40952
|
+
}
|
|
40953
|
+
class UIController {
|
|
40954
|
+
constructor(measureController, params) {
|
|
40955
|
+
__publicField(this, "revoke");
|
|
40956
|
+
__publicField(this, "container");
|
|
40957
|
+
__publicField(this, "mainController");
|
|
40958
|
+
__publicField(this, "disposers", []);
|
|
40959
|
+
__publicField(this, "measureController");
|
|
40960
|
+
__publicField(this, "handleExit", () => {
|
|
40961
|
+
const exitIcon = this.container.querySelector(".fpm__exit-icon");
|
|
40962
|
+
const exitItem = this.container.querySelector(".fpm__exit");
|
|
40963
|
+
if (!exitItem || !exitIcon)
|
|
40964
|
+
throw new Error("cannot find dom");
|
|
40965
|
+
Object.assign(exitItem.style, exitItemStyle);
|
|
40966
|
+
Object.assign(exitIcon == null ? void 0 : exitIcon.style, exitIconStyle);
|
|
40967
|
+
const onMouseEnter = () => exitItem.style.opacity = "1";
|
|
40968
|
+
const onMouseLeave = () => exitItem.style.opacity = "0.7";
|
|
40969
|
+
const handleClick = () => {
|
|
40970
|
+
this.measureController.disable();
|
|
40971
|
+
};
|
|
40972
|
+
exitIcon.addEventListener("click", handleClick);
|
|
40973
|
+
exitIcon.addEventListener("mouseenter", onMouseEnter);
|
|
40974
|
+
exitIcon.addEventListener("mouseleave", onMouseLeave);
|
|
40975
|
+
return () => {
|
|
40976
|
+
exitIcon.removeEventListener("click", handleClick);
|
|
40977
|
+
exitIcon.removeEventListener("mouseenter", onMouseEnter);
|
|
40978
|
+
exitIcon.removeEventListener("mouseleave", onMouseLeave);
|
|
40979
|
+
};
|
|
40980
|
+
});
|
|
40981
|
+
this.measureController = measureController;
|
|
40982
|
+
this.container = document.createElement("div");
|
|
40983
|
+
this.container.innerHTML = htmlString;
|
|
40984
|
+
this.container.classList.add("fpm__ui-controller");
|
|
40985
|
+
params.container.appendChild(this.container);
|
|
40986
|
+
const textDoms = this.container.querySelectorAll(".fpm__text");
|
|
40987
|
+
const UIItems = this.container.querySelectorAll(".fpm__ui-item");
|
|
40988
|
+
const bgDom = this.container.querySelector(".fpm_ui-bg");
|
|
40989
|
+
const operatingSpaceDom = this.container.querySelector(".fpm_operating-space");
|
|
40990
|
+
Object.assign(bgDom == null ? void 0 : bgDom.style, controllerBackgroundStyle);
|
|
40991
|
+
Object.assign(operatingSpaceDom == null ? void 0 : operatingSpaceDom.style, operatingSpaceStyle);
|
|
40992
|
+
Object.assign(this.container.style, uiWrapperStyle);
|
|
40993
|
+
UIItems.forEach((item) => Object.assign(item.style, buttonGroupStyle));
|
|
40994
|
+
textDoms.forEach((item) => Object.assign(item.style, textStyle));
|
|
40995
|
+
}
|
|
40996
|
+
dispose() {
|
|
40997
|
+
this.hide();
|
|
40998
|
+
this.container.remove();
|
|
40999
|
+
}
|
|
41000
|
+
show() {
|
|
41001
|
+
this.container.style.opacity = "1";
|
|
41002
|
+
this.container.style.transform = "translate(0, 0)";
|
|
41003
|
+
this.revoke = new Revoke(this.measureController, this.container);
|
|
41004
|
+
this.mainController = new MainBtnController(this.measureController, this.container);
|
|
41005
|
+
this.disposers.push(this.handleExit());
|
|
41006
|
+
return this;
|
|
41007
|
+
}
|
|
41008
|
+
hide() {
|
|
41009
|
+
var _a, _b;
|
|
41010
|
+
this.container.style.opacity = "0";
|
|
41011
|
+
this.container.style.transform = "translate(0, 10px)";
|
|
41012
|
+
(_a = this.revoke) == null ? void 0 : _a.dispose();
|
|
41013
|
+
(_b = this.mainController) == null ? void 0 : _b.dispose();
|
|
41014
|
+
this.disposers.forEach((disposer) => disposer());
|
|
41015
|
+
this.disposers = [];
|
|
41016
|
+
return this;
|
|
41017
|
+
}
|
|
41018
|
+
}
|
|
41019
|
+
class GuideController {
|
|
41020
|
+
constructor(measureController, params) {
|
|
41021
|
+
__publicField(this, "measureController");
|
|
41022
|
+
__publicField(this, "textDom", document.createElement("span"));
|
|
41023
|
+
__publicField(this, "container", document.createElement("div"));
|
|
41024
|
+
__publicField(this, "hasAnchor", false);
|
|
41025
|
+
__publicField(this, "onModelChange", (mode) => {
|
|
41026
|
+
if (mode === "Watch") {
|
|
41027
|
+
this.textDom.innerText = ``;
|
|
41028
|
+
return;
|
|
41029
|
+
}
|
|
41030
|
+
this.textDom.innerText = `\u8BF7\u9009\u62E9\u7B2C\u4E00\u4E2A\u6D4B\u91CF\u70B9\uFF0CEsc\u6216\u5355\u51FB\u9F20\u6807\u53F3\u952E\u53EF\u53D6\u6D88\u9009\u62E9`;
|
|
41031
|
+
});
|
|
41032
|
+
__publicField(this, "anchorChange", (anchor) => {
|
|
41033
|
+
if (!this.hasAnchor && !!anchor) {
|
|
41034
|
+
this.hasAnchor = true;
|
|
41035
|
+
this.textDom.innerText = `\u9009\u62E9\u4E0B\u4E00\u4E2A\u6D4B\u91CF\u70B9\uFF0CEsc\u6216\u5355\u51FB\u9F20\u6807\u53F3\u952E\u53D6\u6D88\u9009\u62E9`;
|
|
41036
|
+
} else if (!anchor) {
|
|
41037
|
+
this.hasAnchor = false;
|
|
41038
|
+
this.textDom.innerText = `\u8BF7\u9009\u62E9\u7B2C\u4E00\u4E2A\u6D4B\u91CF\u70B9\uFF0CEsc\u6216\u5355\u51FB\u9F20\u6807\u53F3\u952E\u53EF\u53D6\u6D88\u9009\u62E9`;
|
|
41039
|
+
}
|
|
41040
|
+
});
|
|
41041
|
+
__publicField(this, "onEditedLineChange", (lines) => {
|
|
41042
|
+
if (lines.length === 1) {
|
|
41043
|
+
this.textDom.innerText = `\u53EF\u4EE5\u8FDE\u7EED\u9009\u62E9\u6D4B\u91CF\u70B9\uFF0C\u6216\u70B9\u51FB\u4E0B\u65B9\u201C\u5B8C\u6210\u201D\u7ED3\u675F\u6D4B\u91CF\uFF08Esc\u53D6\u6D88\uFF0CCommand+S\u4FDD\u5B58\uFF09`;
|
|
41044
|
+
}
|
|
41045
|
+
});
|
|
41046
|
+
this.initDom();
|
|
41047
|
+
params.container.append(this.container);
|
|
41048
|
+
this.measureController = measureController;
|
|
41049
|
+
measureController.hook.on("modeChange", this.onModelChange);
|
|
41050
|
+
measureController.hook.on("anchorChange", this.anchorChange);
|
|
41051
|
+
measureController.hook.on("editedLineChange", this.onEditedLineChange);
|
|
41052
|
+
}
|
|
41053
|
+
dispose() {
|
|
41054
|
+
this.hide();
|
|
41055
|
+
this.container.remove();
|
|
41056
|
+
}
|
|
41057
|
+
show() {
|
|
41058
|
+
this.container.style.opacity = "1";
|
|
41059
|
+
this.container.style.transform = "translate(0, 0)";
|
|
41060
|
+
return this;
|
|
41061
|
+
}
|
|
41062
|
+
hide() {
|
|
41063
|
+
this.container.style.opacity = "0";
|
|
41064
|
+
this.container.style.transform = "translate(0, -10px)";
|
|
41065
|
+
this.measureController.hook.off("modeChange", this.onModelChange);
|
|
41066
|
+
this.measureController.hook.off("anchorChange", this.anchorChange);
|
|
41067
|
+
this.measureController.hook.off("editedLineChange", this.onEditedLineChange);
|
|
41068
|
+
return this;
|
|
41069
|
+
}
|
|
41070
|
+
initDom() {
|
|
41071
|
+
const container = this.container;
|
|
41072
|
+
const textDom = this.textDom;
|
|
41073
|
+
container.classList.add("fpm__guide-container");
|
|
41074
|
+
container.style.position = "absolute";
|
|
41075
|
+
container.style.top = "0px";
|
|
41076
|
+
container.style.left = "0px";
|
|
41077
|
+
container.style.width = "100%";
|
|
41078
|
+
container.style.height = "110px";
|
|
41079
|
+
container.style.display = "flex";
|
|
41080
|
+
container.style.alignItems = "center";
|
|
41081
|
+
container.style.justifyContent = "center";
|
|
41082
|
+
container.style.transform = "translate(0, -10px)";
|
|
41083
|
+
container.style.background = `linear-gradient(180deg, rgba(0,0,0,0.40) 0%, rgba(0,0,0,0.00) 100%)`;
|
|
41084
|
+
container.style.transition = "opacity 500ms ease-in-out, transform 500ms ease-in-out";
|
|
41085
|
+
container.style.opacity = "0";
|
|
41086
|
+
textDom.classList.add("fpm__guide-text");
|
|
41087
|
+
textDom.style.color = "#fff";
|
|
41088
|
+
textDom.style.fontSize = "20px";
|
|
41089
|
+
textDom.innerText = `\u70B9\u51FB\u4E0B\u65B9\u201C\u6DFB\u52A0\u201D\u5F00\u59CB\u6D4B\u8DDD`;
|
|
41090
|
+
container.appendChild(textDom);
|
|
41091
|
+
}
|
|
41092
|
+
}
|
|
41093
|
+
class ShortcutKeyController {
|
|
41094
|
+
constructor(measureController, five) {
|
|
41095
|
+
__publicField(this, "five");
|
|
41096
|
+
__publicField(this, "measureController");
|
|
41097
|
+
__publicField(this, "onKeyDown", (e) => {
|
|
41098
|
+
if (e.metaKey && e.code === "KeyS") {
|
|
41099
|
+
this.measureController.save().changeMode("Watch");
|
|
41100
|
+
e.preventDefault();
|
|
41101
|
+
return;
|
|
41102
|
+
}
|
|
41103
|
+
if (e.code === "Escape")
|
|
41104
|
+
return this.escape();
|
|
41105
|
+
});
|
|
41106
|
+
__publicField(this, "onMouseDown", (e) => {
|
|
41107
|
+
if (e.button !== 2)
|
|
41108
|
+
return;
|
|
41109
|
+
e.preventDefault();
|
|
41110
|
+
this.escape();
|
|
41111
|
+
});
|
|
41112
|
+
this.five = five;
|
|
41113
|
+
this.measureController = measureController;
|
|
41114
|
+
const fiveElement = this.five.getElement();
|
|
41115
|
+
if (!fiveElement)
|
|
41116
|
+
return;
|
|
41117
|
+
document.body.addEventListener("keydown", this.onKeyDown);
|
|
41118
|
+
fiveElement.addEventListener("mousedown", this.onMouseDown);
|
|
41119
|
+
}
|
|
41120
|
+
dispose() {
|
|
41121
|
+
const fiveElement = this.five.getElement();
|
|
41122
|
+
if (!fiveElement)
|
|
41123
|
+
return;
|
|
41124
|
+
document.body.removeEventListener("keydown", this.onKeyDown);
|
|
41125
|
+
fiveElement.removeEventListener("mousedown", this.onMouseDown);
|
|
41126
|
+
}
|
|
41127
|
+
escape() {
|
|
41128
|
+
if (this.measureController.getCurrentMode() === "Watch")
|
|
41129
|
+
return this.measureController.disable();
|
|
41130
|
+
return this.measureController.changeMode("Watch");
|
|
41131
|
+
}
|
|
41132
|
+
}
|
|
41133
|
+
class MeasureController {
|
|
41134
|
+
constructor(five, params) {
|
|
41135
|
+
__publicField(this, "hasOpen", false);
|
|
41136
|
+
__publicField(this, "hook", new Subscribe());
|
|
41137
|
+
__publicField(this, "five");
|
|
41138
|
+
__publicField(this, "model");
|
|
41139
|
+
__publicField(this, "group");
|
|
41140
|
+
__publicField(this, "magnifier");
|
|
41141
|
+
__publicField(this, "fiveHelper");
|
|
41142
|
+
__publicField(this, "useUIController");
|
|
41143
|
+
__publicField(this, "params");
|
|
41144
|
+
__publicField(this, "useGuideController");
|
|
41145
|
+
__publicField(this, "container", document.createElement("div"));
|
|
41146
|
+
__publicField(this, "shortcutKeyController");
|
|
41147
|
+
__publicField(this, "controller", null);
|
|
41148
|
+
__publicField(this, "controllerParams");
|
|
41149
|
+
__publicField(this, "getCurrentMode", () => {
|
|
41150
|
+
if (this.controller instanceof EditController)
|
|
41151
|
+
return "Edit";
|
|
41152
|
+
if (this.controller instanceof WatchController)
|
|
41153
|
+
return "Watch";
|
|
41154
|
+
return null;
|
|
41155
|
+
});
|
|
41156
|
+
__publicField(this, "changeMode", (mode) => {
|
|
41157
|
+
var _a;
|
|
41158
|
+
if (!this.hasOpen)
|
|
41159
|
+
return;
|
|
41160
|
+
if (this.getCurrentMode() === mode)
|
|
41161
|
+
return;
|
|
41162
|
+
(_a = this.controller) == null ? void 0 : _a.dispose();
|
|
41163
|
+
const controllerMap = {
|
|
41164
|
+
Watch: WatchController,
|
|
41165
|
+
Edit: EditController
|
|
41166
|
+
};
|
|
41167
|
+
if (!controllerMap[mode])
|
|
41168
|
+
throw new Error("\u4E0D\u5B58\u5728\u7684 Mode");
|
|
41169
|
+
this.controller = new controllerMap[mode](this.controllerParams);
|
|
41170
|
+
this.hook.emit("modeChange", mode);
|
|
41171
|
+
});
|
|
41172
|
+
this.five = five;
|
|
41173
|
+
this.params = params;
|
|
41174
|
+
this.model = new Model({ userDistanceItemCreator: this.params.userDistanceItemCreator });
|
|
41175
|
+
this.fiveHelper = new FiveHelper(five);
|
|
41176
|
+
const magnifierSize = 190;
|
|
41177
|
+
const magnifierScale = 2;
|
|
41178
|
+
this.magnifier = new Magnifier(five, { scale: magnifierScale, width: magnifierSize, height: magnifierSize });
|
|
41179
|
+
this.group = new Group$2();
|
|
41180
|
+
this.group.name = "plugin-measure-group";
|
|
41181
|
+
this.container.classList.add("five-plugin-measure-container");
|
|
41182
|
+
this.container.style.position = "relative";
|
|
41183
|
+
this.container.style.pointerEvents = "none";
|
|
41184
|
+
this.container.style.width = "100%";
|
|
41185
|
+
this.container.style.height = "100%";
|
|
41186
|
+
this.container.style.background = "rgba(0, 0, 0, 0.15)";
|
|
41187
|
+
this.controllerParams = {
|
|
41188
|
+
five: this.five,
|
|
41189
|
+
hook: this.hook,
|
|
41190
|
+
group: this.group,
|
|
41191
|
+
model: this.model,
|
|
41192
|
+
magnifier: this.magnifier,
|
|
41193
|
+
container: this.container,
|
|
41194
|
+
fiveHelper: this.fiveHelper,
|
|
41195
|
+
mouseGroup: getMouseGroup(),
|
|
41196
|
+
userDistanceItemCreator: this.params.userDistanceItemCreator
|
|
41197
|
+
};
|
|
41198
|
+
if (this.params.useUIController !== false)
|
|
41199
|
+
this.useUIController = new UIController(this, this.controllerParams);
|
|
41200
|
+
if (this.params.useUIController !== false)
|
|
41201
|
+
this.useGuideController = new GuideController(this, this.controllerParams);
|
|
41202
|
+
}
|
|
41203
|
+
appendTo(parent) {
|
|
41204
|
+
parent.append(this.container);
|
|
41205
|
+
}
|
|
41206
|
+
dispose() {
|
|
41207
|
+
var _a, _b;
|
|
41208
|
+
this.disable();
|
|
41209
|
+
(_a = this.useUIController) == null ? void 0 : _a.dispose();
|
|
41210
|
+
(_b = this.magnifier) == null ? void 0 : _b.dispose();
|
|
41211
|
+
this.five.needsRender = true;
|
|
41212
|
+
}
|
|
41213
|
+
load(data) {
|
|
41214
|
+
this.model.parse(data);
|
|
41215
|
+
this.save();
|
|
41216
|
+
}
|
|
41217
|
+
enable() {
|
|
41218
|
+
var _a, _b;
|
|
41219
|
+
if (this.hasOpen)
|
|
41220
|
+
return;
|
|
41221
|
+
this.hasOpen = true;
|
|
41222
|
+
this.five.scene.add(this.group);
|
|
41223
|
+
this.five.helperVisible = false;
|
|
41224
|
+
this.controller = new WatchController(this.controllerParams);
|
|
41225
|
+
(_a = this.useUIController) == null ? void 0 : _a.show();
|
|
41226
|
+
(_b = this.useGuideController) == null ? void 0 : _b.show();
|
|
41227
|
+
this.shortcutKeyController = new ShortcutKeyController(this, this.five);
|
|
41228
|
+
this.hook.emit("enable", true);
|
|
41229
|
+
}
|
|
41230
|
+
disable() {
|
|
41231
|
+
var _a, _b, _c, _d;
|
|
41232
|
+
this.hasOpen = false;
|
|
41233
|
+
(_a = this.controller) == null ? void 0 : _a.dispose();
|
|
41234
|
+
(_b = this.useUIController) == null ? void 0 : _b.hide();
|
|
41235
|
+
(_c = this.useGuideController) == null ? void 0 : _c.hide();
|
|
41236
|
+
(_d = this.shortcutKeyController) == null ? void 0 : _d.dispose();
|
|
41237
|
+
this.controller = null;
|
|
41238
|
+
this.five.helperVisible = true;
|
|
41239
|
+
this.five.scene.remove(this.group);
|
|
41240
|
+
this.five.needsRender = true;
|
|
41241
|
+
this.hook.emit("disable", true);
|
|
41242
|
+
}
|
|
41243
|
+
revoke() {
|
|
41244
|
+
if (!(this.controller instanceof EditController))
|
|
41245
|
+
return;
|
|
41246
|
+
this.controller.revoke();
|
|
41247
|
+
return;
|
|
41248
|
+
}
|
|
41249
|
+
removeLineByID(lineID) {
|
|
41250
|
+
this.model.removeLineByID(lineID);
|
|
41251
|
+
}
|
|
41252
|
+
highlightLine(lineID) {
|
|
41253
|
+
if (this.getCurrentMode() !== "Watch")
|
|
41254
|
+
return false;
|
|
41255
|
+
const line = this.model.getLineByID(lineID);
|
|
41256
|
+
if (!line)
|
|
41257
|
+
return false;
|
|
41258
|
+
this.controller.highlightLine(line);
|
|
41259
|
+
return true;
|
|
41260
|
+
}
|
|
41261
|
+
clearHighlightLines() {
|
|
41262
|
+
if (this.getCurrentMode() !== "Watch")
|
|
41263
|
+
return false;
|
|
41264
|
+
this.controller.clearHighlightLines();
|
|
41265
|
+
return true;
|
|
41266
|
+
}
|
|
41267
|
+
save() {
|
|
41268
|
+
if (!(this.controller instanceof EditController))
|
|
41269
|
+
return this;
|
|
41270
|
+
this.model.mergeModel(this.controller.model);
|
|
41271
|
+
return this;
|
|
41272
|
+
}
|
|
41273
|
+
toJson() {
|
|
41274
|
+
return this.model.toJson();
|
|
41275
|
+
}
|
|
37795
41276
|
}
|
|
37796
|
-
|
|
41277
|
+
const PanoMeasurePlugin = function MeasurePlugin(five, params) {
|
|
41278
|
+
return new MeasureController(five, params);
|
|
41279
|
+
};
|
|
41280
|
+
export { CSS3DRenderPlugin, CameraMovementPlugin, FLOOR_PLAN_ATTACHED_TO, ModelChassisCompassPlugin, ModelEntryDoorGuidePlugin, ModelFloorplanPlugin, ModelRoomLabelPlugin, ModelViewPlugin, PanoCompassPlugin, PanoCursorRaycasterPlugin, PanoFloorplanRadarPlugin, PanoMeasurePlugin, PanoRulerPlugin, TopviewFloorplanPlugin };
|