ss-component-new 1.2.191 → 1.2.192

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 (63) hide show
  1. package/dist/{index-Cxc1PVXd.cjs → index-1ODHK9Cd.cjs} +1 -1
  2. package/dist/{index-D1ueogxS.cjs → index-B23XP8Sd.cjs} +1 -1
  3. package/dist/{index-BirQQ3lc.cjs → index-B3s6qd3M.cjs} +1 -1
  4. package/dist/{index-D65YDXKW.js → index-B5LJ6FGn.js} +1 -1
  5. package/dist/{index-rZ7014Sk.js → index-BEj44QUg.js} +1 -1
  6. package/dist/{index-C70zIE55.js → index-BLWD7etg.js} +1 -1
  7. package/dist/{index-CMIPZKPf.js → index-BQdex7jO.js} +1 -1
  8. package/dist/{index-BXqKOxuS.js → index-BZrGQ9o1.js} +3 -3
  9. package/dist/{index-C2JrWyll.js → index-BcBjGzet.js} +3 -3
  10. package/dist/{index-CBrhRCO-.js → index-BcZW8n6c.js} +1 -1
  11. package/dist/{index-CWYagSpt.cjs → index-BguIX2P4.cjs} +1 -1
  12. package/dist/{index-RnSoY-22.cjs → index-Bm50ZZuq.cjs} +1 -1
  13. package/dist/{index-BymuSJDI.js → index-BowckPW8.js} +1 -1
  14. package/dist/{index-B-NCl3gS.cjs → index-Bq-dJJvd.cjs} +1 -1
  15. package/dist/{index-BxzBPUPM.js → index-C5vtEDy4.js} +2 -2
  16. package/dist/{index-pE7as_kK.cjs → index-C6aP1eIU.cjs} +1 -1
  17. package/dist/{index-DJG_XEjD.js → index-CLrQ3JMC.js} +2 -2
  18. package/dist/{index-BX8rwlid.js → index-CMpTpds8.js} +4 -4
  19. package/dist/{index-DJK5gz0F.js → index-CWGLA4xe.js} +1 -1
  20. package/dist/{index-cEI9vLYk.cjs → index-Csi6xtxp.cjs} +1 -1
  21. package/dist/{index-CfrhAsQz.cjs → index-CwX0OwiF.cjs} +1 -1
  22. package/dist/{index-ClXBdclA.js → index-CxMRlSKH.js} +1 -1
  23. package/dist/{index-3YRDwSPj.cjs → index-D2ZwX2kR.cjs} +1 -1
  24. package/dist/{index-Dn1Qel0o.cjs → index-D4T0v2f_.cjs} +1 -1
  25. package/dist/{index-DVgUQo5m.cjs → index-DNy_qVvw.cjs} +1 -1
  26. package/dist/{index-uqjKMDh5.js → index-DoqduP20.js} +11 -11
  27. package/dist/{index-CG3mcSTj.cjs → index-Dv-xHM7h.cjs} +1 -1
  28. package/dist/{index-BJoXWCIX.js → index-DvuQ6n5o.js} +2 -2
  29. package/dist/{index-BuL5m2Nq.js → index-Dz5O73IZ.js} +5 -5
  30. package/dist/{index-ipWINep3.cjs → index-Llg0-BL5.cjs} +1 -1
  31. package/dist/{index-CPcvHs6z.cjs → index-NG0JZKkn.cjs} +1 -1
  32. package/dist/{index-zTq3bNpY.js → index-Un7xS2Nb.js} +2 -2
  33. package/dist/{index-CvNZtYfg.cjs → index-VLwmyIOb.cjs} +1 -1
  34. package/dist/{index-CgRDUt8V.cjs → index-hYa8rJWO.cjs} +1 -1
  35. package/dist/{index-cH3mCnr4.js → index-iuq5na-k.js} +1 -1
  36. package/dist/{index-D-Yo1xz-.cjs → index-r_n9bpW_.cjs} +1 -1
  37. package/dist/{index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-Bsm0qkYt.cjs → index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-BU_MX7_0.cjs} +1 -1
  38. package/dist/{index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-D6b-8gl4.js → index.vue_vue_type_style_index_0_scoped_0b6f1a18_lang-DlOjCfkj.js} +4 -4
  39. package/dist/{index.vue_vue_type_style_index_0_scoped_92477073_lang-BCaM-Lqa.cjs → index.vue_vue_type_style_index_0_scoped_92477073_lang-BEFZSjlw.cjs} +1 -1
  40. package/dist/{index.vue_vue_type_style_index_0_scoped_92477073_lang-CQS0SuIY.js → index.vue_vue_type_style_index_0_scoped_92477073_lang-BnVkqouB.js} +2 -2
  41. package/dist/{index.vue_vue_type_style_index_1_lang-BFSnWFIG.js → index.vue_vue_type_style_index_1_lang-Cgm8Cuer.js} +1 -1
  42. package/dist/{index.vue_vue_type_style_index_1_lang-Clj-_LIm.cjs → index.vue_vue_type_style_index_1_lang-DXs-lrLT.cjs} +1 -1
  43. package/dist/{main-Ce1JDbwN.cjs → main-CK7a4eej.cjs} +1 -1
  44. package/dist/{main-SkCnXTUx.js → main-eQ2yMiP4.js} +2 -2
  45. package/dist/ss-component.cjs +1 -1
  46. package/dist/ss-component.css +1 -1
  47. package/dist/ss-component.js +6 -6
  48. package/dist/ss-component2.cjs +1 -1
  49. package/dist/ss-component2.js +10 -10
  50. package/dist/{threeModel-X2Nc978i.cjs → threeModel-BQWHG33C.cjs} +1 -1
  51. package/dist/{threeModel-Byuhg7mk.js → threeModel-BsE51SUL.js} +2 -2
  52. package/dist/{threeSceneView-CYij3StZ.cjs → threeSceneView-B-TXh0v2.cjs} +1 -1
  53. package/dist/{threeSceneView-6zjO4BPx.js → threeSceneView-D4ii8mhH.js} +2 -2
  54. package/dist/{threeSceneViewForCPMPIP-D4udu9q8.js → threeSceneViewForCPMPIP-D_Z1UGet.js} +3 -3
  55. package/dist/{threeSceneViewForCPMPIP-UVqs5Mfj.cjs → threeSceneViewForCPMPIP-uSbrD0_x.cjs} +1 -1
  56. package/dist/threeTrackPathView-B_CJ1S5Z.cjs +1 -0
  57. package/dist/{threeTrackPathView-DuiJbPwP.js → threeTrackPathView-DNh-AvDU.js} +80 -79
  58. package/dist/{threeViewerHost-BoBcYLbp.js → threeViewerHost-B3D4LzMe.js} +1 -1
  59. package/dist/{threeViewerHost-B2o6xcaT.cjs → threeViewerHost-DyPs12hY.cjs} +1 -1
  60. package/dist/{workpieceTreePanel-B55jmeoM.cjs → workpieceTreePanel-BLf_clDa.cjs} +1 -1
  61. package/dist/{workpieceTreePanel-1eij5wwB.js → workpieceTreePanel-BiQ4O4B7.js} +2 -2
  62. package/package.json +1 -1
  63. package/dist/threeTrackPathView-CvJHDcL3.cjs +0 -1
