ss-component-new 1.2.60 → 1.2.62

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 (108) hide show
  1. package/dist/{MTLLoader-gdzQR_Hk.js → MTLLoader-6dpEXEoM.js} +1 -1
  2. package/dist/{MTLLoader-Bd8gswVO.cjs → MTLLoader-DVChBUrC.cjs} +1 -1
  3. package/dist/{OrbitControls-DrQG0WwG.js → OrbitControls-A_plVV3e.js} +1 -1
  4. package/dist/{OrbitControls-BDr3JwU7.cjs → OrbitControls-xWQZ-wvG.cjs} +1 -1
  5. package/dist/{animationData-BebPFu1o.js → animationData-BEBKknNp.js} +9 -9
  6. package/dist/{animationData-DZnytjR7.cjs → animationData-BIfCWFVI.cjs} +1 -1
  7. package/dist/{array-mkPvdkqz.js → array-Cq7rTgXG.js} +2 -2
  8. package/dist/{array-CsVIMexm.cjs → array-b4FP8aZn.cjs} +1 -1
  9. package/dist/{iconfont-sA0TqvpZ.js → iconfont-1_Xg-HNl.js} +2 -2
  10. package/dist/{iconfont-B2jKfn1c.cjs → iconfont-Brcrml_b.cjs} +1 -1
  11. package/dist/{index-BdoWr55z.js → index-2MJjXq7j.js} +22 -19
  12. package/dist/{index-DunWx7gk.js → index-6F8WEiYt.js} +3 -3
  13. package/dist/{index-BawiQHQM.js → index-6J4fvuHJ.js} +5 -5
  14. package/dist/{index-BAgQCn1y.cjs → index-B3s_4mdp.cjs} +1 -1
  15. package/dist/{index-BLXYg9Gs.js → index-B9XXiADi.js} +5 -5
  16. package/dist/index-BGECN58Q.cjs +1 -0
  17. package/dist/{index-CUqOGOM4.js → index-BXG4Yb5F.js} +1 -1
  18. package/dist/{index-BIOzO44u.js → index-BfE8W0rM.js} +1 -1
  19. package/dist/{index-6A1xf0Gs.cjs → index-Bi-Hgx5I.cjs} +1 -1
  20. package/dist/{index-DjQZE_pv.cjs → index-Bme2fgY2.cjs} +1 -1
  21. package/dist/{index-B-zqezDR.cjs → index-Br_V6DEt.cjs} +1 -1
  22. package/dist/{index-4M7aervZ.cjs → index-Bs0IeOGt.cjs} +1 -1
  23. package/dist/{index-DVNrIedZ.js → index-C6SCoM0U.js} +1 -1
  24. package/dist/{index-Duh5yc_7.js → index-CDwjVO-f.js} +11 -11
  25. package/dist/{index-D_FAvCkR.cjs → index-CKGcC7Sl.cjs} +1 -1
  26. package/dist/{index-Do_4Y2BA.js → index-CM9d4w9b.js} +935 -924
  27. package/dist/{index-BcGarjC7.js → index-CMSFCx0H.js} +2 -2
  28. package/dist/{index-fv_bHYEK.cjs → index-CORFgvAn.cjs} +1 -1
  29. package/dist/{index-DI5DRRI8.cjs → index-CQPp7ebN.cjs} +1 -1
  30. package/dist/{index-CK_bms-m.js → index-CZ9IolXA.js} +245 -243
  31. package/dist/{index-CaubJFHG.cjs → index-CmjpPvm7.cjs} +1 -1
  32. package/dist/{index-DgW_swZz.cjs → index-CqCzv-z2.cjs} +1 -1
  33. package/dist/{index-Dq9ppmM1.js → index-Cqh1Z_rw.js} +4 -4
  34. package/dist/{index-DXiQ5JKb.js → index-CvYPprNL.js} +1128 -1150
  35. package/dist/{index-CX2C-kjD.cjs → index-CxUHJyzF.cjs} +1 -1
  36. package/dist/{index-ajVsMnUs.js → index-CyuAoOEv.js} +9 -9
  37. package/dist/{index-DZ3LdxA8.cjs → index-D3JrrrRS.cjs} +1 -1
  38. package/dist/{index-CBHRkOa4.js → index-D9Aj2jkk.js} +1 -1
  39. package/dist/{index-C6nEcr6G.js → index-DMRIbCVi.js} +1 -1
  40. package/dist/{index-BkJkmkcq.cjs → index-DN3lLfOK.cjs} +1 -1
  41. package/dist/{index-CF3dfQ01.cjs → index-DNbT4lhP.cjs} +1 -1
  42. package/dist/{index-DA4aTMB5.js → index-DO71W01m.js} +1 -1
  43. package/dist/{index-YhC-PbE3.js → index-DOF9o3os.js} +1 -1
  44. package/dist/{index-ChdWnuTS.cjs → index-DUHVLIj4.cjs} +1 -1
  45. package/dist/{index-CRvxI1hr.cjs → index-DVFgpAHw.cjs} +1 -1
  46. package/dist/{index-BoVvgAUF.cjs → index-DYTa3_UA.cjs} +1 -1
  47. package/dist/index-Dac7flbp.cjs +1 -0
  48. package/dist/index-DaeE5po7.cjs +1 -0
  49. package/dist/{index-DwblLa_P.cjs → index-DcP7YN6o.cjs} +1 -1
  50. package/dist/{index-BDOF1BPC.cjs → index-DmCKmSZ8.cjs} +1 -1
  51. package/dist/{index-CF9id9ro.cjs → index-DoFO6pNf.cjs} +13 -13
  52. package/dist/{index-Ce_gZ72y.js → index-DpnFkInY.js} +119 -115
  53. package/dist/{index-vPR31-Zk.js → index-DwyFMS6t.js} +2 -2
  54. package/dist/{index-MHgc1J83.cjs → index-DyjHw7Aq.cjs} +1 -1
  55. package/dist/{index-DmLuog-V.js → index-ELz-W-bk.js} +3 -3
  56. package/dist/{index-GbPoL1UR.js → index-Ia_qBF1W.js} +2 -2
  57. package/dist/{index-RhIBaFyU.cjs → index-RZNNLVDX.cjs} +1 -1
  58. package/dist/{index-3F5KjCbv.cjs → index-TzEEZML5.cjs} +1 -1
  59. package/dist/{index-DG0upY6_.js → index-bYz-38Pg.js} +2 -2
  60. package/dist/{index-DNnfnoYc.cjs → index-bkkSLeCW.cjs} +1 -1
  61. package/dist/{index-BhEeRp0f.js → index-cak-MWxh.js} +2 -2
  62. package/dist/{index-DLiM284R.cjs → index-d6OMvbbf.cjs} +1 -1
  63. package/dist/{index-BIHEqwHC.js → index-eaVFuuQY.js} +1 -1
  64. package/dist/{index-DuXxVHLY.js → index-i5E9fwgK.js} +2 -2
  65. package/dist/{index-ClCw6ykP.js → index-mexa9g7P.js} +2 -2
  66. package/dist/{index-BqPYebkC.js → index-yCgi-cE_.js} +2 -2
  67. package/dist/index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-53RGRguQ.cjs +37 -0
  68. package/dist/{index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-DVp62_ZP.js → index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-DE66pEiw.js} +13674 -13601
  69. package/dist/{index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CHavLvPk.cjs → index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-6dwbeVvZ.cjs} +32 -32
  70. package/dist/{index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-BL1cikD3.js → index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CR3BgnHp.js} +1077 -1072
  71. package/dist/index.vue_vue_type_style_index_0_scoped_46e2f5ea_lang-C7mPL9em.cjs +1 -0
  72. package/dist/index.vue_vue_type_style_index_0_scoped_46e2f5ea_lang-lQ5Z8rzq.js +256 -0
  73. package/dist/{index.vue_vue_type_style_index_1_lang-CChX6Zmx.js → index.vue_vue_type_style_index_1_lang-B2AZ-uBp.js} +4 -4
  74. package/dist/{index.vue_vue_type_style_index_1_lang-B5nfyDvl.cjs → index.vue_vue_type_style_index_1_lang-B4xPEmq7.cjs} +1 -1
  75. package/dist/{main-CIXVap1M.js → main-BV2OQjAQ.js} +4 -4
  76. package/dist/{main-e1Q2-l7w.cjs → main-CBFaoDu5.cjs} +1 -1
  77. package/dist/obj/model.mtl +42 -0
  78. package/dist/obj/model.obj +26110 -0
  79. package/dist/ss-component.cjs +1 -1
  80. package/dist/ss-component.css +2 -2
  81. package/dist/ss-component.js +10 -10
  82. package/dist/ss-component2.cjs +1 -1
  83. package/dist/ss-component2.js +11 -11
  84. package/dist/{threeModel-cKQrxO3d.js → threeModel-aUrTN1iR.js} +4 -4
  85. package/dist/{threeModel-UBx8eTMe.cjs → threeModel-gEf2z_O_.cjs} +1 -1
  86. package/dist/{threePreview-D35fdkMP.js → threePreview-BlLP3fdq.js} +3 -3
  87. package/dist/{threePreview-BAJ00HhJ.cjs → threePreview-DP22q4N7.cjs} +1 -1
  88. package/dist/{threeSceneView-BZenUkiZ.js → threeSceneView-VUC2kd3Y.js} +11 -11
  89. package/dist/{threeSceneView-OEime_CV.cjs → threeSceneView-yEuULwHw.cjs} +1 -1
  90. package/dist/{threeSceneViewForCPMPIP-zeiEQd6_.js → threeSceneViewForCPMPIP-BnzoymFs.js} +9 -9
  91. package/dist/{threeSceneViewForCPMPIP-C044dPvs.cjs → threeSceneViewForCPMPIP-ClXb0-Vx.cjs} +1 -1
  92. package/dist/{threeTrackPathView-CHosxM5O.js → threeTrackPathView-BfEMI8TE.js} +4 -4
  93. package/dist/{threeTrackPathView-DdZ_W87m.cjs → threeTrackPathView-CNZxWCSD.cjs} +1 -1
  94. package/dist/{threeViewerHost-Co0U6v_d.js → threeViewerHost-BPoG1mR3.js} +2091 -2127
  95. package/dist/{threeViewerHost-Ba-SeQ6m.cjs → threeViewerHost-Yk0yIs7L.cjs} +36 -36
  96. package/dist/{urdfTree-DkWqLWnt.cjs → urdfTree-Br4ILtBO.cjs} +1 -1
  97. package/dist/{urdfTree-CtpNr38F.js → urdfTree-W_JRFTfP.js} +1 -1
  98. package/dist/{workpieceTreePanel-DimwJSXC.js → workpieceTreePanel-B9KXsBHy.js} +5 -5
  99. package/dist/{workpieceTreePanel-BPsnvq9b.cjs → workpieceTreePanel-CCTEZMHn.cjs} +1 -1
  100. package/package.json +1 -1
  101. package/public/obj/model.mtl +42 -0
  102. package/public/obj/model.obj +26110 -0
  103. package/dist/index-Ch_Cm24f.cjs +0 -1
  104. package/dist/index-Ck3lmJpc.cjs +0 -1
  105. package/dist/index-aTpWvup6.cjs +0 -1
  106. package/dist/index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-DF-onWE-.cjs +0 -37
  107. package/dist/index.vue_vue_type_style_index_0_scoped_b00cbae2_lang-B60JZATD.js +0 -195
  108. package/dist/index.vue_vue_type_style_index_0_scoped_b00cbae2_lang-zIOhigw2.cjs +0 -1
