Files
fad_oa/ruoyi-ui/public/file-viewer/assets/TDSLoader-D__OhSS9.js

1 line
7.7 KiB
JavaScript

import{$ as e,C as t,E as n,Ft as r,K as i,et as a,p as o,q as s,rt as c,u as l,w as u}from"./three.module-BFsVh7r1.js";var d=class extends i{constructor(e){super(e),this.debug=!1,this.group=null,this.materials=[],this.meshes=[]}load(e,n,r,i){let a=this,o=this.path===``?s.extractUrlBase(e):this.path,c=new t(this.manager);c.setPath(this.path),c.setResponseType(`arraybuffer`),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(e,function(t){try{n(a.parse(t,o))}catch(t){i?i(t):console.error(t),a.manager.itemError(e)}},r,i)}parse(e,t){this.group=new n,this.materials=[],this.meshes=[],this.readFile(e,t);for(let e=0;e<this.meshes.length;e++)this.group.add(this.meshes[e]);return this.group}readFile(e,t){let n=new f(new DataView(e),0,this.debugMessage);if(n.id===m||n.id===h||n.id===p){let e=n.readChunk();for(;e;){if(e.id===g){let t=e.readDWord();this.debugMessage(`3DS file version: `+t)}else e.id===C?this.readMeshData(e,t):this.debugMessage(`Unknown main chunk: `+e.hexId);e=n.readChunk()}}this.debugMessage(`Parsed `+this.meshes.length+` meshes`)}readMeshData(e,t){let n=e.readChunk();for(;n;){if(n.id===w){let e=+n.readDWord();this.debugMessage(`Mesh Version: `+e)}else if(n.id===T){let e=n.readFloat();this.debugMessage(`Master scale: `+e),this.group.scale.set(e,e,e)}else n.id===K?(this.debugMessage(`Named Object`),this.readNamedObject(n)):n.id===E?(this.debugMessage(`Material`),this.readMaterialEntry(n,t)):this.debugMessage(`Unknown MDATA chunk: `+n.hexId);n=e.readChunk()}}readNamedObject(e){let t=e.readString(),n=e.readChunk();for(;n;){if(n.id===q){let e=this.readMesh(n);e.name=t,this.meshes.push(e)}else this.debugMessage(`Unknown named object chunk: `+n.hexId);n=e.readChunk()}}readMaterialEntry(e,t){let n=e.readChunk(),r=new c;for(;n;){if(n.id===D)r.name=n.readString(),this.debugMessage(` Name: `+r.name);else if(n.id===F)this.debugMessage(` Wireframe`),r.wireframe=!0;else if(n.id===I){let e=n.readByte();r.wireframeLinewidth=e,this.debugMessage(` Wireframe Thickness: `+e)}else if(n.id===N)r.side=2,this.debugMessage(` DoubleSided`);else if(n.id===P)this.debugMessage(` Additive Blending`),r.blending=2;else if(n.id===k)this.debugMessage(` Diffuse Color`),r.color=this.readColor(n);else if(n.id===A)this.debugMessage(` Specular Color`),r.specular=this.readColor(n);else if(n.id===O)this.debugMessage(` Ambient color`),r.color=this.readColor(n);else if(n.id===j){let e=this.readPercentage(n);r.shininess=e*100,this.debugMessage(` Shininess : `+e)}else if(n.id===M){let e=this.readPercentage(n);r.opacity=1-e,this.debugMessage(` Transparency : `+e),r.transparent=r.opacity<1}else n.id===L?(this.debugMessage(` ColorMap`),r.map=this.readMap(n,t)):n.id===z?(this.debugMessage(` BumpMap`),r.bumpMap=this.readMap(n,t)):n.id===R?(this.debugMessage(` OpacityMap`),r.alphaMap=this.readMap(n,t)):n.id===B?(this.debugMessage(` SpecularMap`),r.specularMap=this.readMap(n,t)):this.debugMessage(` Unknown material chunk: `+n.hexId);n=e.readChunk()}this.materials[r.name]=r}readMesh(t){let n=t.readChunk(),r=new l,i=new a(r,new c);for(i.name=`mesh`;n;){if(n.id===J){let e=n.readWord();this.debugMessage(` Vertex: `+e);let t=[];for(let r=0;r<e;r++)t.push(n.readFloat()),t.push(n.readFloat()),t.push(n.readFloat());r.setAttribute(`position`,new u(t,3))}else if(n.id===Y)this.readFaceArray(n,i);else if(n.id===Z){let e=n.readWord();this.debugMessage(` UV: `+e);let t=[];for(let r=0;r<e;r++)t.push(n.readFloat()),t.push(n.readFloat());r.setAttribute(`uv`,new u(t,2))}else if(n.id===Q){this.debugMessage(` Transformation Matrix (TODO)`);let t=[];for(let e=0;e<12;e++)t[e]=n.readFloat();let a=new e;a.elements[0]=t[0],a.elements[1]=t[6],a.elements[2]=t[3],a.elements[3]=t[9],a.elements[4]=t[2],a.elements[5]=t[8],a.elements[6]=t[5],a.elements[7]=t[11],a.elements[8]=t[1],a.elements[9]=t[7],a.elements[10]=t[4],a.elements[11]=t[10],a.elements[12]=0,a.elements[13]=0,a.elements[14]=0,a.elements[15]=1,a.transpose();let o=new e;o.copy(a).invert(),r.applyMatrix4(o),a.decompose(i.position,i.quaternion,i.scale)}else this.debugMessage(` Unknown mesh chunk: `+n.hexId);n=t.readChunk()}return r.computeVertexNormals(),i}readFaceArray(e,t){let n=e.readWord();this.debugMessage(` Faces: `+n);let r=[];for(let t=0;t<n;++t)r.push(e.readWord(),e.readWord(),e.readWord()),e.readWord();t.geometry.setIndex(r);let i=0,a=0;for(;!e.endOfChunk;){let n=e.readChunk();if(n.id===X){this.debugMessage(` Material Group`);let e=this.readMaterialGroup(n),r=e.index.length*3;t.geometry.addGroup(a,r,i),a+=r,i++;let o=this.materials[e.name];Array.isArray(t.material)===!1&&(t.material=[]),o!==void 0&&t.material.push(o)}else this.debugMessage(` Unknown face array chunk: `+n.hexId)}t.material.length===1&&(t.material=t.material[0])}readMap(e,t){let n=e.readChunk(),i={},a=new r(this.manager);for(a.setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);n;){if(n.id===V){let e=n.readString();i=a.load(e),this.debugMessage(` File: `+t+e)}else n.id===W?(i.offset.x=n.readFloat(),this.debugMessage(` OffsetX: `+i.offset.x)):n.id===G?(i.offset.y=n.readFloat(),this.debugMessage(` OffsetY: `+i.offset.y)):n.id===H?(i.repeat.x=n.readFloat(),this.debugMessage(` RepeatX: `+i.repeat.x)):n.id===U?(i.repeat.y=n.readFloat(),this.debugMessage(` RepeatY: `+i.repeat.y)):this.debugMessage(` Unknown map chunk: `+n.hexId);n=e.readChunk()}return i}readMaterialGroup(e){let t=e.readString(),n=e.readWord();this.debugMessage(` Name: `+t),this.debugMessage(` Faces: `+n);let r=[];for(let t=0;t<n;++t)r.push(e.readWord());return{name:t,index:r}}readColor(e){let t=e.readChunk(),n=new o;if(t.id===v||t.id===y){let e=t.readByte(),r=t.readByte(),i=t.readByte();n.setRGB(e/255,r/255,i/255),this.debugMessage(` Color: `+n.r+`, `+n.g+`, `+n.b)}else if(t.id===_||t.id===b){let e=t.readFloat(),r=t.readFloat(),i=t.readFloat();n.setRGB(e,r,i),this.debugMessage(` Color: `+n.r+`, `+n.g+`, `+n.b)}else this.debugMessage(` Unknown color chunk: `+t.hexId);return n}readPercentage(e){let t=e.readChunk();switch(t.id){case x:return t.readShort()/100;case S:return t.readFloat();default:return this.debugMessage(` Unknown percentage chunk: `+t.hexId),0}}debugMessage(e){this.debug&&console.log(e)}},f=class e{constructor(e,t,n){this.data=e,this.offset=t,this.position=t,this.debugMessage=n,this.debugMessage instanceof Function&&(this.debugMessage=function(){}),this.id=this.readWord(),this.size=this.readDWord(),this.end=this.offset+this.size,this.end>e.byteLength&&this.debugMessage(`Bad chunk size for chunk at `+t)}readChunk(){if(this.endOfChunk)return null;try{let t=new e(this.data,this.position,this.debugMessage);return this.position+=t.size,t}catch{return this.debugMessage(`Unable to read chunk at `+this.position),null}}get hexId(){return this.id.toString(16)}get endOfChunk(){return this.position>=this.end}readByte(){let e=this.data.getUint8(this.position,!0);return this.position+=1,e}readFloat(){try{let e=this.data.getFloat32(this.position,!0);return this.position+=4,e}catch(e){return this.debugMessage(e+` `+this.position+` `+this.data.byteLength),0}}readInt(){let e=this.data.getInt32(this.position,!0);return this.position+=4,e}readShort(){let e=this.data.getInt16(this.position,!0);return this.position+=2,e}readDWord(){let e=this.data.getUint32(this.position,!0);return this.position+=4,e}readWord(){let e=this.data.getUint16(this.position,!0);return this.position+=2,e}readString(){let e=``,t=this.readByte();for(;t;)e+=String.fromCharCode(t),t=this.readByte();return e}},p=19789,m=15786,h=49725,g=2,_=16,v=17,y=18,b=19,x=48,S=49,C=15677,w=15678,T=256,E=45055,D=40960,O=40976,k=40992,A=41008,j=41024,M=41040,N=41089,P=41091,F=41093,I=41095,L=41472,R=41488,z=41520,B=41476,V=41728,H=41812,U=41814,W=41816,G=41818,K=16384,q=16640,J=16656,Y=16672,X=16688,Z=16704,Q=16736;export{d as TDSLoader};