@@ -1 +1 @@
1
- "use strict";var te=Object.defineProperty;var oe=(b,n,o)=>n in b?te(b,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):b[n]=o;var D=(b,n,o)=>oe(b,typeof n!="symbol"?n+"":n,o);const se=require("./index.vue_vue_type_style_index_1_lang-Clj-_LIm.cjs"),U=require("./PCDLoader-BEqF0xND.cjs"),S=require("./threeViewerHost-B2o6xcaT.cjs"),R=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-DwX8qItu.cjs"),e=require("vue"),j=require("./iconfont-Dt1tG-V3.cjs"),le=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),re="http://222.92.178.198:60000/chfs/shared/Insofrobot/urdf";function ne(b){const{mtlUrl:n,manager:o,resourcePath:l,onLoad:m,onProgress:r,onError:w}=b,p=new U.MTLLoader(o);return l&&p.setResourcePath(l),p.load(n,m,r,w),p}function ie(b){const{objUrl:n,manager:o,materials:l,onLoad:m,onProgress:r,onError:w}=b,p=new U.OBJLoader(o);return l&&p.setMaterials(l),p.load(n,m,r,w),p}function ae(b){const{manager:n,baseFolderUrl:o,onFileProgress:l}=b,m=new se.URDFLoader(n);return m.packages=r=>`${o.endsWith("/")?o:o+"/"}${r}/`,m.loadMeshCb=(r,w,p)=>{const g=(()=>{const E=r.split("?")[0].split("#")[0],c=E.lastIndexOf(".");return c>=0?E.slice(c+1).toLowerCase():void 0})();switch(g){case"obj":{const E=(()=>{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=`${E}${c}.mtl`,h=a=>{ie({objUrl:r,manager:w,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 R.Group)}})};ne({mtlUrl:f,manager:w,resourcePath:E,onLoad:a=>{try{a.preload()}catch{}h(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}。将尝试无材质加载。`),h(void 0)}});break}case"stl":{new U.STLLoader(w).load(r,c=>{const f=new R.MeshPhongMaterial({color:12303291,shininess:30}),h=new R.Mesh(c,f);h.castShadow=!0,h.receiveShadow=!0,p(h)},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,n,o,l){return{loadSceneFromFile:r=>new Promise((w,p)=>{o.value=!0,l.value="正在初始化 URDF 加载器...";let g=0,E=0,c=null;const f=new R.LoadingManager;f.onStart=(a,d,V)=>{g=V||0,E=d||0,l.value=g>0?`开始下载资源: 0 / ${g}`:"开始下载资源...",o.value=!0},f.onProgress=(a,d,V)=>{E=d,g=V;const L=`正在加载 ${d} / ${V} 个文件: ${S.getFilenameFromUrl(a)}`;l.value=L,d===V&&(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(u=>{u.isMesh&&(u.castShadow=!0,u.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 h=(a,d,V)=>{const L=S.getFilenameFromUrl(a);let v;V&&V>0?v=`${L}(${S.formatBytes(d)} / ${S.formatBytes(V)})`:d&&d>0?v=`${L}(已下载 ${S.formatBytes(d)})`:v=`${L}`,l.value=`正在下载第 ${E+1} / ${g} 个文件: ${v}`};try{const a=URL.createObjectURL(r);ae({manager:f,baseFolderUrl:re,onFileProgress:h}).load(a,V=>{c=V},void 0,V=>{console.error(`加载 URDF 文件 (${r.name}) 时发生致命错误:`,V),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 de(b,n,o,l=["URDFVisual"]){let m=null;const r=e.ref(null),w=new R.Raycaster,p=new R.Vector2,g=new Map;function E(){o.value.forEach(v=>{v.traverse(u=>{l!=null&&l.includes(u.type)&&g.set(u.id,{obj:u,axis:u.axis||new R.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,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 h(){b.value&&b.value.removeEventListener("click",f,!1)}function a(){const{scene:v,camera:u}=n();m=u,E(),b.value&&b.value.addEventListener("click",f,!1)}function d(v){r.value&&(r.value.obj.visible=v)}function V(v){var s;const{axis:u,value:t}=v;j.updateObjectPosition((s=r.value)==null?void 0:s.obj,u,t)}function L(v){var s;const{axis:u,value:t}=v;j.updateObjectRotation((s=r.value)==null?void 0:s.obj,u,t)}return{initRaycaster:a,dispose:h,selectedObject3D:r,setSelectedObjVisible:d,updatePosition:V,updateRotation:L}}const ue={SINGLE:"单机",DOUBLE:"双机"},me={ROBOT:1,PIPECOMPARSION:2};class pe{constructor(n){D(this,"robot");D(this,"movableJoints");this.robot=n,this.movableJoints=this.getMovableJoints()}getMovableJoints(){return Object.values(this.robot.joints).filter(n=>n.jointType!=="fixed")}getMovableJointNames(){return this.movableJoints.map(n=>n.name)}setJointAngle(n,o){const l=this.robot.joints[n];if(!l||l.jointType==="fixed")return console.warn(`关节 ${n} 不存在或不可动`),!1;if(l.limit){const m=Math.max(l.limit.lower,Math.min(l.limit.upper,o));m!==o&&console.warn(`关节 ${n} 角度被限制在 [${l.limit.lower}, ${l.limit.upper}]`),l.setJointValue(m)}else l.setJointValue(o);return!0}setJointAngles(n){Object.entries(n).forEach(([o,l])=>{typeof l=="number"&&!isNaN(l)&&this.setJointAngle(o,l)})}getCurrentJointStates(){const n={};return this.movableJoints.forEach(o=>{n[o.name]=o.angle||0}),n}resetToZero(){this.movableJoints.forEach(n=>{n.setJointValue(0)})}getJointLimits(n){const o=this.robot.joints[n];return!o||!o.limit?null:{lower:o.limit.lower,upper:o.limit.upper}}async animateToState(n,o=1e3,l){const m=this.getCurrentJointStates(),r=Date.now();return new Promise(w=>{const p=()=>{const g=Date.now()-r,E=Math.min(g/o,1),c=this.easeInOutCubic(E),f={};Object.keys(n).forEach(h=>{const a=m[h]||0,d=n[h];f[h]=a+(d-a)*c}),this.setJointAngles(f),l&&l(E),E<1?requestAnimationFrame(p):w()};p()})}easeInOutCubic(n){return n<.5?4*n*n*n:1-Math.pow(-2*n+2,3)/2}async playSequence(n,o=1e3,l){for(let m=0;m<n.length;m++)await this.animateToState(n[m],o,r=>{l&&l(m,r)})}}const ve={class:"panel-content"},fe={class:"obj"},be={key:0,class:"obj-base"},_e=["title"],we=["title"],Ee={key:1},he={class:"obj-position"},Ve={class:"coord-item"},ge={class:"coord-item"},ye={class:"coord-item"},Ne={class:"obj-rotation"},Le={class:"coord-item"},Re={class:"coord-item"},Ce={class:"coord-item"},Se={class:"world"},De={class:"coord-line"},je={class:"coord-text"},Ue={class:"world-position-item"},Fe={class:"world-position-item"},Me={class:"world-position-item"},$e={class:"coord-line"},Oe={class:"coord-text"},xe={class:"world-rotation-item"},Je={class:"world-rotation-item"},Te={class:"world-rotation-item"},ke=e.defineComponent({__name:"workpieceTreePanel",props:{model:{},maxExpandCount:{default:10},expandStrategy:{default:"breadth"}},emits:["nodeClick","visibleChange","updatePosition","updateRotation"],setup(b,{emit:n}){const o=b,l=n,m=e.ref([]),r=e.ref({}),w=(t,s=0)=>{const _=[];return Array.isArray(t)&&(t==null?void 0:t.length)>0&&t.forEach(i=>{if(!(i!=null&&i.isMesh)){const y={name:i==null?void 0:i.name,label:(i==null?void 0:i.name)||(i==null?void 0:i.type),show:!0,level:s+1,isPenultimate:!1,type:i==null?void 0:i.type,id:i==null?void 0:i.id,limit:(i==null?void 0:i.limit)??"",children:w(i==null?void 0:i.children,s+1),path:i==null?void 0:i.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 _=[],i=[...t];for(;i.length>0&&_.length<s;){const y=i.shift();y.children&&y.children.length>0&&(_.push(y.id),i.push(...y.children))}return _},E=(t,s)=>{const _=[];return t.forEach(i=>{if(i.children&&i.children.length>0){_.push(i.id);const y=i.children.filter(C=>C.children&&C.children.length>0).slice(0,s).map(C=>C.id);_.push(...y)}}),_.slice(0,s+1)};e.computed(()=>!m.value||m.value.length===0?[]:o.expandStrategy==="firstLevel"?E(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,h=(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)},V=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}),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=j.getObject3DData(o.model))},{deep:!0,immediate:!0}),e.watch(V,t=>{m.value=JSON.parse(JSON.stringify(t))},{immediate:!0}),(t,s)=>{var C,F,M,$,O,x,J,T,k,P,B,z,I,A,q,W,G,X,Y,Z,H,K,Q,ee;const _=e.resolveComponent("el-divider"),i=e.resolveComponent("el-switch"),y=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",ve,[e.createVNode(_,null,{default:e.withCtx(()=>s[6]||(s[6]=[e.createTextVNode("对象")])),_:1,__:[6]}),e.createElementVNode("div",fe,[o.model?(e.openBlock(),e.createElementBlock("div",be,[e.createElementVNode("div",{class:"obj-name",title:L.value},e.toDisplayString(L.value),9,_e),e.createElementVNode("div",{class:"obj-type",title:v.value},"["+e.toDisplayString(v.value)+"]",9,we)])):(e.openBlock(),e.createElementBlock("div",Ee,"空")),e.createVNode(i,{"model-value":u.value,onChange:d},null,8,["model-value"])]),e.createVNode(_,null,{default:e.withCtx(()=>s[7]||(s[7]=[e.createTextVNode("相对位置")])),_:1,__:[7]}),e.createElementVNode("div",he,[e.createElementVNode("div",Ve,[s[8]||(s[8]=e.createElementVNode("span",{class:"axis-label"},"X",-1)),e.createVNode(y,{"model-value":c((F=(C=r.value)==null?void 0:C.position)==null?void 0:F.x),onChange:s[0]||(s[0]=N=>h(N,"x")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",ge,[s[9]||(s[9]=e.createElementVNode("span",{class:"axis-label"},"Y",-1)),e.createVNode(y,{"model-value":c(($=(M=r.value)==null?void 0:M.position)==null?void 0:$.y),onChange:s[1]||(s[1]=N=>h(N,"y")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",ye,[s[10]||(s[10]=e.createElementVNode("span",{class:"axis-label"},"Z",-1)),e.createVNode(y,{"model-value":c((x=(O=r.value)==null?void 0:O.position)==null?void 0:x.z),onChange:s[2]||(s[2]=N=>h(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",Ne,[e.createElementVNode("div",Le,[s[12]||(s[12]=e.createElementVNode("span",{class:"axis-label"},"X°",-1)),e.createVNode(y,{"model-value":f((T=(J=r.value)==null?void 0:J.rotation)==null?void 0:T.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",Re,[s[13]||(s[13]=e.createElementVNode("span",{class:"axis-label"},"Y°",-1)),e.createVNode(y,{"model-value":f((P=(k=r.value)==null?void 0:k.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",Ce,[s[14]||(s[14]=e.createElementVNode("span",{class:"axis-label"},"Z°",-1)),e.createVNode(y,{"model-value":f((z=(B=r.value)==null?void 0:B.rotation)==null?void 0:z.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",Se,[e.createElementVNode("div",De,[s[16]||(s[16]=e.createElementVNode("span",{class:"coord-label"},"世界位置:",-1)),e.createElementVNode("span",je,[e.createElementVNode("div",Ue,e.toDisplayString(c((A=(I=r.value)==null?void 0:I.worldPosition)==null?void 0:A.x))+", ",1),e.createElementVNode("div",Fe,e.toDisplayString(c((W=(q=r.value)==null?void 0:q.worldPosition)==null?void 0:W.y))+", ",1),e.createElementVNode("div",Me,e.toDisplayString(c((X=(G=r.value)==null?void 0:G.worldPosition)==null?void 0:X.z)),1)])]),e.createElementVNode("div",$e,[s[17]||(s[17]=e.createElementVNode("span",{class:"coord-label"},"世界旋转:",-1)),e.createElementVNode("span",Oe,[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",Je,e.toDisplayString(f((K=(H=r.value)==null?void 0:H.worldRotation)==null?void 0:K.y))+"°, ",1),e.createElementVNode("div",Te,e.toDisplayString(f((ee=(Q=r.value)==null?void 0:Q.worldRotation)==null?void 0:ee.z))+"° ",1)])])])])}}}),Pe=le._export_sfc(ke,[["__scopeId","data-v-00d48931"]]);exports.URDFRobotController=pe;exports.WorkpieceTreePanel=Pe;exports.robotMode=ue;exports.sceneType=me;exports.useRaycaster=de;exports.useUrdfLoader=ce;
1
+ "use strict";var te=Object.defineProperty;var oe=(b,n,o)=>n in b?te(b,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):b[n]=o;var D=(b,n,o)=>oe(b,typeof n!="symbol"?n+"":n,o);const se=require("./index.vue_vue_type_style_index_1_lang-DXs-lrLT.cjs"),U=require("./PCDLoader-BEqF0xND.cjs"),S=require("./threeViewerHost-DyPs12hY.cjs"),R=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-DwX8qItu.cjs"),e=require("vue"),j=require("./iconfont-Dt1tG-V3.cjs"),le=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),re="http://222.92.178.198:60000/chfs/shared/Insofrobot/urdf";function ne(b){const{mtlUrl:n,manager:o,resourcePath:l,onLoad:m,onProgress:r,onError:w}=b,p=new U.MTLLoader(o);return l&&p.setResourcePath(l),p.load(n,m,r,w),p}function ie(b){const{objUrl:n,manager:o,materials:l,onLoad:m,onProgress:r,onError:w}=b,p=new U.OBJLoader(o);return l&&p.setMaterials(l),p.load(n,m,r,w),p}function ae(b){const{manager:n,baseFolderUrl:o,onFileProgress:l}=b,m=new se.URDFLoader(n);return m.packages=r=>`${o.endsWith("/")?o:o+"/"}${r}/`,m.loadMeshCb=(r,w,p)=>{const g=(()=>{const E=r.split("?")[0].split("#")[0],c=E.lastIndexOf(".");return c>=0?E.slice(c+1).toLowerCase():void 0})();switch(g){case"obj":{const E=(()=>{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=`${E}${c}.mtl`,h=a=>{ie({objUrl:r,manager:w,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 R.Group)}})};ne({mtlUrl:f,manager:w,resourcePath:E,onLoad:a=>{try{a.preload()}catch{}h(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}。将尝试无材质加载。`),h(void 0)}});break}case"stl":{new U.STLLoader(w).load(r,c=>{const f=new R.MeshPhongMaterial({color:12303291,shininess:30}),h=new R.Mesh(c,f);h.castShadow=!0,h.receiveShadow=!0,p(h)},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,n,o,l){return{loadSceneFromFile:r=>new Promise((w,p)=>{o.value=!0,l.value="正在初始化 URDF 加载器...";let g=0,E=0,c=null;const f=new R.LoadingManager;f.onStart=(a,d,V)=>{g=V||0,E=d||0,l.value=g>0?`开始下载资源: 0 / ${g}`:"开始下载资源...",o.value=!0},f.onProgress=(a,d,V)=>{E=d,g=V;const L=`正在加载 ${d} / ${V} 个文件: ${S.getFilenameFromUrl(a)}`;l.value=L,d===V&&(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(u=>{u.isMesh&&(u.castShadow=!0,u.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 h=(a,d,V)=>{const L=S.getFilenameFromUrl(a);let v;V&&V>0?v=`${L}(${S.formatBytes(d)} / ${S.formatBytes(V)})`:d&&d>0?v=`${L}(已下载 ${S.formatBytes(d)})`:v=`${L}`,l.value=`正在下载第 ${E+1} / ${g} 个文件: ${v}`};try{const a=URL.createObjectURL(r);ae({manager:f,baseFolderUrl:re,onFileProgress:h}).load(a,V=>{c=V},void 0,V=>{console.error(`加载 URDF 文件 (${r.name}) 时发生致命错误:`,V),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 de(b,n,o,l=["URDFVisual"]){let m=null;const r=e.ref(null),w=new R.Raycaster,p=new R.Vector2,g=new Map;function E(){o.value.forEach(v=>{v.traverse(u=>{l!=null&&l.includes(u.type)&&g.set(u.id,{obj:u,axis:u.axis||new R.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,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 h(){b.value&&b.value.removeEventListener("click",f,!1)}function a(){const{scene:v,camera:u}=n();m=u,E(),b.value&&b.value.addEventListener("click",f,!1)}function d(v){r.value&&(r.value.obj.visible=v)}function V(v){var s;const{axis:u,value:t}=v;j.updateObjectPosition((s=r.value)==null?void 0:s.obj,u,t)}function L(v){var s;const{axis:u,value:t}=v;j.updateObjectRotation((s=r.value)==null?void 0:s.obj,u,t)}return{initRaycaster:a,dispose:h,selectedObject3D:r,setSelectedObjVisible:d,updatePosition:V,updateRotation:L}}const ue={SINGLE:"单机",DOUBLE:"双机"},me={ROBOT:1,PIPECOMPARSION:2};class pe{constructor(n){D(this,"robot");D(this,"movableJoints");this.robot=n,this.movableJoints=this.getMovableJoints()}getMovableJoints(){return Object.values(this.robot.joints).filter(n=>n.jointType!=="fixed")}getMovableJointNames(){return this.movableJoints.map(n=>n.name)}setJointAngle(n,o){const l=this.robot.joints[n];if(!l||l.jointType==="fixed")return console.warn(`关节 ${n} 不存在或不可动`),!1;if(l.limit){const m=Math.max(l.limit.lower,Math.min(l.limit.upper,o));m!==o&&console.warn(`关节 ${n} 角度被限制在 [${l.limit.lower}, ${l.limit.upper}]`),l.setJointValue(m)}else l.setJointValue(o);return!0}setJointAngles(n){Object.entries(n).forEach(([o,l])=>{typeof l=="number"&&!isNaN(l)&&this.setJointAngle(o,l)})}getCurrentJointStates(){const n={};return this.movableJoints.forEach(o=>{n[o.name]=o.angle||0}),n}resetToZero(){this.movableJoints.forEach(n=>{n.setJointValue(0)})}getJointLimits(n){const o=this.robot.joints[n];return!o||!o.limit?null:{lower:o.limit.lower,upper:o.limit.upper}}async animateToState(n,o=1e3,l){const m=this.getCurrentJointStates(),r=Date.now();return new Promise(w=>{const p=()=>{const g=Date.now()-r,E=Math.min(g/o,1),c=this.easeInOutCubic(E),f={};Object.keys(n).forEach(h=>{const a=m[h]||0,d=n[h];f[h]=a+(d-a)*c}),this.setJointAngles(f),l&&l(E),E<1?requestAnimationFrame(p):w()};p()})}easeInOutCubic(n){return n<.5?4*n*n*n:1-Math.pow(-2*n+2,3)/2}async playSequence(n,o=1e3,l){for(let m=0;m<n.length;m++)await this.animateToState(n[m],o,r=>{l&&l(m,r)})}}const ve={class:"panel-content"},fe={class:"obj"},be={key:0,class:"obj-base"},_e=["title"],we=["title"],Ee={key:1},he={class:"obj-position"},Ve={class:"coord-item"},ge={class:"coord-item"},ye={class:"coord-item"},Ne={class:"obj-rotation"},Le={class:"coord-item"},Re={class:"coord-item"},Ce={class:"coord-item"},Se={class:"world"},De={class:"coord-line"},je={class:"coord-text"},Ue={class:"world-position-item"},Fe={class:"world-position-item"},Me={class:"world-position-item"},$e={class:"coord-line"},Oe={class:"coord-text"},xe={class:"world-rotation-item"},Je={class:"world-rotation-item"},Te={class:"world-rotation-item"},ke=e.defineComponent({__name:"workpieceTreePanel",props:{model:{},maxExpandCount:{default:10},expandStrategy:{default:"breadth"}},emits:["nodeClick","visibleChange","updatePosition","updateRotation"],setup(b,{emit:n}){const o=b,l=n,m=e.ref([]),r=e.ref({}),w=(t,s=0)=>{const _=[];return Array.isArray(t)&&(t==null?void 0:t.length)>0&&t.forEach(i=>{if(!(i!=null&&i.isMesh)){const y={name:i==null?void 0:i.name,label:(i==null?void 0:i.name)||(i==null?void 0:i.type),show:!0,level:s+1,isPenultimate:!1,type:i==null?void 0:i.type,id:i==null?void 0:i.id,limit:(i==null?void 0:i.limit)??"",children:w(i==null?void 0:i.children,s+1),path:i==null?void 0:i.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 _=[],i=[...t];for(;i.length>0&&_.length<s;){const y=i.shift();y.children&&y.children.length>0&&(_.push(y.id),i.push(...y.children))}return _},E=(t,s)=>{const _=[];return t.forEach(i=>{if(i.children&&i.children.length>0){_.push(i.id);const y=i.children.filter(C=>C.children&&C.children.length>0).slice(0,s).map(C=>C.id);_.push(...y)}}),_.slice(0,s+1)};e.computed(()=>!m.value||m.value.length===0?[]:o.expandStrategy==="firstLevel"?E(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,h=(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)},V=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}),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=j.getObject3DData(o.model))},{deep:!0,immediate:!0}),e.watch(V,t=>{m.value=JSON.parse(JSON.stringify(t))},{immediate:!0}),(t,s)=>{var C,F,M,$,O,x,J,T,k,P,B,z,I,A,q,W,G,X,Y,Z,H,K,Q,ee;const _=e.resolveComponent("el-divider"),i=e.resolveComponent("el-switch"),y=e.resolveComponent("el-input-number");return e.openBlock(),e.createElementBlock("div",ve,[e.createVNode(_,null,{default:e.withCtx(()=>s[6]||(s[6]=[e.createTextVNode("对象")])),_:1,__:[6]}),e.createElementVNode("div",fe,[o.model?(e.openBlock(),e.createElementBlock("div",be,[e.createElementVNode("div",{class:"obj-name",title:L.value},e.toDisplayString(L.value),9,_e),e.createElementVNode("div",{class:"obj-type",title:v.value},"["+e.toDisplayString(v.value)+"]",9,we)])):(e.openBlock(),e.createElementBlock("div",Ee,"空")),e.createVNode(i,{"model-value":u.value,onChange:d},null,8,["model-value"])]),e.createVNode(_,null,{default:e.withCtx(()=>s[7]||(s[7]=[e.createTextVNode("相对位置")])),_:1,__:[7]}),e.createElementVNode("div",he,[e.createElementVNode("div",Ve,[s[8]||(s[8]=e.createElementVNode("span",{class:"axis-label"},"X",-1)),e.createVNode(y,{"model-value":c((F=(C=r.value)==null?void 0:C.position)==null?void 0:F.x),onChange:s[0]||(s[0]=N=>h(N,"x")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",ge,[s[9]||(s[9]=e.createElementVNode("span",{class:"axis-label"},"Y",-1)),e.createVNode(y,{"model-value":c(($=(M=r.value)==null?void 0:M.position)==null?void 0:$.y),onChange:s[1]||(s[1]=N=>h(N,"y")),size:"small",class:"coord-input-compact",precision:3,step:.1,controls:!0,"controls-position":"right"},null,8,["model-value"])]),e.createElementVNode("div",ye,[s[10]||(s[10]=e.createElementVNode("span",{class:"axis-label"},"Z",-1)),e.createVNode(y,{"model-value":c((x=(O=r.value)==null?void 0:O.position)==null?void 0:x.z),onChange:s[2]||(s[2]=N=>h(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",Ne,[e.createElementVNode("div",Le,[s[12]||(s[12]=e.createElementVNode("span",{class:"axis-label"},"X°",-1)),e.createVNode(y,{"model-value":f((T=(J=r.value)==null?void 0:J.rotation)==null?void 0:T.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",Re,[s[13]||(s[13]=e.createElementVNode("span",{class:"axis-label"},"Y°",-1)),e.createVNode(y,{"model-value":f((P=(k=r.value)==null?void 0:k.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",Ce,[s[14]||(s[14]=e.createElementVNode("span",{class:"axis-label"},"Z°",-1)),e.createVNode(y,{"model-value":f((z=(B=r.value)==null?void 0:B.rotation)==null?void 0:z.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",Se,[e.createElementVNode("div",De,[s[16]||(s[16]=e.createElementVNode("span",{class:"coord-label"},"世界位置:",-1)),e.createElementVNode("span",je,[e.createElementVNode("div",Ue,e.toDisplayString(c((A=(I=r.value)==null?void 0:I.worldPosition)==null?void 0:A.x))+", ",1),e.createElementVNode("div",Fe,e.toDisplayString(c((W=(q=r.value)==null?void 0:q.worldPosition)==null?void 0:W.y))+", ",1),e.createElementVNode("div",Me,e.toDisplayString(c((X=(G=r.value)==null?void 0:G.worldPosition)==null?void 0:X.z)),1)])]),e.createElementVNode("div",$e,[s[17]||(s[17]=e.createElementVNode("span",{class:"coord-label"},"世界旋转:",-1)),e.createElementVNode("span",Oe,[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",Je,e.toDisplayString(f((K=(H=r.value)==null?void 0:H.worldRotation)==null?void 0:K.y))+"°, ",1),e.createElementVNode("div",Te,e.toDisplayString(f((ee=(Q=r.value)==null?void 0:Q.worldRotation)==null?void 0:ee.z))+"° ",1)])])])])}}}),Pe=le._export_sfc(ke,[["__scopeId","data-v-00d48931"]]);exports.URDFRobotController=pe;exports.WorkpieceTreePanel=Pe;exports.robotMode=ue;exports.sceneType=me;exports.useRaycaster=de;exports.useUrdfLoader=ce;
@@ -1,9 +1,9 @@
1
1
  var ce = Object.defineProperty;
