iflow-engine-base-3d 3.12.12 → 3.12.13

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.
@@ -1,5 +1,5 @@
1
1
  import { S as Ei, G as de, P as wt, O as Ee, M as z, V as d, e as Qe, T as Ln, C as Cs, W as Si, a as As, b as We, N as Pi, c as Es, d as it, f as G, Q as De, E as kn, R as fe, g as Ti, h as Bn, B as R, i as Ii, A as Ss, j as U, k as O, I as W, l as ti, m as ii, n as zn, o as Rn, L as Gt, p as Ps, q as Ts, r as Is, s as Vi, D as ae, t as Ui, u as _s, F as Ds, v as me, w as On, x as Fn, y as _i, z as Ls, H as Nn, J as ge, K as ks, U as xt, X as Bs, Y as zs, Z as Rs, _ as Os, $ as Ge, a0 as Wt, a1 as Di, a2 as Z, a3 as le, a4 as Fs, a5 as Ke, a6 as Kt, a7 as qt, a8 as Ne, a9 as Pt, aa as Ns, ab as Hn, ac as gi, ad as at, ae as Hs, af as rt, ag as Vs, ah as Us, ai as Vn, aj as jt, ak as bt, al as Yt, am as Gs, an as Gi, ao as lt, ap as Ct, aq as At, ar as Ws, as as Ks, at as Wi, au as qs, av as js, aw as Ys, ax as Xs, ay as Qs, az as $s, aA as Zs, aB as Js, aC as Ki, aD as eo, aE as to, aF as fi, aG as qe, aH as io, aI as no, aJ as so, aK as oo, aL as ro, aM as ao, aN as lo } from "./three-vendor-CKzI3UEa.js";
2
- import { W as pe, C as co, L as mt, B as qi, g as Le, a as ho, E as uo, r as po } from "./sdk-runtime-DBCTqOHl.js";
2
+ import { W as pe, C as co, L as mt, B as qi, g as Le, a as ho, E as uo, r as po } from "./sdk-runtime-BnAzWb8I.js";
3
3
  import { r as ee, g as mo } from "./sdk-assets-DWhsnp7n.js";
4
4
  import { a as Xt, J as yi, c as go, b as fo, P as ni, q as yo, k as Mo, n as ji, E as Yi, S as vo } from "./sdk-vendor-DYgn7sFs.js";
5
5
  class wo {
@@ -11968,7 +11968,8 @@ class dl {
11968
11968
  e.matrixAutoUpdate = !1, e.matrix.copy(t), e.matrixWorldNeedsUpdate = !0, e.updateMatrixWorld(!0);
11969
11969
  }
11970
11970
  }
