1 line
4.8 KiB
JavaScript
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
|