ss-component-new 1.2.77 → 1.2.79

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 (104) hide show
  1. package/dist/{MTLLoader-BruI0iCV.js → MTLLoader-DHOpgWoh.js} +5 -5
  2. package/dist/{MTLLoader-Bseg1sor.cjs → MTLLoader-DcCqSeA-.cjs} +1 -1
  3. package/dist/{OrbitControls-Bxqvo8Mr.js → OrbitControls-Bwv0Wdfk.js} +1 -1
  4. package/dist/{OrbitControls-BiNnC97N.cjs → OrbitControls-DlWvN12h.cjs} +1 -1
  5. package/dist/{URDFLoader-DexIn4xU.cjs → URDFLoader-DykmnnHW.cjs} +1 -1
  6. package/dist/{URDFLoader-DWo3pDBH.js → URDFLoader-o5u_BjJ_.js} +174 -174
  7. package/dist/{animationData-BDkjPdQf.js → animationData-DS8Fzn6Q.js} +18 -18
  8. package/dist/{animationData-BVpXOZwe.cjs → animationData-I6_-ND6R.cjs} +1 -1
  9. package/dist/{array-D5Rc5rM9.js → array-Bhgw4Iyf.js} +27 -27
  10. package/dist/{array-6LpFOZ5o.cjs → array-ZC8P-Rx9.cjs} +1 -1
  11. package/dist/{iconfont-14del5d2.js → iconfont-CDf_oBPo.js} +27 -27
  12. package/dist/{iconfont-Bnhc7fLw.cjs → iconfont-DX6dC3Hu.cjs} +1 -1
  13. package/dist/{index-PkJYBcS-.js → index-9pgjgz-5.js} +25 -22
  14. package/dist/{index-CTfB2BO7.cjs → index-AjZKp-AZ.cjs} +1 -1
  15. package/dist/{index-D_coIVx9.cjs → index-B-LUDlpn.cjs} +1 -1
  16. package/dist/{index-1uzZjqSR.cjs → index-B20WPHZ5.cjs} +1 -1
  17. package/dist/{index-lkxTc6vy.js → index-B3u2tRTw.js} +576 -572
  18. package/dist/{index-BMwOfyZG.js → index-B5J3L2e2.js} +2 -2
  19. package/dist/{index-Da8kLXUi.js → index-B5SNHDlg.js} +1 -1
  20. package/dist/{index-BU__qorE.cjs → index-BG1yQRX5.cjs} +1 -1
  21. package/dist/index-BLSQNpLC.js +12694 -0
  22. package/dist/{index-C5AMx3DP.js → index-BRjEFy0A.js} +2 -2
  23. package/dist/{index-BOttcNaR.js → index-BVj-AkPa.js} +2 -2
  24. package/dist/{index-CiluLmLS.js → index-BYSmRvIB.js} +11 -11
  25. package/dist/{index-CV0wJjuo.cjs → index-BeikcPFZ.cjs} +1 -1
  26. package/dist/{index-Ai5OAXHo.js → index-BgE_6FYY.js} +6 -6
  27. package/dist/{index-jKLdvV3y.js → index-BluztDZ9.js} +20 -20
  28. package/dist/{index-D9iPLSwS.js → index-Bmtw8a5p.js} +2 -2
  29. package/dist/{index-Pg_Ez4Na.cjs → index-Bq6XgQV3.cjs} +1 -1
  30. package/dist/{index-DZboVCcU.cjs → index-C2Y0cih9.cjs} +1 -1
  31. package/dist/{index-CT1bDBZy.js → index-C3UcoA71.js} +5 -5
  32. package/dist/{index-Cv58m2R8.js → index-CGe5AJp6.js} +1 -1
  33. package/dist/{index-DNp4E_lQ.cjs → index-CJXu9f3F.cjs} +1 -1
  34. package/dist/index-CM2le7df.cjs +1 -0
  35. package/dist/{index-BXCI98KY.js → index-CMHJ7CCR.js} +6 -6
  36. package/dist/{index-CNDlskJD.cjs → index-CTStbcBT.cjs} +1 -1
  37. package/dist/{index-sCZuOhEC.js → index-CXSbzU1a.js} +1 -1
  38. package/dist/index-CXWS6054.js +2876 -0
  39. package/dist/{index-CS2SJFa5.cjs → index-Cbz7ElQN.cjs} +1 -1
  40. package/dist/{index-cGnhqEuy.cjs → index-Cc1ykPE-.cjs} +1 -1
  41. package/dist/index-Cc4a5Z89.cjs +1 -0
  42. package/dist/{index-iqnKq5qd.js → index-CdWi5i0R.js} +1 -1
  43. package/dist/{index-BPWX1kmE.cjs → index-CgNpvAbR.cjs} +1 -1
  44. package/dist/{index-DRbQJezd.cjs → index-ChvyEtLh.cjs} +1 -1
  45. package/dist/{index-DndAdSGT.js → index-CjszYT-m.js} +3 -3
  46. package/dist/{index-nzQPJif1.cjs → index-D-_nblT-.cjs} +1 -1
  47. package/dist/{index-BJizDAnh.cjs → index-D5REUQyF.cjs} +1 -1
  48. package/dist/{index-Bq27i8N6.js → index-D8BszxzY.js} +4 -4
  49. package/dist/{index-Do4pZeLF.cjs → index-D8biWfYq.cjs} +1 -1
  50. package/dist/{index-B3jUJ0ml.js → index-DCPWjTH2.js} +7 -7
  51. package/dist/{index-BjDn0YhH.cjs → index-DZSfCv1U.cjs} +12 -12
  52. package/dist/{index-BWjhL8R0.js → index-D_qR3hDI.js} +1 -1
  53. package/dist/{index-Cc_IAZBO.js → index-Dcz5u1Wl.js} +4 -4
  54. package/dist/{index-CjipjSmP.cjs → index-DhdaxDcr.cjs} +1 -1
  55. package/dist/{index-BCGURMXa.js → index-Di8UuMxb.js} +2 -2
  56. package/dist/{index-CwvAshmz.js → index-DjfNhR3v.js} +3 -3
  57. package/dist/{index-CZkjboM8.js → index-DkVB-AEp.js} +6 -6
  58. package/dist/{index-CEuxxYEp.cjs → index-DqrGFL1c.cjs} +1 -1
  59. package/dist/{index-CBIrHmhA.cjs → index-IrdgJgK1.cjs} +1 -1
  60. package/dist/{index-BP1mTaAy.js → index-KP6vMTgE.js} +4 -4
  61. package/dist/{index-aG7MmrtC.js → index-Quv-LzXf.js} +3 -3
  62. package/dist/{index-BYc9jyiE.js → index-bfMyItzl.js} +3 -3
  63. package/dist/{index-BXumaiVx.js → index-fzUpIEce.js} +2 -2
  64. package/dist/{index-B3x0Un8L.js → index-gaIXSSnU.js} +3 -3
  65. package/dist/{index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-Ctqs6jS6.js → index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-Cwtk3HI8.js} +13935 -14262
  66. package/dist/index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-DkW9dWKj.cjs +37 -0
  67. package/dist/{index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-Bqxa7GJA.js → index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-6Ap42_Dn.js} +14096 -13945
  68. package/dist/{index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-D6FKmWHb.cjs → index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-RZydwY0l.cjs} +356 -356
  69. package/dist/index.vue_vue_type_style_index_0_scoped_140f5e74_lang-BRLX6S9R.js +377 -0
  70. package/dist/index.vue_vue_type_style_index_0_scoped_140f5e74_lang-Cu33JXj5.cjs +1 -0
  71. package/dist/{index.vue_vue_type_style_index_1_lang-CrcbIeWl.js → index.vue_vue_type_style_index_1_lang-BJBnOzjh.js} +37 -37
  72. package/dist/{index.vue_vue_type_style_index_1_lang-DQ90IC2k.cjs → index.vue_vue_type_style_index_1_lang-KlMxUDnq.cjs} +1 -1
  73. package/dist/{isString-8mN8gX27.js → isString-Bb0EYAKj.js} +1 -1
  74. package/dist/{main-D3WREi0-.cjs → main-D0CiEOi_.cjs} +1 -1
  75. package/dist/{main-BkI9SlJQ.js → main-itEiu5WV.js} +5 -5
  76. package/dist/ss-component.cjs +1 -1
  77. package/dist/ss-component.css +1 -1
  78. package/dist/ss-component.js +11 -11
  79. package/dist/ss-component2.cjs +1 -1
  80. package/dist/ss-component2.js +12 -12
  81. package/dist/{threeModel-CVlu8rK_.js → threeModel-C1pBED0w.js} +5 -5
  82. package/dist/{threeModel-Bp11Ni6H.cjs → threeModel-DrVpq-KZ.cjs} +1 -1
  83. package/dist/{threePreview-CdzNCx3-.js → threePreview-BHmdeJ_g.js} +4 -4
  84. package/dist/{threePreview-Dw4LR6jh.cjs → threePreview-BwKp0Pme.cjs} +1 -1
  85. package/dist/{threeSceneView-BdVTjYBI.cjs → threeSceneView-BlYiTnf8.cjs} +1 -1
  86. package/dist/{threeSceneView-jhQi8rSG.js → threeSceneView-CHzaHloG.js} +134 -134
  87. package/dist/{threeSceneViewForCPMPIP-DgAoijFZ.js → threeSceneViewForCPMPIP-Bxfu-nOk.js} +8 -8
  88. package/dist/{threeSceneViewForCPMPIP-DRYioXDE.cjs → threeSceneViewForCPMPIP-C6dwXzB6.cjs} +1 -1
  89. package/dist/{threeTrackPathView-C1HVNI2F.js → threeTrackPathView-D5b7ja2X.js} +48 -48
  90. package/dist/{threeTrackPathView-Ds9FmHU1.cjs → threeTrackPathView-YDfE6lF-.cjs} +1 -1
  91. package/dist/{threeViewerHost-Cazxmy9Q.cjs → threeViewerHost-BdoXIgqv.cjs} +1 -1
  92. package/dist/{threeViewerHost-DvIwe0xo.js → threeViewerHost-DhtCUUpq.js} +15 -15
  93. package/dist/{urdfTree-CMKhj8xM.js → urdfTree-ClXv-I_k.js} +1 -1
  94. package/dist/{urdfTree-dHyqQi6d.cjs → urdfTree-DhRlnWn_.cjs} +1 -1
  95. package/dist/{workpieceTreePanel-4MfitYyo.cjs → workpieceTreePanel-CA1W7zBB.cjs} +1 -1
  96. package/dist/{workpieceTreePanel-BM7lPJRO.js → workpieceTreePanel-Ctwrp39y.js} +29 -29
  97. package/package.json +1 -1
  98. package/dist/index-C-Cn4YSI.js +0 -12234
  99. package/dist/index-C3DC8sX2.js +0 -2853
  100. package/dist/index-DEyzKyXf.cjs +0 -1
  101. package/dist/index-qqyeENwY.cjs +0 -1
  102. package/dist/index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-wPtij0q7.cjs +0 -37
  103. package/dist/index.vue_vue_type_style_index_0_scoped_140f5e74_lang-Ddv_4Qcm.cjs +0 -1
  104. package/dist/index.vue_vue_type_style_index_0_scoped_140f5e74_lang-DmUFTzw3.js +0 -376
@@ -1,15 +1,15 @@
1
1
  import { defineComponent as ve, ref as r, computed as S, watch as W, onUnmounted as Ae, resolveComponent as M, createElementBlock as R, openBlock as z, createElementVNode as n, createCommentVNode as D, createVNode as a, toDisplayString as B, Fragment as Ve, renderList as $e, withCtx as te, shallowRef as ee, onMounted as Te, nextTick as Fe, onBeforeUnmount as Oe, withDirectives as H, vShow as I, unref as U, renderSlot as se, createBlock as ie } from "vue";
2
- import { s as re } from "./threeViewerHost-DvIwe0xo.js";
3
- import { u as Re, a as Se, b as De, C as Be } from "./iconfont-14del5d2.js";
4
- import { U as Ee, u as Je, a as Ne, W as Me } from "./workpieceTreePanel-BM7lPJRO.js";
5
- import { c as Ge, E as h } from "./index-Ai5OAXHo.js";
6
- import "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-Bqxa7GJA.js";
2
+ import { s as re } from "./threeViewerHost-DhtCUUpq.js";
3
+ import { u as Re, a as Se, b as De, C as Be } from "./iconfont-CDf_oBPo.js";
4
+ import { U as Ee, u as Je, a as Ne, W as Me } from "./workpieceTreePanel-Ctwrp39y.js";
5
+ import { c as Ge, E as h } from "./index-BgE_6FYY.js";
6
+ import "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-6Ap42_Dn.js";
7
7
  import { _ as ue } from "./index.vue_vue_type_script_setup_true_lang-DRzriV-s.js";
8
- import { g as He, b as Ie, U as We, J as Xe, d as Ye } from "./urdfTree-CMKhj8xM.js";
8
+ import { g as He, b as Ie, U as We, J as Xe, d as Ye } from "./urdfTree-ClXv-I_k.js";
9
9
  import { _ as de } from "./_plugin-vue_export-helper-CHgC5LLL.js";
10
10
  import { T as b } from "./svgIcon-D-_fXUBL.js";
