ss-component-new 1.2.6 → 1.2.7

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