2
2
  var de = (b, l, o) => l in b ? ce(b, l, { enumerable: !0, configurable: !0, writable: !0, value: o }) : b[l] = o;
3
3
  var E = (b, l, o) => de(b, typeof l != "symbol" ? l + "" : l, o);
4
- import { U as me } from "./index.vue_vue_type_style_index_1_lang-BFSnWFIG.js";
4
+ import { U as me } from "./index.vue_vue_type_style_index_1_lang-Cgm8Cuer.js";
5
5
  import { S as ve, M as pe, O as fe } from "./PCDLoader-C8b_2UPa.js";
6
- import { i as re, j as F } from "./threeViewerHost-BoBcYLbp.js";
6
+ import { i as re, j as F } from "./threeViewerHost-B3D4LzMe.js";
7
7
  import { aQ as be, u as J, o as we, k as he, B as _e, aR as ge, Y as je, V as ye } from "./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-dK7WSb7x.js";
8
8
  import { ref as T, defineComponent as Le, computed as O, watch as ue, resolveComponent as x, createElementBlock as k, openBlock as P, createVNode as S, createElementVNode as c, withCtx as $, createTextVNode as D, toDisplayString as C } from "vue";
9
9
  import { c as Re, e as Se, g as Ue } from "./iconfont-BWe7Nfzi.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ss-component-new",
