ss-component-new 1.1.821 → 1.1.823
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.
- package/dist/{OrbitControls-D6pgin7s.js → OrbitControls-Cm4Xs_Bq.js} +1 -1
- package/dist/{OrbitControls-Ff5ikkUQ.cjs → OrbitControls-D-XDZGf-.cjs} +1 -1
- package/dist/{STLLoader-BNh7D2zV.cjs → STLLoader-BxpEhvEg.cjs} +161 -161
- package/dist/{STLLoader-LGKv5i3H.js → STLLoader-DofhZbOw.js} +522 -593
- package/dist/{array-D1hKYLwI.cjs → array-Bfmx0w6P.cjs} +2 -2
- package/dist/{array-C60T9pDZ.js → array-DbAuNWGt.js} +1 -1
- package/dist/{iconfont-v9CcCMwF.js → iconfont-DQodgJo8.js} +73 -75
- package/dist/iconfont-Di4uXnX1.cjs +1 -0
- package/dist/icons/svg/editTable.svg +1 -1
- package/dist/icons/svg/export.svg +1 -0
- package/dist/icons/svg/model.svg +1 -0
- package/dist/icons/svg/three.svg +1 -0
- package/dist/index-1i-XlS2m.js +101 -0
- package/dist/{index-BdsJiFeW.cjs → index-6jSC3unU.cjs} +1 -1
- package/dist/{index-2kzGjuzu.js → index-6zbHinQ6.js} +10 -9
- package/dist/index-B-oe2x1V.cjs +109 -0
- package/dist/index-B-qent3l.cjs +1 -0
- package/dist/{index-CukZ8eDZ.js → index-BBo52W9F.js} +4 -4
- package/dist/index-BOev8isw.cjs +21 -0
- package/dist/index-BQgnYD51.js +6492 -0
- package/dist/{index-owcnOlVq.js → index-BYW-ix_Q.js} +5 -5
- package/dist/{index-4_M1SpeV.js → index-Bi1gr72d.js} +14 -14
- package/dist/{index-DnVaHi8q.js → index-BmHmnXS9.js} +7 -7
- package/dist/index-BoS30LXH.cjs +1 -0
- package/dist/index-BuBMi9JA.cjs +1 -0
- package/dist/{index-Zi9xLtwj.js → index-BvE05H-i.js} +2 -2
- package/dist/index-BwpOMKef.cjs +1 -0
- package/dist/index-C18ZPRC7.cjs +1 -0
- package/dist/{index-HVJSfh2g.js → index-CJx2DcDb.js} +21 -19
- package/dist/{index-B3cUSGXB.js → index-CL59qQ_W.js} +9 -8
- package/dist/{index-DDsJpzfR.js → index-CLdN0W98.js} +47 -47
- package/dist/index-CPP7L10q.cjs +1 -0
- package/dist/index-CSWIBSmo.cjs +1 -0
- package/dist/{index-DEobyz7r.js → index-CTgZZ96L.js} +6 -5
- package/dist/{index-WXpPDsev.js → index-CZ1ui4mT.js} +1 -1
- package/dist/index-CfQvGqaX.cjs +1 -0
- package/dist/index-CgJYAzeA.cjs +1 -0
- package/dist/{index-Cuj-fGNO.cjs → index-ChZHGw_N.cjs} +1 -1
- package/dist/index-ChtmIuBu.js +29771 -0
- package/dist/index-CjFcaJcL.cjs +1 -0
- package/dist/index-CjTmkzBO.js +24 -0
- package/dist/{index-Dtw4WkUo.cjs → index-CngO0AUc.cjs} +1 -1
- package/dist/index-CqCPdyGu.js +1248 -0
- package/dist/index-Cr6pWv0l.cjs +1 -0
- package/dist/{index-Cw95lvvp.js → index-D8Msszln.js} +223 -223
- package/dist/index-DDvUG6fk.js +22 -0
- package/dist/{index-CdMrhxHS.js → index-DMlIMlyC.js} +10 -10
- package/dist/{index-3Cdyqd1B.cjs → index-DOBeGYzT.cjs} +1 -1
- package/dist/index-DP0k43fj.cjs +1 -0
- package/dist/index-DTxccgVM.cjs +1 -0
- package/dist/{index-JAJeIBYE.cjs → index-DVAGljX0.cjs} +1 -1
- package/dist/{index-B5Vi6RBj.cjs → index-DVCrYVKw.cjs} +1 -1
- package/dist/{index-CY2iphpd.cjs → index-DbniLh9G.cjs} +1 -1
- package/dist/index-Dj_ofPeK.cjs +1 -0
- package/dist/{index-DtogzZej.js → index-DocnYz5P.js} +1 -1
- package/dist/index-DrL7vroa.js +319 -0
- package/dist/index-Dt2McMki.js +13668 -0
- package/dist/{index-Cphx1eY1.js → index-Gba1Qfcc.js} +7 -8
- package/dist/{index-DMb9Vu-7.js → index-IUkCD4R_.js} +1 -1
- package/dist/{index-DAyzDsjs.js → index-K6BRW_Bw.js} +1 -1
- package/dist/{index-DzM8zZqe.js → index-OH9t-y2p.js} +4 -4
- package/dist/index-PNDdZKYG.cjs +1 -0
- package/dist/{index-Dn04IPFM.js → index-QETLKFyV.js} +10 -10
- package/dist/{index-BWHtpT9o.cjs → index-RgTvyK54.cjs} +1 -1
- package/dist/{index-CF_0RdqV.cjs → index-dukFqRog.cjs} +1 -1
- package/dist/{index-C9Boo2Cw.cjs → index-dyoOdMKX.cjs} +1 -1
- package/dist/index-f9bwREQl.cjs +1 -0
- package/dist/{index-Dxoxm0Cc.js → index-mmWAqzR5.js} +25 -25
- package/dist/index-rPc9VS0S.cjs +1 -0
- package/dist/index-tPamnhR2.js +236 -0
- package/dist/{index-H3kf9EQv.js → index-tX2Hs05F.js} +11 -10
- package/dist/{index-DEU-pXeW.js → index-uvns6W6E.js} +1838 -1812
- package/dist/index-weauvEnW.cjs +4 -0
- package/dist/{index-B8xEed7C.cjs → index-wlnPb2aB.cjs} +1 -1
- package/dist/{index.vue_vue_type_script_setup_true_lang-iyZtrhDf.js → index.vue_vue_type_script_setup_true_lang-C4G6mB7R.js} +28 -28
- package/dist/{index.vue_vue_type_script_setup_true_lang-CaYQQb8M.cjs → index.vue_vue_type_script_setup_true_lang-CWi4UVPF.cjs} +1 -1
- package/dist/{index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-qefZ9E5G.js → index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CtN9Ij0Y.js} +53 -23
- package/dist/{index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CTcahF4Z.cjs → index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-mQIxU0SD.cjs} +90 -90
- package/dist/{index.vue_vue_type_style_index_0_scoped_6bfd62db_lang-Cxjh1E1z.js → index.vue_vue_type_style_index_0_scoped_1966237d_lang-D3xcEtDT.js} +6488 -6474
- package/dist/{index.vue_vue_type_style_index_0_scoped_6bfd62db_lang-0eNHRdYw.cjs → index.vue_vue_type_style_index_0_scoped_1966237d_lang-DwIFJsxs.cjs} +14 -14
- package/dist/{index.vue_vue_type_style_index_0_scoped_86d2b6b8_lang-kymzIBO8.js → index.vue_vue_type_style_index_0_scoped_86d2b6b8_lang-D5CTJUDi.js} +17 -17
- package/dist/{index.vue_vue_type_style_index_0_scoped_86d2b6b8_lang-GlR2V0TC.cjs → index.vue_vue_type_style_index_0_scoped_86d2b6b8_lang-VPQBXOPW.cjs} +1 -1
- package/dist/index.vue_vue_type_style_index_1_lang-DraQDAAw.cjs +32 -0
- package/dist/index.vue_vue_type_style_index_1_lang-hffXwR3x.js +7028 -0
- package/dist/isUndefined-4Qg9wncf.js +84 -0
- package/dist/isUndefined-BEt4O79g.cjs +1 -0
- package/dist/{main-C6I42yaU.js → main-CBCk94h5.js} +30 -29
- package/dist/main-DO_PN7jt.cjs +1 -0
- package/dist/ss-component.cjs +1 -1
- package/dist/ss-component.css +2 -2
- package/dist/ss-component.js +11 -11
- package/dist/ss-component2.cjs +1 -1
- package/dist/ss-component2.js +12 -12
- package/dist/threeModel-GKSAzHfe.cjs +1 -0
- package/dist/{threeModel-BEt5OVCP.js → threeModel-RJwJMtfW.js} +91 -92
- package/dist/{threePreview-BUZRvBRx.js → threePreview-BSqdALPK.js} +3 -3
- package/dist/{threePreview-Dyzqu5s7.cjs → threePreview-CKvbwCiX.cjs} +1 -1
- package/dist/threeSceneView-BVbVe_Et.js +1277 -0
- package/dist/threeSceneView-KvCERteS.cjs +5 -0
- package/dist/{threeViewerHost-IhSFkCeD.js → threeViewerHost-AuhfL2Cn.js} +55 -57
- package/dist/threeViewerHost-D0pu5wk5.cjs +1 -0
- package/package.json +1 -1
- package/public/icons/svg/editTable.svg +1 -1
- package/public/icons/svg/export.svg +1 -0
- package/public/icons/svg/model.svg +1 -0
- package/public/icons/svg/three.svg +1 -0
- package/dist/animationData-B2T3Oamw.js +0 -108
- package/dist/animationData-Db_9HBoM.cjs +0 -1
- package/dist/iconfont-CZj6ltAs.cjs +0 -1
- package/dist/index-2KKrCkl8.cjs +0 -1
- package/dist/index-2OWkrGDh.js +0 -24
- package/dist/index-B1iXzkUF.cjs +0 -1
- package/dist/index-BBB4VObc.cjs +0 -11
- package/dist/index-BIVWMqJQ.cjs +0 -1
- package/dist/index-BWpZSzL1.cjs +0 -1
- package/dist/index-BllULnvx.cjs +0 -1
- package/dist/index-BvO1uTn0.js +0 -21
- package/dist/index-C2bI4adc.js +0 -8628
- package/dist/index-C9pN8_un.js +0 -548
- package/dist/index-CPdKWCSo.cjs +0 -1
- package/dist/index-CQfFbeTJ.cjs +0 -1
- package/dist/index-CZJOPfp5.js +0 -1152
- package/dist/index-Cb0q1Y5b.cjs +0 -1
- package/dist/index-Cfomm0G1.cjs +0 -109
- package/dist/index-CvvFU_QA.cjs +0 -1
- package/dist/index-DYMLmifU.cjs +0 -1
- package/dist/index-DfPyuGyq.js +0 -101
- package/dist/index-Dm2qfeUm.cjs +0 -1
- package/dist/index-DtX1F0sz.cjs +0 -4
- package/dist/index-Du3VUDcF.cjs +0 -1
- package/dist/index-VWNqRYy9.js +0 -36270
- package/dist/index-kmj8K3JX.cjs +0 -1
- package/dist/index-ndZw4AQJ.cjs +0 -1
- package/dist/index-y5FEcncv.cjs +0 -1
- package/dist/index.vue_vue_type_style_index_1_lang-Bmwy3cgo.cjs +0 -42
- package/dist/index.vue_vue_type_style_index_1_lang-Rs1M3B8e.js +0 -11984
- package/dist/main-2gDZp_zL.cjs +0 -1
- package/dist/threeModel-DgOcIXVI.cjs +0 -1
- package/dist/threeSceneView-BZx98QgN.js +0 -1450
- package/dist/threeSceneView-DSkGJN5d.cjs +0 -5
- package/dist/threeViewerHost-T_51aUg5.cjs +0 -1
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";var Ee=Object.defineProperty;var Ne=(b,r,s)=>r in b?Ee(b,r,{enumerable:!0,configurable:!0,writable:!0,value:s}):b[r]=s;var ae=(b,r,s)=>Ne(b,typeof r!="symbol"?r+"":r,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),M=require("./iconfont-CZj6ltAs.cjs"),me=require("./index-Cfomm0G1.cjs"),E=require("./STLLoader-BNh7D2zV.cjs"),Y=require("./index-DtX1F0sz.cjs"),se=require("./index.vue_vue_type_style_index_1_lang-Bmwy3cgo.cjs"),B=require("./index-BBB4VObc.cjs"),ie=require("./animationData-Db_9HBoM.cjs"),ce=require("./index-kmj8K3JX.cjs"),le=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),_e="http://222.92.178.198:60000/chfs/shared/Insofrobot/urdf";function re(b){if(b==null||!isFinite(b))return"";const r=b/(1024*1024);if(r>=1)return`${r.toFixed(1)} MB`;const s=b/1024;return s>=1?`${s.toFixed(1)} KB`:`${b} B`}function ue(b){try{const r=b.split("?")[0].split("#")[0];return r.substring(r.lastIndexOf("/")+1)||r}catch{return b}}function ke(b){const{manager:r,baseFolderUrl:s,onFileProgress:c}=b,g=new me.URDFLoader(r);return g.packages=f=>`${s.endsWith("/")?s:s+"/"}${f}/`,g.loadMeshCb=(f,V,w)=>{const p=(()=>{const _=f.split("?")[0].split("#")[0],d=_.lastIndexOf(".");return d>=0?_.slice(d+1).toLowerCase():void 0})();switch(p){case"obj":{const _=(()=>{try{return new URL(".",f).toString()}catch{const t=f.lastIndexOf("/");return t>=0?f.slice(0,t+1):f}})(),d=(()=>{var i;return(((i=f.split("/").pop())==null?void 0:i.split("?")[0].split("#")[0])??"").replace(/\.[^/.?#]+$/,"")})(),y=`${_}${d}.mtl`,n=t=>{const i=new E.OBJLoader(V);t&&i.setMaterials(t),i.load(f,l=>w(l),l=>c==null?void 0:c(f,l==null?void 0:l.loaded,l==null?void 0:l.total),l=>{console.error(`[URDF 资源加载失败,已跳过] 无法加载 OBJ 模型: ${f}`,l),w(new E.Group)})},o=new E.MTLLoader(V);o.setResourcePath(_),o.load(y,t=>{try{t.preload()}catch{}n(t)},t=>c==null?void 0:c(y,t==null?void 0:t.loaded,t==null?void 0:t.total),t=>{console.warn(`[URDF 资源警告] 未找到或加载材质失败: ${y}。将尝试无材质加载。`),n(void 0)});break}case"stl":{new E.STLLoader(V).load(f,d=>{const y=new E.MeshPhongMaterial({color:12303291,shininess:30}),n=new E.Mesh(d,y);n.castShadow=!0,n.receiveShadow=!0,w(n)},d=>c==null?void 0:c(f,d==null?void 0:d.loaded,d==null?void 0:d.total),d=>{console.error(`[URDF 资源加载失败,已跳过] 无法加载 STL 模型: ${f}`,d),w(new E.Group)});break}default:console.error(`[URDF 资源加载失败,已跳过] 不支持的网格格式: .${p} (路径: ${f})`),w(new E.Group)}},g}function Ce(b,r,s,c){return{loadSceneFromFile:f=>new Promise((V,w)=>{s.value=!0,c.value="正在初始化 URDF 加载器...";let p=0,_=0,d=null;const y=new E.LoadingManager;y.onStart=(o,t,i)=>{p=i||0,_=t||0,c.value=p>0?`开始下载资源: 0 / ${p}`:"开始下载资源...",s.value=!0},y.onProgress=(o,t,i)=>{_=t,p=i;const l=`正在加载 ${t} / ${i} 个文件: ${ue(o)}`;c.value=l,t===i&&(c.value="资源加载完成,正在处理模型...",setTimeout(()=>{if(d){d.updateMatrixWorld(!0);const m=new E.Box3().setFromObject(d);m.isEmpty()&&console.warn("模型加载完成,但所有可视化网格均加载失败,模型将不可见。"),d.userData.boundingBox=m,d.traverse(k=>{k.isMesh&&(k.castShadow=!0,k.receiveShadow=!0)}),V(d)}else w(new Error("URDF 文件本身加载失败。"));c.value="模型加载完成",setTimeout(()=>{c.value==="模型加载完成"&&(s.value=!1,c.value="")},500)},100))},y.onError=o=>{console.warn(`LoadingManager 报告一个资源加载失败: ${o}。加载流程将继续。`)};const n=(o,t,i)=>{const l=ue(o);let m;i&&i>0?m=`${l}(${re(t)} / ${re(i)})`:t&&t>0?m=`${l}(已下载 ${re(t)})`:m=`${l}`,c.value=`正在下载第 ${_+1} / ${p} 个文件: ${m}`};try{const o=URL.createObjectURL(f);ke({manager:y,baseFolderUrl:_e,onFileProgress:n}).load(o,i=>{d=i},void 0,i=>{console.error(`加载 URDF 文件 (${f.name}) 时发生致命错误:`,i),c.value="URDF 文件解析失败",s.value=!1,w(new Error(`加载 URDF 文件失败: ${f.name}`,{cause:i}))})}catch(o){console.error("初始化 URDF 加载时发生致命错误:",o),c.value="模型加载失败",s.value=!1,w(o)}})}}class Se{constructor(r){ae(this,"robot");ae(this,"movableJoints");this.robot=r,this.movableJoints=this.getMovableJoints()}getMovableJoints(){return Object.values(this.robot.joints).filter(r=>r.jointType!=="fixed")}getMovableJointNames(){return this.movableJoints.map(r=>r.name)}setJointAngle(r,s){const c=this.robot.joints[r];if(!c||c.jointType==="fixed")return console.warn(`关节 ${r} 不存在或不可动`),!1;if(c.limit){const g=Math.max(c.limit.lower,Math.min(c.limit.upper,s));g!==s&&console.warn(`关节 ${r} 角度被限制在 [${c.limit.lower}, ${c.limit.upper}]`),c.setJointValue(g)}else c.setJointValue(s);return!0}setJointAngles(r){Object.entries(r).forEach(([s,c])=>{typeof c=="number"&&!isNaN(c)&&this.setJointAngle(s,c)})}getCurrentJointStates(){const r={};return this.movableJoints.forEach(s=>{r[s.name]=s.angle||0}),r}resetToZero(){this.movableJoints.forEach(r=>{r.setJointValue(0)})}getJointLimits(r){const s=this.robot.joints[r];return!s||!s.limit?null:{lower:s.limit.lower,upper:s.limit.upper}}async animateToState(r,s=1e3,c){const g=this.getCurrentJointStates(),f=Date.now();return new Promise(V=>{const w=()=>{const p=Date.now()-f,_=Math.min(p/s,1),d=this.easeInOutCubic(_),y={};Object.keys(r).forEach(n=>{const o=g[n]||0,t=r[n];y[n]=o+(t-o)*d}),this.setJointAngles(y),c&&c(_),_<1?requestAnimationFrame(w):V()};w()})}easeInOutCubic(r){return r<.5?4*r*r*r:1-Math.pow(-2*r+2,3)/2}async playSequence(r,s=1e3,c){for(let g=0;g<r.length;g++)await this.animateToState(r[g],s,f=>{c&&c(g,f)})}}const K=.001,X=E.MathUtils.degToRad,pe=b=>b.reduce((r,s)=>{let c=0;const g=s.Y??0,f=s.C??0,V=s.R??0;return g>0&&(c+=g),f>0&&V>0&&(c+=V*X(f)),r+c},0),ve=b=>{const r=[],s=b.Y??0,c=b.B??0,g=b.C??0,f=b.R??0,V={pos:new E.Vector3(0,0,0),localY:new E.Vector3(0,1,0),localX:new E.Vector3(1,0,0),localZ:new E.Vector3(0,0,1)};if(!s&&!g)return r;if(r.push(V.pos.clone()),c!==0){const w=new E.Matrix4().makeRotationAxis(V.localY,X(c));V.localX.applyMatrix4(w),V.localZ.applyMatrix4(w)}if(s>0&&(V.pos.add(V.localY.clone().multiplyScalar(s*K)),r.push(V.pos.clone())),g>0&&f>0){const w=X(g),p=f*K,_=V.pos.clone().add(V.localX.clone().multiplyScalar(-p)),d=Math.max(16,Math.ceil(g/5));for(let y=1;y<=d;y++){const n=w*y/d,o=new E.Matrix4().makeRotationAxis(V.localZ,n),i=V.localX.clone().multiplyScalar(p).applyMatrix4(o),l=_.clone().add(i);r.push(l)}}return r};function oe(b,r,s,c,g,f=0){let V=r.slice(0,g+1);const w=r[g+1];if(w&&f>0){const t={...w,B:(w.B??0)*f,C:(w.C??0)*f};V.push(t)}const p=pe(V),_=Math.max(0,s-p),d=[];d.push(new E.Vector3(0,0,0));const y=new E.Vector3(0,_*K,0);_>0&&d.push(y);let n={pos:y.clone(),localY:new E.Vector3(0,1,0),localX:new E.Vector3(1,0,0),localZ:new E.Vector3(0,0,1)};const o=[];for(let t=V.length-1;t>=0;t--){const i=V[t],l=ve(i);if(l.length>0){const m=l.map($=>{const A=$.clone(),O=new E.Matrix4;return O.makeBasis(n.localX,n.localY,n.localZ),A.applyMatrix4(O),A.add(n.pos)});o.push(m);const k=m[m.length-1];n.pos=k.clone();const z=i.B??0,R=i.C??0;if(z!==0){const $=new E.Matrix4().makeRotationAxis(n.localY,X(z));n.localX.applyMatrix4($),n.localZ.applyMatrix4($)}if(R>0){const $=X(R),A=new E.Matrix4().makeRotationAxis(n.localZ,$);n.localY.applyMatrix4(A),n.localX.applyMatrix4(A)}}}for(const t of o)t.length>1&&d.push(...t.slice(1));d.length<2&&d.push(new E.Vector3(0,.001,0));try{const t=new E.CatmullRomCurve3(d,!1,"catmullrom",.01),i=new E.TubeGeometry(t,Math.max(2,d.length*4),c*K,18,!1);b.geometry.dispose(),b.geometry=i}catch(t){console.error("管件更新失败",t)}}function de(b,r,s,c=0){let g=b.slice(0,s+1);const f=b[s+1];if(f&&c>0){const n={...f,B:(f.B??0)*c,C:(f.C??0)*c};g.push(n)}const V=pe(g),w=Math.max(0,r-V),p=[];p.push(new E.Vector3(0,0,0));const _=new E.Vector3(0,w*K,0);w>0&&p.push(_);let d={pos:_.clone(),localY:new E.Vector3(0,1,0),localX:new E.Vector3(1,0,0),localZ:new E.Vector3(0,0,1)};const y=[];for(let n=g.length-1;n>=0;n--){const o=g[n],t=ve(o);if(t.length>0){const i=t.map(z=>{const R=z.clone(),$=new E.Matrix4;return $.makeBasis(d.localX,d.localY,d.localZ),R.applyMatrix4($),R.add(d.pos)});y.push(i);const l=i[i.length-1];d.pos=l.clone();const m=o.B??0,k=o.C??0;if(m!==0){const z=new E.Matrix4().makeRotationAxis(d.localY,X(m));d.localX.applyMatrix4(z),d.localZ.applyMatrix4(z)}if(k>0){const z=X(k),R=new E.Matrix4().makeRotationAxis(d.localZ,z);d.localY.applyMatrix4(R),d.localX.applyMatrix4(R)}}}for(const n of y)n.length>1&&p.push(...n.slice(1));return p.length<2&&p.push(new E.Vector3(0,.001,0)),p}function te(b,r,s,c,g,f,V,w=0,p=0){const _=g-p,d=de(s,_,V,w);let n=de(c,p,V,w);n.forEach(t=>t.y=-t.y),n.reverse();const o=[...n,...d];try{const t=new E.CatmullRomCurve3(o,!1,"catmullrom",.01),i=new E.TubeGeometry(t,Math.max(2,o.length*4),f*K,18,!1);r.geometry.dispose(),b.geometry.dispose(),r.parent&&r.parent.remove(r),b.geometry=i}catch(t){console.error("管件更新失败",t)}}const W={SINGLE:"单机器人弯管",DOUBLE:"双机器人弯管"},Me={class:"panel-content"},$e={class:"action-bar"},xe={key:0,class:"animation-controls"},Re={class:"control-row"},De={class:"control-row"},Pe={class:"control-row"},Le={class:"frame-info"},Te={class:"control-row"},Fe={class:"progress-bar"},Be={key:1,class:"table-footer"},Ae={class:"dialog-footer"},ze=e.defineComponent({__name:"animationPanel",props:{model:{},threeData:{},isSelfWindow:{type:Boolean}},emits:["getThreeData"],setup(b,{emit:r}){const s=b,c=r,g=e.ref(),f=e.ref(),V=e.ref("单机器人弯管");e.watch(()=>s.threeData,()=>{const u=se.cloneDeep(s.threeData),a=u==null?void 0:u.data;if(V.value=a==null?void 0:a.任务类型,!s.isSelfWindow&&s.threeData){let h={};V.value===W.SINGLE&&(h=u==null?void 0:u.singleRobotData),V.value===W.DOUBLE&&(h=u==null?void 0:u.doubleRobotData);const{initialPipeLength:C=0,pipeRadius:N=0,clampLength:x=0,animationData:D}=h;R.value=C,$.value=N,A.value=x,g.value=D;const P=se.cloneDeep(g.value);p.value=(P==null?void 0:P["输出(动画数据)"])||[];let U=(P==null?void 0:P["输出(动画数据)Content"])??[];U&&(f.value=U)}},{immediate:!0});const w=async()=>{if(!sessionStorage.getItem("systemKey")){c("getThreeData");return}let a={};V.value===W.SINGLE&&(a=await ie.fetchSingleRobotAnimationData()),V.value===W.DOUBLE&&(a=await ie.fetchDoubleRobotAnimationData());const{initialPipeLength:h=0,pipeRadius:C=0,clampLength:N=0,animationData:x}=a;R.value=h,$.value=C,A.value=N,g.value=x;const D=se.cloneDeep(g.value);p.value=(D==null?void 0:D["输出(动画数据)"])||[];let P=(D==null?void 0:D["输出(动画数据)Content"])??[];P&&(f.value=P)},p=e.ref([]),_=e.ref(!1),d=e.ref(""),y=e.ref(!1),n=e.ref(0),o=e.ref(0),t=e.ref(1e3),i=e.ref(null);let l=!1;const m=e.shallowRef(null),k=e.shallowRef(null),z=e.shallowRef(null),R=e.ref(1302),$=e.ref(12.5),A=e.ref(30),O=e.ref([]),q=e.ref(null),J=e.computed(()=>s.model?Object.values(s.model.joints).filter(u=>u.jointType!=="fixed").map(u=>u.name):[]),ne=e.ref(["Y","B","C","R"]),F=e.computed(()=>[...J.value,...ne.value]),Z=e.computed(()=>F.value.length>0?`请按以下格式粘贴数据 (第一行为表头,使用 Tab 分隔):
|
|
2
|
-
${F.value.join(" ")}
|
|
3
|
-
0 0 0 ...
|
|
4
|
-
1 2 3 ...`:"请先加载模型。"),H=(u,a)=>{if(!a)return null;const h=u.links[a];if(!h)return console.warn(`在模型中未找到名为 '${a}' 的 link`),console.log("可用的链接:",Object.keys(u.links)),null;let C=null;return h.traverse(N=>{N instanceof E.Mesh&&!C&&(C=N)}),C||console.warn(`在 link '${a}' 中未找到可用的 Mesh 对象`),C},Q=()=>{z.value&&(z.value.visible=!0),m.value&&m.value.parent&&m.value.parent.remove(m.value),z.value=null,m.value=null,k.value=null};e.watch(F,(u,a)=>{if(JSON.stringify(u)!==JSON.stringify(a))if(u.length>0){const h=u.reduce((C,N)=>(C[N]="0",C),{});p.value=[h]}else p.value=[]},{immediate:!0}),e.watch(()=>s.model,u=>{Q(),u?(i.value=new Se(u),O.value=Object.keys(u.links),O.value.includes("Pipe_Link")?q.value="Pipe_Link":q.value=null):(i.value=null,O.value=[],q.value=null)},{immediate:!0}),e.watch([q,A],([u,a])=>{if(Q(),s.model&&u){const h=H(s.model,u);if(console.log(h,"meshToReplace"),h&&h.parent){z.value=h;const C=new E.Mesh(h.geometry.clone(),h.material);if(C.name="managed_pipe_clone",h.parent.add(C),C.position.copy(h.position),C.rotation.copy(h.rotation),C.scale.copy(h.scale),h.visible=!1,V.value===W.SINGLE&&(C.position.y-=a*.001),m.value=C,V.value===W.DOUBLE){const N=new E.Mesh(h.geometry.clone(),h.material);N.name="managed_oppsite_pipe_clone",N.position.copy(h.position),N.rotation.copy(h.rotation),N.scale.copy(h.scale),h.parent.add(N),k.value=N}m.value&&k.value&&te(m.value,k.value,[],[],R.value,$.value,0,0,A.value),B.ElMessage.success(`已将 Link: "${u}" 设置为当前管件`)}else u&&console.warn(`在 link '${u}' 中未找到可替换的网格或其没有父级。`)}});const ee=()=>p.value.map(u=>({Y:parseFloat(u.Y)||0,B:parseFloat(u.B)||0,C:parseFloat(u.C)||0,R:parseFloat(u.R)||0})),T=()=>{const u=[],a=[];return p.value.forEach(h=>{const{Y1:C,B1:N,C1:x,R1:D,Y2:P,B2:U,C2:j,R2:I}=h;u.push({Y:parseFloat(C)||0,B:parseFloat(N)||0,C:parseFloat(x)||0,R:parseFloat(D)||0}),a.push({Y:parseFloat(P)||0,B:parseFloat(U)||0,C:parseFloat(j)||0,R:parseFloat(I)||0})}),{posPipeYbcr:u,negPipeYbcr:a}},v=u=>{if(u<0||u>=p.value.length){console.error(`帧索引 ${u} 超出范围`);return}const a=p.value[u];if(console.log(`应用第 ${u} 帧数据 ${a.value}`),i.value){const h={};J.value.forEach(C=>{const N=parseFloat(a[C]);isNaN(N)||(h[C]=N)}),i.value.setJointAngles(h)}if(m.value&&k.value){const h=T();console.log("ybcr数据:",h),te(m.value,k.value,h.posPipeYbcr,h.negPipeYbcr,R.value,$.value,u,0,A.value);return}if(m.value){const h=ee();console.log("ybcr数据:",h),oe(m.value,h,R.value,$.value,u,0);return}n.value=u},G=async()=>{if(p.value.length===0){B.ElMessage.error("无法播放动画:无数据");return}y.value=!0,l=!1,n.value=0;const u=m.value?ee():[];try{for(let a=0;a<p.value.length&&!l;a++){n.value=a;const h=p.value[a],C={};i.value&&J.value.forEach(N=>{const x=parseFloat(h[N]);isNaN(x)||(C[N]=x)}),i.value?await i.value.animateToState(C,t.value,N=>{if(o.value=(a+N)/p.value.length*100,m.value&&k.value){const x=T();console.log("ybcr数据:",u),te(m.value,k.value,x.posPipeYbcr,x.negPipeYbcr,R.value,$.value,a-1,N,A.value)}else m.value&&oe(m.value,u,R.value,$.value,a-1,N)}):m.value&&k.value?await new Promise(N=>{const x=performance.now();let D;const P=U=>{if(l){cancelAnimationFrame(D),N();return}const j=U-x,I=Math.min(j/t.value,1);o.value=(a+I)/p.value.length*100;const L=T();te(m.value,k.value,L.posPipeYbcr,L.negPipeYbcr,R.value,$.value,a-1,I,A.value),I<1?D=requestAnimationFrame(P):N()};D=requestAnimationFrame(P)}):m.value?await new Promise(N=>{const x=performance.now();let D;const P=U=>{if(l){cancelAnimationFrame(D),N();return}const j=U-x,I=Math.min(j/t.value,1);o.value=(a+I)/p.value.length*100,oe(m.value,u,R.value,$.value,a-1,I),I<1?D=requestAnimationFrame(P):N()};D=requestAnimationFrame(P)}):(await new Promise(N=>setTimeout(N,t.value)),o.value=(a+1)/p.value.length*100)}l||B.ElMessage.success("动画播放完成")}catch(a){console.error("动画播放出错:",a),B.ElMessage.error("动画播放出错")}finally{y.value=!1,o.value=0}},S=()=>{l=!0,y.value=!1,o.value=0,B.ElMessage.info("动画已停止")},fe=()=>{if(i.value&&i.value.resetToZero(),console.log("pipeMesh.value",m.value),m.value&&k.value){const u=T();te(m.value,k.value,u.posPipeYbcr,u.negPipeYbcr,R.value,$.value,-1,0,A.value)}else if(m.value){const u=ee();oe(m.value,u,R.value,$.value,-1,0)}n.value=0,B.ElMessage.success("机器人和管件已重置")},ge=()=>{console.log("当前管件Mesh:",m.value)},he=u=>{y.value&&S(),v(u)},Ve=async()=>{if(F.value.length===0){B.ElMessage.warning("没有可导出的表头");return}const u=F.value.join(" ");try{await navigator.clipboard.writeText(u),B.ElMessage.success("表头已成功复制到剪贴板!")}catch(a){console.error("复制失败:",a),B.ElMessage.error("复制失败,请检查浏览器权限或手动复制。")}},be=()=>{if(!d.value.trim()){B.ElMessage.warning("导入内容不能为空");return}const u=d.value.trim().split(`
|
|
5
|
-
`).filter(x=>x.trim()!=="");if(u.length<2){B.ElMessage.error("导入数据至少需要包含表头行和一行数据");return}const a=u[0].split(" ").map(x=>x.trim()),h={};if(a.forEach((x,D)=>{F.value.includes(x)&&(h[D]=x)}),Object.keys(h).length===0){B.ElMessage.error("没有找到匹配的表头,请检查表头名称是否正确");return}const N=u.slice(1).map(x=>{const D=x.split(" "),P={};return F.value.forEach(U=>{P[U]="0"}),Object.entries(h).forEach(([U,j])=>{const I=D[parseInt(U)];I!==void 0&&I.trim()!==""&&(P[j]=I.trim())}),P});N.length>0?(p.value=N,B.ElMessage.success(`成功导入 ${N.length} 行数据!`),_.value=!1,d.value=""):B.ElMessage.error("未能解析到有效数据,请检查格式。")},ye=()=>{const u=F.value.reduce((a,h)=>(a[h]="0",a),{});p.value.push(u)},we=u=>`第 ${u+1} 帧`;return e.onUnmounted(()=>{Q(),l=!0}),(u,a)=>{var U,j,I;const h=e.resolveComponent("el-icon"),C=e.resolveComponent("el-input-number"),N=e.resolveComponent("el-slider"),x=e.resolveComponent("el-progress"),D=e.resolveComponent("el-input"),P=e.resolveComponent("el-dialog");return e.openBlock(),e.createElementBlock("div",Me,[e.createElementVNode("div",$e,[e.createVNode(Y._sfc_main$1,{onClick:w,modelValue:"获取数据"}),e.createVNode(Y._sfc_main$1,{onClick:Ve,disabled:F.value.length===0,modelValue:"导出表头"},null,8,["disabled"]),e.createVNode(Y._sfc_main$1,{modelValue:"播放",onClick:G,disabled:p.value.length===0||y.value,buttonType:"primary"},{default:e.withCtx(()=>[y.value?(e.openBlock(),e.createBlock(h,{key:0,class:"is-loading"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.loading_default))]),_:1})):e.createCommentVNode("",!0)]),_:1},8,["disabled"]),e.createVNode(Y._sfc_main$1,{onClick:S,modelValue:"停止",buttonType:"danger"}),e.createVNode(Y._sfc_main$1,{onClick:fe,modelValue:"重置",buttonType:"primary"}),e.createVNode(Y._sfc_main$1,{onClick:ge,modelValue:"测试功能",buttonType:"primary"})]),p.value.length>0?(e.openBlock(),e.createElementBlock("div",xe,[e.createElementVNode("div",Re,[a[9]||(a[9]=e.createElementVNode("label",null,"帧间隔 (ms):",-1)),e.createVNode(C,{modelValue:t.value,"onUpdate:modelValue":a[0]||(a[0]=L=>t.value=L),min:100,max:5e3,step:100,size:"small",style:{width:"120px"}},null,8,["modelValue"]),a[10]||(a[10]=e.createElementVNode("label",null,"管件总长 (mm):",-1)),e.createVNode(C,{modelValue:R.value,"onUpdate:modelValue":a[1]||(a[1]=L=>R.value=L),min:0,size:"small",style:{width:"120px"}},null,8,["modelValue"]),a[11]||(a[11]=e.createElementVNode("label",null,"管件半径 (mm):",-1)),e.createVNode(C,{modelValue:$.value,"onUpdate:modelValue":a[2]||(a[2]=L=>$.value=L),min:0,size:"small",style:{width:"120px"}},null,8,["modelValue"]),a[12]||(a[12]=e.createElementVNode("label",null,"夹持长度 (mm):",-1)),e.createVNode(C,{modelValue:A.value,"onUpdate:modelValue":a[3]||(a[3]=L=>A.value=L),min:0,size:"small",style:{width:"120px"}},null,8,["modelValue"])]),e.createElementVNode("div",De,[a[13]||(a[13]=e.createElementVNode("label",null,"管件 Mesh:",-1)),e.createVNode(e.unref(ce.ElSelect),{modelValue:q.value,"onUpdate:modelValue":a[4]||(a[4]=L=>q.value=L),placeholder:"选择管件Link",size:"small",disabled:"",style:{width:"180px"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,L=>(e.openBlock(),e.createBlock(e.unref(ce.ElOption),{key:L,label:L,value:L},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled"])]),e.createElementVNode("div",Pe,[a[14]||(a[14]=e.createElementVNode("label",null,"当前帧:",-1)),e.createElementVNode("span",Le,e.toDisplayString(n.value+1)+" / "+e.toDisplayString(p.value.length),1)]),e.createElementVNode("div",Te,[a[15]||(a[15]=e.createElementVNode("label",null,"动画进度:",-1)),e.createVNode(N,{modelValue:n.value,"onUpdate:modelValue":a[5]||(a[5]=L=>n.value=L),min:0,max:p.value.length>0?p.value.length-1:0,step:1,"format-tooltip":we,onInput:he,disabled:p.value.length===0,style:{"flex-grow":"1",margin:"0 10px"}},null,8,["modelValue","max","disabled"])]),e.createElementVNode("div",Fe,[e.createVNode(x,{percentage:o.value,"show-text":!1,"stroke-width":6},null,8,["percentage"])])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(me.ssTable,{itemData:(U=f.value)==null?void 0:U.compData,key:(j=f.value)==null?void 0:j.id,index:(I=f.value)==null?void 0:I.id,showHeader:!1},null,8,["itemData","index"])),F.value.length>0?(e.openBlock(),e.createElementBlock("div",Be,[e.createVNode(Y._sfc_main$1,{modelValue:"添加新行",onClick:ye,buttonType:"primary"},{default:e.withCtx(()=>[y.value?(e.openBlock(),e.createBlock(h,{key:0,class:"is-loading"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.loading_default))]),_:1})):e.createCommentVNode("",!0)]),_:1})])):e.createCommentVNode("",!0),e.createVNode(P,{modelValue:_.value,"onUpdate:modelValue":a[8]||(a[8]=L=>_.value=L),title:"导入数据",width:"500px"},{footer:e.withCtx(()=>[e.createElementVNode("span",Ae,[e.createVNode(Y._sfc_main$1,{modelValue:"取消",onClick:a[7]||(a[7]=L=>_.value=!1)}),e.createVNode(Y._sfc_main$1,{modelValue:"确认导入",onClick:be,type:"primary"})])]),default:e.withCtx(()=>[a[16]||(a[16]=e.createElementVNode("p",{class:"import-instructions"}," 请从Excel或csv中复制数据 (首行为表头, Tab分隔) ",-1)),e.createVNode(D,{modelValue:d.value,"onUpdate:modelValue":a[6]||(a[6]=L=>d.value=L),type:"textarea",rows:10,placeholder:Z.value},null,8,["modelValue","placeholder"])]),_:1,__:[16]},8,["modelValue"])])}}}),Je=le._export_sfc(ze,[["__scopeId","data-v-3736fa93"]]),Ie={class:"panel-content"},Ue={key:0,class:"joints-list"},je={class:"joint-info-row"},Oe={class:"joint-left"},Ye={class:"joint-name"},qe={class:"joint-range"},Ge={class:"joint-type"},Xe={key:0,class:"joint-control-row"},Ze={class:"slider-container"},We=["min","max","value","onInput"],Ke={class:"value-display"},He={class:"joint-value"},Qe={class:"unit"},et={key:1,class:"empty-state"},tt=e.defineComponent({__name:"urdfJointPanel",props:{model:{}},setup(b,{expose:r}){const s=b,c=e.ref([]),g=e.ref(null),f=(n,o=!1)=>n==="revolute"?o?Math.PI:-Math.PI:n==="prismatic"?o?1:-1:0,V=n=>{if(!n||!n.joints)return console.warn("URDF模型无效或不包含关节信息"),[];const o=[];return Object.keys(n.joints).forEach(t=>{var m,k;const i=n.joints[t];if(i.jointType==="fixed")return;const l={lower:((m=i.limit)==null?void 0:m.lower)??f(i.jointType,!1),upper:((k=i.limit)==null?void 0:k.upper)??f(i.jointType,!0)};o.push({name:t,type:i.jointType||"unknown",limit:l,currentValue:i.angle||0,urdfJoint:i})}),o.sort((t,i)=>t.name.localeCompare(i.name))},w=(n,o)=>{var m;const t=c.value.find(k=>k.name===n);if(!t)return;const i=parseFloat(o),l=Math.max(t.limit.lower,Math.min(t.limit.upper,i));t.currentValue=l,(m=s.model)!=null&&m.setJointValue?s.model.setJointValue(n,l):t.urdfJoint.setJointValue(l)},p=()=>{c.value.forEach(n=>{(n.type==="revolute"||n.type==="prismatic")&&w(n.name,0)})},_=()=>{s.model&&c.value.forEach(n=>{n.urdfJoint.angle!==void 0&&n.currentValue!==n.urdfJoint.angle&&(n.currentValue=n.urdfJoint.angle)})},d=()=>{const n=()=>{_(),g.value=requestAnimationFrame(n)};n()},y=()=>{g.value&&(cancelAnimationFrame(g.value),g.value=null)};return e.watch(()=>s.model,n=>{n?c.value=V(n):c.value=[]},{immediate:!0}),e.onMounted(()=>{d()}),e.onUnmounted(()=>{y()}),r({resetAllJoints:p}),(n,o)=>(e.openBlock(),e.createElementBlock("div",Ie,[c.value.length>0?(e.openBlock(),e.createElementBlock("div",Ue,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,t=>(e.openBlock(),e.createElementBlock("div",{key:t.name,class:"joint-item"},[e.createElementVNode("div",je,[e.createElementVNode("div",Oe,[e.createElementVNode("span",Ye,e.toDisplayString(t.name),1),e.createElementVNode("span",qe," ["+e.toDisplayString(t.limit.lower.toFixed(2))+", "+e.toDisplayString(t.limit.upper.toFixed(2))+"] ",1)]),e.createElementVNode("span",Ge,e.toDisplayString(t.type),1)]),t.type==="revolute"||t.type==="prismatic"?(e.openBlock(),e.createElementBlock("div",Xe,[e.createElementVNode("div",Ze,[e.createElementVNode("input",{type:"range",min:t.limit.lower,max:t.limit.upper,step:"0.01",value:t.currentValue,onInput:i=>w(t.name,i.target.value),class:"joint-slider"},null,40,We)]),e.createElementVNode("div",Ke,[e.createElementVNode("span",He,e.toDisplayString(t.currentValue?Number(t.currentValue).toFixed(3):"0.000"),1),e.createElementVNode("span",Qe,e.toDisplayString(t.type==="revolute"?"rad":"m"),1)])])):e.createCommentVNode("",!0)]))),128))])):(e.openBlock(),e.createElementBlock("div",et,o[0]||(o[0]=[e.createElementVNode("p",null,"未检测到可控制的关节",-1)])))]))}}),ot=le._export_sfc(tt,[["__scopeId","data-v-9adcbc67"]]),lt={class:"panel-content"},nt="id",at={__name:"urdfTree",props:{model:Object,maxExpandCount:{type:Number,default:10},expandStrategy:{type:String,default:"breadth",validator:b=>["breadth","firstLevel"].includes(b)}},emits:["nodeClick"],setup(b,{emit:r}){const s=b,c=r,g=e.ref([]),f={children:"children",label:"label"},V=o=>{c("nodeClick",o)},w=(o,t=0)=>{const i=[];return Array.isArray(o)&&(o==null?void 0:o.length)>0&&o.forEach(l=>{if(!(l!=null&&l.isMesh)&&((l==null?void 0:l.type)==="URDFJoint"||(l==null?void 0:l.type)==="URDFLink")){const m={name:l==null?void 0:l.name,label:l==null?void 0:l.name,show:!0,level:t+1,isPenultimate:!1,type:l==null?void 0:l.type,id:l==null?void 0:l.id,limit:(l==null?void 0:l.limit)??"",children:w(l==null?void 0:l.children,t+1),path:l==null?void 0:l.name};i.push(m)}}),i},p=o=>o?[{name:o==null?void 0:o.name,label:o==null?void 0:o.name,show:!0,level:1,isPenultimate:!1,type:o==null?void 0:o.type,id:o==null?void 0:o.id,limit:(o==null?void 0:o.limit)??"",children:w(o==null?void 0:o.children,1),path:o==null?void 0:o.name}]:[],_=(o,t)=>{const i=[],l=[...o];for(;l.length>0&&i.length<t;){const m=l.shift();m.children&&m.children.length>0&&(i.push(m.id),l.push(...m.children))}return i},d=(o,t)=>{const i=[];return o.forEach(l=>{if(l.children&&l.children.length>0){i.push(l.id);const m=l.children.filter(k=>k.children&&k.children.length>0).slice(0,t).map(k=>k.id);i.push(...m)}}),i.slice(0,t+1)},y=e.computed(()=>!g.value||g.value.length===0?[]:s.expandStrategy==="firstLevel"?d(g.value,s.maxExpandCount):_(g.value,s.maxExpandCount)),n=e.computed(()=>s!=null&&s.model?p(s.model):[]);return e.watch(n,o=>{g.value=JSON.parse(JSON.stringify(o))},{immediate:!0}),(o,t)=>{const i=e.resolveComponent("el-tree");return e.openBlock(),e.createElementBlock("div",lt,[e.createVNode(i,{data:g.value,props:f,"default-expanded-keys":y.value,"node-key":nt,onNodeClick:V},null,8,["data","default-expanded-keys"])])}}},st=le._export_sfc(at,[["__scopeId","data-v-0dda287c"]]),rt={class:"obj-viewer-container"},it={class:"buttonGroup-top"},ct={class:"buttonGroup-topLeft"},ut={class:"buttonGroup-left"},dt={class:"buttonGroup-right"},mt={class:"buttonGroup-bottom"},pt={class:"left-panel"},vt={class:"panel-header"},ft={class:"panel-body"},gt={key:1,class:"clipping-content"},ht={class:"radio-group"},Vt={class:"radio-label"},bt={class:"radio-label"},yt={class:"radio-label"},wt={class:"radio-label"},Et={class:"right-panel"},Nt={class:"panel-header"},_t={class:"panel-body"},kt={key:0,class:"loading-overlay"},Ct=e.defineComponent({__name:"threeSceneView",props:{fileBlobs:{default:()=>[]},animationData:{default:()=>({})},threeData:{},isSelfWindow:{type:Boolean}},emits:["getAnimationData","getThreeData"],setup(b,{emit:r}){const s=r,c=b,g=e.ref(null),f=e.ref(!1),V=e.ref(""),w=e.ref(!1),p=e.ref(""),_=e.ref(!1),d=e.ref(""),y=e.shallowRef(null),n=e.shallowRef(null),{currentModels:o,resetView:t,initThreeJS:i,handleResize:l,getThreeJSObjects:m,cleanup:k,setModels:z}=M.useThreeJS(g),{loadSceneFromFile:R}=Ce(m,o,f,V),{isAnimating:$,toggleAnimation:A,stopAnimation:O}=M.useAnimation(m,o),{isClipping:q,activeClippingAxis:J,toggleClipping:ne,updateClippingPlanes:F}=M.useClipping(m,o),Z=T=>{w.value=!0,p.value=T,T==="剖面视图"&&!q.value&&ne()},H=T=>{_.value=!0,d.value=T,T==="动画仿真"&&s("getAnimationData")},Q=()=>{s("getThreeData")},ee=()=>{e.nextTick(()=>{})};return e.watch(()=>c.fileBlobs,T=>{if(T&&T.length>0){const v=T[0];if(!v.name.toLowerCase().endsWith(".urdf")){B.ElMessage.warning("提供的文件不是有效的 urdf 文件。");return}R(v).then(G=>{y.value=G}).catch(G=>{console.error("加载URDF文件时发生错误:",G),B.ElMessage.error("加载urdf模型失败"),y.value=null})}else y.value=null},{immediate:!0,deep:!0}),e.watch(y,T=>{z(T?[T]:[])}),e.onMounted(async()=>{await e.nextTick();try{i(),window.addEventListener("resize",l);const T=m();n.value=T.scene}catch(T){console.error("Three.js 初始化失败:",T),B.ElMessage.error("渲染引擎初始化失败!")}}),e.onBeforeUnmount(()=>{p.value="",d.value="",window.removeEventListener("resize",l),$.value&&O(),k()}),(T,v)=>{const G=e.resolveComponent("el-scrollbar");return e.openBlock(),e.createElementBlock("div",rt,[e.createElementVNode("div",{ref_key:"threejsContainer",ref:g,class:"threejs-container"},null,512),e.createElementVNode("div",it,[e.createVNode(M.SvgIcon,{name:"guanjianjiexi",size:"34"}),e.createVNode(M.SvgIcon,{name:"guanjiekongzhi",size:"34"}),e.createVNode(M.SvgIcon,{name:"gongyishengcheng",size:"34"}),e.createVNode(M.SvgIcon,{name:"buchangshezhi",size:"34"}),e.createVNode(M.SvgIcon,{name:"shuchujiagongchengxu",size:"34"})]),e.createElementVNode("div",ct,[e.createVNode(M.SvgIcon,{name:"viewReset",size:"24",onClick:e.unref(t),title:"重置"},null,8,["onClick"]),e.createVNode(M.SvgIcon,{name:"fangda",size:"24",title:"放大"}),e.createVNode(M.SvgIcon,{name:"suoxiao",size:"24",title:"缩小"}),e.createVNode(M.SvgIcon,{name:"lookAround",size:"24",onClick:e.unref(A),title:e.unref($)?"停止动画":"动画视图"},null,8,["onClick","title"])]),e.createElementVNode("div",ut,[e.createVNode(M.SvgIcon,{name:"jiegoushu",size:"24",onClick:v[0]||(v[0]=S=>Z("场景树")),active:w.value&&p.value==="场景树",title:"场景树"},null,8,["active"]),e.createVNode(M.SvgIcon,{name:"clipping",size:"24",onClick:v[1]||(v[1]=S=>Z("剖面视图")),active:w.value&&p.value==="剖面视图",title:"剖面视图"},null,8,["active"]),e.createVNode(M.SvgIcon,{name:"donghuafangzhen",size:"24",onClick:v[2]||(v[2]=S=>Z("场景树3"))}),e.createVNode(M.SvgIcon,{name:"donghuafangzhen",size:"24",onClick:v[3]||(v[3]=S=>Z("场景4"))})]),e.createElementVNode("div",dt,[e.createVNode(M.SvgIcon,{name:"donghuafangzhen",size:"24"}),e.createVNode(M.SvgIcon,{name:"donghuafangzhen",size:"24"}),e.createVNode(M.SvgIcon,{name:"guanjiekongzhi",size:"24",onClick:v[4]||(v[4]=S=>H("关节控制")),active:_.value&&d.value==="关节控制",title:"关节控制"},null,8,["active"]),e.createVNode(M.SvgIcon,{name:"donghuafangzhen",size:"24",title:"动画仿真",onClick:v[5]||(v[5]=S=>H("动画仿真")),active:_.value&&d.value==="动画仿真"},null,8,["active"]),e.createVNode(M.SvgIcon,{name:"donghuafangzhen",size:"24",title:"urdf动画",onClick:v[6]||(v[6]=S=>H("urdf动画")),active:_.value&&d.value==="urdf动画"},null,8,["active"]),e.createVNode(M.SvgIcon,{name:"donghuafangzhen",size:"24"})]),e.createElementVNode("div",mt,[e.createVNode(M.SvgIcon,{name:"kuaitui",size:"24",backgroundColor:"#ffffff",title:"快退",onClick:v[7]||(v[7]=()=>{})}),e.createVNode(M.SvgIcon,{name:"bofang",size:"24",backgroundColor:"#ffffff",title:"播放",onClick:ee}),e.createVNode(M.SvgIcon,{name:"kuaijin",size:"24",backgroundColor:"#ffffff",title:"快进",onClick:v[8]||(v[8]=()=>{})}),e.createVNode(M.SvgIcon,{name:"zanting",size:"24",backgroundColor:"#ffffff",title:"暂停",onClick:v[9]||(v[9]=()=>{})}),e.createVNode(M.SvgIcon,{name:"zhongzhi",size:"24",backgroundColor:"#ffffff",title:"停止",onClick:v[10]||(v[10]=()=>{})})]),e.withDirectives(e.createElementVNode("div",pt,[e.createElementVNode("div",vt,[e.createElementVNode("span",null,e.toDisplayString(p.value),1),e.createElementVNode("span",{class:"close",onClick:v[11]||(v[11]=S=>w.value=!1)}," X ")]),e.createElementVNode("div",ft,[e.createVNode(G,{height:"100%"},{default:e.withCtx(()=>[p.value==="场景树"?(e.openBlock(),e.createBlock(st,{key:0,model:y.value},null,8,["model"])):e.createCommentVNode("",!0),p.value==="剖面视图"?(e.openBlock(),e.createElementBlock("div",gt,[e.createElementVNode("div",ht,[e.createElementVNode("label",Vt,[e.withDirectives(e.createElementVNode("input",{type:"radio",name:"clipping-axis",value:"none","onUpdate:modelValue":v[12]||(v[12]=S=>e.isRef(J)?J.value=S:null),onChange:v[13]||(v[13]=(...S)=>e.unref(F)&&e.unref(F)(...S))},null,544),[[e.vModelRadio,e.unref(J)]]),v[21]||(v[21]=e.createElementVNode("span",{class:"radio-text"},"无切割",-1))]),e.createElementVNode("label",bt,[e.withDirectives(e.createElementVNode("input",{type:"radio",name:"clipping-axis",value:"x","onUpdate:modelValue":v[14]||(v[14]=S=>e.isRef(J)?J.value=S:null),onChange:v[15]||(v[15]=(...S)=>e.unref(F)&&e.unref(F)(...S))},null,544),[[e.vModelRadio,e.unref(J)]]),v[22]||(v[22]=e.createElementVNode("span",{class:"radio-text"},"X轴切割",-1))]),e.createElementVNode("label",yt,[e.withDirectives(e.createElementVNode("input",{type:"radio",name:"clipping-axis",value:"y","onUpdate:modelValue":v[16]||(v[16]=S=>e.isRef(J)?J.value=S:null),onChange:v[17]||(v[17]=(...S)=>e.unref(F)&&e.unref(F)(...S))},null,544),[[e.vModelRadio,e.unref(J)]]),v[23]||(v[23]=e.createElementVNode("span",{class:"radio-text"},"Y轴切割",-1))]),e.createElementVNode("label",wt,[e.withDirectives(e.createElementVNode("input",{type:"radio",name:"clipping-axis",value:"z","onUpdate:modelValue":v[18]||(v[18]=S=>e.isRef(J)?J.value=S:null),onChange:v[19]||(v[19]=(...S)=>e.unref(F)&&e.unref(F)(...S))},null,544),[[e.vModelRadio,e.unref(J)]]),v[24]||(v[24]=e.createElementVNode("span",{class:"radio-text"},"Z轴切割",-1))])])])):e.createCommentVNode("",!0)]),_:1})])],512),[[e.vShow,w.value]]),e.withDirectives(e.createElementVNode("div",Et,[e.createElementVNode("div",Nt,[e.createElementVNode("span",null,e.toDisplayString(d.value),1),e.createElementVNode("span",{class:"close",onClick:v[20]||(v[20]=S=>_.value=!1)}," X ")]),e.createElementVNode("div",_t,[e.createVNode(G,{height:"100%"},{default:e.withCtx(()=>[e.withDirectives(e.createVNode(ot,{model:y.value},null,8,["model"]),[[e.vShow,d.value==="关节控制"]]),e.withDirectives(e.createVNode(Je,{model:y.value,onGetThreeData:Q,threeData:c.threeData,isSelfWindow:c.isSelfWindow},null,8,["model","threeData","isSelfWindow"]),[[e.vShow,d.value==="动画仿真"]])]),_:1})])],512),[[e.vShow,_.value]]),f.value?(e.openBlock(),e.createElementBlock("div",kt,[v[25]||(v[25]=e.createElementVNode("div",{class:"loading-spinner"},null,-1)),e.createElementVNode("p",null,e.toDisplayString(V.value),1)])):e.createCommentVNode("",!0)])}}}),St=le._export_sfc(Ct,[["__scopeId","data-v-c64ef635"]]);exports.default=St;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const o=require("vue"),p=require("./index-BBB4VObc.cjs");require("./index.vue_vue_type_style_index_0_scoped_0f027c8c_lang-CTcahF4Z.cjs");const T=require("./_plugin-vue_export-helper-BHFhmbuH.cjs");function D(i){const s=sessionStorage.getItem("loginToken")??"123456";return p.service({url:"/api/sysFile/uploadFile",method:"post",data:i,headers:{Authorization:s,"Content-Type":"multipart/form-data"}})}function f(i){const s=sessionStorage.getItem("loginToken")??"123456";return p.service({url:"/api/sysFile/downloadFile",method:"post",data:i,headers:{Authorization:s,Accept:"application/octet-stream"},responseType:"blob"})}const S={key:2,class:"loading"},U=o.defineComponent({__name:"threeViewerHost",props:{fileUrls:{default:()=>[]},isThreeScene:{type:Boolean,default:!1},host:{default:"inline"},animationData:{default:()=>({})},width:{default:"100%"},height:{default:"100%"},autoSize:{type:Boolean,default:void 0},threeData:{},isSelfWindow:{type:Boolean}},emits:["getThreeData"],setup(i,{emit:s}){const m=o.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./threeSceneView-DSkGJN5d.cjs"))),w=o.defineAsyncComponent(()=>Promise.resolve().then(()=>require("./threePreview-Dyzqu5s7.cjs"))),l=i,v=s,r=o.ref([]);o.ref(null);const c=o.ref(!1);function y(e){try{const n=new URL(e).pathname,a=n.substring(n.lastIndexOf("/")+1);return decodeURIComponent(a)}catch(n){return console.error("无法解析URL以提取文件名:",e,n),"未知文件名"}}async function g(e){let n,a;if(/^https?:\/\//.test(e))try{const t=await fetch(e);if(!t.ok)throw new Error(`下载文件失败: ${t.statusText} (URL: ${e})`);n=await t.blob(),a=y(e)}catch(t){throw console.error("使用 fetch 下载文件时出错:",t),t}else try{const t=await f({url:e});if(t.status!==200)throw new Error(`下载失败: ${t.status}`);const u=t.headers["content-disposition"];a=b(u)||"无文件名",n=t.data}catch(t){throw console.error("通过 API 下载文件时出错:",t),t}return new File([n],a,{type:n.type})}function b(e){if(!e)return;const n=e.match(/filename\*\s*=\s*([^;]+)/i);if(n){let t=n[1].trim();t=t.replace(/^"(.*)"$/,"$1");const u=t.split("''");if(u.length===2){const k=u[0].toUpperCase(),d=u[1];try{if(k==="UTF-8")return decodeURIComponent(d)}catch{}return d}try{return decodeURIComponent(t)}catch{return t}}const a=e.match(/filename\s*=\s*("?)([^";]+)\1/i);if(a)return a[2].trim()}async function _(e){if(!e||!e.length){r.value=[];return}c.value=!0;try{const n=await Promise.all(e.map(a=>g(a)));r.value=n}catch(n){console.error("文件下载时发生错误:",n),r.value=[]}finally{c.value=!1}}const F=()=>{v("getThreeData")};return o.watch(()=>l.fileUrls,async e=>{await _(e??[])},{immediate:!0,deep:!0}),(e,n)=>(o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(l.host==="electron"?"mv-electron":"mv-inline")},[!c.value&&l.isThreeScene&&r.value.length>0?(o.openBlock(),o.createBlock(o.unref(m),{key:0,"file-blobs":r.value,"animation-data":e.animationData,onGetThreeData:F,threeData:l.threeData,isSelfWindow:l.isSelfWindow},null,8,["file-blobs","animation-data","threeData","isSelfWindow"])):!c.value&&r.value.length>0?(o.openBlock(),o.createBlock(o.unref(w),{key:1,"file-blobs":r.value,"animation-data":e.animationData},null,8,["file-blobs","animation-data"])):c.value?(o.openBlock(),o.createElementBlock("div",S," 文件下载中,请稍候... ")):o.createCommentVNode("",!0)],2))}}),h=T._export_sfc(U,[["__scopeId","data-v-2e23dada"]]),B=Object.freeze(Object.defineProperty({__proto__:null,default:h},Symbol.toStringTag,{value:"Module"}));exports.downloadAvatarApi=f;exports.threeViewerHost=h;exports.threeViewerHost$1=B;exports.uploadFile=D;
|