ss-component-new 1.2.4 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/{animationData-CfT99nMO.cjs → animationData-B0K2ghu6.cjs} +1 -1
  2. package/dist/{animationData-9n1X4UvO.js → animationData-GqECkAbz.js} +4 -4
  3. package/dist/{array-pg68Qbs1.js → array-D65aMM6H.js} +1 -1
  4. package/dist/{array-BPHS7JFA.cjs → array-DMPAgNcb.cjs} +1 -1
  5. package/dist/config.js +1 -1
  6. package/dist/{index-bj8hK6Pe.js → index--rLSLEk3.js} +2 -2
  7. package/dist/{index-B8J_v2Ky.cjs → index-67QO-qDa.cjs} +1 -1
  8. package/dist/{index-DOlPMLvf.cjs → index-87kRWJv8.cjs} +1 -1
  9. package/dist/{index-CdPbJekh.js → index-8Dyi4QCI.js} +185 -186
  10. package/dist/{index-CK_O7QdV.cjs → index-8yRiF_z8.cjs} +1 -1
  11. package/dist/{index-B5srJr0o.js → index-9zEdW6xv.js} +2 -2
  12. package/dist/{index-CAHYTZ1Q.cjs → index-B14iwpkN.cjs} +1 -1
  13. package/dist/{index-DJ1PTHpx.cjs → index-B7hLDNQ6.cjs} +1 -1
  14. package/dist/{index-DBScQH7L.js → index-BEoEUXZe.js} +166 -166
  15. package/dist/{index-BOVdAFDH.cjs → index-BHJ-tVLT.cjs} +1 -1
  16. package/dist/{index-Dk8D9SRm.js → index-BMMYAqF1.js} +1 -1
  17. package/dist/{index-DFg-bhPI.js → index-BNOx3XL5.js} +1 -1
  18. package/dist/{index-CMlYJD5U.cjs → index-BNvpuVyw.cjs} +1 -1
  19. package/dist/{index-d6tSWKtY.cjs → index-BOJUyAaV.cjs} +2 -2
  20. package/dist/{index-B5vIeQUq.cjs → index-BYUPvuvs.cjs} +1 -1
  21. package/dist/{index-LXb5DfDE.cjs → index-BaRkv5oc.cjs} +1 -1
  22. package/dist/{index-Bx4qIiIa.cjs → index-BpR7F1Fp.cjs} +1 -1
  23. package/dist/{index-BjXcyVvp.js → index-Bs2K1FVH.js} +2 -2
  24. package/dist/{index-Bsdjuxq1.cjs → index-BsM9qdbC.cjs} +1 -1
  25. package/dist/{index-CyP2hcVu.js → index-BsfJJu0R.js} +6 -6
  26. package/dist/{index-BAj0dyBF.js → index-Bw_JtuzR.js} +3 -3
  27. package/dist/{index-BuKHInQb.js → index-C1FOuBuy.js} +1 -1
  28. package/dist/{index-NFCeQcv4.cjs → index-C5CKSB0e.cjs} +1 -1
  29. package/dist/{index-CCsSOTaB.js → index-C8UOMPgt.js} +2 -2
  30. package/dist/{index-CCIJ-P3X.cjs → index-CA-FC_OL.cjs} +1 -1
  31. package/dist/{index-CDXq3gs4.js → index-CArSUfnV.js} +19 -19
  32. package/dist/{index-8CcD03tl.js → index-CBuqdsPh.js} +6 -6
  33. package/dist/{index---6UATT0.js → index-CMCrQ36H.js} +3 -3
  34. package/dist/{index-CpE8hbs0.js → index-CRj9VM12.js} +6 -6
  35. package/dist/{index-C1lB8apW.js → index-CRrAiL5l.js} +4 -4
  36. package/dist/{index-BNNxPuEV.js → index-CShBWCYm.js} +1 -1
  37. package/dist/{index-FxX6NP0J.js → index-CTkF2kl_.js} +1 -1
  38. package/dist/{index-DCf7Tz40.cjs → index-CZaBF851.cjs} +1 -1
  39. package/dist/{index-Y7MUJdPv.js → index-CbA74tCL.js} +2 -2
  40. package/dist/{index-B5gNufYw.js → index-CbDu4gfZ.js} +2 -2
  41. package/dist/{index-zQVJFawn.cjs → index-CePZE-QA.cjs} +1 -1
  42. package/dist/{index-Bi7yv8jC.cjs → index-CedgKpsz.cjs} +1 -1
  43. package/dist/{index-C0HHmjrg.cjs → index-Cm3z0Vmi.cjs} +1 -1
  44. package/dist/{index-BEJOd_29.js → index-D-WcrLQv.js} +4 -4
  45. package/dist/{index-D-r_YKrq.cjs → index-D6mwkqWY.cjs} +2 -2
  46. package/dist/index-D8510-YQ.cjs +1 -0
  47. package/dist/{index-DPyzaxnq.cjs → index-D9oqICYV.cjs} +1 -1
  48. package/dist/{index-DSsZtYMz.js → index-DGepdvRW.js} +2 -2
  49. package/dist/{index-D0_4keB8.js → index-DGi-ANHr.js} +5 -5
  50. package/dist/{index-CLtFz5gE.js → index-DJGsDpDp.js} +3 -3
  51. package/dist/{index-B9nZeing.cjs → index-DPBmAgEA.cjs} +1 -1
  52. package/dist/{index-xHEf6hcO.js → index-DPWc4No_.js} +2 -2
  53. package/dist/{index-BrsIZVyD.cjs → index-DSchKIyh.cjs} +1 -1
  54. package/dist/{index-UN4JU0ly.js → index-DV_ZZQBO.js} +2 -2
  55. package/dist/{index-1DtctdYW.cjs → index-DVmoPvzr.cjs} +1 -1
  56. package/dist/{index-BKhDFqMM.cjs → index-DWs7-g1h.cjs} +1 -1
  57. package/dist/{index-DszzdQnM.cjs → index-DZ8a7BZ1.cjs} +1 -1
  58. package/dist/{index-nUEWiqy9.cjs → index-DcUUpSE1.cjs} +1 -1
  59. package/dist/{index-DsHRVZ0E.js → index-DvpVQvAe.js} +2 -2
  60. package/dist/{index-DPaTtF3h.cjs → index-FK1YYpjN.cjs} +1 -1
  61. package/dist/{index-DEwcUkb-.js → index-HvKjB6_P.js} +3 -3
  62. package/dist/{index-PIEkAjRf.js → index-LADv0t0E.js} +11 -11
  63. package/dist/{index-DS5z17Mc.js → index-_66uQhcl.js} +7 -7
  64. package/dist/{index-CxNBcsll.cjs → index-_uyv24Pt.cjs} +1 -1
  65. package/dist/{index-pLeOyTaj.js → index-g4qw0jRy.js} +6 -6
  66. package/dist/{index-C-AOuDkl.cjs → index-mtuIEfrj.cjs} +1 -1
  67. package/dist/{index-CmlXlH2b.cjs → index-tttYIzsn.cjs} +1 -1
  68. package/dist/{index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-Cmc1oALS.cjs → index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-BSOYWm_U.cjs} +1 -1
  69. package/dist/{index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-BTu7I4mn.js → index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-DIMJusrg.js} +2 -2
  70. package/dist/{index.vue_vue_type_style_index_0_scoped_92477073_lang-C795GAHK.cjs → index.vue_vue_type_style_index_0_scoped_92477073_lang-D2VLEzGB.cjs} +1 -1
  71. package/dist/{index.vue_vue_type_style_index_0_scoped_92477073_lang-Bg_c-oAL.js → index.vue_vue_type_style_index_0_scoped_92477073_lang-D58IzjOR.js} +6 -6
  72. package/dist/{index.vue_vue_type_style_index_0_scoped_bcdf4fb0_lang-Bn5qXF4J.cjs → index.vue_vue_type_style_index_0_scoped_bcdf4fb0_lang-BnNwKutS.cjs} +1 -1
  73. package/dist/{index.vue_vue_type_style_index_0_scoped_bcdf4fb0_lang-9kDr7Iek.js → index.vue_vue_type_style_index_0_scoped_bcdf4fb0_lang-CJCvJvBM.js} +13 -13
  74. package/dist/{index.vue_vue_type_style_index_1_lang-Exyt6qTf.js → index.vue_vue_type_style_index_1_lang-D5Hjs-g0.js} +31 -25
  75. package/dist/{index.vue_vue_type_style_index_1_lang-Bn7P4fYM.cjs → index.vue_vue_type_style_index_1_lang-H_pReDxj.cjs} +1 -1
  76. package/dist/{index.vue_vue_type_style_index_1_lang-zN5mc8b0.cjs → index.vue_vue_type_style_index_1_lang-N-_9ZJEf.cjs} +2 -2
  77. package/dist/{index.vue_vue_type_style_index_1_lang-D1n_3_F6.js → index.vue_vue_type_style_index_1_lang-hBa3nAgx.js} +3 -3
  78. package/dist/{isString-BAN9KLwf.js → isString--ZVOCy4V.js} +1 -1
  79. package/dist/{isString-ChvWbctO.cjs → isString-CELwppr9.cjs} +1 -1
  80. package/dist/{main-BUEuCNq-.cjs → main-C6Iw-pcH.cjs} +1 -1
  81. package/dist/{main-Dk3BZDsa.js → main-CygliYyN.js} +5 -5
  82. package/dist/ss-component.cjs +1 -1
  83. package/dist/ss-component.css +1 -1
  84. package/dist/ss-component.js +11 -11
  85. package/dist/ss-component2.cjs +1 -1
  86. package/dist/ss-component2.js +12 -12
  87. package/dist/{threeLatheView-DfSxRY8B.cjs → threeLatheView-CdUoB0Te.cjs} +1 -1
  88. package/dist/{threeLatheView-DcuDjVv0.js → threeLatheView-DzpPpdDr.js} +2 -2
  89. package/dist/{threeModel-DjjtL0-a.cjs → threeModel-BUCLJlE5.cjs} +1 -1
  90. package/dist/{threeModel-YRFvkgXU.js → threeModel-BfMMeZCc.js} +3 -3
  91. package/dist/{threePreview-CyYfnbB6.js → threePreview-BEqzg370.js} +1 -1
  92. package/dist/{threePreview-ByUYJkts.cjs → threePreview-C-JW_pcY.cjs} +1 -1
  93. package/dist/threeSceneView-BTsG2QJg.cjs +5 -0
  94. package/dist/threeSceneView-DV5dsTZZ.js +1471 -0
  95. package/dist/{threeSceneViewForCPMPIP-axjwKt9X.js → threeSceneViewForCPMPIP-Bexwqkry.js} +7 -7
  96. package/dist/{threeSceneViewForCPMPIP-DA-twBdG.cjs → threeSceneViewForCPMPIP-DwLWGNUd.cjs} +1 -1
  97. package/dist/{threeViewerHost-B02OtfCk.cjs → threeViewerHost-CRqcYbJE.cjs} +1 -1
  98. package/dist/{threeViewerHost-D7L1FW__.js → threeViewerHost-CTjd2V1D.js} +4 -4
  99. package/dist/{useRayCaster-CAqupK7D.js → useRayCaster-D0_7oJan.js} +1 -1
  100. package/dist/{useRayCaster-ClcofJkf.cjs → useRayCaster-DN56HpNP.cjs} +1 -1
  101. package/package.json +1 -1
  102. package/public/config.js +1 -1
  103. package/dist/index-5hLZZ6t-.cjs +0 -1
  104. package/dist/threeSceneView-mhrcH0WG.cjs +0 -5
  105. package/dist/threeSceneView-zvyCHrp1.js +0 -1469
