ss-component-new 1.3.615 → 1.3.617

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 (74) hide show
  1. package/dist/{MTLLoader-BL2uYkTJ.js → MTLLoader-B6ottYFV.js} +2 -2
  2. package/dist/{OrbitControls-Zyj23qrC.js → OrbitControls-BFVKU7s-.js} +1 -1
  3. package/dist/{URDFLoader-CRx5L75v.js → URDFLoader-CH-7Pzmq.js} +589 -584
  4. package/dist/{animationData-CJQE6_nu.js → animationData-F0z3GN7j.js} +3 -3
  5. package/dist/{array-CKTk7Sq_.js → array-CQiszLQE.js} +13 -14
  6. package/dist/{clone-ESeDvnJv.js → clone-MyfSNInd.js} +1 -1
  7. package/dist/{eleIcon-C7Pz9jha.js → eleIcon-BoKZ_PzU.js} +2 -2
  8. package/dist/{iconfont-DZGSkx-_.js → iconfont-BJYdStg5.js} +396 -247
  9. package/dist/{index-gXFBfuoD.js → index-0zQirLAy.js} +8 -8
  10. package/dist/{index-BvkIoiVW.js → index-6qXeMn6b.js} +3 -3
  11. package/dist/{index-obXIOkF7.js → index-8OmAlKII.js} +4 -4
  12. package/dist/{index-BXh02EAd.js → index-B2LYEScO.js} +4 -4
  13. package/dist/{index-YvUJL9Us.js → index-B4NcYIuS.js} +1 -1
  14. package/dist/{index-D8UY4uNQ.js → index-B8NQAdR4.js} +966 -967
  15. package/dist/{index-rlStojTL.js → index-BFqUz4pN.js} +1 -1
  16. package/dist/{index-t9LvhXac.js → index-BHtLrI43.js} +5 -5
  17. package/dist/{index--FPbFJB2.js → index-BODochNh.js} +6 -6
  18. package/dist/{index-CPW7tdrA.js → index-BkkvdZXm.js} +17 -20
  19. package/dist/{index-B0M1YCUY.js → index-BvtOLltL.js} +7 -7
  20. package/dist/{index-DsdWSuDi.js → index-BvyM6d06.js} +482 -483
  21. package/dist/{index-CX8Apbo7.js → index-BybrpYzx.js} +1 -1
  22. package/dist/{index-BJFXtH-X.js → index-CAMjP0It.js} +3 -3
  23. package/dist/{index-tMqKF2l6.js → index-CM6aWexA.js} +2 -2
  24. package/dist/{index-BBBCr4Oo.js → index-CT1LWsrT.js} +2 -2
  25. package/dist/{index-CTicGWoS.js → index-CXqqIuf-.js} +3 -3
  26. package/dist/{index-D9xMYIes.js → index-CYjsE5Gs.js} +3 -3
  27. package/dist/{index-B_fRppeJ.js → index-CkO7j_i1.js} +8 -8
  28. package/dist/{index-cYgzND1g.js → index-CnCBS4CT.js} +16268 -16240
  29. package/dist/{index-DlQXFCw8.js → index-CvZcm-Tt.js} +7 -8
  30. package/dist/{index-tniD_xHN.js → index-D2BpwRDj.js} +148 -157
  31. package/dist/{index-DAs4L0hx.js → index-D43kQTBs.js} +6973 -6531
  32. package/dist/{index-DjSJhlad.js → index-D56uKIwO.js} +60 -62
  33. package/dist/{index-XvX6TMzr.js → index-DCY5J8nu.js} +1 -1
  34. package/dist/{index-C3pboX9W.js → index-DIVct0z6.js} +5 -5
  35. package/dist/{index-Dd-8nw2f.js → index-DIzunSUT.js} +18 -20
  36. package/dist/{index-11kpzK0A.js → index-DJrzqi4-.js} +17 -17
  37. package/dist/{index-Cn33Gz2z.js → index-DSrPdLF-.js} +587 -616
  38. package/dist/{index-BUqviBFi.js → index-DcPtyCDm.js} +29 -35
  39. package/dist/{index-D1E8EPxn.js → index-DmILGKv9.js} +57 -61
  40. package/dist/{index-BA1kJZth.js → index-aTEfnfYn.js} +36 -40
  41. package/dist/{index-BHtNKL1L.js → index-dD-mKgue.js} +2 -2
  42. package/dist/{index-DkumSU1-.js → index-hg0CdgKe.js} +4 -4
  43. package/dist/index-mjGbAjJz.js +2623 -0
  44. package/dist/{index.vue_vue_type_script_setup_true_lang-DRzriV-s.js → index.vue_vue_type_script_setup_true_lang-DwbHXtUp.js} +2 -2
  45. package/dist/{index.vue_vue_type_style_index_0_scoped_39e1db95_lang-X_k372gl.js → index.vue_vue_type_style_index_0_scoped_39e1db95_lang-Dp7tIi0S.js} +27760 -27735
  46. package/dist/isString-Dxm3W5iX.js +8 -0
  47. package/dist/{localIcon-D5UoFBU5.js → localIcon-CoJHw5ss.js} +1 -1
  48. package/dist/{main-DgwLoFSd.js → main-BDvWHXas.js} +9 -9
  49. package/dist/{menuIndex-DAW9B-9g.js → menuIndex-BiUB7t5q.js} +1 -1
  50. package/dist/{request-B1c8BUkR.js → request-BfrhYBTM.js} +3480 -3062
  51. package/dist/ss-component.css +3 -3
  52. package/dist/ss-component.js +14 -14
  53. package/dist/ss-component2.js +13 -13
  54. package/dist/ss-component3.js +1 -1
  55. package/dist/svgIcon-4m2zaZkj.js +42 -0
  56. package/dist/{threeModel-Df46gQvy.js → threeModel-B7guecMM.js} +174 -174
  57. package/dist/{threePreview-C4Ra7sjU.js → threePreview-CpcrqmFS.js} +554 -554
  58. package/dist/threeSceneView-CWTmvCY4.js +1290 -0
  59. package/dist/{threeSceneViewForCPMPIP-DZ5wkTWo.js → threeSceneViewForCPMPIP-VzWmr9CP.js} +207 -208
  60. package/dist/{threeTrackPathView-DT80eKxv.js → threeTrackPathView-Bw6e-quT.js} +25 -25
  61. package/dist/{threeViewerHost-t6BRTmw8.js → threeViewerHost-DIiGjw_8.js} +4 -4
  62. package/dist/urdfTree-DU02c_91.js +254 -0
  63. package/dist/{workpieceTreePanel-CuXFoEjJ.js → workpieceTreePanel-XH9mYAT2.js} +56 -60
  64. package/package.json +1 -1
  65. package/dist/JSEncrypt-B36c1iN5.js +0 -1983
  66. package/dist/index-BmaW6Me9.js +0 -572
  67. package/dist/isString-BlNsHiyU.js +0 -8
  68. package/dist/obj/model.mtl +0 -42
  69. package/dist/obj/model.obj +0 -26110
  70. package/dist/svgIcon-4u4PW7Is.js +0 -42
  71. package/dist/threeSceneView-tLPMhgrS.js +0 -1291
  72. package/dist/urdfTree-Bu7OVUsr.js +0 -404
  73. package/public/obj/model.mtl +0 -42
  74. package/public/obj/model.obj +0 -26110
