Files
fad_oa/ruoyi-ui/public/file-viewer/assets/AMFLoader-C0y7NIAO.js

1 line
4.8 KiB
JavaScript

import{C as e,E as t,K as n,et as r,p as i,rt as a,u as o,w as s}from"./three.module-BFsVh7r1.js";import{t as c}from"./fflate.module-BIQmJeC9.js";var l=class extends n{constructor(e){super(e)}load(t,n,r,i){let a=this,o=new e(a.manager);o.setPath(a.path),o.setResponseType(`arraybuffer`),o.setRequestHeader(a.requestHeader),o.setWithCredentials(a.withCredentials),o.load(t,function(e){try{n(a.parse(e))}catch(e){i?i(e):console.error(e),a.manager.itemError(t)}},r,i)}parse(e){function l(e){let t=new DataView(e);if(String.fromCharCode(t.getUint8(0),t.getUint8(1))===`PK`){let n=null,r=null;console.log(`THREE.AMFLoader: Loading Zip`);try{n=c(new Uint8Array(e))}catch(e){if(e instanceof ReferenceError)return console.log(`THREE.AMFLoader: fflate missing and file is compressed.`),null}for(r in n)if(r.toLowerCase().slice(-4)===`.amf`)break;console.log(`THREE.AMFLoader: Trying to load file asset: `+r),t=new DataView(n[r].buffer)}let n=new TextDecoder().decode(t),r=new DOMParser().parseFromString(n,`application/xml`);return r.documentElement.nodeName.toLowerCase()===`amf`?r:(console.log(`THREE.AMFLoader: Error loading AMF - no AMF document found.`),null)}function u(e){let t=1,n=`millimeter`;e.documentElement.attributes.unit!==void 0&&(n=e.documentElement.attributes.unit.value.toLowerCase());let r={millimeter:1,inch:25.4,feet:304.8,meter:1e3,micron:.001};return r[n]!==void 0&&(t=r[n]),console.log(`THREE.AMFLoader: Unit scale: `+t),t}function d(e){let t=`AMF Material`,n=e.attributes.id.textContent,r={r:1,g:1,b:1,a:1},o=null;for(let n=0;n<e.childNodes.length;n++){let i=e.childNodes[n];i.nodeName===`metadata`&&i.attributes.type!==void 0?i.attributes.type.value===`name`&&(t=i.textContent):i.nodeName===`color`&&(r=f(i))}return o=new a({flatShading:!0,color:new i(r.r,r.g,r.b),name:t}),r.a!==1&&(o.transparent=!0,o.opacity=r.a),{id:n,material:o}}function f(e){let t={r:1,g:1,b:1,a:1};for(let n=0;n<e.childNodes.length;n++){let r=e.childNodes[n];r.nodeName===`r`?t.r=r.textContent:r.nodeName===`g`?t.g=r.textContent:r.nodeName===`b`?t.b=r.textContent:r.nodeName===`a`&&(t.a=r.textContent)}return t}function p(e){let t={name:``,triangles:[],materialId:null},n=e.firstElementChild;for(e.attributes.materialid!==void 0&&(t.materialId=e.attributes.materialid.nodeValue);n;){if(n.nodeName===`metadata`)n.attributes.type!==void 0&&n.attributes.type.value===`name`&&(t.name=n.textContent);else if(n.nodeName===`triangle`){let e=n.getElementsByTagName(`v1`)[0].textContent,r=n.getElementsByTagName(`v2`)[0].textContent,i=n.getElementsByTagName(`v3`)[0].textContent;t.triangles.push(e,r,i)}n=n.nextElementSibling}return t}function m(e){let t=[],n=[],r=e.firstElementChild;for(;r;){if(r.nodeName===`vertex`){let e=r.firstElementChild;for(;e;){if(e.nodeName===`coordinates`){let n=e.getElementsByTagName(`x`)[0].textContent,r=e.getElementsByTagName(`y`)[0].textContent,i=e.getElementsByTagName(`z`)[0].textContent;t.push(n,r,i)}else if(e.nodeName===`normal`){let t=e.getElementsByTagName(`nx`)[0].textContent,r=e.getElementsByTagName(`ny`)[0].textContent,i=e.getElementsByTagName(`nz`)[0].textContent;n.push(t,r,i)}e=e.nextElementSibling}}r=r.nextElementSibling}return{vertices:t,normals:n}}function h(e){let t=e.attributes.id.textContent,n={name:`amfobject`,meshes:[]},r=null,i=e.firstElementChild;for(;i;){if(i.nodeName===`metadata`)i.attributes.type!==void 0&&i.attributes.type.value===`name`&&(n.name=i.textContent);else if(i.nodeName===`color`)r=f(i);else if(i.nodeName===`mesh`){let e=i.firstElementChild,t={vertices:[],normals:[],volumes:[],color:r};for(;e;){if(e.nodeName===`vertices`){let n=m(e);t.normals=t.normals.concat(n.normals),t.vertices=t.vertices.concat(n.vertices)}else e.nodeName===`volume`&&t.volumes.push(p(e));e=e.nextElementSibling}n.meshes.push(t)}i=i.nextElementSibling}return{id:t,obj:n}}let g=l(e),_=``,v=``,y=u(g),b={},x={},S=g.documentElement.childNodes,C,w;for(C=0;C<S.length;C++){let e=S[C];if(e.nodeName===`metadata`)e.attributes.type!==void 0&&(e.attributes.type.value===`name`?_=e.textContent:e.attributes.type.value===`author`&&(v=e.textContent));else if(e.nodeName===`material`){let t=d(e);b[t.id]=t.material}else if(e.nodeName===`object`){let t=h(e);x[t.id]=t.obj}}let T=new t,E=new a({name:n.DEFAULT_MATERIAL_NAME,color:11184895,flatShading:!0});T.name=_,T.userData.author=v,T.userData.loader=`AMF`;for(let e in x){let n=x[e],a=n.meshes,c=new t;for(c.name=n.name||``,C=0;C<a.length;C++){let e=E,t=a[C],n=new s(t.vertices,3),l=null;if(t.normals.length&&(l=new s(t.normals,3)),t.color){let n=t.color;e=E.clone(),e.color=new i(n.r,n.g,n.b),n.a!==1&&(e.transparent=!0,e.opacity=n.a)}let u=t.volumes;for(w=0;w<u.length;w++){let t=u[w],i=new o,a=e;i.setIndex(t.triangles),i.setAttribute(`position`,n.clone()),l&&i.setAttribute(`normal`,l.clone()),b[t.materialId]!==void 0&&(a=b[t.materialId]),i.scale(y,y,y),c.add(new r(i,a.clone()))}}T.add(c)}return T}};export{l as AMFLoader};