ss-component-new 1.1.1007 → 1.2.1

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 (132) hide show
  1. package/dist/OrbitControls-D1lM0xvz.cjs +1 -0
  2. package/dist/OrbitControls-DI8fa9gz.js +419 -0
  3. package/dist/STLLoader-KxFIlfhN.cjs +6 -0
  4. package/dist/STLLoader-memlq1bT.js +609 -0
  5. package/dist/{animationData-Bu38Hl4M.js → animationData-BDq02_ir.js} +14 -14
  6. package/dist/animationData-BRDoJBuV.cjs +1 -0
  7. package/dist/{array-DljC5ibo.js → array-A59WrroX.js} +1 -1
  8. package/dist/{array-BPHS7JFA.cjs → array-BtZq8qON.cjs} +1 -1
  9. package/dist/config.js +1 -1
  10. package/dist/{iconfont-pt17sMx3.js → iconfont-7cEds3Xj.js} +2 -2
  11. package/dist/{iconfont-t5epssvu.cjs → iconfont-CsuwJCas.cjs} +1 -1
  12. package/dist/{index-d6tSWKtY.cjs → index-1z9RrjZc.cjs} +1 -1
  13. package/dist/{index-QSIG57Cs.cjs → index-6t33eejU.cjs} +1 -1
  14. package/dist/{index-DqAoBcTD.cjs → index-B1ul2ExO.cjs} +1 -1
  15. package/dist/{index-BlbmO49N.js → index-B35e4i9n.js} +2 -2
  16. package/dist/{index-Da8C2puT.js → index-B9j8fCyS.js} +2 -2
  17. package/dist/index-BB6zZsmY.cjs +1 -0
  18. package/dist/{index-Cxyot1Se.js → index-BTrjEMt1.js} +4 -4
  19. package/dist/{index-CZ3UyOmT.cjs → index-B_k7wRBo.cjs} +1 -1
  20. package/dist/{index-B2lf8ui6.cjs → index-BdL8I_2i.cjs} +1 -1
  21. package/dist/{index-DQ4-s08u.js → index-BeTQ6ief.js} +4 -4
  22. package/dist/{index--7AqRoC1.js → index-BgJn4mlV.js} +4 -4
  23. package/dist/{index-BCeME5xm.js → index-BqCCREh3.js} +6 -6
  24. package/dist/{index-D3DLg4SF.js → index-BvPC1LSv.js} +18 -18
  25. package/dist/{index-oNErZJKp.js → index-BwjuTBrR.js} +1 -1
  26. package/dist/index-BxPnA2or.js +7294 -0
  27. package/dist/{index-CabdCJxd.js → index-C23iUpXa.js} +7 -7
  28. package/dist/{index-VfEaAkaq.cjs → index-C3CD2NW8.cjs} +1 -1
  29. package/dist/{index-DmXN3-YT.js → index-C461j30b.js} +1 -1
  30. package/dist/{index-B8xZFJ-x.js → index-C6Uddqal.js} +2 -2
  31. package/dist/{index-BtHzGwZt.js → index-CFg3-0Tk.js} +2 -2
  32. package/dist/{index-BstWDfX-.cjs → index-CJzA3AAO.cjs} +1 -1
  33. package/dist/{index-BRJVgxUP.cjs → index-CNJzNn6z.cjs} +1 -1
  34. package/dist/{index-C-KrU6Qo.cjs → index-CVl84S8B.cjs} +1 -1
  35. package/dist/{index-CZEK1c2_.js → index-CYp77kPp.js} +176 -176
  36. package/dist/{index-BCIKC9PE.js → index-C_VamYcq.js} +6 -6
  37. package/dist/{index-CmlXlH2b.cjs → index-CjI5pDiU.cjs} +1 -1
  38. package/dist/{index-efKjAh7G.cjs → index-CrWFG4Wb.cjs} +1 -1
  39. package/dist/{index-DIehhXd9.cjs → index-Crd4LGue.cjs} +1 -1
  40. package/dist/{index-feAp8_X8.cjs → index-CtG-uyjY.cjs} +1 -1
  41. package/dist/{index-DHy1RHXi.cjs → index-CtPy-3S1.cjs} +1 -1
  42. package/dist/{index-D3VTHlZh.js → index-CvEj4aiY.js} +4 -4
  43. package/dist/{index-DzcelPVu.cjs → index-Cx302rHQ.cjs} +1 -1
  44. package/dist/{index-BrsIZVyD.cjs → index-CxnH4vfV.cjs} +1 -1
  45. package/dist/{index-hsKO-I_N.js → index-Cz03X-rX.js} +1 -1
  46. package/dist/{index-DxggSUtV.cjs → index-D8S0DVkq.cjs} +1 -1
  47. package/dist/{index-BuBVqjpx.js → index-DH0dVg0N.js} +7 -7
  48. package/dist/{index-oCii55Zs.cjs → index-DIm3MBK_.cjs} +1 -1
  49. package/dist/{index-CnqhOUek.js → index-DNE4QDIf.js} +3 -3
  50. package/dist/{index-BCXz_U9h.cjs → index-DQTI3BuS.cjs} +1 -1
  51. package/dist/{index-De9VWWmT.cjs → index-DS3OziT5.cjs} +1 -1
  52. package/dist/{index-Hm2_zeiV.js → index-DVvt9_w0.js} +1 -1
  53. package/dist/{index-DqhAoamS.cjs → index-DmB0dlGH.cjs} +1 -1
  54. package/dist/index-Dn9I5-1H.cjs +1 -0
  55. package/dist/{index-s1sBvg7-.cjs → index-DqaA5Rvx.cjs} +1 -1
  56. package/dist/{index-Bu-yHmJc.cjs → index-DqquxuCt.cjs} +1 -1
  57. package/dist/{index-DsIUgynO.js → index-DygW4mGC.js} +6 -6
  58. package/dist/{index-1gIP1dMc.cjs → index-HFf3Z0Ft.cjs} +1 -1
  59. package/dist/{index-BvDv1IKK.cjs → index-Kg96Vvn5.cjs} +1 -1
  60. package/dist/{index-DaBbEkRJ.js → index-N7dEiXLQ.js} +13 -13
  61. package/dist/index-TXrydBPq.cjs +1 -0
  62. package/dist/{index-BcBpmCfF.cjs → index-XQxaEXgz.cjs} +1 -1
  63. package/dist/{index-BHNtRl-8.js → index-Y5i13RsM.js} +3 -3
  64. package/dist/{index-CrKg8KZt.js → index-YQnrEK_K.js} +1069 -1061
  65. package/dist/{index-Jyps1gRD.js → index-aneoZx5F.js} +24 -24
  66. package/dist/{index-BdY8Qg-6.cjs → index-byBdKAky.cjs} +1 -1
  67. package/dist/{index-DWuAa5Ws.js → index-db5CgGrA.js} +394 -394
  68. package/dist/{index-TwtUdAMm.js → index-dqBbhGfy.js} +6 -6
  69. package/dist/{index-Dw_nYMhJ.cjs → index-gjDjqhNq.cjs} +2 -2
  70. package/dist/{index-K1m0RQMs.js → index-nq9fleOT.js} +2 -2
  71. package/dist/{index-oI1HUneF.js → index-qoqka5Nb.js} +1 -1
  72. package/dist/{index-DZHLGAn0.js → index-wHil9Fox.js} +2 -2
  73. package/dist/{index-Dtk-Fgm3.js → index-wq8KZGnQ.js} +5 -5
  74. package/dist/{index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CPiIzB84.cjs → index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CzcK5mCc.cjs} +1 -1
  75. package/dist/{index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-DC4zFlOQ.js → index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-Dmm4yqcc.js} +2 -2
  76. package/dist/{index.vue_vue_type_style_index_0_scoped_92477073_lang-DMhv31o4.js → index.vue_vue_type_style_index_0_scoped_92477073_lang-B0Ivzvcp.js} +6 -6
  77. package/dist/{index.vue_vue_type_style_index_0_scoped_92477073_lang-DV4d1URg.cjs → index.vue_vue_type_style_index_0_scoped_92477073_lang-xm0hMPwT.cjs} +1 -1
  78. package/dist/index.vue_vue_type_style_index_0_scoped_bcdf4fb0_lang-CMx9TLjC.cjs +56 -0
  79. package/dist/index.vue_vue_type_style_index_0_scoped_bcdf4fb0_lang-Czu5g16A.js +37436 -0
  80. package/dist/{index.vue_vue_type_style_index_1_lang-DgDibOnl.js → index.vue_vue_type_style_index_1_lang-AXp5rRSK.js} +76 -76
  81. package/dist/{index.vue_vue_type_style_index_1_lang-B1fiFPmj.js → index.vue_vue_type_style_index_1_lang-BxEXAMMV.js} +5012 -5100
  82. package/dist/{index.vue_vue_type_style_index_1_lang-CwJCb_rE.cjs → index.vue_vue_type_style_index_1_lang-CXwGS60-.cjs} +45 -46
  83. package/dist/{index.vue_vue_type_style_index_1_lang-B2vK-1an.cjs → index.vue_vue_type_style_index_1_lang-j5HrYuvy.cjs} +1 -1
  84. package/dist/{isString-D3DhambW.js → isString-BNK38WbE.js} +1 -1
  85. package/dist/{isString-ChvWbctO.cjs → isString-BmAegMGI.cjs} +1 -1
  86. package/dist/{main-YesjKNW0.cjs → main-BgpAXuSa.cjs} +1 -1
  87. package/dist/{main-DjvWp72p.js → main-t7yIujwl.js} +5 -5
  88. package/dist/ss-component.cjs +1 -1
  89. package/dist/ss-component.css +1 -1
  90. package/dist/ss-component.js +11 -11
  91. package/dist/ss-component2.cjs +1 -1
  92. package/dist/ss-component2.js +12 -12
  93. package/dist/three-viewport-gizmo-BxFHxv_x.js +18587 -0
  94. package/dist/three-viewport-gizmo-CwaL5sMV.cjs +4195 -0
  95. package/dist/{threeLatheView-DfSxRY8B.cjs → threeLatheView-BzHB-t_G.cjs} +1 -1
  96. package/dist/{threeLatheView-Mc00lYo0.js → threeLatheView-sTBlm0tt.js} +4 -4
  97. package/dist/{threeModel-DgfyuwYi.js → threeModel-11Yk8w2d.js} +5 -5
  98. package/dist/{threeModel-B7tOOzr9.cjs → threeModel-BudPgWiX.cjs} +1 -1
  99. package/dist/threePreview-Cy7NY-gw.cjs +1 -0
  100. package/dist/threePreview-DPyqhBkJ.js +1873 -0
  101. package/dist/threeSceneView-Bwed326O.js +1469 -0
  102. package/dist/threeSceneView-DT-STxuj.cjs +5 -0
  103. package/dist/{threeSceneViewForCPMPIP-Dw2bZRas.js → threeSceneViewForCPMPIP-PgPPGBxu.js} +90 -91
  104. package/dist/{threeSceneViewForCPMPIP-fWzzwARt.cjs → threeSceneViewForCPMPIP-RRDb_tZ0.cjs} +3 -3
  105. package/dist/{threeViewerHost-C9qoD_Tp.cjs → threeViewerHost-Brgx-J3Q.cjs} +1 -1
  106. package/dist/{threeViewerHost-D6c0lK4U.js → threeViewerHost-k5I66uBW.js} +8 -8
  107. package/dist/useRayCaster-CLcetetd.cjs +1 -0
  108. package/dist/{useRayCaster-Y_Q5getG.js → useRayCaster-TCYe6KMI.js} +14 -14
  109. package/package.json +1 -1
  110. package/public/config.js +1 -1
  111. package/dist/OrbitControls-C0QRmW6_.js +0 -458
  112. package/dist/OrbitControls-Co_9huz0.cjs +0 -1
  113. package/dist/STLLoader-CiUjaQtA.js +0 -657
  114. package/dist/STLLoader-RU7KqloS.cjs +0 -6
  115. package/dist/animationData-BjR16KKI.cjs +0 -1
  116. package/dist/index-BIg5JGtJ.js +0 -3370
  117. package/dist/index-BgImAL2B.cjs +0 -1
  118. package/dist/index-BuijIgJr.cjs +0 -1
  119. package/dist/index-Daqeta0F.cjs +0 -1
  120. package/dist/index-LnraLHWy.js +0 -7214
  121. package/dist/index-ama5teB1.cjs +0 -1
  122. package/dist/index.vue_vue_type_style_index_0_scoped_bcdf4fb0_lang-CycvdKIn.js +0 -34104
  123. package/dist/index.vue_vue_type_style_index_0_scoped_bcdf4fb0_lang-DnbT8HgZ.cjs +0 -56
  124. package/dist/isUndefined-7lpU02Ef.cjs +0 -1
  125. package/dist/isUndefined-BqsKWawv.js +0 -84
  126. package/dist/three-viewport-gizmo-BV37JzRa.cjs +0 -4197
  127. package/dist/three-viewport-gizmo-CkQ98n-T.js +0 -26015
  128. package/dist/threePreview-ByUYJkts.cjs +0 -1
  129. package/dist/threePreview-CkZ9LLXO.js +0 -1972
  130. package/dist/threeSceneView-BxK4ycgs.js +0 -1472
  131. package/dist/threeSceneView-DK1eRng9.cjs +0 -5
  132. package/dist/useRayCaster-BkcK_aF1.cjs +0 -1
@@ -1,1472 +0,0 @@
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-Y_Q5getG.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-DC4zFlOQ.js";
5
- import { R as at, c as nt, E as Z, a as st, aC as it, ak as rt } from "./index-CZEK1c2_.js";
6
- import "./index.vue_vue_type_style_index_1_lang-DgDibOnl.js";
7
- import "./index-BHtNKL1L.js";
8
- import { _ as ue, s as ut } from "./index-Hm2_zeiV.js";
9
- import "./index.vue_vue_type_style_index_1_lang-B1fiFPmj.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-B8xZFJ-x.js";
12
- import { f as wt, a as Ct } from "./animationData-Bu38Hl4M.js";
13
- import { o as kt, p as Pt } from "./index-BIg5JGtJ.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
- };