@@ -0,0 +1,1471 @@
1
+ import { defineComponent as je, ref as h, watch as re, shallowRef as he, computed as Pe, onUnmounted as Ne, resolveComponent as N, createElementBlock as be, openBlock as le, createElementVNode as o, createCommentVNode as de, createVNode as e, withCtx as z, createBlock as $e, unref as L, toDisplayString as me, onBeforeUnmount as Ze, createTextVNode as qe, onMounted as He, nextTick as We, withDirectives as Q, vShow as pe, renderSlot as we, isRef as De, vModelRadio as Ve } from "vue";
2
+ import { U as Ke, r as Re, s as Le, u as Qe, a as et, W as tt } from "./useRayCaster-D0_7oJan.js";
3
+ import { u as Je, a as lt, b as ot, S as E } from "./iconfont-ljBfzBSE.js";
4
+ import "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-DIMJusrg.js";
5
+ import { E as G, a9 as nt, c as at, a as st, aM as it, ao as rt } from "./index-DV_ZZQBO.js";
6
+ import "./index.vue_vue_type_style_index_1_lang-D5Hjs-g0.js";
7
+ import "./index-BHtNKL1L.js";
8
+ import { _ as ae, s as ut } from "./index-BMMYAqF1.js";
9
+ import "./index.vue_vue_type_style_index_1_lang-hBa3nAgx.js";
10
+ import { m as Ae, T as ke, V as O, k as te, l as ct, e as ye, n as pt, o as dt, i as mt, L as vt, p as ft, q as gt, r as ht, s as bt, t as yt, u as _t } from "./three-viewport-gizmo-BHznJ6W3.js";
11
+ import "./index-CbDu4gfZ.js";
12
+ import { f as wt, a as Ct } from "./animationData-GqECkAbz.js";
13
+ import { _ as Ue } from "./_plugin-vue_export-helper-CHgC5LLL.js";
14
+ import { U as Pt, J as kt } from "./urdfTree-BuTtRGdl.js";
15
+ const ee = 1e-3, se = ct.degToRad, Ee = new pt({
16
+ // 灰色
17
+ color: 13421772,
18
+ metalness: 0.3,
19
+ roughness: 0.6,
20
+ side: mt
21
+ });
22
+ function xt(P = 5e-3, f = 64) {
23
+ const x = new Ae([new O(0, 0, 0), new O(0, 0, 0)]), i = new ke(x, f, P, 16, !1), C = Ee;
24
+ return new ye(i, C);
25
+ }
26
+ const Ge = (P) => P.reduce((f, x) => {
27
+ let i = 0;
28
+ const C = x.Y ?? 0, D = x.C ?? 0, v = x.R ?? 0;
29
+ return C > 0 && (i += C), D > 0 && v > 0 && (i += v * se(D)), f + i;
30
+ }, 0), Ie = (P) => {
31
+ const f = [], x = P.Y ?? 0, i = P.B ?? 0, C = P.C ?? 0, D = P.R ?? 0, v = {
32
+ pos: new O(0, 0, 0),
33
+ localY: new O(0, 1, 0),
34
+ localX: new O(1, 0, 0),
35
+ localZ: new O(0, 0, 1)
36
+ };
37
+ if (!x && !C) return f;
38
+ if (f.push(v.pos.clone()), i !== 0) {
39
+ const M = new te().makeRotationAxis(v.localY, se(i));
40
+ v.localX.applyMatrix4(M), v.localZ.applyMatrix4(M);
41
+ }
42
+ if (x > 0 && (v.pos.add(v.localY.clone().multiplyScalar(x * ee)), f.push(v.pos.clone())), C > 0 && D > 0) {
43
+ const M = se(C), R = D * ee, p = v.pos.clone().add(v.localX.clone().multiplyScalar(-R)), u = Math.max(16, Math.ceil(C / 5));
44
+ for (let b = 1; b <= u; b++) {
45
+ const a = M * b / u, y = new te().makeRotationAxis(v.localZ, a), _ = v.localX.clone().multiplyScalar(R).applyMatrix4(y), g = p.clone().add(_);
46
+ f.push(g);
47
+ }
48
+ }
49
+ return f;
50
+ };
51
+ function Tt(P, f) {
52
+ const x = new dt();
53
+ x.name = "CompletePipe";
54
+ const i = {
55
+ pos: new O(0, 0, 0),
56
+ localX: new O(1, 0, 0),
57
+ localY: new O(0, 1, 0),
58
+ localZ: new O(0, 0, 1)
59
+ };
60
+ let C = 0, D = 1;
61
+ for (let v = 0; v < P.length; v++) {
62
+ const M = P[v], R = M.Y ?? 0, p = M.B ?? 0, u = M.C ?? 0, b = M.R ?? 0;
63
+ if (p !== 0) {
64
+ const a = new te().makeRotationAxis(i.localY, se(p));
65
+ i.localX.applyMatrix4(a), i.localZ.applyMatrix4(a);
66
+ }
67
+ if (R > 0) {
68
+ const a = i.pos.clone();
69
+ i.pos.add(i.localY.clone().multiplyScalar(R * ee));
70
+ const y = i.pos.clone(), r = Dt(a, y, f * ee);
71
+ r.userData = {
72
+ segmentType: "straight",
73
+ segmentIndex: C,
74
+ frameIndex: v,
75
+ length: R,
76
+ frame: { Y: R, B: p, C: u, R: b }
77
+ }, r.name = `直段_${C}`, x.add(r);
78
+ const _ = a.clone();
79
+ Mt(x, D, _, f * ee), C++;
80
+ }
81
+ if (u > 0 && b > 0) {
82
+ const a = se(u), y = b * ee, r = [];
83
+ r.push(i.pos.clone());
84
+ const _ = i.pos.clone().add(i.localX.clone().multiplyScalar(-y)), g = Math.max(16, Math.ceil(u / 5));
85
+ for (let V = 1; V <= g; V++) {
86
+ const Z = a * V / g, S = new te().makeRotationAxis(i.localZ, Z), I = i.localX.clone().multiplyScalar(y).applyMatrix4(S), oe = _.clone().add(I);
87
+ r.push(oe);
88
+ }
89
+ const T = Vt(r, f * ee);
90
+ T.userData = {
91
+ segmentType: "bend",
92
+ segmentIndex: C,
93
+ frameIndex: v,
94
+ angle: u,
95
+ radius: b,
96
+ centerPoint: _.toArray(),
97
+ frame: { Y: R, B: p, C: u, R: b }
98
+ }, T.name = `弯段_${C}`, x.add(T), Math.floor(r.length / 2), r[0], i.pos = r[r.length - 1].clone();
99
+ const m = new te().makeRotationAxis(i.localZ, a);
100
+ i.localY.applyMatrix4(m), i.localX.applyMatrix4(m), C++, D++;
101
+ }
102
+ }
103
+ return x;
104
+ }
105
+ function Mt(P, f, x, i) {
106
+ const C = new O(0, i * 2, i * 5), D = x.clone().add(C), v = [x, D], M = new ft().setFromPoints(v), R = new gt({
107
+ color: 16711680,
108
+ dashSize: i * 0.5,
109
+ gapSize: i * 0.3,
110
+ linewidth: 1
111
+ }), p = new ht(M, R);
112
+ p.computeLineDistances(), P.add(p);
113
+ const u = document.createElement("canvas"), b = u.getContext("2d");
114
+ u.width = 128, u.height = 128, b.clearRect(0, 0, 128, 128), b.fillStyle = "#FF0000", b.font = "bold 80px Arial", b.textAlign = "center", b.textBaseline = "middle", b.fillText(f.toString(), 64, 64);
115
+ const a = new bt(u), y = new yt({
116
+ map: a,
117
+ transparent: !0,
118
+ depthTest: !1,
119
+ depthWrite: !1
120
+ }), r = new _t(y), _ = i * 3;
121
+ r.scale.set(_, _, 1), r.position.copy(D), r.name = `Label_${f}`, r.userData = { labelNumber: f }, P.add(r);
122
+ }
123
+ function Dt(P, f, x) {
124
+ const i = new vt(P, f), C = new ke(i, 2, x, 18, !1);
125
+ return new ye(C, Ee);
126
+ }
127
+ function Vt(P, f) {
128
+ const x = new Ae(P, !1, "catmullrom", 0.01), i = new ke(x, Math.max(16, P.length * 2), f, 18, !1);
129
+ return new ye(i, Ee);
130
+ }
131
+ function Se(P, f, x, i, C, D = 0) {
132
+ let v = f.slice(0, C + 1);
133
+ const M = f[C + 1];
134
+ if (M && D > 0) {
135
+ const r = {
136
+ ...M,
137
+ // 根据插值因子计算当前的弯曲角度C,实现从0到目标角度的平滑过渡
138
+ B: (M.B ?? 0) * D,
139
+ // 根据插值因子计算当前的弯曲角度C,实现从0到目标角度的平滑过渡
140
+ C: (M.C ?? 0) * D
141
+ };
142
+ v.push(r);
143
+ }
144
+ const R = Ge(v), p = Math.max(0, x - R), u = [];
145
+ u.push(new O(0, 0, 0));
146
+ const b = new O(0, p * ee, 0);
147
+ p > 0 && u.push(b);
148
+ let a = {
149
+ pos: b.clone(),
150
+ localY: new O(0, 1, 0),
151
+ localX: new O(1, 0, 0),
152
+ localZ: new O(0, 0, 1)
153
+ };
154
+ const y = [];
155
+ for (let r = v.length - 1; r >= 0; r--) {
156
+ const _ = v[r], g = Ie(_);
157
+ if (g.length > 0) {
158
+ const T = g.map((S) => {
159
+ const $ = S.clone(), I = new te();
160
+ return I.makeBasis(a.localX, a.localY, a.localZ), $.applyMatrix4(I), $.add(a.pos);
161
+ });
162
+ y.push(T);
163
+ const m = T[T.length - 1];
164
+ a.pos = m.clone();
165
+ const V = _.B ?? 0, Z = _.C ?? 0;
166
+ if (V !== 0) {
167
+ const S = new te().makeRotationAxis(a.localY, se(V));
168
+ a.localX.applyMatrix4(S), a.localZ.applyMatrix4(S);
169
+ }
170
+ if (Z > 0) {
171
+ const S = se(Z), $ = new te().makeRotationAxis(a.localZ, S);
172
+ a.localY.applyMatrix4($), a.localX.applyMatrix4($);
173
+ }
174
+ }
175
+ }
176
+ for (const r of y)
177
+ r.length > 1 && u.push(...r.slice(1));
178
+ u.length < 2 && u.push(new O(0, 1e-3, 0));
179
+ try {
180
+ const r = new Ae(u, !1, "catmullrom", 0.01), _ = new ke(r, Math.max(2, u.length * 4), i * ee, 18, !1);
181
+ P.geometry.dispose(), P.geometry = _;
182
+ } catch (r) {
183
+ console.error("管件更新失败", r);
184
+ }
185
+ }
186
+ function Xe(P, f, x, i = 0) {
187
+ let C = P.slice(0, x + 1);
188
+ const D = P[x + 1];
189
+ if (D && i > 0) {
190
+ const a = {
191
+ ...D,
192
+ // 根据插值因子计算当前的弯曲角度C,实现从0到目标角度的平滑过渡
193
+ B: (D.B ?? 0) * i,
194
+ // 根据插值因子计算当前的弯曲角度C,实现从0到目标角度的平滑过渡
195
+ C: (D.C ?? 0) * i
196
+ };
197
+ C.push(a);
198
+ }
199
+ const v = Ge(C), M = Math.max(0, f - v), R = [];
200
+ R.push(new O(0, 0, 0));
201
+ const p = new O(0, M * ee, 0);
202
+ M > 0 && R.push(p);
203
+ let u = {
204
+ pos: p.clone(),
205
+ localY: new O(0, 1, 0),
206
+ localX: new O(1, 0, 0),
207
+ localZ: new O(0, 0, 1)
208
+ };
209
+ const b = [];
210
+ for (let a = C.length - 1; a >= 0; a--) {
211
+ const y = C[a], r = Ie(y);
212
+ if (r.length > 0) {
213
+ const _ = r.map((V) => {
214
+ const Z = V.clone(), S = new te();
215
+ return S.makeBasis(u.localX, u.localY, u.localZ), Z.applyMatrix4(S), Z.add(u.pos);
216
+ });
217
+ b.push(_);
218
+ const g = _[_.length - 1];
219
+ u.pos = g.clone();
220
+ const T = y.B ?? 0, m = y.C ?? 0;
221
+ if (T !== 0) {
222
+ const V = new te().makeRotationAxis(u.localY, se(T));
223
+ u.localX.applyMatrix4(V), u.localZ.applyMatrix4(V);
224
+ }
225
+ if (m > 0) {
226
+ const V = se(m), Z = new te().makeRotationAxis(u.localZ, V);
227
+ u.localY.applyMatrix4(Z), u.localX.applyMatrix4(Z);
228
+ }
229
+ }
230
+ }
231
+ for (const a of b)
232
+ a.length > 1 && R.push(...a.slice(1));
233
+ return R.length < 2 && R.push(new O(0, 1e-3, 0)), R;
234
+ }
235
+ function Ce(P, f, x, i, C, D, v, M = 0, R = 0) {
236
+ const p = C - R, u = Xe(i, p, v, M);
237
+ let a = Xe(x, R, v, M);
238
+ a.forEach((r) => r.y = -r.y), a.reverse();
239
+ const y = [...a, ...u];
240
+ try {
241
+ const r = new Ae(y, !1, "catmullrom", 0.01), _ = new ke(r, Math.max(2, y.length * 4), D * ee, 18, !1);
242
+ f.geometry.dispose(), P.geometry.dispose(), f.parent && f.parent.remove(f), P.geometry = _;
243
+ } catch (r) {
244
+ console.error("管件更新失败", r);
245
+ }
246
+ }
247
+ const Rt = { class: "panel-content" }, St = { class: "action-bar" }, $t = {
248
+ key: 0,
249
+ class: "animation-controls"
250
+ }, At = { class: "control-row" }, zt = { class: "control-row" }, Ft = { class: "frame-info" }, Yt = { class: "control-row" }, Bt = { class: "progress-bar" }, Lt = { class: "dialog-footer" }, jt = /* @__PURE__ */ je({
251
+ __name: "animationPanel",
252
+ props: {
253
+ model: {},
254
+ threeData: {}
255
+ },
256
+ emits: ["getThreeData"],
257
+ setup(P, { expose: f, emit: x }) {
258
+ const i = P, C = x, D = h(), v = h(), M = h();
259
+ re(() => i.threeData, (n) => {
260
+ const l = n == null ? void 0 : n.data;
261
+ M.value = l == null ? void 0 : l.type;
262
+ }, {
263
+ immediate: !0
264
+ });
265
+ const R = async () => {
266
+ if (!sessionStorage.getItem("systemKey")) {
267
+ C("getThreeData");
268
+ return;
269
+ }
270
+ let l = {};
271
+ M.value === Re.SINGLE && (l = await wt()), M.value === Re.DOUBLE && (l = await Ct());
272
+ const {
273
+ initialPipeLength: c = 0,
274
+ pipeRadius: k = 0,
275
+ clampLength: d = 0,
276
+ animationData: s
277
+ } = l;
278
+ S.value = c, $.value = k, I.value = d, D.value = s;
279
+ const t = at(D.value);
280
+ p.value = (t == null ? void 0 : t["输出(动画数据)"]) || [];
281
+ let U = (t == null ? void 0 : t["输出(动画数据)Content"]) ?? [];
282
+ U && (v.value = U);
283
+ }, p = h([]), u = h(!1), b = h(""), a = h(!1), y = h(0), r = h(0), _ = h(1e3), g = h(null);
284
+ let T = !1;
285
+ const m = he(null), V = he(null), Z = he(null), S = h(1302), $ = h(12.5), I = h(30), oe = h([]), j = h(null), w = Pe(() => i.model ? Object.values(i.model.joints).filter((n) => n.jointType !== "fixed").map((n) => n.name) : []), q = h(["Y", "B", "C", "R"]), J = Pe(() => [...w.value, ...q.value]), H = Pe(() => J.value.length > 0 ? `请按以下格式粘贴数据 (第一行为表头,使用 Tab 分隔):
286
+ ${J.value.join(" ")}
287
+ 0 0 0 ...
288
+ 1 2 3 ...` : "请先加载模型。"), K = (n, l) => {
289
+ if (!l)
290
+ return null;
291
+ const c = n.joints[l];
292
+ if (!c)
293
+ return console.warn(`在模型中未找到名为 '${l}' 的 Joint`), null;
294
+ let k = null;
295
+ return c.traverse((d) => {
296
+ d instanceof ye && !k && (k = d);
297
+ }), k || console.warn(`在 Joint '${l}' 中未找到可用的 Mesh 对象`), k;
298
+ }, ie = (n, l) => {
299
+ if (!l)
300
+ return null;
301
+ const c = n.joints[l];
302
+ return c || (console.warn(`在模型中未找到名为 '${l}' 的 Joint`), console.log("可用的链接:", Object.keys(n.links)), null);
303
+ }, ne = () => {
304
+ Z.value && (Z.value.visible = !0), m.value && m.value.parent && m.value.parent.remove(m.value), Z.value = null, m.value = null, V.value = null;
305
+ };
306
+ re(J, (n, l) => {
307
+ if (JSON.stringify(n) !== JSON.stringify(l))
308
+ if (n.length > 0) {
309
+ const c = n.reduce((k, d) => (k[d] = "0", k), {});
310
+ p.value = [c];
311
+ } else
312
+ p.value = [];
313
+ }, { immediate: !0 });
314
+ const W = h(0), X = (n) => {
315
+ W.value = n;
316
+ }, ue = (n, l) => {
317
+ const c = ie(n, l), k = xt();
318
+ k.visible = !1, c == null || c.add(k), X(W.value + 1);
319
+ };
320
+ re(() => i.model, (n) => {
321
+ ne(), n ? (g.value = new Ke(n), oe.value = Object.keys(n.links), j.value = "Pipe_Joint", ue(n, j.value), Te()) : (g.value = null, oe.value = [], j.value = null);
322
+ }, { immediate: !0 }), re([j, I, W], ([n, l]) => {
323
+ if (ne(), i.model && n) {
324
+ const c = K(i.model, n);
325
+ if (console.log(c, "meshToReplace"), c && c.parent) {
326
+ Z.value = c;
327
+ const k = new ye(
328
+ c.geometry.clone(),
329
+ c.material
330
+ );
331
+ if (k.name = "managed_pipe_clone", c.parent.add(k), k.position.copy(c.position), k.rotation.copy(c.rotation), k.scale.copy(c.scale), c.visible = !1, M.value === Re.SINGLE && (k.position.y -= l * 1e-3), m.value = k, M.value === Re.DOUBLE) {
332
+ const d = new ye(
333
+ c.geometry.clone(),
334
+ c.material
335
+ );
336
+ d.name = "managed_oppsite_pipe_clone", d.position.copy(c.position), d.rotation.copy(c.rotation), d.scale.copy(c.scale), c.parent.add(d), V.value = d;
337
+ }
338
+ m.value && V.value && Ce(
339
+ m.value,
340
+ V.value,
341
+ [],
342
+ [],
343
+ S.value,
344
+ $.value,
345
+ 0,
346
+ 0,
347
+ I.value
348
+ );
349
+ } else
350
+ n && console.warn(`在 link '${n}' 中未找到可替换的网格或其没有父级。`);
351
+ }
352
+ });
353
+ const F = () => p.value.map((n) => ({
354
+ Y: parseFloat(n.Y) || 0,
355
+ B: parseFloat(n.B) || 0,
356
+ C: parseFloat(n.C) || 0,
357
+ R: parseFloat(n.R) || 0
358
+ })), ve = () => {
359
+ const n = [], l = [];
360
+ return p.value.forEach((c) => {
361
+ const { Y1: k, B1: d, C1: s, R1: t, Y2: U, B2: Y, C2: B, R2: A } = c;
362
+ n.push({
363
+ Y: parseFloat(k) || 0,
364
+ B: parseFloat(d) || 0,
365
+ C: parseFloat(s) || 0,
366
+ R: parseFloat(t) || 0
367
+ }), l.push({
368
+ Y: parseFloat(U) || 0,
369
+ B: parseFloat(Y) || 0,
370
+ C: parseFloat(B) || 0,
371
+ R: parseFloat(A) || 0
372
+ });
373
+ }), {
374
+ posPipeYbcr: n,
375
+ negPipeYbcr: l
376
+ };
377
+ }, _e = (n) => {
378
+ if (n < 0 || n >= p.value.length) {
379
+ console.error(`帧索引 ${n} 超出范围`);
380
+ return;
381
+ }
382
+ const l = p.value[n];
383
+ if (console.log(`应用第 ${n} 帧数据 ${l}`), y.value = n, g.value) {
384
+ const c = {};
385
+ w.value.forEach((k) => {
386
+ const d = parseFloat(l[k]);
387
+ isNaN(d) || (c[k] = d);
388
+ }), g.value.setJointAngles(c);
389
+ }
390
+ if (m.value && V.value) {
391
+ const c = ve();
392
+ console.log("ybcr数据:", c), Ce(
393
+ m.value,
394
+ V.value,
395
+ c.posPipeYbcr,
396
+ c.negPipeYbcr,
397
+ S.value,
398
+ $.value,
399
+ n,
400
+ 0,
401
+ I.value
402
+ );
403
+ return;
404
+ }
405
+ if (m.value) {
406
+ const c = F();
407
+ console.log("ybcr数据:", c), Se(
408
+ m.value,
409
+ c,
410
+ S.value,
411
+ $.value,
412
+ n,
413
+ 0
414
+ );
415
+ return;
416
+ }
417
+ }, xe = async () => {
418
+ if (p.value.length === 0) {
419
+ G.error("无法播放动画:无数据");
420
+ return;
421
+ }
422
+ a.value = !0, T = !1;
423
+ const n = m.value ? F() : [];
424
+ try {
425
+ for (let l = y.value + 1; l < p.value.length && !T; l++) {
426
+ y.value = l;
427
+ const c = p.value[l], k = {};
428
+ g.value && w.value.forEach((d) => {
429
+ const s = parseFloat(c[d]);
430
+ isNaN(s) || (k[d] = s);
431
+ }), g.value ? await g.value.animateToState(
432
+ k,
433
+ _.value,
434
+ (d) => {
435
+ if (r.value = (l + d) / p.value.length * 100, m.value && V.value) {
436
+ const s = ve();
437
+ console.log("ybcr数据:", n), Ce(
438
+ m.value,
439
+ V.value,
440
+ s.posPipeYbcr,
441
+ s.negPipeYbcr,
442
+ S.value,
443
+ $.value,
444
+ l - 1,
445
+ d,
446
+ I.value
447
+ );
448
+ } else m.value && Se(m.value, n, S.value, $.value, l - 1, d);
449
+ }
450
+ ) : m.value && V.value ? await new Promise((d) => {
451
+ const s = performance.now();
452
+ let t;
453
+ const U = (Y) => {
454
+ if (T) {
455
+ cancelAnimationFrame(t), d();
456
+ return;
457
+ }
458
+ const B = Y - s, A = Math.min(B / _.value, 1);
459
+ r.value = (l + A) / p.value.length * 100;
460
+ const Oe = ve();
461
+ Ce(
462
+ m.value,
463
+ V.value,
464
+ Oe.posPipeYbcr,
465
+ Oe.negPipeYbcr,
466
+ S.value,
467
+ $.value,
468
+ l - 1,
469
+ A,
470
+ I.value
471
+ ), A < 1 ? t = requestAnimationFrame(U) : d();
472
+ };
473
+ t = requestAnimationFrame(U);
474
+ }) : m.value ? await new Promise((d) => {
475
+ const s = performance.now();
476
+ let t;
477
+ const U = (Y) => {
478
+ if (T) {
479
+ cancelAnimationFrame(t), d();
480
+ return;
481
+ }
482
+ const B = Y - s, A = Math.min(B / _.value, 1);
483
+ r.value = (l + A) / p.value.length * 100, Se(m.value, n, S.value, $.value, l - 1, A), A < 1 ? t = requestAnimationFrame(U) : d();
484
+ };
485
+ t = requestAnimationFrame(U);
486
+ }) : (await new Promise((d) => setTimeout(d, _.value)), r.value = (l + 1) / p.value.length * 100);
487
+ }
488
+ T || G.success("动画播放完成");
489
+ } catch (l) {
490
+ console.error("动画播放出错:", l), G.error("动画播放出错");
491
+ } finally {
492
+ a.value = !1, r.value = 0;
493
+ }
494
+ }, ce = () => {
495
+ T = !0, a.value = !1, r.value = 0, G.info("动画已停止");
496
+ }, Te = () => {
497
+ if (g.value && g.value.resetToZero(), console.log("pipeMesh.value", m.value), m.value && V.value) {
498
+ const n = ve();
499
+ Ce(
500
+ m.value,
501
+ V.value,
502
+ n.posPipeYbcr,
503
+ n.negPipeYbcr,
504
+ S.value,
505
+ $.value,
506
+ -1,
507
+ 0,
508
+ I.value
509
+ );
510
+ } else if (m.value) {
511
+ const n = F();
512
+ Se(
513
+ m.value,
514
+ n,
515
+ S.value,
516
+ $.value,
517
+ -1,
518
+ 0
519
+ );
520
+ }
521
+ y.value = 0, G.success("机器人和管件已重置");
522
+ }, ze = () => {
523
+ console.log("当前管件Mesh:", m.value);
524
+ }, Fe = (n) => {
525
+ a.value && ce(), _e(n);
526
+ }, Ye = () => {
527
+ a.value && ce(), !(y.value + 1 >= p.value.length) && _e(y.value + 1);
528
+ }, Be = () => {
529
+ a.value && ce(), y.value !== 0 && _e(y.value - 1);
530
+ }, Me = async () => {
531
+ if (J.value.length === 0) {
532
+ G.warning("没有可导出的表头");
533
+ return;
534
+ }
535
+ const n = J.value.join(" ");
536
+ try {
537
+ await navigator.clipboard.writeText(n), G.success("表头已成功复制到剪贴板!");
538
+ } catch (l) {
539
+ console.error("复制失败:", l), G.error("复制失败,请检查浏览器权限或手动复制。");
540
+ }
541
+ }, fe = () => {
542
+ if (!b.value.trim()) {
543
+ G.warning("导入内容不能为空");
544
+ return;
545
+ }
546
+ const n = b.value.trim().split(`
547
+ `).filter((s) => s.trim() !== "");
548
+ if (n.length < 2) {
549
+ G.error("导入数据至少需要包含表头行和一行数据");
550
+ return;
551
+ }
552
+ const l = n[0].split(" ").map((s) => s.trim()), c = {};
553
+ if (l.forEach((s, t) => {
554
+ J.value.includes(s) && (c[t] = s);
555
+ }), Object.keys(c).length === 0) {
556
+ G.error("没有找到匹配的表头,请检查表头名称是否正确");
557
+ return;
558
+ }
559
+ const d = n.slice(1).map((s) => {
560
+ const t = s.split(" "), U = {};
561
+ return J.value.forEach((Y) => {
562
+ U[Y] = "0";
563
+ }), Object.entries(c).forEach(([Y, B]) => {
564
+ const A = t[parseInt(Y)];
565
+ A !== void 0 && A.trim() !== "" && (U[B] = A.trim());
566
+ }), U;
567
+ });
568
+ d.length > 0 ? (p.value = d, G.success(`成功导入 ${d.length} 行数据!`), u.value = !1, b.value = "") : G.error("未能解析到有效数据,请检查格式。");
569
+ }, ge = (n) => `第 ${n + 1} 帧`;
570
+ return Ne(() => {
571
+ ne(), T = !0;
572
+ }), f({ playAnimation: xe, stopAnimation: ce, forwardFrame: Ye, backwardFrame: Be }), (n, l) => {
573
+ const c = N("el-icon"), k = N("el-input-number"), d = N("el-form-item"), s = N("el-form"), t = N("el-slider"), U = N("el-progress"), Y = N("el-input"), B = N("el-dialog");
574
+ return le(), be("div", Rt, [
575
+ o("div", St, [
576
+ e(ae, {
577
+ onClick: R,
578
+ modelValue: "获取数据"
579
+ }),
580
+ e(ae, {
581
+ onClick: Me,
582
+ disabled: J.value.length === 0,
583
+ modelValue: "导出表头"
584
+ }, null, 8, ["disabled"]),
585
+ e(ae, {
586
+ modelValue: "播放",
587
+ onClick: xe,
588
+ disabled: p.value.length === 0 || a.value,
589
+ buttonType: "primary"
590
+ }, {
591
+ default: z(() => [
592
+ a.value ? (le(), $e(c, {
593
+ key: 0,
594
+ class: "is-loading"
595
+ }, {
596
+ default: z(() => [
597
+ e(L(nt))
598
+ ]),
599
+ _: 1
600
+ })) : de("", !0)
601
+ ]),
602
+ _: 1
603
+ }, 8, ["disabled"]),
604
+ e(ae, {
605
+ onClick: ce,
606
+ modelValue: "停止",
607
+ buttonType: "danger"
608
+ }),
609
+ e(ae, {
610
+ onClick: Te,
611
+ modelValue: "重置",
612
+ buttonType: "primary"
613
+ }),
614
+ e(ae, {
615
+ onClick: ze,
616
+ modelValue: "测试功能",
617
+ buttonType: "primary"
618
+ })
619
+ ]),
620
+ p.value.length > 0 ? (le(), be("div", $t, [
621
+ o("div", At, [
622
+ e(s, {
623
+ "label-width": "auto",
624
+ style: { width: "100%" }
625
+ }, {
626
+ default: z(() => [
627
+ e(d, {
628
+ label: "帧间隔 (ms):",
629
+ prop: "frameDuration"
630
+ }, {
631
+ default: z(() => [
632
+ e(k, {
633
+ modelValue: _.value,
634
+ "onUpdate:modelValue": l[0] || (l[0] = (A) => _.value = A),
635
+ min: 100,
636
+ max: 5e3,
637
+ step: 100,
638
+ style: { width: "100%" }
639
+ }, null, 8, ["modelValue"])
640
+ ]),
641
+ _: 1
642
+ }),
643
+ e(d, {
644
+ label: "管件总长 (mm):",
645
+ prop: "initialPipeLength"
646
+ }, {
647
+ default: z(() => [
648
+ e(k, {
649
+ modelValue: S.value,
650
+ "onUpdate:modelValue": l[1] || (l[1] = (A) => S.value = A),
651
+ min: 0,
652
+ style: { width: "100%" }
653
+ }, null, 8, ["modelValue"])
654
+ ]),
655
+ _: 1
656
+ }),
657
+ e(d, {
658
+ label: "管件半径 (mm):",
659
+ prop: "pipeRadius"
660
+ }, {
661
+ default: z(() => [
662
+ e(k, {
663
+ modelValue: $.value,
664
+ "onUpdate:modelValue": l[2] || (l[2] = (A) => $.value = A),
665
+ min: 0,
666
+ style: { width: "100%" }
667
+ }, null, 8, ["modelValue"])
668
+ ]),
669
+ _: 1
670
+ }),
671
+ e(d, {
672
+ label: "夹持长度 (mm):",
673
+ prop: "clampLength"
674
+ }, {
675
+ default: z(() => [
676
+ e(k, {
677
+ modelValue: I.value,
678
+ "onUpdate:modelValue": l[3] || (l[3] = (A) => I.value = A),
679
+ min: 0,
680
+ style: { width: "100%" }
681
+ }, null, 8, ["modelValue"])
682
+ ]),
683
+ _: 1
684
+ })
685
+ ]),
686
+ _: 1
687
+ })
688
+ ]),
689
+ l[10] || (l[10] = o("div", { class: "control-row" }, [
690
+ o("label", null, "管件 Mesh:")
691
+ ], -1)),
692
+ o("div", zt, [
693
+ l[8] || (l[8] = o("label", null, "当前帧:", -1)),
694
+ o("span", Ft, me(y.value + 1) + " / " + me(p.value.length), 1)
695
+ ]),
696
+ o("div", Yt, [
697
+ l[9] || (l[9] = o("label", null, "动画进度:", -1)),
698
+ e(t, {
699
+ modelValue: y.value,
700
+ "onUpdate:modelValue": l[4] || (l[4] = (A) => y.value = A),
701
+ min: 0,
702
+ max: p.value.length > 0 ? p.value.length - 1 : 0,
703
+ step: 1,
704
+ "format-tooltip": ge,
705
+ onInput: Fe,
706
+ disabled: p.value.length === 0,
707
+ style: { "flex-grow": "1", margin: "0 10px" }
708
+ }, null, 8, ["modelValue", "max", "disabled"])
709
+ ]),
710
+ o("div", Bt, [
711
+ e(U, {
712
+ percentage: r.value,
713
+ "show-text": !1,
714
+ "stroke-width": 6
715
+ }, null, 8, ["percentage"])
716
+ ])
717
+ ])) : de("", !0),
718
+ e(B, {
719
+ modelValue: u.value,
720
+ "onUpdate:modelValue": l[7] || (l[7] = (A) => u.value = A),
721
+ title: "导入数据",
722
+ width: "500px"
723
+ }, {
724
+ footer: z(() => [
725
+ o("span", Lt, [
726
+ e(ae, {
727
+ modelValue: "取消",
728
+ onClick: l[6] || (l[6] = (A) => u.value = !1)
729
+ }),
730
+ e(ae, {
731
+ modelValue: "确认导入",
732
+ onClick: fe,
733
+ type: "primary"
734
+ })
735
+ ])
736
+ ]),
737
+ default: z(() => [
738
+ l[11] || (l[11] = o("p", { class: "import-instructions" }, " 请从Excel或csv中复制数据 (首行为表头, Tab分隔) ", -1)),
739
+ e(Y, {
740
+ modelValue: b.value,
741
+ "onUpdate:modelValue": l[5] || (l[5] = (A) => b.value = A),
742
+ type: "textarea",
743
+ rows: 10,
744
+ placeholder: H.value
745
+ }, null, 8, ["modelValue", "placeholder"])
746
+ ]),
747
+ _: 1,
748
+ __: [11]
749
+ }, 8, ["modelValue"])
750
+ ]);
751
+ };
752
+ }
753
+ }), Ut = /* @__PURE__ */ Ue(jt, [["__scopeId", "data-v-5c10c71a"]]), Et = "http://139.196.154.85:20018";
754
+ function Ot(P, f = !1) {
755
+ return console.log(P, "data"), st({
756
+ url: `${Et}/api/pipeBendingTraditional/pipeAnsys/${f}`,
757
+ method: "post",
758
+ data: P
759
+ });
760
+ }
761
+ const Xt = { class: "pipe-analysis-dialog-header" }, Zt = { class: "header-right" }, Jt = { class: "pipe-analysis-dialog-body" }, Gt = { class: "panel-left" }, It = { class: "pipe-analysis-input" }, Nt = { class: "input-params" }, qt = { class: "step-label" }, Ht = { class: "button-group" }, Wt = { class: "upload-content" }, Kt = { class: "file-item" }, Qt = { key: 0 }, el = { class: "pipe-analysis-output" }, tl = { class: "ouput-params" }, ll = /* @__PURE__ */ je({
762
+ __name: "pipeAnalysisPanel",
763
+ emits: ["nodeClick", "visibleChange", "updatePosition", "updateRotation"],
764
+ setup(P, { expose: f, emit: x }) {
765
+ const i = h(null), C = he(null), {
766
+ initThreeJS: D,
767
+ handleResize: v,
768
+ cleanup: M,
769
+ clearAllModels: R,
770
+ addModelAndFit: p
771
+ } = Je(i), u = h(null), b = h({ file: null }), a = h(null), y = h(!1), r = () => {
772
+ var j;
773
+ (j = u.value) == null || j.click();
774
+ }, _ = async (j) => {
775
+ var J;
776
+ const q = (J = j.target.files) == null ? void 0 : J[0];
777
+ q && (a.value = q);
778
+ };
779
+ h("ybcr");
780
+ const g = h({
781
+ form: {},
782
+ list: [],
783
+ reverse: !1
784
+ }), T = async () => {
785
+ var j;
786
+ if (!a.value) {
787
+ G.warning("请先选择文件");
788
+ return;
789
+ }
790
+ try {
791
+ y.value = !0;
792
+ const w = new FormData();
793
+ w.set("file", a.value);
794
+ let q = !1;
795
+ ((j = g.value) == null ? void 0 : j.reverse) == !0 && (q = !0);
796
+ const { data: { data: J } = {} } = await Ot(w, q);
797
+ m(J), G.success("提交成功");
798
+ } catch (w) {
799
+ G.error("提交失败,请重试"), console.error("提交错误:", w);
800
+ } finally {
801
+ y.value = !1;
802
+ }
803
+ }, m = (j) => {
804
+ const { length: w, outerDiameter: q, innerDiameter: J, thickness: H, ybcrList: K } = j || {};
805
+ g.value.form = {
806
+ length: w,
807
+ outerDiameter: q,
808
+ innerDiameter: J,
809
+ thickness: H
810
+ }, g.value.list = K;
811
+ }, V = () => {
812
+ const { form: j, list: w } = g.value, {
813
+ outerDiameter: q
814
+ } = j, J = q / 2, H = w == null ? void 0 : w.map((ie) => {
815
+ const { y: ne, b: W, c: X, r: ue } = ie;
816
+ return {
817
+ Y: ne,
818
+ B: W,
819
+ C: X,
820
+ R: ue
821
+ };
822
+ });
823
+ R();
824
+ const K = Tt(H, J);
825
+ p(K);
826
+ }, Z = h(!1), S = () => {
827
+ const j = Z.value;
828
+ Z.value = !j;
829
+ }, $ = h(!1), I = () => {
830
+ $.value = !1;
831
+ }, oe = () => {
832
+ $.value = !0;
833
+ };
834
+ return re(() => g, () => {
835
+ V();
836
+ }, {
837
+ deep: !0
838
+ }), re(() => i, () => {
839
+ try {
840
+ if (C.value)
841
+ return;
842
+ D(), window.addEventListener("resize", v);
843
+ } catch (j) {
844
+ console.error("Three.js 初始化失败:", j), G.error("渲染引擎初始化失败!");
845
+ }
846
+ }, {
847
+ deep: !0
848
+ }), Ze(() => {
849
+ window.removeEventListener("resize", v), M();
850
+ }), f({ openDialog: oe }), (j, w) => {
851
+ const q = N("el-icon"), J = N("el-button"), H = N("el-form-item"), K = N("el-form"), ie = N("el-option"), ne = N("el-select"), W = N("el-input"), X = N("el-table-column"), ue = N("el-table");
852
+ return le(), $e(ut, {
853
+ class: "pipe-analysis-dialog",
854
+ visible: $.value,
855
+ onBeforeDestroy: j.onDestroy,
856
+ showClose: !1,
857
+ fullScreen: Z.value
858
+ }, {
859
+ header: z(() => [
860
+ o("div", Xt, [
861
+ w[5] || (w[5] = o("div", {
862
+ class: "header-left",
863
+ title: "管件解析"
864
+ }, " 管件解析 ", -1)),
865
+ o("div", Zt, [
866
+ e(q, null, {
867
+ default: z(() => [
868
+ e(L(it), { onClick: S })
869
+ ]),
870
+ _: 1
871
+ }),
872
+ e(q, null, {
873
+ default: z(() => [
874
+ e(L(rt), { onClick: I })
875
+ ]),
876
+ _: 1
877
+ })
878
+ ])
879
+ ])
880
+ ]),
881
+ default: z(() => [
882
+ o("div", Jt, [
883
+ o("div", Gt, [
884
+ o("div", It, [
885
+ w[8] || (w[8] = o("span", { class: "item-view-group" }, [
886
+ o("span", { class: "group-name-wrap" }, "输入")
887
+ ], -1)),
888
+ o("div", Nt, [
889
+ e(K, {
890
+ model: b.value,
891
+ "label-width": "auto",
892
+ "label-position": "top"
893
+ }, {
894
+ default: z(() => [
895
+ e(H, { label: "step文件" }, {
896
+ label: z(() => [
897
+ o("div", qt, [
898
+ w[7] || (w[7] = o("div", null, " step文件 ", -1)),
899
+ o("div", Ht, [
900
+ e(ae, {
901
+ emptyColor: !0,
902
+ onClickTrigger: r,
903
+ modelValue: "上传"
904
+ }),
905
+ o("input", {
906
+ type: "file",
907
+ ref_key: "fileInput",
908
+ ref: u,
909
+ accept: ".step,.csv",
910
+ onChange: _,
911
+ style: { display: "none" }
912
+ }, null, 544),
913
+ e(J, {
914
+ type: "primary",
915
+ onClick: T,
916
+ loading: y.value,
917
+ disabled: !a.value
918
+ }, {
919
+ default: z(() => w[6] || (w[6] = [
920
+ qe(" 解析 ")
921
+ ])),
922
+ _: 1,
923
+ __: [6]
924
+ }, 8, ["loading", "disabled"])
925
+ ])
926
+ ])
927
+ ]),
928
+ default: z(() => {
929
+ var F;
930
+ return [
931
+ o("div", Wt, [
932
+ o("div", Kt, [
933
+ a.value ? (le(), be("div", Qt, me((F = a.value) == null ? void 0 : F.name), 1)) : de("", !0)
934
+ ])
935
+ ])
936
+ ];
937
+ }),
938
+ _: 1
939
+ })
940
+ ]),
941
+ _: 1
942
+ }, 8, ["model"])
943
+ ])
944
+ ]),
945
+ o("div", el, [
946
+ e(H, { label: "加工方向" }, {
947
+ default: z(() => [
948
+ e(ne, {
949
+ modelValue: g.value.reverse,
950
+ "onUpdate:modelValue": w[0] || (w[0] = (F) => g.value.reverse = F),
951
+ placeholder: "请选择加工方向"
952
+ }, {
953
+ default: z(() => [
954
+ e(ie, {
955
+ label: "正向",
956
+ value: !1
957
+ }),
958
+ e(ie, {
959
+ label: "反向",
960
+ value: !0
961
+ })
962
+ ]),
963
+ _: 1
964
+ }, 8, ["modelValue"])
965
+ ]),
966
+ _: 1
967
+ }),
968
+ w[9] || (w[9] = o("span", { class: "item-view-group" }, [
969
+ o("span", { class: "group-name-wrap" }, "输出(弯管基础参数)")
970
+ ], -1)),
971
+ o("div", tl, [
972
+ e(K, {
973
+ model: g.value.form,
974
+ "label-width": "auto",
975
+ "label-position": "top",
976
+ inline: !0
977
+ }, {
978
+ default: z(() => [
979
+ e(H, { label: "管长" }, {
980
+ default: z(() => [
981
+ e(W, {
982
+ modelValue: g.value.form.length,
983
+ "onUpdate:modelValue": w[1] || (w[1] = (F) => g.value.form.length = F)
984
+ }, null, 8, ["modelValue"])
985
+ ]),
986
+ _: 1
987
+ }),
988
+ e(H, { label: "外径" }, {
989
+ default: z(() => [
990
+ e(W, {
991
+ modelValue: g.value.form.outerDiameter,
992
+ "onUpdate:modelValue": w[2] || (w[2] = (F) => g.value.form.outerDiameter = F)
993
+ }, null, 8, ["modelValue"])
994
+ ]),
995
+ _: 1
996
+ }),
997
+ e(H, { label: "内径" }, {
998
+ default: z(() => [
999
+ e(W, {
1000
+ modelValue: g.value.form.innerDiameter,
1001
+ "onUpdate:modelValue": w[3] || (w[3] = (F) => g.value.form.innerDiameter = F)
1002
+ }, null, 8, ["modelValue"])
1003
+ ]),
1004
+ _: 1
1005
+ }),
1006
+ e(H, { label: "壁厚" }, {
1007
+ default: z(() => [
1008
+ e(W, {
1009
+ modelValue: g.value.form.thickness,
1010
+ "onUpdate:modelValue": w[4] || (w[4] = (F) => g.value.form.thickness = F)
1011
+ }, null, 8, ["modelValue"])
1012
+ ]),
1013
+ _: 1
1014
+ })
1015
+ ]),
1016
+ _: 1
1017
+ }, 8, ["model"]),
1018
+ e(ue, {
1019
+ ref: "singleTableRef",
1020
+ data: g.value.list,
1021
+ "highlight-current-rowstyle": "width: 100%"
1022
+ }, {
1023
+ default: z(() => [
1024
+ e(X, {
1025
+ type: "index",
1026
+ width: "50"
1027
+ }),
1028
+ e(X, {
1029
+ property: "y",
1030
+ label: "Y"
1031
+ }),
1032
+ e(X, {
1033
+ property: "b",
1034
+ label: "B"
1035
+ }),
1036
+ e(X, {
1037
+ property: "c",
1038
+ label: "C"
1039
+ }),
1040
+ e(X, {
1041
+ property: "r",
1042
+ label: "R"
1043
+ })
1044
+ ]),
1045
+ _: 1
1046
+ }, 8, ["data"])
1047
+ ])
1048
+ ])
1049
+ ]),
1050
+ o("div", {
1051
+ class: "panel-right",
1052
+ ref_key: "threejsContainer",
1053
+ ref: i
1054
+ }, null, 512)
1055
+ ])
1056
+ ]),
1057
+ _: 1
1058
+ }, 8, ["visible", "onBeforeDestroy", "fullScreen"]);
1059
+ };
1060
+ }
1061
+ }), ol = /* @__PURE__ */ Ue(ll, [["__scopeId", "data-v-577e5f83"]]), nl = { class: "obj-viewer-container" }, al = { class: "pipe-comparison" }, sl = {
1062
+ ref: "pipe1",
1063
+ class: "pipe-container"
1064
+ }, il = {
1065
+ ref: "pipe2",
1066
+ class: "pipe-container"
1067
+ }, rl = { class: "buttonGroup-top" }, ul = { class: "buttonGroup-topLeft" }, cl = { class: "buttonGroup-left" }, pl = { class: "buttonGroup-right" }, dl = { class: "buttonGroup-bottom" }, ml = { class: "top-panel" }, vl = { class: "panel-header" }, fl = { class: "panel-body" }, gl = { class: "left-panel" }, hl = { class: "panel-header" }, bl = { class: "panel-body" }, yl = {
1068
+ key: 1,
1069
+ class: "clipping-content"
1070
+ }, _l = { class: "radio-group" }, wl = { class: "radio-label" }, Cl = { class: "radio-label" }, Pl = { class: "radio-label" }, kl = { class: "radio-label" }, xl = { class: "right-panel" }, Tl = { class: "panel-header" }, Ml = { class: "panel-body" }, Dl = {
1071
+ key: 0,
1072
+ class: "loading-overlay"
1073
+ }, Vl = /* @__PURE__ */ je({
1074
+ __name: "threeSceneView",
1075
+ props: {
1076
+ fileBlobs: { default: () => [] },
1077
+ animationData: { default: () => ({}) },
1078
+ threeData: {}
1079
+ },
1080
+ emits: ["getAnimationData", "getThreeData"],
1081
+ setup(P, { emit: f }) {
1082
+ const x = f, i = P, C = h(Le.ROBOT), D = h(null), v = h(), M = h(!1), R = h(""), p = h(!1), u = h(""), b = h(!1), a = h(""), y = h(!1), r = h(""), _ = he(null), g = he(null), T = h(), {
1083
+ currentModels: m,
1084
+ resetView: V,
1085
+ initThreeJS: Z,
1086
+ handleResize: S,
1087
+ getThreeJSObjects: $,
1088
+ cleanup: I,
1089
+ setModels: oe,
1090
+ axesHelperVisible: j,
1091
+ toggleAxesVisibility: w,
1092
+ zoomIn: q,
1093
+ zoomOut: J
1094
+ } = Je(D), { loadSceneFromFile: H } = et(
1095
+ $,
1096
+ m,
1097
+ M,
1098
+ R
1099
+ ), { isAnimating: K, toggleAnimation: ie, stopAnimation: ne } = lt($, m), { isClipping: W, activeClippingAxis: X, toggleClipping: ue, updateClippingPlanes: F } = ot($, m), { initRaycaster: ve, selectedObject3D: _e, setSelectedObjVisible: xe, updatePosition: ce, updateRotation: Te, dispose: ze } = Qe(D, $, m), Fe = () => {
1100
+ w();
1101
+ }, Ye = Pe(() => C.value === Le.ROBOT), Be = Pe(() => C.value === Le.PIPECOMPARSION), Me = (s) => {
1102
+ var t;
1103
+ r.value = s, r.value === "弯管解析" ? (t = v.value) == null || t.openDialog() : y.value = !0;
1104
+ }, fe = (s) => {
1105
+ p.value = !0, u.value = s, s === "剖面视图" && !W.value && ue();
1106
+ }, ge = (s) => {
1107
+ b.value = !0, a.value = s, s === "动画仿真" && x("getAnimationData");
1108
+ }, n = () => {
1109
+ x("getThreeData");
1110
+ }, l = () => {
1111
+ var s;
1112
+ (s = T == null ? void 0 : T.value) == null || s.playAnimation();
1113
+ }, c = () => {
1114
+ var s;
1115
+ (s = T == null ? void 0 : T.value) == null || s.stopAnimation();
1116
+ }, k = () => {
1117
+ var s;
1118
+ (s = T == null ? void 0 : T.value) == null || s.forwardFrame();
1119
+ }, d = () => {
1120
+ var s;
1121
+ (s = T == null ? void 0 : T.value) == null || s.backwardFrame();
1122
+ };
1123
+ return re(() => i.fileBlobs, (s) => {
1124
+ if (s && s.length > 0) {
1125
+ const t = s[0];
1126
+ if (!t.name.toLowerCase().endsWith(".urdf"))
1127
+ return;
1128
+ H(t).then((U) => {
1129
+ _.value = U;
1130
+ }).catch((U) => {
1131
+ console.error("加载URDF文件时发生错误:", U), G.error("加载urdf模型失败"), _.value = null;
1132
+ });
1133
+ } else
1134
+ _.value = null;
1135
+ }, {
1136
+ immediate: !0,
1137
+ deep: !0
1138
+ }), re(_, (s) => {
1139
+ oe(s ? [s] : []), ve();
1140
+ }), He(async () => {
1141
+ await We();
1142
+ try {
1143
+ Z(), window.addEventListener("resize", S);
1144
+ const s = $();
1145
+ g.value = s.scene;
1146
+ } catch (s) {
1147
+ console.error("Three.js 初始化失败:", s), G.error("渲染引擎初始化失败!");
1148
+ }
1149
+ }), Ze(() => {
1150
+ u.value = "", a.value = "", window.removeEventListener("resize", S), K.value && ne(), I(), ze();
1151
+ }), (s, t) => {
1152
+ const U = N("el-scrollbar");
1153
+ return le(), be("div", nl, [
1154
+ Q(o("div", {
1155
+ ref_key: "threejsContainer",
1156
+ ref: D,
1157
+ class: "threejs-container"
1158
+ }, null, 512), [
1159
+ [pe, Ye.value]
1160
+ ]),
1161
+ Q(o("div", al, [
1162
+ o("div", sl, null, 512),
1163
+ o("div", il, null, 512)
1164
+ ], 512), [
1165
+ [pe, Be.value]
1166
+ ]),
1167
+ o("div", rl, [
1168
+ we(s.$slots, "button-top", { switchTopPanel: Me }, void 0, !0),
1169
+ e(E, {
1170
+ name: "guanjianjiexi",
1171
+ size: "34",
1172
+ onClick: t[0] || (t[0] = (Y) => Me("弯管解析"))
1173
+ }),
1174
+ e(E, {
1175
+ name: "guanjiekongzhi",
1176
+ size: "34"
1177
+ }),
1178
+ e(E, {
1179
+ name: "gongyishengcheng",
1180
+ size: "34"
1181
+ }),
1182
+ e(E, {
1183
+ name: "buchangshezhi",
1184
+ size: "34"
1185
+ }),
1186
+ e(E, {
1187
+ name: "shuchujiagongchengxu",
1188
+ size: "34"
1189
+ }),
1190
+ we(s.$slots, "logout", {}, void 0, !0)
1191
+ ]),
1192
+ o("div", ul, [
1193
+ e(E, {
1194
+ name: "viewReset",
1195
+ size: "24",
1196
+ onClick: L(V),
1197
+ title: "重置"
1198
+ }, null, 8, ["onClick"]),
1199
+ e(E, {
1200
+ name: "fangda",
1201
+ size: "24",
1202
+ title: "放大",
1203
+ onClick: L(q)
1204
+ }, null, 8, ["onClick"]),
1205
+ e(E, {
1206
+ name: "suoxiao",
1207
+ size: "24",
1208
+ title: "缩小",
1209
+ onClick: L(J)
1210
+ }, null, 8, ["onClick"]),
1211
+ e(E, {
1212
+ name: "lookAround",
1213
+ size: "24",
1214
+ onClick: L(ie),
1215
+ title: L(K) ? "停止动画" : "动画视图"
1216
+ }, null, 8, ["onClick", "title"]),
1217
+ e(E, {
1218
+ name: "zuobiaoxi",
1219
+ size: "24",
1220
+ active: L(j),
1221
+ onClick: Fe,
1222
+ title: "显隐坐标轴"
1223
+ }, null, 8, ["active"])
1224
+ ]),
1225
+ o("div", cl, [
1226
+ e(E, {
1227
+ name: "jiegoushu",
1228
+ size: "24",
1229
+ onClick: t[1] || (t[1] = (Y) => fe("场景树")),
1230
+ active: p.value && u.value === "场景树",
1231
+ title: "场景树"
1232
+ }, null, 8, ["active"]),
1233
+ e(E, {
1234
+ name: "clipping",
1235
+ size: "24",
1236
+ onClick: t[2] || (t[2] = (Y) => fe("剖面视图")),
1237
+ active: p.value && u.value === "剖面视图",
1238
+ title: "剖面视图"
1239
+ }, null, 8, ["active"]),
1240
+ e(E, {
1241
+ name: "zhaozi",
1242
+ size: "24",
1243
+ onClick: t[3] || (t[3] = (Y) => fe("工件树")),
1244
+ active: p.value && u.value === "工件树",
1245
+ title: "工件 "
1246
+ }, null, 8, ["active"]),
1247
+ e(E, {
1248
+ name: "donghuafangzhen",
1249
+ size: "24",
1250
+ onClick: t[4] || (t[4] = (Y) => fe("场景4"))
1251
+ })
1252
+ ]),
1253
+ o("div", pl, [
1254
+ we(s.$slots, "button-right", { switchRightPanel: ge }, void 0, !0),
1255
+ e(E, {
1256
+ name: "donghuafangzhen",
1257
+ size: "24"
1258
+ }),
1259
+ e(E, {
1260
+ name: "donghuafangzhen",
1261
+ size: "24"
1262
+ }),
1263
+ e(E, {
1264
+ name: "guanjiekongzhi",
1265
+ size: "24",
1266
+ onClick: t[5] || (t[5] = (Y) => ge("关节控制")),
1267
+ active: b.value && a.value === "关节控制",
1268
+ title: "关节控制"
1269
+ }, null, 8, ["active"]),
1270
+ e(E, {
1271
+ name: "donghuafangzhen",
1272
+ size: "24",
1273
+ title: "动画仿真",
1274
+ onClick: t[6] || (t[6] = (Y) => ge("动画仿真")),
1275
+ active: b.value && a.value === "动画仿真"
1276
+ }, null, 8, ["active"]),
1277
+ e(E, {
1278
+ name: "donghuafangzhen",
1279
+ size: "24",
1280
+ title: "urdf动画",
1281
+ onClick: t[7] || (t[7] = (Y) => ge("urdf动画")),
1282
+ active: b.value && a.value === "urdf动画"
1283
+ }, null, 8, ["active"]),
1284
+ e(E, {
1285
+ name: "donghuafangzhen",
1286
+ size: "24"
1287
+ })
1288
+ ]),
1289
+ o("div", dl, [
1290
+ e(E, {
1291
+ name: "kuaitui",
1292
+ size: "24",
1293
+ backgroundColor: "#ffffff",
1294
+ title: "快退",
1295
+ onClick: d
1296
+ }),
1297
+ e(E, {
1298
+ name: "bofang",
1299
+ size: "24",
1300
+ backgroundColor: "#ffffff",
1301
+ title: "播放",
1302
+ onClick: l
1303
+ }),
1304
+ e(E, {
1305
+ name: "kuaijin",
1306
+ size: "24",
1307
+ backgroundColor: "#ffffff",
1308
+ title: "快进",
1309
+ onClick: k
1310
+ }),
1311
+ e(E, {
1312
+ name: "zanting",
1313
+ size: "24",
1314
+ backgroundColor: "#ffffff",
1315
+ title: "暂停",
1316
+ onClick: c
1317
+ })
1318
+ ]),
1319
+ Q(o("div", ml, [
1320
+ o("div", vl, [
1321
+ o("span", null, me(r.value), 1),
1322
+ o("span", {
1323
+ class: "close",
1324
+ onClick: t[8] || (t[8] = (Y) => y.value = !1)
1325
+ }, " X ")
1326
+ ]),
1327
+ o("div", fl, [
1328
+ e(U, { height: "100%" }, {
1329
+ default: z(() => [
1330
+ we(s.$slots, "top-panel", { topPanelType: r.value }, void 0, !0)
1331
+ ]),
1332
+ _: 3
1333
+ })
1334
+ ])
1335
+ ], 512), [
1336
+ [pe, y.value]
1337
+ ]),
1338
+ Q(o("div", gl, [
1339
+ o("div", hl, [
1340
+ o("span", null, me(u.value), 1),
1341
+ o("span", {
1342
+ class: "close",
1343
+ onClick: t[9] || (t[9] = (Y) => p.value = !1)
1344
+ }, " X ")
1345
+ ]),
1346
+ o("div", bl, [
1347
+ e(U, { height: "100%" }, {
1348
+ default: z(() => {
1349
+ var Y;
1350
+ return [
1351
+ u.value === "场景树" ? (le(), $e(Pt, {
1352
+ key: 0,
1353
+ model: _.value
1354
+ }, null, 8, ["model"])) : de("", !0),
1355
+ u.value === "剖面视图" ? (le(), be("div", yl, [
1356
+ o("div", _l, [
1357
+ o("label", wl, [
1358
+ Q(o("input", {
1359
+ type: "radio",
1360
+ name: "clipping-axis",
1361
+ value: "none",
1362
+ "onUpdate:modelValue": t[10] || (t[10] = (B) => De(X) ? X.value = B : null),
1363
+ onChange: t[11] || (t[11] = //@ts-ignore
1364
+ (...B) => L(F) && L(F)(...B))
1365
+ }, null, 544), [
1366
+ [Ve, L(X)]
1367
+ ]),
1368
+ t[19] || (t[19] = o("span", { class: "radio-text" }, "无切割", -1))
1369
+ ]),
1370
+ o("label", Cl, [
1371
+ Q(o("input", {
1372
+ type: "radio",
1373
+ name: "clipping-axis",
1374
+ value: "x",
1375
+ "onUpdate:modelValue": t[12] || (t[12] = (B) => De(X) ? X.value = B : null),
1376
+ onChange: t[13] || (t[13] = //@ts-ignore
1377
+ (...B) => L(F) && L(F)(...B))
1378
+ }, null, 544), [
1379
+ [Ve, L(X)]
1380
+ ]),
1381
+ t[20] || (t[20] = o("span", { class: "radio-text" }, "X轴切割", -1))
1382
+ ]),
1383
+ o("label", Pl, [
1384
+ Q(o("input", {
1385
+ type: "radio",
1386
+ name: "clipping-axis",
1387
+ value: "y",
1388
+ "onUpdate:modelValue": t[14] || (t[14] = (B) => De(X) ? X.value = B : null),
1389
+ onChange: t[15] || (t[15] = //@ts-ignore
1390
+ (...B) => L(F) && L(F)(...B))
1391
+ }, null, 544), [
1392
+ [Ve, L(X)]
1393
+ ]),
1394
+ t[21] || (t[21] = o("span", { class: "radio-text" }, "Y轴切割", -1))
1395
+ ]),
1396
+ o("label", kl, [
1397
+ Q(o("input", {
1398
+ type: "radio",
1399
+ name: "clipping-axis",
1400
+ value: "z",
1401
+ "onUpdate:modelValue": t[16] || (t[16] = (B) => De(X) ? X.value = B : null),
1402
+ onChange: t[17] || (t[17] = //@ts-ignore
1403
+ (...B) => L(F) && L(F)(...B))
1404
+ }, null, 544), [
1405
+ [Ve, L(X)]
1406
+ ]),
1407
+ t[22] || (t[22] = o("span", { class: "radio-text" }, "Z轴切割", -1))
1408
+ ])
1409
+ ])
1410
+ ])) : de("", !0),
1411
+ u.value === "工件树" ? (le(), $e(tt, {
1412
+ key: 2,
1413
+ model: (Y = L(_e)) == null ? void 0 : Y.obj,
1414
+ onVisibleChange: L(xe),
1415
+ onUpdatePosition: L(ce),
1416
+ onUpdateRotation: L(Te)
1417
+ }, null, 8, ["model", "onVisibleChange", "onUpdatePosition", "onUpdateRotation"])) : de("", !0)
1418
+ ];
1419
+ }),
1420
+ _: 1
1421
+ })
1422
+ ])
1423
+ ], 512), [
1424
+ [pe, p.value]
1425
+ ]),
1426
+ Q(o("div", xl, [
1427
+ o("div", Tl, [
1428
+ o("span", null, me(a.value), 1),
1429
+ o("span", {
1430
+ class: "close",
1431
+ onClick: t[18] || (t[18] = (Y) => b.value = !1)
1432
+ }, " X ")
1433
+ ]),
1434
+ o("div", Ml, [
1435
+ e(U, { height: "100%" }, {
1436
+ default: z(() => [
1437
+ Q(e(kt, { model: _.value }, null, 8, ["model"]), [
1438
+ [pe, a.value === "关节控制"]
1439
+ ]),
1440
+ Q(e(Ut, {
1441
+ ref_key: "animationPanelRef",
1442
+ ref: T,
1443
+ model: _.value,
1444
+ onGetThreeData: n,
1445
+ threeData: i.threeData
1446
+ }, null, 8, ["model", "threeData"]), [
1447
+ [pe, a.value === "动画仿真"]
1448
+ ]),
1449
+ we(s.$slots, "right-panel", { rightPanelType: a.value }, void 0, !0)
1450
+ ]),
1451
+ _: 3
1452
+ })
1453
+ ])
1454
+ ], 512), [
1455
+ [pe, b.value]
1456
+ ]),
1457
+ M.value ? (le(), be("div", Dl, [
1458
+ t[23] || (t[23] = o("div", { class: "loading-spinner" }, null, -1)),
1459
+ o("p", null, me(R.value), 1)
1460
+ ])) : de("", !0),
1461
+ e(ol, {
1462
+ ref_key: "pipeAnalysisPanelRef",
1463
+ ref: v
1464
+ }, null, 512)
1465
+ ]);
1466
+ };
1467
+ }
1468
+ }), Zl = /* @__PURE__ */ Ue(Vl, [["__scopeId", "data-v-3bada747"]]);
1469
+ export {
1470
+ Zl as default
1471
+ };