ss-component-new 1.3.702 → 1.3.704

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 (89) hide show
  1. package/dist/JSEncrypt-B36c1iN5.js +1983 -0
  2. package/dist/MTLLoader-CkNZudBE.js +657 -0
  3. package/dist/URDFLoader-DIzEVzUD.js +2299 -0
  4. package/dist/animationData-DvL_4GZ5.js +83 -0
  5. package/dist/array-jbiWLnR-.js +1045 -0
  6. package/dist/clone-Dp_gc9ll.js +8 -0
  7. package/dist/config.js +1 -1
  8. package/dist/eleIcon-qStmsM1q.js +29 -0
  9. package/dist/fileUtil-UOt_otFo.js +20 -0
  10. package/dist/iconfont-C9LP7Z-d.js +1026 -0
  11. package/dist/icons/svg/functionList.svg +1 -0
  12. package/dist/icons/svg/method.svg +1 -0
  13. package/dist/index-11kpzK0A.js +209 -0
  14. package/dist/index-6kpIJwSG.js +98 -0
  15. package/dist/index-B0H3C7WG.js +103 -0
  16. package/dist/index-B0l2_9Pc.js +30 -0
  17. package/dist/index-BFnTZBOW.js +93 -0
  18. package/dist/index-BHtNKL1L.js +27 -0
  19. package/dist/index-BbyrFzEO.js +93 -0
  20. package/dist/index-BooO2Bml.js +78 -0
  21. package/dist/index-Bw3sTXPI.js +8993 -0
  22. package/dist/index-BzUgGzuc.js +48 -0
  23. package/dist/index-CGi0g-VN.js +627 -0
  24. package/dist/index-CSD3bL5o.js +83 -0
  25. package/dist/index-CV_jQDcg.js +9 -0
  26. package/dist/index-CWOXvFfD.js +44 -0
  27. package/dist/index-Ch8te5LO.js +411 -0
  28. package/dist/{index-BKoAuSBh.js → index-ChNfRlIP.js} +18 -223
  29. package/dist/index-CydXQbtX.js +622 -0
  30. package/dist/index-DAJxL40d.js +55 -0
  31. package/dist/index-DBsEVMiM.js +201 -0
  32. package/dist/index-DG4hoOWt.js +665 -0
  33. package/dist/index-DUbk5m5P.js +99 -0
  34. package/dist/index-Da5qIKd6.js +119 -0
  35. package/dist/index-Ds6m_4JJ.js +28500 -0
  36. package/dist/index-DupTchhl.js +1000 -0
  37. package/dist/index-DyCq_odP.js +331 -0
  38. package/dist/index-OGTnqUDW.js +20578 -0
  39. package/dist/index-PV2PkfRE.js +63008 -0
  40. package/dist/index-Ru-cNTPj.js +84 -0
  41. package/dist/index-SohCFB2I.js +107 -0
  42. package/dist/index-UB_oCdlo.js +62 -0
  43. package/dist/index-YcuQhWbw.js +25297 -0
  44. package/dist/index-YjBTGOkO.js +61 -0
  45. package/dist/index-d9yiC1Rr.js +572 -0
  46. package/dist/index-eunh_06c.js +873 -0
  47. package/dist/index-jbOjjV0j.js +447 -0
  48. package/dist/index-l3g33MKM.js +470 -0
  49. package/dist/index-rlStojTL.js +52 -0
  50. package/dist/index-uF-ibwG0.js +9 -0
  51. package/dist/{index-DXYV8CAc.js → index.vue_vue_type_style_index_0_scoped_05e3a1d8_lang-C2itW9KG.js} +111121 -112354
  52. package/dist/isString-0ZglyOfu.js +8 -0
  53. package/dist/localIcon-D5UoFBU5.js +76 -0
  54. package/dist/main-Dqoc5YbP.js +502 -0
  55. package/dist/menuIndex-BB0uVPRX.js +159 -0
  56. package/dist/obj/model.mtl +42 -0
  57. package/dist/obj/model.obj +26110 -0
  58. package/dist/request-1RPa2bBn.js +9048 -0
  59. package/dist/ss-component.css +8 -8
  60. package/dist/ss-component.js +64 -28
  61. package/dist/ss-component2.js +75 -15
  62. package/dist/ss-component3.js +1 -1
  63. package/dist/threeModel-BI3l0-99.js +1109 -0
  64. package/dist/threePreview-BkYkq6k4.js +2918 -0
  65. package/dist/threeSceneView-ChFhJWgw.js +1290 -0
  66. package/dist/threeSceneViewForCPMPIP-DE5Oil86.js +539 -0
  67. package/dist/threeTrackPathView-BxUqwu4s.js +620 -0
  68. package/dist/threeViewerHost-Dc7tuhCy.js +233 -0
  69. package/dist/urdfTree-VRms7Vm3.js +254 -0
  70. package/dist/workpieceTreePanel-Bnhv3-BB.js +559 -0
  71. package/package.json +7 -8
  72. package/public/config.js +1 -1
  73. package/public/icons/svg/functionList.svg +1 -0
  74. package/public/icons/svg/method.svg +1 -0
  75. package/public/obj/model.mtl +42 -0
  76. package/public/obj/model.obj +26110 -0
  77. package/dist/index-BZ6XZp4O.js +0 -182
  78. package/dist/index-DMqUY4yR.js +0 -27
  79. package/dist/index-Dad_IdSm.js +0 -213
  80. package/dist/index-Nxu5ivW5.js +0 -1044
  81. package/dist/index-T_MmKXF1.js +0 -50
  82. package/dist/menu-BYmz2cKN.js +0 -5229
  83. package/dist/platform-C9131Sg-.js +0 -11490
  84. /package/dist/icons/svg/{update.svg → Update.svg} +0 -0
  85. /package/dist/icons/svg/{table-close.svg → tableClose.svg} +0 -0
  86. /package/dist/icons/svg/{table-expand.svg → tableExpand.svg} +0 -0
  87. /package/public/icons/svg/{update.svg → Update.svg} +0 -0
  88. /package/public/icons/svg/{table-close.svg → tableClose.svg} +0 -0
  89. /package/public/icons/svg/{table-expand.svg → tableExpand.svg} +0 -0
