babylon.objFileLoader.min.js 9.3 KB

1
  1. !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("babylonjs")):"function"==typeof define&&define.amd?define("babylonjs-loaders",["babylonjs"],t):"object"==typeof exports?exports["babylonjs-loaders"]=t(require("babylonjs")):e.LOADERS=t(e.BABYLON)}(window,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=13)}({0:function(t,r){t.exports=e},13:function(e,t,r){"use strict";r.r(t),function(e){var n=r(7);r.d(t,"MTLFileLoader",function(){return n.MTLFileLoader}),r.d(t,"OBJFileLoader",function(){return n.OBJFileLoader});var o=void 0!==e?e:"undefined"!=typeof window?window:void 0;if(void 0!==o)for(var s in n)o.BABYLON[s]=n[s]}.call(this,r(3))},3:function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof window&&(r=window)}e.exports=r},7:function(e,t,r){"use strict";r.r(t);var n=r(0),o=function(){function e(){this.materials=[]}return e.prototype.parseMTL=function(t,r,o){if(!(r instanceof ArrayBuffer)){for(var s,i=r.split("\n"),a=/\s+/,l=null,u=0;u<i.length;u++){var p=i[u].trim();if(0!==p.length&&"#"!==p.charAt(0)){var f=p.indexOf(" "),c=f>=0?p.substring(0,f):p;c=c.toLowerCase();var d=f>=0?p.substring(f+1).trim():"";"newmtl"===c?(l&&this.materials.push(l),l=new n.StandardMaterial(d,t)):"kd"===c&&l?(s=d.split(a,3).map(parseFloat),l.diffuseColor=n.Color3.FromArray(s)):"ka"===c&&l?(s=d.split(a,3).map(parseFloat),l.ambientColor=n.Color3.FromArray(s)):"ks"===c&&l?(s=d.split(a,3).map(parseFloat),l.specularColor=n.Color3.FromArray(s)):"ke"===c&&l?(s=d.split(a,3).map(parseFloat),l.emissiveColor=n.Color3.FromArray(s)):"ns"===c&&l?l.specularPower=parseFloat(d):"d"===c&&l?l.alpha=parseFloat(d):"map_ka"===c&&l?l.ambientTexture=e._getTexture(o,d,t):"map_kd"===c&&l?l.diffuseTexture=e._getTexture(o,d,t):"map_ks"===c&&l?l.specularTexture=e._getTexture(o,d,t):"map_ns"===c||("map_bump"===c&&l?l.bumpTexture=e._getTexture(o,d,t):"map_d"===c&&l&&(l.opacityTexture=e._getTexture(o,d,t)))}}l&&this.materials.push(l)}},e._getTexture=function(e,t,r){if(!t)return null;var o=e;if("file:"===e){var s=t.lastIndexOf("\\");-1===s&&(s=t.lastIndexOf("/")),o+=s>-1?t.substr(s+1):t}else o+=t;return new n.Texture(o,r)},e}(),s=function(){function e(){this.name="obj",this.extensions=".obj",this.obj=/^o/,this.group=/^g/,this.mtllib=/^mtllib /,this.usemtl=/^usemtl /,this.smooth=/^s /,this.vertexPattern=/v( +[\d|\.|\+|\-|e|E]+){3,7}/,this.normalPattern=/vn( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)/,this.uvPattern=/vt( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)/,this.facePattern1=/f\s+(([\d]{1,}[\s]?){3,})+/,this.facePattern2=/f\s+((([\d]{1,}\/[\d]{1,}[\s]?){3,})+)/,this.facePattern3=/f\s+((([\d]{1,}\/[\d]{1,}\/[\d]{1,}[\s]?){3,})+)/,this.facePattern4=/f\s+((([\d]{1,}\/\/[\d]{1,}[\s]?){3,})+)/,this.facePattern5=/f\s+(((-[\d]{1,}\/-[\d]{1,}\/-[\d]{1,}[\s]?){3,})+)/}return e.prototype._loadMTL=function(e,t,r){var o=n.Tools.BaseUrl+t+e;n.Tools.LoadFile(o,r,void 0,void 0,!1,function(){console.warn("Error - Unable to load "+o)})},e.prototype.importMeshAsync=function(e,t,r,n,o,s){return this._parseSolid(e,t,r,n).then(function(e){return{meshes:e,particleSystems:[],skeletons:[],animationGroups:[]}})},e.prototype.loadAsync=function(e,t,r,n,o){return this.importMeshAsync(null,e,t,r,n).then(function(){})},e.prototype.loadAssetContainerAsync=function(e,t,r,o,s){return this.importMeshAsync(null,e,t,r).then(function(t){var r=new n.AssetContainer(e);return t.meshes.forEach(function(e){return r.meshes.push(e)}),r.removeAllFromScene(),r})},e.prototype._parseSolid=function(t,r,s,i){for(var a,l=this,u=[],p=[],f=[],c=[],d=[],h=[],m=[],v=[],O=[],T=[],_=[],y=0,g=!1,x=[],b=[],P=[],R=[],E=[],I="",M="",L=new o,w=1,F=!0,C=new n.Color4(.5,.5,.5,1),S=function(t,r,n,o,s,i,a){var l;-1==(l=e.OPTIMIZE_WITH_UV?function(e,t){e[t[0]]||(e[t[0]]={normals:[],idx:[],uv:[]});var r=e[t[0]].normals.indexOf(t[1]);return 1!=r&&t[2]==e[t[0]].uv[r]?e[t[0]].idx[r]:-1}(_,[t,n,r]):function(e,t){e[t[0]]||(e[t[0]]={normals:[],idx:[]});var r=e[t[0]].normals.indexOf(t[1]);return-1===r?-1:e[t[0]].idx[r]}(_,[t,n]))?(h.push(m.length),m.push(o),v.push(s),T.push(i),void 0!==a&&O.push(a),_[t].normals.push(n),_[t].idx.push(y++),e.OPTIMIZE_WITH_UV&&_[t].uv.push(r)):h.push(l)},V=function(){for(var t=0;t<m.length;t++)x.push(m[t].x,m[t].y,m[t].z),P.push(T[t].x,T[t].y,T[t].z),R.push(v[t].x,v[t].y);!0===e.IMPORT_VERTEX_COLORS&&b.push(O[t].r,O[t].g,O[t].b,O[t].a),m=[],T=[],v=[],O=[],_=[],y=0},A=function(e,t){t+1<e.length&&(E.push(e[0],e[t],e[t+1]),A(e,t+=1))},j=function(t,r){A(t,r);for(var o=0;o<E.length;o++){var s=parseInt(E[o])-1;S(s,0,0,u[s],n.Vector2.Zero(),n.Vector3.Up(),!0===e.IMPORT_VERTEX_COLORS?c[s]:void 0)}E=[]},N=function(t,r){A(t,r);for(var o=0;o<E.length;o++){var s=E[o].split("/"),i=parseInt(s[0])-1,a=parseInt(s[1])-1;S(i,a,0,u[i],f[a],n.Vector3.Up(),!0===e.IMPORT_VERTEX_COLORS?c[i]:void 0)}E=[]},U=function(e,t){A(e,t);for(var r=0;r<E.length;r++){var n=E[r].split("/"),o=parseInt(n[0])-1,s=parseInt(n[1])-1,i=parseInt(n[2])-1;S(o,s,i,u[o],f[s],p[i])}E=[]},X=function(t,r){A(t,r);for(var o=0;o<E.length;o++){var s=E[o].split("//"),i=parseInt(s[0])-1,a=parseInt(s[1])-1;S(i,1,a,u[i],n.Vector2.Zero(),p[a],!0===e.IMPORT_VERTEX_COLORS?c[i]:void 0)}E=[]},B=function(t,r){A(t,r);for(var n=0;n<E.length;n++){var o=E[n].split("/"),s=u.length+parseInt(o[0]),i=f.length+parseInt(o[1]),a=p.length+parseInt(o[2]);S(s,i,a,u[s],f[i],p[a],!0===e.IMPORT_VERTEX_COLORS?c[s]:void 0)}E=[]},k=function(){d.length>0&&(a=d[d.length-1],V(),h.reverse(),a.indices=h.slice(),a.positions=x.slice(),a.normals=P.slice(),a.uvs=R.slice(),!0===e.IMPORT_VERTEX_COLORS&&(a.colors=b.slice()),h=[],x=[],b=[],P=[],R=[])},Z=s.split("\n"),Y=0;Y<Z.length;Y++){var D,H=Z[Y].trim();if(0!==H.length&&"#"!==H.charAt(0))if(this.vertexPattern.test(H))D=H.split(" "),u.push(new n.Vector3(parseFloat(D[1]),parseFloat(D[2]),parseFloat(D[3]))),!0===e.IMPORT_VERTEX_COLORS&&(D.length>=7?c.push(new n.Color4(parseFloat(D[4]),parseFloat(D[5]),parseFloat(D[6]),7===D.length||void 0===D[7]?1:parseFloat(D[7]))):c.push(C));else if(null!==(D=this.normalPattern.exec(H)))p.push(new n.Vector3(parseFloat(D[1]),parseFloat(D[2]),parseFloat(D[3])));else if(null!==(D=this.uvPattern.exec(H)))f.push(new n.Vector2(parseFloat(D[1]),parseFloat(D[2])));else if(null!==(D=this.facePattern3.exec(H)))U(D[1].trim().split(" "),1);else if(null!==(D=this.facePattern4.exec(H)))X(D[1].trim().split(" "),1);else if(null!==(D=this.facePattern5.exec(H)))B(D[1].trim().split(" "),1);else if(null!==(D=this.facePattern2.exec(H)))N(D[1].trim().split(" "),1);else if(null!==(D=this.facePattern1.exec(H)))j(D[1].trim().split(" "),1);else if(this.group.test(H)||this.obj.test(H)){var J={name:H.substring(2).trim(),indices:void 0,positions:void 0,normals:void 0,uvs:void 0,colors:void 0,materialName:""};k(),d.push(J),g=!0,F=!0,w=1}else if(this.usemtl.test(H)){if(I=H.substring(7).trim(),!F){k();J={name:"_mm"+w.toString(),indices:void 0,positions:void 0,normals:void 0,uvs:void 0,colors:void 0,materialName:I};w++,d.push(J)}g&&F&&(d[d.length-1].materialName=I,F=!1)}else this.mtllib.test(H)?M=H.substring(7).trim():this.smooth.test(H)||console.log("Unhandled expression at line : "+H)}g&&(a=d[d.length-1],h.reverse(),V(),a.indices=h,a.positions=x,a.normals=P,a.uvs=R,!0===e.IMPORT_VERTEX_COLORS&&(a.colors=b)),g||(h.reverse(),V(),d.push({name:n.Geometry.RandomId(),indices:h,positions:x,colors:b,normals:P,uvs:R,materialName:I}));for(var W=[],q=new Array,z=0;z<d.length;z++){if(t&&d[z].name)if(t instanceof Array){if(-1==t.indexOf(d[z].name))continue}else if(d[z].name!==t)continue;a=d[z];var G=new n.Mesh(d[z].name,r);q.push(d[z].materialName);var K=new n.VertexData;if(K.uvs=a.uvs,K.indices=a.indices,K.positions=a.positions,!0===e.COMPUTE_NORMALS){var Q=new Array;n.VertexData.ComputeNormals(a.positions,a.indices,Q),K.normals=Q}else K.normals=a.normals;!0===e.IMPORT_VERTEX_COLORS&&(K.colors=a.colors),K.applyToMesh(G),e.INVERT_Y&&(G.scaling.y*=-1),W.push(G)}var $=[];return""!==M&&$.push(new Promise(function(e,t){l._loadMTL(M,i,function(n){try{L.parseMTL(r,n,i);for(var o=0;o<L.materials.length;o++){for(var s,a=0,l=[];(s=q.indexOf(L.materials[o].name,a))>-1;)l.push(s),a=s+1;if(-1==s&&0==l.length)L.materials[o].dispose();else for(var u=0;u<l.length;u++)W[l[u]].material=L.materials[o]}e()}catch(e){t(e)}})})),Promise.all($).then(function(){return W})},e.OPTIMIZE_WITH_UV=!1,e.INVERT_Y=!1,e.IMPORT_VERTEX_COLORS=!1,e.COMPUTE_NORMALS=!1,e}();n.SceneLoader&&n.SceneLoader.RegisterPlugin(new s),r.d(t,"MTLFileLoader",function(){return o}),r.d(t,"OBJFileLoader",function(){return s})}})});