@@ -1 +1 @@
1
- "use strict";const t=require("vue"),x=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CHavLvPk.cjs"),J=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),E=(o,i)=>{if(!i)return null;const l=o.joints[i];return l||null},F=(o,i)=>{if(!i)return null;const l=E(o,i);if(!l)return null;let u=null;return l.traverse(c=>{c instanceof x.Mesh&&!u&&(u=c)}),u},N=(o,i)=>{if(!i)return null;const l=o.links[i];return l||null},L=(o,i)=>{if(!i)return null;const l=N(o,i);if(!l)return null;let u=null;return l.traverse(c=>{c instanceof x.Mesh&&!u&&(u=c)}),u},V=o=>{const i=o.joints;return Object.values(i)},M=o=>V(o).filter(u=>u.jointType!=="fixed"),w=o=>{const i=o.links;return Object.keys(i)},B={class:"panel-content"},b={key:0,class:"joints-list"},I={class:"joint-info-row"},S={class:"joint-left"},C={class:"joint-name"},D={class:"joint-range"},P={class:"joint-type"},T={key:0,class:"joint-control-row"},A={class:"slider-container"},U=["min","max","value","onInput"],R={class:"value-display"},q={class:"joint-value"},O={class:"unit"},K={key:1,class:"empty-state"},$=t.defineComponent({__name:"urdfJointPanel",props:{model:{}},setup(o,{expose:i}){const l=o,u=t.ref([]),c=t.ref(null),f=(s,p=!1)=>s==="revolute"?p?Math.PI:-Math.PI:s==="prismatic"?p?1:-1:0,_=s=>{if(!s||!s.joints)return console.warn("URDF模型无效或不包含关节信息"),[];const p=[];return V(s).forEach(r=>{var n,d;if(r.jointType==="fixed")return;let a={lower:((n=r.limit)==null?void 0:n.lower)??f(r.jointType,!1),upper:((d=r.limit)==null?void 0:d.upper)??f(r.jointType,!0)};r.jointType==="continuous"&&(a={lower:-10*Math.PI,upper:10*Math.PI}),p.push({name:r.name,type:r.jointType||"unknown",limit:a,currentValue:r.angle||0,urdfJoint:r})}),p},m=(s,p)=>{var n;const e=u.value.find(d=>d.name===s);if(!e)return;const r=parseFloat(p),a=Math.max(e.limit.lower,Math.min(e.limit.upper,r));e.currentValue=a,(n=l.model)!=null&&n.setJointValue?l.model.setJointValue(s,a):e.urdfJoint.setJointValue(a)},v=()=>{u.value.forEach(s=>{(s.type==="revolute"||s.type==="continuous"||s.type==="prismatic")&&m(s.name,0)})},y=()=>{l.model&&u.value.forEach(s=>{s.urdfJoint.angle!==void 0&&s.currentValue!==s.urdfJoint.angle&&(s.currentValue=s.urdfJoint.angle)})},g=()=>{const s=()=>{y(),c.value=requestAnimationFrame(s)};s()},k=()=>{c.value&&(cancelAnimationFrame(c.value),c.value=null)};return t.watch(()=>l.model,s=>{s?u.value=_(s):u.value=[]},{immediate:!0}),t.onMounted(()=>{g()}),t.onUnmounted(()=>{k()}),i({resetAllJoints:v}),(s,p)=>(t.openBlock(),t.createElementBlock("div",B,[u.value.length>0?(t.openBlock(),t.createElementBlock("div",b,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(u.value,e=>(t.openBlock(),t.createElementBlock("div",{key:e.name,class:"joint-item"},[t.createElementVNode("div",I,[t.createElementVNode("div",S,[t.createElementVNode("span",C,t.toDisplayString(e.name),1),t.createElementVNode("span",D," ["+t.toDisplayString(e.limit.lower.toFixed(2))+", "+t.toDisplayString(e.limit.upper.toFixed(2))+"] ",1)]),t.createElementVNode("span",P,t.toDisplayString(e.type),1)]),e.type==="revolute"||e.type==="prismatic"||e.type==="continuous"?(t.openBlock(),t.createElementBlock("div",T,[t.createElementVNode("div",A,[t.createElementVNode("input",{type:"range",min:e.limit.lower,max:e.limit.upper,step:"0.001",value:e.currentValue,onInput:r=>m(e.name,r.target.value),class:"joint-slider"},null,40,U)]),t.createElementVNode("div",R,[t.createElementVNode("span",q,t.toDisplayString(e.currentValue?Number(e.currentValue).toFixed(3):"0.000"),1),t.createElementVNode("span",O,t.toDisplayString(e.type==="prismatic"?"m":"rad"),1)])])):t.createCommentVNode("",!0)]))),128))])):(t.openBlock(),t.createElementBlock("div",K,p[0]||(p[0]=[t.createElementVNode("p",null,"未检测到可控制的关节",-1)])))]))}}),H=J._export_sfc($,[["__scopeId","data-v-750b831d"]]),z={class:"panel-content"},G="id",Q={__name:"urdfTree",props:{model:Object,maxExpandCount:{type:Number,default:10},expandStrategy:{type:String,default:"breadth",validator:o=>["breadth","firstLevel"].includes(o)},extraNodes:{type:Array,default:[]}},emits:["nodeClick"],setup(o,{emit:i}){const l=o,u=i,c=t.ref([]),f={children:"children",label:"label"},_=e=>{u("nodeClick",e)},m=(e,r=0)=>{const a=[];return Array.isArray(e)&&(e==null?void 0:e.length)>0&&e.forEach(n=>{if(!(n!=null&&n.isMesh)&&((n==null?void 0:n.type)==="URDFJoint"||(n==null?void 0:n.type)==="URDFLink")){const d={name:n==null?void 0:n.name,label:n==null?void 0:n.name,show:!0,level:r+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:m(n==null?void 0:n.children,r+1),path:n==null?void 0:n.name};a.push(d)}}),a},v=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}]:[],y=(e,r)=>{const a=[],n=[...e];for(;n.length>0&&a.length<r;){const d=n.shift();d.children&&d.children.length>0&&(a.push(d.id),n.push(...d.children))}return a},g=(e,r)=>{const a=[];return e.forEach(n=>{if(n.children&&n.children.length>0){a.push(n.id);const d=n.children.filter(h=>h.children&&h.children.length>0).slice(0,r).map(h=>h.id);a.push(...d)}}),a.slice(0,r+1)},k=t.computed(()=>!c.value||c.value.length===0?[]:l.expandStrategy==="firstLevel"?g(c.value,l.maxExpandCount):y(c.value,l.maxExpandCount)),s=t.computed(()=>[{name:"场景",label:"场景",show:!0,level:1,isPenultimate:!1,type:"场景",id:"场景",children:l!=null&&l.model?v(l.model):[],path:"场景"}]),p=()=>{const e=l.extraNodes||[],r=e==null?void 0:e.map(a=>({...a,level:0}));c.value.push(...r)};return t.watch(s,e=>{c.value=JSON.parse(JSON.stringify(e)),p()},{immediate:!0}),(e,r)=>{const a=t.resolveComponent("el-tree");return t.openBlock(),t.createElementBlock("div",z,[t.createVNode(a,{data:c.value,props:f,"default-expanded-keys":k.value,"node-key":G,onNodeClick:_},null,8,["data","default-expanded-keys"])])}}},W=J._export_sfc(Q,[["__scopeId","data-v-7f54bf51"]]);exports.JointPanel=H;exports.UrdfTree=W;exports.getAllLinkName=w;exports.getMeshFromJoint=F;exports.getMeshFromLink=L;exports.getNonFixedJoints=M;exports.getTargetJoint=E;
1
+ "use strict";const t=require("vue"),x=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-6dwbeVvZ.cjs"),J=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),E=(o,i)=>{if(!i)return null;const l=o.joints[i];return l||null},F=(o,i)=>{if(!i)return null;const l=E(o,i);if(!l)return null;let u=null;return l.traverse(c=>{c instanceof x.Mesh&&!u&&(u=c)}),u},N=(o,i)=>{if(!i)return null;const l=o.links[i];return l||null},L=(o,i)=>{if(!i)return null;const l=N(o,i);if(!l)return null;let u=null;return l.traverse(c=>{c instanceof x.Mesh&&!u&&(u=c)}),u},V=o=>{const i=o.joints;return Object.values(i)},M=o=>V(o).filter(u=>u.jointType!=="fixed"),w=o=>{const i=o.links;return Object.keys(i)},B={class:"panel-content"},b={key:0,class:"joints-list"},I={class:"joint-info-row"},S={class:"joint-left"},C={class:"joint-name"},D={class:"joint-range"},P={class:"joint-type"},T={key:0,class:"joint-control-row"},A={class:"slider-container"},U=["min","max","value","onInput"],R={class:"value-display"},q={class:"joint-value"},O={class:"unit"},K={key:1,class:"empty-state"},$=t.defineComponent({__name:"urdfJointPanel",props:{model:{}},setup(o,{expose:i}){const l=o,u=t.ref([]),c=t.ref(null),f=(s,p=!1)=>s==="revolute"?p?Math.PI:-Math.PI:s==="prismatic"?p?1:-1:0,_=s=>{if(!s||!s.joints)return console.warn("URDF模型无效或不包含关节信息"),[];const p=[];return V(s).forEach(r=>{var n,d;if(r.jointType==="fixed")return;let a={lower:((n=r.limit)==null?void 0:n.lower)??f(r.jointType,!1),upper:((d=r.limit)==null?void 0:d.upper)??f(r.jointType,!0)};r.jointType==="continuous"&&(a={lower:-10*Math.PI,upper:10*Math.PI}),p.push({name:r.name,type:r.jointType||"unknown",limit:a,currentValue:r.angle||0,urdfJoint:r})}),p},m=(s,p)=>{var n;const e=u.value.find(d=>d.name===s);if(!e)return;const r=parseFloat(p),a=Math.max(e.limit.lower,Math.min(e.limit.upper,r));e.currentValue=a,(n=l.model)!=null&&n.setJointValue?l.model.setJointValue(s,a):e.urdfJoint.setJointValue(a)},v=()=>{u.value.forEach(s=>{(s.type==="revolute"||s.type==="continuous"||s.type==="prismatic")&&m(s.name,0)})},y=()=>{l.model&&u.value.forEach(s=>{s.urdfJoint.angle!==void 0&&s.currentValue!==s.urdfJoint.angle&&(s.currentValue=s.urdfJoint.angle)})},g=()=>{const s=()=>{y(),c.value=requestAnimationFrame(s)};s()},k=()=>{c.value&&(cancelAnimationFrame(c.value),c.value=null)};return t.watch(()=>l.model,s=>{s?u.value=_(s):u.value=[]},{immediate:!0}),t.onMounted(()=>{g()}),t.onUnmounted(()=>{k()}),i({resetAllJoints:v}),(s,p)=>(t.openBlock(),t.createElementBlock("div",B,[u.value.length>0?(t.openBlock(),t.createElementBlock("div",b,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(u.value,e=>(t.openBlock(),t.createElementBlock("div",{key:e.name,class:"joint-item"},[t.createElementVNode("div",I,[t.createElementVNode("div",S,[t.createElementVNode("span",C,t.toDisplayString(e.name),1),t.createElementVNode("span",D," ["+t.toDisplayString(e.limit.lower.toFixed(2))+", "+t.toDisplayString(e.limit.upper.toFixed(2))+"] ",1)]),t.createElementVNode("span",P,t.toDisplayString(e.type),1)]),e.type==="revolute"||e.type==="prismatic"||e.type==="continuous"?(t.openBlock(),t.createElementBlock("div",T,[t.createElementVNode("div",A,[t.createElementVNode("input",{type:"range",min:e.limit.lower,max:e.limit.upper,step:"0.001",value:e.currentValue,onInput:r=>m(e.name,r.target.value),class:"joint-slider"},null,40,U)]),t.createElementVNode("div",R,[t.createElementVNode("span",q,t.toDisplayString(e.currentValue?Number(e.currentValue).toFixed(3):"0.000"),1),t.createElementVNode("span",O,t.toDisplayString(e.type==="prismatic"?"m":"rad"),1)])])):t.createCommentVNode("",!0)]))),128))])):(t.openBlock(),t.createElementBlock("div",K,p[0]||(p[0]=[t.createElementVNode("p",null,"未检测到可控制的关节",-1)])))]))}}),H=J._export_sfc($,[["__scopeId","data-v-750b831d"]]),z={class:"panel-content"},G="id",Q={__name:"urdfTree",props:{model:Object,maxExpandCount:{type:Number,default:10},expandStrategy:{type:String,default:"breadth",validator:o=>["breadth","firstLevel"].includes(o)},extraNodes:{type:Array,default:[]}},emits:["nodeClick"],setup(o,{emit:i}){const l=o,u=i,c=t.ref([]),f={children:"children",label:"label"},_=e=>{u("nodeClick",e)},m=(e,r=0)=>{const a=[];return Array.isArray(e)&&(e==null?void 0:e.length)>0&&e.forEach(n=>{if(!(n!=null&&n.isMesh)&&((n==null?void 0:n.type)==="URDFJoint"||(n==null?void 0:n.type)==="URDFLink")){const d={name:n==null?void 0:n.name,label:n==null?void 0:n.name,show:!0,level:r+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:m(n==null?void 0:n.children,r+1),path:n==null?void 0:n.name};a.push(d)}}),a},v=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}]:[],y=(e,r)=>{const a=[],n=[...e];for(;n.length>0&&a.length<r;){const d=n.shift();d.children&&d.children.length>0&&(a.push(d.id),n.push(...d.children))}return a},g=(e,r)=>{const a=[];return e.forEach(n=>{if(n.children&&n.children.length>0){a.push(n.id);const d=n.children.filter(h=>h.children&&h.children.length>0).slice(0,r).map(h=>h.id);a.push(...d)}}),a.slice(0,r+1)},k=t.computed(()=>!c.value||c.value.length===0?[]:l.expandStrategy==="firstLevel"?g(c.value,l.maxExpandCount):y(c.value,l.maxExpandCount)),s=t.computed(()=>[{name:"场景",label:"场景",show:!0,level:1,isPenultimate:!1,type:"场景",id:"场景",children:l!=null&&l.model?v(l.model):[],path:"场景"}]),p=()=>{const e=l.extraNodes||[],r=e==null?void 0:e.map(a=>({...a,level:0}));c.value.push(...r)};return t.watch(s,e=>{c.value=JSON.parse(JSON.stringify(e)),p()},{immediate:!0}),(e,r)=>{const a=t.resolveComponent("el-tree");return t.openBlock(),t.createElementBlock("div",z,[t.createVNode(a,{data:c.value,props:f,"default-expanded-keys":k.value,"node-key":G,onNodeClick:_},null,8,["data","default-expanded-keys"])])}}},W=J._export_sfc(Q,[["__scopeId","data-v-7f54bf51"]]);exports.JointPanel=H;exports.UrdfTree=W;exports.getAllLinkName=w;exports.getMeshFromJoint=F;exports.getMeshFromLink=L;exports.getNonFixedJoints=M;exports.getTargetJoint=E;
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as I, ref as L, watch as b, onMounted as C, onUnmounted as P, createElementBlock as m, openBlock as f, Fragment as T, renderList as N, createElementVNode as p, createCommentVNode as U, toDisplayString as h, computed as M, resolveComponent as A, createVNode as S } from "vue";
2
- import { z as V } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-BL1cikD3.js";
2
+ import { z as V } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CR3BgnHp.js";
3
3
  import { _ as w } from "./_plugin-vue_export-helper-CHgC5LLL.js";
