ss-component-new 1.2.6 → 1.2.8

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