11
- import { i as Ze } from "./animationData-BDkjPdQf.js";
12
- import { O as qe } from "./MTLLoader-BruI0iCV.js";
11
+ import { i as Ze } from "./animationData-DS8Fzn6Q.js";
12
+ import { O as qe } from "./MTLLoader-DHOpgWoh.js";
13
13
  const Ke = { class: "panel-content" }, Qe = {
14
14
  key: 0,
15
15
  class: "animation-controls"
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),W=require("./threeViewerHost-Cazxmy9Q.cjs"),I=require("./iconfont-Bnhc7fLw.cjs"),q=require("./workpieceTreePanel-4MfitYyo.cjs"),p=require("./index-C8qRkCgn.cjs");require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-D6FKmWHb.cjs");const Y=require("./index.vue_vue_type_script_setup_true_lang-BKTJR2th.cjs"),A=require("./urdfTree-dHyqQi6d.cjs"),K=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),g=require("./svgIcon-CUM54R6L.cjs"),ge=require("./animationData-BVpXOZwe.cjs"),he=require("./MTLLoader-Bseg1sor.cjs"),Ve={class:"panel-content"},be={key:0,class:"animation-controls"},ye={class:"control-row"},Ne={class:"control-row"},ke={class:"frame-info"},Ee={class:"control-row"},Ce={key:1,class:"empty-state"},we={class:"dialog-footer"},_e=e.defineComponent({__name:"urdfAnimationPanel",props:{model:{},scene:{},xyzbcList:{}},setup(P,{expose:h}){const k=P,a=e.ref([]),C=e.ref(!1),T=e.ref(""),d=e.ref("stopped"),f=e.ref(0),w=e.ref(0),V=e.ref(10),i=e.ref(null);let u=0;const b=e.ref([]),y=e.computed(()=>k.model?A.getNonFixedJoints(k.model).map(v=>v.name):[]),_=e.computed(()=>[...y.value]),J=e.computed(()=>_.value.length>0?`请按以下格式粘贴数据 (第一行为表头,使用 Tab 分隔):
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),W=require("./threeViewerHost-BdoXIgqv.cjs"),I=require("./iconfont-DX6dC3Hu.cjs"),q=require("./workpieceTreePanel-CA1W7zBB.cjs"),p=require("./index-C8qRkCgn.cjs");require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-RZydwY0l.cjs");const Y=require("./index.vue_vue_type_script_setup_true_lang-BKTJR2th.cjs"),A=require("./urdfTree-DhRlnWn_.cjs"),K=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),g=require("./svgIcon-CUM54R6L.cjs"),ge=require("./animationData-I6_-ND6R.cjs"),he=require("./MTLLoader-DcCqSeA-.cjs"),Ve={class:"panel-content"},be={key:0,class:"animation-controls"},ye={class:"control-row"},Ne={class:"control-row"},ke={class:"frame-info"},Ee={class:"control-row"},Ce={key:1,class:"empty-state"},we={class:"dialog-footer"},_e=e.defineComponent({__name:"urdfAnimationPanel",props:{model:{},scene:{},xyzbcList:{}},setup(P,{expose:h}){const k=P,a=e.ref([]),C=e.ref(!1),T=e.ref(""),d=e.ref("stopped"),f=e.ref(0),w=e.ref(0),V=e.ref(10),i=e.ref(null);let u=0;const b=e.ref([]),y=e.computed(()=>k.model?A.getNonFixedJoints(k.model).map(v=>v.name):[]),_=e.computed(()=>[...y.value]),J=e.computed(()=>_.value.length>0?`请按以下格式粘贴数据 (第一行为表头,使用 Tab 分隔):
2
2
  ${_.value.join(" ")}
3
3
  0 0 0 ...
4
4
  1 2 3 ...`:"请先加载模型。"),U=e.computed(()=>a.value[f.value]||{});e.watch(()=>k.model,o=>{o?(i.value=new q.URDFRobotController(o),b.value=A.getAllLinkName(o),f.value=0):(i.value=null,b.value=[])},{immediate:!0});const z=o=>{if(o<0||o>=a.value.length){console.error(`帧索引 ${o} 超出范围`);return}const t=a.value[o];if(i.value){const v={};y.value.forEach(N=>{const r=parseFloat(t[N]);isNaN(r)||(v[N]=r)}),i.value.setJointAngles(v)}f.value=o,w.value=a.value.length>1?o/(a.value.length-1)*100:100},L=async o=>{try{for(let t=f.value;t<a.value.length;t++){if(o!==u)return;const v=a.value[t],N={};if(i.value)y.value.forEach(r=>{const m=parseFloat(v[r]);isNaN(m)||(N[r]=m)}),await i.value.animateToState(N,V.value,r=>{o===u&&(w.value=(t+r)/a.value.length*100)});else{if(await new Promise(r=>setTimeout(r,V.value)),o!==u)return;w.value=(t+1)/a.value.length*100}f.value=t}o===u&&(p.ElMessage.success("动画播放完成"),d.value="stopped",w.value=100)}catch(t){console.error("动画播放出错:",t),p.ElMessage.error("动画播放出错"),d.value="stopped"}},x=()=>{if(a.value.length===0){p.ElMessage.error("无动画数据");return}d.value==="stopped"&&(f.value=0,z(0)),d.value="playing",u++,L(u),p.ElMessage.info("动画播放中")},M=()=>{d.value==="playing"&&(u++,d.value="paused",p.ElMessage.info("动画已暂停"))},$=()=>{u++,d.value="stopped",f.value=0,w.value=0,z(0),p.ElMessage.info("动画已停止并重置")},R=()=>{d.value==="playing"?M():x()},B=o=>{u++,d.value="paused",z(o)},H=()=>{if(!T.value.trim()){p.ElMessage.warning("导入内容不能为空");return}const o=T.value.trim().split(`
@@ -1,10 +1,10 @@
1
- import { defineComponent as He, ref as T, shallowRef as ue, computed as H, watch as Ne, onMounted as Ve, onBeforeUnmount as qe, resolveComponent as $e, createElementBlock as fe, openBlock as N, createElementVNode as g, withDirectives as J, createCommentVNode as Z, createVNode as h, unref as W, renderSlot as pe, toDisplayString as K, withCtx as me, createBlock as he, vShow as Q } from "vue";
2
- import { u as Xe, a as Ye, b as Je, C as Ze, f as Ke, d as Qe } from "./iconfont-14del5d2.js";
3
- import { bJ as et, aU as ie, bK as se, bB as O, bL as tt, W as oe, bI as Se, V as U, bM as nt, bN as X, bO as ze, b6 as Ce, bP as Y, a7 as it, bQ as R, bR as st, ag as ot, ah as _e, ai as rt, aI as at, aW as lt, aX as ct, bS as dt } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-Bqxa7GJA.js";
4
- import { E as ut } from "./index-Ai5OAXHo.js";
5
- import { U as ft, J as pt } from "./urdfTree-CMKhj8xM.js";
1
+ import { defineComponent as He, ref as T, shallowRef as ue, computed as H, watch as Ne, onMounted as Ve, onBeforeUnmount as qe, resolveComponent as Xe, createElementBlock as fe, openBlock as N, createElementVNode as g, withDirectives as J, createCommentVNode as Z, createVNode as h, unref as R, renderSlot as pe, toDisplayString as K, withCtx as me, createBlock as he, vShow as Q } from "vue";
2
+ import { u as $e, a as Ye, b as Je, C as Ze, f as Ke, d as Qe } from "./iconfont-CDf_oBPo.js";
3
+ import { bK as et, aV as ie, bL as se, bC as O, bM as tt, X as oe, bJ as Se, W as U, bN as nt, bO as $, bP as ze, b7 as Ce, bQ as Y, a8 as it, bR as W, bS as st, ah as ot, ai as _e, aj as rt, aJ as at, aX as lt, aY as ct, bT as dt } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-6Ap42_Dn.js";
4
+ import { E as ut } from "./index-BgE_6FYY.js";
5
+ import { U as ft, J as pt } from "./urdfTree-ClXv-I_k.js";
6
6
  import { T as v } from "./svgIcon-D-_fXUBL.js";
7
- import { i as mt } from "./isString-8mN8gX27.js";
7
+ import { i as mt } from "./isString-Bb0EYAKj.js";
8
8
  import { _ as ht } from "./_plugin-vue_export-helper-CHgC5LLL.js";
9
9
  const ve = new oe(), V = new U();