@@ -0,0 +1,1109 @@
1
+ import { ref as b, watch as Pe, createElementBlock as q, openBlock as H, createBlock as Le, computed as ie, onMounted as $e, onUnmounted as je, Fragment as Xe, renderList as He, createElementVNode as h, createCommentVNode as xe, toDisplayString as ae, resolveComponent as Je, createVNode as z, defineComponent as Ye, normalizeStyle as Fe, normalizeClass as Te, nextTick as Be, onBeforeUnmount as qe, withDirectives as se, unref as O, withCtx as Re, isRef as he, vModelRadio as ye, vShow as we } from "vue";
2
+ import { V as M, B as be, S as Ze, C as We, P as Ke, W as Ne, b as Qe, A as et, c as tt, M as ke, X as nt, G as at, e as Me, f as ot, h as Se, i as st, D as ze, H as lt, j as Ve, k as Oe, l as Ue, m as _e, E as Ae, n as de, o as it, p as rt, T as ct } from "./index.vue_vue_type_style_index_0_scoped_05e3a1d8_lang-C2itW9KG.js";
3
+ import { O as ut } from "./iconfont-C9LP7Z-d.js";
4
+ import { W as dt, X as pt } from "./index-PV2PkfRE.js";
5
+ import { _ as me } from "./_plugin-vue_export-helper-CHgC5LLL.js";
6
+ import { c as Ge } from "./index-Bw3sTXPI.js";
7
+ import { E as Ie } from "./request-1RPa2bBn.js";
8
+ function mt(E) {
9
+ let f = null, r = null, c = null, v = null, w = null, k = null, i = null, A = null;
10
+ const F = 1e3 / 30;
11
+ let B = 0;
12
+ const D = b([]), l = b(new M()), C = b(new M()), g = () => {
13
+ if (!E.value) return;
14
+ f = new Ze(), f.background = new We(15790320);
15
+ const d = E.value;
16
+ r = new Ke(75, d.clientWidth / d.clientHeight, 0.1, 1e4), r.position.set(0, -8, 4), r.up.set(0, 0, 1), r.lookAt(0, 0, 0), c = new Ne({
17
+ antialias: !0,
18
+ alpha: !0
19
+ }), c.setSize(d.clientWidth, d.clientHeight), c.localClippingEnabled = !0, c.shadowMap.enabled = !0, c.shadowMap.type = Qe, c.toneMapping = et, c.toneMappingExposure = 1, c.outputColorSpace = tt, d.appendChild(c.domElement), v = new ut(r, c.domElement), v.enableDamping = !0, v.dampingFactor = 0.05, v.mouseButtons = {
20
+ // LEFT: null,
21
+ LEFT: ke.ROTATE,
22
+ MIDDLE: ke.PAN,
23
+ RIGHT: ke.ROTATE
24
+ }, v.panSpeed = 0.7, w = new nt(r, c, {
25
+ container: d,
26
+ type: "cube",
27
+ placement: "top-right",
28
+ offset: {
29
+ top: 10,
30
+ right: 10
31
+ },
32
+ background: {
33
+ color: "#D1D1D1",
34
+ opacity: 1
35
+ },
36
+ front: {
37
+ label: "Top"
38
+ },
39
+ bottom: {
40
+ label: "Front"
41
+ },
42
+ left: {
43
+ label: "Left"
44
+ },
45
+ right: {
46
+ label: "Right"
47
+ },
48
+ top: {
49
+ label: "Back"
50
+ },
51
+ back: {
52
+ label: "Bottom"
53
+ }
54
+ }), w.attachControls(v), p(), _();
55
+ }, e = (d, a) => {
56
+ i && (f.remove(i), i.dispose()), A && (f.remove(A), A.geometry.dispose(), A.material.dispose());
57
+ const S = Math.min(Math.max(Math.floor(d / 20), 30), 40);
58
+ i = new at(d, S, 13421772, 14540253), i.rotateX(Math.PI / 2), i.position.copy(a), f.add(i);
59
+ const R = new Me(d, d), X = new ot({
60
+ opacity: 0.3,
61
+ // 阴影透明度
62
+ color: 0
63
+ });
64
+ A = new Se(R, X), A.position.copy(a), A.position.z -= 0.01, A.receiveShadow = !0, f.add(A);
65
+ }, u = () => {
66
+ if (D.value.length === 0)
67
+ return;
68
+ const d = new be();
69
+ let a = !1;
70
+ if (D.value.forEach((N) => {
71
+ if (N.userData.boundingBox)
72
+ d.union(N.userData.boundingBox), a = !0;
73
+ else if (N.userData.modelId && modelBoundingBoxes.has(N.userData.modelId)) {
74
+ const te = modelBoundingBoxes.get(N.userData.modelId);
75
+ d.union(te.box), a = !0;
76
+ } else
77
+ d.expandByObject(N), a = !0;
78
+ }), !a) {
79
+ console.warn("无法计算包围盒,网格更新失败");
80
+ return;
81
+ }
82
+ const S = d.getSize(new M()), R = d.getCenter(new M()), X = Math.max(S.x, S.y, S.z), W = Math.max(X * 8, 50), K = new M(
83
+ R.x,
84
+ R.y,
85
+ d.min.z
86
+ // 模型的最底部
87
+ );
88
+ e(W, K);
89
+ }, p = () => {
90
+ const d = new st(4210752, 0.6);
91
+ f.add(d);
92
+ const a = new ze(16777215, 2);
93
+ a.position.set(10, 10, 8), a.castShadow = !0, a.shadow.mapSize.width = 4096, a.shadow.mapSize.height = 4096, a.shadow.camera.near = 0.5, a.shadow.camera.far = 50, a.shadow.camera.left = -50, a.shadow.camera.right = 50, a.shadow.camera.top = 50, a.shadow.camera.bottom = -50, f.add(a);
94
+ const S = new ze(16777215, 0.8);
95
+ S.position.set(-8, -8, 6), f.add(S);
96
+ const R = new ze(16777215, 0.6);
97
+ R.position.set(0, -15, 2), f.add(R);
98
+ const X = new lt(16777215, 4473924, 0.8);
99
+ f.add(X);
100
+ const W = new Ve(16777215, 1, 50);
101
+ W.position.set(15, 15, 15), f.add(W);
102
+ const K = new Ve(16777215, 0.5, 50);
103
+ K.position.set(-15, -15, 15), f.add(K);
104
+ }, _ = () => {
105
+ k = requestAnimationFrame(_), v && v.update();
106
+ const d = performance.now(), a = d - B;
107
+ a < F || (B = d - a % F, c && f && r && c.render(f, r), w && w.render());
108
+ }, U = (d) => {
109
+ [
110
+ "map",
111
+ "normalMap",
112
+ "bumpMap",
113
+ "roughnessMap",
114
+ "metalnessMap",
115
+ "emissiveMap",
116
+ "specularMap",
117
+ "envMap",
118
+ "lightMap",
119
+ "aoMap",
120
+ "displacementMap"
121
+ ].forEach((S) => {
122
+ d[S] && d[S].dispose && d[S].dispose();
123
+ }), d.dispose && d.dispose();
124
+ }, V = (d) => {
125
+ d == null || d.traverse((a) => {
126
+ a.geometry && a.geometry.dispose(), a.material && (Array.isArray(a.material) ? a.material.forEach((S) => {
127
+ U(S);
128
+ }) : U(a.material));
129
+ });
130
+ };
131
+ return {
132
+ // 响应式数据
133
+ currentModels: D,
134
+ initialCameraPosition: l,
135
+ initialTargetPosition: C,
136
+ // 方法
137
+ initThreeJS: g,
138
+ handleResize: () => {
139
+ if (!E.value || !r || !c || !w) return;
140
+ const d = E.value, a = d.clientWidth, S = d.clientHeight;
141
+ r.aspect = a / S, r.updateProjectionMatrix(), c.setSize(a, S), w.update();
142
+ },
143
+ fitCameraToAllModels: (d) => {
144
+ if (!r || !v || D.value.length === 0) return;
145
+ const a = new be();
146
+ let S = !1;
147
+ if (D.value.forEach((te) => {
148
+ if (te.userData.boundingBox)
149
+ a.union(te.userData.boundingBox), S = !0;
150
+ else if (te.userData.modelId && d.has(te.userData.modelId)) {
151
+ const re = d.get(te.userData.modelId);
152
+ a.union(re.box), S = !0;
153
+ } else
154
+ a.expandByObject(te), S = !0;
155
+ }), !S) {
156
+ console.warn("无法计算包围盒");
157
+ return;
158
+ }
159
+ const R = a.getSize(new M()), X = a.getCenter(new M()), K = Math.max(R.x, R.y, R.z) * 0.8, N = new M(X.x + K, X.y - K, X.z + K);
160
+ r.position.copy(N), r.lookAt(X), v.target.copy(X), v.update(), l.value.copy(N), C.value.copy(X), u();
161
+ },
162
+ getThreeJSObjects: () => ({
163
+ scene: f,
164
+ camera: r,
165
+ renderer: c,
166
+ controls: v,
167
+ gizmo: w
168
+ }),
169
+ clearAllModels: () => {
170
+ if (!f) return;
171
+ D.value.forEach((a) => {
172
+ f.remove(a), V(a);
173
+ });
174
+ const d = [];
175
+ f.children.forEach((a) => {
176
+ !a.isLight && !a.isCamera && a.type !== "GridHelper" && a !== A && d.push(a);
177
+ }), d.forEach((a) => {
178
+ f.remove(a), V(a);
179
+ }), D.value = [], u();
180
+ },
181
+ cleanup: () => {
182
+ k && cancelAnimationFrame(k), i && i.dispose(), A && (A.geometry.dispose(), A.material.dispose()), c && c.dispose(), v && v.dispose(), w && w.dispose();
183
+ },
184
+ updateGridForModels: u
185
+ };
186
+ }
187
+ function ft(E, f) {
188
+ const r = b(!1);
189
+ let c = null, v = 12700, w = new M(), k = new M(), i = new M(), A = 0, L = null;
190
+ const F = (e) => e < 0.5 ? 4 * e * e * e : 1 - Math.pow(-2 * e + 2, 3) / 2, B = (e) => {
191
+ const u = new M(), p = A * 1.2, _ = new M(i.x + p, i.y, i.z), U = new M(i.x, i.y + p, i.z), V = new M(i.x, i.y - p, i.z);
192
+ if (e <= 0.567) {
193
+ const G = e / 0.567 * Math.PI * 2;
194
+ u.x = i.x + Math.cos(G) * p, u.z = i.z + Math.sin(G) * p, u.y = i.y;
195
+ } else if (e <= 0.724) {
196
+ const J = (e - 0.567) / 0.157, G = F(J);
197
+ u.lerpVectors(_, U, G);
198
+ } else if (e <= 0.881) {
199
+ const J = (e - 0.724) / 0.157, j = F(J) * Math.PI;
200
+ u.x = i.x + Math.sin(j) * p, u.y = i.y + Math.cos(j) * p, u.z = i.z;
201
+ } else {
202
+ const J = (e - 0.881) / 0.119, G = F(J);
203
+ u.lerpVectors(V, w, G);
204
+ }
205
+ return u;
206
+ }, D = () => {
207
+ const { camera: e, controls: u } = E();
208
+ if (!e || !u) return;
209
+ c || (c = Date.now());
210
+ const p = Date.now() - c, _ = Math.min(p / v, 1);
211
+ if (_ >= 1) {
212
+ C();
213
+ return;
214
+ }
215
+ const U = B(_);
216
+ e.position.copy(U), e.lookAt(i), u.target.copy(i), L = requestAnimationFrame(D);
217
+ }, l = () => {
218
+ if (f.value.length === 0) return;
219
+ const { camera: e, controls: u } = E();
220
+ if (!e || !u) return;
221
+ w.copy(e.position), k.copy(u.target);
222
+ const p = new be();
223
+ f.value.forEach((Z) => {
224
+ p.expandByObject(Z);
225
+ });
226
+ const _ = p.getSize(new M());
227
+ i = p.getCenter(new M()), A = Math.max(_.x, _.y, _.z) * 1.2;
228
+ const U = new M(i.x + A * 1.2, i.y, i.z);
229
+ u.enabled = !1;
230
+ const V = e.position.clone(), J = 1e3, G = Date.now(), j = () => {
231
+ const Z = Date.now() - G, ee = Math.min(Z / J, 1), d = F(ee);
232
+ e.position.lerpVectors(V, U, d), e.lookAt(i), u.target.copy(i), ee < 1 ? requestAnimationFrame(j) : (r.value = !0, c = null, D());
233
+ };
234
+ j();
235
+ }, C = () => {
236
+ r.value = !1, c = null, L && (cancelAnimationFrame(L), L = null);
237
+ const { controls: e } = E();
238
+ e && (e.enabled = !0, e.target.copy(k));
239
+ };
240
+ return {
241
+ isAnimating: r,
242
+ toggleAnimation: () => {
243
+ if (r.value) {
244
+ r.value = !1, c = null, L && (cancelAnimationFrame(L), L = null);
245
+ const { camera: e, controls: u } = E();
246
+ if (!e || !u) return;
247
+ u.enabled = !0;
248
+ const p = e.position.clone(), _ = u.target.clone(), U = 1500, V = Date.now(), J = () => {
249
+ const G = Date.now() - V, j = Math.min(G / U, 1), Z = F(j);
250
+ e.position.lerpVectors(p, w, Z), u.target.lerpVectors(_, k, Z), j < 1 && requestAnimationFrame(J);
251
+ };
252
+ J();
253
+ } else
254
+ l();
255
+ },
256
+ startAnimation: l,
257
+ stopAnimation: C
258
+ };
259
+ }
260
+ function vt(E, f) {
261
+ const r = b(!1), c = b("none");
262
+ let v = [], w = [], k = new be(), i = new M();
263
+ const A = () => {
264
+ v = [
265
+ new _e(new M(1, 0, 0), 0),
266
+ // X轴平面
267
+ new _e(new M(0, 1, 0), 0),
268
+ // Y轴平面
269
+ new _e(new M(0, 0, 1), 0)
270
+ // Z轴平面
271
+ ];
272
+ }, L = () => {
273
+ k.makeEmpty(), f.value.forEach((g) => {
274
+ k.expandByObject(g);
275
+ }), i = k.getCenter(new M());
276
+ }, F = (g) => {
277
+ const e = k.getSize(new M());
278
+ let u, p, _;
279
+ g === "x" ? (u = new Me(e.z * 1.2, e.y * 1.2), p = new M(i.x, i.y, i.z), _ = new Ae(0, Math.PI / 2, 0)) : g === "y" ? (u = new Me(e.x * 1.2, e.z * 1.2), p = new M(i.x, i.y, i.z), _ = new Ae(Math.PI / 2, 0, 0)) : g === "z" && (u = new Me(e.x * 1.2, e.y * 1.2), p = new M(i.x, i.y, i.z), _ = new Ae(0, 0, 0));
280
+ const U = new Oe({
281
+ color: 8900331,
282
+ transparent: !0,
283
+ opacity: 0.3,
284
+ side: Ue,
285
+ depthWrite: !1
286
+ }), V = new Se(u, U);
287
+ return V.position.copy(p), V.rotation.copy(_), V;
288
+ }, B = () => {
289
+ if (D(), l(), c.value === "none")
290
+ return;
291
+ L();
292
+ let g = null;
293
+ if (c.value === "x" ? (v[0].constant = -i.x, g = v[0]) : c.value === "y" ? (v[1].constant = -i.y, g = v[1]) : c.value === "z" && (v[2].constant = -i.z, g = v[2]), g) {
294
+ f.value.forEach((u) => {
295
+ u.traverse((p) => {
296
+ p.isMesh && p.material && (Array.isArray(p.material) ? p.material.forEach((_) => {
297
+ _.clippingPlanes = [g];
298
+ }) : p.material.clippingPlanes = [g]);
299
+ });
300
+ });
301
+ const { scene: e } = E();
302
+ if (e) {
303
+ const u = F(c.value);
304
+ e.add(u), w.push(u);
305
+ }
306
+ }
307
+ }, D = () => {
308
+ f.value.forEach((g) => {
309
+ g.traverse((e) => {
310
+ e.isMesh && e.material && (Array.isArray(e.material) ? e.material.forEach((u) => {
311
+ u.clippingPlanes = [];
312
+ }) : e.material.clippingPlanes = []);
313
+ });
314
+ });
315
+ }, l = () => {
316
+ const { scene: g } = E();
317
+ g && w.forEach((e) => {
318
+ g.remove(e), e.geometry.dispose(), e.material.dispose();
319
+ }), w = [];
320
+ };
321
+ return {
322
+ isClipping: r,
323
+ activeClippingAxis: c,
324
+ toggleClipping: () => {
325
+ r.value = !r.value, r.value ? (A(), f.value.length > 0 && L()) : (c.value = "none", D(), l());
326
+ },
327
+ updateClippingPlanes: B,
328
+ clearClippingPlanes: D,
329
+ clearClippingMeshes: l
330
+ };
331
+ }
332
+ const gt = { class: "panel-content" }, ht = {
333
+ __name: "animationPanel",
334
+ props: {
335
+ animationData: Object,
336
+ model: Object
337
+ },
338
+ setup(E) {
339
+ const f = E;
340
+ b();
341
+ const r = b();
342
+ return Pe(
343
+ () => [f == null ? void 0 : f.animationData],
344
+ () => {
345
+ var v;
346
+ let c = ((v = Ge(f == null ? void 0 : f.animationData)) == null ? void 0 : v["输出(动画数据)Content"]) ?? [];
347
+ c && (r.value = c);
348
+ },
349
+ { deep: !0, immediate: !0 }
350
+ ), (c, v) => {
351
+ var w, k, i;
352
+ return H(), q("div", gt, [
353
+ (H(), Le(dt, {
354
+ itemData: (w = r.value) == null ? void 0 : w.compData,
355
+ key: (k = r.value) == null ? void 0 : k.id,
356
+ index: (i = r.value) == null ? void 0 : i.id,
357
+ showHeader: !1
358
+ }, null, 8, ["itemData", "index"]))
359
+ ]);
360
+ };
361
+ }
362
+ }, yt = /* @__PURE__ */ me(ht, [["__scopeId", "data-v-2387536e"]]), wt = { class: "panel-content" }, xt = {
363
+ key: 0,
364
+ class: "joints-list"
365
+ }, Mt = { class: "joint-info-row" }, Pt = { class: "joint-left" }, bt = { class: "joint-name" }, Ct = { class: "joint-range" }, kt = { class: "joint-type" }, zt = {
366
+ key: 0,
367
+ class: "joint-control-row"
368
+ }, _t = { class: "slider-container" }, At = ["min", "max", "value", "onInput", "disabled"], Dt = { class: "value-display" }, St = { class: "joint-value" }, Et = { class: "unit" }, Ft = {
369
+ key: 1,
370
+ class: "empty-state"
371
+ }, pe = 1e-3, Tt = 1e3, De = 60, Bt = {
372
+ __name: "jointPanel",
373
+ props: {
374
+ model: Object,
375
+ scene: Object,
376
+ animationData: Object
377
+ },
378
+ setup(E, { expose: f }) {
379
+ const r = E;
380
+ b(!0);
381
+ const c = b([]), v = b(null), w = b(null), k = b(12.5), i = b(), A = b(1302), L = b(30), F = b(!1), B = b(!1), D = b(0), l = b(0), C = b(null), g = it.degToRad, e = b(1), u = () => Tt / De / e.value;
382
+ let p = [];
383
+ Pe(
384
+ () => r.animationData,
385
+ (n) => {
386
+ var s;
387
+ A.value = n.extra.管长, k.value = n.extra.外径 / 2;
388
+ let m = ((s = Ge(n)) == null ? void 0 : s["输出(动画数据)"]) ?? [];
389
+ m && m.length > 0 && (p = m);
390
+ },
391
+ { deep: !0 }
392
+ ), ie(() => p.length > 0);
393
+ const _ = (n, m = !1) => n === "revolute" ? m ? Math.PI : -Math.PI : n === "prismatic" ? m ? 1 : -1 : 0, U = () => {
394
+ if (!v.value)
395
+ return Ie.error("未加载 URDF"), !1;
396
+ let n = null;
397
+ return v.value.traverse((m) => {
398
+ n || m.name === "Pipe_Link" && m.traverse((s) => {
399
+ s instanceof Se && !n && (n = s);
400
+ });
401
+ }), n ? (n.position.y -= L.value * pe, i.value = n, n.material = new Oe({
402
+ color: 11184810,
403
+ shininess: 80,
404
+ side: Ue
405
+ }), !0) : (Ie.error('在 "Pipe_Link" 内未找到任何 Mesh'), !1);
406
+ }, V = (n) => {
407
+ if (!n || !n.joints)
408
+ return console.warn("URDF模型没有关节信息"), [];
409
+ let m = null;
410
+ if (n.traverse((x) => {
411
+ x.name === "Pipe_Link" && !m && (m = x);
412
+ }), m)
413
+ i.value = m;
414
+ else
415
+ return console.warn("未找到管子模型"), [];
416
+ const s = [];
417
+ return Object.keys(n.joints).forEach((x) => {
418
+ const o = n.joints[x];
419
+ if (o._jointType === "fixed")
420
+ return;
421
+ const t = o.limit ? {
422
+ lower: o.limit.lower ?? _(o._jointType, !1),
423
+ upper: o.limit.upper ?? _(o._jointType, !0)
424
+ } : {
425
+ lower: _(o._jointType, !1),
426
+ upper: _(o._jointType, !0)
427
+ };
428
+ s.push({
429
+ name: x,
430
+ type: o._jointType || "unknown",
431
+ limit: t,
432
+ currentValue: o.angle || 0,
433
+ urdfJoint: o
434
+ });
435
+ }), s.sort((x, o) => x.name.localeCompare(o.name));
436
+ }, J = (n, m) => {
437
+ const s = c.value.find((o) => o.name === n);
438
+ if (!s) return;
439
+ const x = parseFloat(m);
440
+ if (s.limit) {
441
+ const o = Math.max(s.limit.lower, Math.min(s.limit.upper, x));
442
+ s.currentValue = o;
443
+ } else
444
+ s.currentValue = x;
445
+ r.model && r.model.setJointValue ? r.model.setJointValue(n, s.currentValue) : s.urdfJoint && s.urdfJoint.setJointValue(s.currentValue);
446
+ }, G = (n) => n.reduce((m, s) => {
447
+ let x = 0;
448
+ const o = s.Y ?? 0, t = s.C ?? 0, y = s.R ?? 0;
449
+ return o > 0 && (x += o), t > 0 && y > 0 && (x += y * g(t)), m + x;
450
+ }, 0), j = (n) => {
451
+ const m = [], s = n.Y ?? 0, x = n.B ?? 0, o = n.C ?? 0, t = n.R ?? 0, y = {
452
+ pos: new M(0, 0, 0),
453
+ localY: new M(0, 1, 0),
454
+ localX: new M(1, 0, 0),
455
+ localZ: new M(0, 0, 1)
456
+ };
457
+ if (!s && !o) return m;
458
+ if (m.push(y.pos.clone()), x !== 0) {
459
+ const Y = new de().makeRotationAxis(y.localY, g(x));
460
+ y.localX.applyMatrix4(Y), y.localZ.applyMatrix4(Y);
461
+ }
462
+ if (s > 0 && (y.pos.add(y.localY.clone().multiplyScalar(s * pe)), m.push(y.pos.clone())), o > 0 && t > 0) {
463
+ const Y = g(o), $ = t * pe, ne = y.pos.clone().add(y.localX.clone().multiplyScalar(-$)), I = Math.max(16, Math.ceil(o / 5));
464
+ for (let P = 1; P <= I; P++) {
465
+ const Q = Y * P / I, oe = new de().makeRotationAxis(y.localZ, Q), ve = y.localX.clone().multiplyScalar($).applyMatrix4(oe), ge = ne.clone().add(ve);
466
+ m.push(ge);
467
+ }
468
+ }
469
+ return m;
470
+ }, Z = (n, m = 0) => {
471
+ let s = p.slice(0, n + 1);
472
+ const x = p[n + 1];
473
+ if (x && m > 0) {
474
+ const I = {
475
+ ...x,
476
+ // 根据插值因子计算当前的弯曲角度C,实现从0到目标角度的平滑过渡
477
+ B: (x.B ?? 0) * m,
478
+ // 根据插值因子计算当前的弯曲角度C,实现从0到目标角度的平滑过渡
479
+ C: (x.C ?? 0) * m
480
+ };
481
+ s.push(I);
482
+ }
483
+ const o = G(s), t = Math.max(0, A.value - o), y = [];
484
+ y.push(new M(0, 0, 0));
485
+ const Y = new M(0, t * pe, 0);
486
+ t > 0 && y.push(Y);
487
+ let $ = {
488
+ pos: Y.clone(),
489
+ localY: new M(0, 1, 0),
490
+ localX: new M(1, 0, 0),
491
+ localZ: new M(0, 0, 1)
492
+ };
493
+ const ne = [];
494
+ for (let I = s.length - 1; I >= 0; I--) {
495
+ const P = s[I], Q = j(P);
496
+ if (Q.length > 0) {
497
+ const oe = Q.map((le) => {
498
+ const ue = le.clone(), Ee = new de();
499
+ return Ee.makeBasis($.localX, $.localY, $.localZ), ue.applyMatrix4(Ee), ue.add($.pos);
500
+ });
501
+ ne.push(oe);
502
+ const ce = oe[oe.length - 1];
503
+ $.pos = ce.clone();
504
+ const ve = P.B ?? 0, ge = P.C ?? 0;
505
+ if (ve !== 0) {
506
+ const le = new de().makeRotationAxis($.localY, g(ve));
507
+ $.localX.applyMatrix4(le), $.localZ.applyMatrix4(le);
508
+ }
509
+ if (ge > 0) {
510
+ const le = g(ge), ue = new de().makeRotationAxis($.localZ, le);
511
+ $.localY.applyMatrix4(ue), $.localX.applyMatrix4(ue);
512
+ }
513
+ }
514
+ }
515
+ for (const I of ne)
516
+ I.length > 1 && y.push(...I.slice(1));
517
+ y.length < 2 && y.push(new M(0, 1e-3, 0));
518
+ try {
519
+ const I = new rt(y, !1, "catmullrom", 0.01), P = new ct(I, Math.max(2, y.length * 4), k.value * pe, 18, !1);
520
+ i.value.geometry.dispose(), i.value.geometry = P;
521
+ } catch (I) {
522
+ console.error("管件更新失败", I);
523
+ }
524
+ }, ee = (n, m, s = 1) => {
525
+ n && (Object.keys(n).forEach((x) => {
526
+ const o = n[x], t = c.value.find((y) => y.name === x);
527
+ t && (t.currentValue = o, r.model && r.model.setJointValue ? r.model.setJointValue(x, o) : t.urdfJoint && t.urdfJoint.setJointValue(o));
528
+ }), Z(m, s));
529
+ }, d = (n, m, s) => n + (m - n) * s, a = (n, m, s) => {
530
+ if (!n || !m) return n || m;
531
+ const x = {};
532
+ return Object.keys(n).forEach((o) => {
533
+ const t = n[o], y = m[o];
534
+ x[o] = d(t, y || t, s);
535
+ }), x;
536
+ }, S = () => {
537
+ if (p.length === 0) {
538
+ console.warn("没有动画数据");
539
+ return;
540
+ }
541
+ U(), F.value = !0, B.value = !1, D.value = 0, l.value = 0, R();
542
+ }, R = () => {
543
+ if (!F.value || B.value) return;
544
+ const n = D.value;
545
+ if (n >= p.length - 1) {
546
+ const o = p[p.length - 1];
547
+ ee(o, p.length - 1, 1), W();
548
+ return;
549
+ }
550
+ const m = l.value / De, s = p[n], x = p[n + 1];
551
+ if (x) {
552
+ const o = a(s, x, m);
553
+ ee(o, n, m);
554
+ } else
555
+ ee(s, n);
556
+ l.value++, l.value > De && (l.value = 0, D.value++), C.value = setTimeout(R, u());
557
+ }, X = () => {
558
+ B.value = !0, C.value && (clearTimeout(C.value), C.value = null);
559
+ }, W = () => {
560
+ F.value = !1, B.value = !1, e.value = 1, C.value && (clearTimeout(C.value), C.value = null);
561
+ };
562
+ f({
563
+ startAnimation: S,
564
+ pauseAnimation: X,
565
+ stopAnimation: W,
566
+ resetAll: () => {
567
+ W(), D.value = 0, l.value = 0, c.value.forEach((n) => {
568
+ (n.type === "revolute" || n.type === "prismatic") && J(n.name, 0);
569
+ }), Z(-1, 0);
570
+ },
571
+ fastForward: () => {
572
+ e.value < 4 && (e.value = Math.min(4, e.value * 2));
573
+ },
574
+ fastBackward: () => {
575
+ e.value > 0.25 && (e.value = Math.max(0.25, e.value / 2));
576
+ }
577
+ }), Pe(
578
+ () => r.model,
579
+ (n) => {
580
+ n ? (v.value = n, c.value = V(n)) : c.value = [];
581
+ },
582
+ { immediate: !0 }
583
+ );
584
+ const re = () => {
585
+ !r.model || F.value && !B.value || c.value.forEach((n) => {
586
+ n.urdfJoint && n.urdfJoint.angle !== void 0 && (n.currentValue = n.urdfJoint.angle);
587
+ });
588
+ }, fe = () => {
589
+ const n = () => {
590
+ re(), w.value = requestAnimationFrame(n);
591
+ };
592
+ n();
593
+ }, Ce = () => {
594
+ w.value && (cancelAnimationFrame(w.value), w.value = null);
595
+ };
596
+ return $e(() => {
597
+ fe();
598
+ }), je(() => {
599
+ Ce(), W();
600
+ }), (n, m) => (H(), q("div", wt, [
601
+ c.value.length > 0 ? (H(), q("div", xt, [
602
+ (H(!0), q(Xe, null, He(c.value, (s) => {
603
+ var x, o, t, y;
604
+ return H(), q("div", {
605
+ key: s.name,
606
+ class: "joint-item"
607
+ }, [
608
+ h("div", Mt, [
609
+ h("div", Pt, [
610
+ h("span", bt, ae(s.name), 1),
611
+ h("span", Ct, " [" + ae(((x = s.limit) == null ? void 0 : x.lower.toFixed(2)) ?? (s.type === "revolute" ? "-3.14" : "-1.00")) + ", " + ae(((o = s.limit) == null ? void 0 : o.upper.toFixed(2)) ?? (s.type === "revolute" ? "3.14" : "1.00")) + "] ", 1)
612
+ ]),
613
+ h("span", kt, ae(s.type), 1)
614
+ ]),
615
+ s.type === "revolute" || s.type === "prismatic" ? (H(), q("div", zt, [
616
+ h("div", _t, [
617
+ h("input", {
618
+ type: "range",
619
+ min: ((t = s.limit) == null ? void 0 : t.lower) ?? (s.type === "revolute" ? -Math.PI : -1),
620
+ max: ((y = s.limit) == null ? void 0 : y.upper) ?? (s.type === "revolute" ? Math.PI : 1),
621
+ step: 0.01,
622
+ value: s.currentValue,
623
+ onInput: (Y) => J(s.name, Y.target.value),
624
+ class: "joint-slider",
625
+ disabled: F.value && !B.value
626
+ }, null, 40, At)
627
+ ]),
628
+ h("div", Dt, [
629
+ h("span", St, ae(s.currentValue ? Number(s.currentValue).toFixed(3) : "0.000"), 1),
630
+ h("span", Et, ae(s.type === "revolute" ? "rad" : "m"), 1)
631
+ ])
632
+ ])) : xe("", !0)
633
+ ]);
634
+ }), 128))
635
+ ])) : (H(), q("div", Ft, m[0] || (m[0] = [
636
+ h("p", null, "未检测到可控制的关节", -1)
637
+ ])))
638
+ ]));
639
+ }
640
+ }, Rt = /* @__PURE__ */ me(Bt, [["__scopeId", "data-v-bcf4fa92"]]), Vt = { class: "panel-content" }, It = "id", Lt = {
641
+ __name: "urdfTree",
642
+ props: {
643
+ model: Object,
644
+ maxExpandCount: {
645
+ type: Number,
646
+ default: 10
647
+ },
648
+ expandStrategy: {
649
+ type: String,
650
+ default: "breadth",
651
+ validator: (E) => ["breadth", "firstLevel"].includes(E)
652
+ }
653
+ },
654
+ emits: ["nodeClick"],
655
+ setup(E, { emit: f }) {
656
+ const r = E, c = f, v = b([]), w = {
657
+ children: "children",
658
+ label: "label"
659
+ }, k = (l) => {
660
+ c("nodeClick", l);
661
+ }, i = (l, C = 0) => {
662
+ const g = [];
663
+ return Array.isArray(l) && (l == null ? void 0 : l.length) > 0 && l.forEach((e) => {
664
+ if (!(e != null && e.isMesh) && ((e == null ? void 0 : e.type) === "URDFJoint" || (e == null ? void 0 : e.type) === "URDFLink")) {
665
+ const u = {
666
+ name: e == null ? void 0 : e.name,
667
+ label: e == null ? void 0 : e.name,
668
+ show: !0,
669
+ level: C + 1,
670
+ isPenultimate: !1,
671
+ type: e == null ? void 0 : e.type,
672
+ id: e == null ? void 0 : e.id,
673
+ limit: (e == null ? void 0 : e.limit) ?? "",
674
+ children: i(e == null ? void 0 : e.children, C + 1),
675
+ path: e == null ? void 0 : e.name
676
+ };
677
+ g.push(u);
678
+ }
679
+ }), g;
680
+ }, A = (l) => l ? [{
681
+ name: l == null ? void 0 : l.name,
682
+ label: l == null ? void 0 : l.name,
683
+ show: !0,
684
+ level: 1,
685
+ isPenultimate: !1,
686
+ type: l == null ? void 0 : l.type,
687
+ id: l == null ? void 0 : l.id,
688
+ limit: (l == null ? void 0 : l.limit) ?? "",
689
+ children: i(l == null ? void 0 : l.children, 1),
690
+ path: l == null ? void 0 : l.name
691
+ }] : [], L = (l, C) => {
692
+ const g = [], e = [...l];
693
+ for (; e.length > 0 && g.length < C; ) {
694
+ const u = e.shift();
695
+ u.children && u.children.length > 0 && (g.push(u.id), e.push(...u.children));
696
+ }
697
+ return g;
698
+ }, F = (l, C) => {
699
+ const g = [];
700
+ return l.forEach((e) => {
701
+ if (e.children && e.children.length > 0) {
702
+ g.push(e.id);
703
+ const u = e.children.filter((p) => p.children && p.children.length > 0).slice(0, C).map((p) => p.id);
704
+ g.push(...u);
705
+ }
706
+ }), g.slice(0, C + 1);
707
+ }, B = ie(() => !v.value || v.value.length === 0 ? [] : r.expandStrategy === "firstLevel" ? F(v.value, r.maxExpandCount) : L(v.value, r.maxExpandCount)), D = ie(() => r != null && r.model ? A(r.model) : []);
708
+ return Pe(
709
+ D,
710
+ (l) => {
711
+ v.value = JSON.parse(JSON.stringify(l));
712
+ },
713
+ { immediate: !0 }
714
+ ), (l, C) => {
715
+ const g = Je("el-tree");
716
+ return H(), q("div", Vt, [
717
+ z(g, {
718
+ data: v.value,
719
+ props: w,
720
+ "default-expanded-keys": B.value,
721
+ "node-key": It,
722
+ onNodeClick: k
723
+ }, null, 8, ["data", "default-expanded-keys"])
724
+ ]);
725
+ };
726
+ }
727
+ }, $t = /* @__PURE__ */ me(Lt, [["__scopeId", "data-v-290ff4e1"]]), Jt = ["xlink:href"], Ot = /* @__PURE__ */ Ye({
728
+ __name: "svgIcon",
729
+ props: {
730
+ backgroundColor: { default: "#f0f0f0" },
731
+ prefix: { default: "icon" },
732
+ name: {},
733
+ size: { default: 16 },
734
+ spin: { type: Boolean, default: !1 },
735
+ active: { type: Boolean, default: !1 }
736
+ },
737
+ setup(E) {
738
+ const f = E, r = ie(
739
+ () => ({
740
+ backgroundColor: f.backgroundColor
741
+ })
742
+ ), c = ie(() => `#${f.prefix}-${f.name}`), v = ie(() => {
743
+ const { size: w } = f;
744
+ let k = `${w}`;
745
+ return k = `${k.replace("px", "")}px`, {
746
+ width: k,
747
+ height: k
748
+ };
749
+ });
750
+ return (w, k) => (H(), q("div", {
751
+ class: Te(["container", { active: w.active }]),
752
+ style: Fe(r.value)
753
+ }, [
754
+ (H(), q("svg", {
755
+ class: Te(["svg-icon", [w.$attrs.class, w.spin && "svg-icon-spin"]]),
756
+ style: Fe(v.value),
757
+ "aria-hidden": "true"
758
+ }, [
759
+ h("use", { "xlink:href": c.value }, null, 8, Jt)
760
+ ], 6))
761
+ ], 6));
762
+ }
763
+ }), T = /* @__PURE__ */ me(Ot, [["__scopeId", "data-v-3150a90b"]]), Ut = { class: "obj-viewer-container" }, Gt = { class: "buttonGroup-top" }, jt = { class: "buttonGroup-topLeft" }, Xt = { class: "buttonGroup-left" }, Ht = { class: "buttonGroup-right" }, Yt = { class: "buttonGroup-bottom" }, qt = { class: "left-panel" }, Zt = { class: "panel-header" }, Wt = {
764
+ key: 1,
765
+ class: "clipping-content"
766
+ }, Kt = { class: "radio-group" }, Nt = { class: "radio-label" }, Qt = { class: "radio-label" }, en = { class: "radio-label" }, tn = { class: "radio-label" }, nn = { class: "right-panel" }, an = { class: "panel-header" }, on = {
767
+ key: 0,
768
+ class: "loading-overlay"
769
+ }, sn = {
770
+ __name: "threeModel",
771
+ props: {
772
+ animationData: {
773
+ type: Object,
774
+ default: () => {
775
+ }
776
+ }
777
+ },
778
+ emits: ["getAnimationData"],
779
+ setup(E, { expose: f, emit: r }) {
780
+ const c = r;
781
+ let v = null, w = !1;
782
+ const k = b(null), i = b(!1), A = b("");
783
+ b(!1);
784
+ const L = b(!1), F = b(!1), B = b(""), D = b(!1), l = b(""), C = b(), {
785
+ currentModels: g,
786
+ initialCameraPosition: e,
787
+ initialTargetPosition: u,
788
+ initThreeJS: p,
789
+ handleResize: _,
790
+ fitCameraToAllModels: U,
791
+ getThreeJSObjects: V,
792
+ clearAllModels: J,
793
+ cleanup: G
794
+ } = mt(k), { isAnimating: j, toggleAnimation: Z, stopAnimation: ee } = ft(V, g), { isClipping: d, activeClippingAxis: a, toggleClipping: S, updateClippingPlanes: R } = vt(
795
+ V,
796
+ g
797
+ ), { addModelsFromUrls: X, loadModelByDefaultPath: W, urdfModel: K, modelBoundingBoxes: N } = pt(
798
+ V,
799
+ g,
800
+ i,
801
+ A,
802
+ J
803
+ ), te = () => {
804
+ if (L.value || g.value.length === 0) return;
805
+ L.value = !0, j.value && ee();
806
+ const { camera: o, controls: t } = V();
807
+ if (!o || !t) return;
808
+ t.enabled = !0;
809
+ const y = (Q) => Q < 0.5 ? 4 * Q * Q * Q : 1 - Math.pow(-2 * Q + 2, 3) / 2, Y = o.position.clone(), $ = t.target.clone(), ne = 1500, I = Date.now(), P = () => {
810
+ const Q = Date.now() - I, oe = Math.min(Q / ne, 1), ce = y(oe);
811
+ o.position.lerpVectors(Y, e.value, ce), t.target.lerpVectors($, u.value, ce), oe < 1 ? requestAnimationFrame(P) : L.value = !1;
812
+ };
813
+ P();
814
+ }, re = async () => w ? Promise.resolve() : new Promise((o) => {
815
+ const t = () => {
816
+ w ? o() : requestAnimationFrame(t);
817
+ };
818
+ t();
819
+ }), fe = async (o, t) => {
820
+ try {
821
+ await re(), j.value && ee(), d.value && S();
822
+ const y = await t(o);
823
+ return U(N), y;
824
+ } catch (y) {
825
+ throw console.error("加载模型失败:", y), y;
826
+ }
827
+ }, Ce = async (o) => fe(o, X), n = async (o) => fe(o, W), m = (o) => {
828
+ F.value = !0, B.value = o, o === "剖面视图" && !d.value && S();
829
+ }, s = (o) => {
830
+ D.value = !0, l.value = o, o === "动画仿真" && c("getAnimationData");
831
+ }, x = () => {
832
+ Be(() => {
833
+ var o;
834
+ (o = C.value) == null || o.startAnimation();
835
+ });
836
+ };
837
+ return $e(async () => {
838
+ await Be();
839
+ try {
840
+ p(), v = V().scene, w = !0, window.addEventListener("resize", _);
841
+ } catch (o) {
842
+ console.error("Three.js初始化失败:", o);
843
+ }
844
+ }), qe(() => {
845
+ w = !1, B.value = "", l.value = "", window.removeEventListener("resize", _), j.value && ee(), G();
846
+ }), f({
847
+ addModelsFromUrls: Ce,
848
+ loadModelByDefaultPath: n
849
+ }), (o, t) => {
850
+ var Y, $, ne, I;
851
+ const y = Je("el-scrollbar");
852
+ return H(), q("div", Ut, [
853
+ h("div", {
854
+ ref_key: "threejsContainer",
855
+ ref: k,
856
+ class: "threejs-container"
857
+ }, null, 512),
858
+ h("div", Gt, [
859
+ z(T, {
860
+ name: "guanjianjiexi",
861
+ size: "34"
862
+ }),
863
+ z(T, {
864
+ name: "guanjiekongzhi",
865
+ size: "34"
866
+ }),
867
+ z(T, {
868
+ name: "gongyishengcheng",
869
+ size: "34"
870
+ }),
871
+ z(T, {
872
+ name: "buchangshezhi",
873
+ size: "34"
874
+ }),
875
+ z(T, {
876
+ name: "shuchujiagongchengxu",
877
+ size: "34"
878
+ })
879
+ ]),
880
+ h("div", jt, [
881
+ z(T, {
882
+ name: "viewReset",
883
+ size: "24",
884
+ onClick: te,
885
+ title: "重置"
886
+ }),
887
+ z(T, {
888
+ name: "fangda",
889
+ size: "24",
890
+ title: "放大"
891
+ }),
892
+ z(T, {
893
+ name: "suoxiao",
894
+ size: "24",
895
+ title: "缩小"
896
+ }),
897
+ z(T, {
898
+ name: "lookAround",
899
+ size: "24",
900
+ onClick: O(Z),
901
+ title: O(j) ? "停止动画" : "动画视图"
902
+ }, null, 8, ["onClick", "title"])
903
+ ]),
904
+ h("div", Xt, [
905
+ z(T, {
906
+ name: "jiegoushu",
907
+ size: "24",
908
+ onClick: t[0] || (t[0] = (P) => m("场景树")),
909
+ active: F.value && B.value === "场景树",
910
+ title: "场景树"
911
+ }, null, 8, ["active"]),
912
+ z(T, {
913
+ name: "clipping",
914
+ size: "24",
915
+ onClick: t[1] || (t[1] = (P) => m("剖面视图")),
916
+ active: F.value && B.value === "剖面视图",
917
+ title: "剖面视图"
918
+ }, null, 8, ["active"]),
919
+ z(T, {
920
+ name: "donghuafangzhen",
921
+ size: "24",
922
+ onClick: t[2] || (t[2] = (P) => m("场景树3"))
923
+ }),
924
+ z(T, {
925
+ name: "donghuafangzhen",
926
+ size: "24",
927
+ onClick: t[3] || (t[3] = (P) => m("场景4"))
928
+ })
929
+ ]),
930
+ h("div", Ht, [
931
+ z(T, {
932
+ name: "donghuafangzhen",
933
+ size: "24"
934
+ }),
935
+ z(T, {
936
+ name: "donghuafangzhen",
937
+ size: "24"
938
+ }),
939
+ z(T, {
940
+ name: "guanjiekongzhi",
941
+ size: "24",
942
+ onClick: t[4] || (t[4] = (P) => s("关节控制")),
943
+ active: D.value && l.value === "关节控制",
944
+ title: "关节控制"
945
+ }, null, 8, ["active"]),
946
+ z(T, {
947
+ name: "donghuafangzhen",
948
+ size: "24",
949
+ title: "动画仿真",
950
+ onClick: t[5] || (t[5] = (P) => s("动画仿真")),
951
+ active: D.value && l.value === "动画仿真"
952
+ }, null, 8, ["active"]),
953
+ z(T, {
954
+ name: "donghuafangzhen",
955
+ size: "24"
956
+ }),
957
+ z(T, {
958
+ name: "donghuafangzhen",
959
+ size: "24"
960
+ })
961
+ ]),
962
+ h("div", Yt, [
963
+ z(T, {
964
+ name: "kuaitui",
965
+ size: "24",
966
+ backgroundColor: "#ffffff",
967
+ title: "快退",
968
+ onClick: (Y = C.value) == null ? void 0 : Y.fastBackward
969
+ }, null, 8, ["onClick"]),
970
+ z(T, {
971
+ name: "bofang",
972
+ size: "24",
973
+ backgroundColor: "#ffffff",
974
+ title: "播放",
975
+ onClick: x
976
+ }),
977
+ z(T, {
978
+ name: "kuaijin",
979
+ size: "24",
980
+ backgroundColor: "#ffffff",
981
+ title: "快进",
982
+ onClick: ($ = C.value) == null ? void 0 : $.fastForward
983
+ }, null, 8, ["onClick"]),
984
+ z(T, {
985
+ name: "zanting",
986
+ size: "24",
987
+ backgroundColor: "#ffffff",
988
+ title: "暂停",
989
+ onClick: (ne = C.value) == null ? void 0 : ne.pauseAnimation
990
+ }, null, 8, ["onClick"]),
991
+ z(T, {
992
+ name: "zhongzhi",
993
+ size: "24",
994
+ backgroundColor: "#ffffff",
995
+ title: "停止",
996
+ onClick: (I = C.value) == null ? void 0 : I.resetAll
997
+ }, null, 8, ["onClick"])
998
+ ]),
999
+ se(h("div", qt, [
1000
+ h("div", Zt, [
1001
+ h("span", null, ae(B.value), 1),
1002
+ h("span", {
1003
+ class: "close",
1004
+ onClick: t[6] || (t[6] = (P) => F.value = !1)
1005
+ }, " X ")
1006
+ ]),
1007
+ z(y, { "max-height": "650px" }, {
1008
+ default: Re(() => [
1009
+ B.value === "场景树" ? (H(), Le($t, {
1010
+ key: 0,
1011
+ model: O(K)
1012
+ }, null, 8, ["model"])) : xe("", !0),
1013
+ B.value === "剖面视图" ? (H(), q("div", Wt, [
1014
+ h("div", Kt, [
1015
+ h("label", Nt, [
1016
+ se(h("input", {
1017
+ type: "radio",
1018
+ name: "clipping-axis",
1019
+ value: "none",
1020
+ "onUpdate:modelValue": t[7] || (t[7] = (P) => he(a) ? a.value = P : null),
1021
+ onChange: t[8] || (t[8] = (...P) => O(R) && O(R)(...P))
1022
+ }, null, 544), [
1023
+ [ye, O(a)]
1024
+ ]),
1025
+ t[16] || (t[16] = h("span", { class: "radio-text" }, "无切割", -1))
1026
+ ]),
1027
+ h("label", Qt, [
1028
+ se(h("input", {
1029
+ type: "radio",
1030
+ name: "clipping-axis",
1031
+ value: "x",
1032
+ "onUpdate:modelValue": t[9] || (t[9] = (P) => he(a) ? a.value = P : null),
1033
+ onChange: t[10] || (t[10] = (...P) => O(R) && O(R)(...P))
1034
+ }, null, 544), [
1035
+ [ye, O(a)]
1036
+ ]),
1037
+ t[17] || (t[17] = h("span", { class: "radio-text" }, "X轴切割", -1))
1038
+ ]),
1039
+ h("label", en, [
1040
+ se(h("input", {
1041
+ type: "radio",
1042
+ name: "clipping-axis",
1043
+ value: "y",
1044
+ "onUpdate:modelValue": t[11] || (t[11] = (P) => he(a) ? a.value = P : null),
1045
+ onChange: t[12] || (t[12] = (...P) => O(R) && O(R)(...P))
1046
+ }, null, 544), [
1047
+ [ye, O(a)]
1048
+ ]),
1049
+ t[18] || (t[18] = h("span", { class: "radio-text" }, "Y轴切割", -1))
1050
+ ]),
1051
+ h("label", tn, [
1052
+ se(h("input", {
1053
+ type: "radio",
1054
+ name: "clipping-axis",
1055
+ value: "z",
1056
+ "onUpdate:modelValue": t[13] || (t[13] = (P) => he(a) ? a.value = P : null),
1057
+ onChange: t[14] || (t[14] = (...P) => O(R) && O(R)(...P))
1058
+ }, null, 544), [
1059
+ [ye, O(a)]
1060
+ ]),
1061
+ t[19] || (t[19] = h("span", { class: "radio-text" }, "Z轴切割", -1))
1062
+ ])
1063
+ ])
1064
+ ])) : xe("", !0)
1065
+ ]),
1066
+ _: 1
1067
+ })
1068
+ ], 512), [
1069
+ [we, F.value]
1070
+ ]),
1071
+ se(h("div", nn, [
1072
+ h("div", an, [
1073
+ h("span", null, ae(l.value), 1),
1074
+ h("span", {
1075
+ class: "close",
1076
+ onClick: t[15] || (t[15] = (P) => D.value = !1)
1077
+ }, " X ")
1078
+ ]),
1079
+ z(y, { "max-height": "650px" }, {
1080
+ default: Re(() => [
1081
+ se(z(Rt, {
1082
+ ref_key: "jointRef",
1083
+ ref: C,
1084
+ model: O(K),
1085
+ scene: O(v),
1086
+ animationData: E.animationData
1087
+ }, null, 8, ["model", "scene", "animationData"]), [
1088
+ [we, l.value === "关节控制"]
1089
+ ]),
1090
+ se(z(yt, { animationData: E.animationData }, null, 8, ["animationData"]), [
1091
+ [we, l.value === "动画仿真"]
1092
+ ])
1093
+ ]),
1094
+ _: 1
1095
+ })
1096
+ ], 512), [
1097
+ [we, D.value]
1098
+ ]),
1099
+ i.value ? (H(), q("div", on, [
1100
+ t[20] || (t[20] = h("div", { class: "loading-spinner" }, null, -1)),
1101
+ h("p", null, ae(A.value), 1)
1102
+ ])) : xe("", !0)
1103
+ ]);
1104
+ };
1105
+ }
1106
+ }, fn = /* @__PURE__ */ me(sn, [["__scopeId", "data-v-eb64b36c"]]);
1107
+ export {
1108
+ fn as default
1109
+ };