11971
- class ul {
11971
+ const ul = "path-roaming-animation";
11972
+ class pl {
11972
11973
  engine;
11973
11974
  /** 点位列表 */
11974
11975
  points = [];
@@ -12085,7 +12086,7 @@ class ul {
12085
12086
  * @returns 是否开始播放
12086
12087
  */
12087
12088
  play(e = {}) {
12088
- return this.points.length < 2 ? (console.warn("PathRoaming: 至少需要2个点位才能播放"), !1) : (this.isPlaying && this.stop(), this.isPlaying = !0, this.playOptions = {
12089
+ return this.points.length < 2 ? (console.warn("PathRoaming: 至少需要2个点位才能播放"), !1) : (this.isPlaying && this.stop(), this.isPlaying = !0, this.setFrameRateExempt(!0), this.playOptions = {
12089
12090
  duration: 3e3,
12090
12091
  // 默认每个过渡3秒
12091
12092
  loop: !1,
@@ -12100,7 +12101,7 @@ class ul {
12100
12101
  * @returns 是否开始播放
12101
12102
  */
12102
12103
  playRange(e, t, i = {}) {
12103
- return e < 0 || t >= this.points.length || e >= t ? (console.warn("PathRoaming: 无效的索引范围"), !1) : this.points.length < 2 ? (console.warn("PathRoaming: 至少需要2个点位才能播放"), !1) : (this.isPlaying && this.stop(), this.isPlaying = !0, this.playOptions = {
12104
+ return e < 0 || t >= this.points.length || e >= t ? (console.warn("PathRoaming: 无效的索引范围"), !1) : this.points.length < 2 ? (console.warn("PathRoaming: 至少需要2个点位才能播放"), !1) : (this.isPlaying && this.stop(), this.isPlaying = !0, this.setFrameRateExempt(!0), this.playOptions = {
12104
12105
  duration: 3e3,
12105
12106
  loop: !1,
12106
12107
  ...i
@@ -12110,13 +12111,13 @@ class ul {
12110
12111
  * 停止播放
12111
12112
  */
12112
12113
  stop() {
12113
- this.isPlaying = !1, this.animationFrameId !== null && (cancelAnimationFrame(this.animationFrameId), this.animationFrameId = null), this.stayTimerId !== null && (clearTimeout(this.stayTimerId), this.stayTimerId = null), this.engine.controlModule.active();
12114
+ this.isPlaying = !1, this.setFrameRateExempt(!1), this.animationFrameId !== null && (cancelAnimationFrame(this.animationFrameId), this.animationFrameId = null), this.stayTimerId !== null && (clearTimeout(this.stayTimerId), this.stayTimerId = null), this.engine.controlModule.active();
12114
12115
  }
12115
12116
  /**
12116
12117
  * 暂停播放(保留当前位置)
12117
12118
  */
12118
12119
  pause() {
12119
- this.isPlaying && (this.isPlaying = !1, this.animationFrameId !== null && (cancelAnimationFrame(this.animationFrameId), this.animationFrameId = null), this.stayTimerId !== null && (clearTimeout(this.stayTimerId), this.stayTimerId = null));
12120
+ this.isPlaying && (this.isPlaying = !1, this.setFrameRateExempt(!1), this.animationFrameId !== null && (cancelAnimationFrame(this.animationFrameId), this.animationFrameId = null), this.stayTimerId !== null && (clearTimeout(this.stayTimerId), this.stayTimerId = null));
12120
12121
  }
12121
12122
  /**
12122
12123
  * 获取是否正在播放
@@ -12201,6 +12202,10 @@ class ul {
12201
12202
  easeInOutCubic(e) {
12202
12203
  return e < 0.5 ? 4 * e * e * e : 1 - Math.pow(-2 * e + 2, 3) / 2;
12203
12204
  }
12205
+ /** 播放期间解除引擎空闲限帧,结束后仅释放本模块自己的豁免原因。 */
12206
+ setFrameRateExempt(e) {
12207
+ this.engine.setIdleFrameRateExempt?.(ul, e);
12208
+ }
12204
12209
  /**
12205
12210
  * 销毁管理器
12206
12211
  */
@@ -12208,7 +12213,7 @@ class ul {
12208
12213
  this.stop(), this.points = [], this.playOptions = {};
12209
12214
  }
12210
12215
  }
12211
- class pl {
12216
+ class ml {
12212
12217
  engine;
12213
12218
  miniMapCamera = null;
12214
12219
  miniMapRenderer = null;
@@ -12669,7 +12674,7 @@ class pl {
12669
12674
  this.miniMapContainer && (this.miniMapContainer.removeEventListener("wheel", this.onWheel), this.miniMapContainer.removeEventListener("mousedown", this.onMouseDown), this.miniMapContainer.removeEventListener("mousemove", this.onMouseMove), this.miniMapContainer.removeEventListener("mouseup", this.onMouseUp), this.miniMapContainer.removeEventListener("pointerdown", this.onMouseDown), this.miniMapContainer.removeEventListener("pointermove", this.onMouseMove), this.miniMapContainer.removeEventListener("pointerup", this.onMouseUp), this.miniMapContainer.removeEventListener("pointercancel", this.onMouseUp), this.miniMapContainer.removeEventListener("mouseenter", this.onMouseEnter), this.miniMapContainer.removeEventListener("mouseleave", this.onMouseLeave)), window.removeEventListener("mousemove", this.onMouseMove), window.removeEventListener("mouseup", this.onMouseUp), window.removeEventListener("pointermove", this.onMouseMove), window.removeEventListener("pointerup", this.onMouseUp), window.removeEventListener("pointercancel", this.onMouseUp), window.removeEventListener("resize", this.onWindowResize), this.sizeToggleButton?.removeEventListener("click", this.onSizeToggleClick), this.resizeHandle?.removeEventListener("mousedown", this.onResizeHandleMouseDown), this.resizeHandle?.removeEventListener("pointerdown", this.onResizeHandleMouseDown), this.modelSelect?.removeEventListener("change", this.onModelChange), this.levelSelect?.removeEventListener("change", this.onLevelChange), this.engine.events?.off?.(this.loadingCompletedEventName, this.onLoadingCompleted), this.miniMapRenderer && (this.miniMapRenderer.dispose(), this.miniMapRenderer = null), this.miniMapContainer && (this.miniMapContainer.remove(), this.miniMapContainer = null), this.miniMapCamera = null, this.overlayCtx = null, this.overlayCanvas = null, this.levelToolbar = null, this.sizeToggleButton = null, this.resizeHandle = null, this.modelSelect = null, this.levelSelect = null, this.levelModels = [], this.levelDataSignature = "", this.selectedModelUrl = null;
12670
12675
  }
12671
12676
  }
12672
- class ml {
12677
+ class gl {
12673
12678
  engine;
12674
12679
  constructor(e) {
12675
12680
  this.engine = e;
@@ -12966,7 +12971,7 @@ class ml {
12966
12971
  return Math.abs(s.dot(e)) < 0.999 ? s : new d(1, 0, 0);
12967
12972
  }
12968
12973
  }
12969
- class gl {
12974
+ class fl {
12970
12975
  engine;
12971
12976
  constructor(e) {
12972
12977
  }
@@ -12974,7 +12979,7 @@ class gl {
12974
12979
  }
12975
12980
  }
12976
12981
  const An = "bim-engine:link-element-2d3d-state", En = "link-element-2d3d";
12977
- class fl {
12982
+ class yl {
12978
12983
  engine;
12979
12984
  constructor(e) {
12980
12985
  this.engine = e, this.active();
@@ -13008,7 +13013,7 @@ class fl {
13008
13013
  this.engine?.setIdleFrameRateExempt?.(En, t);
13009
13014
  };
13010
13015
  }
13011
- class yl {
13016
+ class Ml {
13012
13017
  engine;
13013
13018
  constructor(e) {
13014
13019
  this.engine = e, this.active();
@@ -13062,7 +13067,7 @@ const st = {
13062
13067
  EncodingComplete: "encoding-complete",
13063
13068
  EncodingError: "encoding-error"
13064
13069
  };
13065
- class Ml {
13070
+ class vl {
13066
13071
  engine;
13067
13072
  apiKey;
13068
13073
  baseURL = "https://api.deepseek.com";
@@ -13250,12 +13255,12 @@ class Ml {
13250
13255
  }
13251
13256
  }
13252
13257
  }
13253
- const di = 1 / 0.3048, vl = 1, wl = 1.8, Sn = /* @__PURE__ */ new Set([
13258
+ const di = 1 / 0.3048, wl = 1, xl = 1.8, Sn = /* @__PURE__ */ new Set([
13254
13259
  "dynamic-elevation-bar-area",
13255
13260
  "dynamic-elevation-guest-area",
13256
13261
  "dynamic-elevation-door-head-area"
13257
- ]), xl = ["台面"], bl = ["咖啡机"], Cl = ["门店编号"], Al = ["发光logo", "发光Logo"];
13258
- class El {
13262
+ ]), bl = ["台面"], Cl = ["咖啡机"], Al = ["门店编号"], El = ["发光logo", "发光Logo"];
13263
+ class Sl {
13259
13264
  engine;
13260
13265
  constructor(e) {
13261
13266
  this.engine = e;
@@ -13289,7 +13294,7 @@ class El {
13289
13294
  generate(e) {
13290
13295
  if (!(e?.nodesMap instanceof Map) || e.nodesMap.size === 0)
13291
13296
  return [];
13292
- const t = this.collectMergedWorldBoxByKeywords(e, xl), i = this.collectMergedWorldBoxByKeywords(e, bl), n = this.collectMergedWorldBoxByKeywords(e, Cl), s = this.collectWorldBoxesByKeywords(e, Al), o = [];
13297
+ const t = this.collectMergedWorldBoxByKeywords(e, bl), i = this.collectMergedWorldBoxByKeywords(e, Cl), n = this.collectMergedWorldBoxByKeywords(e, Al), s = this.collectWorldBoxesByKeywords(e, El), o = [];
13293
13298
  if (t && i && n) {
13294
13299
  const r = this.createBarAreaView(t, i, n), a = this.createGuestAreaView(t, i, n);
13295
13300
  r && o.push(r), a && o.push(a);
@@ -13380,8 +13385,8 @@ class El {
13380
13385
  * 相机始终在观察面外侧偏移固定距离,且高度统一锁定为 1.8 米。
13381
13386
  */
13382
13387
  createCameraPosition(e, t) {
13383
- const i = e.clone().add(t.clone().multiplyScalar(vl));
13384
- return i.y = wl, i;
13388
+ const i = e.clone().add(t.clone().multiplyScalar(wl));
13389
+ return i.y = xl, i;
13385
13390
  }
13386
13391
  /**
13387
13392
  * 将 three.js 空间中的观察参数转换成运行时立面视图结构。
@@ -13561,7 +13566,7 @@ const zt = {
13561
13566
  floorPlan: "楼层平面",
13562
13567
  elevation: "立面视图",
13563
13568
  section: "剖面视图"
13564
- }, Sl = {
13569
+ }, Pl = {
13565
13570
  ceilingPlan: [zt.ceilingPlan, "天花"],
13566
13571
  floorPlan: [zt.floorPlan, "楼层"],
13567
13572
  elevation: [zt.elevation, "立面"],
@@ -13573,7 +13578,7 @@ class Hi {
13573
13578
  dynamicElevationViewGenerator;
13574
13579
  /** 管理模型原生视图与运行时动态视图的统一入口。 */
13575
13580
  constructor(e) {
13576
- this.engine = e, this.dynamicElevationViewGenerator = new El(e);
13581
+ this.engine = e, this.dynamicElevationViewGenerator = new Sl(e);
13577
13582
  }
13578
13583
  /** 汇总所有已加载模型的视图树数据。 */
13579
13584
  getAllViewTreeData() {
@@ -13725,7 +13730,7 @@ class Hi {
13725
13730
  const t = String(e ?? "").replace(/\s+/g, "");
13726
13731
  if (!t)
13727
13732
  return "unknown";
13728
- const i = Object.entries(Sl);
13733
+ const i = Object.entries(Pl);
13729
13734
  for (const [n, s] of i)
13730
13735
  if (s.some((o) => t.includes(o)))
13731
13736
  return n;
@@ -13762,7 +13767,7 @@ class Hi {
13762
13767
  !t || t.isEmpty?.() || this.engine.viewCube?.zoomToModel?.(t, e);
13763
13768
  }
13764
13769
  }
13765
- class Pl {
13770
+ class Tl {
13766
13771
  constructor(e) {
13767
13772
  }
13768
13773
  /** 3D 独立包不支持加载 2D 视图。 */
@@ -13773,16 +13778,16 @@ class Pl {
13773
13778
  removeSectionPlane() {
13774
13779
  }
13775
13780
  }
13776
- function Tl(l, e, t = "bim-snapshot.png") {
13781
+ function Il(l, e, t = "bim-snapshot.png") {
13777
13782
  const i = l?.renderer, n = i?.domElement;
13778
13783
  if (!i || !n || !e)
13779
13784
  return null;
13780
13785
  const s = n.width || n.clientWidth, o = n.height || n.clientHeight;
13781
13786
  if (s <= 0 || o <= 0)
13782
13787
  return null;
13783
- let r = Il(n, s, o);
13784
- if (!_l(r)) {
13785
- const p = Dl(l, s, o);
13788
+ let r = _l(n, s, o);
13789
+ if (!Dl(r)) {
13790
+ const p = Ll(l, s, o);
13786
13791
  p && (r = p);
13787
13792
  }
13788
13793
  const a = document.createElement("canvas");
@@ -13794,13 +13799,13 @@ function Tl(l, e, t = "bim-snapshot.png") {
13794
13799
  const h = a.toDataURL("image/png"), u = document.createElement("a");
13795
13800
  return u.href = h, u.download = t.toLowerCase().endsWith(".png") ? t : `${t}.png`, u.click(), h;
13796
13801
  }
13797
- function Il(l, e, t) {
13802
+ function _l(l, e, t) {
13798
13803
  const i = document.createElement("canvas");
13799
13804
  i.width = e, i.height = t;
13800
13805
  const n = i.getContext("2d");
13801
13806
  return n && n.drawImage(l, 0, 0, e, t), i;
13802
13807
  }
13803
- function _l(l) {
13808
+ function Dl(l) {
13804
13809
  const e = l.getContext("2d");
13805
13810
  if (!e || l.width <= 0 || l.height <= 0)
13806
13811
  return !1;
@@ -13813,7 +13818,7 @@ function _l(l) {
13813
13818
  }
13814
13819
  return !1;
13815
13820
  }
13816
- function Dl(l, e, t) {
13821
+ function Ll(l, e, t) {
13817
13822
  const i = l?.renderer, n = l?.scene, s = l?.camera;
13818
13823
  if (!i || !n || !s)
13819
13824
  return null;
@@ -13827,14 +13832,14 @@ function Dl(l, e, t) {
13827
13832
  try {
13828
13833
  i.xr && (i.xr.enabled = !1), i.autoClear = !0, i.setRenderTarget(o), i.clear(!0, !0, !0), i.render(n, s);
13829
13834
  const h = new Uint8Array(e * t * 4);
13830
- return i.readRenderTargetPixels(o, 0, 0, e, t, h), Ll(h, e, t);
13835
+ return i.readRenderTargetPixels(o, 0, 0, e, t, h), kl(h, e, t);
13831
13836
  } catch {
13832
13837
  return null;
13833
13838
  } finally {
13834
13839
  i.setRenderTarget(r), i.autoClear = a, i.xr && (i.xr.enabled = c), o.dispose();
13835
13840
  }
13836
13841
  }
13837
- function Ll(l, e, t) {
13842
+ function kl(l, e, t) {
13838
13843
  const i = document.createElement("canvas");
13839
13844
  i.width = e, i.height = t;
13840
13845
  const n = i.getContext("2d");
@@ -13848,7 +13853,7 @@ function Ll(l, e, t) {
13848
13853
  }
13849
13854
  return n.putImageData(s, 0, 0), i;
13850
13855
  }
13851
- const kl = [
13856
+ const Bl = [
13852
13857
  "#ffffff",
13853
13858
  "#000000",
13854
13859
  "#ff4d4f",
@@ -13859,7 +13864,7 @@ const kl = [
13859
13864
  "#1677ff",
13860
13865
  "#722ed1",
13861
13866
  "#eb2f96"
13862
- ], Bl = {
13867
+ ], zl = {
13863
13868
  none: ee("/assets/icon/选择.svg", import.meta.url),
13864
13869
  line: ee("/assets/icon/线.svg", import.meta.url),
13865
13870
  arrow: ee("/assets/icon/箭头.svg", import.meta.url),
@@ -13867,7 +13872,7 @@ const kl = [
13867
13872
  circle: ee("/assets/icon/圆形.svg", import.meta.url),
13868
13873
  text: ee("/assets/icon/文字.svg", import.meta.url),
13869
13874
  cloudline: ee("/assets/icon/云线.svg", import.meta.url)
13870
- }, zl = ee("/assets/icon/测距.svg", import.meta.url), Rl = ee("/assets/icon/截图.svg", import.meta.url), Ol = ee("/assets/icon/线宽.svg", import.meta.url), Fl = ee("/assets/icon/字号.svg", import.meta.url), Nl = `data:image/svg+xml;utf8,${encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2l4 8-4 12-4-12 4-8z" fill="#1677ff"/><circle cx="12" cy="10" r="2.5" fill="#fff"/></svg>')}`, Hl = [
13875
+ }, Rl = ee("/assets/icon/测距.svg", import.meta.url), Ol = ee("/assets/icon/截图.svg", import.meta.url), Fl = ee("/assets/icon/线宽.svg", import.meta.url), Nl = ee("/assets/icon/字号.svg", import.meta.url), Hl = `data:image/svg+xml;utf8,${encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2l4 8-4 12-4-12 4-8z" fill="#1677ff"/><circle cx="12" cy="10" r="2.5" fill="#fff"/></svg>')}`, Vl = [
13871
13876
  { type: "distance", label: "距离" },
13872
13877
  { type: "clearDistance", label: "净距" },
13873
13878
  { type: "clearHeight", label: "净高" },
@@ -13876,7 +13881,7 @@ const kl = [
13876
13881
  { type: "angle", label: "角度" },
13877
13882
  { type: "area", label: "面积" },
13878
13883
  { type: "slope", label: "坡度" }
13879
- ], Vl = {
13884
+ ], Ul = {
13880
13885
  distance: ee("/assets/icon/距离.svg", import.meta.url),
13881
13886
  clearDistance: ee("/assets/icon/净距.svg", import.meta.url),
13882
13887
  clearHeight: ee("/assets/icon/净高.svg", import.meta.url),
@@ -13886,7 +13891,7 @@ const kl = [
13886
13891
  area: ee("/assets/icon/面积.svg", import.meta.url),
13887
13892
  slope: ee("/assets/icon/坡度.svg", import.meta.url)
13888
13893
  };
13889
- class Ul {
13894
+ class Gl {
13890
13895
  constructor(e, t) {
13891
13896
  this.handlers = e, this.root = document.createElement("div"), this.root.style.position = "absolute", this.root.style.top = "8px", this.root.style.left = "50%", this.root.style.transform = "translateX(-50%)", this.root.style.display = "none", this.root.style.padding = "6px", this.root.style.background = "#ffffff", this.root.style.border = "1px solid #d9d9d9", this.root.style.borderRadius = "8px", this.root.style.pointerEvents = "auto", this.root.style.userSelect = "none", this.root.style.boxShadow = "0 4px 14px rgba(0, 0, 0, 0.12)", this.root.style.zIndex = "1300", this.root.style.overflow = "visible", this.editPanel = document.createElement("div"), this.editPanel.style.display = "flex", this.editPanel.style.flexDirection = "column", this.editPanel.style.gap = "6px", this.viewPanel = document.createElement("div"), this.viewPanel.style.display = "none", this.viewPanel.style.alignItems = "center", this.viewPanel.style.gap = "6px";
13892
13897
  const i = document.createElement("div");
@@ -13899,7 +13904,7 @@ class Ul {
13899
13904
  { type: "text", label: "文字" },
13900
13905
  { type: "cloudline", label: "云线" }
13901
13906
  ].forEach((f) => {
13902
- const w = this.createIconButton(f.label, Bl[f.type]);
13907
+ const w = this.createIconButton(f.label, zl[f.type]);
13903
13908
  w.onclick = () => this.handlers.onDrawTypeChange(f.type), this.drawButtons[f.type] = w, i.appendChild(w);
13904
13909
  });
13905
13910
  const s = document.createElement("div");
@@ -13909,23 +13914,23 @@ class Ul {
13909
13914
  this.updateColorControl(this.colorInput.value), this.handlers.onColorChange(this.colorInput.value), this.setColorPresetVisible(!1);
13910
13915
  }, s.appendChild(this.colorInput), this.colorPresetPanel = document.createElement("div"), this.colorPresetPanel.style.position = "absolute", this.colorPresetPanel.style.top = "30px", this.colorPresetPanel.style.left = "0", this.colorPresetPanel.style.display = "none", this.colorPresetPanel.style.padding = "8px", this.colorPresetPanel.style.background = "#ffffff", this.colorPresetPanel.style.border = "1px solid #d9d9d9", this.colorPresetPanel.style.borderRadius = "6px", this.colorPresetPanel.style.boxShadow = "0 6px 18px rgba(0, 0, 0, 0.14)", this.colorPresetPanel.style.zIndex = "20", this.colorPresetPanel.style.width = "152px";
13911
13916
  const r = document.createElement("div");
13912
- r.style.display = "grid", r.style.gridTemplateColumns = "repeat(5, 1fr)", r.style.gap = "6px", kl.forEach((f) => {
13917
+ r.style.display = "grid", r.style.gridTemplateColumns = "repeat(5, 1fr)", r.style.gap = "6px", Bl.forEach((f) => {
13913
13918
  const w = document.createElement("button");
13914
13919
  w.type = "button", w.title = f, w.style.width = "22px", w.style.height = "22px", w.style.padding = "0", w.style.border = "1px solid #d9d9d9", w.style.borderRadius = "4px", w.style.background = f, w.style.cursor = "pointer", w.onclick = () => {
13915
13920
  this.updateColorControl(f), this.handlers.onColorChange(f), this.setColorPresetVisible(!1);
13916
13921
  }, r.appendChild(w);
13917
13922
  }), this.colorPresetPanel.appendChild(r);
13918
13923
  const a = document.createElement("button");
13919
- a.type = "button", a.textContent = "自定义", a.style.marginTop = "8px", a.style.width = "100%", a.style.height = "26px", a.style.border = "1px solid #d9d9d9", a.style.borderRadius = "4px", a.style.background = "#ffffff", a.style.color = "#333333", a.style.cursor = "pointer", a.onclick = () => this.openNativeColorPicker(), this.colorPresetPanel.appendChild(a), s.appendChild(this.colorPresetPanel), this.updateColorControl(t.stroke), i.appendChild(this.createField("", s)), this.strokeWidthInput = document.createElement("input"), this.strokeWidthInput.type = "number", this.strokeWidthInput.min = "1", this.strokeWidthInput.max = "20", this.strokeWidthInput.step = "1", this.strokeWidthInput.value = String(t.strokeWidth), this.strokeWidthInput.style.width = "46px", this.strokeWidthInput.oninput = () => this.handlers.onStrokeWidthChange(this.strokeWidthInput.value), i.appendChild(this.createField("", this.strokeWidthInput, Ol, "线宽")), this.fontSizeInput = document.createElement("input"), this.fontSizeInput.type = "number", this.fontSizeInput.min = "10", this.fontSizeInput.max = "96", this.fontSizeInput.step = "1", this.fontSizeInput.value = String(t.fontSize), this.fontSizeInput.style.width = "46px", this.fontSizeInput.oninput = () => this.handlers.onFontSizeChange(this.fontSizeInput.value), i.appendChild(this.createField("", this.fontSizeInput, Fl, "字号")), this.distanceButton = this.createIconButton("测量", zl), this.distanceButton.onclick = () => this.handlers.onMeasureToggle(), i.appendChild(this.distanceButton);
13920
- const c = this.createIconButton("截图", Rl);
13924
+ a.type = "button", a.textContent = "自定义", a.style.marginTop = "8px", a.style.width = "100%", a.style.height = "26px", a.style.border = "1px solid #d9d9d9", a.style.borderRadius = "4px", a.style.background = "#ffffff", a.style.color = "#333333", a.style.cursor = "pointer", a.onclick = () => this.openNativeColorPicker(), this.colorPresetPanel.appendChild(a), s.appendChild(this.colorPresetPanel), this.updateColorControl(t.stroke), i.appendChild(this.createField("", s)), this.strokeWidthInput = document.createElement("input"), this.strokeWidthInput.type = "number", this.strokeWidthInput.min = "1", this.strokeWidthInput.max = "20", this.strokeWidthInput.step = "1", this.strokeWidthInput.value = String(t.strokeWidth), this.strokeWidthInput.style.width = "46px", this.strokeWidthInput.oninput = () => this.handlers.onStrokeWidthChange(this.strokeWidthInput.value), i.appendChild(this.createField("", this.strokeWidthInput, Fl, "线宽")), this.fontSizeInput = document.createElement("input"), this.fontSizeInput.type = "number", this.fontSizeInput.min = "10", this.fontSizeInput.max = "96", this.fontSizeInput.step = "1", this.fontSizeInput.value = String(t.fontSize), this.fontSizeInput.style.width = "46px", this.fontSizeInput.oninput = () => this.handlers.onFontSizeChange(this.fontSizeInput.value), i.appendChild(this.createField("", this.fontSizeInput, Nl, "字号")), this.distanceButton = this.createIconButton("测量", Rl), this.distanceButton.onclick = () => this.handlers.onMeasureToggle(), i.appendChild(this.distanceButton);
13925
+ const c = this.createIconButton("截图", Ol);
13921
13926
  c.onclick = () => this.handlers.onScreenshot(), i.appendChild(c);
13922
- const h = this.createIconButton("捕捉点", Nl);
13927
+ const h = this.createIconButton("捕捉点", Hl);
13923
13928
  h.onclick = () => this.handlers.onPickPoint(), i.appendChild(h);
13924
13929
  const u = this.createTextButton("×", "取消");
13925
13930
  u.onclick = () => this.handlers.onCancel(), u.style.background = "#ff4d4f", u.style.borderColor = "#ff4d4f", u.style.color = "#ffffff", i.appendChild(u);
13926
13931
  const p = this.createTextButton("✔", "确定");
13927
- p.onclick = () => this.handlers.onConfirm(), p.style.background = "#52c41a", p.style.borderColor = "#52c41a", p.style.color = "#ffffff", i.appendChild(p), this.measureSubPanel = document.createElement("div"), this.measureSubPanel.style.display = "none", this.measureSubPanel.style.alignItems = "center", this.measureSubPanel.style.gap = "6px", this.measureSubPanel.style.flexWrap = "wrap", this.measureSubPanel.style.paddingTop = "2px", Hl.forEach((f) => {
13928
- const w = this.createSmallIconButton(f.label, Vl[f.type]);
13932
+ p.onclick = () => this.handlers.onConfirm(), p.style.background = "#52c41a", p.style.borderColor = "#52c41a", p.style.color = "#ffffff", i.appendChild(p), this.measureSubPanel = document.createElement("div"), this.measureSubPanel.style.display = "none", this.measureSubPanel.style.alignItems = "center", this.measureSubPanel.style.gap = "6px", this.measureSubPanel.style.flexWrap = "wrap", this.measureSubPanel.style.paddingTop = "2px", Vl.forEach((f) => {
13933
+ const w = this.createSmallIconButton(f.label, Ul[f.type]);
13929
13934
  w.onclick = () => this.handlers.onMeasureTypeChange(f.type), this.measureTypeButtons[f.type] = w, this.measureSubPanel.appendChild(w);
13930
13935
  }), this.editPanel.appendChild(i), this.editPanel.appendChild(this.measureSubPanel);
13931
13936
  const g = this.createTextButton("关闭", "关闭");
@@ -14050,7 +14055,7 @@ class Ul {
14050
14055
  return i.type = "button", i.title = t, i.textContent = e, i.style.width = "28px", i.style.height = "28px", i.style.padding = "0 10px", i.style.border = "1px solid #d9d9d9", i.style.borderRadius = "4px", i.style.background = "#ffffff", i.style.color = "#333333", i.style.fontSize = "13px", i.style.lineHeight = "1", i.style.cursor = "pointer", i;
14051
14056
  }
14052
14057
  }
14053
- class Gl {
14058
+ class Wl {
14054
14059
  engine;
14055
14060
  wrapper;
14056
14061
  canvasEl;
@@ -14089,7 +14094,7 @@ class Gl {
14089
14094
  const t = this.engine.container;
14090
14095
  if (!t)
14091
14096
  throw new Error("FabricDraw: engine container not found.");
14092
- this.wrapper = document.createElement("div"), this.wrapper.className = "fabric-draw-layer", this.wrapper.style.position = "absolute", this.wrapper.style.left = "0", this.wrapper.style.top = "0", this.wrapper.style.right = "0", this.wrapper.style.bottom = "0", this.wrapper.style.pointerEvents = "none", this.canvasEl = document.createElement("canvas"), this.canvasEl.style.width = "100%", this.canvasEl.style.height = "100%", this.wrapper.appendChild(this.canvasEl), this.toolbar = new Ul({
14097
+ this.wrapper = document.createElement("div"), this.wrapper.className = "fabric-draw-layer", this.wrapper.style.position = "absolute", this.wrapper.style.left = "0", this.wrapper.style.top = "0", this.wrapper.style.right = "0", this.wrapper.style.bottom = "0", this.wrapper.style.pointerEvents = "none", this.canvasEl = document.createElement("canvas"), this.canvasEl.style.width = "100%", this.canvasEl.style.height = "100%", this.wrapper.appendChild(this.canvasEl), this.toolbar = new Gl({
14093
14098
  onDrawTypeChange: (n) => this.setDrawType(n),
14094
14099
  onMeasureToggle: () => this.toggleMeasurePanel(),
14095
14100
  onMeasureTypeChange: (n) => this.activateDistanceMeasure(n),
@@ -14238,7 +14243,7 @@ class Gl {
14238
14243
  * 鎴浘淇濆瓨锛堟ā鍨?Fabric鎵规敞鍚堟垚锛夈€? */
14239
14244
  saveScreenshot(e = "bim-snapshot.png") {
14240
14245
  const t = this.canvas.lowerCanvasEl;
14241
- return t ? Tl(this.engine, t, e) : null;
14246
+ return t ? Il(this.engine, t, e) : null;
14242
14247
  }
14243
14248
  /**
14244
14249
  * 鍚屾鐢诲竷灏哄銆? */
@@ -14722,7 +14727,7 @@ class Gl {
14722
14727
  return JSON.parse(JSON.stringify(e));
14723
14728
  }
14724
14729
  }
14725
- class Wl {
14730
+ class Kl {
14726
14731
  engine;
14727
14732
  capturePoint = null;
14728
14733
  labelPrefix = "drawing-pin-label-";
@@ -15172,7 +15177,7 @@ class Wl {
15172
15177
  return e;
15173
15178
  }
15174
15179
  }
15175
- const ui = "bim-engine:model-link-3d", Kl = "default-model-link-3d-group", Pn = "model-link-3d", Tn = {
15180
+ const ui = "bim-engine:model-link-3d", ql = "default-model-link-3d-group", Pn = "model-link-3d", Tn = {
15176
15181
  enabled: !1,
15177
15182
  highlight: !0,
15178
15183
  visibility: !0,
@@ -15181,7 +15186,7 @@ const ui = "bim-engine:model-link-3d", Kl = "default-model-link-3d-group", Pn =
15181
15186
  cameraMode: "onStop",
15182
15187
  cameraThrottleMs: 50
15183
15188
  };
15184
- class ql {
15189
+ class jl {
15185
15190
  viewerGuid;
15186
15191
  engine;
15187
15192
  options;
@@ -15245,7 +15250,7 @@ class ql {
15245
15250
  return {
15246
15251
  ...Tn,
15247
15252
  ...e,
15248
- groupId: e.groupId ?? this.engine?.options?.linkGroupId ?? Kl,
15253
+ groupId: e.groupId ?? this.engine?.options?.linkGroupId ?? ql,
15249
15254
  modelId: e.modelId ?? this.engine?.options?.modelLinkId
15250
15255
  };
15251
15256
  }
@@ -15485,7 +15490,7 @@ class ql {
15485
15490
  }).filter((n) => n.ids.length > 0);
15486
15491
  }
15487
15492
  }
15488
- class jl {
15493
+ class Yl {
15489
15494
  engine;
15490
15495
  manager;
15491
15496
  worldToScreen;
@@ -15553,7 +15558,7 @@ class jl {
15553
15558
  return e = this.engine.clipping?.filterIntersectionsByClipping?.(e) ?? e, e.filter((i) => i?.point instanceof d).sort((i, n) => i.distance - n.distance)[0] ?? null;
15554
15559
  }
15555
15560
  }
15556
- class Yl {
15561
+ class Xl {
15557
15562
  constructor(e) {
15558
15563
  this.engine = e;
15559
15564
  }
@@ -15597,7 +15602,7 @@ class Yl {
15597
15602
  t.scale.set(a * c, a, 1);
15598
15603
  }
15599
15604
  }
15600
- class Xl {
15605
+ class Ql {
15601
15606
  engine;
15602
15607
  rootGroup;
15603
15608
  records;
@@ -15779,7 +15784,7 @@ const Xe = {
15779
15784
  showBottom: !1,
15780
15785
  edgeColor: "#d9ffff"
15781
15786
  }
15782
- }, Ql = {
15787
+ }, $l = {
15783
15788
  background: "rgba(10, 18, 28, 0.92)",
15784
15789
  color: "#ffffff",
15785
15790
  border: "1px solid rgba(127, 252, 255, 0.72)",
@@ -15788,7 +15793,7 @@ const Xe = {
15788
15793
  boxShadow: "0 10px 30px rgba(0, 0, 0, 0.32)",
15789
15794
  minWidth: "120px",
15790
15795
  pointerEvents: "auto"
15791
- }, $l = "bim-engine-annotation3d-panels";
15796
+ }, Zl = "bim-engine-annotation3d-panels";
15792
15797
  function Ut(l) {
15793
15798
  return l.map((e) => ({ x: e.x, y: e.y, z: e.z }));
15794
15799
  }
@@ -15799,7 +15804,7 @@ function Rt(l) {
15799
15804
  const e = new d();
15800
15805
  return l.length === 0 ? e : (l.forEach((t) => e.add(te(t))), e.multiplyScalar(1 / l.length));
15801
15806
  }
15802
- function Zl(l) {
15807
+ function Jl(l) {
15803
15808
  const e = new d();
15804
15809
  for (let t = 0; t < l.length; t += 1) {
15805
15810
  const i = l[t], n = l[(t + 1) % l.length];
@@ -15809,7 +15814,7 @@ function Zl(l) {
15809
15814
  }
15810
15815
  function Ms(l) {
15811
15816
  const e = l.map((c) => te(c)), t = e[0].clone(), i = e.length > 1 ? e[1].clone().sub(t).normalize() : new d(1, 0, 0);
15812
- let n = Zl(e);
15817
+ let n = Jl(e);
15813
15818
  n.lengthSq() < 1e-8 && (n = new d(0, 1, 0));
15814
15819
  const s = new d().crossVectors(n, i).normalize(), o = new d().crossVectors(s, n).normalize(), r = e.map((c) => {
15815
15820
  const h = c.clone().sub(t);
@@ -15827,12 +15832,12 @@ function vs(l) {
15827
15832
  e.lineTo(t.x, t.y);
15828
15833
  }), e.closePath(), e;
15829
15834
  }
15830
- function Jl(l, e) {
15835
+ function ec(l, e) {
15831
15836
  l.traverse((t) => {
15832
15837
  t.userData = t.userData ?? {}, t.userData.annotationId = e;
15833
15838
  });
15834
15839
  }
15835
- function ec(l) {
15840
+ function tc(l) {
15836
15841
  l.traverse((e) => {
15837
15842
  const t = e;
15838
15843
  t.geometry?.dispose?.();
@@ -15844,13 +15849,13 @@ function ec(l) {
15844
15849
  i?.dispose?.();
15845
15850
  });
15846
15851
  }
15847
- function tc(l) {
15852
+ function ic(l) {
15848
15853
  return l.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`);
15849
15854
  }
15850
- function ic(l) {
15855
+ function nc(l) {
15851
15856
  return l === "polyline" || l === "curve3d" ? "center" : l === "polygon" ? "centroid" : "top";
15852
15857
  }
15853
- class nc {
15858
+ class sc {
15854
15859
  render(e) {
15855
15860
  const t = e.instance.style.leaderPoint ?? {}, i = e.instance.style.point ?? {}, n = t.strokeColor || e.instance.style.color || "#7ffcff", s = t.backgroundColor || e.instance.style.fillColor || n, o = t.borderColor || n, r = t.anchorColor || s, a = t.anchorRingColor || n, c = t.iconBackgroundColor || s, h = t.side ?? "right", u = i.icon ? this.escapeXmlAttribute(i.icon) : "", p = (t.text ?? "").trim(), g = Math.max(t.fontSize ?? 14, 10), f = t.textColor || e.instance.style.color || "#ffffff", w = t.fontWeight ?? 500, x = Math.max(Math.round((t.height ?? 8) * 12), 48), m = Math.max(Math.round(Math.abs(t.offsetX ?? t.armLength ?? 4) * 18), 56), b = this.getBoardWidth(e, p, g), C = Math.max(Math.round((t.boardHeight ?? 1.8) * 22), g + 18, 34), S = Math.max(Math.round((t.stemWidth ?? e.instance.style.lineWidth ?? 0.12) * 20), 2), P = t.borderWidth ?? 2.5, I = t.variant ?? "elbow", k = h === "right" ? 22 + m - 8 : 22 - m - b + 8, L = 8, F = Math.min(22, k) - 16, K = Math.max(22, k + b) + 16, J = Math.max(K - F, 140), Y = Math.max(x + C + 36, 120), ne = 22 - F, oe = k - F, ce = Y - 18, Ce = Math.max(ce - x, 14), Ae = h === "right" ? oe : oe + b, y = L + Math.round(C * 0.5), M = I === "vertical" ? [`${ne},${ce}`, `${ne},${Ce}`] : [`${ne},${ce}`, `${ne},${y}`, `${Ae},${y}`], E = e.instance.selectable !== !1, _ = E ? "visiblePainted" : "none", D = E ? "pointer" : "default", T = oe + (u || !p ? 38 : 12), N = t.showBoard === !1 ? "" : `
15856
15861
  <rect x="${oe}" y="${L}" width="${b}" height="${C}" rx="10"
@@ -15904,9 +15909,9 @@ class nc {
15904
15909
  return Math.max(Math.round((n.boardWidth ?? 4.6) * 22), Math.ceil(r), 78);
15905
15910
  }
15906
15911
  }
15907
- class sc {
15912
+ class oc {
15908
15913
  constructor(e, t) {
15909
- this.engine = e, this.isAnchorOccluded = t, this.container = document.createElement("div"), this.container.className = $l, this.container.style.cssText = [
15914
+ this.engine = e, this.isAnchorOccluded = t, this.container = document.createElement("div"), this.container.className = Zl, this.container.style.cssText = [
15910
15915
  "position:absolute",
15911
15916
  "left:0",
15912
15917
  "top:0",
@@ -15919,7 +15924,7 @@ class sc {
15919
15924
  }
15920
15925
  container;
15921
15926
  worldToScreen;
15922
- leaderMarker = new nc();
15927
+ leaderMarker = new sc();
15923
15928
  updateProjectionState() {
15924
15929
  this.worldToScreen.updateCamera(this.engine.camera), this.worldToScreen.updateRenderer(this.engine.renderer), this.worldToScreen.updateScene(this.engine.scene);
15925
15930
  }
@@ -15932,7 +15937,7 @@ class sc {
15932
15937
  "transform:translate(-50%, -100%)",
15933
15938
  "display:none",
15934
15939
  t.interactive === !1 ? "pointer-events:none" : "pointer-events:auto"
15935
- ].join(";"), t.mode === "html" ? i.innerHTML = t.html ?? "" : i.textContent = t.text ?? "", Object.entries(t.style ?? {}).forEach(([n, s]) => i.style.setProperty(tc(n), s)), i;
15940
+ ].join(";"), t.mode === "html" ? i.innerHTML = t.html ?? "" : i.textContent = t.text ?? "", Object.entries(t.style ?? {}).forEach(([n, s]) => i.style.setProperty(ic(n), s)), i;
15936
15941
  }
15937
15942
  createLeaderMarkerElement(e) {
15938
15943
  const t = document.createElement("div");
@@ -15980,7 +15985,7 @@ class sc {
15980
15985
  const t = e.instance.panel?.offset ?? {};
15981
15986
  if (e.panelAnchorPoint)
15982
15987
  return e.panelAnchorPoint.clone().add(new d(t.x ?? 0, t.y ?? 0, t.z ?? 0));
15983
- const i = e.instance.panel?.anchor ?? ic(e.instance.type);
15988
+ const i = e.instance.panel?.anchor ?? nc(e.instance.type);
15984
15989
  let n = new d();
15985
15990
  if (e.instance.type === "point" || e.instance.type === "leaderPoint")
15986
15991
  n.copy(te(e.instance.points[0])), i === "top" && (n.y += e.volumeHeight ?? e.instance.style.point?.anchorY ?? 0);
@@ -15997,14 +16002,14 @@ class sc {
15997
16002
  return n.add(new d(t.x ?? 0, t.y ?? 0, t.z ?? 0)), n;
15998
16003
  }
15999
16004
  }
16000
- class oc {
16005
+ class rc {
16001
16006
  apply(e, t) {
16002
16007
  e.instance.root.visible = e.instance.visible, e.instance.style.alwaysOnTop && e.instance.root.traverse((i) => {
16003
16008
  i.renderOrder = Math.max(i.renderOrder, 1200);
16004
16009
  }), t(e);
16005
16010
  }
16006
16011
  }
16007
- class rc {
16012
+ class ac {
16008
16013
  constructor(e) {
16009
16014
  this.engine = e;
16010
16015
  }
@@ -16213,7 +16218,7 @@ class Je {
16213
16218
  return o.renderOrder = 998, o;
16214
16219
  }
16215
16220
  }
16216
- class ac extends Je {
16221
+ class lc extends Je {
16217
16222
  type = "box";
16218
16223
  build(e) {
16219
16224
  if (e.instance.points.length < 2)
@@ -16244,7 +16249,7 @@ class ac extends Je {
16244
16249
  g.position.copy(r), e.instance.root.add(g), e.volumeHeight = o.y, e.animatedMaterials.push(h);
16245
16250
  }
16246
16251
  }
16247
- class lc extends Je {
16252
+ class cc extends Je {
16248
16253
  type = "curve3d";
16249
16254
  build(e) {
16250
16255
  const t = e.instance.points.map((r) => te(r)), i = e.instance.style.curve ?? {}, n = i.interpolation ?? "catmullRom", s = new Js(
@@ -16265,7 +16270,7 @@ class lc extends Je {
16265
16270
  e.instance.root.add(o), e.anchorCurve = s, e.panelAnchorPoint = s.getPoint(0.5);
16266
16271
  }
16267
16272
  }
16268
- class cc extends Je {
16273
+ class hc extends Je {
16269
16274
  type = "extrudePolygon";
16270
16275
  build(e) {
16271
16276
  const t = Ms(e.instance.points), i = vs(t.localPoints), n = e.instance.style.volume?.height ?? 10, s = new Fn(i, {
@@ -16307,7 +16312,7 @@ class cc extends Je {
16307
16312
  }
16308
16313
  }
16309
16314
  }
16310
- class hc extends Je {
16315
+ class dc extends Je {
16311
16316
  type = "leaderPoint";
16312
16317
  build(e) {
16313
16318
  const t = te(e.instance.points[0]), i = e.instance.style.leaderPoint ?? {}, n = Math.max(i.height ?? 8, 0.5), s = i.offsetX ?? i.armLength ?? 4, o = i.offsetZ ?? 0, r = this.createLeaderPathPoints(i.variant ?? "elbow", n, s, o), a = r[r.length - 1].clone();
@@ -16327,7 +16332,7 @@ class hc extends Je {
16327
16332
  ];
16328
16333
  }
16329
16334
  }
16330
- class dc extends Je {
16335
+ class uc extends Je {
16331
16336
  type = "point";
16332
16337
  build(e) {
16333
16338
  const t = te(e.instance.points[0]), i = e.instance.style, n = e.instance.effect, s = i.point ?? {};
@@ -16381,7 +16386,7 @@ class dc extends Je {
16381
16386
  }
16382
16387
  }
16383
16388
  }
16384
- class uc extends Je {
16389
+ class pc extends Je {
16385
16390
  type = "polygon";
16386
16391
  build(e) {
16387
16392
  const t = Ms(e.instance.points), i = vs(t.localPoints), n = new to(i);
@@ -16404,7 +16409,7 @@ class uc extends Je {
16404
16409
  ), e.animatedMaterials.push(o);
16405
16410
  }
16406
16411
  }
16407
- class pc extends Je {
16412
+ class mc extends Je {
16408
16413
  type = "polyline";
16409
16414
  build(e) {
16410
16415
  const t = e.instance.points.map((s) => te(s)), i = this.createSegmentCurve(t), n = this.createTubeMesh(
@@ -16418,18 +16423,18 @@ class pc extends Je {
16418
16423
  e.instance.root.add(n), e.anchorCurve = i, e.panelAnchorPoint = i.getPoint(0.5);
16419
16424
  }
16420
16425
  }
16421
- function mc(l, e, t) {
16426
+ function gc(l, e, t) {
16422
16427
  return [
16423
- new dc(l, e, t),
16424
- new hc(l, e, t),
16425
- new pc(l, e, t),
16426
- new lc(l, e, t),
16427
16428
  new uc(l, e, t),
16429
+ new dc(l, e, t),
16430
+ new mc(l, e, t),
16428
16431
  new cc(l, e, t),
16429
- new ac(l, e, t)
16432
+ new pc(l, e, t),
16433
+ new hc(l, e, t),
16434
+ new lc(l, e, t)
16430
16435
  ];
16431
16436
  }
16432
- function gc(l, e, t) {
16437
+ function fc(l, e, t) {
16433
16438
  const i = l.camera;
16434
16439
  if (!i)
16435
16440
  return !1;
@@ -16442,7 +16447,7 @@ function gc(l, e, t) {
16442
16447
  const r = o.sort((a, c) => a.distance - c.distance)[0];
16443
16448
  return !!(r && r.distance < s - 0.05);
16444
16449
  }
16445
- class fc {
16450
+ class yc {
16446
16451
  normalizeData(e) {
16447
16452
  return {
16448
16453
  ...e,
@@ -16558,18 +16563,18 @@ class fc {
16558
16563
  offset: { ...e.offset ?? {} },
16559
16564
  screenOffset: { ...e.screenOffset ?? {} },
16560
16565
  className: e.className,
16561
- style: { ...Ql, ...e.style ?? {} },
16566
+ style: { ...$l, ...e.style ?? {} },
16562
16567
  interactive: e.interactive ?? !0,
16563
16568
  occlusion: e.occlusion ?? "show",
16564
16569
  actions: e.actions
16565
16570
  };
16566
16571
  }
16567
16572
  }
16568
- function yc(l) {
16573
+ function Mc(l) {
16569
16574
  const { actions: e, ...t } = l;
16570
16575
  return t;
16571
16576
  }
16572
- function Mc(l) {
16577
+ function vc(l) {
16573
16578
  return {
16574
16579
  id: l.instance.id,
16575
16580
  type: l.instance.type,
@@ -16585,7 +16590,7 @@ function Mc(l) {
16585
16590
  function Ot(l) {
16586
16591
  return l === void 0 ? l : JSON.parse(JSON.stringify(l));
16587
16592
  }
16588
- class vc {
16593
+ class wc {
16589
16594
  builders = /* @__PURE__ */ new Map();
16590
16595
  constructor(e) {
16591
16596
  e.forEach((t) => this.builders.set(t.type, t));
@@ -16597,7 +16602,7 @@ class vc {
16597
16602
  t.build(e);
16598
16603
  }
16599
16604
  }
16600
- class wc {
16605
+ class xc {
16601
16606
  constructor(e, t) {
16602
16607
  this.markerRegistry = e, this.overlayController = t;
16603
16608
  }
@@ -16612,7 +16617,7 @@ class wc {
16612
16617
  selectable: e.selectable ?? !0,
16613
16618
  style: e.style,
16614
16619
  effect: e.effect ?? {},
16615
- panel: e.panel ? yc(e.panel) : void 0,
16620
+ panel: e.panel ? Mc(e.panel) : void 0,
16616
16621
  data: e.data,
16617
16622
  panelVisible: e.panel?.trigger === "always",
16618
16623
  hovered: !1,
@@ -16628,31 +16633,31 @@ class wc {
16628
16633
  baseRingMeshes: [],
16629
16634
  animatedMaterials: []
16630
16635
  };
16631
- return this.markerRegistry.build(n), Jl(t, i.id), n;
16636
+ return this.markerRegistry.build(n), ec(t, i.id), n;
16632
16637
  }
16633
16638
  }
16634
- class xc {
16639
+ class bc {
16635
16640
  engine;
16636
16641
  rootGroup;
16637
16642
  records = /* @__PURE__ */ new Map();
16638
16643
  textureLoader = new Ke();
16639
16644
  occlusionRaycaster = new fe();
16640
- normalizer = new fc();
16645
+ normalizer = new yc();
16641
16646
  materialFactory;
16642
16647
  overlayController;
16643
16648
  interactionController;
16644
16649
  effectsController;
16645
- visibilityController = new oc();
16650
+ visibilityController = new rc();
16646
16651
  markerRegistry;
16647
16652
  recordFactory;
16648
16653
  currentTime = 0;
16649
16654
  constructor(e) {
16650
- this.engine = e, this.rootGroup = new de(), this.rootGroup.name = "Annotation3dRoot", this.engine.scene.add(this.rootGroup), this.materialFactory = new rc(this.engine), this.overlayController = new sc(
16655
+ this.engine = e, this.rootGroup = new de(), this.rootGroup.name = "Annotation3dRoot", this.engine.scene.add(this.rootGroup), this.materialFactory = new ac(this.engine), this.overlayController = new oc(
16651
16656
  this.engine,
16652
- (t) => gc(this.engine, this.occlusionRaycaster, t)
16653
- ), this.markerRegistry = new vc(
16654
- mc(this.engine, this.textureLoader, this.materialFactory)
16655
- ), this.recordFactory = new wc(this.markerRegistry, this.overlayController), this.effectsController = new Yl(this.engine), this.interactionController = new Xl({
16657
+ (t) => fc(this.engine, this.occlusionRaycaster, t)
16658
+ ), this.markerRegistry = new wc(
16659
+ gc(this.engine, this.textureLoader, this.materialFactory)
16660
+ ), this.recordFactory = new xc(this.markerRegistry, this.overlayController), this.effectsController = new Xl(this.engine), this.interactionController = new Ql({
16656
16661
  engine: this.engine,
16657
16662
  rootGroup: this.rootGroup,
16658
16663
  records: this.records,
@@ -16753,7 +16758,7 @@ class xc {
16753
16758
  return this.update(e, { panel: n });
16754
16759
  }
16755
16760
  getData() {
16756
- return Array.from(this.records.values()).map((e) => Mc(e));
16761
+ return Array.from(this.records.values()).map((e) => vc(e));
16757
16762
  }
16758
16763
  restoreData(e) {
16759
16764
  this.clear(), e.forEach((t) => this.add(t));
@@ -16771,7 +16776,7 @@ class xc {
16771
16776
  }
16772
16777
  removeInternal(e, t) {
16773
16778
  const i = this.records.get(e);
16774
- return i ? (this.interactionController.handleRecordRemoved(e), ec(i.instance.root), i.instance.root.removeFromParent(), i.panelElement?.remove(), i.markerElement?.remove(), this.records.delete(e), t && this.emit("annotation3d-removed", { id: e }), !0) : !1;
16779
+ return i ? (this.interactionController.handleRecordRemoved(e), tc(i.instance.root), i.instance.root.removeFromParent(), i.panelElement?.remove(), i.markerElement?.remove(), this.records.delete(e), t && this.emit("annotation3d-removed", { id: e }), !0) : !1;
16775
16780
  }
16776
16781
  toEventPayload(e, t) {
16777
16782
  return { id: e.instance.id, annotation: e.instance, originalEvent: t };
@@ -17106,8 +17111,8 @@ class ot {
17106
17111
  return "x" in e ? new d(e.x, e.y, e.z) : new d(e.X, e.Y, e.Z);
17107
17112
  }
17108
17113
  }
17109
- const bc = 1e-3, Cc = 0.65, Ac = 1;
17110
- class Ec {
17114
+ const Cc = 1e-3, Ac = 0.65, Ec = 1;
17115
+ class Sc {
17111
17116
  engine;
17112
17117
  loader = new Ii();
17113
17118
  modelList = /* @__PURE__ */ new Map();
@@ -17316,7 +17321,7 @@ class Ec {
17316
17321
  }
17317
17322
  /** 透视相机使用更小的屏幕尺寸系数,正交相机维持原有尺寸。 */
17318
17323
  syncTransformControlCamera() {
17319
- !this.transformControl || !this.engine.camera || (this.transformControl.camera = this.engine.camera, this.transformControl.size = this.engine.camera.isPerspectiveCamera ? Cc : Ac);
17324
+ !this.transformControl || !this.engine.camera || (this.transformControl.camera = this.engine.camera, this.transformControl.size = this.engine.camera.isPerspectiveCamera ? Ac : Ec);
17320
17325
  }
17321
17326
  /** 使用引擎统一的捕捉器等待用户单击,并在取消或完成后恢复常规交互。 */
17322
17327
  pickPlacementPoint(e, t) {
@@ -17355,7 +17360,7 @@ class Ec {
17355
17360
  const i = t.clone(), n = e?.normal ?? e?.face?.normal;
17356
17361
  if (n == null) return { position: i, normal: null };
17357
17362
  const s = n.clone(), o = e?.matrix ?? e?.object?.matrixWorld;
17358
- return o && s.transformDirection(o), s.lengthSq() < 1e-10 ? { position: i, normal: null } : (s.normalize(), i.addScaledVector(s, bc), { position: i, normal: s });
17363
+ return o && s.transformDirection(o), s.lengthSq() < 1e-10 ? { position: i, normal: null } : (s.normalize(), i.addScaledVector(s, Cc), { position: i, normal: s });
17359
17364
  }
17360
17365
  handlePointerDown(e) {
17361
17366
  if (!(!this.editingEnabled || !this.engine.camera || !this.engine.renderer)) {
@@ -17508,7 +17513,7 @@ class pi extends Error {
17508
17513
  super("模型对比已取消"), this.name = "ModelComparisonCancelledError";
17509
17514
  }
17510
17515
  }
17511
- class Sc {
17516
+ class Pc {
17512
17517
  constructor(e) {
17513
17518
  this.engine = e;
17514
17519
  }
@@ -17947,7 +17952,7 @@ class Sc {
17947
17952
  }
17948
17953
  }
17949
17954
  const In = "__modelExplodeProxy", _n = new U().makeScale(0, 0, 0);
17950
- class Pc {
17955
+ class Tc {
17951
17956
  engine;
17952
17957
  /** 当前是否处于炸开模式;供外部滑块、交互模块判断是否需要走代理逻辑。 */
17953
17958
  active = !1;
@@ -18481,7 +18486,7 @@ const Dn = "bim-material-editor-style", Ze = [
18481
18486
  bumpMap: "凹凸贴图",
18482
18487
  emissiveMap: "自发光贴图"
18483
18488
  };
18484
- class Tc {
18489
+ class Ic {
18485
18490
  constructor(e) {
18486
18491
  this.engine = e;
18487
18492
  }
@@ -18587,7 +18592,7 @@ function ws(l) {
18587
18592
  function pt(l) {
18588
18593
  return l instanceof qe ? Jt(l) || l.uuid : l;
18589
18594
  }
18590
- function Ic(l) {
18595
+ function _c(l) {
18591
18596
  const e = l, t = {
18592
18597
  type: l.type,
18593
18598
  name: l.name || l.type,
@@ -18603,7 +18608,7 @@ function Ic(l) {
18603
18608
  i in e && (t[i] = pt(e[i]) ?? null);
18604
18609
  }), JSON.stringify(t);
18605
18610
  }
18606
- function _c(l, e) {
18611
+ function Dc(l, e) {
18607
18612
  const t = ws(l), i = {};
18608
18613
  return Object.entries(e.values).forEach(([n, s]) => {
18609
18614
  const o = t[n];
@@ -18648,7 +18653,7 @@ function Ft(l) {
18648
18653
  }))
18649
18654
  };
18650
18655
  }
18651
- class Dc {
18656
+ class Lc {
18652
18657
  constructor(e, t) {
18653
18658
  this.engine = e, this.host = t;
18654
18659
  }
@@ -18855,7 +18860,7 @@ class Dc {
18855
18860
  `, document.head.appendChild(e);
18856
18861
  }
18857
18862
  }
18858
- class Lc {
18863
+ class kc {
18859
18864
  constructor(e) {
18860
18865
  this.collectSceneMaterials = e;
18861
18866
  }
@@ -18886,7 +18891,7 @@ class Lc {
18886
18891
  const i = this.baselineSnapshots.get(t.material.uuid);
18887
18892
  if (i == null)
18888
18893
  return;
18889
- const n = _c(t.material, i);
18894
+ const n = Dc(t.material, i);
18890
18895
  Object.keys(n).length !== 0 && e.push({
18891
18896
  id: t.material.uuid,
18892
18897
  name: t.material.name || i.name,
@@ -18903,13 +18908,13 @@ class Lc {
18903
18908
  }), e.needsUpdate = !0, !0);
18904
18909
  }
18905
18910
  }
18906
- class kc {
18911
+ class Bc {
18907
18912
  constructor(e, t = {}) {
18908
18913
  this.engine = e, this.options = {
18909
18914
  visible: t.visible ?? !1,
18910
18915
  title: t.title ?? "材质编辑器",
18911
18916
  width: t.width ?? 340
18912
- }, this.visible = this.options.visible, this.collector = new Tc(e), this.snapshots = new Lc(() => this.collectSceneMaterials()), this.panel = new Dc(e, this);
18917
+ }, this.visible = this.options.visible, this.collector = new Ic(e), this.snapshots = new kc(() => this.collectSceneMaterials()), this.panel = new Lc(e, this);
18913
18918
  }
18914
18919
  options;
18915
18920
  selectedMaterials = [];
@@ -19051,7 +19056,7 @@ class kc {
19051
19056
  dedupeMaterials(e) {
19052
19057
  const t = /* @__PURE__ */ new Map();
19053
19058
  return e.forEach((i) => {
19054
- const n = Ic(i.material), s = t.get(n);
19059
+ const n = _c(i.material), s = t.get(n);
19055
19060
  if (s == null) {
19056
19061
  t.set(n, { material: i.material, materials: [i.material], owners: [...i.owners] });
19057
19062
  return;
@@ -19091,7 +19096,7 @@ class kc {
19091
19096
  this.ownedTextures.forEach((e) => e.dispose()), this.ownedTextures.clear();
19092
19097
  }
19093
19098
  }
19094
- class Bc {
19099
+ class zc {
19095
19100
  engine;
19096
19101
  codeMap = [];
19097
19102
  continusIds = /* @__PURE__ */ new Map();
@@ -19192,16 +19197,16 @@ const Nt = {
19192
19197
  sampleCount: 64,
19193
19198
  roundedRadius: 1,
19194
19199
  historyLimit: 100
19195
- }, zc = {
19200
+ }, Rc = {
19196
19201
  bezier: "贝塞尔曲线",
19197
19202
  straight: "直线",
19198
19203
  rounded: "圆角直线"
19199
- }, Rc = {
19204
+ }, Oc = {
19200
19205
  bezier: "∿",
19201
19206
  straight: "╱",
19202
19207
  rounded: "⌁"
19203
19208
  };
19204
- class Oc {
19209
+ class Fc {
19205
19210
  type = "path-draw";
19206
19211
  engine;
19207
19212
  root = new de();
@@ -19567,7 +19572,7 @@ class Oc {
19567
19572
  t.append(i, n, s), e.appendChild(t), this.statusElement = n;
19568
19573
  const o = document.createElement("div");
19569
19574
  Object.assign(o.style, { display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: "4px", padding: "8px" }), ["bezier", "straight", "rounded"].forEach((x) => {
19570
- const m = this.createIconButton(Rc[x], zc[x], () => this.setLineType(x));
19575
+ const m = this.createIconButton(Oc[x], Rc[x], () => this.setLineType(x));
19571
19576
  m.dataset.lineType = x, m.style.width = "100%", m.style.fontSize = "18px", o.appendChild(m);
19572
19577
  }), e.appendChild(o);
19573
19578
  const r = document.createElement("label");
@@ -19685,7 +19690,7 @@ class Oc {
19685
19690
  return { x: e.x, y: e.y, z: e.z };
19686
19691
  }
19687
19692
  }
19688
- class Fc {
19693
+ class Nc {
19689
19694
  engine;
19690
19695
  continusIds = /* @__PURE__ */ new Map();
19691
19696
  constructor(e) {
@@ -19744,7 +19749,7 @@ class Fc {
19744
19749
  });
19745
19750
  }
19746
19751
  }
19747
- class Gc {
19752
+ class Wc {
19748
19753
  // 引擎参数
19749
19754
  options;
19750
19755
  deviceType;
@@ -19866,7 +19871,7 @@ class Gc {
19866
19871
  constructor(e) {
19867
19872
  if (window.THREE = Ln, Wo(), this.options = e, this.container = document.getElementById(e.containerId), !this.container)
19868
19873
  throw new Error(`Container ${e.containerId} not found`);
19869
- if (this.rxQuotaListMapper = new Bc(this), this.filterLoaderModel = new Fc(this), this.engineModelModule = new ma(this), this.engineModelModule.init(), this.deviceModule = new xo(this), this.deviceType = this.deviceModule.getDeviceType(), this.cameraModule = new re(this), this.sceneModule = new wo(this), this.scene = this.sceneModule.scene, this.renderModule = new bo(this), this.renderer = this.renderModule.createRenderer(), this.camera = this.cameraModule.orthographicCamera, this.scene.camera = this.camera, this.renderer) {
19874
+ if (this.rxQuotaListMapper = new zc(this), this.filterLoaderModel = new Nc(this), this.engineModelModule = new ma(this), this.engineModelModule.init(), this.deviceModule = new xo(this), this.deviceType = this.deviceModule.getDeviceType(), this.cameraModule = new re(this), this.sceneModule = new wo(this), this.scene = this.sceneModule.scene, this.renderModule = new bo(this), this.renderer = this.renderModule.createRenderer(), this.camera = this.cameraModule.orthographicCamera, this.scene.camera = this.camera, this.renderer) {
19870
19875
  const o = this.renderer;
19871
19876
  o.interactionCullingEnabled = !0, o.interactionActive = !1, o.interactionRenderScene = this.scene, o.interactionFrameBudgetMs = this.options.interactionFrameBudgetMs ?? 6, o.interactionSkipShadows = this.options.interactionSkipShadows ?? !0;
19872
19877
  }
@@ -19874,7 +19879,7 @@ class Gc {
19874
19879
  const t = this.events.trigger.bind(this.events);
19875
19880
  this.events.trigger = ((o, r) => {
19876
19881
  t(o, r), String(o) !== String(ie.EngineBusy) && this.requestComposerRender();
19877
- }), this.engineStatus = new Vr(this), this.engineStatus.init(), this.loaderModule = new Te(this), this.lightModule = new la(this), this.lightModule.init(), this.viewCube = new Ma(this), this.viewCube.init(), this.options.showViewCube == !1 && this.viewCube.hide(), this.octreeBox = va(this), this.rangeScale = new wa(this), this.rangeScale.init(), this.setting = new Va(this), this.engineModelModule.init(), this.handelBehaved = Fi(this), this.modelMapperBatch = new ll(this), this.measure = new Qa(this), this.modelToolModule = new ha(this), this.modelLink3d = new ql(this, this.options.linkOptions ?? {}), this.modelLink3d.init(), this.modelProperties = new sl(this), this.search = new al(this), this.interactionModule = new ca(this), this.interactionModule.init(), this.interactionModule.active(), this.hoverHighLight = new Zt(this), this.modelEdge = new Na(this), this.nodeBox = new dl(this), this.modelTree = new il(this), this.viewTree = new Hi(this), this.merge2d = new Pl(this), this.engineInfo = new nl(this), this.pathRoaming = new ul(this), this.pathRoaming.init(), this.oneClickEncoding = new Ml(this), this.minMap = new pl(this), this.linkElement2d3d = new fl(this), this.linkView2d3d = new yl(this), this.grid = new Ca(this), this.level = new Ia(this), this.issueReport = new ml(this), this.fabricDraw = new Gl(this), this.drawingPin = new Wl(this), this.label = new jl(this), this.annotation3d = new xc(this), this.calibration = new ot(this), this.modelPlace = new Ec(this), this.modelComparison = new Sc(this), this.modelExplode = new Pc(this), this.materialTool = new kc(this, this.options.materialEditorOptions ?? {}), this.materialTool.init(), this.pathDraw = new Oc(this), this.text = new gl(this), this.hdr = new Sa(this), this.ground = new Ni(this), this.ground.init(), this.skyManager = new Ha(this), this.setting.init(), this.worldToScreen = new pe(this.camera, this.renderer, this.scene), this.options.showStats && (this.stats = new vo(), this.stats.showPanel(0), this.stats.dom.style.position = "absolute", this.stats.dom.style.top = "0px", this.stats.dom.style.left = "0px", this.stats.dom.style.zIndex = "1000", this.container.appendChild(this.stats.dom));
19882
+ }), this.engineStatus = new Vr(this), this.engineStatus.init(), this.loaderModule = new Te(this), this.lightModule = new la(this), this.lightModule.init(), this.viewCube = new Ma(this), this.viewCube.init(), this.options.showViewCube == !1 && this.viewCube.hide(), this.octreeBox = va(this), this.rangeScale = new wa(this), this.rangeScale.init(), this.setting = new Va(this), this.engineModelModule.init(), this.handelBehaved = Fi(this), this.modelMapperBatch = new ll(this), this.measure = new Qa(this), this.modelToolModule = new ha(this), this.modelLink3d = new jl(this, this.options.linkOptions ?? {}), this.modelLink3d.init(), this.modelProperties = new sl(this), this.search = new al(this), this.interactionModule = new ca(this), this.interactionModule.init(), this.interactionModule.active(), this.hoverHighLight = new Zt(this), this.modelEdge = new Na(this), this.nodeBox = new dl(this), this.modelTree = new il(this), this.viewTree = new Hi(this), this.merge2d = new Tl(this), this.engineInfo = new nl(this), this.pathRoaming = new pl(this), this.pathRoaming.init(), this.oneClickEncoding = new vl(this), this.minMap = new ml(this), this.linkElement2d3d = new yl(this), this.linkView2d3d = new Ml(this), this.grid = new Ca(this), this.level = new Ia(this), this.issueReport = new gl(this), this.fabricDraw = new Wl(this), this.drawingPin = new Kl(this), this.label = new Yl(this), this.annotation3d = new bc(this), this.calibration = new ot(this), this.modelPlace = new Sc(this), this.modelComparison = new Pc(this), this.modelExplode = new Tc(this), this.materialTool = new Bc(this, this.options.materialEditorOptions ?? {}), this.materialTool.init(), this.pathDraw = new Fc(this), this.text = new fl(this), this.hdr = new Sa(this), this.ground = new Ni(this), this.ground.init(), this.skyManager = new Ha(this), this.setting.init(), this.worldToScreen = new pe(this.camera, this.renderer, this.scene), this.options.showStats && (this.stats = new vo(), this.stats.showPanel(0), this.stats.dom.style.position = "absolute", this.stats.dom.style.top = "0px", this.stats.dom.style.left = "0px", this.stats.dom.style.zIndex = "1000", this.container.appendChild(this.stats.dom));
19878
19883
  let i = document.createElement("div");
19879
19884
  i.className = "versionText", this.versionEl = i, this.updateVersionDisplay(), this.container.appendChild(i);
19880
19885
  let n = document.createElementNS("http://www.w3.org/2000/svg", "svg");
@@ -20209,6 +20214,6 @@ class Gc {
20209
20214
  }
20210
20215
  }
20211
20216
  export {
20212
- Gc as E,
20213
- kc as M
20217
+ Wc as E,
20218
+ Bc as M
20214
20219
  };