ss-component-new 1.2.6 → 1.2.8

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