3
3
  "private": false,
4
- "version": "1.2.191",
4
+ "version": "1.2.192",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),S=require("./iconfont-Dt1tG-V3.cjs"),k=require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-DwX8qItu.cjs"),ge=require("./threeViewerHost-B2o6xcaT.cjs"),j=require("./index-CEwxrYB-.cjs"),X=require("./urdfTree-DY8slOyJ.cjs"),W=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),g=require("./svgIcon-CUM54R6L.cjs"),$=require("./pointTrack-BSTAE8yf.cjs"),he=require("./isString-Cvx5mmsS.cjs");function Ve(m=.5,V=4){const w=new k.Mesh(new k.ConeGeometry(m,V,32),new k.MeshStandardMaterial({color:"#919191ff",metalness:.3,roughness:.6})),c=w.geometry.parameters.height;return w.geometry.translate(0,-c/2,0),w.rotation.set(-90,0,0,"XYZ"),w}function we(m,V){m.position.copy(V)}function ye(m,V,w=new k.Color(16711680)){const c=new k.Vector3;V.getWorldPosition(c);const i=m.geometry.attributes.position,u=m.geometry.attributes.color,d=new k.Color(2003455);let n=1/0,f=-1;for(let a=0;a<i.count;a++){const s=new k.Vector3().fromBufferAttribute(i,a).distanceTo(c);s<n&&(n=s,f=a)}for(let a=0;a<u.count;a++)d.toArray(u.array,a*3);if(f!==-1){const a=w.toArray(),p=f*3+2;for(let s=0;s<p;s=s+3)u.array[s]=a[0],u.array[s+1]=a[1],u.array[s+2]=a[2]}u.needsUpdate=!0}function Y(m,V,w,c=new k.Color(16711680)){we(m,V),ye(w,m,c)}const ke={class:"panel-content"},Ne={class:"animation-controls"},Ce={class:"control-row"},be={class:"control-row"},_e={class:"frame-info"},Te={class:"control-row"},Ee=e.defineComponent({__name:"trackAnimationPanel",props:{cloud:{},knife:{},vectors:{}},emits:["getThreeData"],setup(m,{expose:V,emit:w}){const c=m,i=e.computed(()=>c.vectors),u=e.ref(!1),d=e.ref(0),n=e.ref(100);let f=!1;const a=r=>`第 ${r+1} 帧`,p=r=>{if(r<0||r>=i.value.length){console.error(`帧索引 ${r} 超出范围`);return}const v=i.value[r];d.value=r,Y(c.knife,v,c.cloud)},s=async()=>{if(i.value.length===0){j.ElMessage.error("无法播放动画:无数据");return}if(!u.value){u.value=!0,f=!1,i.value.length-1===d.value&&(d.value=0);try{for(let r=d.value+1;r<i.value.length&&!f;r++)await new Promise(v=>setTimeout(v,n.value)),p(r);f||j.ElMessage.success("动画播放完成")}catch(r){console.error("动画播放出错:",r)}finally{u.value=!1}}},N=async()=>{u.value&&(f=!0,await new Promise(r=>{const v=e.watch(()=>u.value,I=>{v(),r()})}),j.ElMessage.info("动画已停止"))},E=async r=>{u.value&&await N(),p(r)},z=async()=>{u.value&&await N(),!(d.value+1>=i.value.length)&&p(d.value+1)},M=async()=>{u.value&&await N(),d.value!==0&&p(d.value-1)},P=()=>{d.value=0};return V({playAnimation:s,stopAnimation:N,forwardFrame:z,backwardFrame:M,resetAnimationFrame:P,reset:async()=>{await N(),P()}}),(r,v)=>{const I=e.resolveComponent("el-input-number"),R=e.resolveComponent("el-form-item"),B=e.resolveComponent("el-form"),U=e.resolveComponent("el-slider");return e.openBlock(),e.createElementBlock("div",ke,[e.createElementVNode("div",Ne,[e.createElementVNode("div",Ce,[e.createVNode(B,{"label-width":"auto",style:{width:"100%"}},{default:e.withCtx(()=>[e.createVNode(R,{label:"帧间隔 (ms):",prop:"frameDuration"},{default:e.withCtx(()=>[e.createVNode(I,{modelValue:n.value,"onUpdate:modelValue":v[0]||(v[0]=x=>n.value=x),min:0,max:5e3,step:10,style:{width:"100%"}},null,8,["modelValue"])]),_:1})]),_:1})]),e.createElementVNode("div",be,[v[2]||(v[2]=e.createElementVNode("label",null,"当前帧:",-1)),e.createElementVNode("span",_e,e.toDisplayString(d.value+1)+" / "+e.toDisplayString(i.value.length),1)]),e.createElementVNode("div",Te,[v[3]||(v[3]=e.createElementVNode("label",null,"动画进度:",-1)),e.createVNode(U,{modelValue:d.value,"onUpdate:modelValue":v[1]||(v[1]=x=>d.value=x),min:0,max:i.value.length>0?i.value.length-1:0,step:1,"format-tooltip":a,onInput:E,disabled:i.value.length===0,style:{"flex-grow":"1",margin:"0 10px"}},null,8,["modelValue","max","disabled"])])])])}}}),Se=W._export_sfc(Ee,[["__scopeId","data-v-b5665bfd"]]),xe={class:"obj-viewer-container"},De={class:"buttonGroup-topLeft"},Ae={class:"buttonGroup-left"},ze={class:"buttonGroup-right"},Pe={class:"buttonGroup-bottom"},Ie={class:"left-panel"},Ue={class:"panel-header"},Fe={class:"panel-body"},$e={key:1,class:"clipping-content"},je={class:"radio-group"},Me={class:"radio-label"},Re={class:"radio-label"},Be={class:"radio-label"},qe={class:"radio-label"},Oe={class:"right-panel"},Le={class:"panel-header"},Ke={class:"panel-body"},Ge={key:0,class:"loading-overlay"},He=e.defineComponent({__name:"threeTrackPathView",props:{fileBlobs:{},threeData:{default:()=>""},trackFileType:{}},emits:["getAnimationData","getThreeData"],setup(m,{emit:V}){const w=V,c=m,i=e.ref(null),u=e.ref(!1),d=e.ref(""),n=e.ref(),f=e.ref(!1),a=e.ref(""),p=e.ref(!1),s=e.ref(""),N=e.shallowRef(null),E=e.shallowRef(null),{currentModels:z,initThreeJS:M,handleResize:P,getThreeJSObjects:y,cleanup:r,axesHelperVisible:v,toggleAxesVisibility:I,zoomIn:R,zoomOut:B}=S.useThreeJS(i),{isAnimating:U,toggleAnimation:x,stopAnimation:Z}=S.useAnimation(y,z),{isClipping:Q,activeClippingAxis:h,toggleClipping:ee,updateClippingPlanes:C}=S.useClipping(y,z),te=()=>{I()},q=o=>{f.value=!0,a.value=o,o==="剖面视图"&&!Q.value&&ee()},O=o=>{p.value=!0,s.value=o,o==="动画仿真"&&w("getAnimationData")},L=e.ref([]),D=e.ref([]),oe=e.computed(()=>{var t;return(t=c.trackFileType)==null?void 0:t.isUv}),ne=e.computed(()=>{var t;return(t=c.trackFileType)==null?void 0:t.isCyd}),le=e.computed(()=>{var t;return(t=c.trackFileType)==null?void 0:t.isCpt}),_=e.computed(()=>{var t;return(t=c.trackFileType)==null?void 0:t.isNc}),K=e.computed(()=>{const o=c.fileBlobs||[];return o==null?void 0:o[0]});let b=e.shallowRef(),T=e.shallowRef();const ae=()=>{const{scene:o}=y();b.value&&o&&(S.disposeObj(b.value,o),b.value=null)},re=()=>{const{scene:o}=y();T.value&&o&&(S.disposeObj(T.value,o),T.value=null)},G=()=>{ae(),re()},ie=async o=>{const t=URL.createObjectURL(o),A=await ge.readFileText(t);if(URL.revokeObjectURL(t),he.isString(A)){const l=await $.getPoints(A,c.trackFileType)||[];L.value=l;const J=L.value;oe.value&&(b.value=$.drawLine(y,J)),(ne.value||le.value||_.value)&&(b.value=$.drawPoints(y,J)),S.frameCameraToObject3D(y,b.value)}},se=async()=>{var o,t;T.value=Ve(),D.value=$.convertPointsToVector3(L.value),D.value&&D.value.length&&(Y(T.value,D.value[0],b.value,new k.Color(16711680)),(t=(o=E.value)==null?void 0:o.add)==null||t.call(o,T.value))},ce=async()=>{var o;await((o=n==null?void 0:n.value)==null?void 0:o.reset()),await H(K.value)},H=async o=>{G(),await ie(o),_.value&&se()};e.watch(()=>K.value,async o=>{o&&await H(o)},{immediate:!0,deep:!0});const ue=()=>{var o;_.value&&((o=n==null?void 0:n.value)==null||o.playAnimation())},de=()=>{var o;_.value&&((o=n==null?void 0:n.value)==null||o.stopAnimation())},ve=()=>{var o;_.value&&((o=n==null?void 0:n.value)==null||o.forwardFrame())},fe=()=>{var o;_.value&&((o=n==null?void 0:n.value)==null||o.backwardFrame())};let F=null;const me=()=>{M(),e.nextTick(()=>{i.value&&(F=new ResizeObserver(P),F.observe(i.value))});const o=y();E.value=o.scene,E.value&&(E.value.name="CPMPIP")},pe=()=>{F&&F.disconnect(),U.value&&Z(),G(),r()};return e.onMounted(async()=>{try{me()}catch(o){console.error("Three.js 初始化失败:",o),j.ElMessage.error("渲染引擎初始化失败!")}}),e.onBeforeUnmount(()=>{pe()}),(o,t)=>{const A=e.resolveComponent("el-scrollbar");return e.openBlock(),e.createElementBlock("div",xe,[e.createElementVNode("div",{ref_key:"threejsContainer",ref:i,class:"threejs-container"},null,512),e.createElementVNode("div",De,[e.createVNode(g.ThreeSvgIcon,{name:"viewReset",size:"24",onClick:ce,title:"重置"}),e.createVNode(g.ThreeSvgIcon,{name:"fangda",size:"24",title:"放大",onClick:e.unref(R)},null,8,["onClick"]),e.createVNode(g.ThreeSvgIcon,{name:"suoxiao",size:"24",title:"缩小",onClick:e.unref(B)},null,8,["onClick"]),e.createVNode(g.ThreeSvgIcon,{name:"lookAround",size:"24",onClick:e.unref(x),title:e.unref(U)?"停止动画":"动画视图"},null,8,["onClick","title"]),e.createVNode(g.ThreeSvgIcon,{name:"zuobiaoxi",size:"24",active:e.unref(v),onClick:te,title:"显隐坐标轴"},null,8,["active"])]),e.createElementVNode("div",Ae,[e.renderSlot(o.$slots,"button-left",{switchRightPanel:q},void 0,!0),e.createVNode(g.ThreeSvgIcon,{name:"jiegoushu",size:"24",onClick:t[0]||(t[0]=l=>q("场景树")),active:f.value&&a.value==="场景树",title:"场景树"},null,8,["active"]),e.createVNode(g.ThreeSvgIcon,{name:"clipping",size:"24",onClick:t[1]||(t[1]=l=>q("剖面视图")),active:f.value&&a.value==="剖面视图",title:"剖面视图"},null,8,["active"])]),e.createElementVNode("div",ze,[e.renderSlot(o.$slots,"button-right",{switchRightPanel:O},void 0,!0),e.createVNode(g.ThreeSvgIcon,{name:"guanjiekongzhi",size:"24",onClick:t[2]||(t[2]=l=>O("关节控制")),active:p.value&&s.value==="关节控制",title:"关节控制"},null,8,["active"]),e.createVNode(g.ThreeSvgIcon,{name:"donghuafangzhen",size:"24",title:"动画仿真",onClick:t[3]||(t[3]=l=>O("动画仿真")),active:p.value&&s.value==="动画仿真"},null,8,["active"])]),e.createElementVNode("div",Pe,[e.createVNode(g.ThreeSvgIcon,{name:"kuaitui",size:"24",backgroundColor:"#ffffff",title:"快退",onClick:fe}),e.createVNode(g.ThreeSvgIcon,{name:"bofang",size:"24",backgroundColor:"#ffffff",title:"播放",onClick:ue}),e.createVNode(g.ThreeSvgIcon,{name:"kuaijin",size:"24",backgroundColor:"#ffffff",title:"快进",onClick:ve}),e.createVNode(g.ThreeSvgIcon,{name:"zanting",size:"24",backgroundColor:"#ffffff",title:"暂停",onClick:de})]),e.withDirectives(e.createElementVNode("div",Ie,[e.createElementVNode("div",Ue,[e.createElementVNode("span",null,e.toDisplayString(a.value),1),e.createElementVNode("span",{class:"close",onClick:t[4]||(t[4]=l=>f.value=!1)}," X ")]),e.createElementVNode("div",Fe,[e.createVNode(A,{height:"100%"},{default:e.withCtx(()=>[a.value==="场景树"?(e.openBlock(),e.createBlock(X.UrdfTree,{key:0,model:N.value},null,8,["model"])):e.createCommentVNode("",!0),a.value==="剖面视图"?(e.openBlock(),e.createElementBlock("div",$e,[e.createElementVNode("div",je,[e.createElementVNode("label",Me,[e.withDirectives(e.createElementVNode("input",{type:"radio",name:"clipping-axis",value:"none","onUpdate:modelValue":t[5]||(t[5]=l=>e.isRef(h)?h.value=l:null),onChange:t[6]||(t[6]=(...l)=>e.unref(C)&&e.unref(C)(...l))},null,544),[[e.vModelRadio,e.unref(h)]]),t[14]||(t[14]=e.createElementVNode("span",{class:"radio-text"},"无切割",-1))]),e.createElementVNode("label",Re,[e.withDirectives(e.createElementVNode("input",{type:"radio",name:"clipping-axis",value:"x","onUpdate:modelValue":t[7]||(t[7]=l=>e.isRef(h)?h.value=l:null),onChange:t[8]||(t[8]=(...l)=>e.unref(C)&&e.unref(C)(...l))},null,544),[[e.vModelRadio,e.unref(h)]]),t[15]||(t[15]=e.createElementVNode("span",{class:"radio-text"},"X轴切割",-1))]),e.createElementVNode("label",Be,[e.withDirectives(e.createElementVNode("input",{type:"radio",name:"clipping-axis",value:"y","onUpdate:modelValue":t[9]||(t[9]=l=>e.isRef(h)?h.value=l:null),onChange:t[10]||(t[10]=(...l)=>e.unref(C)&&e.unref(C)(...l))},null,544),[[e.vModelRadio,e.unref(h)]]),t[16]||(t[16]=e.createElementVNode("span",{class:"radio-text"},"Y轴切割",-1))]),e.createElementVNode("label",qe,[e.withDirectives(e.createElementVNode("input",{type:"radio",name:"clipping-axis",value:"z","onUpdate:modelValue":t[11]||(t[11]=l=>e.isRef(h)?h.value=l:null),onChange:t[12]||(t[12]=(...l)=>e.unref(C)&&e.unref(C)(...l))},null,544),[[e.vModelRadio,e.unref(h)]]),t[17]||(t[17]=e.createElementVNode("span",{class:"radio-text"},"Z轴切割",-1))])])])):e.createCommentVNode("",!0)]),_:1})])],512),[[e.vShow,f.value]]),e.withDirectives(e.createElementVNode("div",Oe,[e.createElementVNode("div",Le,[e.createElementVNode("span",null,e.toDisplayString(s.value),1),e.createElementVNode("span",{class:"close",onClick:t[13]||(t[13]=l=>p.value=!1)}," X ")]),e.createElementVNode("div",Ke,[e.createVNode(A,{height:"100%"},{default:e.withCtx(()=>[e.withDirectives(e.createVNode(X.JointPanel,{model:N.value},null,8,["model"]),[[e.vShow,s.value==="关节控制"]]),e.withDirectives(e.createVNode(Se,{ref_key:"animationPanelRef",ref:n,cloud:e.unref(b),knife:e.unref(T),vectors:D.value},null,8,["cloud","knife","vectors"]),[[e.vShow,s.value==="动画仿真"&&_.value]])]),_:1})])],512),[[e.vShow,p.value]]),u.value?(e.openBlock(),e.createElementBlock("div",Ge,[t[18]||(t[18]=e.createElementVNode("div",{class:"loading-spinner"},null,-1)),e.createElementVNode("p",null,e.toDisplayString(d.value),1)])):e.createCommentVNode("",!0)])}}}),Je=W._export_sfc(He,[["__scopeId","data-v-61931e01"]]);exports.default=Je;