4
4
  const D = (i, l) => {
5
5
  if (!l)
@@ -1,12 +1,12 @@
1
1
  var ce = Object.defineProperty;
2
2
  var de = (b, l, t) => l in b ? ce(b, l, { enumerable: !0, configurable: !0, writable: !0, value: t }) : b[l] = t;
3
3
  var J = (b, l, t) => de(b, typeof l != "symbol" ? l + "" : l, t);
4
- import { U as me } from "./index.vue_vue_type_style_index_1_lang-CChX6Zmx.js";
5
- import { S as ve, M as pe, O as fe } from "./MTLLoader-gdzQR_Hk.js";
6
- import { j as re, k as O } from "./threeViewerHost-Co0U6v_d.js";
7
- import { bB as be, U as E, J as we, z as he, B as _e, bC as ge, ab as je, V as ye } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-BL1cikD3.js";
4
+ import { U as me } from "./index.vue_vue_type_style_index_1_lang-B2AZ-uBp.js";
5
+ import { S as ve, M as pe, O as fe } from "./MTLLoader-6dpEXEoM.js";
6
+ import { i as re, j as O } from "./threeViewerHost-BPoG1mR3.js";
7
+ import { bB as be, U as E, J as we, z as he, B as _e, bC as ge, ab as je, V as ye } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CR3BgnHp.js";
8
8
  import { ref as z, defineComponent as Le, computed as M, watch as ue, resolveComponent as x, createElementBlock as k, openBlock as V, createVNode as U, createElementVNode as c, withCtx as F, createTextVNode as D, toDisplayString as $ } from "vue";
9
- import { c as Re, e as Ue, g as Ce } from "./iconfont-sA0TqvpZ.js";
9
+ import { c as Re, e as Ue, g as Ce } from "./iconfont-1_Xg-HNl.js";
10
10
  import { _ as $e } from "./_plugin-vue_export-helper-CHgC5LLL.js";
11
11
  const Se = "http://222.92.178.198:60000/chfs/shared/Insofrobot/urdf";
12
12
  function Me(b) {
@@ -1 +1 @@
1
- "use strict";var te=Object.defineProperty;var oe=(b,i,o)=>i in b?te(b,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):b[i]=o;var S=(b,i,o)=>oe(b,typeof i!="symbol"?i+"":i,o);const se=require("./index.vue_vue_type_style_index_1_lang-B5nfyDvl.cjs"),U=require("./MTLLoader-Bd8gswVO.cjs"),C=require("./threeViewerHost-Ba-SeQ6m.cjs"),R=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CHavLvPk.cjs"),e=require("vue"),D=require("./iconfont-B2jKfn1c.cjs"),le=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),re="http://222.92.178.198:60000/chfs/shared/Insofrobot/urdf";function ie(b){const{mtlUrl:i,manager:o,resourcePath:l,onLoad:m,onProgress:r,onError:w}=b,p=new U.MTLLoader(o);return l&&p.setResourcePath(l),p.load(i,m,r,w),p}function ne(b){const{objUrl:i,manager:o,materials:l,onLoad:m,onProgress:r,onError:w}=b,p=new U.OBJLoader(o);return l&&p.setMaterials(l),p.load(i,m,r,w),p}function ae(b){const{manager:i,baseFolderUrl:o,onFileProgress:l}=b,m=new se.URDFLoader(i);return m.packages=r=>`${o.endsWith("/")?o:o+"/"}${r}/`,m.loadMeshCb=(r,w,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 u;return(((u=r.split("/").pop())==null?void 0:u.split("?")[0].split("#")[0])??"").replace(/\.[^/.?#]+$/,"")})(),f=`${h}${c}.mtl`,V=a=>{ne({objUrl:r,manager:w,materials:a,onLoad:u=>p(u),onProgress:u=>l==null?void 0:l(r,u==null?void 0:u.loaded,u==null?void 0:u.total),onError:u=>{console.error(`[URDF 资源加载失败,已跳过] 无法加载 OBJ 模型: ${r}`,u),p(new R.Group)}})};ie({mtlUrl:f,manager:w,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 U.STLLoader(w).load(r,c=>{const f=new R.MeshPhongMaterial({color:12303291,shininess:30}),V=new R.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 R.Group)});break}default:console.error(`[URDF 资源加载失败,已跳过] 不支持的网格格式: .${g} (路径: ${r})`),p(new R.Group)}},m}function ce(b,i,o,l){return{loadSceneFromFile:r=>new Promise((w,p)=>{o.value=!0,l.value="正在初始化 URDF 加载器...";let g=0,h=0,c=null;const f=new R.LoadingManager;f.onStart=(a,u,E)=>{g=E||0,h=u||0,l.value=g>0?`开始下载资源: 0 / ${g}`:"开始下载资源...",o.value=!0},f.onProgress=(a,u,E)=>{h=u,g=E;const L=`正在加载 ${u} / ${E} 个文件: ${C.getFilenameFromUrl(a)}`;l.value=L,u===E&&(l.value="资源加载完成,正在处理模型...",setTimeout(()=>{if(c){c.updateMatrixWorld(!0);const v=new R.Box3().setFromObject(c);v.isEmpty()&&console.warn("模型加载完成,但所有可视化网格均加载失败,模型将不可见。"),c.userData.boundingBox=v,c.traverse(d=>{d.isMesh&&(d.castShadow=!0,d.receiveShadow=!0)}),w(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,u,E)=>{const L=C.getFilenameFromUrl(a);let v;E&&E>0?v=`${L}(${C.formatBytes(u)} / ${C.formatBytes(E)})`:u&&u>0?v=`${L}(已下载 ${C.formatBytes(u)})`:v=`${L}`,l.value=`正在下载第 ${h+1} / ${g} 个文件: ${v}`};try{const a=URL.createObjectURL(r);ae({manager:f,baseFolderUrl:re,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 ue(b,i,o,l=["URDFVisual"]){let m=null;const r=e.ref(null),w=new R.Raycaster,p=new R.Vector2,g=new Map;function h(){o.value.forEach(v=>{v.traverse(d=>{l!=null&&l.includes(d.type)&&g.set(d.id,{obj:d,axis:d.axis||new R.Vector3(1,0,0),limits:d.limits})})})}function c(v){r.value&&r.value.obj.traverse(d=>{var t;d.material&&((t=d.material.emissive)==null||t.set(0))}),r.value=v,v.obj.traverse(d=>{var t;d.material&&((t=d.material.emissive)==null||t.set(65280))})}function f(v){const d=b.value.getBoundingClientRect();p.x=(v.clientX-d.left)/d.width*2-1,p.y=-((v.clientY-d.top)/d.height)*2+1,w.setFromCamera(p,m);const t=w.intersectObjects(o.value,!0);if(t.length===0)return;let s=t[0].object,_=null;for(;s;){if(g.has(s.id)){_=g.get(s.id);break}s=s.parent}_&&c(_)}function V(){b.value&&b.value.removeEventListener("click",f,!1)}function a(){const{scene:v,camera:d}=i();m=d,h(),b.value&&b.value.addEventListener("click",f,!1)}function u(v){r.value&&(r.value.obj.visible=v)}function E(v){var s;const{axis:d,value:t}=v;D.updateObjectPosition((s=r.value)==null?void 0:s.obj,d,t)}function L(v){var s;const{axis:d,value:t}=v;D.updateObjectRotation((s=r.value)==null?void 0:s.obj,d,t)}return{initRaycaster:a,dispose:V,selectedObject3D:r,setSelectedObjVisible:u,updatePosition:E,updateRotation:L}}class de{constructor(i){S(this,"robot");S(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(w=>{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,u=i[V];f[V]=a+(u-a)*c}),this.setJointAngles(f),l&&l(h),h<1?requestAnimationFrame(p):w()};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 me={class:"panel-content"},pe={class:"obj"},ve={key:0,class:"obj-base"},fe=["title"],be=["title"],_e={key:1},we={class:"obj-position"},he={class:"coord-item"},Ve={class:"coord-item"},Ee={class:"coord-item"},ge={class:"obj-rotation"},ye={class:"coord-item"},Ne={class:"coord-item"},Le={class:"coord-item"},Re={class:"world"},je={class:"coord-line"},Ce={class:"coord-text"},Se={class:"world-position-item"},De={class:"world-position-item"},Ue={class:"world-position-item"},Fe={class:"coord-line"},$e={class:"coord-text"},xe={class:"world-rotation-item"},Me={class:"world-rotation-item"},Je={class:"world-rotation-item"},Oe=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({}),w=(t,s=0)=>{const _=[];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:w(n==null?void 0:n.children,s+1),path:n==null?void 0:n.name};_.push(y)}}),_},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:w(t==null?void 0:t.children,1),path:t==null?void 0:t.name}]:[],g=(t,s)=>{const _=[],n=[...t];for(;n.length>0&&_.length<s;){const y=n.shift();y.children&&y.children.length>0&&(_.push(y.id),n.push(...y.children))}return _},h=(t,s)=>{const _=[];return t.forEach(n=>{if(n.children&&n.children.length>0){_.push(n.id);const y=n.children.filter(j=>j.children&&j.children.length>0).slice(0,s).map(j=>j.id);_.push(...y)}}),_.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"})},u=t=>{l("visibleChange",t)},E=e.computed(()=>o!=null&&o.model?p(o.model):[]),L=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}),d=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,F,$,x,M,J,O,k,T,P,z,B,q,A,I,W,G,X,Y,Z,H,K,Q,ee;const _=e.resolveComponent("el-divider"),n=e.resolveComponent("el-switch"),y=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",me,[e.createVNode(_,null,{default:e.withCtx(()=>s[6]||(s[6]=[e.createTextVNode("对象")])),_:1,__:[6]}),e.createElementVNode("div",pe,[o.model?(e.openBlock(),e.createElementBlock("div",ve,[e.createElementVNode("div",{class:"obj-name",title:L.value},e.toDisplayString(L.value),9,fe),e.createElementVNode("div",{class:"obj-type",title:v.value},"["+e.toDisplayString(v.value)+"]",9,be)])):(e.openBlock(),e.createElementBlock("div",_e,"空")),e.createVNode(n,{"model-value":d.value,onChange:u},null,8,["model-value"])]),e.createVNode(_,null,{default:e.withCtx(()=>s[7]||(s[7]=[e.createTextVNode("相对位置")])),_:1,__:[7]}),e.createElementVNode("div",we,[e.createElementVNode("div",he,[s[8]||(s[8]=e.createElementVNode("span",{class:"axis-label"},"X",-1)),e.createVNode(y,{"model-value":c((F=(j=r.value)==null?void 0:j.position)==null?void 0:F.x),onChange:s[0]||(s[0]=N=>V(N,"x")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Ve,[s[9]||(s[9]=e.createElementVNode("span",{class:"axis-label"},"Y",-1)),e.createVNode(y,{"model-value":c((x=($=r.value)==null?void 0:$.position)==null?void 0:x.y),onChange:s[1]||(s[1]=N=>V(N,"y")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Ee,[s[10]||(s[10]=e.createElementVNode("span",{class:"axis-label"},"Z",-1)),e.createVNode(y,{"model-value":c((J=(M=r.value)==null?void 0:M.position)==null?void 0:J.z),onChange:s[2]||(s[2]=N=>V(N,"z")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])])]),e.createVNode(_,null,{default:e.withCtx(()=>s[11]||(s[11]=[e.createTextVNode("相对旋转")])),_:1,__:[11]}),e.createElementVNode("div",ge,[e.createElementVNode("div",ye,[s[12]||(s[12]=e.createElementVNode("span",{class:"axis-label"},"X°",-1)),e.createVNode(y,{"model-value":f((k=(O=r.value)==null?void 0:O.rotation)==null?void 0:k.x),onChange:s[3]||(s[3]=N=>a(N,"x")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Ne,[s[13]||(s[13]=e.createElementVNode("span",{class:"axis-label"},"Y°",-1)),e.createVNode(y,{"model-value":f((P=(T=r.value)==null?void 0:T.rotation)==null?void 0:P.y),onChange:s[4]||(s[4]=N=>a(N,"y")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Le,[s[14]||(s[14]=e.createElementVNode("span",{class:"axis-label"},"Z°",-1)),e.createVNode(y,{"model-value":f((B=(z=r.value)==null?void 0:z.rotation)==null?void 0:B.z),onChange:s[5]||(s[5]=N=>a(N,"z")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])])]),e.createVNode(_,null,{default:e.withCtx(()=>s[15]||(s[15]=[e.createTextVNode("世界信息")])),_:1,__:[15]}),e.createElementVNode("div",Re,[e.createElementVNode("div",je,[s[16]||(s[16]=e.createElementVNode("span",{class:"coord-label"},"世界位置:",-1)),e.createElementVNode("span",Ce,[e.createElementVNode("div",Se,e.toDisplayString(c((A=(q=r.value)==null?void 0:q.worldPosition)==null?void 0:A.x))+", ",1),e.createElementVNode("div",De,e.toDisplayString(c((W=(I=r.value)==null?void 0:I.worldPosition)==null?void 0:W.y))+", ",1),e.createElementVNode("div",Ue,e.toDisplayString(c((X=(G=r.value)==null?void 0:G.worldPosition)==null?void 0:X.z)),1)])]),e.createElementVNode("div",Fe,[s[17]||(s[17]=e.createElementVNode("span",{class:"coord-label"},"世界旋转:",-1)),e.createElementVNode("span",$e,[e.createElementVNode("div",xe,e.toDisplayString(f((Z=(Y=r.value)==null?void 0:Y.worldRotation)==null?void 0:Z.x))+"°, ",1),e.createElementVNode("div",Me,e.toDisplayString(f((K=(H=r.value)==null?void 0:H.worldRotation)==null?void 0:K.y))+"°, ",1),e.createElementVNode("div",Je,e.toDisplayString(f((ee=(Q=r.value)==null?void 0:Q.worldRotation)==null?void 0:ee.z))+"° ",1)])])])])}}}),ke=le._export_sfc(Oe,[["__scopeId","data-v-00d48931"]]);exports.URDFRobotController=de;exports.WorkpieceTreePanel=ke;exports.useRaycaster=ue;exports.useUrdfLoader=ce;
1
+ "use strict";var te=Object.defineProperty;var oe=(b,i,o)=>i in b?te(b,i,{enumerable:!0,configurable:!0,writable:!0,value:o}):b[i]=o;var S=(b,i,o)=>oe(b,typeof i!="symbol"?i+"":i,o);const se=require("./index.vue_vue_type_style_index_1_lang-B4xPEmq7.cjs"),U=require("./MTLLoader-DVChBUrC.cjs"),C=require("./threeViewerHost-Yk0yIs7L.cjs"),R=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-6dwbeVvZ.cjs"),e=require("vue"),D=require("./iconfont-Brcrml_b.cjs"),le=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),re="http://222.92.178.198:60000/chfs/shared/Insofrobot/urdf";function ie(b){const{mtlUrl:i,manager:o,resourcePath:l,onLoad:m,onProgress:r,onError:w}=b,p=new U.MTLLoader(o);return l&&p.setResourcePath(l),p.load(i,m,r,w),p}function ne(b){const{objUrl:i,manager:o,materials:l,onLoad:m,onProgress:r,onError:w}=b,p=new U.OBJLoader(o);return l&&p.setMaterials(l),p.load(i,m,r,w),p}function ae(b){const{manager:i,baseFolderUrl:o,onFileProgress:l}=b,m=new se.URDFLoader(i);return m.packages=r=>`${o.endsWith("/")?o:o+"/"}${r}/`,m.loadMeshCb=(r,w,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 u;return(((u=r.split("/").pop())==null?void 0:u.split("?")[0].split("#")[0])??"").replace(/\.[^/.?#]+$/,"")})(),f=`${h}${c}.mtl`,V=a=>{ne({objUrl:r,manager:w,materials:a,onLoad:u=>p(u),onProgress:u=>l==null?void 0:l(r,u==null?void 0:u.loaded,u==null?void 0:u.total),onError:u=>{console.error(`[URDF 资源加载失败,已跳过] 无法加载 OBJ 模型: ${r}`,u),p(new R.Group)}})};ie({mtlUrl:f,manager:w,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 U.STLLoader(w).load(r,c=>{const f=new R.MeshPhongMaterial({color:12303291,shininess:30}),V=new R.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 R.Group)});break}default:console.error(`[URDF 资源加载失败,已跳过] 不支持的网格格式: .${g} (路径: ${r})`),p(new R.Group)}},m}function ce(b,i,o,l){return{loadSceneFromFile:r=>new Promise((w,p)=>{o.value=!0,l.value="正在初始化 URDF 加载器...";let g=0,h=0,c=null;const f=new R.LoadingManager;f.onStart=(a,u,E)=>{g=E||0,h=u||0,l.value=g>0?`开始下载资源: 0 / ${g}`:"开始下载资源...",o.value=!0},f.onProgress=(a,u,E)=>{h=u,g=E;const L=`正在加载 ${u} / ${E} 个文件: ${C.getFilenameFromUrl(a)}`;l.value=L,u===E&&(l.value="资源加载完成,正在处理模型...",setTimeout(()=>{if(c){c.updateMatrixWorld(!0);const v=new R.Box3().setFromObject(c);v.isEmpty()&&console.warn("模型加载完成,但所有可视化网格均加载失败,模型将不可见。"),c.userData.boundingBox=v,c.traverse(d=>{d.isMesh&&(d.castShadow=!0,d.receiveShadow=!0)}),w(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,u,E)=>{const L=C.getFilenameFromUrl(a);let v;E&&E>0?v=`${L}(${C.formatBytes(u)} / ${C.formatBytes(E)})`:u&&u>0?v=`${L}(已下载 ${C.formatBytes(u)})`:v=`${L}`,l.value=`正在下载第 ${h+1} / ${g} 个文件: ${v}`};try{const a=URL.createObjectURL(r);ae({manager:f,baseFolderUrl:re,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 ue(b,i,o,l=["URDFVisual"]){let m=null;const r=e.ref(null),w=new R.Raycaster,p=new R.Vector2,g=new Map;function h(){o.value.forEach(v=>{v.traverse(d=>{l!=null&&l.includes(d.type)&&g.set(d.id,{obj:d,axis:d.axis||new R.Vector3(1,0,0),limits:d.limits})})})}function c(v){r.value&&r.value.obj.traverse(d=>{var t;d.material&&((t=d.material.emissive)==null||t.set(0))}),r.value=v,v.obj.traverse(d=>{var t;d.material&&((t=d.material.emissive)==null||t.set(65280))})}function f(v){const d=b.value.getBoundingClientRect();p.x=(v.clientX-d.left)/d.width*2-1,p.y=-((v.clientY-d.top)/d.height)*2+1,w.setFromCamera(p,m);const t=w.intersectObjects(o.value,!0);if(t.length===0)return;let s=t[0].object,_=null;for(;s;){if(g.has(s.id)){_=g.get(s.id);break}s=s.parent}_&&c(_)}function V(){b.value&&b.value.removeEventListener("click",f,!1)}function a(){const{scene:v,camera:d}=i();m=d,h(),b.value&&b.value.addEventListener("click",f,!1)}function u(v){r.value&&(r.value.obj.visible=v)}function E(v){var s;const{axis:d,value:t}=v;D.updateObjectPosition((s=r.value)==null?void 0:s.obj,d,t)}function L(v){var s;const{axis:d,value:t}=v;D.updateObjectRotation((s=r.value)==null?void 0:s.obj,d,t)}return{initRaycaster:a,dispose:V,selectedObject3D:r,setSelectedObjVisible:u,updatePosition:E,updateRotation:L}}class de{constructor(i){S(this,"robot");S(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(w=>{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,u=i[V];f[V]=a+(u-a)*c}),this.setJointAngles(f),l&&l(h),h<1?requestAnimationFrame(p):w()};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 me={class:"panel-content"},pe={class:"obj"},ve={key:0,class:"obj-base"},fe=["title"],be=["title"],_e={key:1},we={class:"obj-position"},he={class:"coord-item"},Ve={class:"coord-item"},Ee={class:"coord-item"},ge={class:"obj-rotation"},ye={class:"coord-item"},Ne={class:"coord-item"},Le={class:"coord-item"},Re={class:"world"},je={class:"coord-line"},Ce={class:"coord-text"},Se={class:"world-position-item"},De={class:"world-position-item"},Ue={class:"world-position-item"},Fe={class:"coord-line"},$e={class:"coord-text"},xe={class:"world-rotation-item"},Me={class:"world-rotation-item"},Je={class:"world-rotation-item"},Oe=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({}),w=(t,s=0)=>{const _=[];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:w(n==null?void 0:n.children,s+1),path:n==null?void 0:n.name};_.push(y)}}),_},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:w(t==null?void 0:t.children,1),path:t==null?void 0:t.name}]:[],g=(t,s)=>{const _=[],n=[...t];for(;n.length>0&&_.length<s;){const y=n.shift();y.children&&y.children.length>0&&(_.push(y.id),n.push(...y.children))}return _},h=(t,s)=>{const _=[];return t.forEach(n=>{if(n.children&&n.children.length>0){_.push(n.id);const y=n.children.filter(j=>j.children&&j.children.length>0).slice(0,s).map(j=>j.id);_.push(...y)}}),_.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"})},u=t=>{l("visibleChange",t)},E=e.computed(()=>o!=null&&o.model?p(o.model):[]),L=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}),d=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,F,$,x,M,J,O,k,T,P,z,B,q,A,I,W,G,X,Y,Z,H,K,Q,ee;const _=e.resolveComponent("el-divider"),n=e.resolveComponent("el-switch"),y=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",me,[e.createVNode(_,null,{default:e.withCtx(()=>s[6]||(s[6]=[e.createTextVNode("对象")])),_:1,__:[6]}),e.createElementVNode("div",pe,[o.model?(e.openBlock(),e.createElementBlock("div",ve,[e.createElementVNode("div",{class:"obj-name",title:L.value},e.toDisplayString(L.value),9,fe),e.createElementVNode("div",{class:"obj-type",title:v.value},"["+e.toDisplayString(v.value)+"]",9,be)])):(e.openBlock(),e.createElementBlock("div",_e,"空")),e.createVNode(n,{"model-value":d.value,onChange:u},null,8,["model-value"])]),e.createVNode(_,null,{default:e.withCtx(()=>s[7]||(s[7]=[e.createTextVNode("相对位置")])),_:1,__:[7]}),e.createElementVNode("div",we,[e.createElementVNode("div",he,[s[8]||(s[8]=e.createElementVNode("span",{class:"axis-label"},"X",-1)),e.createVNode(y,{"model-value":c((F=(j=r.value)==null?void 0:j.position)==null?void 0:F.x),onChange:s[0]||(s[0]=N=>V(N,"x")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Ve,[s[9]||(s[9]=e.createElementVNode("span",{class:"axis-label"},"Y",-1)),e.createVNode(y,{"model-value":c((x=($=r.value)==null?void 0:$.position)==null?void 0:x.y),onChange:s[1]||(s[1]=N=>V(N,"y")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Ee,[s[10]||(s[10]=e.createElementVNode("span",{class:"axis-label"},"Z",-1)),e.createVNode(y,{"model-value":c((J=(M=r.value)==null?void 0:M.position)==null?void 0:J.z),onChange:s[2]||(s[2]=N=>V(N,"z")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])])]),e.createVNode(_,null,{default:e.withCtx(()=>s[11]||(s[11]=[e.createTextVNode("相对旋转")])),_:1,__:[11]}),e.createElementVNode("div",ge,[e.createElementVNode("div",ye,[s[12]||(s[12]=e.createElementVNode("span",{class:"axis-label"},"X°",-1)),e.createVNode(y,{"model-value":f((k=(O=r.value)==null?void 0:O.rotation)==null?void 0:k.x),onChange:s[3]||(s[3]=N=>a(N,"x")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Ne,[s[13]||(s[13]=e.createElementVNode("span",{class:"axis-label"},"Y°",-1)),e.createVNode(y,{"model-value":f((P=(T=r.value)==null?void 0:T.rotation)==null?void 0:P.y),onChange:s[4]||(s[4]=N=>a(N,"y")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",Le,[s[14]||(s[14]=e.createElementVNode("span",{class:"axis-label"},"Z°",-1)),e.createVNode(y,{"model-value":f((B=(z=r.value)==null?void 0:z.rotation)==null?void 0:B.z),onChange:s[5]||(s[5]=N=>a(N,"z")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])])]),e.createVNode(_,null,{default:e.withCtx(()=>s[15]||(s[15]=[e.createTextVNode("世界信息")])),_:1,__:[15]}),e.createElementVNode("div",Re,[e.createElementVNode("div",je,[s[16]||(s[16]=e.createElementVNode("span",{class:"coord-label"},"世界位置:",-1)),e.createElementVNode("span",Ce,[e.createElementVNode("div",Se,e.toDisplayString(c((A=(q=r.value)==null?void 0:q.worldPosition)==null?void 0:A.x))+", ",1),e.createElementVNode("div",De,e.toDisplayString(c((W=(I=r.value)==null?void 0:I.worldPosition)==null?void 0:W.y))+", ",1),e.createElementVNode("div",Ue,e.toDisplayString(c((X=(G=r.value)==null?void 0:G.worldPosition)==null?void 0:X.z)),1)])]),e.createElementVNode("div",Fe,[s[17]||(s[17]=e.createElementVNode("span",{class:"coord-label"},"世界旋转:",-1)),e.createElementVNode("span",$e,[e.createElementVNode("div",xe,e.toDisplayString(f((Z=(Y=r.value)==null?void 0:Y.worldRotation)==null?void 0:Z.x))+"°, ",1),e.createElementVNode("div",Me,e.toDisplayString(f((K=(H=r.value)==null?void 0:H.worldRotation)==null?void 0:K.y))+"°, ",1),e.createElementVNode("div",Je,e.toDisplayString(f((ee=(Q=r.value)==null?void 0:Q.worldRotation)==null?void 0:ee.z))+"° ",1)])])])])}}}),ke=le._export_sfc(Oe,[["__scopeId","data-v-00d48931"]]);exports.URDFRobotController=de;exports.WorkpieceTreePanel=ke;exports.useRaycaster=ue;exports.useUrdfLoader=ce;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ss-component-new",
3
3
  "private": false,
4
- "version": "1.2.60",
4
+ "version": "1.2.62",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",
@@ -0,0 +1,42 @@
1
+ # CAD Exchanger 3.24.0 (cadexchanger.com)
2
+ # Material Count: 5
3
+
4
+ newmtl Material_1
5
+ Ns 0.000000
6
+ Ka 0.200000 0.200000 0.200000
7
+ Kd 0.666667 0.666667 0.666667
8
+ Ks 0.000000 0.000000 0.000000
9
+ Ke 0.000000 0.000000 0.000000
10
+ d 1.000000
11
+
12
+ newmtl Material_2
13
+ Ns 0.000000
14
+ Ka 0.200000 0.200000 0.200000
15
+ Kd 0.133333 0.133333 0.133333
16
+ Ks 0.000000 0.000000 0.000000
17
+ Ke 0.000000 0.000000 0.000000
18
+ d 1.000000
19
+
20
+ newmtl Material_3
21
+ Ns 0.000000
22
+ Ka 0.200000 0.200000 0.200000
23
+ Kd 0.733333 0.733333 0.733333
24
+ Ks 0.000000 0.000000 0.000000
25
+ Ke 0.000000 0.000000 0.000000
26
+ d 1.000000
27
+
28
+ newmtl Material_5
29
+ Ns 0.000000
30
+ Ka 0.200000 0.200000 0.200000
31
+ Kd 0.396078 0.941176 0.450980
32
+ Ks 0.000000 0.000000 0.000000
33
+ Ke 0.000000 0.000000 0.000000
34
+ d 1.000000
35
+
36
+ newmtl Material_4
37
+ Ns 0.000000
38
+ Ka 0.200000 0.200000 0.200000
39
+ Kd 1.000000 1.000000 0.000000
40
+ Ks 0.000000 0.000000 0.000000
41
+ Ke 0.000000 0.000000 0.000000
42
+ d 1.000000