@realsee/dnalogel 4.0.0-webgpu.3 → 4.0.0-webgpu.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/floorplan.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +270 -35
- package/dist/index.js.map +1 -0
- package/dist/internal/{BasePlugin-CT5K8m36.js → BasePlugin-DC5m72La.js} +3 -3
- package/dist/internal/{BasePlugin-CT5K8m36.js.map → BasePlugin-DC5m72La.js.map} +1 -1
- package/dist/internal/BasePluginWithData-D_0W46_q.js +7 -0
- package/dist/internal/{BasePluginWithData-9z4tpAT4.js.map → BasePluginWithData-D_0W46_q.js.map} +1 -1
- package/dist/internal/{BetterTween-BX0aTvP1.js → BetterTween-DmptqE8m.js} +2 -2
- package/dist/internal/{BetterTween-BX0aTvP1.js.map → BetterTween-DmptqE8m.js.map} +1 -1
- package/dist/internal/{CSS3DRenderPlugin-ccSpcvwd.js → CSS3DRenderPlugin-CEatgl0m.js} +3 -3
- package/dist/internal/CSS3DRenderPlugin-CEatgl0m.js.map +1 -0
- package/dist/internal/{Controller-Csut_kcH.js → Controller-D6o4OGWJ.js} +8 -8
- package/dist/internal/{Controller-Csut_kcH.js.map → Controller-D6o4OGWJ.js.map} +1 -1
- package/dist/internal/{FiveDomEvents-3H9NvDOz.js → FiveDomEvents-BUBLFzti.js} +2 -2
- package/dist/internal/{FiveDomEvents-3H9NvDOz.js.map → FiveDomEvents-BUBLFzti.js.map} +1 -1
- package/dist/internal/FivePuppet-C6QmVY70.js +67 -0
- package/dist/internal/FivePuppet-C6QmVY70.js.map +1 -0
- package/dist/internal/{PointHelper-D565h9b_.js → PointHelper-DIhgdjY2.js} +48 -48
- package/dist/internal/{PointHelper-D565h9b_.js.map → PointHelper-DIhgdjY2.js.map} +1 -1
- package/dist/internal/{Polygon-CBGvYUfJ.js → Polygon-D3xIL1Pl.js} +30 -30
- package/dist/internal/{Polygon-CBGvYUfJ.js.map → Polygon-D3xIL1Pl.js.map} +1 -1
- package/dist/internal/{Prism-Dm5ESkgg.js → Prism-CJlyAEAU.js} +13 -13
- package/dist/internal/{Prism-Dm5ESkgg.js.map → Prism-CJlyAEAU.js.map} +1 -1
- package/dist/internal/{Rectangle-D-zkDycu.js → Rectangle-BpL9lNKU.js} +118 -129
- package/dist/internal/Rectangle-BpL9lNKU.js.map +1 -0
- package/dist/internal/{Work-DF8j5GnL.js → Work-BE4AgdwH.js} +9 -9
- package/dist/internal/{Work-DF8j5GnL.js.map → Work-BE4AgdwH.js.map} +1 -1
- package/dist/internal/{animationFrame-XGKHIeQK.js → animationFrame-CacKXN8l.js} +14 -3
- package/dist/internal/animationFrame-CacKXN8l.js.map +1 -0
- package/dist/internal/{area-maker-Bd9l2pIp.js → area-maker-Bnhx4SkH.js} +4 -4
- package/dist/internal/{area-maker-Bd9l2pIp.js.map → area-maker-Bnhx4SkH.js.map} +1 -1
- package/dist/internal/{boundingBox-DvCor5Hd.js → boundingBox-CIqXgNXW.js} +2 -2
- package/dist/internal/{boundingBox-DvCor5Hd.js.map → boundingBox-CIqXgNXW.js.map} +1 -1
- package/dist/internal/{camera-movement-CwI7UqUk.js → camera-movement-C1pwfMk_.js} +2 -2
- package/dist/internal/camera-movement-C1pwfMk_.js.map +1 -0
- package/dist/internal/{changeMode-BVGYCoqu.js → changeMode-D_I2AOjH.js} +2 -2
- package/dist/internal/{changeMode-BVGYCoqu.js.map → changeMode-D_I2AOjH.js.map} +1 -1
- package/dist/internal/{controller-BWkZT0l1.js → controller-DIDtFrBE.js} +1991 -2050
- package/dist/internal/controller-DIDtFrBE.js.map +1 -0
- package/dist/internal/{cruise-C3F0eNQ-.js → cruise-B50Tcq66.js} +2 -2
- package/dist/internal/{cruise-C3F0eNQ-.js.map → cruise-B50Tcq66.js.map} +1 -1
- package/dist/internal/{current-pano-image-DKUWluR-.js → current-pano-image-BCFr6njt.js} +4 -4
- package/dist/internal/{current-pano-image-DKUWluR-.js.map → current-pano-image-BCFr6njt.js.map} +1 -1
- package/dist/internal/{defaultUrls-CjKkS9k9.js → defaultUrls-CfMtGzqM.js} +14 -3
- package/dist/internal/defaultUrls-CfMtGzqM.js.map +1 -0
- package/dist/internal/{fire-scene-CczaBz2_.js → fire-scene-BzZGvyh_.js} +9 -4
- package/dist/internal/fire-scene-BzZGvyh_.js.map +1 -0
- package/dist/internal/{fiveModelLoad-mg-TnpnM.js → fiveModelLoad-BUIBYxzp.js} +2 -2
- package/dist/internal/{fiveModelLoad-mg-TnpnM.js.map → fiveModelLoad-BUIBYxzp.js.map} +1 -1
- package/dist/internal/{floorplan-KWlIsTvO.js → floorplan-C8BGw87S.js} +5 -5
- package/dist/internal/{floorplan-KWlIsTvO.js.map → floorplan-C8BGw87S.js.map} +1 -1
- package/dist/internal/{generatePolygonGeometry-B_5JFq8y.js → generatePolygonGeometry-BOnzdCaG.js} +181 -178
- package/dist/internal/generatePolygonGeometry-BOnzdCaG.js.map +1 -0
- package/dist/internal/{lookObject-wesf8xt6.js → lookObject-DuRab5wf.js} +2 -2
- package/dist/internal/{lookObject-wesf8xt6.js.map → lookObject-DuRab5wf.js.map} +1 -1
- package/dist/internal/{measure-BX6boAC7.js → measure-B4jFwdQ6.js} +5 -5
- package/dist/internal/{measure-BX6boAC7.js.map → measure-B4jFwdQ6.js.map} +1 -1
- package/dist/internal/{model-chassis-compass-InVNmOAQ.js → model-chassis-compass-C6NTVMLo.js} +2 -2
- package/dist/internal/{model-chassis-compass-InVNmOAQ.js.map → model-chassis-compass-C6NTVMLo.js.map} +1 -1
- package/dist/internal/{model-entry-door-guide-wZbyY77a.js → model-entry-door-guide-DnGTLY2s.js} +2 -2
- package/dist/internal/{model-entry-door-guide-wZbyY77a.js.map → model-entry-door-guide-DnGTLY2s.js.map} +1 -1
- package/dist/internal/{model-maker-uO8xlTuO.js → model-maker-B1mnDdKY.js} +15 -15
- package/dist/internal/{model-maker-uO8xlTuO.js.map → model-maker-B1mnDdKY.js.map} +1 -1
- package/dist/internal/{model-tv-video-DzXb2JRf.js → model-tv-video-BP-7HoDC.js} +2 -2
- package/dist/internal/{model-tv-video-DzXb2JRf.js.map → model-tv-video-BP-7HoDC.js.map} +1 -1
- package/dist/internal/{model-view-CBeeMM98.js → model-view-BWUU0-uq.js} +2 -2
- package/dist/internal/{model-view-CBeeMM98.js.map → model-view-BWUU0-uq.js.map} +1 -1
- package/dist/internal/object3d-helper-CbRRhnLV.js +7 -0
- package/dist/internal/{object3d-helper-DDYsVPN6.js.map → object3d-helper-CbRRhnLV.js.map} +1 -1
- package/dist/internal/{pano-compass-jSr629BP.js → pano-compass-BRTM0dCc.js} +7 -7
- package/dist/internal/{pano-compass-jSr629BP.js.map → pano-compass-BRTM0dCc.js.map} +1 -1
- package/dist/internal/{pano-door-label-DKoYIKLa.js → pano-door-label-BLjYGZrr.js} +3 -3
- package/dist/internal/{pano-door-label-DKoYIKLa.js.map → pano-door-label-BLjYGZrr.js.map} +1 -1
- package/dist/internal/{pano-measure-DW9mdx1O.js → pano-measure-BIgCWkVJ.js} +14 -14
- package/dist/internal/{pano-measure-DW9mdx1O.js.map → pano-measure-BIgCWkVJ.js.map} +1 -1
- package/dist/internal/{pano-ruler-pro-D7q0Ob21.js → pano-ruler-pro-D9yTbHJz.js} +2 -2
- package/dist/internal/{pano-ruler-pro-D7q0Ob21.js.map → pano-ruler-pro-D9yTbHJz.js.map} +1 -1
- package/dist/internal/{pano-spatial-tag-D0qn-__S.js → pano-spatial-tag-B7Gxn3BS.js} +3 -3
- package/dist/internal/{pano-spatial-tag-D0qn-__S.js.map → pano-spatial-tag-B7Gxn3BS.js.map} +1 -1
- package/dist/internal/{pano-tag-BW5MXXws.js → pano-tag-Bchz-jED.js} +2 -2
- package/dist/internal/{pano-tag-BW5MXXws.js.map → pano-tag-Bchz-jED.js.map} +1 -1
- package/dist/internal/{pano-video-Bmud_CAn.js → pano-video-BufYQMqo.js} +3 -3
- package/dist/internal/{pano-video-Bmud_CAn.js.map → pano-video-BufYQMqo.js.map} +1 -1
- package/dist/internal/{pipeline-DDqgb1gw.js → pipeline-t_3IMXKB.js} +4 -4
- package/dist/internal/{pipeline-DDqgb1gw.js.map → pipeline-t_3IMXKB.js.map} +1 -1
- package/dist/internal/{sculpt-BNkLJR6p.js → sculpt-BCK4PMwL.js} +64 -63
- package/dist/internal/{sculpt-BNkLJR6p.js.map → sculpt-BCK4PMwL.js.map} +1 -1
- package/dist/internal/tagPosition-DA9YguT8.js +176 -0
- package/dist/internal/tagPosition-DA9YguT8.js.map +1 -0
- package/dist/internal/withResolvers-DVr4bnnk.js +15 -0
- package/dist/internal/withResolvers-DVr4bnnk.js.map +1 -0
- package/dist/plugins/area-maker.js +1 -1
- package/dist/plugins/camera-movement.js +1 -1
- package/dist/plugins/cruise.js +2 -2
- package/dist/plugins/css3d-render.js +1 -1
- package/dist/plugins/current-pano-image.js +1 -1
- package/dist/plugins/digital-performance.d.ts +1 -1
- package/dist/plugins/digital-performance.js +1 -1
- package/dist/plugins/fire-scene.d.ts +1 -1
- package/dist/plugins/fire-scene.js +1 -1
- package/dist/plugins/guide-line.js +1 -1
- package/dist/plugins/measure.js +1 -1
- package/dist/plugins/model-chassis-compass.js +1 -1
- package/dist/plugins/model-entry-door-guide.js +1 -1
- package/dist/plugins/model-maker.d.ts +1 -1
- package/dist/plugins/model-maker.js +1 -1
- package/dist/plugins/model-tv-video.js +1 -1
- package/dist/plugins/model-view.js +1 -1
- package/dist/plugins/object3d-helper.d.ts +1 -1
- package/dist/plugins/object3d-helper.js +3 -1
- package/dist/plugins/pano-compass.js +1 -1
- package/dist/plugins/pano-door-label.js +1 -1
- package/dist/plugins/pano-measure.js +1 -1
- package/dist/plugins/pano-ruler-pro.js +1 -1
- package/dist/plugins/pano-spatial-tag.js +1 -1
- package/dist/plugins/pano-tag.d.ts +1 -1
- package/dist/plugins/pano-tag.js +4 -1
- package/dist/plugins/pano-video.js +1 -1
- package/dist/plugins/pipeline.js +1 -1
- package/dist/plugins/sculpt.d.ts +1 -1
- package/dist/plugins/sculpt.js +7 -1
- package/dist/types/public/index.d.ts +2 -0
- package/dist/types/public/plugins/digital-performance.d.ts +1 -0
- package/dist/types/public/plugins/fire-scene.d.ts +1 -0
- package/dist/types/public/plugins/model-maker.d.ts +1 -0
- package/dist/types/public/plugins/object3d-helper.d.ts +1 -0
- package/dist/types/public/plugins/pano-tag.d.ts +2 -0
- package/dist/types/public/plugins/sculpt.d.ts +8 -0
- package/dist/types/public/utils.d.ts +5 -0
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +16 -50
- package/package.json +1 -1
- package/dist/internal/BasePluginWithData-9z4tpAT4.js +0 -7
- package/dist/internal/CSS3DRenderPlugin-ccSpcvwd.js.map +0 -1
- package/dist/internal/Rectangle-D-zkDycu.js.map +0 -1
- package/dist/internal/animationFrame-XGKHIeQK.js.map +0 -1
- package/dist/internal/blink-DD_0mH-m.js +0 -113
- package/dist/internal/blink-DD_0mH-m.js.map +0 -1
- package/dist/internal/camera-movement-CwI7UqUk.js.map +0 -1
- package/dist/internal/controller-BWkZT0l1.js.map +0 -1
- package/dist/internal/defaultUrls-CjKkS9k9.js.map +0 -1
- package/dist/internal/fire-scene-CczaBz2_.js.map +0 -1
- package/dist/internal/generatePolygonGeometry-B_5JFq8y.js.map +0 -1
- package/dist/internal/object3d-helper-DDYsVPN6.js +0 -7
- package/dist/utils.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./throttle-YRIkRKaX.js";
|
|
2
|
-
import { t } from "./animationFrame-
|
|
2
|
+
import { r as t } from "./animationFrame-CacKXN8l.js";
|
|
3
3
|
import { t as n } from "./equal-BiDAilPV.js";
|
|
4
4
|
import { C as r, G as i, J as a, K as o, M as s, O as c, P as l, Q as u, R as d, U as f, V as p, W as m, X as h, Y as g, b as _, it as v, j as y, k as b, m as x, n as S, o as C, p as w, rt as T, st as E, t as D, u as O, x as k, z as A } from "./component.svelte-D5LYqt50.js";
|
|
5
5
|
import { n as j } from "./planimetry-us3E4V8W.js";
|
|
@@ -218,4 +218,4 @@ var V = class {
|
|
|
218
218
|
//#endregion
|
|
219
219
|
export { H as t };
|
|
220
220
|
|
|
221
|
-
//# sourceMappingURL=pano-ruler-pro-
|
|
221
|
+
//# sourceMappingURL=pano-ruler-pro-D9yTbHJz.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pano-ruler-pro-D7q0Ob21.js","names":["root","$.from_html","$.mutable_source","$.prop","$.get","$.deep_read_state","$.child","$.untrack","$.index","$.set_style","$.sibling","$.only_child","$.set","$.from_html","$.prop","$.mutable_source","$.set","$.get","$.index","throttle","equal","if_block","template_effect","only_child","child","append","onDestroy","from_html","set","deep_read_state","legacy_pre_effect","untrack","legacy_pre_effect_reset","mutable_source","sibling","each","push","set_text","onMount","set_class","prop","init","set_style","pop","reset","mountComponent","bind_element_size","index","get","intersectionOfLine","root$1","root_1","root_2","root_3","RulerItem","$$props","vars","rulerItemProp","_visible","labelWidth","div","styles","node","consequent","em","$$anchor","alternate","div_1","div_2","styles_1","$$render","div_3","styles_2","div_4","text","$$value","root","RulerItems","five","rulerDatas","options","canvasWidth","canvasHeight","getRuleScreenIntr","screenLines","intr","result","startPoint","endPoint","getPosition","start","startLeft","startTop","end","endLeft","endTop","getPositionAndVisible","cameraPosition","cameraDirection","Vector3","startAngle","endAngle","ruleLength","disFromCameraToMid","deg","visible","visibleOrigin","labelOffset","visibleLength","distance","middlePoint","updatePanoRulerData","panoIndex","rulerData","data","Five","startPoints","v","endPoints","pointA","pointB","line","children","l","nextFrameFreshRule","nextFrame","throttleFreshRule","itemData","Controller","params","serverData","PanoRulerProPlugin"],"sources":["../../src/PanoRulerProPlugin/RulerItem.svelte","../../src/PanoRulerProPlugin/RulerItems.svelte","../../src/PanoRulerProPlugin/Controller.ts","../../src/PanoRulerProPlugin/index.ts"],"sourcesContent":["<script lang=\"ts\">\n import type { RulerItemProp } from './typings'\n\n export let rulerItemProp: RulerItemProp\n let _visible = true\n let labelWidth\n\n $: {\n if (\n labelWidth >= rulerItemProp.width ||\n labelWidth / 2 >= (rulerItemProp.labelOffset / 100) * rulerItemProp.width ||\n labelWidth / 2 >= (1 - rulerItemProp.labelOffset / 100) * rulerItemProp.width\n ) {\n _visible = false\n } else {\n _visible = true\n }\n }\n\n let EM_DOTTED_BG = `data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQiIHdpZHRoPSIxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PGZpbHRlciBpZD0icHJlZml4X19hIiBoZWlnaHQ9IjQwMCUiIHdpZHRoPSIxMzcuNCUiIHg9Ii0xOC43JSIgeT0iLTE1MCUiPjxmZU1vcnBob2xvZ3kgaW49IlNvdXJjZUFscGhhIiBvcGVyYXRvcj0iZGlsYXRlIiByYWRpdXM9Ii41IiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSIvPjxmZU9mZnNldCBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSIvPjxmZU1vcnBob2xvZ3kgaW49IlNvdXJjZUFscGhhIiByYWRpdXM9IjEiIHJlc3VsdD0ic2hhZG93SW5uZXIiLz48ZmVPZmZzZXQgaW49InNoYWRvd0lubmVyIiByZXN1bHQ9InNoYWRvd0lubmVyIi8+PGZlQ29tcG9zaXRlIGluPSJzaGFkb3dPZmZzZXRPdXRlcjEiIGluMj0ic2hhZG93SW5uZXIiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIi8+PGZlR2F1c3NpYW5CbHVyIGluPSJzaGFkb3dPZmZzZXRPdXRlcjEiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSIgc3RkRGV2aWF0aW9uPSIuNSIvPjxmZUNvbG9yTWF0cml4IGluPSJzaGFkb3dCbHVyT3V0ZXIxIiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMiAwIi8+PC9maWx0ZXI+PHBhdGggaWQ9InByZWZpeF9fYiIgZD0iTS44ODkgMkgxMS41OCIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48dXNlIGZpbGw9IiMwMDAiIGZpbHRlcj0idXJsKCNwcmVmaXhfX2EpIiB4bGluazpocmVmPSIjcHJlZml4X19iIi8+PHVzZSBzdHJva2U9IiNmZmYiIHN0cm9rZS1vcGFjaXR5PSIuNCIgeGxpbms6aHJlZj0iI3ByZWZpeF9fYiIvPjwvZz48L3N2Zz4=`\n $: vars = `--background-image: url(${EM_DOTTED_BG})`;\n</script>\n\n<div\n class=\"PanoRulerPlugin-rule-line\"\n style:width=\"{rulerItemProp.width}px\"\n style:left=\"{rulerItemProp.left}px\"\n style:top=\"{rulerItemProp.top}px\"\n style:transform=\"rotate({rulerItemProp.rotateDeg}deg)\"\n style:display=\"{rulerItemProp.visible && _visible ? 'block' : 'none'}\"\n>\n {#if rulerItemProp.children.length === 0}\n <em class=\"{rulerItemProp.state ? 'em-solid' : 'em-dotted'}\" style=\"{vars}\"></em>\n {:else}\n <div class=\"rule-mixed-line\">\n {#each rulerItemProp.children as child}\n <div style:width=\"{child.width}px\" class=\"{child.state ? 'em-solid' : 'em-dotted'}\" style=\"{vars}\"></div>\n {/each}\n </div>\n {/if}\n <div\n class=\"PanoRulerPlugin-rule-label\"\n style:left=\"{rulerItemProp.labelOffset}%\"\n >\n <div class=\"PanoRulerPlugin-rule-label-name\" bind:offsetWidth=\"{labelWidth}\">\n {rulerItemProp.labelElement}\n </div>\n </div>\n</div>\n\n<style>\n .PanoRulerPlugin-rule-line {\n position: absolute;\n transform-origin: left 0.0625rem;\n width: 0;\n height: 0.125rem;\n pointer-events: none;\n }\n\n .PanoRulerPlugin-rule-line::after {\n content: '';\n position: absolute;\n left: -0.125rem;\n top: -0.1rem;\n width: 0.25rem;\n height: 0.25rem;\n border-radius: 50%;\n background: #fff;\n z-index: 1;\n animation: viewport-rule-point 0.1s 1s;\n animation-fill-mode: both;\n }\n\n .PanoRulerPlugin-rule-line::before {\n content: '';\n position: absolute;\n right: -0.125rem;\n top: -0.1rem;\n width: 0.25rem;\n height: 0.25rem;\n border-radius: 50%;\n background: #fff;\n z-index: 1;\n animation: viewport-rule-point 0.1s 1.5s;\n animation-fill-mode: both;\n }\n\n .PanoRulerPlugin-rule-line em {\n display: block;\n height: 0.0625rem;\n animation: viewport-rule-line 0.5s ease 1s;\n animation-fill-mode: both;\n box-shadow: 0 0 0.25rem rgb(0 0 0 / 40%);\n position: relative;\n }\n\n .rule-mixed-line {\n display: flex;\n height: 0.0625rem;\n animation: viewport-rule-line 0.5s ease 1s;\n animation-fill-mode: both;\n align-items: center;\n }\n\n .em-solid {\n height: 100%;\n background: #ffffff;\n }\n .em-dotted {\n height: 0.125rem;\n background: var(--background-image);\n background-position: center;\n background-repeat: repeat;\n }\n\n .PanoRulerPlugin-rule-label {\n position: absolute;\n width: 0;\n height: 0;\n top: 0.0625rem;\n pointer-events: none;\n }\n\n .PanoRulerPlugin-rule-label-name {\n position: absolute;\n padding: 0.1875rem 0.375rem;\n background: rgba(195, 195, 195, 0.3);\n backdrop-filter: blur(0.25rem);\n -webkit-backdrop-filter: blur(0.25rem);\n border-radius: 6.25rem;\n border: 0.0625rem solid rgba(255, 255, 255, 0.6);\n white-space: nowrap;\n overflow: hidden;\n color: #ffffff;\n font-weight: 500;\n font-size: 0.75rem;\n line-height: 1;\n -webkit-animation: viewport-rule-label 0.25s ease 1s;\n animation: viewport-rule-label 0.25s ease 1s;\n animation-fill-mode: both;\n box-shadow: inset 0 0 0.625rem 0 rgba(255, 255, 255, 0.3);\n }\n\n @keyframes viewport-rule-line {\n 0% {\n width: 0%;\n }\n 100% {\n width: 100%;\n }\n }\n\n @keyframes viewport-rule-label {\n 0% {\n opacity: 0;\n transform: scaleX(0);\n }\n 100% {\n opacity: 1;\n transform: translate(-50%, -50%) scaleX(1);\n }\n }\n\n @keyframes viewport-rule-point {\n 0% {\n transform: scaleX(0);\n }\n 100% {\n transform: scaleX(1);\n }\n }\n</style>\n","<script lang=\"ts\">\n import { Five } from '@realsee/five-webgpu'\n import { nextFrame } from '../shared-utils/animationFrame'\n import { equal } from '../shared-utils'\n import { intersectionOfLine } from '../shared-utils/math/planimetry'\n import throttle from '../shared-utils/throttle'\n import { onDestroy, onMount } from 'svelte'\n import { Vector3 } from 'three/webgpu'\n import RulerItem from './RulerItem.svelte'\n import type { PanoRulerProPluginDatas, PanoRulerProPluginOptions, RulerItemProp } from './typings'\n export let five: Five\n export let rulerDatas: PanoRulerProPluginDatas\n export let options: PanoRulerProPluginOptions\n let rulerItemProp: RulerItemProp[] = []\n\n const canvasWidth = five.getElement()?.parentElement?.clientWidth || 0\n const canvasHeight = five.getElement()?.parentElement?.clientHeight || 0\n\n const getRuleScreenIntr = (startPoint: { x: number; y: number }, endPoint: { x: number; y: number }) => {\n const screenLines = [\n [\n { x: 0, y: 0 },\n { x: canvasWidth, y: 0 },\n ],\n [\n { x: 0, y: 0 },\n { x: 0, y: canvasHeight },\n ],\n [\n { x: canvasWidth, y: 0 },\n { x: canvasWidth, y: canvasHeight },\n ],\n [\n { x: 0, y: canvasHeight },\n { x: canvasWidth, y: canvasHeight },\n ],\n ]\n const intr: any[] = []\n for (let i = 0; i < screenLines.length; i++) {\n const result = intersectionOfLine([startPoint, endPoint], [screenLines[i][0], screenLines[i][1]], true)\n if (result) intr.push(result)\n }\n if (intr.length === 0) return false\n else {\n return intr\n }\n }\n\n const getPosition = (start: Vector3, end: Vector3) => {\n const startPoint = start.clone().project(five.camera)\n const startLeft = ((startPoint.x + 1) / 2) * canvasWidth\n const startTop = ((-startPoint.y + 1) / 2) * canvasHeight\n\n const endPoint = end.clone().project(five.camera)\n const endLeft = ((endPoint.x + 1) / 2) * canvasWidth\n const endTop = ((-endPoint.y + 1) / 2) * canvasHeight\n const distance = Math.sqrt(Math.pow(endLeft - startLeft, 2) + Math.pow(endTop - startTop, 2))\n return {\n startLeft,\n startTop,\n endLeft,\n endTop,\n distance,\n }\n }\n\n const getPositionAndVisible = (start: Vector3, end: Vector3, visibleOrigin: Vector3) => {\n const cameraPosition = five.camera.position\n const cameraDirection = five.camera.getWorldDirection(new Vector3())\n const startAngle = start.clone().sub(cameraPosition).normalize().angleTo(cameraDirection)\n const endAngle = end.clone().sub(cameraPosition).normalize().angleTo(cameraDirection)\n const ruleLength = start.distanceTo(end)\n const midPoint = end.clone().sub(end.clone().sub(start).divide(new Vector3(2, 2, 2)))\n const disFromCameraToMid = midPoint.distanceTo(cameraPosition)\n const { startLeft, startTop, endLeft, endTop, distance } = getPosition(start, end)\n const rad = Math.PI / 2 - Math.atan2(endLeft - startLeft, startTop - endTop)\n const deg = -(rad / Math.PI) * 180\n\n let visible = true\n\n if (!visibleOrigin) visible = false\n // 只显示拐点相连的线\n if (!equal(start, visibleOrigin) && !equal(end, visibleOrigin)) {\n visible = false\n }\n // 线小于0.3m隐藏\n if (ruleLength < 0.3) {\n visible = false\n }\n\n if (startAngle > Math.PI / 2) {\n visible = false\n }\n\n if (endAngle > Math.PI / 2) {\n visible = false\n }\n\n if (disFromCameraToMid / ruleLength > 8) {\n visible = false\n }\n\n let labelOffset = 50\n let visibleLength = distance\n const intr: any = getRuleScreenIntr({ x: ~~startLeft, y: ~~startTop }, { x: ~~endLeft, y: ~~endTop })\n if (intr && intr.length === 1) {\n if (equal(start, visibleOrigin)) {\n visibleLength = Math.sqrt(Math.pow(intr[0].x - startLeft, 2) + Math.pow(intr[0].y - startTop, 2))\n labelOffset = (visibleLength / distance) * 50\n } else if (equal(end, visibleOrigin)) {\n visibleLength = Math.sqrt(Math.pow(intr[0].x - endLeft, 2) + Math.pow(intr[0].y - endTop, 2))\n labelOffset = 100 - (visibleLength / distance) * 50\n }\n }\n if (intr && intr.length === 2) {\n const middlePoint = {\n x: (intr[0].x + intr[1].x) / 2,\n y: (intr[0].y + intr[1].y) / 2,\n }\n const distanceFromStart = Math.sqrt(Math.pow(middlePoint.x - startLeft, 2) + Math.pow(middlePoint.y - startTop, 2))\n labelOffset = (distanceFromStart / distance) * 100\n }\n\n return {\n startLeft,\n startTop,\n distance,\n deg,\n visible,\n labelOffset,\n ruleLength,\n }\n }\n\n const updatePanoRulerData = () => {\n const panoIndex = five.panoIndex\n const rulerData = rulerDatas.data.find((data) => data.panoIndex === panoIndex)\n if (!rulerData) return (rulerItemProp = [])\n\n // 非全景模式下隐藏所有标尺\n if (five.currentMode !== Five.Mode.Panorama) return (rulerItemProp = [])\n\n const cameraPosition = five.camera.position\n const cameraDirection = five.camera.getWorldDirection(new Vector3())\n const startPoints = rulerData.lines.map((v) => new Vector3(v.start[0], -v.start[1], -v.start[2]))\n const endPoints = rulerData.lines.map((v) => new Vector3(v.end[0], -v.end[1], -v.end[2]))\n // 可以看到的角度最小的拐点\n const [visibleOrigin] = startPoints.concat(endPoints).sort((pointA, pointB) => {\n const angleA = pointA.clone().setY(0).sub(cameraPosition).normalize().angleTo(cameraDirection.clone().setY(0))\n const angleB = pointB.clone().setY(0).sub(cameraPosition).normalize().angleTo(cameraDirection.clone().setY(0))\n return angleA - angleB\n })\n\n const data = rulerData.lines.map((line) => {\n const start = line.start\n const end = line.end\n const { startLeft, startTop, distance, deg, visible, labelOffset, ruleLength } = getPositionAndVisible(\n new Vector3(start[0], -start[1], -start[2]),\n new Vector3(end[0], -end[1], -end[2]),\n visibleOrigin,\n )\n\n const children: any[] = []\n if (line.children && line.children?.length > 0) {\n line.children?.forEach((l) => {\n const start = l.start\n const end = l.end\n const { distance } = getPosition(new Vector3(start[0], -start[1], -start[2]), new Vector3(end[0], -end[1], -end[2]))\n children.push({\n width: distance,\n state: l.state,\n })\n })\n }\n return {\n width: distance,\n left: startLeft,\n top: startTop,\n rotateDeg: deg,\n state: line.state,\n children,\n labelOffset,\n visible,\n labelElement: options.distanceText!(ruleLength),\n }\n })\n\n rulerItemProp = data\n }\n\n const nextFrameFreshRule = () => nextFrame(updatePanoRulerData)\n const throttleFreshRule = throttle(updatePanoRulerData, 80)\n\n onMount(() => {\n updatePanoRulerData()\n five.on('panoArrived', updatePanoRulerData)\n five.on('modeChange', updatePanoRulerData)\n five.on('cameraDirectionUpdate', nextFrameFreshRule)\n five.on('movingToPano', nextFrameFreshRule)\n five.on('mouseWheel', () => throttleFreshRule())\n five.on('pinchGesture', () => throttleFreshRule())\n })\n\n onDestroy(() => {\n five.off('panoArrived', updatePanoRulerData)\n five.off('modeChange', updatePanoRulerData)\n five.off('cameraDirectionUpdate', nextFrameFreshRule)\n five.off('movingToPano', nextFrameFreshRule)\n five.off('mouseWheel', () => throttleFreshRule())\n five.off('pinchGesture', () => throttleFreshRule())\n })\n\n</script>\n\n<div>\n {#each rulerItemProp as itemData}\n <RulerItem rulerItemProp={itemData} />\n {/each}\n</div>\n\n<style>\n</style>\n","import type { Five } from '@realsee/five-webgpu'\nimport type { PanoRulerProPluginData, PanoRulerProPluginDatas, PanoRulerProPluginParameterType, PanoRulerProPluginState } from './typings'\nimport RulerItems from './RulerItems.svelte'\nimport { mountComponent, type MountedComponent } from '../shared-utils/svelte/component.svelte'\nexport default class Controller {\n private five: Five\n private container = document.createElement('div')\n private disposed = false\n private mount = () => { if (!this.disposed) this.five.getElement()?.parentNode?.append(this.container) }\n private panoRulerProData: PanoRulerProPluginData[] | undefined\n private rulerItems: MountedComponent<any>\n public state: PanoRulerProPluginState = {\n enabled: false,\n loaded: false,\n options: {\n className: '',\n distanceText: (distance) => `${distance.toFixed(1)}m`,\n },\n }\n\n public constructor(five: Five, params: PanoRulerProPluginParameterType) {\n this.five = five\n this.container.classList.add('panoRulerProPlugin-container')\n this.container.setAttribute(\n 'style',\n `position: absolute;pointer-events: none;width: 100%;height: 100%;left: 0;top: 0;overflow: hidden;`,\n )\n\n if (params) {\n if (params.data) {\n this.load(params.data)\n }\n this.state.options = { ...this.state.options, ...(params.options || {}) }\n if (params.options?.className) this.container.classList.add(params.options?.className)\n }\n\n if (this.five.model.loaded) this.mount()\n else this.five.once('modelLoaded', this.mount)\n this.five.once('dispose', this.dispose)\n }\n\n public async load(serverData: PanoRulerProPluginDatas) {\n if (this.disposed || !this.five.work) return\n const data = serverData.data\n if (!data) throw new Error('标尺数据依赖不齐全!')\n this.panoRulerProData = data\n this.state.loaded = true\n }\n\n public enable() {\n if (this.disposed || !this.state.loaded) return false\n if (this.state.enabled) return true\n this.state.enabled = true\n this.render()\n return true\n }\n\n public disable() {\n if (!this.state.enabled) return true\n this.state.enabled = false\n this.render()\n return true\n }\n\n private async render() {\n if (this.state.enabled) {\n if (!this.panoRulerProData || !this.container) return\n this.rulerItems = mountComponent(RulerItems, this.container, {\n five: this.five,\n rulerDatas: { data: this.panoRulerProData, version: 1 },\n options: this.state.options,\n })\n } else {\n this.rulerItems?.destroy()\n this.rulerItems = undefined\n }\n }\n\n public dispose = () => {\n if (this.disposed) return\n this.disposed = true\n this.state.enabled = false\n this.five.off('modelLoaded', this.mount)\n this.five.off('dispose', this.dispose)\n if (this.container) {\n this.rulerItems?.destroy()\n this.rulerItems = undefined\n }\n this.container.remove()\n }\n}\n","import type { Five, FivePlugin } from '@realsee/five-webgpu'\nimport Controller from './Controller'\nimport type { PanoRulerProPluginParameterType, PanoRulerProPluginExportType } from './typings'\n\n/**\n * 全景标尺插件\n */\nexport const PanoRulerProPlugin: FivePlugin<\n PanoRulerProPluginParameterType,\n PanoRulerProPluginExportType\n> = (five: Five, params) => {\n\treturn new Controller(five, params)\n}\n\nexport default PanoRulerProPlugin\n\nexport type {\n\tPanoRulerProPluginParameterType,\n\tPanoRulerProPluginExportType,\n\tPanoRulerProPluginOptions,\n\tPanoRulerProPluginState,\n} from './typings'\n"],"mappings":";;;;;;;;;AAAA,SAAAsD,EAAA,GAAA,GAAA;;cAGaG,IAAetD,EAAAoD,GAAA,iBAAA,CAAA,GACtBG,IAAQxD,EAAG,EAAA,GACXyD,IAAAzD,EAAA;;EAGF,AACEE,EAAAuD,CAAU,KAAIF,EAAa,CAAA,CAAC,SAC5BrD,EAAAuD,CAAU,IAAG,KAAKF,EAAc,CAAA,CAAC,cAAc,MAAOA,EAAa,CAAA,CAAC,SACpErD,EAAAuD,CAAU,IAAG,MAAM,IAAIF,EAAa,CAAA,CAAC,cAAc,OAAOA,EAAa,CAAA,CAAC,QAExE7B,EAAA8B,GAAW,EAAA,IAEX9B,EAAA8B,GAAW,EAAA;;EAKZ,EAAAF,GAAO,64CAA0C;;CAGrD,IAAAI,IAAAP,EAAA;;CAAA,IAAAS,IAAAxD,EAAAsD,CAAA;EASI,IAAAI,IAAEhE,EAAA;EAAF;GAAA,AAAAuC,EAAAyB,GAAA,IA7BQ3D,EAAAoD,EAAe,CAAA,GA6BZlD,QAAAkD,EAAa,CAAA,CAAC,QAAQ,aAAa,WAAW,IAAA,eAAA,GAAzDf,EAAAsB,GAAE5D,EAAkEoD,CAAI,CAAA;MAAxE/B,EAAAwC,GAAAD,CAAE;;EAEF,IAAAG,IAAGf,EAAA;EAAH,AAAAjB,EAAAgC,GAAA,UA/BQ9D,EAAAoD,EAAe,CAAA,GAgCflD,QAAAkD,EAAa,CAAA,CAAC,QAAQ,IAAAV,IAAI,GAAA,MAAK;GACnC,IAAAqB,IAAGjB,EAAA;;GAAH;IAAA,AAAAZ,EAAA6B,GAAA,IAD8BhE,EAAAoB,CAAK,GACOjB,QAAAH,EAAAoB,CAAK,CAAA,CAAC,QAAQ,aAAa,WAAW,IAAA,eAAA,GAAhF,IAAAf,EAAA2D,GAAGhE,EAAwFoD,CAAI,GAAAa,GAAA,EADjE,OAAA,GAAAjE,EAAAoB,CAAK,GAAAjB,QACjBH,EAAAoB,CAAK,CAAA,CAAC,KAAK,KAAA,GAAA,IAAA,CAAA;OAA7BC,EAAAwC,GAAAG,CAAI;MAFRxB,EAAAuB,CAAI,GAAJ1C,EAAAwC,GAAAE,CAAI;;;EA/BI9D,AAAAA,EAAAoD,EAAe,CAAA,GA4BrBlD,QAAAkD,EAAa,CAAA,CAAC,SAAS,WAAW,CAAC,IAAAa,EAAAP,CAAA;;CASvC,IAAAQ,IAAA7D,EAAAoD,GAAA,CAAA;;CAIE,IAAAW,IAAGnE,EAJLiE,CAAA,GAIEG,IAAA/D,EAAA8D,GAAG,EAAA;CAJL7B,EAAA2B,CAAA,GAjBF3B,EAAAgB,CAAA;EApBYvD,AAoBZ,IAAAI,EAAAmD,GAAA,IAAAC,GAAA;GApBYxD,OAAAA,GAAAA,EAAAoD,EAAe,CAAA,GAsBZlD,QAAAkD,EAAa,CAAA,CAAC,KAAK,KAAA,GAAA;GAtBtBpD,MAAAA,GAAAA,EAAAoD,EAAe,CAAA,GAuBblD,QAAAkD,EAAa,CAAA,CAAC,IAAI,KAAA,GAAA;GAvBpBpD,KAAAA,GAAAA,EAAAoD,EAAe,CAAA,GAwBdlD,QAAAkD,EAAa,CAAA,CAAC,GAAG,KAAA,GAAA;GAxBlBpD,WAAAA,UAAAA,EAAAoD,EAAe,CAAA,GAyBDlD,QAAAkD,EAAa,CAAA,CAAC,SAAS,KAAA,GAAA;GAzBrCpD,UAAAA,EAAAoD,EAAe,CAAA,GACtBrD,EAAAsD,CAAQ,GAyBInD,QAAAkD,EAAa,CAAA,CAAC,WAAOrD,EAAIsD,CAAQ,IAAG,UAAU,MAAM;MAWnE,IAAAjD,EAAA8D,GAAA,IAAAC,GAAA,EAAA,MAAA,GArCUnE,EAAAoD,EAAe,CAAA,GAuCXlD,QAAAkD,EAAa,CAAA,CAAC,WAAW,KAAA,GAAA,GAAA,CAAA,GAvC7BpD,EAAAA,IAAAA,EAAAoD,EAAe,CAAA,GA0CrBlD,QAAAkD,EAAa,CAAA,CAAC,YAAY,EAAA;KAD5BX,EAAA2B,GAAG,gBAAA,MAAA7D,EAA4D+C,GAAUgB,CAAA,CAAA,GArB7ElD,EAAAwC,GAAAL,CAAA;AAFO;;;;ACrBR,SAAAiB,EAAA,GAAA,GAAA;;CAUS,IAAIC,IAAMhE,EAAAyC,GAAA,QAAA,CAAA,GACNwB,IAAYjE,EAAAyC,GAAA,cAAA,CAAA,GACZyB,IAASlE,EAAAyC,GAAA,WAAA,CAAA,GAChBE,IAA8B1C,EAAG,CAAA,CAAC,GAEhCkE,IAAcH,EAAI,CAAA,CAAC,WAAU,CAAE,EAAE,eAAe,eAAe,GAC/DI,IAAeJ,EAAI,CAAA,CAAC,WAAU,CAAE,EAAE,eAAe,gBAAgB,GAEjEK,KAAqB,GAAsC,MAAuC;EACtG,IAAMC,IAAc;GAClB,CACE;IAAE,GAAG;IAAG,GAAG;GAAC,GACZ;IAAE,GAAGH;IAAa,GAAG;GAAC,CAAE;GAE1B,CACE;IAAE,GAAG;IAAG,GAAG;GAAC,GACZ;IAAE,GAAG;IAAG,GAAGC;GAAY,CAAE;GAE3B,CACE;IAAE,GAAGD;IAAa,GAAG;GAAC,GACtB;IAAE,GAAGA;IAAa,GAAGC;GAAY,CAClC;GACD,CACE;IAAE,GAAG;IAAG,GAAGA;GAAY,GACvB;IAAE,GAAGD;IAAa,GAAGC;GAAY,CAClC;EACH,GACMG,IAAc,CAAA;EACpB,KAAK,IAAI,IAAI,GAAG,IAAID,EAAY,QAAQ,KAAK;GAC3C,IAAME,IAASrC,EAAmB,CAACsC,GAAYC,CAAQ,GAAG,CAACJ,EAAY,EAAE,CAAC,IAAIA,EAAY,EAAE,CAAC,EAAE,GAAG,EAAI;GACtG,AAAIE,KAAQD,EAAK,KAAKC,CAAM;EAC9B;EAGE,OAFED,EAAK,WAAW,KAEXA;CAEX,GAEMI,KAAe,GAAgB,MAAiB;EACpD,IAAMF,IAAaG,EAAM,MAAK,CAAE,CAAC,QAAQZ,EAAI,CAAA,CAAC,MAAM,GAC9Ca,KAAcJ,EAAW,IAAI,KAAK,IAAKN,GACvCW,KAAa,CAACL,EAAW,IAAI,KAAK,IAAKL,GAEvCM,IAAWK,EAAI,MAAK,CAAE,CAAC,QAAQf,EAAI,CAAA,CAAC,MAAM,GAC1CgB,KAAYN,EAAS,IAAI,KAAK,IAAKP,GACnCc,KAAW,CAACP,EAAS,IAAI,KAAK,IAAKN;EAEzC,OAAO;GACL;GACA;GACA;GACA;GACA,UANe,KAAK,MAAcY,IAAUH,MAAW,KAAcI,IAASH,MAAU,CAMxF;EAAQ;CAEZ,GAEMI,KAAyB,GAAgB,GAAc,MAA2B;EACtF,IAAMC,IAAiBnB,EAAI,CAAA,CAAC,OAAO,UAC7BoB,IAAkBpB,EAAI,CAAA,CAAC,OAAO,kBAAkB,IAAIqB,EAAO,CAAE,GAC7DC,IAAaV,EAAM,MAAK,CAAE,CAAC,IAAIO,CAAc,CAAC,CAAC,UAAS,CAAE,CAAC,QAAQC,CAAe,GAClFG,IAAWR,EAAI,MAAK,CAAE,CAAC,IAAII,CAAc,CAAC,CAAC,UAAS,CAAE,CAAC,QAAQC,CAAe,GAC9EI,IAAaZ,EAAM,WAAWG,CAAG,GAEjCU,IADWV,EAAI,MAAK,CAAE,CAAC,IAAIA,EAAI,MAAK,CAAE,CAAC,IAAIH,CAAK,CAAC,CAAC,OAAO,IAAIS,EAAQ,GAAG,GAAG,CAAC,CAAC,CACxD,CAAQ,CAAC,WAAWF,CAAc,GACvD,EAAE,cAAW,aAAU,YAAS,WAAQ,gBAAaR,EAAYC,GAAOG,CAAG,GAE3EW,IAAM,GADA,KAAK,KAAK,IAAI,KAAK,MAAMV,IAAUH,GAAWC,IAAWG,CAAM,KACvD,KAAK,MAAM,KAE3BU,IAAU;EAoBd,AAlBKC,MAAe,IAAU,KAE1B,CAACtF,EAAMsE,GAAOgB,CAAa,KAAK,CAACtF,EAAMyE,GAAKa,CAAa,MAC3D,IAAU,KAGRJ,IAAa,OACf,IAAU,KAGRF,IAAa,KAAK,KAAK,MACzB,IAAU,KAGRC,IAAW,KAAK,KAAK,MACvB,IAAU,KAGRE,IAAqBD,IAAa,MACpC,IAAU;EAGZ,IAAIK,IAAc,IACdC,IAAgBC,GACdxB,IAAYF,EAAkB;GAAE,GAAG,CAAC,CAACQ;GAAW,GAAG,CAAC,CAACC;EAAQ,GAAI;GAAE,GAAG,CAAC,CAACE;GAAS,GAAG,CAAC,CAACC;EAAM,CAAE;EAUpG,IATIV,KAAQA,EAAK,WAAW,MACtBjE,EAAMsE,GAAOgB,CAAa,KAC5B,IAAgB,KAAK,MAAcrB,EAAK,EAAE,CAAC,IAAIM,MAAW,KAAcN,EAAK,EAAE,CAAC,IAAIO,MAAU,CAAE,GAChG,IAAcgB,IAAiBC,IAAY,MAClCzF,EAAMyE,GAAKa,CAAa,MACjC,IAAgB,KAAK,MAAcrB,EAAK,EAAE,CAAC,IAAIS,MAAS,KAAcT,EAAK,EAAE,CAAC,IAAIU,MAAQ,CAAE,GAC5F,IAAc,MAAMa,IAAiBC,IAAY,MAGjDxB,KAAQA,EAAK,WAAW,GAAG;GAC7B,IAAMyB,IAAc;IAClB,IAAIzB,EAAK,EAAE,CAAC,IAAIA,EAAK,EAAE,CAAC,KAAK;IAC7B,IAAIA,EAAK,EAAE,CAAC,IAAIA,EAAK,EAAE,CAAC,KAAK;GAC/B;GAEA,IAD0B,KAAK,MAAcyB,EAAY,IAAInB,MAAW,KAAcmB,EAAY,IAAIlB,MAAU,CACjG,IAAoBiB,IAAY;EACjD;EAEA,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF,GAEME,UAA4B;EAChC,IAAMC,IAAYlC,EAAI,CAAA,CAAC,WACjBmC,IAAYlC,EAAU,CAAA,CAAC,KAAK,MAAM,MAASmC,EAAK,cAAcF,CAAS;EAI7E,IAHI,CAACC,KAGDnC,EAAI,CAAA,CAAC,gBAAgBqC,EAAK,KAAK,UAAU,OAAMnG,EAAEyC,GAAgB,CAAA,CAAE;EAEvE,IAAMwC,IAAiBnB,EAAI,CAAA,CAAC,OAAO,UAC7BoB,IAAkBpB,EAAI,CAAA,CAAC,OAAO,kBAAkB,IAAIqB,EAAO,CAAE,GAC7DiB,IAAcH,EAAU,MAAM,KAAK,MAAM,IAAId,EAAQkB,EAAE,MAAM,IAAI,CAACA,EAAE,MAAM,IAAI,CAACA,EAAE,MAAM,EAAE,CAAC,GAC1FC,IAAYL,EAAU,MAAM,KAAK,MAAM,IAAId,EAAQkB,EAAE,IAAI,IAAI,CAACA,EAAE,IAAI,IAAI,CAACA,EAAE,IAAI,EAAE,CAAC,GAElF,CAACX,KAAiBU,EAAY,OAAOE,CAAS,CAAC,CAAC,MAAM,GAAQ,MACnDC,EAAO,MAAK,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAItB,CAAc,CAAC,CAAC,UAAS,CAAE,CAAC,QAAQC,EAAgB,MAAK,CAAE,CAAC,KAAK,CAAC,CAErG,IADQsB,EAAO,MAAK,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAIvB,CAAc,CAAC,CAAC,UAAS,CAAE,CAAC,QAAQC,EAAgB,MAAK,CAAE,CAAC,KAAK,CAAC,CAC5F,CACjB,GAEKgB,IAAOD,EAAU,MAAM,KAAK,MAAS;GACzC,IAAMvB,IAAQ+B,EAAK,OACb5B,IAAM4B,EAAK,KACX,EAAE,cAAW,aAAU,aAAU,QAAK,YAAS,gBAAa,kBAAezB,EAC/E,IAAIG,EAAQT,EAAM,IAAI,CAACA,EAAM,IAAI,CAACA,EAAM,EAAE,GAC1C,IAAIS,EAAQN,EAAI,IAAI,CAACA,EAAI,IAAI,CAACA,EAAI,EAAE,GACpCa,CAAa,GAGTgB,IAAkB,CAAA;GAYxB,OAXID,EAAK,YAAYA,EAAK,UAAU,SAAS,KAC3CA,EAAK,UAAU,SAAS,MAAM;IAC5B,IAAM/B,IAAQiC,EAAE,OACV9B,IAAM8B,EAAE,KACR,EAAE,gBAAalC,EAAY,IAAIU,EAAQT,EAAM,IAAI,CAACA,EAAM,IAAI,CAACA,EAAM,EAAE,GAAG,IAAIS,EAAQN,EAAI,IAAI,CAACA,EAAI,IAAI,CAACA,EAAI,EAAE,CAAC;IACnH,EAAS,KAAK;KACZ,OAAOgB;KACP,OAAOc,EAAE;IAAK,CACf;GACH,CAAC,GAEI;IACL,OAAOd;IACP,MAAMlB;IACN,KAAKC;IACL,WAAWY;IACX,OAAOiB,EAAK;IACZ;IACA;IACA;IACA,cAAczC,EAAO,CAAA,CAAC,aAAcsB,CAAU;GAChD;EACF,CAAC;EAED,EAAA7C,GAAgByD,CAAA;CAClB,GAEMU,UAA2BC,EAAUd,CAAmB,GACxDe,IAAoB3G,EAAS4F,GAAqB,EAAE;CAE1DzE,QAAc;EAOZ,AANAyE,EAAmB,GACnBjC,EAAI,CAAA,CAAC,GAAG,eAAeiC,CAAmB,GAC1CjC,EAAI,CAAA,CAAC,GAAG,cAAciC,CAAmB,GACzCjC,EAAI,CAAA,CAAC,GAAG,yBAAyB8C,CAAkB,GACnD9C,EAAI,CAAA,CAAC,GAAG,gBAAgB8C,CAAkB,GAC1C9C,EAAI,CAAA,CAAC,GAAG,oBAAoBgD,EAAiB,CAAE,GAC/ChD,EAAI,CAAA,CAAC,GAAG,sBAAsBgD,EAAiB,CAAE;CACnD,CAAC,GAEDpG,QAAgB;EAMd,AALAoD,EAAI,CAAA,CAAC,IAAI,eAAeiC,CAAmB,GAC3CjC,EAAI,CAAA,CAAC,IAAI,cAAciC,CAAmB,GAC1CjC,EAAI,CAAA,CAAC,IAAI,yBAAyB8C,CAAkB,GACpD9C,EAAI,CAAA,CAAC,IAAI,gBAAgB8C,CAAkB,GAC3C9C,EAAI,CAAA,CAAC,IAAI,oBAAoBgD,EAAiB,CAAE,GAChDhD,EAAI,CAAA,CAAC,IAAI,sBAAsBgD,EAAiB,CAAE;CACpD,CAAC;CAIF,IAAAlE,IAAGgB,EAAA;CAAHzC,EAAAyB,GAAG,SAAA3C,EACKwC,CAAa,GAAAvC,IAAA,GAAI,MAAQ;EAC7B,EAAS+C,GAAA,EAAA,IAAA,gBAAA;GAAgB,OAAAhD,EAAA8G,CAAQ;;KAFrCnF,EAAAgB,CAAG,GAAHnC,EAAAwC,GAAAL,CAAG;AAFI;;;AChNR,IAAqBoE,IAArB,MAAgC;CAC9B;CACA,YAAoB,SAAS,cAAc,KAAK;CAChD,WAAmB;CACnB,cAAsB;EAAE,AAAK,KAAK,YAAU,KAAK,KAAK,WAAW,CAAC,EAAE,YAAY,OAAO,KAAK,SAAS;CAAE;CACvG;CACA;CACA,QAAwC;EACtC,SAAS;EACT,QAAQ;EACR,SAAS;GACP,WAAW;GACX,eAAe,MAAa,GAAGnB,EAAS,QAAQ,CAAC,EAAE;EACrD;CACF;CAEA,YAAmB,GAAY,GAAyC;EAkBtE,AAjBA,KAAK,OAAO/B,GACZ,KAAK,UAAU,UAAU,IAAI,8BAA8B,GAC3D,KAAK,UAAU,aACb,SACA,mGACF,GAEImD,MACEA,EAAO,QACT,KAAK,KAAKA,EAAO,IAAI,GAEvB,KAAK,MAAM,UAAU;GAAE,GAAG,KAAK,MAAM;GAAS,GAAIA,EAAO,WAAW,CAAC;EAAG,GACpEA,EAAO,SAAS,aAAW,KAAK,UAAU,UAAU,IAAIA,EAAO,SAAS,SAAS,IAGnF,KAAK,KAAK,MAAM,SAAQ,KAAK,MAAM,IAClC,KAAK,KAAK,KAAK,eAAe,KAAK,KAAK,GAC7C,KAAK,KAAK,KAAK,WAAW,KAAK,OAAO;CACxC;CAEA,MAAa,KAAK,GAAqC;EACrD,IAAI,KAAK,YAAY,CAAC,KAAK,KAAK,MAAM;EACtC,IAAMf,IAAOgB,EAAW;EACxB,IAAI,CAAChB,GAAM,MAAU,MAAM,YAAY;EAEvC,AADA,KAAK,mBAAmBA,GACxB,KAAK,MAAM,SAAS;CACtB;CAEA,SAAgB;EAKd,OAJI,KAAK,YAAY,CAAC,KAAK,MAAM,SAAe,MAC5C,KAAK,MAAM,YACf,KAAK,MAAM,UAAU,IACrB,KAAK,OAAO,IACL;CACT;CAEA,UAAiB;EAIf,OAHK,KAAK,MAAM,YAChB,KAAK,MAAM,UAAU,IACrB,KAAK,OAAO,IACL;CACT;CAEA,MAAc,SAAS;EACrB,IAAI,KAAK,MAAM,SAAS;GACtB,IAAI,CAAC,KAAK,oBAAoB,CAAC,KAAK,WAAW;GAC/C,KAAK,aAAarE,EAAegC,GAAY,KAAK,WAAW;IACzD,MAAM,KAAK;IACX,YAAY;KAAE,MAAM,KAAK;KAAkB,SAAS;IAAE;IACtD,SAAS,KAAK,MAAM;GACtB,CAAC;EACL,OAEE,AADA,KAAK,YAAY,QAAQ,GACzB,KAAK,aAAa,KAAA;CAEtB;CAEA,gBAAuB;EACrB,AAAI,KAAK,aACT,KAAK,WAAW,IAChB,KAAK,MAAM,UAAU,IACrB,KAAK,KAAK,IAAI,eAAe,KAAK,KAAK,GACvC,KAAK,KAAK,IAAI,WAAW,KAAK,OAAO,GACjC,KAAK,cACP,KAAK,YAAY,QAAQ,GACzB,KAAK,aAAa,KAAA,IAEpB,KAAK,UAAU,OAAO;CACxB;AACF,GCnFasD,KAGR,GAAY,MACT,IAAIH,EAAWlD,GAAMmD,CAAM"}
|
|
1
|
+
{"version":3,"file":"pano-ruler-pro-D9yTbHJz.js","names":["root","$.from_html","$.mutable_source","$.prop","$.get","$.deep_read_state","$.child","$.untrack","$.index","$.set_style","$.sibling","$.only_child","$.set","$.from_html","$.prop","$.mutable_source","$.set","$.get","$.index","throttle","nextFrame","equal","if_block","template_effect","only_child","child","append","onDestroy","from_html","set","deep_read_state","legacy_pre_effect","untrack","legacy_pre_effect_reset","mutable_source","sibling","each","push","set_text","onMount","set_class","prop","init","set_style","pop","reset","mountComponent","bind_element_size","index","get","intersectionOfLine","root$1","root_1","root_2","root_3","RulerItem","$$props","vars","rulerItemProp","_visible","labelWidth","div","styles","node","consequent","em","$$anchor","alternate","div_1","div_2","styles_1","$$render","div_3","styles_2","div_4","text","$$value","root","RulerItems","five","rulerDatas","options","canvasWidth","canvasHeight","getRuleScreenIntr","screenLines","intr","result","startPoint","endPoint","getPosition","start","startLeft","startTop","end","endLeft","endTop","getPositionAndVisible","cameraPosition","cameraDirection","Vector3","startAngle","endAngle","ruleLength","disFromCameraToMid","deg","visible","visibleOrigin","labelOffset","visibleLength","distance","middlePoint","updatePanoRulerData","panoIndex","rulerData","data","Five","startPoints","v","endPoints","pointA","pointB","line","children","l","nextFrameFreshRule","throttleFreshRule","itemData","Controller","params","serverData","PanoRulerProPlugin"],"sources":["../../src/PanoRulerProPlugin/RulerItem.svelte","../../src/PanoRulerProPlugin/RulerItems.svelte","../../src/PanoRulerProPlugin/Controller.ts","../../src/PanoRulerProPlugin/index.ts"],"sourcesContent":["<script lang=\"ts\">\n import type { RulerItemProp } from './typings'\n\n export let rulerItemProp: RulerItemProp\n let _visible = true\n let labelWidth\n\n $: {\n if (\n labelWidth >= rulerItemProp.width ||\n labelWidth / 2 >= (rulerItemProp.labelOffset / 100) * rulerItemProp.width ||\n labelWidth / 2 >= (1 - rulerItemProp.labelOffset / 100) * rulerItemProp.width\n ) {\n _visible = false\n } else {\n _visible = true\n }\n }\n\n let EM_DOTTED_BG = `data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQiIHdpZHRoPSIxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PGZpbHRlciBpZD0icHJlZml4X19hIiBoZWlnaHQ9IjQwMCUiIHdpZHRoPSIxMzcuNCUiIHg9Ii0xOC43JSIgeT0iLTE1MCUiPjxmZU1vcnBob2xvZ3kgaW49IlNvdXJjZUFscGhhIiBvcGVyYXRvcj0iZGlsYXRlIiByYWRpdXM9Ii41IiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSIvPjxmZU9mZnNldCBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSIvPjxmZU1vcnBob2xvZ3kgaW49IlNvdXJjZUFscGhhIiByYWRpdXM9IjEiIHJlc3VsdD0ic2hhZG93SW5uZXIiLz48ZmVPZmZzZXQgaW49InNoYWRvd0lubmVyIiByZXN1bHQ9InNoYWRvd0lubmVyIi8+PGZlQ29tcG9zaXRlIGluPSJzaGFkb3dPZmZzZXRPdXRlcjEiIGluMj0ic2hhZG93SW5uZXIiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIi8+PGZlR2F1c3NpYW5CbHVyIGluPSJzaGFkb3dPZmZzZXRPdXRlcjEiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSIgc3RkRGV2aWF0aW9uPSIuNSIvPjxmZUNvbG9yTWF0cml4IGluPSJzaGFkb3dCbHVyT3V0ZXIxIiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMiAwIi8+PC9maWx0ZXI+PHBhdGggaWQ9InByZWZpeF9fYiIgZD0iTS44ODkgMkgxMS41OCIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48dXNlIGZpbGw9IiMwMDAiIGZpbHRlcj0idXJsKCNwcmVmaXhfX2EpIiB4bGluazpocmVmPSIjcHJlZml4X19iIi8+PHVzZSBzdHJva2U9IiNmZmYiIHN0cm9rZS1vcGFjaXR5PSIuNCIgeGxpbms6aHJlZj0iI3ByZWZpeF9fYiIvPjwvZz48L3N2Zz4=`\n $: vars = `--background-image: url(${EM_DOTTED_BG})`;\n</script>\n\n<div\n class=\"PanoRulerPlugin-rule-line\"\n style:width=\"{rulerItemProp.width}px\"\n style:left=\"{rulerItemProp.left}px\"\n style:top=\"{rulerItemProp.top}px\"\n style:transform=\"rotate({rulerItemProp.rotateDeg}deg)\"\n style:display=\"{rulerItemProp.visible && _visible ? 'block' : 'none'}\"\n>\n {#if rulerItemProp.children.length === 0}\n <em class=\"{rulerItemProp.state ? 'em-solid' : 'em-dotted'}\" style=\"{vars}\"></em>\n {:else}\n <div class=\"rule-mixed-line\">\n {#each rulerItemProp.children as child}\n <div style:width=\"{child.width}px\" class=\"{child.state ? 'em-solid' : 'em-dotted'}\" style=\"{vars}\"></div>\n {/each}\n </div>\n {/if}\n <div\n class=\"PanoRulerPlugin-rule-label\"\n style:left=\"{rulerItemProp.labelOffset}%\"\n >\n <div class=\"PanoRulerPlugin-rule-label-name\" bind:offsetWidth=\"{labelWidth}\">\n {rulerItemProp.labelElement}\n </div>\n </div>\n</div>\n\n<style>\n .PanoRulerPlugin-rule-line {\n position: absolute;\n transform-origin: left 0.0625rem;\n width: 0;\n height: 0.125rem;\n pointer-events: none;\n }\n\n .PanoRulerPlugin-rule-line::after {\n content: '';\n position: absolute;\n left: -0.125rem;\n top: -0.1rem;\n width: 0.25rem;\n height: 0.25rem;\n border-radius: 50%;\n background: #fff;\n z-index: 1;\n animation: viewport-rule-point 0.1s 1s;\n animation-fill-mode: both;\n }\n\n .PanoRulerPlugin-rule-line::before {\n content: '';\n position: absolute;\n right: -0.125rem;\n top: -0.1rem;\n width: 0.25rem;\n height: 0.25rem;\n border-radius: 50%;\n background: #fff;\n z-index: 1;\n animation: viewport-rule-point 0.1s 1.5s;\n animation-fill-mode: both;\n }\n\n .PanoRulerPlugin-rule-line em {\n display: block;\n height: 0.0625rem;\n animation: viewport-rule-line 0.5s ease 1s;\n animation-fill-mode: both;\n box-shadow: 0 0 0.25rem rgb(0 0 0 / 40%);\n position: relative;\n }\n\n .rule-mixed-line {\n display: flex;\n height: 0.0625rem;\n animation: viewport-rule-line 0.5s ease 1s;\n animation-fill-mode: both;\n align-items: center;\n }\n\n .em-solid {\n height: 100%;\n background: #ffffff;\n }\n .em-dotted {\n height: 0.125rem;\n background: var(--background-image);\n background-position: center;\n background-repeat: repeat;\n }\n\n .PanoRulerPlugin-rule-label {\n position: absolute;\n width: 0;\n height: 0;\n top: 0.0625rem;\n pointer-events: none;\n }\n\n .PanoRulerPlugin-rule-label-name {\n position: absolute;\n padding: 0.1875rem 0.375rem;\n background: rgba(195, 195, 195, 0.3);\n backdrop-filter: blur(0.25rem);\n -webkit-backdrop-filter: blur(0.25rem);\n border-radius: 6.25rem;\n border: 0.0625rem solid rgba(255, 255, 255, 0.6);\n white-space: nowrap;\n overflow: hidden;\n color: #ffffff;\n font-weight: 500;\n font-size: 0.75rem;\n line-height: 1;\n -webkit-animation: viewport-rule-label 0.25s ease 1s;\n animation: viewport-rule-label 0.25s ease 1s;\n animation-fill-mode: both;\n box-shadow: inset 0 0 0.625rem 0 rgba(255, 255, 255, 0.3);\n }\n\n @keyframes viewport-rule-line {\n 0% {\n width: 0%;\n }\n 100% {\n width: 100%;\n }\n }\n\n @keyframes viewport-rule-label {\n 0% {\n opacity: 0;\n transform: scaleX(0);\n }\n 100% {\n opacity: 1;\n transform: translate(-50%, -50%) scaleX(1);\n }\n }\n\n @keyframes viewport-rule-point {\n 0% {\n transform: scaleX(0);\n }\n 100% {\n transform: scaleX(1);\n }\n }\n</style>\n","<script lang=\"ts\">\n import { Five } from '@realsee/five-webgpu'\n import { nextFrame } from '../shared-utils/animationFrame'\n import { equal } from '../shared-utils'\n import { intersectionOfLine } from '../shared-utils/math/planimetry'\n import throttle from '../shared-utils/throttle'\n import { onDestroy, onMount } from 'svelte'\n import { Vector3 } from 'three/webgpu'\n import RulerItem from './RulerItem.svelte'\n import type { PanoRulerProPluginDatas, PanoRulerProPluginOptions, RulerItemProp } from './typings'\n export let five: Five\n export let rulerDatas: PanoRulerProPluginDatas\n export let options: PanoRulerProPluginOptions\n let rulerItemProp: RulerItemProp[] = []\n\n const canvasWidth = five.getElement()?.parentElement?.clientWidth || 0\n const canvasHeight = five.getElement()?.parentElement?.clientHeight || 0\n\n const getRuleScreenIntr = (startPoint: { x: number; y: number }, endPoint: { x: number; y: number }) => {\n const screenLines = [\n [\n { x: 0, y: 0 },\n { x: canvasWidth, y: 0 },\n ],\n [\n { x: 0, y: 0 },\n { x: 0, y: canvasHeight },\n ],\n [\n { x: canvasWidth, y: 0 },\n { x: canvasWidth, y: canvasHeight },\n ],\n [\n { x: 0, y: canvasHeight },\n { x: canvasWidth, y: canvasHeight },\n ],\n ]\n const intr: any[] = []\n for (let i = 0; i < screenLines.length; i++) {\n const result = intersectionOfLine([startPoint, endPoint], [screenLines[i][0], screenLines[i][1]], true)\n if (result) intr.push(result)\n }\n if (intr.length === 0) return false\n else {\n return intr\n }\n }\n\n const getPosition = (start: Vector3, end: Vector3) => {\n const startPoint = start.clone().project(five.camera)\n const startLeft = ((startPoint.x + 1) / 2) * canvasWidth\n const startTop = ((-startPoint.y + 1) / 2) * canvasHeight\n\n const endPoint = end.clone().project(five.camera)\n const endLeft = ((endPoint.x + 1) / 2) * canvasWidth\n const endTop = ((-endPoint.y + 1) / 2) * canvasHeight\n const distance = Math.sqrt(Math.pow(endLeft - startLeft, 2) + Math.pow(endTop - startTop, 2))\n return {\n startLeft,\n startTop,\n endLeft,\n endTop,\n distance,\n }\n }\n\n const getPositionAndVisible = (start: Vector3, end: Vector3, visibleOrigin: Vector3) => {\n const cameraPosition = five.camera.position\n const cameraDirection = five.camera.getWorldDirection(new Vector3())\n const startAngle = start.clone().sub(cameraPosition).normalize().angleTo(cameraDirection)\n const endAngle = end.clone().sub(cameraPosition).normalize().angleTo(cameraDirection)\n const ruleLength = start.distanceTo(end)\n const midPoint = end.clone().sub(end.clone().sub(start).divide(new Vector3(2, 2, 2)))\n const disFromCameraToMid = midPoint.distanceTo(cameraPosition)\n const { startLeft, startTop, endLeft, endTop, distance } = getPosition(start, end)\n const rad = Math.PI / 2 - Math.atan2(endLeft - startLeft, startTop - endTop)\n const deg = -(rad / Math.PI) * 180\n\n let visible = true\n\n if (!visibleOrigin) visible = false\n // 只显示拐点相连的线\n if (!equal(start, visibleOrigin) && !equal(end, visibleOrigin)) {\n visible = false\n }\n // 线小于0.3m隐藏\n if (ruleLength < 0.3) {\n visible = false\n }\n\n if (startAngle > Math.PI / 2) {\n visible = false\n }\n\n if (endAngle > Math.PI / 2) {\n visible = false\n }\n\n if (disFromCameraToMid / ruleLength > 8) {\n visible = false\n }\n\n let labelOffset = 50\n let visibleLength = distance\n const intr: any = getRuleScreenIntr({ x: ~~startLeft, y: ~~startTop }, { x: ~~endLeft, y: ~~endTop })\n if (intr && intr.length === 1) {\n if (equal(start, visibleOrigin)) {\n visibleLength = Math.sqrt(Math.pow(intr[0].x - startLeft, 2) + Math.pow(intr[0].y - startTop, 2))\n labelOffset = (visibleLength / distance) * 50\n } else if (equal(end, visibleOrigin)) {\n visibleLength = Math.sqrt(Math.pow(intr[0].x - endLeft, 2) + Math.pow(intr[0].y - endTop, 2))\n labelOffset = 100 - (visibleLength / distance) * 50\n }\n }\n if (intr && intr.length === 2) {\n const middlePoint = {\n x: (intr[0].x + intr[1].x) / 2,\n y: (intr[0].y + intr[1].y) / 2,\n }\n const distanceFromStart = Math.sqrt(Math.pow(middlePoint.x - startLeft, 2) + Math.pow(middlePoint.y - startTop, 2))\n labelOffset = (distanceFromStart / distance) * 100\n }\n\n return {\n startLeft,\n startTop,\n distance,\n deg,\n visible,\n labelOffset,\n ruleLength,\n }\n }\n\n const updatePanoRulerData = () => {\n const panoIndex = five.panoIndex\n const rulerData = rulerDatas.data.find((data) => data.panoIndex === panoIndex)\n if (!rulerData) return (rulerItemProp = [])\n\n // 非全景模式下隐藏所有标尺\n if (five.currentMode !== Five.Mode.Panorama) return (rulerItemProp = [])\n\n const cameraPosition = five.camera.position\n const cameraDirection = five.camera.getWorldDirection(new Vector3())\n const startPoints = rulerData.lines.map((v) => new Vector3(v.start[0], -v.start[1], -v.start[2]))\n const endPoints = rulerData.lines.map((v) => new Vector3(v.end[0], -v.end[1], -v.end[2]))\n // 可以看到的角度最小的拐点\n const [visibleOrigin] = startPoints.concat(endPoints).sort((pointA, pointB) => {\n const angleA = pointA.clone().setY(0).sub(cameraPosition).normalize().angleTo(cameraDirection.clone().setY(0))\n const angleB = pointB.clone().setY(0).sub(cameraPosition).normalize().angleTo(cameraDirection.clone().setY(0))\n return angleA - angleB\n })\n\n const data = rulerData.lines.map((line) => {\n const start = line.start\n const end = line.end\n const { startLeft, startTop, distance, deg, visible, labelOffset, ruleLength } = getPositionAndVisible(\n new Vector3(start[0], -start[1], -start[2]),\n new Vector3(end[0], -end[1], -end[2]),\n visibleOrigin,\n )\n\n const children: any[] = []\n if (line.children && line.children?.length > 0) {\n line.children?.forEach((l) => {\n const start = l.start\n const end = l.end\n const { distance } = getPosition(new Vector3(start[0], -start[1], -start[2]), new Vector3(end[0], -end[1], -end[2]))\n children.push({\n width: distance,\n state: l.state,\n })\n })\n }\n return {\n width: distance,\n left: startLeft,\n top: startTop,\n rotateDeg: deg,\n state: line.state,\n children,\n labelOffset,\n visible,\n labelElement: options.distanceText!(ruleLength),\n }\n })\n\n rulerItemProp = data\n }\n\n const nextFrameFreshRule = () => nextFrame(updatePanoRulerData)\n const throttleFreshRule = throttle(updatePanoRulerData, 80)\n\n onMount(() => {\n updatePanoRulerData()\n five.on('panoArrived', updatePanoRulerData)\n five.on('modeChange', updatePanoRulerData)\n five.on('cameraDirectionUpdate', nextFrameFreshRule)\n five.on('movingToPano', nextFrameFreshRule)\n five.on('mouseWheel', () => throttleFreshRule())\n five.on('pinchGesture', () => throttleFreshRule())\n })\n\n onDestroy(() => {\n five.off('panoArrived', updatePanoRulerData)\n five.off('modeChange', updatePanoRulerData)\n five.off('cameraDirectionUpdate', nextFrameFreshRule)\n five.off('movingToPano', nextFrameFreshRule)\n five.off('mouseWheel', () => throttleFreshRule())\n five.off('pinchGesture', () => throttleFreshRule())\n })\n\n</script>\n\n<div>\n {#each rulerItemProp as itemData}\n <RulerItem rulerItemProp={itemData} />\n {/each}\n</div>\n\n<style>\n</style>\n","import type { Five } from '@realsee/five-webgpu'\nimport type { PanoRulerProPluginData, PanoRulerProPluginDatas, PanoRulerProPluginParameterType, PanoRulerProPluginState } from './typings'\nimport RulerItems from './RulerItems.svelte'\nimport { mountComponent, type MountedComponent } from '../shared-utils/svelte/component.svelte'\nexport default class Controller {\n private five: Five\n private container = document.createElement('div')\n private disposed = false\n private mount = () => { if (!this.disposed) this.five.getElement()?.parentNode?.append(this.container) }\n private panoRulerProData: PanoRulerProPluginData[] | undefined\n private rulerItems: MountedComponent<any>\n public state: PanoRulerProPluginState = {\n enabled: false,\n loaded: false,\n options: {\n className: '',\n distanceText: (distance) => `${distance.toFixed(1)}m`,\n },\n }\n\n public constructor(five: Five, params: PanoRulerProPluginParameterType) {\n this.five = five\n this.container.classList.add('panoRulerProPlugin-container')\n this.container.setAttribute(\n 'style',\n `position: absolute;pointer-events: none;width: 100%;height: 100%;left: 0;top: 0;overflow: hidden;`,\n )\n\n if (params) {\n if (params.data) {\n this.load(params.data)\n }\n this.state.options = { ...this.state.options, ...(params.options || {}) }\n if (params.options?.className) this.container.classList.add(params.options?.className)\n }\n\n if (this.five.model.loaded) this.mount()\n else this.five.once('modelLoaded', this.mount)\n this.five.once('dispose', this.dispose)\n }\n\n public async load(serverData: PanoRulerProPluginDatas) {\n if (this.disposed || !this.five.work) return\n const data = serverData.data\n if (!data) throw new Error('标尺数据依赖不齐全!')\n this.panoRulerProData = data\n this.state.loaded = true\n }\n\n public enable() {\n if (this.disposed || !this.state.loaded) return false\n if (this.state.enabled) return true\n this.state.enabled = true\n this.render()\n return true\n }\n\n public disable() {\n if (!this.state.enabled) return true\n this.state.enabled = false\n this.render()\n return true\n }\n\n private async render() {\n if (this.state.enabled) {\n if (!this.panoRulerProData || !this.container) return\n this.rulerItems = mountComponent(RulerItems, this.container, {\n five: this.five,\n rulerDatas: { data: this.panoRulerProData, version: 1 },\n options: this.state.options,\n })\n } else {\n this.rulerItems?.destroy()\n this.rulerItems = undefined\n }\n }\n\n public dispose = () => {\n if (this.disposed) return\n this.disposed = true\n this.state.enabled = false\n this.five.off('modelLoaded', this.mount)\n this.five.off('dispose', this.dispose)\n if (this.container) {\n this.rulerItems?.destroy()\n this.rulerItems = undefined\n }\n this.container.remove()\n }\n}\n","import type { Five, FivePlugin } from '@realsee/five-webgpu'\nimport Controller from './Controller'\nimport type { PanoRulerProPluginParameterType, PanoRulerProPluginExportType } from './typings'\n\n/**\n * 全景标尺插件\n */\nexport const PanoRulerProPlugin: FivePlugin<\n PanoRulerProPluginParameterType,\n PanoRulerProPluginExportType\n> = (five: Five, params) => {\n\treturn new Controller(five, params)\n}\n\nexport default PanoRulerProPlugin\n\nexport type {\n\tPanoRulerProPluginParameterType,\n\tPanoRulerProPluginExportType,\n\tPanoRulerProPluginOptions,\n\tPanoRulerProPluginState,\n} from './typings'\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t } from "./CSS3DRenderPlugin-
|
|
1
|
+
import { d as e } from "./defaultUrls-CfMtGzqM.js";
|
|
2
|
+
import { t } from "./CSS3DRenderPlugin-CEatgl0m.js";
|
|
3
3
|
import { G as n, K as r, L as i, M as a, N as o, O as s, P as c, Q as l, T as u, V as d, X as f, Y as p, b as m, f as h, i as g, it as _, k as v, l as y, m as b, n as x, o as S, ot as C, p as w, q as T, rt as E, st as D, t as O, x as k, y as A, z as j } from "./component.svelte-D5LYqt50.js";
|
|
4
4
|
import "./index-client-W3QT304M.js";
|
|
5
5
|
import * as M from "three/webgpu";
|
|
@@ -389,4 +389,4 @@ var K = class {
|
|
|
389
389
|
//#endregion
|
|
390
390
|
export { X as t };
|
|
391
391
|
|
|
392
|
-
//# sourceMappingURL=pano-spatial-tag-
|
|
392
|
+
//# sourceMappingURL=pano-spatial-tag-B7Gxn3BS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pano-spatial-tag-D0qn-__S.js","names":["root","$.from_html","$.prop","$.comment","$.first_child","$.index","$.set_class","$.get","$.set_style","$.untrack","$.from_html","$.prop","$.mutable_source","$.get","$.child","$.sibling","$.set","$.set_class","PANO_SPATIAL_TAG_BLUR_IMAGE","template_effect","child","event","append","comment","onDestroy","from_html","set","afterUpdate","untrack","mutable_source","sibling","each","set_attribute","writable","push","onMount","bind_this","set_class","prop","init","next","set_style","first_child","pop","reset","mountComponent","index","html","get","THREE","currentTarget","root$1","Origins","$$props","origins","handleClick","id","fragment","node","i","classes","styles","origin","$$anchor","root","Tag","upsideDown","content","contentZoom","lineWidthZoom","lineHeightZoom","destroying","folded","dispose","events","hooks","blurImageUrl","contentWidth","contentHeight","contentDom","show","timeoutId","handleClickContent","eventsName","classNames","key","unsubscribe","str","currentId","date","div","div_1","div_2","div_3","div_4","$$value","pluginStyle","REGEX_STRING","ENCODE_HTML_RULES","TEMPLATE_MODES","stripSemi","render","Template","template","data","text","src","escapeFn","markup","c","matches","closing","line","pat","result","arr","firstPos","MESH_SIZE","RAY_TOLERANT_DISTANCE","BLUR_IMAGE_URL","PanoSpatialTagPlugin","wrapper","params","centerY","wait","maxNumberOnScreen","minRad","nearTolerance","upsideHeight","minDistance","maxDistance","css3DRender","CSS3DRenderPlugin","five","container","Subscribe","blurImage","state","onCameraUpdate","updateOrigins","userAction","updateTags","onPanoArrived","onPanoWillArrive","rotateRad","pose","camera","frustum","projScreenMatrix","distance","tag","v","onModeChange","mode","Five","direction","mouse","front","newTags","getNewTags","frontTagLength","points","point","_mouse","clientWidth","clientHeight","newPoint","l","anotherPoint","raycaster","intersect","plane","normal","position","right","square","app","replacement","load","setIntersectObjects","objects","enable","disable","unfoldAll","foldAll","unfold","fold","onResize","onModelLoaded"],"sources":["../../src/PanoSpatialTagPlugin/store.ts","../../src/PanoSpatialTagPlugin/Components/origins.svelte","../../src/PanoSpatialTagPlugin/Components/tag.svelte","../../src/PanoSpatialTagPlugin/style.ts","../../src/shared-utils/tinyEJSrender.ts","../../src/PanoSpatialTagPlugin/Plugin.ts"],"sourcesContent":["import { writable } from 'svelte/store'\n\nexport const currentTarget = writable(null)","<script lang=\"ts\">\n import { currentTarget } from '../store'\n import type { PanoSpatialTagPluginOriginElement, PanoSpatialTagPluginId } from '../typings'\n export let origins: Array<PanoSpatialTagPluginOriginElement>\n\n const handleClick = (id: PanoSpatialTagPluginId): void => {\n currentTarget.update((): string => `${id}-PanoSpatialTagPlugin-${Date.now()}`)\n }\n</script>\n\n{#each origins as origin}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <i \n class:PanoSpatialTagPlugin__tag-origin={true}\n class:PanoSpatialTagPlugin__tag-origin-destroy={origin.destroying}\n style:top=\"{origin.top}%\"\n style:left=\"{origin.left}%\"\n style:visibility=\"{origin.front ? 'visible' : 'hidden'}\"\n on:click=\"{() => handleClick(origin.id)}\"\n />\n{/each}\n\n<style>\n .PanoSpatialTagPlugin__tag-origin {\n position: absolute;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background: #fff;\n box-shadow: 0 0 .6rem #fff;\n transform: translate(-50%, -50%) scale(1);\n transform-origin: center center;\n animation: PanoSpatialTagPlugin__tag-origin 1.2s forwards;\n pointer-events: auto;\n }\n\n .PanoSpatialTagPlugin__tag-origin:after {\n content: '';\n position: absolute;\n top: 50%;\n height: 50%;\n width: 2rem;\n height: 2rem;\n transform: translate(-50%, -50%);\n }\n\n .PanoSpatialTagPlugin__tag-origin-destroy {\n transform: translate(-50%, -50%) scale(0.6);\n animation: PanoSpatialTagPlugin__tag-origin-destroy 1.2s forwards .7s;\n }\n\n @keyframes PanoSpatialTagPlugin__tag-origin {\n 0% { transform: translate(-50%, -50%) scale(1); opacity: 0; }\n 100% { transform: translate(-50%, -50%) scale(0.6); opacity: 1 }\n }\n\n @keyframes PanoSpatialTagPlugin__tag-origin-destroy {\n 0% { transform: translate(-50%, -50%) scale(0.6); opacity: 1; }\n 10% { transform: translate(-50%, -50%) scale(1); opacity: 0.9; }\n 100% { transform: translate(-50%, -50%) scale(1); opacity: 0; }\n }\n</style>\n","<script lang=\"ts\">\n import type { PanoSpatialTagPluginContentEvent } from '../typings'\n import { onMount, onDestroy, afterUpdate } from 'svelte'\n import { currentTarget } from '../store'\n export let id: number | string\n export let upsideDown: boolean\n export let content: string\n export let contentZoom: number\n export let lineWidthZoom: number\n export let lineHeightZoom: number\n export let destroying = false\n export let folded: boolean\n export let dispose: () => void\n export let events: PanoSpatialTagPluginContentEvent\n export let hooks\n export let blurImageUrl: string\n\n let contentWidth = 0\n let contentHeight = 0\n let contentDom: HTMLElement\n let show: boolean\n let timeoutId = setTimeout(() => {\n if (!folded) show = true\n timeoutId = undefined\n }, 100)\n\n const handleClickContent = (event) => {\n const eventsName = Object.keys(events)\n let node = event.target\n while (node) {\n const classNames = node.getAttribute('class')\n if (!classNames) {\n node = node.parentNode\n continue\n }\n if (classNames.includes('PanoSpatialTagPlugin__tag-content')) {\n node = null\n break\n }\n eventsName.forEach((key) => {\n if (classNames.includes(key)) events[key](id)\n })\n node = node.parentNode\n }\n }\n\n onMount(() => {\n hooks.emit('initTag', { id })\n })\n\n const unsubscribe = currentTarget.subscribe((str: string) => {\n if (str === null) return\n const [currentId, date] = str.split('-PanoSpatialTagPlugin-')\n if (id === currentId) {\n hooks.emit('clickOrigin', { id, show })\n if (!timeoutId) {\n show = folded\n folded = !folded\n timeoutId = setTimeout(() => {\n timeoutId = undefined\n }, 1500)\n }\n }\n })\n\n afterUpdate(() => {\n contentWidth = contentDom.offsetWidth\n contentHeight = contentDom.offsetHeight\n if (timeoutId) return\n show = !folded\n })\n\n onDestroy(() => {\n hooks.emit('destroyTag', { id })\n unsubscribe()\n dispose()\n })\n</script>\n\n<div\n class:PanoSpatialTagPlugin__tag-x={true}\n class:PanoSpatialTagPlugin__tag-upside-down={upsideDown}\n class:PanoSpatialTagPlugin__tag-show={show}\n class:PanoSpatialTagPlugin__tag-hide={show === false || destroying}\n id={'PanoSpatialTagPlugin__' + id}\n style=\"height: {20 * lineHeightZoom}rem\"\n>\n <div\n class=\"PanoSpatialTagPlugin__tag-shadow\"\n style=\"transform: translate({(contentWidth / 2) * contentZoom * 3}px, {(contentHeight / 2) *\n (upsideDown ? -1 : 1) *\n contentZoom *\n 3}px) scale({1 / contentZoom}); background-image: url('{blurImageUrl}');\"\n />\n <div class=\"PanoSpatialTagPlugin__tag-line\">\n <i class=\"PanoSpatialTagPlugin__tag-flagpole\" style=\"width: {lineWidthZoom}rem;\" />\n <i class=\"PanoSpatialTagPlugin__tag-line1\" />\n <i class=\"PanoSpatialTagPlugin__tag-line2\" />\n </div>\n <div class=\"PanoSpatialTagPlugin__tag-animate\" style=\"transform: scale({contentZoom * 3})\">\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div class=\"PanoSpatialTagPlugin__tag-content\" on:click={handleClickContent} bind:this={contentDom}>\n {@html content}\n </div>\n </div>\n</div>\n\n<style>\n .PanoSpatialTagPlugin__tag-x {\n position: absolute;\n top: 0;\n left: 0;\n display: block;\n white-space: nowrap;\n box-sizing: border-box;\n width: 25rem;\n height: 14rem;\n color: #fff;\n transform: translate(0, -100%);\n transition: height 0.5s linear;\n }\n\n .PanoSpatialTagPlugin__tag-shadow {\n content: '';\n position: absolute;\n width: 30rem;\n height: 30rem;\n top: -15rem;\n left: -15rem;\n z-index: -1;\n opacity: 0;\n transition: opacity 0.8s 0.6s;\n background-size: 30rem 30rem;\n }\n\n .PanoSpatialTagPlugin__tag-line {\n position: absolute;\n left: -1rem;\n width: 2rem;\n height: 100%;\n overflow: hidden;\n }\n\n .PanoSpatialTagPlugin__tag-flagpole {\n position: absolute;\n top: 0;\n left: 1rem;\n height: calc(100% - 1.5rem);\n width: 0.15rem;\n background: linear-gradient(to bottom, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.1));\n box-shadow: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2);\n opacity: 0;\n transform: translate(-50%, 60%) scaleY(0);\n transition: transform 0.4s cubic-bezier(0.44, 0.44, 0.74, 0.98), opacity 0.4s cubic-bezier(0.44, 0.44, 0.74, 0.98), width 0.5s linear,\n height 0.5s linear;\n transform-origin: center bottom;\n }\n\n .PanoSpatialTagPlugin__tag-line1 {\n position: absolute;\n top: 0;\n left: 0.3rem;\n height: 1.8rem;\n width: 0.1rem;\n background: #fff;\n opacity: 0;\n transform: translate(-50%, 200%) scaleY(0);\n transform-origin: center top;\n }\n\n .PanoSpatialTagPlugin__tag-line2 {\n position: absolute;\n top: 0;\n left: 0.5rem;\n height: 1.8rem;\n width: 0.1rem;\n background: #fff;\n opacity: 0;\n transform: translate(-50%, 200%) scaleY(0);\n transform-origin: center top;\n }\n\n .PanoSpatialTagPlugin__tag-show .PanoSpatialTagPlugin__tag-line1 {\n animation: PanoSpatialTagPlugin__tag-line1 linear 0.5s forwards 0.45s;\n }\n\n .PanoSpatialTagPlugin__tag-show .PanoSpatialTagPlugin__tag-line2 {\n animation: PanoSpatialTagPlugin__tag-line2 linear 0.5s forwards 0.65s;\n }\n\n .PanoSpatialTagPlugin__tag-x.PanoSpatialTagPlugin__tag-upside-down {\n transform: translate(0, 0);\n }\n\n .PanoSpatialTagPlugin__tag-upside-down .PanoSpatialTagPlugin__tag-line {\n transform: scaleY(-1);\n }\n\n .PanoSpatialTagPlugin__tag-animate {\n position: relative;\n height: 100%;\n overflow: hidden;\n transform-origin: left top;\n transition: transform 0.5s linear;\n }\n\n .PanoSpatialTagPlugin__tag-upside-down .PanoSpatialTagPlugin__tag-animate {\n transform-origin: left bottom;\n }\n\n .PanoSpatialTagPlugin__tag-content {\n position: absolute;\n display: inline-block;\n transform: translate(-100%, 0);\n transition: transform 0.9s cubic-bezier(0, 0.65, 0.16, 1.08) 0.6s;\n padding-left: 0.5rem;\n font-size: 1rem;\n }\n\n .PanoSpatialTagPlugin__tag-upside-down .PanoSpatialTagPlugin__tag-content {\n bottom: 0;\n }\n\n .PanoSpatialTagPlugin__tag-show .PanoSpatialTagPlugin__tag-flagpole {\n opacity: 1;\n transform: translate(-50%, 0) scaleY(1);\n }\n\n .PanoSpatialTagPlugin__tag-upside-down .PanoSpatialTagPlugin__tag-shadow {\n top: unset;\n bottom: -15rem;\n }\n\n .PanoSpatialTagPlugin__tag-show .PanoSpatialTagPlugin__tag-shadow {\n opacity: 0.32;\n }\n\n .PanoSpatialTagPlugin__tag-show .PanoSpatialTagPlugin__tag-content {\n transform: translate(0, 0);\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-flagpole {\n opacity: 0;\n transform: translate(-50%, 60%) scaleY(0);\n transition: transform 0.5s 0.55s, opacity 0.4s 0.55s;\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-shadow {\n opacity: 0;\n transition: opacity 0.8s;\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-content {\n transform: translate(-100%, 0);\n transition: transform 0.6s cubic-bezier(0.53, 0.06, 0.88, 0.59);\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-content * {\n pointer-events: none;\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-line1 {\n opacity: 0.5;\n transform: translate(-50%, 10%) scaleY(0);\n animation: PanoSpatialTagPlugin__tag-line1-hide linear 0.28s forwards 0.3s;\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-line2 {\n opacity: 0.5;\n transform: translate(-50%, 0) scaleY(0);\n animation: PanoSpatialTagPlugin__tag-line2-hide linear 0.28s forwards 0.45s;\n }\n\n @keyframes PanoSpatialTagPlugin__tag-line1 {\n 0% {\n opacity: 0;\n transform: translate(-50%, 250%) scaleY(1);\n }\n 50% {\n opacity: 0.5;\n transform: translate(-50%, 135%) scaleY(1);\n }\n 100% {\n opacity: 0.5;\n transform: translate(-50%, 20%) scaleY(0);\n }\n }\n\n @keyframes PanoSpatialTagPlugin__tag-line2 {\n 0% {\n opacity: 0;\n transform: translate(-50%, 250%) scaleY(1);\n }\n 50% {\n opacity: 0.5;\n transform: translate(-50%, 125%) scaleY(1);\n }\n 100% {\n opacity: 0.5;\n transform: translate(-50%, 0) scaleY(0);\n }\n }\n\n @keyframes PanoSpatialTagPlugin__tag-line1-hide {\n 0% {\n opacity: 0.5;\n transform: translate(-50%, 10%) scaleY(0);\n }\n 50% {\n opacity: 0.2;\n transform: translate(-50%, 105%) scaleY(1);\n }\n 100% {\n opacity: 0;\n transform: translate(-50%, 200%) scaleY(0);\n }\n }\n\n @keyframes PanoSpatialTagPlugin__tag-line2-hide {\n 0% {\n opacity: 0.5;\n transform: translate(-50%, 0) scaleY(0);\n }\n 50% {\n opacity: 0.2;\n transform: translate(-50%, 100%) scaleY(1);\n }\n 100% {\n opacity: 0;\n transform: translate(-50%, 200%) scaleY(0);\n }\n }\n</style>\n","export const pluginStyle: Partial<CSSStyleDeclaration> = {\n position: 'absolute',\n top: '0px',\n left: '0px',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n}","const DEFAULT_OPEN_DELIMITER = '<'\nconst DEFAULT_CLOSE_DELIMITER = '>'\nconst DEFAULT_DELIMITER = '%'\nconst DEFAULT_LOCALS_NAME = 'locals'\nconst REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)'\nconst ENCODE_HTML_RULES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst TEMPLATE_MODES = {\n EVAL: 'eval',\n ESCAPED: 'escaped',\n RAW: 'raw',\n COMMENT: 'comment',\n LITERAL: 'literal',\n}\n\ninterface RenderData {\n\t[key: string]: string\n}\n\nfunction stripSemi (str: string): string {\n return str.replace(/;(\\s*$)/, '$1')\n}\n\nexport default function render (template: string, data: RenderData): string {\n\tconst templ = new Template(template)\n return templ.compileFunction()(data)\n}\n\nclass Template {\n\tprivate templateText: string\n\tprivate mode = null\n\tprivate truncate = false\n\tprivate currentLine = 1\n\tprivate source = ''\n\tprivate regex = new RegExp(REGEX_STRING)\n\n\tconstructor (text) {\n\t this.templateText = text\n\t}\n\n\tpublic compileFunction () {\n let src\n const prepended = \n \t' var __output = \"\";\\n' +\n ' function __append(s) { if (s !== undefined && s !== null) __output += s }\\n' +\n \t' with (' + DEFAULT_LOCALS_NAME + ' || {}) {' + '\\n'\n const appended = ' }' + '\\n return __output;' + '\\n'\n const escapeFn = function (markup) {\n\t\t return markup == undefined\n\t\t ? ''\n\t\t : String(markup)\n\t\t .replace(/[&<>'\"]/g, function (c) {\n\t\t\t return ENCODE_HTML_RULES[c] || c\n\t\t\t})\n\t\t}\n\n this._generateSource()\n this.source = prepended + this.source + appended\n\n src = this.source\n src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\\n' + src\n\n return new Function(DEFAULT_LOCALS_NAME + ', escapeFn', src)\n }\n\n private _generateSource () {\n this.templateText =\n this.templateText.replace(/[ \\t]*<%_/gm, '<%_').replace(/_%>[ \\t]*/gm, '_%>')\n\n const matches = this._parseTemplateText()\n const d = DEFAULT_DELIMITER\n const o = DEFAULT_OPEN_DELIMITER\n const c = DEFAULT_CLOSE_DELIMITER\n\n if (matches && matches.length) {\n matches.forEach((line, index) => {\n let closing\n if ( line.indexOf(o + d) === 0\n && line.indexOf(o + d + d) !== 0) {\n closing = matches[index + 2]\n if (!(closing == d + c || closing == '-' + d + c || closing == '_' + d + c)) {\n throw new Error('Could not find matching close tag for \"' + line + '\".')\n }\n }\n this._scanLine(line)\n })\n }\n }\n\n private _parseTemplateText () {\n let str = this.templateText\n const pat = this.regex\n let result = pat.exec(str)\n const arr = []\n let firstPos\n\n while (result) {\n firstPos = result.index\n\n if (firstPos !== 0) {\n arr.push(str.substring(0, firstPos))\n str = str.slice(firstPos)\n }\n\n arr.push(result[0])\n str = str.slice(result[0].length)\n result = pat.exec(str)\n }\n\n if (str) {\n arr.push(str)\n }\n\n return arr\n }\n\n private _addOutput (line) {\n if (this.truncate) {\n line = line.replace(/^(?:\\r\\n|\\r|\\n)/, '')\n this.truncate = false\n }\n if (!line) return line\n\n line = line.replace(/\\\\/g, '\\\\\\\\')\n line = line.replace(/\\n/g, '\\\\n')\n line = line.replace(/\\r/g, '\\\\r')\n line = line.replace(/\"/g, '\\\\\"')\n this.source += ' ; __append(\"' + line + '\")' + '\\n'\n }\n\n private _scanLine (line) {\n const d = DEFAULT_DELIMITER\n const o = DEFAULT_OPEN_DELIMITER\n const c = DEFAULT_CLOSE_DELIMITER\n const newLineCount = line.split('\\n').length - 1\n\n switch (line) {\n\t case o + d:\n\t case o + d + '_':\n\t this.mode = TEMPLATE_MODES.EVAL\n\t break\n\t case o + d + '=':\n\t this.mode = TEMPLATE_MODES.ESCAPED\n\t break\n\t case o + d + '-':\n\t this.mode = TEMPLATE_MODES.RAW\n\t break\n\t case o + d + '#':\n\t this.mode = TEMPLATE_MODES.COMMENT\n\t break\n\t case o + d + d:\n\t this.mode = TEMPLATE_MODES.LITERAL\n\t this.source += ' ; __append(\"' + line.replace(o + d + d, o + d) + '\")' + '\\n'\n\t break\n\t case d + d + c:\n\t this.mode = TEMPLATE_MODES.LITERAL\n\t this.source += ' ; __append(\"' + line.replace(d + d + c, d + c) + '\")' + '\\n'\n\t break\n\t case d + c:\n\t case '-' + d + c:\n\t case '_' + d + c:\n\t if (this.mode == TEMPLATE_MODES.LITERAL) {\n\t this._addOutput(line)\n\t }\n\n\t this.mode = null\n\t this.truncate = line.indexOf('-') === 0 || line.indexOf('_') === 0\n\t break\n\t default:\n\t if (this.mode) {\n\t switch (this.mode) {\n\t case TEMPLATE_MODES.EVAL:\n\t case TEMPLATE_MODES.ESCAPED:\n\t case TEMPLATE_MODES.RAW:\n\t if (line.lastIndexOf('//') > line.lastIndexOf('\\n')) {\n\t line += '\\n'\n\t }\n\t }\n\t switch (this.mode) {\n\t case TEMPLATE_MODES.EVAL:\n\t this.source += ' ; ' + line + '\\n'\n\t break\n\t case TEMPLATE_MODES.ESCAPED:\n\t this.source += ' ; __append(escapeFn(' + stripSemi(line) + '))' + '\\n'\n\t break\n\t case TEMPLATE_MODES.RAW:\n\t this.source += ' ; __append(' + stripSemi(line) + ')' + '\\n'\n\t break\n\t case TEMPLATE_MODES.COMMENT:\n\t break\n\t case TEMPLATE_MODES.LITERAL:\n\t this._addOutput(line)\n\t break\n\t }\n\t }\n\t else {\n\t this._addOutput(line)\n\t }\n }\n }\n}\n","import * as THREE from 'three/webgpu'\nimport type { FivePlugin } from '@realsee/five-webgpu'\nimport { Five, Subscribe } from '@realsee/five-webgpu'\nimport CSS3DRenderPlugin from '../CSS3DRenderPlugin'\nimport Origins from './Components/origins.svelte'\nimport Tag from './Components/tag.svelte'\nimport { pluginStyle } from './style'\nimport render from '../shared-utils/tinyEJSrender'\nimport { PANO_SPATIAL_TAG_BLUR_IMAGE } from '../shared-utils'\n\nimport { mountComponent, type MountedComponent } from '../shared-utils/svelte/component.svelte'\nimport type {\n PanoSpatialTagPluginId,\n PanoSpatialTagPluginDataElement,\n PanoSpatialTagPluginTagElement,\n PanoSpatialTagPluginOriginElement,\n PanoSpatialTagPluginPointElement,\n PanoSpatialTagPluginContentReplacement,\n PanoSpatialTagPluginContentEvent,\n} from './typings'\n\nexport interface PanoSpatialTagPluginData {\n // 插件load数据\n folded?: boolean // 标签初始是否收起\n enabled?: boolean // 插件初始是否启用\n points: Array<PanoSpatialTagPluginDataElement>\n template: string // dom模板\n events?: PanoSpatialTagPluginContentEvent\n render?: (template: string, replacement: PanoSpatialTagPluginContentReplacement) => string // 模板数据映射函数\n}\n\nexport interface PanoSpatialTagPluginParameterType {\n container?: Element // 标签容器\n wait?: number // debounce延迟\n maxNumberOnScreen?: number // 屏幕内标签最大展示数量\n minRad?: number // 视角和标签平面最小夹角\n nearTolerance?: number // 标签映射到屏幕之间最小间距\n upsideHeight?: number // 标签反向高度\n minDistance?: number // 标签最小距离,单位米\n maxDistance?: number // 标签最小距离,单位米\n // foldPercent?: number // 标签折叠屏幕百分比\n}\n\nexport interface PanoSpatialTagPluginExportType {\n load: (data: PanoSpatialTagPluginData) => void\n unfoldAll: () => void\n foldAll: () => void\n unfold: (id: PanoSpatialTagPluginId) => void\n fold: (id: PanoSpatialTagPluginId) => void\n enable: () => void\n disable: () => void\n dispose: () => void\n}\n\ninterface PanoSpatialTagPluginState {\n timeoutId?: NodeJS.Timeout\n points: Array<PanoSpatialTagPluginPointElement>\n origins: Array<PanoSpatialTagPluginOriginElement>\n tags: Array<PanoSpatialTagPluginTagElement>\n render: (template: string, replacement: PanoSpatialTagPluginContentReplacement) => string\n events: PanoSpatialTagPluginContentEvent\n intersectObjects?: Array<any> // 碰撞检测objects\n template: string\n folded: boolean // 标签初始收起展开状态\n enabled: boolean // 用户控制启用禁止状态\n forbidden: boolean // 插件控制启用禁止状态\n}\n\nconst MESH_SIZE = 0.001\nconst RAY_TOLERANT_DISTANCE = 0.01\nconst BLUR_IMAGE_URL = PANO_SPATIAL_TAG_BLUR_IMAGE\n\n/**\n * 空间游走标签插件\n */\nexport const PanoSpatialTagPlugin: FivePlugin<PanoSpatialTagPluginParameterType, PanoSpatialTagPluginExportType> = (five: Five, params) => {\n let wrapper = params?.container\n let centerY = 1.4\n const wait = params?.wait ?? 200\n const maxNumberOnScreen = params?.maxNumberOnScreen ?? 3\n const minRad = params?.minRad ?? Math.PI / 4\n const nearTolerance = params?.nearTolerance ?? 100\n const upsideHeight = params?.upsideHeight ?? 1.6\n const minDistance = params?.minDistance ?? 1.2\n const maxDistance = params?.maxDistance ?? 3.5\n // const foldPercent = params?.foldPercent ?? 20\n\n const css3DRender = CSS3DRenderPlugin(five)\n const container = document.createElement('div')\n container.classList.add('PanoSpatialTagPlugin')\n Object.assign(container.style, pluginStyle)\n\n const hooks = new Subscribe()\n\n let blurImage = new Image()\n blurImage.src = BLUR_IMAGE_URL\n\n const state: PanoSpatialTagPluginState = {\n points: [],\n origins: [],\n tags: [],\n template: '',\n events: {},\n render,\n folded: false,\n enabled: true,\n forbidden: true,\n }\n\n const origins = mountComponent(Origins, container, { origins: state.origins })\n\n const onCameraUpdate = (pose, userAction): void => {\n updateOrigins()\n if (userAction) {\n updateTags()\n // state.tags.forEach(tag => {\n // const mouse = tag.position.clone().project(five.camera)\n // const top = ( - mouse.y + 1 ) / 2 * 100\n // })\n }\n }\n\n const onPanoArrived = () => {\n if (state.forbidden) {\n state.forbidden = false\n updateTags()\n }\n }\n\n const onPanoWillArrive = (pano, pose): void => {\n if (state.tags.length === 0) return\n const rotateRad = pose.longitude - five.state.longitude\n const camera = five.camera.clone()\n camera.position.copy(pose.offset)\n camera.rotateOnWorldAxis(new THREE.Vector3(0, 1, 0), rotateRad)\n camera.updateProjectionMatrix()\n camera.updateMatrixWorld(true)\n const frustum = new THREE.Frustum()\n const projScreenMatrix = new THREE.Matrix4()\n projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse)\n frustum.setFromProjectionMatrix(projScreenMatrix, camera.coordinateSystem)\n\n state.tags.forEach((tag) => {\n const distance = camera.position.clone().setY(centerY).distanceTo(tag.position)\n if (distance < minDistance || distance > maxDistance) return (tag.destroying = true)\n if (!frustum.containsPoint(tag.position)) return (tag.destroying = true)\n const v = tag.position.clone().sub(camera.position).setY(0)\n if (v.angleTo(tag.normal) > Math.PI / 2 - minRad && v.angleTo(tag.normal) < Math.PI / 2 + minRad) return (tag.destroying = true)\n })\n state.tags.forEach((tag) => {\n if (tag.destroying) {\n tag.app.update({\n contentZoom: 0.1 + camera.position.distanceTo(tag.position) / maxDistance,\n lineWidthZoom: 0.38 * (0.01 + camera.position.distanceTo(tag.position) / maxDistance),\n destroying: tag.destroying,\n })\n } else {\n tag.app.update({\n lineWidthZoom: 0.38 * (0.01 + camera.position.distanceTo(tag.position) / maxDistance),\n lineHeightZoom: 0.4 + ((camera.position.distanceTo(tag.position) - minDistance) / maxDistance) * 0.6,\n contentZoom: 0.1 + camera.position.distanceTo(tag.position) / maxDistance,\n })\n }\n })\n setTimeout(() => {\n state.tags.forEach((tag) => {\n if (tag.destroying) {\n tag.app.destroy()\n tag = null\n }\n })\n state.tags = state.tags.filter((tag) => !tag.destroying)\n updateOrigins()\n }, 1900)\n }\n\n const onModeChange = (mode): void => {\n if (mode !== Five.Mode.Panorama && !state.forbidden) {\n origins.update({ origins: [] })\n state.tags.forEach((tag) => {\n tag.app.destroy()\n tag = null\n })\n state.origins = []\n state.tags = []\n state.forbidden = true\n }\n }\n\n const updateOrigins = (): void => {\n if (state.forbidden || !state.enabled) return\n const camera = five.camera\n const direction = camera.getWorldDirection(new THREE.Vector3())\n state.origins = state.tags.map((tag) => {\n const mouse = tag.position.clone().project(camera)\n const front = tag.position.clone().sub(camera.position).setY(0).angleTo(direction.setY(0)) < Math.PI / 2\n return {\n id: tag.id,\n front,\n left: ((mouse.x + 1) / 2) * 100,\n top: ((-mouse.y + 1) / 2) * 100,\n destroying: tag.destroying,\n }\n })\n origins.update({ origins: state.origins })\n }\n\n const updateTags = (): void => {\n if (state.forbidden || !state.enabled) return\n if (state.timeoutId) clearTimeout(state.timeoutId)\n state.timeoutId = setTimeout(() => {\n state.timeoutId = undefined\n const newTags = getNewTags()\n if (newTags.length) {\n state.tags = state.tags.concat(newTags)\n updateOrigins()\n }\n }, wait)\n }\n\n const getNewTags = (): Array<PanoSpatialTagPluginTagElement> => {\n const { clientWidth, clientHeight } = five.getElement()\n const newTags = []\n const camera = five.camera\n const frustum = new THREE.Frustum()\n const projScreenMatrix = new THREE.Matrix4()\n const direction = camera.getWorldDirection(new THREE.Vector3())\n projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse)\n frustum.setFromProjectionMatrix(projScreenMatrix, camera.coordinateSystem)\n const frontTagLength = state.tags.filter((tag) => frustum.containsPoint(tag.position) && !tag.destroying).length\n\n const points: Array<PanoSpatialTagPluginPointElement> = state.points.reduce((result, point) => {\n if (state.tags.find((tag) => point.id === tag.id && !tag.destroying)) return result\n const distance = camera.position.clone().setY(centerY).distanceTo(point.position)\n if (distance < minDistance || distance > maxDistance) return result\n if (!frustum.containsPoint(point.position)) return result\n\n const v = point.position.clone().sub(camera.position).setY(0)\n\n if (v.angleTo(point.normal) > Math.PI / 2 - minRad && v.angleTo(point.normal) < Math.PI / 2 + minRad) return result\n\n const mouse = point.position.clone().project(camera)\n if (\n !state.tags.every((tag) => {\n if (tag.position.clone().sub(camera.position).setY(0).angleTo(direction.setY(0)) > Math.PI / 2) return true\n const _mouse = tag.position.clone().project(camera)\n return (\n Math.sqrt(Math.pow(((mouse.x - _mouse.x) / 2) * clientWidth, 2) + Math.pow(((mouse.y - _mouse.y) / 2) * clientHeight, 2)) >\n nearTolerance\n )\n })\n )\n return result\n\n const newPoint: PanoSpatialTagPluginPointElement = {\n id: point.id,\n position: point.position,\n normal: point.normal,\n replacement: point.replacement,\n weight: point.weight,\n distance,\n }\n\n let index: number\n for (let i = 0, l = result.length; i < l; i++) {\n const anotherPoint = result[i]\n if (newPoint.weight > anotherPoint.weight) {\n index = i\n break\n }\n if (newPoint.distance < anotherPoint.distance) {\n index = i\n break\n }\n }\n if (index !== undefined) result.splice(index, 0, newPoint)\n else result.push(newPoint)\n\n return result\n }, [])\n\n for (let i = 0, l = points.length; i < l; i++) {\n if (frontTagLength + newTags.length >= maxNumberOnScreen) break\n const point = points[i]\n if (newTags.find((tag) => point.id === tag.id)) continue\n\n const mouse = point.position.clone().project(camera)\n if (\n !state.tags.concat(newTags).every((tag) => {\n if (tag.position.clone().sub(camera.position).setY(0).angleTo(direction.setY(0)) > Math.PI / 2) return true\n const _mouse = tag.position.clone().project(camera)\n return (\n Math.sqrt(Math.pow(((mouse.x - _mouse.x) / 2) * clientWidth, 2) + Math.pow(((mouse.y - _mouse.y) / 2) * clientHeight, 2)) >\n nearTolerance\n )\n })\n )\n continue\n\n const raycaster = new THREE.Raycaster(\n camera.position.clone().setY(centerY),\n point.position.clone().sub(camera.position.clone().setY(centerY)).normalize(),\n 0,\n point.distance + RAY_TOLERANT_DISTANCE,\n )\n const [intersect] = state.intersectObjects\n ? raycaster.intersectObjects(state.intersectObjects, true)\n : five.model.loaded\n ? five.model.intersectRaycaster(raycaster)\n : raycaster.intersectObjects(five.model.children, true)\n if (!intersect) continue\n if (point.distance - intersect.distance < RAY_TOLERANT_DISTANCE) {\n const { position, normal, id, replacement } = point\n const plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, position)\n const right = position.clone().sub(camera.position).cross(new THREE.Vector3(0, 1, 0)).setLength(MESH_SIZE)\n const square = [\n position.clone(),\n position.clone().add(right),\n position.clone().add(new THREE.Vector3(0, MESH_SIZE, 0)).add(right),\n position.clone().add(new THREE.Vector3(0, MESH_SIZE, 0)),\n ].map((v) => plane.projectPoint(v, new THREE.Vector3()))\n\n const { container, dispose } = css3DRender.create3DDomContainer(square) || {}\n const app = mountComponent(Tag, container, {\n id,\n content: state.render(state.template, replacement),\n lineWidthZoom: 0.38 * (0.01 + camera.position.distanceTo(position) / maxDistance),\n lineHeightZoom: 0.4 + ((camera.position.distanceTo(position) - minDistance) / maxDistance) * 0.6,\n contentZoom: 0.1 + camera.position.distanceTo(position) / maxDistance,\n upsideDown: position.y > upsideHeight,\n folded: state.folded,\n events: state.events,\n hooks,\n dispose,\n blurImageUrl: BLUR_IMAGE_URL,\n })\n newTags.push({\n position,\n normal,\n id,\n app,\n })\n }\n }\n\n return newTags\n }\n\n /** 标签数据加载\n * @param data.points {Array} 标签数据\n * @param data.enabled {Boolean} 插件是否启用\n * @param data.folded {Boolean} 标签是否默认展开\n */\n const load = (data: PanoSpatialTagPluginData): void => {\n state.points = data.points.map((point) => {\n return {\n id: point.id,\n position: new THREE.Vector3().fromArray(point.position),\n normal: new THREE.Vector3().fromArray(point.normal),\n replacement: point.replacement ?? {},\n weight: point.weight ?? -1,\n }\n })\n if (data.render) state.render = data.render\n if (data.template) state.template = data.template\n if (data.events) state.events = data.events\n if (data.enabled === false) state.enabled = data.enabled\n if (data.folded === true) state.folded = data.folded\n }\n\n /** 设置射线碰撞检测objects\n *\n */\n const setIntersectObjects = (objects: Array<any>): void => {\n state.intersectObjects = objects\n updateTags()\n }\n\n /** 标签启用\n * 启用插件并重新计算展示标签\n */\n const enable = (): void => {\n state.enabled = true\n updateTags()\n }\n\n /** 插件禁用\n * 1. 禁用同时会清除已展示的标签\n * 2. 再次启用时会重新计算展示标签\n */\n const disable = (): void => {\n state.enabled = false\n origins.update({ origins: [] })\n state.tags.forEach((tag) => {\n tag.app.destroy()\n tag = null\n })\n state.origins = []\n state.tags = []\n }\n\n /** 展开所有标签\n * 1. 展开所有收起的标签\n * 2. 新标签会默认展开\n */\n const unfoldAll = (): void => {\n state.folded = false\n state.tags.forEach((tag) => {\n tag.app.update({ folded: state.folded })\n })\n }\n\n /** 收起所有标签\n * 1. 收起所有展开的标签\n * 2. 新标签会默认收起\n */\n const foldAll = (): void => {\n state.folded = true\n state.tags.forEach((tag) => {\n tag.app.update({ folded: state.folded })\n })\n }\n\n /** 展开单个标签\n * @param id {Number | String} 标签ID\n */\n const unfold = (id: PanoSpatialTagPluginId): void => {\n state.tags.forEach((tag) => {\n if (tag.id === id) tag.app.update({ folded: false })\n })\n }\n\n /** 收起单个标签\n * @param id {Number | String} 标签ID\n */\n const fold = (id: PanoSpatialTagPluginId): void => {\n state.tags.forEach((tag) => {\n if (tag.id === id) tag.app.update({ folded: true })\n })\n }\n\n const onResize = (): void => {\n five.once('renderFrame', updateOrigins)\n }\n\n const onModelLoaded = (): void => {\n if (!wrapper) wrapper = five.getElement().parentElement\n if (wrapper) wrapper.appendChild(container)\n state.forbidden = false\n centerY = five.model.bounding.getCenter(new THREE.Vector3()).y\n updateTags()\n five.on('panoWillArrive', onPanoWillArrive)\n five.on('panoArrived', onPanoArrived)\n five.on('modeChange', onModeChange)\n five.on('cameraUpdate', onCameraUpdate)\n }\n\n const dispose = (): void => {\n blurImage = null\n css3DRender.dispose()\n\n origins.destroy()\n state.tags.forEach((tag) => {\n tag.app.destroy()\n tag = null\n })\n state.origins = []\n state.tags = []\n\n five.off('modelLoaded', onModelLoaded)\n five.off('renderFrame', updateOrigins)\n five.off('panoWillArrive', onPanoWillArrive)\n five.off('panoArrived', onPanoArrived)\n five.off('modeChange', onModeChange)\n five.off('cameraUpdate', onCameraUpdate)\n five.off('dispose', dispose)\n window.removeEventListener('resize', onResize, false)\n }\n\n window.addEventListener('resize', onResize, false)\n\n if (five?.model?.loaded) onModelLoaded()\n else five.once('modelLoaded', onModelLoaded)\n\n five.on('dispose', dispose)\n\n return {\n load,\n setIntersectObjects,\n unfoldAll,\n foldAll,\n unfold,\n fold,\n enable,\n disable,\n hooks,\n dispose,\n }\n}\n\nexport default PanoSpatialTagPlugin\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pano-spatial-tag-B7Gxn3BS.js","names":["root","$.from_html","$.prop","$.comment","$.first_child","$.index","$.set_class","$.get","$.set_style","$.untrack","$.from_html","$.prop","$.mutable_source","$.get","$.child","$.sibling","$.set","$.set_class","PANO_SPATIAL_TAG_BLUR_IMAGE","template_effect","child","event","append","comment","onDestroy","from_html","set","afterUpdate","untrack","mutable_source","sibling","each","set_attribute","writable","push","onMount","bind_this","set_class","prop","init","next","set_style","first_child","pop","reset","mountComponent","index","html","get","THREE","currentTarget","root$1","Origins","$$props","origins","handleClick","id","fragment","node","i","classes","styles","origin","$$anchor","root","Tag","upsideDown","content","contentZoom","lineWidthZoom","lineHeightZoom","destroying","folded","dispose","events","hooks","blurImageUrl","contentWidth","contentHeight","contentDom","show","timeoutId","handleClickContent","eventsName","classNames","key","unsubscribe","str","currentId","date","div","div_1","div_2","div_3","div_4","$$value","pluginStyle","REGEX_STRING","ENCODE_HTML_RULES","TEMPLATE_MODES","stripSemi","render","Template","template","data","text","src","escapeFn","markup","c","matches","closing","line","pat","result","arr","firstPos","MESH_SIZE","RAY_TOLERANT_DISTANCE","BLUR_IMAGE_URL","PanoSpatialTagPlugin","wrapper","params","centerY","wait","maxNumberOnScreen","minRad","nearTolerance","upsideHeight","minDistance","maxDistance","css3DRender","CSS3DRenderPlugin","five","container","Subscribe","blurImage","state","onCameraUpdate","updateOrigins","userAction","updateTags","onPanoArrived","onPanoWillArrive","rotateRad","pose","camera","frustum","projScreenMatrix","distance","tag","v","onModeChange","mode","Five","direction","mouse","front","newTags","getNewTags","frontTagLength","points","point","_mouse","clientWidth","clientHeight","newPoint","l","anotherPoint","raycaster","intersect","plane","normal","position","right","square","app","replacement","load","setIntersectObjects","objects","enable","disable","unfoldAll","foldAll","unfold","fold","onResize","onModelLoaded"],"sources":["../../src/PanoSpatialTagPlugin/store.ts","../../src/PanoSpatialTagPlugin/Components/origins.svelte","../../src/PanoSpatialTagPlugin/Components/tag.svelte","../../src/PanoSpatialTagPlugin/style.ts","../../src/shared-utils/tinyEJSrender.ts","../../src/PanoSpatialTagPlugin/Plugin.ts"],"sourcesContent":["import { writable } from 'svelte/store'\n\nexport const currentTarget = writable(null)","<script lang=\"ts\">\n import { currentTarget } from '../store'\n import type { PanoSpatialTagPluginOriginElement, PanoSpatialTagPluginId } from '../typings'\n export let origins: Array<PanoSpatialTagPluginOriginElement>\n\n const handleClick = (id: PanoSpatialTagPluginId): void => {\n currentTarget.update((): string => `${id}-PanoSpatialTagPlugin-${Date.now()}`)\n }\n</script>\n\n{#each origins as origin}\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <i \n class:PanoSpatialTagPlugin__tag-origin={true}\n class:PanoSpatialTagPlugin__tag-origin-destroy={origin.destroying}\n style:top=\"{origin.top}%\"\n style:left=\"{origin.left}%\"\n style:visibility=\"{origin.front ? 'visible' : 'hidden'}\"\n on:click=\"{() => handleClick(origin.id)}\"\n />\n{/each}\n\n<style>\n .PanoSpatialTagPlugin__tag-origin {\n position: absolute;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background: #fff;\n box-shadow: 0 0 .6rem #fff;\n transform: translate(-50%, -50%) scale(1);\n transform-origin: center center;\n animation: PanoSpatialTagPlugin__tag-origin 1.2s forwards;\n pointer-events: auto;\n }\n\n .PanoSpatialTagPlugin__tag-origin:after {\n content: '';\n position: absolute;\n top: 50%;\n height: 50%;\n width: 2rem;\n height: 2rem;\n transform: translate(-50%, -50%);\n }\n\n .PanoSpatialTagPlugin__tag-origin-destroy {\n transform: translate(-50%, -50%) scale(0.6);\n animation: PanoSpatialTagPlugin__tag-origin-destroy 1.2s forwards .7s;\n }\n\n @keyframes PanoSpatialTagPlugin__tag-origin {\n 0% { transform: translate(-50%, -50%) scale(1); opacity: 0; }\n 100% { transform: translate(-50%, -50%) scale(0.6); opacity: 1 }\n }\n\n @keyframes PanoSpatialTagPlugin__tag-origin-destroy {\n 0% { transform: translate(-50%, -50%) scale(0.6); opacity: 1; }\n 10% { transform: translate(-50%, -50%) scale(1); opacity: 0.9; }\n 100% { transform: translate(-50%, -50%) scale(1); opacity: 0; }\n }\n</style>\n","<script lang=\"ts\">\n import type { PanoSpatialTagPluginContentEvent } from '../typings'\n import { onMount, onDestroy, afterUpdate } from 'svelte'\n import { currentTarget } from '../store'\n export let id: number | string\n export let upsideDown: boolean\n export let content: string\n export let contentZoom: number\n export let lineWidthZoom: number\n export let lineHeightZoom: number\n export let destroying = false\n export let folded: boolean\n export let dispose: () => void\n export let events: PanoSpatialTagPluginContentEvent\n export let hooks\n export let blurImageUrl: string\n\n let contentWidth = 0\n let contentHeight = 0\n let contentDom: HTMLElement\n let show: boolean\n let timeoutId = setTimeout(() => {\n if (!folded) show = true\n timeoutId = undefined\n }, 100)\n\n const handleClickContent = (event) => {\n const eventsName = Object.keys(events)\n let node = event.target\n while (node) {\n const classNames = node.getAttribute('class')\n if (!classNames) {\n node = node.parentNode\n continue\n }\n if (classNames.includes('PanoSpatialTagPlugin__tag-content')) {\n node = null\n break\n }\n eventsName.forEach((key) => {\n if (classNames.includes(key)) events[key](id)\n })\n node = node.parentNode\n }\n }\n\n onMount(() => {\n hooks.emit('initTag', { id })\n })\n\n const unsubscribe = currentTarget.subscribe((str: string) => {\n if (str === null) return\n const [currentId, date] = str.split('-PanoSpatialTagPlugin-')\n if (id === currentId) {\n hooks.emit('clickOrigin', { id, show })\n if (!timeoutId) {\n show = folded\n folded = !folded\n timeoutId = setTimeout(() => {\n timeoutId = undefined\n }, 1500)\n }\n }\n })\n\n afterUpdate(() => {\n contentWidth = contentDom.offsetWidth\n contentHeight = contentDom.offsetHeight\n if (timeoutId) return\n show = !folded\n })\n\n onDestroy(() => {\n hooks.emit('destroyTag', { id })\n unsubscribe()\n dispose()\n })\n</script>\n\n<div\n class:PanoSpatialTagPlugin__tag-x={true}\n class:PanoSpatialTagPlugin__tag-upside-down={upsideDown}\n class:PanoSpatialTagPlugin__tag-show={show}\n class:PanoSpatialTagPlugin__tag-hide={show === false || destroying}\n id={'PanoSpatialTagPlugin__' + id}\n style=\"height: {20 * lineHeightZoom}rem\"\n>\n <div\n class=\"PanoSpatialTagPlugin__tag-shadow\"\n style=\"transform: translate({(contentWidth / 2) * contentZoom * 3}px, {(contentHeight / 2) *\n (upsideDown ? -1 : 1) *\n contentZoom *\n 3}px) scale({1 / contentZoom}); background-image: url('{blurImageUrl}');\"\n />\n <div class=\"PanoSpatialTagPlugin__tag-line\">\n <i class=\"PanoSpatialTagPlugin__tag-flagpole\" style=\"width: {lineWidthZoom}rem;\" />\n <i class=\"PanoSpatialTagPlugin__tag-line1\" />\n <i class=\"PanoSpatialTagPlugin__tag-line2\" />\n </div>\n <div class=\"PanoSpatialTagPlugin__tag-animate\" style=\"transform: scale({contentZoom * 3})\">\n <!-- svelte-ignore a11y-click-events-have-key-events -->\n <div class=\"PanoSpatialTagPlugin__tag-content\" on:click={handleClickContent} bind:this={contentDom}>\n {@html content}\n </div>\n </div>\n</div>\n\n<style>\n .PanoSpatialTagPlugin__tag-x {\n position: absolute;\n top: 0;\n left: 0;\n display: block;\n white-space: nowrap;\n box-sizing: border-box;\n width: 25rem;\n height: 14rem;\n color: #fff;\n transform: translate(0, -100%);\n transition: height 0.5s linear;\n }\n\n .PanoSpatialTagPlugin__tag-shadow {\n content: '';\n position: absolute;\n width: 30rem;\n height: 30rem;\n top: -15rem;\n left: -15rem;\n z-index: -1;\n opacity: 0;\n transition: opacity 0.8s 0.6s;\n background-size: 30rem 30rem;\n }\n\n .PanoSpatialTagPlugin__tag-line {\n position: absolute;\n left: -1rem;\n width: 2rem;\n height: 100%;\n overflow: hidden;\n }\n\n .PanoSpatialTagPlugin__tag-flagpole {\n position: absolute;\n top: 0;\n left: 1rem;\n height: calc(100% - 1.5rem);\n width: 0.15rem;\n background: linear-gradient(to bottom, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.1));\n box-shadow: 0 0.1rem 0.5rem rgba(0, 0, 0, 0.2);\n opacity: 0;\n transform: translate(-50%, 60%) scaleY(0);\n transition: transform 0.4s cubic-bezier(0.44, 0.44, 0.74, 0.98), opacity 0.4s cubic-bezier(0.44, 0.44, 0.74, 0.98), width 0.5s linear,\n height 0.5s linear;\n transform-origin: center bottom;\n }\n\n .PanoSpatialTagPlugin__tag-line1 {\n position: absolute;\n top: 0;\n left: 0.3rem;\n height: 1.8rem;\n width: 0.1rem;\n background: #fff;\n opacity: 0;\n transform: translate(-50%, 200%) scaleY(0);\n transform-origin: center top;\n }\n\n .PanoSpatialTagPlugin__tag-line2 {\n position: absolute;\n top: 0;\n left: 0.5rem;\n height: 1.8rem;\n width: 0.1rem;\n background: #fff;\n opacity: 0;\n transform: translate(-50%, 200%) scaleY(0);\n transform-origin: center top;\n }\n\n .PanoSpatialTagPlugin__tag-show .PanoSpatialTagPlugin__tag-line1 {\n animation: PanoSpatialTagPlugin__tag-line1 linear 0.5s forwards 0.45s;\n }\n\n .PanoSpatialTagPlugin__tag-show .PanoSpatialTagPlugin__tag-line2 {\n animation: PanoSpatialTagPlugin__tag-line2 linear 0.5s forwards 0.65s;\n }\n\n .PanoSpatialTagPlugin__tag-x.PanoSpatialTagPlugin__tag-upside-down {\n transform: translate(0, 0);\n }\n\n .PanoSpatialTagPlugin__tag-upside-down .PanoSpatialTagPlugin__tag-line {\n transform: scaleY(-1);\n }\n\n .PanoSpatialTagPlugin__tag-animate {\n position: relative;\n height: 100%;\n overflow: hidden;\n transform-origin: left top;\n transition: transform 0.5s linear;\n }\n\n .PanoSpatialTagPlugin__tag-upside-down .PanoSpatialTagPlugin__tag-animate {\n transform-origin: left bottom;\n }\n\n .PanoSpatialTagPlugin__tag-content {\n position: absolute;\n display: inline-block;\n transform: translate(-100%, 0);\n transition: transform 0.9s cubic-bezier(0, 0.65, 0.16, 1.08) 0.6s;\n padding-left: 0.5rem;\n font-size: 1rem;\n }\n\n .PanoSpatialTagPlugin__tag-upside-down .PanoSpatialTagPlugin__tag-content {\n bottom: 0;\n }\n\n .PanoSpatialTagPlugin__tag-show .PanoSpatialTagPlugin__tag-flagpole {\n opacity: 1;\n transform: translate(-50%, 0) scaleY(1);\n }\n\n .PanoSpatialTagPlugin__tag-upside-down .PanoSpatialTagPlugin__tag-shadow {\n top: unset;\n bottom: -15rem;\n }\n\n .PanoSpatialTagPlugin__tag-show .PanoSpatialTagPlugin__tag-shadow {\n opacity: 0.32;\n }\n\n .PanoSpatialTagPlugin__tag-show .PanoSpatialTagPlugin__tag-content {\n transform: translate(0, 0);\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-flagpole {\n opacity: 0;\n transform: translate(-50%, 60%) scaleY(0);\n transition: transform 0.5s 0.55s, opacity 0.4s 0.55s;\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-shadow {\n opacity: 0;\n transition: opacity 0.8s;\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-content {\n transform: translate(-100%, 0);\n transition: transform 0.6s cubic-bezier(0.53, 0.06, 0.88, 0.59);\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-content * {\n pointer-events: none;\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-line1 {\n opacity: 0.5;\n transform: translate(-50%, 10%) scaleY(0);\n animation: PanoSpatialTagPlugin__tag-line1-hide linear 0.28s forwards 0.3s;\n }\n\n .PanoSpatialTagPlugin__tag-hide .PanoSpatialTagPlugin__tag-line2 {\n opacity: 0.5;\n transform: translate(-50%, 0) scaleY(0);\n animation: PanoSpatialTagPlugin__tag-line2-hide linear 0.28s forwards 0.45s;\n }\n\n @keyframes PanoSpatialTagPlugin__tag-line1 {\n 0% {\n opacity: 0;\n transform: translate(-50%, 250%) scaleY(1);\n }\n 50% {\n opacity: 0.5;\n transform: translate(-50%, 135%) scaleY(1);\n }\n 100% {\n opacity: 0.5;\n transform: translate(-50%, 20%) scaleY(0);\n }\n }\n\n @keyframes PanoSpatialTagPlugin__tag-line2 {\n 0% {\n opacity: 0;\n transform: translate(-50%, 250%) scaleY(1);\n }\n 50% {\n opacity: 0.5;\n transform: translate(-50%, 125%) scaleY(1);\n }\n 100% {\n opacity: 0.5;\n transform: translate(-50%, 0) scaleY(0);\n }\n }\n\n @keyframes PanoSpatialTagPlugin__tag-line1-hide {\n 0% {\n opacity: 0.5;\n transform: translate(-50%, 10%) scaleY(0);\n }\n 50% {\n opacity: 0.2;\n transform: translate(-50%, 105%) scaleY(1);\n }\n 100% {\n opacity: 0;\n transform: translate(-50%, 200%) scaleY(0);\n }\n }\n\n @keyframes PanoSpatialTagPlugin__tag-line2-hide {\n 0% {\n opacity: 0.5;\n transform: translate(-50%, 0) scaleY(0);\n }\n 50% {\n opacity: 0.2;\n transform: translate(-50%, 100%) scaleY(1);\n }\n 100% {\n opacity: 0;\n transform: translate(-50%, 200%) scaleY(0);\n }\n }\n</style>\n","export const pluginStyle: Partial<CSSStyleDeclaration> = {\n position: 'absolute',\n top: '0px',\n left: '0px',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n}","const DEFAULT_OPEN_DELIMITER = '<'\nconst DEFAULT_CLOSE_DELIMITER = '>'\nconst DEFAULT_DELIMITER = '%'\nconst DEFAULT_LOCALS_NAME = 'locals'\nconst REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)'\nconst ENCODE_HTML_RULES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}\nconst TEMPLATE_MODES = {\n EVAL: 'eval',\n ESCAPED: 'escaped',\n RAW: 'raw',\n COMMENT: 'comment',\n LITERAL: 'literal',\n}\n\ninterface RenderData {\n\t[key: string]: string\n}\n\nfunction stripSemi (str: string): string {\n return str.replace(/;(\\s*$)/, '$1')\n}\n\nexport default function render (template: string, data: RenderData): string {\n\tconst templ = new Template(template)\n return templ.compileFunction()(data)\n}\n\nclass Template {\n\tprivate templateText: string\n\tprivate mode = null\n\tprivate truncate = false\n\tprivate currentLine = 1\n\tprivate source = ''\n\tprivate regex = new RegExp(REGEX_STRING)\n\n\tconstructor (text) {\n\t this.templateText = text\n\t}\n\n\tpublic compileFunction () {\n let src\n const prepended = \n \t' var __output = \"\";\\n' +\n ' function __append(s) { if (s !== undefined && s !== null) __output += s }\\n' +\n \t' with (' + DEFAULT_LOCALS_NAME + ' || {}) {' + '\\n'\n const appended = ' }' + '\\n return __output;' + '\\n'\n const escapeFn = function (markup) {\n\t\t return markup == undefined\n\t\t ? ''\n\t\t : String(markup)\n\t\t .replace(/[&<>'\"]/g, function (c) {\n\t\t\t return ENCODE_HTML_RULES[c] || c\n\t\t\t})\n\t\t}\n\n this._generateSource()\n this.source = prepended + this.source + appended\n\n src = this.source\n src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\\n' + src\n\n return new Function(DEFAULT_LOCALS_NAME + ', escapeFn', src)\n }\n\n private _generateSource () {\n this.templateText =\n this.templateText.replace(/[ \\t]*<%_/gm, '<%_').replace(/_%>[ \\t]*/gm, '_%>')\n\n const matches = this._parseTemplateText()\n const d = DEFAULT_DELIMITER\n const o = DEFAULT_OPEN_DELIMITER\n const c = DEFAULT_CLOSE_DELIMITER\n\n if (matches && matches.length) {\n matches.forEach((line, index) => {\n let closing\n if ( line.indexOf(o + d) === 0\n && line.indexOf(o + d + d) !== 0) {\n closing = matches[index + 2]\n if (!(closing == d + c || closing == '-' + d + c || closing == '_' + d + c)) {\n throw new Error('Could not find matching close tag for \"' + line + '\".')\n }\n }\n this._scanLine(line)\n })\n }\n }\n\n private _parseTemplateText () {\n let str = this.templateText\n const pat = this.regex\n let result = pat.exec(str)\n const arr = []\n let firstPos\n\n while (result) {\n firstPos = result.index\n\n if (firstPos !== 0) {\n arr.push(str.substring(0, firstPos))\n str = str.slice(firstPos)\n }\n\n arr.push(result[0])\n str = str.slice(result[0].length)\n result = pat.exec(str)\n }\n\n if (str) {\n arr.push(str)\n }\n\n return arr\n }\n\n private _addOutput (line) {\n if (this.truncate) {\n line = line.replace(/^(?:\\r\\n|\\r|\\n)/, '')\n this.truncate = false\n }\n if (!line) return line\n\n line = line.replace(/\\\\/g, '\\\\\\\\')\n line = line.replace(/\\n/g, '\\\\n')\n line = line.replace(/\\r/g, '\\\\r')\n line = line.replace(/\"/g, '\\\\\"')\n this.source += ' ; __append(\"' + line + '\")' + '\\n'\n }\n\n private _scanLine (line) {\n const d = DEFAULT_DELIMITER\n const o = DEFAULT_OPEN_DELIMITER\n const c = DEFAULT_CLOSE_DELIMITER\n const newLineCount = line.split('\\n').length - 1\n\n switch (line) {\n\t case o + d:\n\t case o + d + '_':\n\t this.mode = TEMPLATE_MODES.EVAL\n\t break\n\t case o + d + '=':\n\t this.mode = TEMPLATE_MODES.ESCAPED\n\t break\n\t case o + d + '-':\n\t this.mode = TEMPLATE_MODES.RAW\n\t break\n\t case o + d + '#':\n\t this.mode = TEMPLATE_MODES.COMMENT\n\t break\n\t case o + d + d:\n\t this.mode = TEMPLATE_MODES.LITERAL\n\t this.source += ' ; __append(\"' + line.replace(o + d + d, o + d) + '\")' + '\\n'\n\t break\n\t case d + d + c:\n\t this.mode = TEMPLATE_MODES.LITERAL\n\t this.source += ' ; __append(\"' + line.replace(d + d + c, d + c) + '\")' + '\\n'\n\t break\n\t case d + c:\n\t case '-' + d + c:\n\t case '_' + d + c:\n\t if (this.mode == TEMPLATE_MODES.LITERAL) {\n\t this._addOutput(line)\n\t }\n\n\t this.mode = null\n\t this.truncate = line.indexOf('-') === 0 || line.indexOf('_') === 0\n\t break\n\t default:\n\t if (this.mode) {\n\t switch (this.mode) {\n\t case TEMPLATE_MODES.EVAL:\n\t case TEMPLATE_MODES.ESCAPED:\n\t case TEMPLATE_MODES.RAW:\n\t if (line.lastIndexOf('//') > line.lastIndexOf('\\n')) {\n\t line += '\\n'\n\t }\n\t }\n\t switch (this.mode) {\n\t case TEMPLATE_MODES.EVAL:\n\t this.source += ' ; ' + line + '\\n'\n\t break\n\t case TEMPLATE_MODES.ESCAPED:\n\t this.source += ' ; __append(escapeFn(' + stripSemi(line) + '))' + '\\n'\n\t break\n\t case TEMPLATE_MODES.RAW:\n\t this.source += ' ; __append(' + stripSemi(line) + ')' + '\\n'\n\t break\n\t case TEMPLATE_MODES.COMMENT:\n\t break\n\t case TEMPLATE_MODES.LITERAL:\n\t this._addOutput(line)\n\t break\n\t }\n\t }\n\t else {\n\t this._addOutput(line)\n\t }\n }\n }\n}\n","import * as THREE from 'three/webgpu'\nimport type { FivePlugin } from '@realsee/five-webgpu'\nimport { Five, Subscribe } from '@realsee/five-webgpu'\nimport CSS3DRenderPlugin from '../CSS3DRenderPlugin'\nimport Origins from './Components/origins.svelte'\nimport Tag from './Components/tag.svelte'\nimport { pluginStyle } from './style'\nimport render from '../shared-utils/tinyEJSrender'\nimport { PANO_SPATIAL_TAG_BLUR_IMAGE } from '../shared-utils'\n\nimport { mountComponent, type MountedComponent } from '../shared-utils/svelte/component.svelte'\nimport type {\n PanoSpatialTagPluginId,\n PanoSpatialTagPluginDataElement,\n PanoSpatialTagPluginTagElement,\n PanoSpatialTagPluginOriginElement,\n PanoSpatialTagPluginPointElement,\n PanoSpatialTagPluginContentReplacement,\n PanoSpatialTagPluginContentEvent,\n} from './typings'\n\nexport interface PanoSpatialTagPluginData {\n // 插件load数据\n folded?: boolean // 标签初始是否收起\n enabled?: boolean // 插件初始是否启用\n points: Array<PanoSpatialTagPluginDataElement>\n template: string // dom模板\n events?: PanoSpatialTagPluginContentEvent\n render?: (template: string, replacement: PanoSpatialTagPluginContentReplacement) => string // 模板数据映射函数\n}\n\nexport interface PanoSpatialTagPluginParameterType {\n container?: Element // 标签容器\n wait?: number // debounce延迟\n maxNumberOnScreen?: number // 屏幕内标签最大展示数量\n minRad?: number // 视角和标签平面最小夹角\n nearTolerance?: number // 标签映射到屏幕之间最小间距\n upsideHeight?: number // 标签反向高度\n minDistance?: number // 标签最小距离,单位米\n maxDistance?: number // 标签最小距离,单位米\n // foldPercent?: number // 标签折叠屏幕百分比\n}\n\nexport interface PanoSpatialTagPluginExportType {\n load: (data: PanoSpatialTagPluginData) => void\n unfoldAll: () => void\n foldAll: () => void\n unfold: (id: PanoSpatialTagPluginId) => void\n fold: (id: PanoSpatialTagPluginId) => void\n enable: () => void\n disable: () => void\n dispose: () => void\n}\n\ninterface PanoSpatialTagPluginState {\n timeoutId?: NodeJS.Timeout\n points: Array<PanoSpatialTagPluginPointElement>\n origins: Array<PanoSpatialTagPluginOriginElement>\n tags: Array<PanoSpatialTagPluginTagElement>\n render: (template: string, replacement: PanoSpatialTagPluginContentReplacement) => string\n events: PanoSpatialTagPluginContentEvent\n intersectObjects?: Array<any> // 碰撞检测objects\n template: string\n folded: boolean // 标签初始收起展开状态\n enabled: boolean // 用户控制启用禁止状态\n forbidden: boolean // 插件控制启用禁止状态\n}\n\nconst MESH_SIZE = 0.001\nconst RAY_TOLERANT_DISTANCE = 0.01\nconst BLUR_IMAGE_URL = PANO_SPATIAL_TAG_BLUR_IMAGE\n\n/**\n * 空间游走标签插件\n */\nexport const PanoSpatialTagPlugin: FivePlugin<PanoSpatialTagPluginParameterType, PanoSpatialTagPluginExportType> = (five: Five, params) => {\n let wrapper = params?.container\n let centerY = 1.4\n const wait = params?.wait ?? 200\n const maxNumberOnScreen = params?.maxNumberOnScreen ?? 3\n const minRad = params?.minRad ?? Math.PI / 4\n const nearTolerance = params?.nearTolerance ?? 100\n const upsideHeight = params?.upsideHeight ?? 1.6\n const minDistance = params?.minDistance ?? 1.2\n const maxDistance = params?.maxDistance ?? 3.5\n // const foldPercent = params?.foldPercent ?? 20\n\n const css3DRender = CSS3DRenderPlugin(five)\n const container = document.createElement('div')\n container.classList.add('PanoSpatialTagPlugin')\n Object.assign(container.style, pluginStyle)\n\n const hooks = new Subscribe()\n\n let blurImage = new Image()\n blurImage.src = BLUR_IMAGE_URL\n\n const state: PanoSpatialTagPluginState = {\n points: [],\n origins: [],\n tags: [],\n template: '',\n events: {},\n render,\n folded: false,\n enabled: true,\n forbidden: true,\n }\n\n const origins = mountComponent(Origins, container, { origins: state.origins })\n\n const onCameraUpdate = (pose, userAction): void => {\n updateOrigins()\n if (userAction) {\n updateTags()\n // state.tags.forEach(tag => {\n // const mouse = tag.position.clone().project(five.camera)\n // const top = ( - mouse.y + 1 ) / 2 * 100\n // })\n }\n }\n\n const onPanoArrived = () => {\n if (state.forbidden) {\n state.forbidden = false\n updateTags()\n }\n }\n\n const onPanoWillArrive = (pano, pose): void => {\n if (state.tags.length === 0) return\n const rotateRad = pose.longitude - five.state.longitude\n const camera = five.camera.clone()\n camera.position.copy(pose.offset)\n camera.rotateOnWorldAxis(new THREE.Vector3(0, 1, 0), rotateRad)\n camera.updateProjectionMatrix()\n camera.updateMatrixWorld(true)\n const frustum = new THREE.Frustum()\n const projScreenMatrix = new THREE.Matrix4()\n projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse)\n frustum.setFromProjectionMatrix(projScreenMatrix, camera.coordinateSystem)\n\n state.tags.forEach((tag) => {\n const distance = camera.position.clone().setY(centerY).distanceTo(tag.position)\n if (distance < minDistance || distance > maxDistance) return (tag.destroying = true)\n if (!frustum.containsPoint(tag.position)) return (tag.destroying = true)\n const v = tag.position.clone().sub(camera.position).setY(0)\n if (v.angleTo(tag.normal) > Math.PI / 2 - minRad && v.angleTo(tag.normal) < Math.PI / 2 + minRad) return (tag.destroying = true)\n })\n state.tags.forEach((tag) => {\n if (tag.destroying) {\n tag.app.update({\n contentZoom: 0.1 + camera.position.distanceTo(tag.position) / maxDistance,\n lineWidthZoom: 0.38 * (0.01 + camera.position.distanceTo(tag.position) / maxDistance),\n destroying: tag.destroying,\n })\n } else {\n tag.app.update({\n lineWidthZoom: 0.38 * (0.01 + camera.position.distanceTo(tag.position) / maxDistance),\n lineHeightZoom: 0.4 + ((camera.position.distanceTo(tag.position) - minDistance) / maxDistance) * 0.6,\n contentZoom: 0.1 + camera.position.distanceTo(tag.position) / maxDistance,\n })\n }\n })\n setTimeout(() => {\n state.tags.forEach((tag) => {\n if (tag.destroying) {\n tag.app.destroy()\n tag = null\n }\n })\n state.tags = state.tags.filter((tag) => !tag.destroying)\n updateOrigins()\n }, 1900)\n }\n\n const onModeChange = (mode): void => {\n if (mode !== Five.Mode.Panorama && !state.forbidden) {\n origins.update({ origins: [] })\n state.tags.forEach((tag) => {\n tag.app.destroy()\n tag = null\n })\n state.origins = []\n state.tags = []\n state.forbidden = true\n }\n }\n\n const updateOrigins = (): void => {\n if (state.forbidden || !state.enabled) return\n const camera = five.camera\n const direction = camera.getWorldDirection(new THREE.Vector3())\n state.origins = state.tags.map((tag) => {\n const mouse = tag.position.clone().project(camera)\n const front = tag.position.clone().sub(camera.position).setY(0).angleTo(direction.setY(0)) < Math.PI / 2\n return {\n id: tag.id,\n front,\n left: ((mouse.x + 1) / 2) * 100,\n top: ((-mouse.y + 1) / 2) * 100,\n destroying: tag.destroying,\n }\n })\n origins.update({ origins: state.origins })\n }\n\n const updateTags = (): void => {\n if (state.forbidden || !state.enabled) return\n if (state.timeoutId) clearTimeout(state.timeoutId)\n state.timeoutId = setTimeout(() => {\n state.timeoutId = undefined\n const newTags = getNewTags()\n if (newTags.length) {\n state.tags = state.tags.concat(newTags)\n updateOrigins()\n }\n }, wait)\n }\n\n const getNewTags = (): Array<PanoSpatialTagPluginTagElement> => {\n const { clientWidth, clientHeight } = five.getElement()\n const newTags = []\n const camera = five.camera\n const frustum = new THREE.Frustum()\n const projScreenMatrix = new THREE.Matrix4()\n const direction = camera.getWorldDirection(new THREE.Vector3())\n projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse)\n frustum.setFromProjectionMatrix(projScreenMatrix, camera.coordinateSystem)\n const frontTagLength = state.tags.filter((tag) => frustum.containsPoint(tag.position) && !tag.destroying).length\n\n const points: Array<PanoSpatialTagPluginPointElement> = state.points.reduce((result, point) => {\n if (state.tags.find((tag) => point.id === tag.id && !tag.destroying)) return result\n const distance = camera.position.clone().setY(centerY).distanceTo(point.position)\n if (distance < minDistance || distance > maxDistance) return result\n if (!frustum.containsPoint(point.position)) return result\n\n const v = point.position.clone().sub(camera.position).setY(0)\n\n if (v.angleTo(point.normal) > Math.PI / 2 - minRad && v.angleTo(point.normal) < Math.PI / 2 + minRad) return result\n\n const mouse = point.position.clone().project(camera)\n if (\n !state.tags.every((tag) => {\n if (tag.position.clone().sub(camera.position).setY(0).angleTo(direction.setY(0)) > Math.PI / 2) return true\n const _mouse = tag.position.clone().project(camera)\n return (\n Math.sqrt(Math.pow(((mouse.x - _mouse.x) / 2) * clientWidth, 2) + Math.pow(((mouse.y - _mouse.y) / 2) * clientHeight, 2)) >\n nearTolerance\n )\n })\n )\n return result\n\n const newPoint: PanoSpatialTagPluginPointElement = {\n id: point.id,\n position: point.position,\n normal: point.normal,\n replacement: point.replacement,\n weight: point.weight,\n distance,\n }\n\n let index: number\n for (let i = 0, l = result.length; i < l; i++) {\n const anotherPoint = result[i]\n if (newPoint.weight > anotherPoint.weight) {\n index = i\n break\n }\n if (newPoint.distance < anotherPoint.distance) {\n index = i\n break\n }\n }\n if (index !== undefined) result.splice(index, 0, newPoint)\n else result.push(newPoint)\n\n return result\n }, [])\n\n for (let i = 0, l = points.length; i < l; i++) {\n if (frontTagLength + newTags.length >= maxNumberOnScreen) break\n const point = points[i]\n if (newTags.find((tag) => point.id === tag.id)) continue\n\n const mouse = point.position.clone().project(camera)\n if (\n !state.tags.concat(newTags).every((tag) => {\n if (tag.position.clone().sub(camera.position).setY(0).angleTo(direction.setY(0)) > Math.PI / 2) return true\n const _mouse = tag.position.clone().project(camera)\n return (\n Math.sqrt(Math.pow(((mouse.x - _mouse.x) / 2) * clientWidth, 2) + Math.pow(((mouse.y - _mouse.y) / 2) * clientHeight, 2)) >\n nearTolerance\n )\n })\n )\n continue\n\n const raycaster = new THREE.Raycaster(\n camera.position.clone().setY(centerY),\n point.position.clone().sub(camera.position.clone().setY(centerY)).normalize(),\n 0,\n point.distance + RAY_TOLERANT_DISTANCE,\n )\n const [intersect] = state.intersectObjects\n ? raycaster.intersectObjects(state.intersectObjects, true)\n : five.model.loaded\n ? five.model.intersectRaycaster(raycaster)\n : raycaster.intersectObjects(five.model.children, true)\n if (!intersect) continue\n if (point.distance - intersect.distance < RAY_TOLERANT_DISTANCE) {\n const { position, normal, id, replacement } = point\n const plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, position)\n const right = position.clone().sub(camera.position).cross(new THREE.Vector3(0, 1, 0)).setLength(MESH_SIZE)\n const square = [\n position.clone(),\n position.clone().add(right),\n position.clone().add(new THREE.Vector3(0, MESH_SIZE, 0)).add(right),\n position.clone().add(new THREE.Vector3(0, MESH_SIZE, 0)),\n ].map((v) => plane.projectPoint(v, new THREE.Vector3()))\n\n const { container, dispose } = css3DRender.create3DDomContainer(square) || {}\n const app = mountComponent(Tag, container, {\n id,\n content: state.render(state.template, replacement),\n lineWidthZoom: 0.38 * (0.01 + camera.position.distanceTo(position) / maxDistance),\n lineHeightZoom: 0.4 + ((camera.position.distanceTo(position) - minDistance) / maxDistance) * 0.6,\n contentZoom: 0.1 + camera.position.distanceTo(position) / maxDistance,\n upsideDown: position.y > upsideHeight,\n folded: state.folded,\n events: state.events,\n hooks,\n dispose,\n blurImageUrl: BLUR_IMAGE_URL,\n })\n newTags.push({\n position,\n normal,\n id,\n app,\n })\n }\n }\n\n return newTags\n }\n\n /** 标签数据加载\n * @param data.points {Array} 标签数据\n * @param data.enabled {Boolean} 插件是否启用\n * @param data.folded {Boolean} 标签是否默认展开\n */\n const load = (data: PanoSpatialTagPluginData): void => {\n state.points = data.points.map((point) => {\n return {\n id: point.id,\n position: new THREE.Vector3().fromArray(point.position),\n normal: new THREE.Vector3().fromArray(point.normal),\n replacement: point.replacement ?? {},\n weight: point.weight ?? -1,\n }\n })\n if (data.render) state.render = data.render\n if (data.template) state.template = data.template\n if (data.events) state.events = data.events\n if (data.enabled === false) state.enabled = data.enabled\n if (data.folded === true) state.folded = data.folded\n }\n\n /** 设置射线碰撞检测objects\n *\n */\n const setIntersectObjects = (objects: Array<any>): void => {\n state.intersectObjects = objects\n updateTags()\n }\n\n /** 标签启用\n * 启用插件并重新计算展示标签\n */\n const enable = (): void => {\n state.enabled = true\n updateTags()\n }\n\n /** 插件禁用\n * 1. 禁用同时会清除已展示的标签\n * 2. 再次启用时会重新计算展示标签\n */\n const disable = (): void => {\n state.enabled = false\n origins.update({ origins: [] })\n state.tags.forEach((tag) => {\n tag.app.destroy()\n tag = null\n })\n state.origins = []\n state.tags = []\n }\n\n /** 展开所有标签\n * 1. 展开所有收起的标签\n * 2. 新标签会默认展开\n */\n const unfoldAll = (): void => {\n state.folded = false\n state.tags.forEach((tag) => {\n tag.app.update({ folded: state.folded })\n })\n }\n\n /** 收起所有标签\n * 1. 收起所有展开的标签\n * 2. 新标签会默认收起\n */\n const foldAll = (): void => {\n state.folded = true\n state.tags.forEach((tag) => {\n tag.app.update({ folded: state.folded })\n })\n }\n\n /** 展开单个标签\n * @param id {Number | String} 标签ID\n */\n const unfold = (id: PanoSpatialTagPluginId): void => {\n state.tags.forEach((tag) => {\n if (tag.id === id) tag.app.update({ folded: false })\n })\n }\n\n /** 收起单个标签\n * @param id {Number | String} 标签ID\n */\n const fold = (id: PanoSpatialTagPluginId): void => {\n state.tags.forEach((tag) => {\n if (tag.id === id) tag.app.update({ folded: true })\n })\n }\n\n const onResize = (): void => {\n five.once('renderFrame', updateOrigins)\n }\n\n const onModelLoaded = (): void => {\n if (!wrapper) wrapper = five.getElement().parentElement\n if (wrapper) wrapper.appendChild(container)\n state.forbidden = false\n centerY = five.model.bounding.getCenter(new THREE.Vector3()).y\n updateTags()\n five.on('panoWillArrive', onPanoWillArrive)\n five.on('panoArrived', onPanoArrived)\n five.on('modeChange', onModeChange)\n five.on('cameraUpdate', onCameraUpdate)\n }\n\n const dispose = (): void => {\n blurImage = null\n css3DRender.dispose()\n\n origins.destroy()\n state.tags.forEach((tag) => {\n tag.app.destroy()\n tag = null\n })\n state.origins = []\n state.tags = []\n\n five.off('modelLoaded', onModelLoaded)\n five.off('renderFrame', updateOrigins)\n five.off('panoWillArrive', onPanoWillArrive)\n five.off('panoArrived', onPanoArrived)\n five.off('modeChange', onModeChange)\n five.off('cameraUpdate', onCameraUpdate)\n five.off('dispose', dispose)\n window.removeEventListener('resize', onResize, false)\n }\n\n window.addEventListener('resize', onResize, false)\n\n if (five?.model?.loaded) onModelLoaded()\n else five.once('modelLoaded', onModelLoaded)\n\n five.on('dispose', dispose)\n\n return {\n load,\n setIntersectObjects,\n unfoldAll,\n foldAll,\n unfold,\n fold,\n enable,\n disable,\n hooks,\n dispose,\n }\n}\n\nexport default PanoSpatialTagPlugin\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as e } from "./controller-
|
|
1
|
+
import { t as e } from "./controller-DIDtFrBE.js";
|
|
2
2
|
//#region src/PanoTagPlugin/index.ts
|
|
3
3
|
var t = (t, n) => new e(t, n);
|
|
4
4
|
//#endregion
|
|
5
5
|
export { t };
|
|
6
6
|
|
|
7
|
-
//# sourceMappingURL=pano-tag-
|
|
7
|
+
//# sourceMappingURL=pano-tag-Bchz-jED.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pano-tag-
|
|
1
|
+
{"version":3,"file":"pano-tag-Bchz-jED.js","names":["PanoTagPluginController","PanoTagPlugin","five","params"],"sources":["../../src/PanoTagPlugin/index.ts"],"sourcesContent":["import type { Five } from '@realsee/five-webgpu'\nimport PanoTagPluginController from './controller'\nexport { pluginFlag, PanoTagPluginController } from './controller'\nexport { defaultGlobalConfig } from './typings'\nexport type { ContentTypeMap, TagContentType, TagHooks, State, TemporaryState, TagClickParams, PluginEventMap, TagEvents, TagCacheInterface, MediaStore, PointTagInstance, Tags, Tag, TagId, ArrayPosition, Position, PanoIndex, WorkCode, ModelId, MinMax, StickType, BoxPosition, BoxTag, PolygonPosition, PolygonTag, MaskPosition, MaskTag, TagIconAnimationConfig, TagIconUrl, TagStyle, TagGLTFObject, ElementRenderer, TagRendererMap, TagContentTypeMapping, TagObjectGroup, TagGLTFObjectGroup, ImagePlaneGroup, AudioAppearance, ContentTypeConfigKeySplit, ContentTypeConfigKey, PickTagContentTypeInContentTypeConfigKey, TagConfigByKey, Point2DTag, Point3DTag, PlaneTag, TagState, MediaData, ObjectFit, ContentTypeMapInterface, TagPlacement, TagConfig, TagInstance } from './typings'\n\nexport type PanoTagPluginExportInterface = InstanceType<typeof PanoTagPluginController>\nexport type PanoTagPluginParamsInterface = ConstructorParameters<typeof PanoTagPluginController>[1]\n\nexport const PanoTagPlugin = (five: Five, params?: PanoTagPluginParamsInterface) => new PanoTagPluginController(five, params)\n\nexport default PanoTagPlugin\n"],"mappings":";;AASA,IAAaC,KAAiB,GAAY,MAA0C,IAAID,EAAwBE,GAAMC,CAAM"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as e } from "./rolldown-runtime-B0aSnxlc.js";
|
|
2
|
-
import {
|
|
2
|
+
import { i as t } from "./animationFrame-CacKXN8l.js";
|
|
3
3
|
import { t as n } from "./animation-D9rPUNWJ.js";
|
|
4
|
-
import { t as r } from "./BasePlugin-
|
|
4
|
+
import { t as r } from "./BasePlugin-DC5m72La.js";
|
|
5
5
|
import { t as i } from "./loadVideoTexture-CWoiMWRg.js";
|
|
6
6
|
import * as a from "three/webgpu";
|
|
7
7
|
import { Mesh as o, MeshBasicNodeMaterial as s, Quaternion as c, SphereGeometry as l, Vector3 as u } from "three/webgpu";
|
|
@@ -362,4 +362,4 @@ var f = class {
|
|
|
362
362
|
//#endregion
|
|
363
363
|
export { m as n, h as t };
|
|
364
364
|
|
|
365
|
-
//# sourceMappingURL=pano-video-
|
|
365
|
+
//# sourceMappingURL=pano-video-BufYQMqo.js.map
|