10
10
  class Ee extends et {
@@ -120,7 +120,7 @@ Y.line = {
120
120
  gapSize: { value: 1 }
121
121
  // todo FIX - maybe change to totalSize
122
122
  };
123
- X.line = {
123
+ $.line = {
124
124
  uniforms: ze.merge([
125
125
  Y.common,
126
126
  Y.fog,
@@ -517,9 +517,9 @@ class re extends nt {
517
517
  constructor(e) {
518
518
  super({
519
519
  type: "LineMaterial",
520
- uniforms: ze.clone(X.line.uniforms),
521
- vertexShader: X.line.vertexShader,
522
- fragmentShader: X.line.fragmentShader,
520
+ uniforms: ze.clone($.line.uniforms),
521
+ vertexShader: $.line.vertexShader,
522
+ fragmentShader: $.line.fragmentShader,
523
523
  clipping: !0
524
524
  // required for clipping support
525
525
  }), this.isLineMaterial = !0, this.setValues(e);
@@ -659,7 +659,7 @@ class re extends nt {
659
659
  this.defines && (e === !0 !== this.alphaToCoverage && (this.needsUpdate = !0), e === !0 ? this.defines.USE_ALPHA_TO_COVERAGE = "" : delete this.defines.USE_ALPHA_TO_COVERAGE);
660
660
  }
661
661
  }
662
- const ee = new R(), ge = new U(), ye = new U(), y = new R(), w = new R(), C = new R(), te = new U(), ne = new ot(), x = new st(), we = new U(), q = new oe(), $ = new Se(), _ = new R();
662
+ const ee = new W(), ge = new U(), ye = new U(), y = new W(), w = new W(), C = new W(), te = new U(), ne = new ot(), x = new st(), we = new U(), q = new oe(), X = new Se(), _ = new W();
663
663
  let E, B;
664
664
  function xe(s, e, n) {
665
665
  return _.set(0, 0, -e, 1).applyMatrix4(s.projectionMatrix), _.multiplyScalar(1 / _.w), _.x = B / n.width, _.y = B / n.height, _.applyMatrix4(s.projectionMatrixInverse), _.multiplyScalar(1 / _.w), Math.abs(Math.max(_.x, _.y));
@@ -697,8 +697,8 @@ function gt(s, e, n) {
697
697
  y.applyMatrix4(i), w.applyMatrix4(i), y.multiplyScalar(1 / y.w), w.multiplyScalar(1 / w.w), y.x *= o.x / 2, y.y *= o.y / 2, w.x *= o.x / 2, w.y *= o.y / 2, x.start.copy(y), x.start.z = 0, x.end.copy(w), x.end.z = 0;
698
698
  const b = x.closestPointToPointParameter(te, !0);
699
699
  x.at(b, we);
700
- const S = _e.lerp(y.z, w.z, b), k = S >= -1 && S <= 1, I = te.distanceTo(we) < B * 0.5;
701
- if (k && I) {
700
+ const S = _e.lerp(y.z, w.z, b), k = S >= -1 && S <= 1, j = te.distanceTo(we) < B * 0.5;
701
+ if (k && j) {
702
702
  x.start.fromBufferAttribute(c, m), x.end.fromBufferAttribute(u, m), x.start.applyMatrix4(a), x.end.applyMatrix4(a);
703
703
  const z = new U(), A = new U();
704
704
  E.distanceSqToSegment(x.start, x.end, A, z), n.push({
@@ -750,15 +750,15 @@ class yt extends it {
750
750
  const o = e.params.Line2 !== void 0 && e.params.Line2.threshold || 0;
751
751
  E = e.ray;
752
752
  const a = this.matrixWorld, r = this.geometry, c = this.material;
753
- B = c.linewidth + o, r.boundingSphere === null && r.computeBoundingSphere(), $.copy(r.boundingSphere).applyMatrix4(a);
753
+ B = c.linewidth + o, r.boundingSphere === null && r.computeBoundingSphere(), X.copy(r.boundingSphere).applyMatrix4(a);
754
754
  let u;
755
755
  if (i)
756
756
  u = B * 0.5;
757
757
  else {
758
- const p = Math.max(t.near, $.distanceToPoint(E.origin));
758
+ const p = Math.max(t.near, X.distanceToPoint(E.origin));
759
759
  u = xe(t, p, c.resolution);
760
760
  }
761
- if ($.radius += u, E.intersectsSphere($) === !1)
761
+ if (X.radius += u, E.intersectsSphere(X) === !1)
762
762
  return;
763
763
  r.boundingBox === null && r.computeBoundingBox(), q.copy(r.boundingBox).applyMatrix4(a);
764
764
  let f;
@@ -956,8 +956,8 @@ function Tt(s, e) {
956
956
  function Bt(s, e, n, i = 4, t = 50) {
957
957
  let o = 1 / 0, a = -1 / 0, r = 1 / 0, c = -1 / 0, u = 1 / 0, f = -1 / 0;
958
958
  for (let S = 0; S < s.length; S += 3) {
959
- const k = s[S], I = s[S + 1], z = s[S + 2];
960
- o = Math.min(o, k), a = Math.max(a, k), r = Math.min(r, I), c = Math.max(c, I), u = Math.min(u, z), f = Math.max(f, z);
959
+ const k = s[S], j = s[S + 1], z = s[S + 2];
960
+ o = Math.min(o, k), a = Math.max(a, k), r = Math.min(r, j), c = Math.max(c, j), u = Math.min(u, z), f = Math.max(f, z);
961
961
  }
962
962
  const m = Math.sqrt((a - o) ** 2 + (c - r) ** 2 + (f - u) ** 2) * 0.05, M = _e.degToRad(e.fov), L = 2 * Math.tan(M / 2) * t, b = m / L * n.domElement.height * (i / 4);
963
963
  return Math.max(1, b);
@@ -984,10 +984,10 @@ function Dt(s, e) {
984
984
  const r = Bt(e, i, t, 0.5, 50);
985
985
  return a.material.size = r, a;
986
986
  }
987
- const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft" }, jt = { class: "buttonGroup-left" }, Ft = { class: "buttonGroup-right" }, Wt = { class: "buttonGroup-bottom" }, Rt = { class: "left-panel" }, Gt = { class: "panel-header" }, Ht = { class: "panel-body" }, Nt = { class: "right-panel" }, Vt = { class: "panel-header" }, qt = { class: "panel-body" }, $t = {
987
+ const Ot = { class: "obj-viewer-container" }, jt = { class: "buttonGroup-topLeft" }, It = { class: "buttonGroup-left" }, Ft = { class: "buttonGroup-right" }, Rt = { class: "buttonGroup-bottom" }, Wt = { class: "left-panel" }, Gt = { class: "panel-header" }, Ht = { class: "panel-body" }, Nt = { class: "right-panel" }, Vt = { class: "panel-header" }, qt = { class: "panel-body" }, Xt = {
988
988
  key: 0,
989
989
  class: "loading-overlay"
990
- }, Xt = /* @__PURE__ */ He({
990
+ }, $t = /* @__PURE__ */ He({
991
991
  __name: "threeTrackPathView",
992
992
  props: {
993
993
  fileUrls: {},
@@ -1003,14 +1003,14 @@ const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft
1003
1003
  getThreeJSObjects: b,
1004
1004
  cleanup: S,
1005
1005
  setModels: k,
1006
- setAndFitModels: I,
1006
+ setAndFitModels: j,
1007
1007
  axesHelperVisible: z,
1008
1008
  toggleAxesVisibility: A
1009
- } = Xe(n), { isAnimating: ae, toggleAnimation: Ae, startAnimation: Yt, stopAnimation: Me } = Ye(b, p), { isClipping: Le, activeClippingAxis: le, toggleClipping: Pe, updateClippingPlanes: Te } = Je(b, p), Be = () => {
1009
+ } = $e(n), { isAnimating: ae, toggleAnimation: Ae, startAnimation: Yt, stopAnimation: Me } = Ye(b, p), { isClipping: Le, activeClippingAxis: le, toggleClipping: Pe, updateClippingPlanes: Te } = Je(b, p), Be = () => {
1010
1010
  A();
1011
1011
  }, ke = (d) => {
1012
1012
  le.value = d, Te();
1013
- }, j = (d) => {
1013
+ }, I = (d) => {
1014
1014
  o.value = !0, a.value = d, d === "剖面视图" && !Le.value && Pe();
1015
1015
  }, G = (d) => {
1016
1016
  r.value = !0, c.value = d;
@@ -1020,10 +1020,10 @@ const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft
1020
1020
  }), Oe = H(() => {
1021
1021
  var l;
1022
1022
  return (l = e.trackFileType) == null ? void 0 : l.isCyd;
1023
- }), Ie = H(() => {
1023
+ }), je = H(() => {
1024
1024
  var l;
1025
1025
  return (l = e.trackFileType) == null ? void 0 : l.isCpt;
1026
- }), je = H(() => {
1026
+ }), Ie = H(() => {
1027
1027
  const d = e.fileUrls || [];
1028
1028
  return d == null ? void 0 : d[0];
1029
1029
  });
@@ -1036,19 +1036,19 @@ const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft
1036
1036
  if (mt(l)) {
1037
1037
  ce.value = await Pt(l, e.trackFileType) || [];
1038
1038
  const F = ce.value;
1039
- return De.value && (D = Tt(b, F)), (Oe.value || Ie.value) && (D = Dt(b, F)), D;
1039
+ return De.value && (D = Tt(b, F)), (Oe.value || je.value) && (D = Dt(b, F)), D;
1040
1040
  }
1041
- }, We = async (d) => {
1041
+ }, Re = async (d) => {
1042
1042
  const l = await Fe(d);
1043
1043
  l && (k([l]), Ke(b, l));
1044
1044
  };
1045
- Ne(() => je.value, async (d) => {
1046
- d && (de(), await We(d));
1045
+ Ne(() => Ie.value, async (d) => {
1046
+ d && (de(), await Re(d));
1047
1047
  }, {
1048
1048
  immediate: !0,
1049
1049
  deep: !0
1050
1050
  });
1051
- const Re = () => {
1051
+ const We = () => {
1052
1052
  M(), window.addEventListener("resize", L);
1053
1053
  const d = b();
1054
1054
  f.value = d.scene, f.value && (f.value.name = "CPMPIP");
@@ -1057,14 +1057,14 @@ const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft
1057
1057
  };
1058
1058
  return Ve(async () => {
1059
1059
  try {
1060
- Re();
1060
+ We();
1061
1061
  } catch (d) {
1062
1062
  console.error("Three.js 初始化失败:", d), ut.error("渲染引擎初始化失败!");
1063
1063
  }
1064
1064
  }), qe(() => {
1065
1065
  Ge();
1066
1066
  }), (d, l) => {
1067
- const F = $e("el-scrollbar");
1067
+ const F = Xe("el-scrollbar");
1068
1068
  return N(), fe("div", Ot, [
1069
1069
  g("div", {
1070
1070
  ref_key: "threejsContainer",
@@ -1072,11 +1072,11 @@ const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft
1072
1072
  class: "threejs-container"
1073
1073
  }, null, 512),
1074
1074
  l[15] || (l[15] = g("div", { class: "buttonGroup-top" }, null, -1)),
1075
- g("div", It, [
1075
+ g("div", jt, [
1076
1076
  h(v, {
1077
1077
  name: "viewReset",
1078
1078
  size: "24",
1079
- onClick: W(m),
1079
+ onClick: R(m),
1080
1080
  title: "重置"
1081
1081
  }, null, 8, ["onClick"]),
1082
1082
  h(v, {
@@ -1092,42 +1092,42 @@ const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft
1092
1092
  h(v, {
1093
1093
  name: "lookAround",
1094
1094
  size: "24",
1095
- onClick: W(Ae),
1096
- title: W(ae) ? "停止动画" : "动画视图"
1095
+ onClick: R(Ae),
1096
+ title: R(ae) ? "停止动画" : "动画视图"
1097
1097
  }, null, 8, ["onClick", "title"]),
1098
1098
  h(v, {
1099
1099
  name: "zuobiaoxi",
1100
1100
  size: "24",
1101
- active: W(z),
1101
+ active: R(z),
1102
1102
  onClick: Be,
1103
1103
  title: "显隐坐标轴"
1104
1104
  }, null, 8, ["active"])
1105
1105
  ]),
1106
- g("div", jt, [
1107
- pe(d.$slots, "button-left", { switchRightPanel: j }, void 0, !0),
1106
+ g("div", It, [
1107
+ pe(d.$slots, "button-left", { switchRightPanel: I }, void 0, !0),
1108
1108
  h(v, {
1109
1109
  name: "jiegoushu",
1110
1110
  size: "24",
1111
- onClick: l[0] || (l[0] = (P) => j("场景树")),
1111
+ onClick: l[0] || (l[0] = (P) => I("场景树")),
1112
1112
  active: o.value && a.value === "场景树",
1113
1113
  title: "场景树"
1114
1114
  }, null, 8, ["active"]),
1115
1115
  h(v, {
1116
1116
  name: "clipping",
1117
1117
  size: "24",
1118
- onClick: l[1] || (l[1] = (P) => j("剖面视图")),
1118
+ onClick: l[1] || (l[1] = (P) => I("剖面视图")),
1119
1119
  active: o.value && a.value === "剖面视图",
1120
1120
  title: "剖面视图"
1121
1121
  }, null, 8, ["active"]),
1122
1122
  h(v, {
1123
1123
  name: "donghuafangzhen",
1124
1124
  size: "24",
1125
- onClick: l[2] || (l[2] = (P) => j("场景树3"))
1125
+ onClick: l[2] || (l[2] = (P) => I("场景树3"))
1126
1126
  }),
1127
1127
  h(v, {
1128
1128
  name: "donghuafangzhen",
1129
1129
  size: "24",
1130
- onClick: l[3] || (l[3] = (P) => j("场景4"))
1130
+ onClick: l[3] || (l[3] = (P) => I("场景4"))
1131
1131
  })
1132
1132
  ]),
1133
1133
  g("div", Ft, [
@@ -1162,7 +1162,7 @@ const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft
1162
1162
  size: "24"
1163
1163
  })
1164
1164
  ]),
1165
- g("div", Wt, [
1165
+ g("div", Rt, [
1166
1166
  h(v, {
1167
1167
  name: "kuaitui",
1168
1168
  size: "24",
@@ -1204,7 +1204,7 @@ const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft
1204
1204
  })
1205
1205
  })
1206
1206
  ]),
1207
- J(g("div", Rt, [
1207
+ J(g("div", Wt, [
1208
1208
  g("div", Gt, [
1209
1209
  g("span", null, K(a.value), 1),
1210
1210
  g("span", {
@@ -1221,7 +1221,7 @@ const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft
1221
1221
  }, null, 8, ["model"])) : Z("", !0),
1222
1222
  a.value === "剖面视图" ? (N(), he(Ze, {
1223
1223
  key: 1,
1224
- value: W(le),
1224
+ value: R(le),
1225
1225
  onChange: ke
1226
1226
  }, null, 8, ["value"])) : Z("", !0)
1227
1227
  ]),
@@ -1252,14 +1252,14 @@ const Ot = { class: "obj-viewer-container" }, It = { class: "buttonGroup-topLeft
1252
1252
  ], 512), [
1253
1253
  [Q, r.value]
1254
1254
  ]),
1255
- i.value ? (N(), fe("div", $t, [
1255
+ i.value ? (N(), fe("div", Xt, [
1256
1256
  l[14] || (l[14] = g("div", { class: "loading-spinner" }, null, -1)),
1257
1257
  g("p", null, K(t.value), 1)
1258
1258
  ])) : Z("", !0)
1259
1259
  ]);
1260
1260
  };
1261
1261
  }
1262
- }), on = /* @__PURE__ */ ht(Xt, [["__scopeId", "data-v-20775f32"]]);
1262
+ }), on = /* @__PURE__ */ ht($t, [["__scopeId", "data-v-20775f32"]]);
1263
1263
  export {
1264
1264
  on as default
1265
1265
  };
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("vue"),P=require("./iconfont-Bnhc7fLw.cjs"),c=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-D6FKmWHb.cjs"),xe=require("./index-C8qRkCgn.cjs"),Z=require("./urdfTree-dHyqQi6d.cjs"),g=require("./svgIcon-CUM54R6L.cjs"),Se=require("./isString--eJE54G5.cjs"),be=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),J=new c.Box3,O=new c.Vector3;class ie extends c.InstancedBufferGeometry{constructor(){super(),this.isLineSegmentsGeometry=!0,this.type="LineSegmentsGeometry";const e=[-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],n=[-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],o=[0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5];this.setIndex(o),this.setAttribute("position",new c.Float32BufferAttribute(e,3)),this.setAttribute("uv",new c.Float32BufferAttribute(n,2))}applyMatrix4(e){const n=this.attributes.instanceStart,o=this.attributes.instanceEnd;return n!==void 0&&(n.applyMatrix4(e),o.applyMatrix4(e),n.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(e){let n;e instanceof Float32Array?n=e:Array.isArray(e)&&(n=new Float32Array(e));const o=new c.InstancedInterleavedBuffer(n,6,1);return this.setAttribute("instanceStart",new c.InterleavedBufferAttribute(o,3,0)),this.setAttribute("instanceEnd",new c.InterleavedBufferAttribute(o,3,3)),this.instanceCount=this.attributes.instanceStart.count,this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(e){let n;e instanceof Float32Array?n=e:Array.isArray(e)&&(n=new Float32Array(e));const o=new c.InstancedInterleavedBuffer(n,6,1);return this.setAttribute("instanceColorStart",new c.InterleavedBufferAttribute(o,3,0)),this.setAttribute("instanceColorEnd",new c.InterleavedBufferAttribute(o,3,3)),this}fromWireframeGeometry(e){return this.setPositions(e.attributes.position.array),this}fromEdgesGeometry(e){return this.setPositions(e.attributes.position.array),this}fromMesh(e){return this.fromWireframeGeometry(new c.WireframeGeometry(e.geometry)),this}fromLineSegments(e){const n=e.geometry;return this.setPositions(n.attributes.position.array),this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new c.Box3);const e=this.attributes.instanceStart,n=this.attributes.instanceEnd;e!==void 0&&n!==void 0&&(this.boundingBox.setFromBufferAttribute(e),J.setFromBufferAttribute(n),this.boundingBox.union(J))}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new c.Sphere),this.boundingBox===null&&this.computeBoundingBox();const e=this.attributes.instanceStart,n=this.attributes.instanceEnd;if(e!==void 0&&n!==void 0){const o=this.boundingSphere.center;this.boundingBox.getCenter(o);let t=0;for(let r=0,l=e.count;r<l;r++)O.fromBufferAttribute(e,r),t=Math.max(t,o.distanceToSquared(O)),O.fromBufferAttribute(n,r),t=Math.max(t,o.distanceToSquared(O));this.boundingSphere.radius=Math.sqrt(t),isNaN(this.boundingSphere.radius)&&console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",this)}}toJSON(){}}c.UniformsLib.line={worldUnits:{value:1},linewidth:{value:1},resolution:{value:new c.Vector2(1,1)},dashOffset:{value:0},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1}};c.ShaderLib.line={uniforms:c.UniformsUtils.merge([c.UniformsLib.common,c.UniformsLib.fog,c.UniformsLib.line]),vertexShader:`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("vue"),P=require("./iconfont-DX6dC3Hu.cjs"),c=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-RZydwY0l.cjs"),xe=require("./index-C8qRkCgn.cjs"),Z=require("./urdfTree-DhRlnWn_.cjs"),g=require("./svgIcon-CUM54R6L.cjs"),Se=require("./isString--eJE54G5.cjs"),be=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),J=new c.Box3,O=new c.Vector3;class ie extends c.InstancedBufferGeometry{constructor(){super(),this.isLineSegmentsGeometry=!0,this.type="LineSegmentsGeometry";const e=[-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],n=[-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],o=[0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5];this.setIndex(o),this.setAttribute("position",new c.Float32BufferAttribute(e,3)),this.setAttribute("uv",new c.Float32BufferAttribute(n,2))}applyMatrix4(e){const n=this.attributes.instanceStart,o=this.attributes.instanceEnd;return n!==void 0&&(n.applyMatrix4(e),o.applyMatrix4(e),n.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(e){let n;e instanceof Float32Array?n=e:Array.isArray(e)&&(n=new Float32Array(e));const o=new c.InstancedInterleavedBuffer(n,6,1);return this.setAttribute("instanceStart",new c.InterleavedBufferAttribute(o,3,0)),this.setAttribute("instanceEnd",new c.InterleavedBufferAttribute(o,3,3)),this.instanceCount=this.attributes.instanceStart.count,this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(e){let n;e instanceof Float32Array?n=e:Array.isArray(e)&&(n=new Float32Array(e));const o=new c.InstancedInterleavedBuffer(n,6,1);return this.setAttribute("instanceColorStart",new c.InterleavedBufferAttribute(o,3,0)),this.setAttribute("instanceColorEnd",new c.InterleavedBufferAttribute(o,3,3)),this}fromWireframeGeometry(e){return this.setPositions(e.attributes.position.array),this}fromEdgesGeometry(e){return this.setPositions(e.attributes.position.array),this}fromMesh(e){return this.fromWireframeGeometry(new c.WireframeGeometry(e.geometry)),this}fromLineSegments(e){const n=e.geometry;return this.setPositions(n.attributes.position.array),this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new c.Box3);const e=this.attributes.instanceStart,n=this.attributes.instanceEnd;e!==void 0&&n!==void 0&&(this.boundingBox.setFromBufferAttribute(e),J.setFromBufferAttribute(n),this.boundingBox.union(J))}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new c.Sphere),this.boundingBox===null&&this.computeBoundingBox();const e=this.attributes.instanceStart,n=this.attributes.instanceEnd;if(e!==void 0&&n!==void 0){const o=this.boundingSphere.center;this.boundingBox.getCenter(o);let t=0;for(let r=0,l=e.count;r<l;r++)O.fromBufferAttribute(e,r),t=Math.max(t,o.distanceToSquared(O)),O.fromBufferAttribute(n,r),t=Math.max(t,o.distanceToSquared(O));this.boundingSphere.radius=Math.sqrt(t),isNaN(this.boundingSphere.radius)&&console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",this)}}toJSON(){}}c.UniformsLib.line={worldUnits:{value:1},linewidth:{value:1},resolution:{value:new c.Vector2(1,1)},dashOffset:{value:0},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1}};c.ShaderLib.line={uniforms:c.UniformsUtils.merge([c.UniformsLib.common,c.UniformsLib.fog,c.UniformsLib.line]),vertexShader:`
2
2
  #include <common>
3
3
  #include <color_pars_vertex>
4
4
  #include <fog_pars_vertex>
@@ -1 +1 @@
1
- "use strict";const e=require("vue"),h=require("./index-C8qRkCgn.cjs"),B=require("./index-DeBHVrj0.cjs"),S=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-D6FKmWHb.cjs"),F=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),R={SINGLE:"单机",DOUBLE:"双机"},V={ROBOT:1,PIPECOMPARSION:2},a={ROBOT_SCENE:"robot",TRACK_PATH:"trackPath",CPMPIP_SCENE:"cpmpip",PREVIEW:"preview"},I=h.defineStore("threeState",{state:()=>({data:{files:[],data:{}}}),actions:{setData(v){this.data=v},getData(){return this.data}}});function O(){const v=B.useMenuState(h.pinia),{platform:g}=h.storeToRefs(v),P=I(h.pinia),c=["uv","cyd"],d=["urdf"],r=["obj","stl"],T=[...c,...d,...r],u=t=>{if(!C())throw new Error("不是三维系统");P.setData(t)},y=()=>P.getData(),C=()=>g.value==="three",l=t=>S.getFileExtension(t),m=t=>{if(!t)return!1;const o=l(t);return T==null?void 0:T.includes(o)},E=t=>{if(!t)return!1;const o=l(t);return r==null?void 0:r.includes(o)},p=t=>{if(!t)return!1;const o=l(t);return c==null?void 0:c.includes(o)},f=t=>{if(!t)return{isCpt:!1,isCyd:!1,isUv:!1};const o=l(t),i=c==null?void 0:c.find(k=>k===o);return{isCpt:i==="cpt",isCyd:i==="cyd",isUv:i==="uv"}},_=t=>{if(!t)return!1;const o=l(t);return d==null?void 0:d.includes(o)},b=t=>C()&&m(t),n=t=>({url:t,extension:l(t)});return{getData:y,setData:u,isThreeSystem:C,isUrdf:_,isGeneralFile:E,isTrackPathFile:p,isThreeFile:m,isUseBackdrop:b,initTrackFileType:f,getFileExtension:l,getFileInfo:n,getFilesInfo:t=>{const o=[];for(let i=0;i<t.length;i++){const w=t[i],k=n(w);o.push(k)}return o}}}const N={class:"three-platform mv-inline"},A={class:"top-menu"},M={key:4,class:"loading"},H=e.defineComponent({__name:"threeViewerHost",props:{files:{default:()=>[]},threeData:{},componentType:{},width:{default:"100%"},height:{default:"100%"}},setup(v){const g=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./threeSceneView-BdVTjYBI.cjs"))),P=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./threePreview-Dw4LR6jh.cjs"))),c=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./threeTrackPathView-Ds9FmHU1.cjs"))),d=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./threeSceneViewForCPMPIP-DRYioXDE.cjs"))),r=v,T=B.useMenuState(h.pinia),{platName:u}=h.storeToRefs(T),{isUrdf:y,isTrackPathFile:C}=O(),l=e.computed(()=>{var n;return(n=r==null?void 0:r.files)==null?void 0:n.map(s=>{const{url:t}=s;return t})}),m=e.computed(()=>{var t;const n=(t=r==null?void 0:r.files)==null?void 0:t[0];return(n==null?void 0:n.extension)||""}),E=e.computed(()=>{var n,s;return(s=(n=r==null?void 0:r.threeData)==null?void 0:n.data)==null?void 0:s.trackFileType}),p=e.computed(()=>{if(r.componentType)switch(r.componentType){case"robot":return a.ROBOT_SCENE;case"track":return a.TRACK_PATH;case"cpmpip":return a.CPMPIP_SCENE;case"preview":return a.PREVIEW}return(u==null?void 0:u.value)===S.platNameConstants.CPMPIP&&y(m.value)?a.CPMPIP_SCENE:(u==null?void 0:u.value)===S.platNameConstants.ROBOT&&y(m.value)?a.ROBOT_SCENE:C(m.value)&&E.value?a.TRACK_PATH:a.PREVIEW}),f=e.ref([]),_=e.ref(!1);async function b(n){if(!n||!n.length){f.value=[];return}_.value=!0;try{const s=await Promise.all(n.map(t=>S.downloadFile(t)));f.value=s}catch(s){console.error("文件下载时发生错误:",s),f.value=[]}finally{_.value=!1}}return e.watch(()=>r.files,async n=>{const s=n.map(t=>{const{url:o}=t;return o});await b(s??[])},{immediate:!0,deep:!0}),(n,s)=>(e.openBlock(),e.createElementBlock("div",N,[e.createElementVNode("div",A,[e.renderSlot(n.$slots,"top-menu",{},void 0,!0)]),p.value===e.unref(a).ROBOT_SCENE?(e.openBlock(),e.createBlock(e.unref(g),{key:0,"file-blobs":f.value,threeData:r.threeData},{"button-left":e.withCtx(()=>[e.renderSlot(n.$slots,"management-menu",{},void 0,!0)]),"button-right":e.withCtx(()=>[e.renderSlot(n.$slots,"management-page",{},void 0,!0)]),_:3},8,["file-blobs","threeData"])):p.value===e.unref(a).TRACK_PATH?(e.openBlock(),e.createBlock(e.unref(c),{key:1,fileUrls:l.value,threeData:r.threeData,trackFileType:E.value},{"button-left":e.withCtx(()=>[e.renderSlot(n.$slots,"management-menu",{},void 0,!0)]),"button-right":e.withCtx(()=>[e.renderSlot(n.$slots,"management-page",{},void 0,!0)]),_:3},8,["fileUrls","threeData","trackFileType"])):p.value===e.unref(a).CPMPIP_SCENE?(e.openBlock(),e.createBlock(e.unref(d),{key:2,"file-blobs":f.value,threeData:r.threeData},{"button-left":e.withCtx(()=>[e.renderSlot(n.$slots,"management-menu",{},void 0,!0)]),"button-right":e.withCtx(()=>[e.renderSlot(n.$slots,"management-page",{},void 0,!0)]),_:3},8,["file-blobs","threeData"])):p.value===e.unref(a).PREVIEW?(e.openBlock(),e.createBlock(e.unref(P),{key:3,"file-blobs":f.value},{"button-left":e.withCtx(()=>[e.renderSlot(n.$slots,"management-menu",{},void 0,!0)]),"button-right":e.withCtx(()=>[e.renderSlot(n.$slots,"management-page",{},void 0,!0)]),_:3},8,["file-blobs"])):e.createCommentVNode("",!0),_.value?(e.openBlock(),e.createElementBlock("div",M," 文件下载中,请稍候... ")):e.createCommentVNode("",!0)]))}}),D=F._export_sfc(H,[["__scopeId","data-v-2562c7ef"]]),$=Object.freeze(Object.defineProperty({__proto__:null,default:D},Symbol.toStringTag,{value:"Module"}));exports.ThreeViewerHost=D;exports.robotMode=R;exports.sceneType=V;exports.threeViewerHost=$;exports.useThreeState=I;exports.useThreeSystem=O;
1
+ "use strict";const e=require("vue"),h=require("./index-C8qRkCgn.cjs"),B=require("./index-DeBHVrj0.cjs"),S=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-RZydwY0l.cjs"),F=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),R={SINGLE:"单机",DOUBLE:"双机"},V={ROBOT:1,PIPECOMPARSION:2},a={ROBOT_SCENE:"robot",TRACK_PATH:"trackPath",CPMPIP_SCENE:"cpmpip",PREVIEW:"preview"},I=h.defineStore("threeState",{state:()=>({data:{files:[],data:{}}}),actions:{setData(v){this.data=v},getData(){return this.data}}});function O(){const v=B.useMenuState(h.pinia),{platform:g}=h.storeToRefs(v),P=I(h.pinia),c=["uv","cyd"],d=["urdf"],r=["obj","stl"],T=[...c,...d,...r],u=t=>{if(!C())throw new Error("不是三维系统");P.setData(t)},y=()=>P.getData(),C=()=>g.value==="three",l=t=>S.getFileExtension(t),m=t=>{if(!t)return!1;const o=l(t);return T==null?void 0:T.includes(o)},E=t=>{if(!t)return!1;const o=l(t);return r==null?void 0:r.includes(o)},p=t=>{if(!t)return!1;const o=l(t);return c==null?void 0:c.includes(o)},f=t=>{if(!t)return{isCpt:!1,isCyd:!1,isUv:!1};const o=l(t),i=c==null?void 0:c.find(k=>k===o);return{isCpt:i==="cpt",isCyd:i==="cyd",isUv:i==="uv"}},_=t=>{if(!t)return!1;const o=l(t);return d==null?void 0:d.includes(o)},b=t=>C()&&m(t),n=t=>({url:t,extension:l(t)});return{getData:y,setData:u,isThreeSystem:C,isUrdf:_,isGeneralFile:E,isTrackPathFile:p,isThreeFile:m,isUseBackdrop:b,initTrackFileType:f,getFileExtension:l,getFileInfo:n,getFilesInfo:t=>{const o=[];for(let i=0;i<t.length;i++){const w=t[i],k=n(w);o.push(k)}return o}}}const N={class:"three-platform mv-inline"},A={class:"top-menu"},M={key:4,class:"loading"},H=e.defineComponent({__name:"threeViewerHost",props:{files:{default:()=>[]},threeData:{},componentType:{},width:{default:"100%"},height:{default:"100%"}},setup(v){const g=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./threeSceneView-BlYiTnf8.cjs"))),P=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./threePreview-BwKp0Pme.cjs"))),c=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./threeTrackPathView-YDfE6lF-.cjs"))),d=e.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./threeSceneViewForCPMPIP-C6dwXzB6.cjs"))),r=v,T=B.useMenuState(h.pinia),{platName:u}=h.storeToRefs(T),{isUrdf:y,isTrackPathFile:C}=O(),l=e.computed(()=>{var n;return(n=r==null?void 0:r.files)==null?void 0:n.map(s=>{const{url:t}=s;return t})}),m=e.computed(()=>{var t;const n=(t=r==null?void 0:r.files)==null?void 0:t[0];return(n==null?void 0:n.extension)||""}),E=e.computed(()=>{var n,s;return(s=(n=r==null?void 0:r.threeData)==null?void 0:n.data)==null?void 0:s.trackFileType}),p=e.computed(()=>{if(r.componentType)switch(r.componentType){case"robot":return a.ROBOT_SCENE;case"track":return a.TRACK_PATH;case"cpmpip":return a.CPMPIP_SCENE;case"preview":return a.PREVIEW}return(u==null?void 0:u.value)===S.platNameConstants.CPMPIP&&y(m.value)?a.CPMPIP_SCENE:(u==null?void 0:u.value)===S.platNameConstants.ROBOT&&y(m.value)?a.ROBOT_SCENE:C(m.value)&&E.value?a.TRACK_PATH:a.PREVIEW}),f=e.ref([]),_=e.ref(!1);async function b(n){if(!n||!n.length){f.value=[];return}_.value=!0;try{const s=await Promise.all(n.map(t=>S.downloadFile(t)));f.value=s}catch(s){console.error("文件下载时发生错误:",s),f.value=[]}finally{_.value=!1}}return e.watch(()=>r.files,async n=>{const s=n.map(t=>{const{url:o}=t;return o});await b(s??[])},{immediate:!0,deep:!0}),(n,s)=>(e.openBlock(),e.createElementBlock("div",N,[e.createElementVNode("div",A,[e.renderSlot(n.$slots,"top-menu",{},void 0,!0)]),p.value===e.unref(a).ROBOT_SCENE?(e.openBlock(),e.createBlock(e.unref(g),{key:0,"file-blobs":f.value,threeData:r.threeData},{"button-left":e.withCtx(()=>[e.renderSlot(n.$slots,"management-menu",{},void 0,!0)]),"button-right":e.withCtx(()=>[e.renderSlot(n.$slots,"management-page",{},void 0,!0)]),_:3},8,["file-blobs","threeData"])):p.value===e.unref(a).TRACK_PATH?(e.openBlock(),e.createBlock(e.unref(c),{key:1,fileUrls:l.value,threeData:r.threeData,trackFileType:E.value},{"button-left":e.withCtx(()=>[e.renderSlot(n.$slots,"management-menu",{},void 0,!0)]),"button-right":e.withCtx(()=>[e.renderSlot(n.$slots,"management-page",{},void 0,!0)]),_:3},8,["fileUrls","threeData","trackFileType"])):p.value===e.unref(a).CPMPIP_SCENE?(e.openBlock(),e.createBlock(e.unref(d),{key:2,"file-blobs":f.value,threeData:r.threeData},{"button-left":e.withCtx(()=>[e.renderSlot(n.$slots,"management-menu",{},void 0,!0)]),"button-right":e.withCtx(()=>[e.renderSlot(n.$slots,"management-page",{},void 0,!0)]),_:3},8,["file-blobs","threeData"])):p.value===e.unref(a).PREVIEW?(e.openBlock(),e.createBlock(e.unref(P),{key:3,"file-blobs":f.value},{"button-left":e.withCtx(()=>[e.renderSlot(n.$slots,"management-menu",{},void 0,!0)]),"button-right":e.withCtx(()=>[e.renderSlot(n.$slots,"management-page",{},void 0,!0)]),_:3},8,["file-blobs"])):e.createCommentVNode("",!0),_.value?(e.openBlock(),e.createElementBlock("div",M," 文件下载中,请稍候... ")):e.createCommentVNode("",!0)]))}}),D=F._export_sfc(H,[["__scopeId","data-v-2562c7ef"]]),$=Object.freeze(Object.defineProperty({__proto__:null,default:D},Symbol.toStringTag,{value:"Module"}));exports.ThreeViewerHost=D;exports.robotMode=R;exports.sceneType=V;exports.threeViewerHost=$;exports.useThreeState=I;exports.useThreeSystem=O;
@@ -1,7 +1,7 @@
1
- import { defineComponent as U, defineAsyncComponent as S, computed as I, ref as N, watch as H, createElementBlock as V, openBlock as v, createElementVNode as K, createBlock as D, createCommentVNode as B, renderSlot as l, unref as m, withCtx as d } from "vue";
2
- import { bT as W, p as F, s as A } from "./index-Ai5OAXHo.js";
3
- import { u as $ } from "./index-BWjhL8R0.js";
4
- import { b as j, aD as M, aE as L } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-Bqxa7GJA.js";
1
+ import { defineComponent as U, defineAsyncComponent as S, computed as I, ref as N, watch as H, createElementBlock as V, openBlock as T, createElementVNode as K, createBlock as F, createCommentVNode as B, renderSlot as l, unref as m, withCtx as d } from "vue";
2
+ import { bS as W, p as D, s as A } from "./index-BgE_6FYY.js";
3
+ import { u as $ } from "./index-D_qR3hDI.js";
4
+ import { b as j, aE as M, aF as L } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-6Ap42_Dn.js";
5
5
  import { _ as G } from "./_plugin-vue_export-helper-CHgC5LLL.js";
6
6
  const se = {
7
7
  SINGLE: "单机",
@@ -35,7 +35,7 @@ const se = {
35
35
  }
36
36
  });
37
37
  function Y() {
38
- const E = $(F), { platform: O } = A(E), y = z(F), i = ["uv", "cyd"], p = ["urdf"], n = ["obj", "stl"], P = [...i, ...p, ...n], u = (e) => {
38
+ const E = $(D), { platform: O } = A(E), y = z(D), i = ["uv", "cyd"], p = ["urdf"], n = ["obj", "stl"], P = [...i, ...p, ...n], u = (e) => {
39
39
  if (!g())
40
40
  throw new Error("不是三维系统");
41
41
  y.setData(e);
@@ -49,7 +49,7 @@ function Y() {
49
49
  return !1;
50
50
  const r = c(e);
51
51
  return n == null ? void 0 : n.includes(r);
52
- }, T = (e) => {
52
+ }, v = (e) => {
53
53
  if (!e)
54
54
  return !1;
55
55
  const r = c(e);
@@ -82,7 +82,7 @@ function Y() {
82
82
  isThreeSystem: g,
83
83
  isUrdf: C,
84
84
  isGeneralFile: _,
85
- isTrackPathFile: T,
85
+ isTrackPathFile: v,
86
86
  isThreeFile: h,
87
87
  isUseBackdrop: k,
88
88
  initTrackFileType: f,
@@ -111,7 +111,7 @@ const q = { class: "three-platform mv-inline" }, J = { class: "top-menu" }, Q =
111
111
  height: { default: "100%" }
112
112
  },
113
113
  setup(E) {
114
- const O = S(() => import("./threeSceneView-jhQi8rSG.js")), y = S(() => import("./threePreview-CdzNCx3-.js")), i = S(() => import("./threeTrackPathView-C1HVNI2F.js")), p = S(() => import("./threeSceneViewForCPMPIP-DgAoijFZ.js")), n = E, P = $(F), { platName: u } = A(P), { isUrdf: b, isTrackPathFile: g } = Y(), c = I(() => {
114
+ const O = S(() => import("./threeSceneView-CHzaHloG.js")), y = S(() => import("./threePreview-BHmdeJ_g.js")), i = S(() => import("./threeTrackPathView-D5b7ja2X.js")), p = S(() => import("./threeSceneViewForCPMPIP-Bxfu-nOk.js")), n = E, P = $(D), { platName: u } = A(P), { isUrdf: b, isTrackPathFile: g } = Y(), c = I(() => {
115
115
  var t;
116
116
  return (t = n == null ? void 0 : n.files) == null ? void 0 : t.map((s) => {
117
117
  const { url: e } = s;
@@ -124,7 +124,7 @@ const q = { class: "three-platform mv-inline" }, J = { class: "top-menu" }, Q =
124
124
  }), _ = I(() => {
125
125
  var t, s;
126
126
  return (s = (t = n == null ? void 0 : n.threeData) == null ? void 0 : t.data) == null ? void 0 : s.trackFileType;
127
- }), T = I(() => {
127
+ }), v = I(() => {
128
128
  if (n.componentType)
129
129
  switch (n.componentType) {
130
130
  case "robot":
@@ -163,11 +163,11 @@ const q = { class: "three-platform mv-inline" }, J = { class: "top-menu" }, Q =
163
163
  await k(s ?? []);
164
164
  },
165
165
  { immediate: !0, deep: !0 }
166
- ), (t, s) => (v(), V("div", q, [
166
+ ), (t, s) => (T(), V("div", q, [
167
167
  K("div", J, [
168
168
  l(t.$slots, "top-menu", {}, void 0, !0)
169
169
  ]),
170
- T.value === m(o).ROBOT_SCENE ? (v(), D(m(O), {
170
+ v.value === m(o).ROBOT_SCENE ? (T(), F(m(O), {
171
171
  key: 0,
172
172
  "file-blobs": f.value,
173
173
  threeData: n.threeData
@@ -179,7 +179,7 @@ const q = { class: "three-platform mv-inline" }, J = { class: "top-menu" }, Q =
179
179
  l(t.$slots, "management-page", {}, void 0, !0)
180
180
  ]),
181
181
  _: 3
182
- }, 8, ["file-blobs", "threeData"])) : T.value === m(o).TRACK_PATH ? (v(), D(m(i), {
182
+ }, 8, ["file-blobs", "threeData"])) : v.value === m(o).TRACK_PATH ? (T(), F(m(i), {
183
183
  key: 1,
184
184
  fileUrls: c.value,
185
185
  threeData: n.threeData,
@@ -192,7 +192,7 @@ const q = { class: "three-platform mv-inline" }, J = { class: "top-menu" }, Q =
192
192
  l(t.$slots, "management-page", {}, void 0, !0)
193
193
  ]),
194
194
  _: 3
195
- }, 8, ["fileUrls", "threeData", "trackFileType"])) : T.value === m(o).CPMPIP_SCENE ? (v(), D(m(p), {
195
+ }, 8, ["fileUrls", "threeData", "trackFileType"])) : v.value === m(o).CPMPIP_SCENE ? (T(), F(m(p), {
196
196
  key: 2,
197
197
  "file-blobs": f.value,
198
198
  threeData: n.threeData
@@ -204,7 +204,7 @@ const q = { class: "three-platform mv-inline" }, J = { class: "top-menu" }, Q =
204
204
  l(t.$slots, "management-page", {}, void 0, !0)
205
205
  ]),
206
206
  _: 3
207
- }, 8, ["file-blobs", "threeData"])) : T.value === m(o).PREVIEW ? (v(), D(m(y), {
207
+ }, 8, ["file-blobs", "threeData"])) : v.value === m(o).PREVIEW ? (T(), F(m(y), {
208
208
  key: 3,
209
209
  "file-blobs": f.value
210
210
  }, {
@@ -216,7 +216,7 @@ const q = { class: "three-platform mv-inline" }, J = { class: "top-menu" }, Q =
216
216
  ]),
217
217
  _: 3
218
218
  }, 8, ["file-blobs"])) : B("", !0),
219
- C.value ? (v(), V("div", Q, " 文件下载中,请稍候... ")) : B("", !0)
219
+ C.value ? (T(), V("div", Q, " 文件下载中,请稍候... ")) : B("", !0)
220
220
  ]));
221
221
  }
222
222
  }), Z = /* @__PURE__ */ G(X, [["__scopeId", "data-v-2562c7ef"]]), ae = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as I, ref as F, watch as M, onMounted as C, onUnmounted as E, createElementBlock as m, openBlock as f, Fragment as P, renderList as T, createElementVNode as c, createCommentVNode as U, toDisplayString as h, computed as L, resolveComponent as S, createVNode as A } from "vue";
2
- import { a7 as V } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-Bqxa7GJA.js";
2
+ import { a8 as V } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-6Ap42_Dn.js";
3
3
  import { _ as b } from "./_plugin-vue_export-helper-CHgC5LLL.js";
4
4
  const D = (i, a) => {
5
5
  if (!a)
@@ -1 +1 @@
1
- "use strict";const n=require("vue"),k=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-D6FKmWHb.cjs"),x=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),J=(o,a)=>{if(!a)return null;const i=o.joints[a];return i||null},V=(o,a)=>{if(!a)return null;const i=J(o,a);if(!i)return null;let u=null;return i.traverse(c=>{c instanceof k.Mesh&&!u&&(u=c)}),u},F=(o,a)=>{if(!a)return null;const i=o.links[a];return i||null},L=(o,a)=>{if(!a)return null;const i=F(o,a);if(!i)return null;let u=null;return i.traverse(c=>{c instanceof k.Mesh&&!u&&(u=c)}),u},E=o=>{const a=o.joints;return Object.values(a)},M=o=>E(o).filter(u=>u.jointType!=="fixed"),N=o=>{const a=o.links;return Object.keys(a)},w={class:"panel-content"},B={key:0,class:"joints-list"},b={class:"joint-info-row"},I={class:"joint-left"},S={class:"joint-name"},C={class:"joint-range"},D={class:"joint-type"},P={key:0,class:"joint-control-row"},T={class:"slider-container"},U=["min","max","value","onInput"],A={class:"value-display"},R={class:"joint-value"},q={class:"unit"},O={key:1,class:"empty-state"},K=n.defineComponent({__name:"urdfJointPanel",props:{model:{}},setup(o,{expose:a}){const i=o,u=n.ref([]),c=n.ref(null),f=(r,e=!1)=>r==="revolute"?e?Math.PI:-Math.PI:r==="prismatic"?e?1:-1:0,h=r=>{if(!r||!r.joints)return console.warn("URDF模型无效或不包含关节信息"),[];const e=[];return E(r).forEach(l=>{var d,p;if(l.jointType==="fixed")return;let t={lower:((d=l.limit)==null?void 0:d.lower)??f(l.jointType,!1),upper:((p=l.limit)==null?void 0:p.upper)??f(l.jointType,!0)};l.jointType==="continuous"&&(t={lower:-10*Math.PI,upper:10*Math.PI}),e.push({name:l.name,type:l.jointType||"unknown",limit:t,currentValue:l.angle||0,urdfJoint:l})}),e},m=(r,e)=>{var d;const s=u.value.find(p=>p.name===r);if(!s)return;const l=parseFloat(e),t=Math.max(s.limit.lower,Math.min(s.limit.upper,l));s.currentValue=t,(d=i.model)!=null&&d.setJointValue?i.model.setJointValue(r,t):s.urdfJoint.setJointValue(t)},_=()=>{u.value.forEach(r=>{(r.type==="revolute"||r.type==="continuous"||r.type==="prismatic")&&m(r.name,0)})},g=()=>{i.model&&u.value.forEach(r=>{r.urdfJoint.angle!==void 0&&r.currentValue!==r.urdfJoint.angle&&(r.currentValue=r.urdfJoint.angle)})},v=()=>{const r=()=>{g(),c.value=requestAnimationFrame(r)};r()},y=()=>{c.value&&(cancelAnimationFrame(c.value),c.value=null)};return n.watch(()=>i.model,r=>{r?u.value=h(r):u.value=[]},{immediate:!0}),n.onMounted(()=>{v()}),n.onUnmounted(()=>{y()}),a({resetAllJoints:_}),(r,e)=>(n.openBlock(),n.createElementBlock("div",w,[u.value.length>0?(n.openBlock(),n.createElementBlock("div",B,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(u.value,s=>(n.openBlock(),n.createElementBlock("div",{key:s.name,class:"joint-item"},[n.createElementVNode("div",b,[n.createElementVNode("div",I,[n.createElementVNode("span",S,n.toDisplayString(s.name),1),n.createElementVNode("span",C," ["+n.toDisplayString(s.limit.lower.toFixed(2))+", "+n.toDisplayString(s.limit.upper.toFixed(2))+"] ",1)]),n.createElementVNode("span",D,n.toDisplayString(s.type),1)]),s.type==="revolute"||s.type==="prismatic"||s.type==="continuous"?(n.openBlock(),n.createElementBlock("div",P,[n.createElementVNode("div",T,[n.createElementVNode("input",{type:"range",min:s.limit.lower,max:s.limit.upper,step:"0.001",value:s.currentValue,onInput:l=>m(s.name,l.target.value),class:"joint-slider"},null,40,U)]),n.createElementVNode("div",A,[n.createElementVNode("span",R,n.toDisplayString(s.currentValue?Number(s.currentValue).toFixed(3):"0.000"),1),n.createElementVNode("span",q,n.toDisplayString(s.type==="prismatic"?"m":"rad"),1)])])):n.createCommentVNode("",!0)]))),128))])):(n.openBlock(),n.createElementBlock("div",O,e[0]||(e[0]=[n.createElementVNode("p",null,"未检测到可控制的关节",-1)])))]))}}),$=x._export_sfc(K,[["__scopeId","data-v-750b831d"]]),H={class:"panel-content"},z="id",G={__name:"urdfTree",props:{model:Object,maxExpandCount:{type:Number,default:10},expandStrategy:{type:String,default:"breadth",validator:o=>["breadth","firstLevel"].includes(o)}},emits:["nodeClick"],setup(o,{emit:a}){const i=o,u=a,c=n.ref([]),f={children:"children",label:"label"},h=e=>{u("nodeClick",e)},m=(e,s=0)=>{const l=[];return Array.isArray(e)&&(e==null?void 0:e.length)>0&&e.forEach(t=>{if(!(t!=null&&t.isMesh)&&((t==null?void 0:t.type)==="URDFJoint"||(t==null?void 0:t.type)==="URDFLink")){const d={name:t==null?void 0:t.name,label:t==null?void 0:t.name,show:!0,level:s+1,isPenultimate:!1,type:t==null?void 0:t.type,id:t==null?void 0:t.id,limit:(t==null?void 0:t.limit)??"",children:m(t==null?void 0:t.children,s+1),path:t==null?void 0:t.name};l.push(d)}}),l},_=e=>e?[{name:e==null?void 0:e.name,label:e==null?void 0:e.name,show:!0,level:1,isPenultimate:!1,type:e==null?void 0:e.type,id:e==null?void 0:e.id,limit:(e==null?void 0:e.limit)??"",children:m(e==null?void 0:e.children,1)||[],path:e==null?void 0:e.name}]:[],g=(e,s)=>{const l=[],t=[...e];for(;t.length>0&&l.length<s;){const d=t.shift();d.children&&d.children.length>0&&(l.push(d.id),t.push(...d.children))}return l},v=(e,s)=>{const l=[];return e.forEach(t=>{if(t.children&&t.children.length>0){l.push(t.id);const d=t.children.filter(p=>p.children&&p.children.length>0).slice(0,s).map(p=>p.id);l.push(...d)}}),l.slice(0,s+1)},y=n.computed(()=>!c.value||c.value.length===0?[]:i.expandStrategy==="firstLevel"?v(c.value,i.maxExpandCount):g(c.value,i.maxExpandCount)),r=n.computed(()=>[{name:"场景",label:"场景",show:!0,level:1,isPenultimate:!1,type:"场景",id:"场景",children:i!=null&&i.model?_(i.model):[],path:"场景"}]);return n.watch(r,e=>{c.value=JSON.parse(JSON.stringify(e))},{immediate:!0}),(e,s)=>{const l=n.resolveComponent("el-tree");return n.openBlock(),n.createElementBlock("div",H,[n.createVNode(l,{data:c.value,props:f,"default-expanded-keys":y.value,"node-key":z,onNodeClick:h},null,8,["data","default-expanded-keys"])])}}},Q=x._export_sfc(G,[["__scopeId","data-v-cfde50c3"]]);exports.JointPanel=$;exports.UrdfTree=Q;exports.getAllLinkName=N;exports.getMeshFromJoint=V;exports.getMeshFromLink=L;exports.getNonFixedJoints=M;exports.getTargetJoint=J;
1
+ "use strict";const n=require("vue"),k=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-RZydwY0l.cjs"),x=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),J=(o,a)=>{if(!a)return null;const i=o.joints[a];return i||null},V=(o,a)=>{if(!a)return null;const i=J(o,a);if(!i)return null;let u=null;return i.traverse(c=>{c instanceof k.Mesh&&!u&&(u=c)}),u},F=(o,a)=>{if(!a)return null;const i=o.links[a];return i||null},L=(o,a)=>{if(!a)return null;const i=F(o,a);if(!i)return null;let u=null;return i.traverse(c=>{c instanceof k.Mesh&&!u&&(u=c)}),u},E=o=>{const a=o.joints;return Object.values(a)},M=o=>E(o).filter(u=>u.jointType!=="fixed"),N=o=>{const a=o.links;return Object.keys(a)},w={class:"panel-content"},B={key:0,class:"joints-list"},b={class:"joint-info-row"},I={class:"joint-left"},S={class:"joint-name"},C={class:"joint-range"},D={class:"joint-type"},P={key:0,class:"joint-control-row"},T={class:"slider-container"},U=["min","max","value","onInput"],A={class:"value-display"},R={class:"joint-value"},q={class:"unit"},O={key:1,class:"empty-state"},K=n.defineComponent({__name:"urdfJointPanel",props:{model:{}},setup(o,{expose:a}){const i=o,u=n.ref([]),c=n.ref(null),f=(r,e=!1)=>r==="revolute"?e?Math.PI:-Math.PI:r==="prismatic"?e?1:-1:0,h=r=>{if(!r||!r.joints)return console.warn("URDF模型无效或不包含关节信息"),[];const e=[];return E(r).forEach(l=>{var d,p;if(l.jointType==="fixed")return;let t={lower:((d=l.limit)==null?void 0:d.lower)??f(l.jointType,!1),upper:((p=l.limit)==null?void 0:p.upper)??f(l.jointType,!0)};l.jointType==="continuous"&&(t={lower:-10*Math.PI,upper:10*Math.PI}),e.push({name:l.name,type:l.jointType||"unknown",limit:t,currentValue:l.angle||0,urdfJoint:l})}),e},m=(r,e)=>{var d;const s=u.value.find(p=>p.name===r);if(!s)return;const l=parseFloat(e),t=Math.max(s.limit.lower,Math.min(s.limit.upper,l));s.currentValue=t,(d=i.model)!=null&&d.setJointValue?i.model.setJointValue(r,t):s.urdfJoint.setJointValue(t)},_=()=>{u.value.forEach(r=>{(r.type==="revolute"||r.type==="continuous"||r.type==="prismatic")&&m(r.name,0)})},g=()=>{i.model&&u.value.forEach(r=>{r.urdfJoint.angle!==void 0&&r.currentValue!==r.urdfJoint.angle&&(r.currentValue=r.urdfJoint.angle)})},v=()=>{const r=()=>{g(),c.value=requestAnimationFrame(r)};r()},y=()=>{c.value&&(cancelAnimationFrame(c.value),c.value=null)};return n.watch(()=>i.model,r=>{r?u.value=h(r):u.value=[]},{immediate:!0}),n.onMounted(()=>{v()}),n.onUnmounted(()=>{y()}),a({resetAllJoints:_}),(r,e)=>(n.openBlock(),n.createElementBlock("div",w,[u.value.length>0?(n.openBlock(),n.createElementBlock("div",B,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(u.value,s=>(n.openBlock(),n.createElementBlock("div",{key:s.name,class:"joint-item"},[n.createElementVNode("div",b,[n.createElementVNode("div",I,[n.createElementVNode("span",S,n.toDisplayString(s.name),1),n.createElementVNode("span",C," ["+n.toDisplayString(s.limit.lower.toFixed(2))+", "+n.toDisplayString(s.limit.upper.toFixed(2))+"] ",1)]),n.createElementVNode("span",D,n.toDisplayString(s.type),1)]),s.type==="revolute"||s.type==="prismatic"||s.type==="continuous"?(n.openBlock(),n.createElementBlock("div",P,[n.createElementVNode("div",T,[n.createElementVNode("input",{type:"range",min:s.limit.lower,max:s.limit.upper,step:"0.001",value:s.currentValue,onInput:l=>m(s.name,l.target.value),class:"joint-slider"},null,40,U)]),n.createElementVNode("div",A,[n.createElementVNode("span",R,n.toDisplayString(s.currentValue?Number(s.currentValue).toFixed(3):"0.000"),1),n.createElementVNode("span",q,n.toDisplayString(s.type==="prismatic"?"m":"rad"),1)])])):n.createCommentVNode("",!0)]))),128))])):(n.openBlock(),n.createElementBlock("div",O,e[0]||(e[0]=[n.createElementVNode("p",null,"未检测到可控制的关节",-1)])))]))}}),$=x._export_sfc(K,[["__scopeId","data-v-750b831d"]]),H={class:"panel-content"},z="id",G={__name:"urdfTree",props:{model:Object,maxExpandCount:{type:Number,default:10},expandStrategy:{type:String,default:"breadth",validator:o=>["breadth","firstLevel"].includes(o)}},emits:["nodeClick"],setup(o,{emit:a}){const i=o,u=a,c=n.ref([]),f={children:"children",label:"label"},h=e=>{u("nodeClick",e)},m=(e,s=0)=>{const l=[];return Array.isArray(e)&&(e==null?void 0:e.length)>0&&e.forEach(t=>{if(!(t!=null&&t.isMesh)&&((t==null?void 0:t.type)==="URDFJoint"||(t==null?void 0:t.type)==="URDFLink")){const d={name:t==null?void 0:t.name,label:t==null?void 0:t.name,show:!0,level:s+1,isPenultimate:!1,type:t==null?void 0:t.type,id:t==null?void 0:t.id,limit:(t==null?void 0:t.limit)??"",children:m(t==null?void 0:t.children,s+1),path:t==null?void 0:t.name};l.push(d)}}),l},_=e=>e?[{name:e==null?void 0:e.name,label:e==null?void 0:e.name,show:!0,level:1,isPenultimate:!1,type:e==null?void 0:e.type,id:e==null?void 0:e.id,limit:(e==null?void 0:e.limit)??"",children:m(e==null?void 0:e.children,1)||[],path:e==null?void 0:e.name}]:[],g=(e,s)=>{const l=[],t=[...e];for(;t.length>0&&l.length<s;){const d=t.shift();d.children&&d.children.length>0&&(l.push(d.id),t.push(...d.children))}return l},v=(e,s)=>{const l=[];return e.forEach(t=>{if(t.children&&t.children.length>0){l.push(t.id);const d=t.children.filter(p=>p.children&&p.children.length>0).slice(0,s).map(p=>p.id);l.push(...d)}}),l.slice(0,s+1)},y=n.computed(()=>!c.value||c.value.length===0?[]:i.expandStrategy==="firstLevel"?v(c.value,i.maxExpandCount):g(c.value,i.maxExpandCount)),r=n.computed(()=>[{name:"场景",label:"场景",show:!0,level:1,isPenultimate:!1,type:"场景",id:"场景",children:i!=null&&i.model?_(i.model):[],path:"场景"}]);return n.watch(r,e=>{c.value=JSON.parse(JSON.stringify(e))},{immediate:!0}),(e,s)=>{const l=n.resolveComponent("el-tree");return n.openBlock(),n.createElementBlock("div",H,[n.createVNode(l,{data:c.value,props:f,"default-expanded-keys":y.value,"node-key":z,onNodeClick:h},null,8,["data","default-expanded-keys"])])}}},Q=x._export_sfc(G,[["__scopeId","data-v-cfde50c3"]]);exports.JointPanel=$;exports.UrdfTree=Q;exports.getAllLinkName=N;exports.getMeshFromJoint=V;exports.getMeshFromLink=L;exports.getNonFixedJoints=M;exports.getTargetJoint=J;
@@ -1 +1 @@
1
- "use strict";var ee=Object.defineProperty;var te=(b,i,o)=>i in b?ee(b,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):b[i]=o;var C=(b,i,o)=>te(b,typeof i!="symbol"?i+"":i,o);const oe=require("./URDFLoader-DexIn4xU.cjs"),S=require("./MTLLoader-Bseg1sor.cjs"),N=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-D6FKmWHb.cjs"),e=require("vue"),D=require("./iconfont-Bnhc7fLw.cjs"),se=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),le="http://222.92.178.198:60000/chfs/shared/Insofrobot/urdf";function re(b){const{mtlUrl:i,manager:o,resourcePath:l,onLoad:m,onProgress:r,onError:_}=b,p=new S.MTLLoader(o);return l&&p.setResourcePath(l),p.load(i,m,r,_),p}function ie(b){const{objUrl:i,manager:o,materials:l,onLoad:m,onProgress:r,onError:_}=b,p=new S.OBJLoader(o);return l&&p.setMaterials(l),p.load(i,m,r,_),p}function ne(b){const{manager:i,baseFolderUrl:o,onFileProgress:l}=b,m=new oe.URDFLoader(i);return m.packages=r=>`${o.endsWith("/")?o:o+"/"}${r}/`,m.loadMeshCb=(r,_,p)=>{const g=(()=>{const h=r.split("?")[0].split("#")[0],c=h.lastIndexOf(".");return c>=0?h.slice(c+1).toLowerCase():void 0})();switch(g){case"obj":{const h=(()=>{try{return new URL(".",r).toString()}catch{const a=r.lastIndexOf("/");return a>=0?r.slice(0,a+1):r}})(),c=(()=>{var d;return(((d=r.split("/").pop())==null?void 0:d.split("?")[0].split("#")[0])??"").replace(/\.[^/.?#]+$/,"")})(),f=`${h}${c}.mtl`,V=a=>{ie({objUrl:r,manager:_,materials:a,onLoad:d=>p(d),onProgress:d=>l==null?void 0:l(r,d==null?void 0:d.loaded,d==null?void 0:d.total),onError:d=>{console.error(`[URDF 资源加载失败,已跳过] 无法加载 OBJ 模型: ${r}`,d),p(new N.Group)}})};re({mtlUrl:f,manager:_,resourcePath:h,onLoad:a=>{try{a.preload()}catch{}V(a)},onProgress:a=>l==null?void 0:l(f,a==null?void 0:a.loaded,a==null?void 0:a.total),onError:a=>{console.warn(`[URDF 资源警告] 未找到或加载材质失败: ${f}。将尝试无材质加载。`),V(void 0)}});break}case"stl":{new S.STLLoader(_).load(r,c=>{const f=new N.MeshPhongMaterial({color:12303291,shininess:30}),V=new N.Mesh(c,f);V.castShadow=!0,V.receiveShadow=!0,p(V)},c=>l==null?void 0:l(r,c==null?void 0:c.loaded,c==null?void 0:c.total),c=>{console.error(`[URDF 资源加载失败,已跳过] 无法加载 STL 模型: ${r}`,c),p(new N.Group)});break}default:console.error(`[URDF 资源加载失败,已跳过] 不支持的网格格式: .${g} (路径: ${r})`),p(new N.Group)}},m}function ae(b,i,o,l){return{loadSceneFromFile:r=>new Promise((_,p)=>{o.value=!0,l.value="正在初始化 URDF 加载器...";let g=0,h=0,c=null;const f=new N.LoadingManager;f.onStart=(a,d,E)=>{g=E||0,h=d||0,l.value=g>0?`开始下载资源: 0 / ${g}`:"开始下载资源...",o.value=!0},f.onProgress=(a,d,E)=>{h=d,g=E;const R=`正在加载 ${d} / ${E} 个文件: ${N.getFilenameFromUrl(a)}`;l.value=R,d===E&&(l.value="资源加载完成,正在处理模型...",setTimeout(()=>{if(c){c.updateMatrixWorld(!0);const v=new N.Box3().setFromObject(c);v.isEmpty()&&console.warn("模型加载完成,但所有可视化网格均加载失败,模型将不可见。"),c.userData.boundingBox=v,c.traverse(u=>{u.isMesh&&(u.castShadow=!0,u.receiveShadow=!0)}),_(c)}else p(new Error("URDF 文件本身加载失败。"));l.value="模型加载完成",setTimeout(()=>{l.value==="模型加载完成"&&(o.value=!1,l.value="")},500)},100))},f.onError=a=>{console.warn(`LoadingManager 报告一个资源加载失败: ${a}。加载流程将继续。`)};const V=(a,d,E)=>{const R=N.getFilenameFromUrl(a);let v;E&&E>0?v=`${R}(${N.formatBytes(d)} / ${N.formatBytes(E)})`:d&&d>0?v=`${R}(已下载 ${N.formatBytes(d)})`:v=`${R}`,l.value=`正在下载第 ${h+1} / ${g} 个文件: ${v}`};try{const a=URL.createObjectURL(r);ne({manager:f,baseFolderUrl:le,onFileProgress:V}).load(a,E=>{c=E},void 0,E=>{console.error(`加载 URDF 文件 (${r.name}) 时发生致命错误:`,E),l.value="URDF 文件解析失败",o.value=!1,p(new Error(`加载 URDF 文件失败: ${r.name}`))})}catch(a){console.error("初始化 URDF 加载时发生致命错误:",a),l.value="模型加载失败",o.value=!1,p(a)}})}}function ce(b,i,o,l=["URDFVisual"]){let m=null;const r=e.ref(null),_=new N.Raycaster,p=new N.Vector2,g=new Map;function h(){o.value.forEach(v=>{v.traverse(u=>{l!=null&&l.includes(u.type)&&g.set(u.id,{obj:u,axis:u.axis||new N.Vector3(1,0,0),limits:u.limits})})})}function c(v){r.value&&r.value.obj.traverse(u=>{var t;u.material&&((t=u.material.emissive)==null||t.set(0))}),r.value=v,v.obj.traverse(u=>{var t;u.material&&((t=u.material.emissive)==null||t.set(65280))})}function f(v){const u=b.value.getBoundingClientRect();p.x=(v.clientX-u.left)/u.width*2-1,p.y=-((v.clientY-u.top)/u.height)*2+1,_.setFromCamera(p,m);const t=_.intersectObjects(o.value,!0);if(t.length===0)return;let s=t[0].object,w=null;for(;s;){if(g.has(s.id)){w=g.get(s.id);break}s=s.parent}w&&c(w)}function V(){b.value&&b.value.removeEventListener("click",f,!1)}function a(){const{scene:v,camera:u}=i();m=u,h(),b.value&&b.value.addEventListener("click",f,!1)}function d(v){r.value&&(r.value.obj.visible=v)}function E(v){var s;const{axis:u,value:t}=v;D.updateObjectPosition((s=r.value)==null?void 0:s.obj,u,t)}function R(v){var s;const{axis:u,value:t}=v;D.updateObjectRotation((s=r.value)==null?void 0:s.obj,u,t)}return{initRaycaster:a,dispose:V,selectedObject3D:r,setSelectedObjVisible:d,updatePosition:E,updateRotation:R}}class de{constructor(i){C(this,"robot");C(this,"movableJoints");this.robot=i,this.movableJoints=this.getMovableJoints()}getMovableJoints(){return Object.values(this.robot.joints).filter(i=>i.jointType!=="fixed")}getMovableJointNames(){return this.movableJoints.map(i=>i.name)}setJointAngle(i,o){const l=this.robot.joints[i];if(!l||l.jointType==="fixed")return console.warn(`关节 ${i} 不存在或不可动`),!1;if(l.limit){const m=Math.max(l.limit.lower,Math.min(l.limit.upper,o));m!==o&&console.warn(`关节 ${i} 角度被限制在 [${l.limit.lower}, ${l.limit.upper}]`),l.setJointValue(m)}else l.setJointValue(o);return!0}setJointAngles(i){Object.entries(i).forEach(([o,l])=>{typeof l=="number"&&!isNaN(l)&&this.setJointAngle(o,l)})}getCurrentJointStates(){const i={};return this.movableJoints.forEach(o=>{i[o.name]=o.angle||0}),i}resetToZero(){this.movableJoints.forEach(i=>{i.setJointValue(0)})}getJointLimits(i){const o=this.robot.joints[i];return!o||!o.limit?null:{lower:o.limit.lower,upper:o.limit.upper}}async animateToState(i,o=1e3,l){const m=this.getCurrentJointStates(),r=Date.now();return new Promise(_=>{const p=()=>{const g=Date.now()-r,h=Math.min(g/o,1),c=this.easeInOutCubic(h),f={};Object.keys(i).forEach(V=>{const a=m[V]||0,d=i[V];f[V]=a+(d-a)*c}),this.setJointAngles(f),l&&l(h),h<1?requestAnimationFrame(p):_()};p()})}easeInOutCubic(i){return i<.5?4*i*i*i:1-Math.pow(-2*i+2,3)/2}async playSequence(i,o=1e3,l){for(let m=0;m<i.length;m++)await this.animateToState(i[m],o,r=>{l&&l(m,r)})}}const ue={class:"panel-content"},me={class:"obj"},pe={key:0,class:"obj-base"},ve=["title"],fe=["title"],be={key:1},we={class:"obj-position"},_e={class:"coord-item"},he={class:"coord-item"},Ve={class:"coord-item"},Ee={class:"obj-rotation"},ge={class:"coord-item"},ye={class:"coord-item"},Ne={class:"coord-item"},Le={class:"world"},Re={class:"coord-line"},je={class:"coord-text"},Ce={class:"world-position-item"},De={class:"world-position-item"},Se={class:"world-position-item"},Ue={class:"coord-line"},Fe={class:"coord-text"},$e={class:"world-rotation-item"},Me={class:"world-rotation-item"},xe={class:"world-rotation-item"},Je=e.defineComponent({__name:"workpieceTreePanel",props:{model:{},maxExpandCount:{default:10},expandStrategy:{default:"breadth"}},emits:["nodeClick","visibleChange","updatePosition","updateRotation"],setup(b,{emit:i}){const o=b,l=i,m=e.ref([]),r=e.ref({}),_=(t,s=0)=>{const w=[];return Array.isArray(t)&&(t==null?void 0:t.length)>0&&t.forEach(n=>{if(!(n!=null&&n.isMesh)){const y={name:n==null?void 0:n.name,label:(n==null?void 0:n.name)||(n==null?void 0:n.type),show:!0,level:s+1,isPenultimate:!1,type:n==null?void 0:n.type,id:n==null?void 0:n.id,limit:(n==null?void 0:n.limit)??"",children:_(n==null?void 0:n.children,s+1),path:n==null?void 0:n.name};w.push(y)}}),w},p=t=>t?[{name:t==null?void 0:t.name,label:(t==null?void 0:t.name)||(t==null?void 0:t.type),show:!0,level:1,isPenultimate:!1,type:t==null?void 0:t.type,id:t==null?void 0:t.id,limit:(t==null?void 0:t.limit)??"",children:_(t==null?void 0:t.children,1),path:t==null?void 0:t.name}]:[],g=(t,s)=>{const w=[],n=[...t];for(;n.length>0&&w.length<s;){const y=n.shift();y.children&&y.children.length>0&&(w.push(y.id),n.push(...y.children))}return w},h=(t,s)=>{const w=[];return t.forEach(n=>{if(n.children&&n.children.length>0){w.push(n.id);const y=n.children.filter(j=>j.children&&j.children.length>0).slice(0,s).map(j=>j.id);w.push(...y)}}),w.slice(0,s+1)};e.computed(()=>!m.value||m.value.length===0?[]:o.expandStrategy==="firstLevel"?h(m.value,o.maxExpandCount):g(m.value,o.maxExpandCount));const c=t=>t?parseFloat(t.toFixed(3)):0,f=t=>t?parseFloat(t.toFixed(1)):0,V=(t,s)=>{l("updatePosition",{obj:o.model,axis:s,value:(t==null?void 0:t.toString())||"0"})},a=(t,s)=>{l("updateRotation",{obj:o.model,axis:s,value:(t==null?void 0:t.toString())||"0"})},d=t=>{l("visibleChange",t)},E=e.computed(()=>o!=null&&o.model?p(o.model):[]),R=e.computed(()=>{var t,s;return((t=o==null?void 0:o.model)==null?void 0:t.name)||((s=o==null?void 0:o.model)==null?void 0:s.type)}),v=e.computed(()=>{var t;return(t=o==null?void 0:o.model)==null?void 0:t.type}),u=e.computed(()=>{var t;return(t=o==null?void 0:o.model)==null?void 0:t.visible});return e.watch(()=>o.model,()=>{o.model&&(r.value=D.getObject3DData(o.model))},{deep:!0,immediate:!0}),e.watch(E,t=>{m.value=JSON.parse(JSON.stringify(t))},{immediate:!0}),(t,s)=>{var j,U,F,$,M,x,J,O,k,T,P,z,B,A,q,I,W,G,X,Y,Z,K,H,Q;const w=e.resolveComponent("el-divider"),n=e.resolveComponent("el-switch"),y=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",ue,[e.createVNode(w,null,{default:e.withCtx(()=>s[6]||(s[6]=[e.createTextVNode("对象")])),_:1,__:[6]}),e.createElementVNode("div",me,[o.model?(e.openBlock(),e.createElementBlock("div",pe,[e.createElementVNode("div",{class:"obj-name",title:R.value},e.toDisplayString(R.value),9,ve),e.createElementVNode("div",{class:"obj-type",title:v.value},"["+e.toDisplayString(v.value)+"]",9,fe)])):(e.openBlock(),e.createElementBlock("div",be,"空")),e.createVNode(n,{"model-value":u.value,onChange:d},null,8,["model-value"])]),e.createVNode(w,null,{default:e.withCtx(()=>s[7]||(s[7]=[e.createTextVNode("相对位置")])),_:1,__:[7]}),e.createElementVNode("div",we,[e.createElementVNode("div",_e,[s[8]||(s[8]=e.createElementVNode("span",{class:"axis-label"},"X",-1)),e.createVNode(y,{"model-value":c((U=(j=r.value)==null?void 0:j.position)==null?void 0:U.x),onChange:s[0]||(s[0]=L=>V(L,"x")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",he,[s[9]||(s[9]=e.createElementVNode("span",{class:"axis-label"},"Y",-1)),e.createVNode(y,{"model-value":c(($=(F=r.value)==null?void 0:F.position)==null?void 0:$.y),onChange:s[1]||(s[1]=L=>V(L,"y")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Ve,[s[10]||(s[10]=e.createElementVNode("span",{class:"axis-label"},"Z",-1)),e.createVNode(y,{"model-value":c((x=(M=r.value)==null?void 0:M.position)==null?void 0:x.z),onChange:s[2]||(s[2]=L=>V(L,"z")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])])]),e.createVNode(w,null,{default:e.withCtx(()=>s[11]||(s[11]=[e.createTextVNode("相对旋转")])),_:1,__:[11]}),e.createElementVNode("div",Ee,[e.createElementVNode("div",ge,[s[12]||(s[12]=e.createElementVNode("span",{class:"axis-label"},"X°",-1)),e.createVNode(y,{"model-value":f((O=(J=r.value)==null?void 0:J.rotation)==null?void 0:O.x),onChange:s[3]||(s[3]=L=>a(L,"x")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",ye,[s[13]||(s[13]=e.createElementVNode("span",{class:"axis-label"},"Y°",-1)),e.createVNode(y,{"model-value":f((T=(k=r.value)==null?void 0:k.rotation)==null?void 0:T.y),onChange:s[4]||(s[4]=L=>a(L,"y")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Ne,[s[14]||(s[14]=e.createElementVNode("span",{class:"axis-label"},"Z°",-1)),e.createVNode(y,{"model-value":f((z=(P=r.value)==null?void 0:P.rotation)==null?void 0:z.z),onChange:s[5]||(s[5]=L=>a(L,"z")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])])]),e.createVNode(w,null,{default:e.withCtx(()=>s[15]||(s[15]=[e.createTextVNode("世界信息")])),_:1,__:[15]}),e.createElementVNode("div",Le,[e.createElementVNode("div",Re,[s[16]||(s[16]=e.createElementVNode("span",{class:"coord-label"},"世界位置:",-1)),e.createElementVNode("span",je,[e.createElementVNode("div",Ce,e.toDisplayString(c((A=(B=r.value)==null?void 0:B.worldPosition)==null?void 0:A.x))+", ",1),e.createElementVNode("div",De,e.toDisplayString(c((I=(q=r.value)==null?void 0:q.worldPosition)==null?void 0:I.y))+", ",1),e.createElementVNode("div",Se,e.toDisplayString(c((G=(W=r.value)==null?void 0:W.worldPosition)==null?void 0:G.z)),1)])]),e.createElementVNode("div",Ue,[s[17]||(s[17]=e.createElementVNode("span",{class:"coord-label"},"世界旋转:",-1)),e.createElementVNode("span",Fe,[e.createElementVNode("div",$e,e.toDisplayString(f((Y=(X=r.value)==null?void 0:X.worldRotation)==null?void 0:Y.x))+"°, ",1),e.createElementVNode("div",Me,e.toDisplayString(f((K=(Z=r.value)==null?void 0:Z.worldRotation)==null?void 0:K.y))+"°, ",1),e.createElementVNode("div",xe,e.toDisplayString(f((Q=(H=r.value)==null?void 0:H.worldRotation)==null?void 0:Q.z))+"° ",1)])])])])}}}),Oe=se._export_sfc(Je,[["__scopeId","data-v-00d48931"]]);exports.URDFRobotController=de;exports.WorkpieceTreePanel=Oe;exports.useRaycaster=ce;exports.useUrdfLoader=ae;
1
+ "use strict";var ee=Object.defineProperty;var te=(b,i,o)=>i in b?ee(b,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):b[i]=o;var C=(b,i,o)=>te(b,typeof i!="symbol"?i+"":i,o);const oe=require("./URDFLoader-DykmnnHW.cjs"),S=require("./MTLLoader-DcCqSeA-.cjs"),N=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-RZydwY0l.cjs"),e=require("vue"),D=require("./iconfont-DX6dC3Hu.cjs"),se=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),le="http://222.92.178.198:60000/chfs/shared/Insofrobot/urdf";function re(b){const{mtlUrl:i,manager:o,resourcePath:l,onLoad:m,onProgress:r,onError:_}=b,p=new S.MTLLoader(o);return l&&p.setResourcePath(l),p.load(i,m,r,_),p}function ie(b){const{objUrl:i,manager:o,materials:l,onLoad:m,onProgress:r,onError:_}=b,p=new S.OBJLoader(o);return l&&p.setMaterials(l),p.load(i,m,r,_),p}function ne(b){const{manager:i,baseFolderUrl:o,onFileProgress:l}=b,m=new oe.URDFLoader(i);return m.packages=r=>`${o.endsWith("/")?o:o+"/"}${r}/`,m.loadMeshCb=(r,_,p)=>{const g=(()=>{const h=r.split("?")[0].split("#")[0],c=h.lastIndexOf(".");return c>=0?h.slice(c+1).toLowerCase():void 0})();switch(g){case"obj":{const h=(()=>{try{return new URL(".",r).toString()}catch{const a=r.lastIndexOf("/");return a>=0?r.slice(0,a+1):r}})(),c=(()=>{var d;return(((d=r.split("/").pop())==null?void 0:d.split("?")[0].split("#")[0])??"").replace(/\.[^/.?#]+$/,"")})(),f=`${h}${c}.mtl`,V=a=>{ie({objUrl:r,manager:_,materials:a,onLoad:d=>p(d),onProgress:d=>l==null?void 0:l(r,d==null?void 0:d.loaded,d==null?void 0:d.total),onError:d=>{console.error(`[URDF 资源加载失败,已跳过] 无法加载 OBJ 模型: ${r}`,d),p(new N.Group)}})};re({mtlUrl:f,manager:_,resourcePath:h,onLoad:a=>{try{a.preload()}catch{}V(a)},onProgress:a=>l==null?void 0:l(f,a==null?void 0:a.loaded,a==null?void 0:a.total),onError:a=>{console.warn(`[URDF 资源警告] 未找到或加载材质失败: ${f}。将尝试无材质加载。`),V(void 0)}});break}case"stl":{new S.STLLoader(_).load(r,c=>{const f=new N.MeshPhongMaterial({color:12303291,shininess:30}),V=new N.Mesh(c,f);V.castShadow=!0,V.receiveShadow=!0,p(V)},c=>l==null?void 0:l(r,c==null?void 0:c.loaded,c==null?void 0:c.total),c=>{console.error(`[URDF 资源加载失败,已跳过] 无法加载 STL 模型: ${r}`,c),p(new N.Group)});break}default:console.error(`[URDF 资源加载失败,已跳过] 不支持的网格格式: .${g} (路径: ${r})`),p(new N.Group)}},m}function ae(b,i,o,l){return{loadSceneFromFile:r=>new Promise((_,p)=>{o.value=!0,l.value="正在初始化 URDF 加载器...";let g=0,h=0,c=null;const f=new N.LoadingManager;f.onStart=(a,d,E)=>{g=E||0,h=d||0,l.value=g>0?`开始下载资源: 0 / ${g}`:"开始下载资源...",o.value=!0},f.onProgress=(a,d,E)=>{h=d,g=E;const R=`正在加载 ${d} / ${E} 个文件: ${N.getFilenameFromUrl(a)}`;l.value=R,d===E&&(l.value="资源加载完成,正在处理模型...",setTimeout(()=>{if(c){c.updateMatrixWorld(!0);const v=new N.Box3().setFromObject(c);v.isEmpty()&&console.warn("模型加载完成,但所有可视化网格均加载失败,模型将不可见。"),c.userData.boundingBox=v,c.traverse(u=>{u.isMesh&&(u.castShadow=!0,u.receiveShadow=!0)}),_(c)}else p(new Error("URDF 文件本身加载失败。"));l.value="模型加载完成",setTimeout(()=>{l.value==="模型加载完成"&&(o.value=!1,l.value="")},500)},100))},f.onError=a=>{console.warn(`LoadingManager 报告一个资源加载失败: ${a}。加载流程将继续。`)};const V=(a,d,E)=>{const R=N.getFilenameFromUrl(a);let v;E&&E>0?v=`${R}(${N.formatBytes(d)} / ${N.formatBytes(E)})`:d&&d>0?v=`${R}(已下载 ${N.formatBytes(d)})`:v=`${R}`,l.value=`正在下载第 ${h+1} / ${g} 个文件: ${v}`};try{const a=URL.createObjectURL(r);ne({manager:f,baseFolderUrl:le,onFileProgress:V}).load(a,E=>{c=E},void 0,E=>{console.error(`加载 URDF 文件 (${r.name}) 时发生致命错误:`,E),l.value="URDF 文件解析失败",o.value=!1,p(new Error(`加载 URDF 文件失败: ${r.name}`))})}catch(a){console.error("初始化 URDF 加载时发生致命错误:",a),l.value="模型加载失败",o.value=!1,p(a)}})}}function ce(b,i,o,l=["URDFVisual"]){let m=null;const r=e.ref(null),_=new N.Raycaster,p=new N.Vector2,g=new Map;function h(){o.value.forEach(v=>{v.traverse(u=>{l!=null&&l.includes(u.type)&&g.set(u.id,{obj:u,axis:u.axis||new N.Vector3(1,0,0),limits:u.limits})})})}function c(v){r.value&&r.value.obj.traverse(u=>{var t;u.material&&((t=u.material.emissive)==null||t.set(0))}),r.value=v,v.obj.traverse(u=>{var t;u.material&&((t=u.material.emissive)==null||t.set(65280))})}function f(v){const u=b.value.getBoundingClientRect();p.x=(v.clientX-u.left)/u.width*2-1,p.y=-((v.clientY-u.top)/u.height)*2+1,_.setFromCamera(p,m);const t=_.intersectObjects(o.value,!0);if(t.length===0)return;let s=t[0].object,w=null;for(;s;){if(g.has(s.id)){w=g.get(s.id);break}s=s.parent}w&&c(w)}function V(){b.value&&b.value.removeEventListener("click",f,!1)}function a(){const{scene:v,camera:u}=i();m=u,h(),b.value&&b.value.addEventListener("click",f,!1)}function d(v){r.value&&(r.value.obj.visible=v)}function E(v){var s;const{axis:u,value:t}=v;D.updateObjectPosition((s=r.value)==null?void 0:s.obj,u,t)}function R(v){var s;const{axis:u,value:t}=v;D.updateObjectRotation((s=r.value)==null?void 0:s.obj,u,t)}return{initRaycaster:a,dispose:V,selectedObject3D:r,setSelectedObjVisible:d,updatePosition:E,updateRotation:R}}class de{constructor(i){C(this,"robot");C(this,"movableJoints");this.robot=i,this.movableJoints=this.getMovableJoints()}getMovableJoints(){return Object.values(this.robot.joints).filter(i=>i.jointType!=="fixed")}getMovableJointNames(){return this.movableJoints.map(i=>i.name)}setJointAngle(i,o){const l=this.robot.joints[i];if(!l||l.jointType==="fixed")return console.warn(`关节 ${i} 不存在或不可动`),!1;if(l.limit){const m=Math.max(l.limit.lower,Math.min(l.limit.upper,o));m!==o&&console.warn(`关节 ${i} 角度被限制在 [${l.limit.lower}, ${l.limit.upper}]`),l.setJointValue(m)}else l.setJointValue(o);return!0}setJointAngles(i){Object.entries(i).forEach(([o,l])=>{typeof l=="number"&&!isNaN(l)&&this.setJointAngle(o,l)})}getCurrentJointStates(){const i={};return this.movableJoints.forEach(o=>{i[o.name]=o.angle||0}),i}resetToZero(){this.movableJoints.forEach(i=>{i.setJointValue(0)})}getJointLimits(i){const o=this.robot.joints[i];return!o||!o.limit?null:{lower:o.limit.lower,upper:o.limit.upper}}async animateToState(i,o=1e3,l){const m=this.getCurrentJointStates(),r=Date.now();return new Promise(_=>{const p=()=>{const g=Date.now()-r,h=Math.min(g/o,1),c=this.easeInOutCubic(h),f={};Object.keys(i).forEach(V=>{const a=m[V]||0,d=i[V];f[V]=a+(d-a)*c}),this.setJointAngles(f),l&&l(h),h<1?requestAnimationFrame(p):_()};p()})}easeInOutCubic(i){return i<.5?4*i*i*i:1-Math.pow(-2*i+2,3)/2}async playSequence(i,o=1e3,l){for(let m=0;m<i.length;m++)await this.animateToState(i[m],o,r=>{l&&l(m,r)})}}const ue={class:"panel-content"},me={class:"obj"},pe={key:0,class:"obj-base"},ve=["title"],fe=["title"],be={key:1},we={class:"obj-position"},_e={class:"coord-item"},he={class:"coord-item"},Ve={class:"coord-item"},Ee={class:"obj-rotation"},ge={class:"coord-item"},ye={class:"coord-item"},Ne={class:"coord-item"},Le={class:"world"},Re={class:"coord-line"},je={class:"coord-text"},Ce={class:"world-position-item"},De={class:"world-position-item"},Se={class:"world-position-item"},Ue={class:"coord-line"},Fe={class:"coord-text"},$e={class:"world-rotation-item"},Me={class:"world-rotation-item"},xe={class:"world-rotation-item"},Je=e.defineComponent({__name:"workpieceTreePanel",props:{model:{},maxExpandCount:{default:10},expandStrategy:{default:"breadth"}},emits:["nodeClick","visibleChange","updatePosition","updateRotation"],setup(b,{emit:i}){const o=b,l=i,m=e.ref([]),r=e.ref({}),_=(t,s=0)=>{const w=[];return Array.isArray(t)&&(t==null?void 0:t.length)>0&&t.forEach(n=>{if(!(n!=null&&n.isMesh)){const y={name:n==null?void 0:n.name,label:(n==null?void 0:n.name)||(n==null?void 0:n.type),show:!0,level:s+1,isPenultimate:!1,type:n==null?void 0:n.type,id:n==null?void 0:n.id,limit:(n==null?void 0:n.limit)??"",children:_(n==null?void 0:n.children,s+1),path:n==null?void 0:n.name};w.push(y)}}),w},p=t=>t?[{name:t==null?void 0:t.name,label:(t==null?void 0:t.name)||(t==null?void 0:t.type),show:!0,level:1,isPenultimate:!1,type:t==null?void 0:t.type,id:t==null?void 0:t.id,limit:(t==null?void 0:t.limit)??"",children:_(t==null?void 0:t.children,1),path:t==null?void 0:t.name}]:[],g=(t,s)=>{const w=[],n=[...t];for(;n.length>0&&w.length<s;){const y=n.shift();y.children&&y.children.length>0&&(w.push(y.id),n.push(...y.children))}return w},h=(t,s)=>{const w=[];return t.forEach(n=>{if(n.children&&n.children.length>0){w.push(n.id);const y=n.children.filter(j=>j.children&&j.children.length>0).slice(0,s).map(j=>j.id);w.push(...y)}}),w.slice(0,s+1)};e.computed(()=>!m.value||m.value.length===0?[]:o.expandStrategy==="firstLevel"?h(m.value,o.maxExpandCount):g(m.value,o.maxExpandCount));const c=t=>t?parseFloat(t.toFixed(3)):0,f=t=>t?parseFloat(t.toFixed(1)):0,V=(t,s)=>{l("updatePosition",{obj:o.model,axis:s,value:(t==null?void 0:t.toString())||"0"})},a=(t,s)=>{l("updateRotation",{obj:o.model,axis:s,value:(t==null?void 0:t.toString())||"0"})},d=t=>{l("visibleChange",t)},E=e.computed(()=>o!=null&&o.model?p(o.model):[]),R=e.computed(()=>{var t,s;return((t=o==null?void 0:o.model)==null?void 0:t.name)||((s=o==null?void 0:o.model)==null?void 0:s.type)}),v=e.computed(()=>{var t;return(t=o==null?void 0:o.model)==null?void 0:t.type}),u=e.computed(()=>{var t;return(t=o==null?void 0:o.model)==null?void 0:t.visible});return e.watch(()=>o.model,()=>{o.model&&(r.value=D.getObject3DData(o.model))},{deep:!0,immediate:!0}),e.watch(E,t=>{m.value=JSON.parse(JSON.stringify(t))},{immediate:!0}),(t,s)=>{var j,U,F,$,M,x,J,O,k,T,P,z,B,A,q,I,W,G,X,Y,Z,K,H,Q;const w=e.resolveComponent("el-divider"),n=e.resolveComponent("el-switch"),y=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",ue,[e.createVNode(w,null,{default:e.withCtx(()=>s[6]||(s[6]=[e.createTextVNode("对象")])),_:1,__:[6]}),e.createElementVNode("div",me,[o.model?(e.openBlock(),e.createElementBlock("div",pe,[e.createElementVNode("div",{class:"obj-name",title:R.value},e.toDisplayString(R.value),9,ve),e.createElementVNode("div",{class:"obj-type",title:v.value},"["+e.toDisplayString(v.value)+"]",9,fe)])):(e.openBlock(),e.createElementBlock("div",be,"空")),e.createVNode(n,{"model-value":u.value,onChange:d},null,8,["model-value"])]),e.createVNode(w,null,{default:e.withCtx(()=>s[7]||(s[7]=[e.createTextVNode("相对位置")])),_:1,__:[7]}),e.createElementVNode("div",we,[e.createElementVNode("div",_e,[s[8]||(s[8]=e.createElementVNode("span",{class:"axis-label"},"X",-1)),e.createVNode(y,{"model-value":c((U=(j=r.value)==null?void 0:j.position)==null?void 0:U.x),onChange:s[0]||(s[0]=L=>V(L,"x")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",he,[s[9]||(s[9]=e.createElementVNode("span",{class:"axis-label"},"Y",-1)),e.createVNode(y,{"model-value":c(($=(F=r.value)==null?void 0:F.position)==null?void 0:$.y),onChange:s[1]||(s[1]=L=>V(L,"y")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Ve,[s[10]||(s[10]=e.createElementVNode("span",{class:"axis-label"},"Z",-1)),e.createVNode(y,{"model-value":c((x=(M=r.value)==null?void 0:M.position)==null?void 0:x.z),onChange:s[2]||(s[2]=L=>V(L,"z")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])])]),e.createVNode(w,null,{default:e.withCtx(()=>s[11]||(s[11]=[e.createTextVNode("相对旋转")])),_:1,__:[11]}),e.createElementVNode("div",Ee,[e.createElementVNode("div",ge,[s[12]||(s[12]=e.createElementVNode("span",{class:"axis-label"},"X°",-1)),e.createVNode(y,{"model-value":f((O=(J=r.value)==null?void 0:J.rotation)==null?void 0:O.x),onChange:s[3]||(s[3]=L=>a(L,"x")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",ye,[s[13]||(s[13]=e.createElementVNode("span",{class:"axis-label"},"Y°",-1)),e.createVNode(y,{"model-value":f((T=(k=r.value)==null?void 0:k.rotation)==null?void 0:T.y),onChange:s[4]||(s[4]=L=>a(L,"y")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Ne,[s[14]||(s[14]=e.createElementVNode("span",{class:"axis-label"},"Z°",-1)),e.createVNode(y,{"model-value":f((z=(P=r.value)==null?void 0:P.rotation)==null?void 0:z.z),onChange:s[5]||(s[5]=L=>a(L,"z")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])])]),e.createVNode(w,null,{default:e.withCtx(()=>s[15]||(s[15]=[e.createTextVNode("世界信息")])),_:1,__:[15]}),e.createElementVNode("div",Le,[e.createElementVNode("div",Re,[s[16]||(s[16]=e.createElementVNode("span",{class:"coord-label"},"世界位置:",-1)),e.createElementVNode("span",je,[e.createElementVNode("div",Ce,e.toDisplayString(c((A=(B=r.value)==null?void 0:B.worldPosition)==null?void 0:A.x))+", ",1),e.createElementVNode("div",De,e.toDisplayString(c((I=(q=r.value)==null?void 0:q.worldPosition)==null?void 0:I.y))+", ",1),e.createElementVNode("div",Se,e.toDisplayString(c((G=(W=r.value)==null?void 0:W.worldPosition)==null?void 0:G.z)),1)])]),e.createElementVNode("div",Ue,[s[17]||(s[17]=e.createElementVNode("span",{class:"coord-label"},"世界旋转:",-1)),e.createElementVNode("span",Fe,[e.createElementVNode("div",$e,e.toDisplayString(f((Y=(X=r.value)==null?void 0:X.worldRotation)==null?void 0:Y.x))+"°, ",1),e.createElementVNode("div",Me,e.toDisplayString(f((K=(Z=r.value)==null?void 0:Z.worldRotation)==null?void 0:K.y))+"°, ",1),e.createElementVNode("div",xe,e.toDisplayString(f((Q=(H=r.value)==null?void 0:H.worldRotation)==null?void 0:Q.z))+"° ",1)])])])])}}}),Oe=se._export_sfc(Je,[["__scopeId","data-v-00d48931"]]);exports.URDFRobotController=de;exports.WorkpieceTreePanel=Oe;exports.useRaycaster=ce;exports.useUrdfLoader=ae;