@@ -1,1291 +0,0 @@
1
- import { defineComponent as Le, ref as g, watch as ae, shallowRef as be, computed as Pe, onUnmounted as Ie, resolveComponent as L, createElementBlock as Ve, openBlock as Q, createElementVNode as c, createVNode as l, withCtx as R, createBlock as ye, createCommentVNode as ke, unref as X, toDisplayString as he, onMounted as Ge, onBeforeUnmount as Ze, Fragment as He, renderList as qe, nextTick as Ke, withDirectives as pe, vShow as de, renderSlot as Me } from "vue";
2
- import { r as Te, s as Ye } from "./threeViewerHost-t6BRTmw8.js";
3
- import { u as Ne, C as Qe } from "./iconfont-DZGSkx-_.js";
4
- import { g as et, a as tt, b as lt, c as ot, u as nt, d as at, U as st, J as it } from "./urdfTree-Bu7OVUsr.js";
5
- import { U as rt, u as ct, a as ut, W as pt } from "./workpieceTreePanel-CuXFoEjJ.js";
6
- import { c as dt } from "./index-D8UY4uNQ.js";
7
- import { av as mt, E, aM as vt, aN as ft } from "./request-B1c8BUkR.js";
8
- /* empty css */
9
- import { p as De, T as xe, V, n as I, o as gt, s as ht, h as Se, t as bt, L as yt, u as _t, v as wt, w as Ct, x as kt, y as Pt, z as xt, l as Rt, F as Mt } from "./index.vue_vue_type_style_index_0_scoped_39e1db95_lang-X_k372gl.js";
10
- import "./index-cYgzND1g.js";
11
- import "./index-BHtNKL1L.js";
12
- import { _ as me } from "./index.vue_vue_type_script_setup_true_lang-DRzriV-s.js";
13
- import { y as Be, z as Tt, A as Vt } from "./index-DsdWSuDi.js";
14
- import "./index-BmaW6Me9.js";
15
- import "./index-D9xMYIes.js";
16
- import { f as Dt, a as St, g as At, b as $t } from "./animationData-CJQE6_nu.js";
17
- import { _ as Ue } from "./_plugin-vue_export-helper-CHgC5LLL.js";
18
- import { s as Ft } from "./index-11kpzK0A.js";
19
- import { T as z } from "./svgIcon-4u4PW7Is.js";
20
- const W = 1e-3, oe = gt.degToRad, je = new bt({
21
- // 灰色
22
- color: 13421772,
23
- metalness: 0.3,
24
- roughness: 0.6,
25
- side: Rt
26
- });
27
- function zt(y = 5e-3, m = 64) {
28
- const p = new De([new V(0, 0, 0), new V(0, 0, 0)]), n = new xe(p, m, y, 16, !1), d = je;
29
- return new Se(n, d);
30
- }
31
- const Je = (y) => y.reduce((m, p) => {
32
- let n = 0;
33
- const d = p.Y ?? 0, _ = p.C ?? 0, s = p.R ?? 0;
34
- return d > 0 && (n += d), _ > 0 && s > 0 && (n += s * oe(_)), m + n;
35
- }, 0), We = (y) => {
36
- const m = [], p = y.Y ?? 0, n = y.B ?? 0, d = y.C ?? 0, _ = y.R ?? 0, s = {
37
- pos: new V(0, 0, 0),
38
- localY: new V(0, 1, 0),
39
- localX: new V(1, 0, 0),
40
- localZ: new V(0, 0, 1)
41
- };
42
- if (!p && !d) return m;
43
- if (m.push(s.pos.clone()), n !== 0) {
44
- const h = new I().makeRotationAxis(s.localY, oe(n));
45
- s.localX.applyMatrix4(h), s.localZ.applyMatrix4(h);
46
- }
47
- if (p > 0 && (s.pos.add(s.localY.clone().multiplyScalar(p * W)), m.push(s.pos.clone())), d > 0 && _ > 0) {
48
- const h = oe(d), v = _ * W, w = s.pos.clone().add(s.localX.clone().multiplyScalar(-v)), a = Math.max(16, Math.ceil(d / 5));
49
- for (let C = 1; C <= a; C++) {
50
- const u = h * C / a, k = new I().makeRotationAxis(s.localZ, u), r = s.localX.clone().multiplyScalar(v).applyMatrix4(k), M = w.clone().add(r);
51
- m.push(M);
52
- }
53
- }
54
- return m;
55
- };
56
- function Yt(y, m) {
57
- const p = new ht();
58
- p.name = "CompletePipe";
59
- const n = {
60
- pos: new V(0, 0, 0),
61
- localX: new V(1, 0, 0),
62
- localY: new V(0, 1, 0),
63
- localZ: new V(0, 0, 1)
64
- };
65
- let d = 0, _ = 1;
66
- for (let s = 0; s < y.length; s++) {
67
- const h = y[s], v = h.Y ?? 0, w = h.B ?? 0, a = h.C ?? 0, C = h.R ?? 0;
68
- if (w !== 0) {
69
- const u = new I().makeRotationAxis(n.localY, oe(w));
70
- n.localX.applyMatrix4(u), n.localZ.applyMatrix4(u);
71
- }
72
- if (v > 0) {
73
- const u = n.pos.clone();
74
- n.pos.add(n.localY.clone().multiplyScalar(v * W));
75
- const k = n.pos.clone(), i = Lt(u, k, m * W);
76
- i.userData = {
77
- segmentType: "straight",
78
- segmentIndex: d,
79
- frameIndex: s,
80
- length: v,
81
- frame: { Y: v, B: w, C: a, R: C }
82
- }, i.name = `直段_${d}`, p.add(i);
83
- const r = u.clone();
84
- Bt(p, _, r, m * W), d++;
85
- }
86
- if (a > 0 && C > 0) {
87
- const u = oe(a), k = C * W, i = [];
88
- i.push(n.pos.clone());
89
- const r = n.pos.clone().add(n.localX.clone().multiplyScalar(-k)), M = Math.max(16, Math.ceil(a / 5));
90
- for (let f = 1; f <= M; f++) {
91
- const T = u * f / M, Y = new I().makeRotationAxis(n.localZ, T), Z = n.localX.clone().multiplyScalar(k).applyMatrix4(Y), ee = r.clone().add(Z);
92
- i.push(ee);
93
- }
94
- const S = Ut(i, m * W);
95
- S.userData = {
96
- segmentType: "bend",
97
- segmentIndex: d,
98
- frameIndex: s,
99
- angle: a,
100
- radius: C,
101
- centerPoint: r.toArray(),
102
- frame: { Y: v, B: w, C: a, R: C }
103
- }, S.name = `弯段_${d}`, p.add(S), Math.floor(i.length / 2), i[0], n.pos = i[i.length - 1].clone();
104
- const A = new I().makeRotationAxis(n.localZ, u);
105
- n.localY.applyMatrix4(A), n.localX.applyMatrix4(A), d++, _++;
106
- }
107
- }
108
- return p;
109
- }
110
- function Bt(y, m, p, n) {
111
- const d = new V(0, n * 2, n * 5), _ = p.clone().add(d), s = [p, _], h = new _t().setFromPoints(s), v = new wt({
112
- color: 16711680,
113
- dashSize: n * 0.5,
114
- gapSize: n * 0.3,
115
- linewidth: 1
116
- }), w = new Ct(h, v);
117
- w.computeLineDistances(), y.add(w);
118
- const a = document.createElement("canvas"), C = a.getContext("2d");
119
- a.width = 128, a.height = 128, C.clearRect(0, 0, 128, 128), C.fillStyle = "#FF0000", C.font = "bold 80px Arial", C.textAlign = "center", C.textBaseline = "middle", C.fillText(m.toString(), 64, 64);
120
- const u = new kt(a), k = new Pt({
121
- map: u,
122
- transparent: !0,
123
- depthTest: !1,
124
- depthWrite: !1
125
- }), i = new xt(k), r = n * 3;
126
- i.scale.set(r, r, 1), i.position.copy(_), i.name = `Label_${m}`, i.userData = { labelNumber: m }, y.add(i);
127
- }
128
- function Lt(y, m, p) {
129
- const n = new yt(y, m), d = new xe(n, 2, p, 18, !1);
130
- return new Se(d, je);
131
- }
132
- function Ut(y, m) {
133
- const p = new De(y, !1, "catmullrom", 0.01), n = new xe(p, Math.max(16, y.length * 2), m, 18, !1);
134
- return new Se(n, je);
135
- }
136
- function Ee(y, m, p, n, d, _ = 0) {
137
- let s = m.slice(0, d + 1);
138
- const h = m[d + 1];
139
- if (h && _ > 0) {
140
- const i = {
141
- ...h,
142
- // 根据插值因子计算当前的弯曲角度C,实现从0到目标角度的平滑过渡
143
- B: (h.B ?? 0) * _,
144
- // 根据插值因子计算当前的弯曲角度C,实现从0到目标角度的平滑过渡
145
- C: (h.C ?? 0) * _
146
- };
147
- s.push(i);
148
- }
149
- const v = Je(s), w = Math.max(0, p - v), a = [];
150
- a.push(new V(0, 0, 0));
151
- const C = new V(0, w * W, 0);
152
- w > 0 && a.push(C);
153
- let u = {
154
- pos: C.clone(),
155
- localY: new V(0, 1, 0),
156
- localX: new V(1, 0, 0),
157
- localZ: new V(0, 0, 1)
158
- };
159
- const k = [];
160
- for (let i = s.length - 1; i >= 0; i--) {
161
- const r = s[i], M = We(r);
162
- if (M.length > 0) {
163
- const S = M.map((Y) => {
164
- const B = Y.clone(), Z = new I();
165
- return Z.makeBasis(u.localX, u.localY, u.localZ), B.applyMatrix4(Z), B.add(u.pos);
166
- });
167
- k.push(S);
168
- const A = S[S.length - 1];
169
- u.pos = A.clone();
170
- const f = r.B ?? 0, T = r.C ?? 0;
171
- if (f !== 0) {
172
- const Y = new I().makeRotationAxis(u.localY, oe(f));
173
- u.localX.applyMatrix4(Y), u.localZ.applyMatrix4(Y);
174
- }
175
- if (T > 0) {
176
- const Y = oe(T), B = new I().makeRotationAxis(u.localZ, Y);
177
- u.localY.applyMatrix4(B), u.localX.applyMatrix4(B);
178
- }
179
- }
180
- }
181
- for (const i of k)
182
- i.length > 1 && a.push(...i.slice(1));
183
- a.length < 2 && a.push(new V(0, 1e-3, 0));
184
- try {
185
- const i = new De(a, !1, "catmullrom", 0.01), r = new xe(i, Math.max(2, a.length * 4), n * W, 18, !1);
186
- y.geometry.dispose(), y.geometry = r;
187
- } catch (i) {
188
- console.error("管件更新失败", i);
189
- }
190
- }
191
- function Oe(y, m, p, n = 0) {
192
- let d = y.slice(0, p + 1);
193
- const _ = y[p + 1];
194
- if (_ && n > 0) {
195
- const u = {
196
- ..._,
197
- // 根据插值因子计算当前的弯曲角度C,实现从0到目标角度的平滑过渡
198
- B: (_.B ?? 0) * n,
199
- // 根据插值因子计算当前的弯曲角度C,实现从0到目标角度的平滑过渡
200
- C: (_.C ?? 0) * n
201
- };
202
- d.push(u);
203
- }
204
- const s = Je(d), h = Math.max(0, m - s), v = [];
205
- v.push(new V(0, 0, 0));
206
- const w = new V(0, h * W, 0);
207
- h > 0 && v.push(w);
208
- let a = {
209
- pos: w.clone(),
210
- localY: new V(0, 1, 0),
211
- localX: new V(1, 0, 0),
212
- localZ: new V(0, 0, 1)
213
- };
214
- const C = [];
215
- for (let u = d.length - 1; u >= 0; u--) {
216
- const k = d[u], i = We(k);
217
- if (i.length > 0) {
218
- const r = i.map((f) => {
219
- const T = f.clone(), Y = new I();
220
- return Y.makeBasis(a.localX, a.localY, a.localZ), T.applyMatrix4(Y), T.add(a.pos);
221
- });
222
- C.push(r);
223
- const M = r[r.length - 1];
224
- a.pos = M.clone();
225
- const S = k.B ?? 0, A = k.C ?? 0;
226
- if (S !== 0) {
227
- const f = new I().makeRotationAxis(a.localY, oe(S));
228
- a.localX.applyMatrix4(f), a.localZ.applyMatrix4(f);
229
- }
230
- if (A > 0) {
231
- const f = oe(A), T = new I().makeRotationAxis(a.localZ, f);
232
- a.localY.applyMatrix4(T), a.localX.applyMatrix4(T);
233
- }
234
- }
235
- }
236
- for (const u of C)
237
- u.length > 1 && v.push(...u.slice(1));
238
- return v.length < 2 && v.push(new V(0, 1e-3, 0)), v;
239
- }
240
- function Xe(y, m, p, n, d, _, s, h = 0, v = 0) {
241
- const w = d - v, a = Oe(n, w, s, h);
242
- let u = Oe(p, v, s, h);
243
- u.forEach((i) => i.y = -i.y), u.reverse();
244
- const k = [...u, ...a];
245
- try {
246
- const i = new De(k, !1, "catmullrom", 0.01), r = new xe(i, Math.max(2, k.length * 4), _ * W, 18, !1);
247
- m.geometry.dispose(), y.geometry.dispose(), m.parent && m.parent.remove(m), y.geometry = r;
248
- } catch (i) {
249
- console.error("管件更新失败", i);
250
- }
251
- }
252
- const jt = { class: "panel-content" }, Et = { class: "action-bar" }, Ot = { class: "animation-controls" }, Xt = { class: "control-row" }, Gt = { class: "control-row" }, Zt = { class: "frame-info" }, Nt = { class: "control-row" }, Jt = { class: "progress-bar" }, Wt = { class: "dialog-footer" }, It = /* @__PURE__ */ Le({
253
- __name: "animationPanel",
254
- props: {
255
- model: {},
256
- threeData: {}
257
- },
258
- setup(y, { expose: m }) {
259
- const p = y, n = g(), d = g();
260
- ae(() => p.threeData, (t) => {
261
- const e = t == null ? void 0 : t.data;
262
- d.value = e == null ? void 0 : e.type;
263
- }, {
264
- immediate: !0
265
- });
266
- const _ = async () => {
267
- let t = {};
268
- d.value === Te.SINGLE && (t = await Dt()), d.value === Te.DOUBLE && (t = await St());
269
- const {
270
- initialPipeLength: e = 0,
271
- pipeRadius: o = 0,
272
- clampLength: b = 0,
273
- animationData: P
274
- } = t;
275
- A.value = e, f.value = o, T.value = b, n.value = P;
276
- const j = dt(n.value), le = fe(G.value), K = (j == null ? void 0 : j["输出(动画数据)"]) || [];
277
- s.value = K.length ? K : [le];
278
- }, s = g([]), h = g(!1), v = g(""), w = g(!1), a = g(0), C = g(0), u = g(1e3);
279
- let k = !1;
280
- const i = g(null), r = be(null), M = be(null), S = be(null), A = g(0), f = g(12.5), T = g(30), Y = g([]), B = g(null), Z = Pe(() => p.model ? et(p.model).map((o) => o.name) : []), ee = g(["Y", "B", "C", "R"]), G = Pe(() => [...Z.value, ...ee.value]), _e = Pe(() => G.value.length > 0 ? `请按以下格式粘贴数据 (第一行为表头,使用 Tab 分隔):
281
- ${G.value.join(" ")}
282
- 0 0 0 ...
283
- 1 2 3 ...` : "请先加载模型。"), ve = () => s.value.map((t) => ({
284
- Y: parseFloat(t.Y) || 0,
285
- B: parseFloat(t.B) || 0,
286
- C: parseFloat(t.C) || 0,
287
- R: parseFloat(t.R) || 0
288
- })), se = () => {
289
- const t = [], e = [];
290
- return s.value.forEach((o) => {
291
- const { Y1: b, B1: P, C1: j, R1: le, Y2: K, B2: ue, C2: Ce, R2: F } = o;
292
- t.push({
293
- Y: parseFloat(b) || 0,
294
- B: parseFloat(P) || 0,
295
- C: parseFloat(j) || 0,
296
- R: parseFloat(le) || 0
297
- }), e.push({
298
- Y: parseFloat(K) || 0,
299
- B: parseFloat(ue) || 0,
300
- C: parseFloat(Ce) || 0,
301
- R: parseFloat(F) || 0
302
- });
303
- }), {
304
- posPipeYbcr: t,
305
- negPipeYbcr: e
306
- };
307
- }, D = (t = 0, e = 0) => {
308
- if (r.value && M.value) {
309
- const o = se();
310
- Xe(
311
- r.value,
312
- M.value,
313
- o.posPipeYbcr,
314
- o.negPipeYbcr,
315
- A.value,
316
- f.value,
317
- t,
318
- e,
319
- T.value
320
- );
321
- } else if (r.value) {
322
- const o = ve();
323
- Ee(r.value, o, A.value, f.value, t, e);
324
- }
325
- }, x = (t) => {
326
- if (t < 0 || t >= s.value.length) {
327
- console.error(`帧索引 ${t} 超出范围`);
328
- return;
329
- }
330
- const e = s.value[t];
331
- if (console.log(`应用第 ${t} 帧数据 ${e}`), a.value = t, i.value) {
332
- const o = {};
333
- Z.value.forEach((b) => {
334
- const P = parseFloat(e[b]);
335
- isNaN(P) || (o[b] = P);
336
- }), i.value.setJointAngles(o);
337
- }
338
- D(t, 0);
339
- }, N = async () => {
340
- if (s.value.length === 0) {
341
- E.error("无法播放动画:无数据");
342
- return;
343
- }
344
- if (!w.value) {
345
- w.value = !0, k = !1, s.value.length - 1 === a.value && (a.value = 0);
346
- try {
347
- for (let t = a.value + 1; t < s.value.length && !k; t++) {
348
- a.value = t;
349
- const e = s.value[t], o = {};
350
- i.value && Z.value.forEach((b) => {
351
- const P = parseFloat(e[b]);
352
- isNaN(P) || (o[b] = P);
353
- }), i.value ? await i.value.animateToState(
354
- o,
355
- u.value,
356
- (b) => {
357
- C.value = (t + b) / s.value.length * 100, D(t - 1, b);
358
- }
359
- ) : (await new Promise((b) => setTimeout(b, u.value)), C.value = (t + 1) / s.value.length * 100);
360
- }
361
- k || E.success("动画播放完成");
362
- } catch (t) {
363
- console.error("动画播放出错:", t), E.error("动画播放出错");
364
- } finally {
365
- w.value = !1, C.value = 0;
366
- }
367
- }
368
- }, U = () => {
369
- k = !0, w.value = !1, C.value = 0, E.info("动画已停止");
370
- }, H = () => {
371
- a.value = 0;
372
- }, O = () => {
373
- if (r.value && M.value) {
374
- const t = se();
375
- Xe(
376
- r.value,
377
- M.value,
378
- t.posPipeYbcr,
379
- t.negPipeYbcr,
380
- A.value,
381
- f.value,
382
- -1,
383
- 0,
384
- T.value
385
- );
386
- } else if (r.value) {
387
- const t = ve();
388
- Ee(
389
- r.value,
390
- t,
391
- A.value,
392
- f.value,
393
- -1,
394
- 0
395
- );
396
- }
397
- }, te = () => {
398
- i.value && i.value.resetToZero(), O(), H(), E.success("机器人和管件已重置");
399
- }, q = (t) => `第 ${t + 1} 帧`, J = (t) => {
400
- w.value && U(), x(t);
401
- }, ie = () => {
402
- w.value && U(), !(a.value + 1 >= s.value.length) && x(a.value + 1);
403
- }, $ = () => {
404
- w.value && U(), a.value !== 0 && x(a.value - 1);
405
- }, ne = () => {
406
- S.value && (S.value.visible = !0), r.value && r.value.parent && r.value.parent.remove(r.value), S.value = null, r.value = null, M.value = null;
407
- }, fe = (t) => t == null ? void 0 : t.reduce((e, o) => (e[o] = "0", e), {});
408
- ae(G, (t, e) => {
409
- if (JSON.stringify(t) !== JSON.stringify(e))
410
- if (t.length > 0) {
411
- const o = fe(t);
412
- s.value = [o];
413
- } else
414
- s.value = [];
415
- }, { immediate: !0 });
416
- const re = g(0), we = (t) => {
417
- re.value = t;
418
- }, Ae = (t, e) => {
419
- if (!t || !e)
420
- return;
421
- const o = ot(t, e), b = zt();
422
- b.visible = !1, o == null || o.add(b);
423
- }, ce = (t) => {
424
- i.value = new rt(t), Y.value = lt(t), B.value = "Pipe_Joint";
425
- }, ge = () => {
426
- i.value = null, Y.value = [], B.value = null;
427
- }, $e = (t) => {
428
- ce(t), Ae(t, B.value), we(re.value + 1), te();
429
- };
430
- ae(() => p.model, (t) => {
431
- if (ne(), t) {
432
- $e(t);
433
- return;
434
- }
435
- ge();
436
- }, { immediate: !0 });
437
- const Re = (t) => {
438
- var o, b;
439
- const e = new Se(
440
- t.geometry.clone(),
441
- t.material
442
- );
443
- return e.name = "managed_pipe_clone", (b = (o = t == null ? void 0 : t.parent) == null ? void 0 : o.add) == null || b.call(o, e), e.position.copy(t.position), e.rotation.copy(t.rotation), e.scale.copy(t.scale), e;
444
- };
445
- ae([B, T, A, re], ([t, e]) => {
446
- if (ne(), p.model && t) {
447
- const o = tt(p.model, t);
448
- if (console.log(o, "meshToReplace"), o && o.parent) {
449
- S.value = o, o.visible = !1;
450
- const b = Re(o);
451
- if (d.value === Te.SINGLE && (b.position.y -= e * 1e-3), r.value = b, d.value === Te.DOUBLE) {
452
- const P = Re(o);
453
- M.value = P;
454
- }
455
- D(0, 0);
456
- } else
457
- t && console.warn(`在 link '${t}' 中未找到可替换的网格或其没有父级。`);
458
- }
459
- });
460
- const Fe = async () => {
461
- if (G.value.length === 0) {
462
- E.warning("没有可导出的表头");
463
- return;
464
- }
465
- const t = G.value.join(" ");
466
- try {
467
- await navigator.clipboard.writeText(t), E.success("表头已成功复制到剪贴板!");
468
- } catch (e) {
469
- console.error("复制失败:", e), E.error("复制失败,请检查浏览器权限或手动复制。");
470
- }
471
- }, ze = () => {
472
- if (!v.value.trim()) {
473
- E.warning("导入内容不能为空");
474
- return;
475
- }
476
- const t = v.value.trim().split(`
477
- `).filter((j) => j.trim() !== "");
478
- if (t.length < 2) {
479
- E.error("导入数据至少需要包含表头行和一行数据");
480
- return;
481
- }
482
- const e = t[0].split(" ").map((j) => j.trim()), o = {};
483
- if (e.forEach((j, le) => {
484
- G.value.includes(j) && (o[le] = j);
485
- }), Object.keys(o).length === 0) {
486
- E.error("没有找到匹配的表头,请检查表头名称是否正确");
487
- return;
488
- }
489
- const P = t.slice(1).map((j) => {
490
- const le = j.split(" "), K = {};
491
- return G.value.forEach((ue) => {
492
- K[ue] = "0";
493
- }), Object.entries(o).forEach(([ue, Ce]) => {
494
- const F = le[parseInt(ue)];
495
- F !== void 0 && F.trim() !== "" && (K[Ce] = F.trim());
496
- }), K;
497
- });
498
- P.length > 0 ? (s.value = P, E.success(`成功导入 ${P.length} 行数据!`), h.value = !1, v.value = "") : E.error("未能解析到有效数据,请检查格式。");
499
- };
500
- return Ie(() => {
501
- ne(), k = !0;
502
- }), m({ playAnimation: N, stopAnimation: U, forwardFrame: ie, backwardFrame: $ }), (t, e) => {
503
- const o = L("el-icon"), b = L("el-input-number"), P = L("el-form-item"), j = L("el-form"), le = L("el-slider"), K = L("el-progress"), ue = L("el-input"), Ce = L("el-dialog");
504
- return Q(), Ve("div", jt, [
505
- c("div", Et, [
506
- l(me, {
507
- onClick: _,
508
- modelValue: "获取数据"
509
- }),
510
- l(me, {
511
- onClick: Fe,
512
- disabled: G.value.length === 0,
513
- modelValue: "导出表头"
514
- }, null, 8, ["disabled"]),
515
- l(me, {
516
- modelValue: "播放",
517
- onClick: N,
518
- disabled: s.value.length === 0 || w.value,
519
- buttonType: "primary"
520
- }, {
521
- default: R(() => [
522
- w.value ? (Q(), ye(o, {
523
- key: 0,
524
- class: "is-loading"
525
- }, {
526
- default: R(() => [
527
- l(X(mt))
528
- ]),
529
- _: 1
530
- })) : ke("", !0)
531
- ]),
532
- _: 1
533
- }, 8, ["disabled"]),
534
- l(me, {
535
- onClick: U,
536
- modelValue: "停止",
537
- buttonType: "danger"
538
- }),
539
- l(me, {
540
- onClick: te,
541
- modelValue: "重置",
542
- buttonType: "primary"
543
- })
544
- ]),
545
- c("div", Ot, [
546
- c("div", Xt, [
547
- l(j, {
548
- "label-width": "auto",
549
- style: { width: "100%" }
550
- }, {
551
- default: R(() => [
552
- l(P, {
553
- label: "帧间隔 (ms):",
554
- prop: "frameDuration"
555
- }, {
556
- default: R(() => [
557
- l(b, {
558
- modelValue: u.value,
559
- "onUpdate:modelValue": e[0] || (e[0] = (F) => u.value = F),
560
- min: 100,
561
- max: 5e3,
562
- step: 100,
563
- style: { width: "100%" }
564
- }, null, 8, ["modelValue"])
565
- ]),
566
- _: 1
567
- }),
568
- l(P, {
569
- label: "管件总长 (mm):",
570
- prop: "initialPipeLength"
571
- }, {
572
- default: R(() => [
573
- l(b, {
574
- modelValue: A.value,
575
- "onUpdate:modelValue": e[1] || (e[1] = (F) => A.value = F),
576
- min: 0,
577
- style: { width: "100%" }
578
- }, null, 8, ["modelValue"])
579
- ]),
580
- _: 1
581
- }),
582
- l(P, {
583
- label: "管件半径 (mm):",
584
- prop: "pipeRadius"
585
- }, {
586
- default: R(() => [
587
- l(b, {
588
- modelValue: f.value,
589
- "onUpdate:modelValue": e[2] || (e[2] = (F) => f.value = F),
590
- min: 0,
591
- style: { width: "100%" }
592
- }, null, 8, ["modelValue"])
593
- ]),
594
- _: 1
595
- }),
596
- l(P, {
597
- label: "夹持长度 (mm):",
598
- prop: "clampLength"
599
- }, {
600
- default: R(() => [
601
- l(b, {
602
- modelValue: T.value,
603
- "onUpdate:modelValue": e[3] || (e[3] = (F) => T.value = F),
604
- min: 0,
605
- style: { width: "100%" }
606
- }, null, 8, ["modelValue"])
607
- ]),
608
- _: 1
609
- })
610
- ]),
611
- _: 1
612
- })
613
- ]),
614
- e[10] || (e[10] = c("div", { class: "control-row" }, [
615
- c("label", null, "管件 Mesh:")
616
- ], -1)),
617
- c("div", Gt, [
618
- e[8] || (e[8] = c("label", null, "当前帧:", -1)),
619
- c("span", Zt, he(a.value + 1) + " / " + he(s.value.length), 1)
620
- ]),
621
- c("div", Nt, [
622
- e[9] || (e[9] = c("label", null, "动画进度:", -1)),
623
- l(le, {
624
- modelValue: a.value,
625
- "onUpdate:modelValue": e[4] || (e[4] = (F) => a.value = F),
626
- min: 0,
627
- max: s.value.length > 0 ? s.value.length - 1 : 0,
628
- step: 1,
629
- "format-tooltip": q,
630
- onInput: J,
631
- disabled: s.value.length === 0,
632
- style: { "flex-grow": "1", margin: "0 10px" }
633
- }, null, 8, ["modelValue", "max", "disabled"])
634
- ]),
635
- c("div", Jt, [
636
- l(K, {
637
- percentage: C.value,
638
- "show-text": !1,
639
- "stroke-width": 6
640
- }, null, 8, ["percentage"])
641
- ])
642
- ]),
643
- l(Ce, {
644
- modelValue: h.value,
645
- "onUpdate:modelValue": e[7] || (e[7] = (F) => h.value = F),
646
- title: "导入数据",
647
- width: "500px"
648
- }, {
649
- footer: R(() => [
650
- c("span", Wt, [
651
- l(me, {
652
- modelValue: "取消",
653
- onClick: e[6] || (e[6] = (F) => h.value = !1)
654
- }),
655
- l(me, {
656
- modelValue: "确认导入",
657
- onClick: ze,
658
- type: "primary"
659
- })
660
- ])
661
- ]),
662
- default: R(() => [
663
- e[11] || (e[11] = c("p", { class: "import-instructions" }, " 请从Excel或csv中复制数据 (首行为表头, Tab分隔) ", -1)),
664
- l(ue, {
665
- modelValue: v.value,
666
- "onUpdate:modelValue": e[5] || (e[5] = (F) => v.value = F),
667
- type: "textarea",
668
- rows: 10,
669
- placeholder: _e.value
670
- }, null, 8, ["modelValue", "placeholder"])
671
- ]),
672
- _: 1,
673
- __: [11]
674
- }, 8, ["modelValue"])
675
- ]);
676
- };
677
- }
678
- }), Ht = /* @__PURE__ */ Ue(It, [["__scopeId", "data-v-49a19db9"]]), qt = async () => {
679
- const m = await At(["工件库", "弯管"]), p = Be("工件列表", m), n = Tt(p);
680
- return n == null ? void 0 : n.map((_) => ({
681
- name: _,
682
- mainKey: _
683
- }));
684
- }, Kt = async (y) => {
685
- const p = await Vt(["工件库", "弯管"], y), n = Be("弯管基础参数", p), d = Be("弯管特征尺寸", p), _ = {
686
- outerDiameter: 0,
687
- ybcrList: []
688
- }, s = $t(n), h = Mt(d);
689
- return _.outerDiameter = (s == null ? void 0 : s.外径) || 0, _.ybcrList = h || [], _;
690
- }, Qt = { class: "pipe-analysis-dialog-header" }, el = { class: "header-right" }, tl = { class: "pipe-analysis-dialog-body" }, ll = { class: "panel-left" }, ol = { class: "pipe-analysis-input" }, nl = { class: "input-params" }, al = { class: "pipe-analysis-output" }, sl = { class: "ouput-params" }, il = /* @__PURE__ */ Le({
691
- __name: "pipeAnalysisPanel",
692
- emits: ["nodeClick", "visibleChange", "updatePosition", "updateRotation"],
693
- setup(y, { expose: m, emit: p }) {
694
- const n = g(null), d = be(null), {
695
- currentModels: _,
696
- resetView: s,
697
- initThreeJS: h,
698
- handleResize: v,
699
- getThreeJSObjects: w,
700
- cleanup: a,
701
- setModels: C,
702
- clearAllModels: u,
703
- axesHelperVisible: k,
704
- toggleAxesVisibility: i,
705
- addModelAndFit: r
706
- } = Ne(n);
707
- g(null);
708
- const M = g({ file: null, pipe: "" });
709
- g(null), g(!1);
710
- const S = g([]), A = (D) => {
711
- S.value = D;
712
- };
713
- g("ybcr");
714
- const f = g({
715
- form: {},
716
- list: [],
717
- reverse: !1
718
- }), T = (D) => {
719
- const { length: x, outerDiameter: N, innerDiameter: U, thickness: H, ybcrList: O } = D || {};
720
- f.value.form = {
721
- length: x,
722
- outerDiameter: N,
723
- innerDiameter: U,
724
- thickness: H
725
- }, f.value.list = O;
726
- }, Y = () => {
727
- const { form: D, list: x } = f.value, {
728
- outerDiameter: N
729
- } = D, U = N / 2, H = x == null ? void 0 : x.map((te) => {
730
- const { y: q, b: J, c: ie, r: $, Y: ne, B: fe, C: re, R: we } = te;
731
- return ne ? {
732
- Y: ne,
733
- B: fe,
734
- C: re,
735
- R: we
736
- } : {
737
- Y: q,
738
- B: J,
739
- C: ie,
740
- R: $
741
- };
742
- });
743
- u();
744
- const O = Yt(H, U);
745
- r(O);
746
- }, B = g(!1), Z = () => {
747
- const D = B.value;
748
- B.value = !D;
749
- }, ee = g(!1), G = () => {
750
- ee.value = !1;
751
- }, _e = () => {
752
- ee.value = !0;
753
- }, ve = async () => {
754
- const D = await qt();
755
- A(D);
756
- }, se = async (D) => {
757
- const x = await Kt(D);
758
- T(x);
759
- };
760
- return ae(() => f, () => {
761
- Y();
762
- }, {
763
- deep: !0
764
- }), ae(() => n, () => {
765
- try {
766
- if (d.value)
767
- return;
768
- h(), window.addEventListener("resize", v);
769
- } catch (D) {
770
- console.error("Three.js 初始化失败:", D), E.error("渲染引擎初始化失败!");
771
- }
772
- }, {
773
- deep: !0
774
- }), Ge(async () => {
775
- ve();
776
- }), Ze(() => {
777
- window.removeEventListener("resize", v), a();
778
- }), m({ openDialog: _e }), (D, x) => {
779
- const N = L("el-icon"), U = L("el-option"), H = L("el-select"), O = L("el-form-item"), te = L("el-form"), q = L("el-input"), J = L("el-table-column"), ie = L("el-table");
780
- return Q(), ye(Ft, {
781
- class: "pipe-analysis-dialog",
782
- visible: ee.value,
783
- onBeforeDestroy: D.onDestroy,
784
- showClose: !1,
785
- fullScreen: B.value
786
- }, {
787
- header: R(() => [
788
- c("div", Qt, [
789
- x[6] || (x[6] = c("div", {
790
- class: "header-left",
791
- title: "管件解析"
792
- }, " 管件解析 ", -1)),
793
- c("div", el, [
794
- l(N, null, {
795
- default: R(() => [
796
- l(X(vt), { onClick: Z })
797
- ]),
798
- _: 1
799
- }),
800
- l(N, null, {
801
- default: R(() => [
802
- l(X(ft), { onClick: G })
803
- ]),
804
- _: 1
805
- })
806
- ])
807
- ])
808
- ]),
809
- default: R(() => [
810
- c("div", tl, [
811
- c("div", ll, [
812
- c("div", ol, [
813
- x[7] || (x[7] = c("span", { class: "item-view-group" }, [
814
- c("span", { class: "group-name-wrap" }, "输入")
815
- ], -1)),
816
- c("div", nl, [
817
- l(te, {
818
- model: M.value,
819
- "label-width": "auto",
820
- "label-position": "top"
821
- }, {
822
- default: R(() => [
823
- l(O, { label: "弯管" }, {
824
- default: R(() => [
825
- l(H, {
826
- modelValue: M.value.pipe,
827
- "onUpdate:modelValue": x[0] || (x[0] = ($) => M.value.pipe = $),
828
- placeholder: "请选择弯管",
829
- onChange: se
830
- }, {
831
- default: R(() => [
832
- (Q(!0), Ve(He, null, qe(S.value, ($) => (Q(), ye(U, {
833
- label: $.name,
834
- value: $.mainKey
835
- }, null, 8, ["label", "value"]))), 256))
836
- ]),
837
- _: 1
838
- }, 8, ["modelValue"])
839
- ]),
840
- _: 1
841
- })
842
- ]),
843
- _: 1
844
- }, 8, ["model"])
845
- ])
846
- ]),
847
- c("div", al, [
848
- l(O, { label: "加工方向" }, {
849
- default: R(() => [
850
- l(H, {
851
- modelValue: f.value.reverse,
852
- "onUpdate:modelValue": x[1] || (x[1] = ($) => f.value.reverse = $),
853
- placeholder: "请选择加工方向"
854
- }, {
855
- default: R(() => [
856
- l(U, {
857
- label: "正向",
858
- value: !1
859
- }),
860
- l(U, {
861
- label: "反向",
862
- value: !0
863
- })
864
- ]),
865
- _: 1
866
- }, 8, ["modelValue"])
867
- ]),
868
- _: 1
869
- }),
870
- x[8] || (x[8] = c("span", { class: "item-view-group" }, [
871
- c("span", { class: "group-name-wrap" }, "输出(弯管基础参数)")
872
- ], -1)),
873
- c("div", sl, [
874
- l(te, {
875
- model: f.value.form,
876
- "label-width": "auto",
877
- "label-position": "top",
878
- inline: !0
879
- }, {
880
- default: R(() => [
881
- l(O, { label: "管长" }, {
882
- default: R(() => [
883
- l(q, {
884
- modelValue: f.value.form.length,
885
- "onUpdate:modelValue": x[2] || (x[2] = ($) => f.value.form.length = $)
886
- }, null, 8, ["modelValue"])
887
- ]),
888
- _: 1
889
- }),
890
- l(O, { label: "外径" }, {
891
- default: R(() => [
892
- l(q, {
893
- modelValue: f.value.form.outerDiameter,
894
- "onUpdate:modelValue": x[3] || (x[3] = ($) => f.value.form.outerDiameter = $)
895
- }, null, 8, ["modelValue"])
896
- ]),
897
- _: 1
898
- }),
899
- l(O, { label: "内径" }, {
900
- default: R(() => [
901
- l(q, {
902
- modelValue: f.value.form.innerDiameter,
903
- "onUpdate:modelValue": x[4] || (x[4] = ($) => f.value.form.innerDiameter = $)
904
- }, null, 8, ["modelValue"])
905
- ]),
906
- _: 1
907
- }),
908
- l(O, { label: "壁厚" }, {
909
- default: R(() => [
910
- l(q, {
911
- modelValue: f.value.form.thickness,
912
- "onUpdate:modelValue": x[5] || (x[5] = ($) => f.value.form.thickness = $)
913
- }, null, 8, ["modelValue"])
914
- ]),
915
- _: 1
916
- })
917
- ]),
918
- _: 1
919
- }, 8, ["model"]),
920
- l(ie, {
921
- ref: "singleTableRef",
922
- data: f.value.list,
923
- "highlight-current-rowstyle": "width: 100%"
924
- }, {
925
- default: R(() => [
926
- l(J, {
927
- type: "index",
928
- width: "50"
929
- }),
930
- l(J, {
931
- property: "y",
932
- label: "Y"
933
- }),
934
- l(J, {
935
- property: "b",
936
- label: "B"
937
- }),
938
- l(J, {
939
- property: "c",
940
- label: "C"
941
- }),
942
- l(J, {
943
- property: "r",
944
- label: "R"
945
- })
946
- ]),
947
- _: 1
948
- }, 8, ["data"])
949
- ])
950
- ])
951
- ]),
952
- c("div", {
953
- class: "panel-right",
954
- ref_key: "threejsContainer",
955
- ref: n
956
- }, null, 512)
957
- ])
958
- ]),
959
- _: 1
960
- }, 8, ["visible", "onBeforeDestroy", "fullScreen"]);
961
- };
962
- }
963
- }), rl = /* @__PURE__ */ Ue(il, [["__scopeId", "data-v-61e834a4"]]), cl = { class: "obj-viewer-container" }, ul = { class: "pipe-comparison" }, pl = {
964
- ref: "pipe1",
965
- class: "pipe-container"
966
- }, dl = {
967
- ref: "pipe2",
968
- class: "pipe-container"
969
- }, ml = { class: "buttonGroup-topLeft" }, vl = { class: "buttonGroup-left" }, fl = { class: "buttonGroup-right" }, gl = { class: "buttonGroup-bottom" }, hl = { class: "top-panel" }, bl = { class: "panel-header" }, yl = { class: "panel-body" }, _l = { class: "left-panel" }, wl = { class: "panel-header" }, Cl = { class: "panel-body" }, kl = { class: "right-panel" }, Pl = { class: "panel-header" }, xl = { class: "panel-body" }, Rl = {
970
- key: 0,
971
- class: "loading-overlay"
972
- }, Ml = /* @__PURE__ */ Le({
973
- __name: "threeSceneView",
974
- props: {
975
- fileBlobs: { default: () => [] },
976
- threeData: {}
977
- },
978
- setup(y) {
979
- const m = y, p = g(Ye.ROBOT), n = g(null), d = g(), _ = g(!1), s = g(""), h = g(!1), v = g(""), w = g(!1), a = g(""), C = g(!1), u = g(""), k = be(null), i = be(null), r = g(), {
980
- currentModels: M,
981
- resetView: S,
982
- initThreeJS: A,
983
- handleResize: f,
984
- getThreeJSObjects: T,
985
- cleanup: Y,
986
- setAndFitModels: B,
987
- axesHelperVisible: Z,
988
- toggleAxesVisibility: ee,
989
- zoomIn: G,
990
- zoomOut: _e
991
- } = Ne(n), { loadSceneFromFile: ve } = ut(
992
- T,
993
- M,
994
- _,
995
- s
996
- ), { isAnimating: se, toggleAnimation: D, stopAnimation: x } = nt(T, M), { isClipping: N, activeClippingAxis: U, toggleClipping: H, updateClippingPlanes: O } = at(T, M), { initRaycaster: te, selectedObject3D: q, setSelectedObjVisible: J, updatePosition: ie, updateRotation: $, dispose: ne } = ct(n, T, M), fe = () => {
997
- ee();
998
- }, re = (e) => {
999
- U.value = e, O();
1000
- }, we = Pe(() => p.value === Ye.ROBOT), Ae = Pe(() => p.value === Ye.PIPECOMPARSION), ce = (e) => {
1001
- h.value = !0, v.value = e, e === "剖面视图" && !N.value && H();
1002
- }, ge = (e) => {
1003
- w.value = !0, a.value = e;
1004
- }, $e = () => {
1005
- var e;
1006
- (e = r == null ? void 0 : r.value) == null || e.playAnimation();
1007
- }, Re = () => {
1008
- var e;
1009
- (e = r == null ? void 0 : r.value) == null || e.stopAnimation();
1010
- }, Fe = () => {
1011
- var e;
1012
- (e = r == null ? void 0 : r.value) == null || e.forwardFrame();
1013
- }, ze = () => {
1014
- var e;
1015
- (e = r == null ? void 0 : r.value) == null || e.backwardFrame();
1016
- };
1017
- ae(() => m.fileBlobs, (e) => {
1018
- if (e && e.length > 0) {
1019
- const o = e[0];
1020
- if (!o.name.toLowerCase().endsWith(".urdf"))
1021
- return;
1022
- ve(o).then((b) => {
1023
- k.value = b;
1024
- }).catch((b) => {
1025
- console.error("加载URDF文件时发生错误:", b), E.error("加载urdf模型失败"), k.value = null;
1026
- });
1027
- } else
1028
- k.value = null;
1029
- }, {
1030
- immediate: !0,
1031
- deep: !0
1032
- }), ae(k, (e) => {
1033
- B(e ? [e] : []), te();
1034
- });
1035
- let t = null;
1036
- return Ge(async () => {
1037
- await Ke();
1038
- try {
1039
- A(), n.value && (t = new ResizeObserver(f), t.observe(n.value));
1040
- const e = T();
1041
- i.value = e.scene;
1042
- } catch (e) {
1043
- console.error("Three.js 初始化失败:", e), E.error("渲染引擎初始化失败!");
1044
- }
1045
- }), Ze(() => {
1046
- v.value = "", a.value = "", t && t.disconnect(), se.value && x(), Y(), ne();
1047
- }), (e, o) => {
1048
- const b = L("el-scrollbar");
1049
- return Q(), Ve("div", cl, [
1050
- pe(c("div", {
1051
- ref_key: "threejsContainer",
1052
- ref: n,
1053
- class: "threejs-container"
1054
- }, null, 512), [
1055
- [de, we.value]
1056
- ]),
1057
- pe(c("div", ul, [
1058
- c("div", pl, null, 512),
1059
- c("div", dl, null, 512)
1060
- ], 512), [
1061
- [de, Ae.value]
1062
- ]),
1063
- c("div", ml, [
1064
- l(z, {
1065
- name: "viewReset",
1066
- size: "24",
1067
- onClick: X(S),
1068
- title: "重置"
1069
- }, null, 8, ["onClick"]),
1070
- l(z, {
1071
- name: "fangda",
1072
- size: "24",
1073
- title: "放大",
1074
- onClick: X(G)
1075
- }, null, 8, ["onClick"]),
1076
- l(z, {
1077
- name: "suoxiao",
1078
- size: "24",
1079
- title: "缩小",
1080
- onClick: X(_e)
1081
- }, null, 8, ["onClick"]),
1082
- l(z, {
1083
- name: "lookAround",
1084
- size: "24",
1085
- onClick: X(D),
1086
- title: X(se) ? "停止动画" : "动画视图"
1087
- }, null, 8, ["onClick", "title"]),
1088
- l(z, {
1089
- name: "zuobiaoxi",
1090
- size: "24",
1091
- active: X(Z),
1092
- onClick: fe,
1093
- title: "显隐坐标轴"
1094
- }, null, 8, ["active"])
1095
- ]),
1096
- c("div", vl, [
1097
- Me(e.$slots, "button-left", { switchRightPanel: ce }, void 0, !0),
1098
- l(z, {
1099
- name: "jiegoushu",
1100
- size: "24",
1101
- onClick: o[0] || (o[0] = (P) => ce("场景树")),
1102
- active: h.value && v.value === "场景树",
1103
- title: "场景树"
1104
- }, null, 8, ["active"]),
1105
- l(z, {
1106
- name: "clipping",
1107
- size: "24",
1108
- onClick: o[1] || (o[1] = (P) => ce("剖面视图")),
1109
- active: h.value && v.value === "剖面视图",
1110
- title: "剖面视图"
1111
- }, null, 8, ["active"]),
1112
- l(z, {
1113
- name: "zhaozi",
1114
- size: "24",
1115
- onClick: o[2] || (o[2] = (P) => ce("工件树")),
1116
- active: h.value && v.value === "工件树",
1117
- title: "工件 "
1118
- }, null, 8, ["active"]),
1119
- l(z, {
1120
- name: "donghuafangzhen",
1121
- size: "24",
1122
- onClick: o[3] || (o[3] = (P) => ce("场景4"))
1123
- })
1124
- ]),
1125
- c("div", fl, [
1126
- Me(e.$slots, "button-right", { switchRightPanel: ge }, void 0, !0),
1127
- l(z, {
1128
- name: "donghuafangzhen",
1129
- size: "24"
1130
- }),
1131
- l(z, {
1132
- name: "donghuafangzhen",
1133
- size: "24"
1134
- }),
1135
- l(z, {
1136
- name: "guanjiekongzhi",
1137
- size: "24",
1138
- onClick: o[4] || (o[4] = (P) => ge("关节控制")),
1139
- active: w.value && a.value === "关节控制",
1140
- title: "关节控制"
1141
- }, null, 8, ["active"]),
1142
- l(z, {
1143
- name: "donghuafangzhen",
1144
- size: "24",
1145
- title: "动画仿真",
1146
- onClick: o[5] || (o[5] = (P) => ge("动画仿真")),
1147
- active: w.value && a.value === "动画仿真"
1148
- }, null, 8, ["active"]),
1149
- l(z, {
1150
- name: "donghuafangzhen",
1151
- size: "24",
1152
- title: "urdf动画",
1153
- onClick: o[6] || (o[6] = (P) => ge("urdf动画")),
1154
- active: w.value && a.value === "urdf动画"
1155
- }, null, 8, ["active"]),
1156
- l(z, {
1157
- name: "donghuafangzhen",
1158
- size: "24"
1159
- })
1160
- ]),
1161
- c("div", gl, [
1162
- l(z, {
1163
- name: "kuaitui",
1164
- size: "24",
1165
- backgroundColor: "#ffffff",
1166
- title: "快退",
1167
- onClick: ze
1168
- }),
1169
- l(z, {
1170
- name: "bofang",
1171
- size: "24",
1172
- backgroundColor: "#ffffff",
1173
- title: "播放",
1174
- onClick: $e
1175
- }),
1176
- l(z, {
1177
- name: "kuaijin",
1178
- size: "24",
1179
- backgroundColor: "#ffffff",
1180
- title: "快进",
1181
- onClick: Fe
1182
- }),
1183
- l(z, {
1184
- name: "zanting",
1185
- size: "24",
1186
- backgroundColor: "#ffffff",
1187
- title: "暂停",
1188
- onClick: Re
1189
- })
1190
- ]),
1191
- pe(c("div", hl, [
1192
- c("div", bl, [
1193
- c("span", null, he(u.value), 1),
1194
- c("span", {
1195
- class: "close",
1196
- onClick: o[7] || (o[7] = (P) => C.value = !1)
1197
- }, " X ")
1198
- ]),
1199
- c("div", yl, [
1200
- l(b, { height: "100%" }, {
1201
- default: R(() => [
1202
- Me(e.$slots, "top-panel", { topPanelType: u.value }, void 0, !0)
1203
- ]),
1204
- _: 3
1205
- })
1206
- ])
1207
- ], 512), [
1208
- [de, C.value]
1209
- ]),
1210
- pe(c("div", _l, [
1211
- c("div", wl, [
1212
- c("span", null, he(v.value), 1),
1213
- c("span", {
1214
- class: "close",
1215
- onClick: o[8] || (o[8] = (P) => h.value = !1)
1216
- }, " X ")
1217
- ]),
1218
- c("div", Cl, [
1219
- l(b, { height: "100%" }, {
1220
- default: R(() => {
1221
- var P;
1222
- return [
1223
- v.value === "场景树" ? (Q(), ye(st, {
1224
- key: 0,
1225
- model: k.value
1226
- }, null, 8, ["model"])) : ke("", !0),
1227
- v.value === "剖面视图" ? (Q(), ye(Qe, {
1228
- key: 1,
1229
- value: X(U),
1230
- onChange: re
1231
- }, null, 8, ["value"])) : ke("", !0),
1232
- v.value === "工件树" ? (Q(), ye(pt, {
1233
- key: 2,
1234
- model: (P = X(q)) == null ? void 0 : P.obj,
1235
- onVisibleChange: X(J),
1236
- onUpdatePosition: X(ie),
1237
- onUpdateRotation: X($)
1238
- }, null, 8, ["model", "onVisibleChange", "onUpdatePosition", "onUpdateRotation"])) : ke("", !0)
1239
- ];
1240
- }),
1241
- _: 1
1242
- })
1243
- ])
1244
- ], 512), [
1245
- [de, h.value]
1246
- ]),
1247
- pe(c("div", kl, [
1248
- c("div", Pl, [
1249
- c("span", null, he(a.value), 1),
1250
- c("span", {
1251
- class: "close",
1252
- onClick: o[9] || (o[9] = (P) => w.value = !1)
1253
- }, " X ")
1254
- ]),
1255
- c("div", xl, [
1256
- l(b, { height: "100%" }, {
1257
- default: R(() => [
1258
- pe(l(it, { model: k.value }, null, 8, ["model"]), [
1259
- [de, a.value === "关节控制"]
1260
- ]),
1261
- pe(l(Ht, {
1262
- ref_key: "animationPanelRef",
1263
- ref: r,
1264
- model: k.value,
1265
- threeData: m.threeData
1266
- }, null, 8, ["model", "threeData"]), [
1267
- [de, a.value === "动画仿真"]
1268
- ]),
1269
- Me(e.$slots, "right-panel", { rightPanelType: a.value }, void 0, !0)
1270
- ]),
1271
- _: 3
1272
- })
1273
- ])
1274
- ], 512), [
1275
- [de, w.value]
1276
- ]),
1277
- _.value ? (Q(), Ve("div", Rl, [
1278
- o[10] || (o[10] = c("div", { class: "loading-spinner" }, null, -1)),
1279
- c("p", null, he(s.value), 1)
1280
- ])) : ke("", !0),
1281
- l(rl, {
1282
- ref_key: "pipeAnalysisPanelRef",
1283
- ref: d
1284
- }, null, 512)
1285
- ]);
1286
- };
1287
- }
1288
- }), Jl = /* @__PURE__ */ Ue(Ml, [["__scopeId", "data-v-ec34be42"]]);
1289
- export {
1290
- Jl as default
1291
- };