@threepipe/plugin-blend-importer 0.0.1 → 0.0.2
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/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/dist/loader/light.d.ts +1 -1
- package/dist/loader/light.d.ts.map +1 -1
- package/dist/loader/material.d.ts +1 -1
- package/dist/loader/material.d.ts.map +1 -1
- package/dist/loader/mesh.d.ts +1 -1
- package/dist/loader/mesh.d.ts.map +1 -1
- package/package.json +8 -2
- package/src/global.d.ts +4 -1
package/dist/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
|
-
* @threepipe/plugin-blend-importer v0.0.
|
|
4
|
-
* Copyright 2022-
|
|
3
|
+
* @threepipe/plugin-blend-importer v0.0.2
|
|
4
|
+
* Copyright 2022-2024 repalash <palash@shaders.app>
|
|
5
5
|
* Apache-2.0 License
|
|
6
|
+
* See ./dependencies.txt for bundled third-party dependencies and licenses.
|
|
6
7
|
*/
|
|
7
8
|
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("threepipe")):"function"==typeof define&&define.amd?define(["exports","threepipe"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@threepipe/plugin-blend-importer"]={},e.threepipe)}(this,(function(e,t){"use strict";const n=826363460,r=1111772741;let s=null;const _={loadBlendFromArrayBuffer:function(e){_.ready=!1,s.onmessage({data:e})},ready:!0,onParseReady:function(){}};s=new function(){let e=null,t=null,s=!1,_=0,i=[],o=0,a=null,l={},d=null,u=null,c=null;const h=this;var f=function(e){this.AB=e,this.byte=new Uint8Array(e),this.dv=new DataView(e),this.objects={},this.memory_lookup={},this.object_array=[],this.template=null};function p(e){return{get:function(){let t=this.__blender_file__.getPointer(this.__data_address__+e,this.__blender_file__);const n=this.__blender_file__.memory_lookup[t],r=[];if(n){const e=n.__data_address__;let s=0;for(;;){t=this.__blender_file__.getPointer(e+8*s,this.__blender_file__);let n=this.__blender_file__.memory_lookup[t];if(!n)break;r.push(n),s++}}return r},set:function(){}}}function b(e,t,n,r,s,_,i,o){if(_)Object.defineProperty(e,t,function(e,t,n){return{get:function(){if(t>1){let r=[],s=0,_=e;for(;s<t;){let e=this.__blender_file__.getPointer(this.__data_address__+_,this.__blender_file__);r.push(this.__blender_file__.memory_lookup[e]),_+=n,s++}return r}{let t=this.__blender_file__.getPointer(this.__data_address__+e,this.__blender_file__);return this.__blender_file__.memory_lookup[t]}},set:function(){}}}(r,s,i)),r+=i*s;else{switch(n){case"double":Object.defineProperty(e,t,function(e,t,n){return{get:function(){return t>1?new Float64Array(this.__blender_file__.AB,this.__data_address__+e,n):this.__blender_file__.dv.getFloat64(this.__data_address__+e,this.__blender_file__.template.endianess)},set:function(n){t>1||this.__blender_file__.dv.setFloat64(this.__data_address__+e,n,this.__blender_file__.template.endianess)}}}(r,s,o>>3));break;case"float":Object.defineProperty(e,t,function(e,t,n){return{get:function(){return t>1?new Float32Array(this.__blender_file__.AB,this.__data_address__+e,n):this.__blender_file__.dv.getFloat32(this.__data_address__+e,this.__blender_file__.template.endianess)},set:function(n){t>1||this.__blender_file__.dv.setFloat32(this.__data_address__+e,n,this.__blender_file__.template.endianess)}}}(r,s,o>>2));break;case"int":Object.defineProperty(e,t,function(e,t,n){return{get:function(){return t>1?new Int32Array(this.__blender_file__.AB,this.__data_address__+e,n):this.__blender_file__.dv.getInt32(this.__data_address__+e,this.__blender_file__.template.endianess)},set:function(n){t>1||this.__blender_file__.dv.setInt32(this.__data_address__+e,n,this.__blender_file__.template.endianess)}}}(r,s,o>>2));break;case"short":case"ushort":Object.defineProperty(e,t,function(e,t,n){return{get:function(){return t>1?new Int16Array(this.__blender_file__.AB,this.__data_address__+e,n):this.__blender_file__.dv.getInt16(this.__data_address__+e,this.__blender_file__.template.endianess)},set:function(n){t>1||this.__blender_file__.dv.setInt16(this.__data_address__+e,n,this.__blender_file__.template.endianess)}}}(r,s,o>>1));break;case"char":case"uchar":Object.defineProperty(e,t,function(e,t,n){return{get:function(){if(t>1){let t=this.__data_address__+e,r=t,s=0;for(;0!=this.__blender_file__.byte[r]&&s++<n;)r++;return m(this.__blender_file__.AB,t,r)}return this.__blender_file__.byte[this.__data_address__+e]},set:function(r){if(t>1){const t=r+"";let s=0;const _=t.length;for(;s<n;)this.__blender_file__.byte[this.__data_address__+e+s]=s<_?0|t.charCodeAt(s):0,s++}else this.__blender_file__.byte[this.__data_address__+e]=0|r}}}(r,s,o));break;default:e[t]={},e.__list__.push(t,n,o,r,s,_)}e._length+=o,r+=o}return r}f.prototype={addObject:function(e){this.object_array.push(e),this.objects[e.blender_name]||(this.objects[e.blender_name]=[]),this.objects[e.blender_name].push(e)},getPointer:function(e){const t=this.dv.getUint32(e,this.template.endianess);if(this.template.pointer_size>4){const n=this.dv.getUint32(e+4,this.template.endianess);return this.template.endianess?t+"l|h"+n:n+"h|l"+t}return t}},h.onmessage=function(p){"object"==typeof p.data&&(c=null,e=null,s=!1,_=0,i=[],o=0,a=null,t=p.data,c=t.slice(),e=new DataView(t),d=new f(c),function(){let c=0,h=0,f=0,p=0,b="",g=0,A=0,w=0;if(d.memory_lookup={},i=[],o=0,"BLENDER"!==m(t,o,7))return u="File supplied is not a .blend compatible Blender file.";o+=7,_="_"==m(t,o++,o)?4:8,s="V"!==m(t,o++,o);const S=m(t,o,o+3);l[S]||(l[S]=new y(S));if(a=l[S],d.template=a,o+=3,!a.SDNA_SET)for(a.endianess=s,a.pointer_size=_,h=o;;){if(p=e.getInt32(h+_+8,s),b=m(t,h,h+4).replace(/\u0000/g,""),g=e.getInt32(h+4,!0),h+=16+_,"DNA1"===b){c=0;let n=[],r=[],_=[],o="";for(h+=8,c=e.getInt32(h,!0),h+=4,A=0;A<c;){for(o="";0!==e.getInt8(h);)o+=m(t,h,h+1),h++;r.push(o),h++,A++}for(h%4>0&&(h=4-h%4+h),h+=4,c=e.getInt32(h,!0),h+=4,A=0;A<c;){for(o="";0!==e.getInt8(h);)o+=m(t,h,h+1),h++;n.push(o),h++,A++}for(h%4>0&&(h=4-h%4+h),h+=4,A=0;A<c;)_.push(e.getInt16(h,s)),h+=2,A++;h%4>0&&(h=4-h%4+h),h+=4;const l=e.getInt32(h,s);for(h+=4,A=0;A<l;){const t=n[e.getInt16(h,s)];h+=2;const o=[];for(c=e.getInt16(h,s),h+=2,w=0,i.push(t);w<c;)o.push(r[e.getInt16(h+2,s)],n[e.getInt16(h,s)],_[e.getInt16(h,s)]),h+=4,w++;a.getSDNAStructureConstructor(t,o),A++}a.SDNA_SET=!0,a.SDNA_NAMES=i;break}h+=g}for(;;){o%4>0&&(o=4-o%4+o),f=o,p=e.getInt32(o+_+8,s);let t=e.getUint32(o,s);if(h=o+16+_,o+=e.getInt32(o+4,!0)+16+_,t===n);else{if(t===r)break;{const t=f+_+16,n=a.getSDNAStructureConstructor(a.SDNA_NAMES[p]),r=e.getInt32(f+4,s);if(c=e.getInt32(f+12+_,s),c>0){let e=new n;const s=n.prototype._length,_=d.getPointer(f+8);if(e.address=_+"",e.setData(_,t,t+r,d),c>1){let r=[];r.push(e);for(let i=1;i<c;i++)e=new n,e.setData(_,t+s*i,t+s*i+s,d),r.push(e);d.memory_lookup[_]=r}else d.memory_lookup[_]=e}}}}}(),h.postMessage(d,u))};const y=function(e){this.version=e,this.SDNA_SET=!1,this.byte_size=0,this.struct_index=0,this.structs={},this.SDNA={},this.endianess=!1};y.prototype={getSDNAStructureConstructor:function(e,t){if(t){const n=Function("function "+e+"(){}; return "+e)();n.prototype=new g,n.prototype.blender_name=e,n.prototype.__pointers=[],n.prototype.__list__=[];let r=0;for(let s=0;s<t.length;s+=3){let i=t[s];const o=i,a=t[s+1];let l=t[s+2],d=0,u=null,c=1,h=1,f=!1,y=0;const g=this.SDNA[e]={constructor:n};if((u=i.match(/(\*?)(\*?)(\w+)(\[(\w*)\])?(\[(\w*)\])?/))&&(i=u[3],u[1]&&(y=10,n.prototype.__pointers.push(i)),u[2]&&(f=!0),u[4]&&(u[6]?(h=parseInt(u[5]),c=parseInt(u[7])):c=parseInt(u[5])),d=c*l,l=d*h),g[o]={type:a,length:l,isArray:c>0},f)Object.defineProperty(n.prototype,i,p(r)),r+=_;else if(h>1){const e=new Array(h);for(let t=0;t<h;t++){let s=`__${i}[${t}]__`;e[t]=s,r=b(n.prototype,s,a,r,c,y,_,d)}Object.defineProperty(n.prototype,i,{get:function(e){return function(){const t=[];for(let n=0;n<e.length;n++)t.push(this[e[n]]);return t}}(e)})}else r=b(n.prototype,i,a,r,c,y,_,l)}return this.SDNA[e].constructor}return this.SDNA[e]?this.SDNA[e].constructor:null}};var g=function(){this.__blender_file__=null,this.__list__=null,this.__super_array_list__=null,this.blender_name="",this.__pointers=null,this.address=null,this.length=0,this.__data_address__=0,this.blender_name="",this._length=0};function m(e,t,n){return String.fromCharCode.apply(String,new Uint8Array(e,t,n-t))}g.prototype={setData:function(e,t,n,r){if(null===this.__list__)return this;r.addObject(this),this.__blender_file__=r;const s=this.__list__;let _,i,o,l,d,u=0,c=0,h="";if(this.__data_address__=t,null===s)return this;for(c=0;c<s.length;c+=6)if(h=s[c],_=s[c+1],o=s[c+4],s[c+5],l=this.__data_address__+s[c+3],o>1)for(this[h]=[],u=0;u<o;)a.getSDNAStructureConstructor(_)?(d=a.getSDNAStructureConstructor(_),this[h].push((new d).setData(0,l,l+i/o,r))):this[h].push(null),l+=i/o,u++;else a.getSDNAStructureConstructor(_)?(d=a.getSDNAStructureConstructor(_),this[h]=(new d).setData(0,l,i+l,r)):this[h]=null;return this.__list__=null,this},get aname(){return this.id?this.id.name.slice(2):void 0}}},s.postMessage=function(e){_.onParseReady(e)};const i={point:0,sun:1,spot:0,hemi:0,area:0};function o(e){const n=e.data,r=[e.loc[0],e.loc[2],-e.loc[1]],s=255*n.r<<16|255*n.g<<8|255*n.b<<0,_=n.energy;let o=null;switch(n.type){case i.point:o=new t.PointLight(s,_,0),o.position.fromArray(r,0),o.castShadow=!0;break;case i.sun:o=new t.PointLight(s,_,0),o.position.fromArray(r,0),o.castShadow=!0,o.shadow.mapSize.width=1024,o.shadow.mapSize.height=1024,o.shadow.camera.near=.01,o.shadow.camera.far=500;break;default:console.warn("Unsupported light type",n.type)}return o}function a(e){if(!e.data)return null;const n=function(e,n){const r=Array.isArray(e.mpoly)?e.mpoly:[e.mpoly],s=e.mloop,_=e.mloopuv,i=e.mvert,o=new t.BufferGeometry;if(!r)return o;const a=r.reduce(((e,t)=>e+Math.floor(3*t.totloop/2)),0),l=new Uint32Array(a),d=new Float32Array(2*a),u=new Float32Array(3*a),c=new Float32Array(3*a);let h=0;for(const e of r){const t=e.totloop,r=e.loopstart;let o=1;for(;o<t;){let e=0;for(let a=0;a<3;a++){e=r,o-1+a<t&&(e+=o-1+a);const f=i[s[e].v];l[h]=h,c[3*h+0]=f.co[0]+n[0],c[3*h+1]=f.co[2]+n[2],c[3*h+2]=-f.co[1]-n[1],u[3*h+0]=f.no[0],u[3*h+1]=f.no[2],u[3*h+2]=-f.no[1],_&&(d[2*h+0]=_[e].uv[0],d[2*h+1]=_[e].uv[1]),h++}o+=2}}return o.setAttribute("position",new t.BufferAttribute(c,3)),o.setIndex(new t.BufferAttribute(l,1)),o.setAttribute("normal",new t.BufferAttribute(u,3)),o.setAttribute("uv",new t.BufferAttribute(d,2)),o}(e.data,[0,0,0]),r=e.data.mat[0],s=r?function(e){const n=new t.MeshPhysicalMaterial;return n.color.setRGB(e.r,e.g,e.b),n.roughness=void 0!==e.roughness?e.roughness:.4,n.metalness=void 0!==e.metallic?e.metallic:0,n.opacity=void 0!==e.alpha?e.alpha:0,n.transparent=n.opacity<1,n}(r):void 0,_=new t.Mesh(n,s);return _.castShadow=!0,_.receiveShadow=!0,_.rotateZ(e.rot[2]),_.rotateY(e.rot[1]),_.rotateX(e.rot[0]),_.scale.fromArray(e.size,0),_.position.fromArray([e.loc[0],e.loc[2],-e.loc[1]],0),_}const l=1,d=10;class u extends t.BaseImporterPlugin{constructor(){super(),this._importer=new t.Importer(class extends t.FileLoader{async loadAsync(e,n){this.setResponseType("arraybuffer");const r=await super.loadAsync(e,n),s=
|
|
8
9
|
/**
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/js-blend/parser/parser.js","../src/loader/light.ts","../src/loader/mesh.ts","../src/loader/geometry.ts","../src/loader/material.ts","../src/loader/index.ts","../src/BlendLoadPlugin.ts","../src/js-blend/main.js"],"sourcesContent":["/* eslint-disable camelcase, no-unused-vars, no-empty, no-constant-condition */\nconst DNA1 = 826363460;\nconst ENDB = 1111772741;\n\n/* Note: Blender coordinates treat the Z axis as the vertical an Y as depth. */\n\n// web worker not functional in this version\nlet USE_WEBWORKER = false;\n\nlet worker = null;\n\n// FR = new FileReader(),\n\nconst return_object = {\n loadBlendFromArrayBuffer: function (array_buffer) {\n return_object.ready = false;\n if (USE_WEBWORKER) {\n worker.postMessage(array_buffer, array_buffer);\n } else {\n worker.onmessage({\n data: array_buffer,\n });\n }\n },\n // loadBlendFromBlob: function (blob) {\n // FR.onload = function () {\n // return_object.loadBlendFromArrayBuffer(this.result);\n // };\n // FR.readAsArrayBuffer(blob);\n // },\n ready: true,\n onParseReady: function () {},\n};\n\nfunction worker_code () {\n 'use strict';\n\n let data = null,\n _data = null,\n BIG_ENDIAN = false,\n pointer_size = 0,\n struct_names = [],\n offset = 0,\n working_blend_file = null,\n current_SDNA_template = null,\n templates = {},\n finished_objects = [],\n FILE = null,\n ERROR = null,\n AB = null;\n\n const self = this;\n\n function parseFile (msg) {\n\n if (typeof msg.data == 'object') {\n // reset global variables\n AB = null;\n data = null;\n BIG_ENDIAN = false;\n pointer_size = 0;\n struct_names = [];\n offset = 0;\n working_blend_file = null;\n finished_objects = [];\n current_SDNA_template = null;\n\n\n // set data\n _data = msg.data;\n\n AB = _data.slice();\n\n data = new DataView(_data);\n\n\n FILE = new BLENDER_FILE(AB);\n\n // start parsing\n readFile();\n\n // export parsed data\n self.postMessage(FILE, ERROR);\n }\n }\n\n /*\n Export object for a parsed __blender_file__.\n */\n\n var BLENDER_FILE = function (AB) {\n this.AB = AB;\n // this.double = new Float64Array(AB);\n this.byte = new Uint8Array(AB);\n\n this.dv = new DataView(AB);\n\n this.objects = {};\n this.memory_lookup = {},\n this.object_array = [];\n\n this.template = null;\n };\n\n BLENDER_FILE.prototype = {\n addObject: function (obj) {\n this.object_array.push(obj);\n if (!this.objects[obj.blender_name]) this.objects[obj.blender_name] = [];\n this.objects[obj.blender_name].push(obj);\n },\n\n getPointer: function (offset) {\n const pointerLow = this.dv.getUint32(offset, this.template.endianess);\n if (this.template.pointer_size > 4) {\n const pointerHigh = this.dv.getUint32(offset + 4, this.template.endianess);\n if (this.template.endianess) {\n return (pointerLow) + 'l|h' + pointerHigh;\n } else {\n return (pointerHigh) + 'h|l' + pointerLow;\n }\n } else {\n return pointerLow;\n }\n },\n };\n\n self.onmessage = parseFile;\n // this.onmessage = parseFile;\n\n /*\n These functions map offsets in the blender __blender_file__ to basic types (byte,short,int,float) through TypedArrays;\n This allows the underlying binary data to be changed.\n */\n\n function float64Prop (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Float64Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getFloat64(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setFloat64(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function floatProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Float32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getFloat32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setFloat32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function intProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Int32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getInt32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setInt32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function uIntProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Uint32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getUint32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setUint32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function shortProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Int16Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getInt16(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setInt16(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n const uShortProp = (offset, Blender_Array_Length, length) => {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Uint16Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getUint16(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {\n } else {\n this.__blender_file__.dv.setUint16(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n };\n\n function charProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n if (Blender_Array_Length > 1) {\n let start = this.__data_address__ + offset;\n let end = start;\n let buffer_guard = 0;\n\n while (this.__blender_file__.byte[end] != 0 && buffer_guard++ < length) end++;\n\n return toString(this.__blender_file__.AB, start, end);\n }\n return this.__blender_file__.byte[(this.__data_address__ + offset)];\n },\n set: function (byte) {\n if (Blender_Array_Length > 1) {\n const string = byte + '';\n let i = 0;\n const l = string.length;\n while (i < length) {\n if (i < l) {\n this.__blender_file__.byte[(this.__data_address__ + offset + i)] = string.charCodeAt(i) | 0;\n } else {\n this.__blender_file__.byte[(this.__data_address__ + offset + i)] = 0;\n }\n i++;\n }\n } else {\n this.__blender_file__.byte[(this.__data_address__ + offset)] = byte | 0;\n }\n },\n };\n }\n\n function pointerProp2 (offset) {\n return {\n get: function () {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + offset, this.__blender_file__);\n const link = this.__blender_file__.memory_lookup[pointer];\n\n const results = [];\n\n if (link) {\n const address = link.__data_address__;\n let j = 0;\n while (true) {\n pointer = this.__blender_file__.getPointer(address + j * 8, this.__blender_file__);\n let obj = this.__blender_file__.memory_lookup[pointer];\n if (!obj) break;\n results.push(obj);\n j++;\n }\n\n }\n\n return results;\n },\n set: function () {},\n };\n }\n\n function pointerProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n if (Blender_Array_Length > 1) {\n let array = [];\n let j = 0;\n let off = offset;\n while (j < Blender_Array_Length) {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + off, this.__blender_file__);\n\n array.push(this.__blender_file__.memory_lookup[pointer]);\n off += length;\n j++;\n }\n\n return array;\n } else {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + offset, this.__blender_file__);\n return this.__blender_file__.memory_lookup[pointer];\n }\n },\n set: function () {},\n };\n }\n\n function compileProp (obj, name, type, offset, array_size, IS_POINTER, pointer_size, length) {\n\n if (!IS_POINTER) {\n switch (type) {\n case 'double':\n Object.defineProperty(obj, name, float64Prop(offset, array_size, length >> 3));\n break;\n case 'float':\n Object.defineProperty(obj, name, floatProp(offset, array_size, length >> 2));\n break;\n case 'int':\n Object.defineProperty(obj, name, intProp(offset, array_size, length >> 2));\n break;\n case 'short':\n case 'ushort':\n Object.defineProperty(obj, name, shortProp(offset, array_size, length >> 1));\n break;\n case 'char':\n case 'uchar':\n Object.defineProperty(obj, name, charProp(offset, array_size, length));\n break;\n default:\n // compile list to\n obj[name] = {};\n obj.__list__.push(name, type, length, offset, array_size, IS_POINTER);\n }\n obj._length += length;\n offset += length;\n } else {\n Object.defineProperty(obj, name, pointerProp(offset, array_size, pointer_size));\n offset += pointer_size * array_size;\n }\n\n return offset;\n }\n\n // Store final DNA structs\n const MASTER_SDNA_SCHEMA = function (version) {\n this.version = version;\n this.SDNA_SET = false;\n this.byte_size = 0;\n this.struct_index = 0;\n this.structs = {};\n this.SDNA = {};\n this.endianess = false;\n };\n\n MASTER_SDNA_SCHEMA.prototype = {\n getSDNAStructureConstructor: function (name, struct) {\n if (struct) {\n const blen_struct = Function('function ' + name + '(){}; return ' + name)();\n\n blen_struct.prototype = new BLENDER_STRUCTURE();\n blen_struct.prototype.blender_name = name;\n blen_struct.prototype.__pointers = [];\n blen_struct.prototype.__list__ = [];\n\n let offset = 0;\n // Create properties of struct\n for (let i = 0; i < struct.length; i += 3) {\n let _name = struct[i];\n const n = _name,\n type = struct[i + 1];\n let length = struct[i + 2],\n array_length = 0,\n match = null,\n Blender_Array_Length = 1,\n Suparray_match = 1,\n PointerToArray = false,\n Pointer_Match = 0;\n const DNA = this.SDNA[name] = {\n constructor: blen_struct,\n };\n\n\n let original_name = _name;\n\n // mini type parser\n if ((match = _name.match(/(\\*?)(\\*?)(\\w+)(\\[(\\w*)\\])?(\\[(\\w*)\\])?/))) {\n\n // base name\n _name = match[3];\n\n // pointer type\n if (match[1]) {\n Pointer_Match = 10;\n blen_struct.prototype.__pointers.push(_name);\n }\n\n if (match[2]) {\n PointerToArray = true;\n }\n\n // arrays\n if (match[4]) {\n if (match[6]) {\n Suparray_match = parseInt(match[5]);\n Blender_Array_Length = parseInt(match[7]);\n } else {\n Blender_Array_Length = parseInt(match[5]);\n }\n }\n array_length = Blender_Array_Length * length;\n length = array_length * Suparray_match;\n }\n\n DNA[n] = {\n type: type,\n length: length,\n isArray: (Blender_Array_Length > 0),\n };\n\n if (PointerToArray) {\n Object.defineProperty(blen_struct.prototype, _name, pointerProp2(offset));\n offset += pointer_size;\n } else if (Suparray_match > 1) {\n const array_names = new Array(Suparray_match);\n\n // construct sub_array object that will return the correct structs\n for (let j = 0; j < Suparray_match; j++) {\n let array_name_ = `__${_name}[${j}]__`;\n array_names[j] = array_name_;\n\n offset = compileProp(blen_struct.prototype, array_name_, type, offset, Blender_Array_Length, Pointer_Match, pointer_size, array_length);\n }\n\n Object.defineProperty(blen_struct.prototype, _name, {\n get: (function (array_names) {\n return function () {\n const array = [];\n for (let i = 0; i < array_names.length; i++) {\n array.push(this[array_names[i]]);\n }\n return array;\n };\n })(array_names),\n });\n } else {\n offset = compileProp(blen_struct.prototype, _name, type, offset, Blender_Array_Length, Pointer_Match, pointer_size, length);\n }\n }\n\n return this.SDNA[name].constructor;\n\n } else {\n if (!this.SDNA[name]) {\n return null;\n }\n return this.SDNA[name].constructor;\n }\n },\n };\n\n var BLENDER_STRUCTURE = function () {\n this.__blender_file__ = null;\n this.__list__ = null;\n this.__super_array_list__ = null;\n this.blender_name = '';\n this.__pointers = null;\n this.address = null;\n this.length = 0;\n this.__data_address__ = 0;\n this.blender_name = '';\n this._length = 0;\n };\n\n\n /*\n Returns a pre-constructed BLENDER_STRUCTURE or creates a new BLENDER_STRUCTURE to match the DNA struct type\n */\n const pointer_function = (pointer) => () => {\n return FILE.memory_lookup[pointer];\n };\n\n function getPointer (offset) {\n const pointerLow = data.getUint32(offset, BIG_ENDIAN);\n if (pointer_size > 4) {\n const pointerHigh = data.getUint32(offset + 4, BIG_ENDIAN);\n\n if (BIG_ENDIAN) {\n return (pointerLow) + '' + pointerHigh;\n } else {\n return (pointerHigh) + '' + pointerLow;\n }\n } else {\n return pointerLow;\n }\n }\n\n BLENDER_STRUCTURE.prototype = {\n setData: function (pointer, _data_offset, data_block_length, BLENDER_FILE) {\n if (this.__list__ === null) return this;\n BLENDER_FILE.addObject(this);\n\n this.__blender_file__ = BLENDER_FILE;\n\n const struct = this.__list__;\n let j = 0,\n i = 0,\n obj, name = '',\n type, length, Blender_Array_Length, Pointer_Match, offset, constructor;\n\n this.__data_address__ = _data_offset;\n\n if (struct === null) return this;\n\n for (i = 0; i < struct.length; i += 6) {\n obj = null;\n name = struct[i];\n type = struct[i + 1];\n Blender_Array_Length = struct[i + 4];\n Pointer_Match = struct[i + 5];\n offset = this.__data_address__ + struct[i + 3];\n\n if (Blender_Array_Length > 1) {\n this[name] = [];\n j = 0;\n while (j < Blender_Array_Length) {\n if (current_SDNA_template.getSDNAStructureConstructor(type)) {\n constructor = current_SDNA_template.getSDNAStructureConstructor(type);\n this[name].push((new constructor()).setData(0, offset, offset + length / Blender_Array_Length, BLENDER_FILE));\n } else this[name].push(null);\n offset += length / Blender_Array_Length;\n j++;\n }\n } else {\n if (current_SDNA_template.getSDNAStructureConstructor(type)) {\n constructor = current_SDNA_template.getSDNAStructureConstructor(type);\n this[name] = (new constructor()).setData(0, offset, length + offset, BLENDER_FILE);\n } else this[name] = null;\n }\n }\n // break connection to configuration list\n this.__list__ = null;\n return this;\n },\n\n get aname () {\n if (this.id) return this.id.name.slice(2);\n else return undefined;\n },\n };\n\n function toString (buffer, _in, _out) {\n return String.fromCharCode.apply(String, new Uint8Array(buffer, _in, _out - _in));\n }\n\n // Begin parsing blender __blender_file__\n\n function readFile () {\n let count = 0;\n let offset2 = 0;\n const root = 0;\n const i = 0;\n let data_offset = 0;\n let sdna_index = 0;\n let code = '';\n let block_length = 0;\n let curr_count = 0;\n let curr_count2 = 0;\n\n FILE.memory_lookup = {};\n struct_names = [];\n offset = 0;\n\n // Make sure we have a .blend __blender_file__. All blend files have the first 12bytes\n // set with BLENDER-v### in Utf-8\n if (toString(_data, offset, 7) !== 'BLENDER') return ERROR = 'File supplied is not a .blend compatible Blender file.';\n\n // otherwise get templete from save version.\n\n offset += 7;\n pointer_size = ((toString(_data, offset++, offset)) == '_') ? 4 : 8;\n BIG_ENDIAN = toString(_data, offset++, offset) !== 'V';\n const version = toString(_data, offset, offset + 3);\n\n\n // create new master template if none exist for current blender version;\n if (!templates[version]) {\n templates[version] = new MASTER_SDNA_SCHEMA(version);\n }\n\n current_SDNA_template = templates[version];\n\n FILE.template = current_SDNA_template;\n\n offset += 3;\n\n // Set SDNA structs if template hasn't been set.\n // Todo: Move the following block into the MASTER_SDNA_SCHEMA object.\n //* Like so:*/ current_SDNA_template.set(AB);\n\n if (!current_SDNA_template.SDNA_SET) {\n current_SDNA_template.endianess = BIG_ENDIAN;\n current_SDNA_template.pointer_size = pointer_size;\n // find DNA1 data block\n offset2 = offset;\n\n while (true) {\n sdna_index = data.getInt32(offset2 + pointer_size + 8, BIG_ENDIAN);\n // eslint-disable-next-line no-control-regex\n code = toString(_data, offset2, offset2 + 4).replace(/\\u0000/g, '');\n block_length = data.getInt32(offset2 + 4, true);\n offset2 += 16 + (pointer_size);\n if (code === 'DNA1') {\n // DNA found; This is the core of the __blender_file__ and contains all the structure for the various data types used in Blender.\n count = 0;\n let types = [],\n fields = [],\n names = [],\n lengths = [],\n name = '',\n curr_name = '';\n\n // skip SDNA and NAME identifiers\n offset2 += 8;\n\n // Number of structs.\n count = data.getInt32(offset2, true);\n offset2 += 4;\n\n curr_count = 0;\n\n // Build up list of names for structs\n while (curr_count < count) {\n curr_name = '';\n while (data.getInt8(offset2) !== 0) {\n curr_name += toString(_data, offset2, offset2 + 1);\n offset2++;\n }\n names.push(curr_name);\n offset2++;\n curr_count++;\n }\n\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n\n // Number of struct types\n count = data.getInt32(offset2, true);\n offset2 += 4;\n curr_count = 0;\n\n // Build up list of types\n while (curr_count < count) {\n curr_name = '';\n while (data.getInt8(offset2) !== 0) {\n curr_name += toString(_data, offset2, offset2 + 1);\n offset2++;\n }\n types.push(curr_name);\n offset2++;\n curr_count++;\n }\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n curr_count = 0;\n\n // Build up list of byte lengths for types\n while (curr_count < count) {\n lengths.push(data.getInt16(offset2, BIG_ENDIAN));\n offset2 += 2;\n curr_count++;\n }\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n\n // Number of structures\n const structure_count = data.getInt32(offset2, BIG_ENDIAN);\n offset2 += 4;\n curr_count = 0;\n\n // Create constructor objects from list of SDNA structs\n while (curr_count < structure_count) {\n const struct_name = types[data.getInt16(offset2, BIG_ENDIAN)];\n offset2 += 2;\n const obj = [];\n count = data.getInt16(offset2, BIG_ENDIAN);\n offset2 += 2;\n curr_count2 = 0;\n struct_names.push(struct_name);\n\n // Fill an array with name, type, and length for each SDNA struct property\n while (curr_count2 < count) {\n obj.push(names[data.getInt16(offset2 + 2, BIG_ENDIAN)], types[data.getInt16(offset2, BIG_ENDIAN)], lengths[data.getInt16(offset2, BIG_ENDIAN)]);\n offset2 += 4;\n curr_count2++;\n }\n\n // Create a SDNA constructor by passing [type,name,lenth] array as second argument\n current_SDNA_template.getSDNAStructureConstructor(struct_name, obj);\n curr_count++;\n }\n current_SDNA_template.SDNA_SET = true;\n current_SDNA_template.SDNA_NAMES = struct_names;\n break;\n }\n offset2 += block_length;\n }\n }\n\n // parse the rest of the data, starting back at the top.\n\n // TODO: turn into \"on-demand\" parsing.\n\n while (true) {\n if ((offset % 4) > 0) {\n offset = (4 - (offset % 4)) + offset;\n }\n\n data_offset = offset;\n sdna_index = data.getInt32(offset + pointer_size + 8, BIG_ENDIAN);\n let code_uint = data.getUint32(offset, BIG_ENDIAN);\n offset2 = offset + 16 + (pointer_size);\n offset += data.getInt32(offset + 4, true) + 16 + (pointer_size);\n\n if (code_uint === DNA1); // skip - already processed at this point\n else if (code_uint === ENDB) break; // end of __blender_file__ found\n else {\n // Create a Blender object using a constructor template from current_SDNA_template\n const data_start = data_offset + pointer_size + 16;\n\n // Get a SDNA constructor by name;\n const constructor = current_SDNA_template.getSDNAStructureConstructor(current_SDNA_template.SDNA_NAMES[sdna_index]);\n\n const size = data.getInt32(data_offset + 4, BIG_ENDIAN);\n\n count = data.getInt32(data_offset + 12 + pointer_size, BIG_ENDIAN);\n\n if (count > 0) {\n let obj = new constructor();\n\n const length = constructor.prototype._length;\n\n\n const address = FILE.getPointer(data_offset + 8);\n\n obj.address = address + '';\n\n obj.setData(address, data_start, data_start + size, FILE);\n\n if (count > 1) {\n let array = [];\n array.push(obj);\n for (let u = 1; u < count; u++) {\n obj = new constructor();\n obj.setData(address, data_start + length * u, data_start + (length * u) + length, FILE);\n array.push(obj);\n }\n FILE.memory_lookup[address] = array;\n } else {\n FILE.memory_lookup[address] = obj;\n }\n }\n }\n }\n }\n}\n\nworker = new worker_code();\n\nworker.postMessage = function (message) {\n return_object.onParseReady(message);\n};\n\nexport default return_object;\n",null,null,null,null,null,null,"/* eslint-disable camelcase */\n/**\n * JS.Blend\n * Original Repo: https://github.com/acweathersby/js.blend\n * Slightly modified for three.js and js updates, minor refactor.\n * Object-creation part re-written for latest three.js and typescript\n * MIT License\n * Copyright (c) 2020 Anthony C, Weathersby\n * @license\n */\nimport parser from './parser/parser.js';\n\nexport async function parseBlend (buffer, name = '') {\n return new Promise((res, rej) => {\n parser.onParseReady = (file, error) => {\n if (error) rej(error)\n else res(file)\n }\n parser.loadBlendFromArrayBuffer(buffer, name)\n })\n}\n"],"names":["DNA1","ENDB","worker","return_object","loadBlendFromArrayBuffer","array_buffer","ready","onmessage","data","onParseReady","_data","BIG_ENDIAN","pointer_size","struct_names","offset","current_SDNA_template","templates","FILE","ERROR","AB","self","this","BLENDER_FILE","byte","Uint8Array","dv","DataView","objects","memory_lookup","object_array","template","pointerProp2","get","pointer","__blender_file__","getPointer","__data_address__","link","results","address","j","obj","push","set","compileProp","name","type","array_size","IS_POINTER","length","Object","defineProperty","Blender_Array_Length","array","off","pointerProp","Float64Array","getFloat64","endianess","float","setFloat64","float64Prop","Float32Array","getFloat32","setFloat32","floatProp","Int32Array","getInt32","setInt32","intProp","Int16Array","getInt16","setInt16","shortProp","start","end","buffer_guard","toString","string","i","l","charCodeAt","charProp","__list__","_length","prototype","addObject","blender_name","pointerLow","getUint32","pointerHigh","msg","slice","count","offset2","data_offset","sdna_index","code","block_length","curr_count","curr_count2","version","MASTER_SDNA_SCHEMA","SDNA_SET","replace","types","names","lengths","curr_name","getInt8","structure_count","struct_name","getSDNAStructureConstructor","SDNA_NAMES","code_uint","data_start","constructor","size","setData","u","readFile","postMessage","byte_size","struct_index","structs","SDNA","struct","blen_struct","Function","BLENDER_STRUCTURE","__pointers","_name","n","array_length","match","Suparray_match","PointerToArray","Pointer_Match","DNA","parseInt","isArray","array_names","Array","array_name_","__super_array_list__","buffer","_in","_out","String","fromCharCode","apply","_data_offset","data_block_length","aname","id","message","blenderLightTypes","point","sun","spot","hemi","area","createLight","lamp","ldata","position","loc","color","r","g","b","intensity","energy","light","PointLight","fromArray","castShadow","shadow","mapSize","width","height","camera","near","far","console","warn","createMesh","object","geometry","mesh","origin","faces","mpoly","loops","mloop","uv","mloopuv","vertices","mvert","BufferGeometry","reduce","acc","face","Math","floor","totloop","indices","Uint32Array","uvs","normals","positions","currentIndex","len","loopstart","indexi","index","vert","v","co","no","setAttribute","BufferAttribute","setIndex","createBufferGeometry","mat","material","MeshPhysicalMaterial","setRGB","roughness","undefined","metalness","metallic","opacity","alpha","transparent","createMaterial","Mesh","receiveShadow","rotateZ","rot","rotateY","rotateX","scale","blenderObjectTypes","BlendLoadPlugin","BaseImporterPlugin","super","_importer","Importer","FileLoader","async","url","onProgress","setResponseType","res","loadAsync","blend","Promise","rej","parser","file","error","parseBlend","blendObjects","filter","o","createObjects","root","Object3D","add","scene","transform","_","PluginType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/js-blend/parser/parser.js","../src/loader/light.ts","../src/loader/mesh.ts","../src/loader/geometry.ts","../src/loader/material.ts","../src/loader/index.ts","../src/BlendLoadPlugin.ts","../src/js-blend/main.js"],"sourcesContent":["/* eslint-disable camelcase, no-unused-vars, no-empty, no-constant-condition */\nconst DNA1 = 826363460;\nconst ENDB = 1111772741;\n\n/* Note: Blender coordinates treat the Z axis as the vertical an Y as depth. */\n\n// web worker not functional in this version\nlet USE_WEBWORKER = false;\n\nlet worker = null;\n\n// FR = new FileReader(),\n\nconst return_object = {\n loadBlendFromArrayBuffer: function (array_buffer) {\n return_object.ready = false;\n if (USE_WEBWORKER) {\n worker.postMessage(array_buffer, array_buffer);\n } else {\n worker.onmessage({\n data: array_buffer,\n });\n }\n },\n // loadBlendFromBlob: function (blob) {\n // FR.onload = function () {\n // return_object.loadBlendFromArrayBuffer(this.result);\n // };\n // FR.readAsArrayBuffer(blob);\n // },\n ready: true,\n onParseReady: function () {},\n};\n\nfunction worker_code () {\n 'use strict';\n\n let data = null,\n _data = null,\n BIG_ENDIAN = false,\n pointer_size = 0,\n struct_names = [],\n offset = 0,\n working_blend_file = null,\n current_SDNA_template = null,\n templates = {},\n finished_objects = [],\n FILE = null,\n ERROR = null,\n AB = null;\n\n const self = this;\n\n function parseFile (msg) {\n\n if (typeof msg.data == 'object') {\n // reset global variables\n AB = null;\n data = null;\n BIG_ENDIAN = false;\n pointer_size = 0;\n struct_names = [];\n offset = 0;\n working_blend_file = null;\n finished_objects = [];\n current_SDNA_template = null;\n\n\n // set data\n _data = msg.data;\n\n AB = _data.slice();\n\n data = new DataView(_data);\n\n\n FILE = new BLENDER_FILE(AB);\n\n // start parsing\n readFile();\n\n // export parsed data\n self.postMessage(FILE, ERROR);\n }\n }\n\n /*\n Export object for a parsed __blender_file__.\n */\n\n var BLENDER_FILE = function (AB) {\n this.AB = AB;\n // this.double = new Float64Array(AB);\n this.byte = new Uint8Array(AB);\n\n this.dv = new DataView(AB);\n\n this.objects = {};\n this.memory_lookup = {},\n this.object_array = [];\n\n this.template = null;\n };\n\n BLENDER_FILE.prototype = {\n addObject: function (obj) {\n this.object_array.push(obj);\n if (!this.objects[obj.blender_name]) this.objects[obj.blender_name] = [];\n this.objects[obj.blender_name].push(obj);\n },\n\n getPointer: function (offset) {\n const pointerLow = this.dv.getUint32(offset, this.template.endianess);\n if (this.template.pointer_size > 4) {\n const pointerHigh = this.dv.getUint32(offset + 4, this.template.endianess);\n if (this.template.endianess) {\n return (pointerLow) + 'l|h' + pointerHigh;\n } else {\n return (pointerHigh) + 'h|l' + pointerLow;\n }\n } else {\n return pointerLow;\n }\n },\n };\n\n self.onmessage = parseFile;\n // this.onmessage = parseFile;\n\n /*\n These functions map offsets in the blender __blender_file__ to basic types (byte,short,int,float) through TypedArrays;\n This allows the underlying binary data to be changed.\n */\n\n function float64Prop (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Float64Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getFloat64(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setFloat64(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function floatProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Float32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getFloat32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setFloat32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function intProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Int32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getInt32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setInt32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function uIntProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Uint32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getUint32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setUint32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function shortProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Int16Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getInt16(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setInt16(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n const uShortProp = (offset, Blender_Array_Length, length) => {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Uint16Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getUint16(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {\n } else {\n this.__blender_file__.dv.setUint16(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n };\n\n function charProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n if (Blender_Array_Length > 1) {\n let start = this.__data_address__ + offset;\n let end = start;\n let buffer_guard = 0;\n\n while (this.__blender_file__.byte[end] != 0 && buffer_guard++ < length) end++;\n\n return toString(this.__blender_file__.AB, start, end);\n }\n return this.__blender_file__.byte[(this.__data_address__ + offset)];\n },\n set: function (byte) {\n if (Blender_Array_Length > 1) {\n const string = byte + '';\n let i = 0;\n const l = string.length;\n while (i < length) {\n if (i < l) {\n this.__blender_file__.byte[(this.__data_address__ + offset + i)] = string.charCodeAt(i) | 0;\n } else {\n this.__blender_file__.byte[(this.__data_address__ + offset + i)] = 0;\n }\n i++;\n }\n } else {\n this.__blender_file__.byte[(this.__data_address__ + offset)] = byte | 0;\n }\n },\n };\n }\n\n function pointerProp2 (offset) {\n return {\n get: function () {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + offset, this.__blender_file__);\n const link = this.__blender_file__.memory_lookup[pointer];\n\n const results = [];\n\n if (link) {\n const address = link.__data_address__;\n let j = 0;\n while (true) {\n pointer = this.__blender_file__.getPointer(address + j * 8, this.__blender_file__);\n let obj = this.__blender_file__.memory_lookup[pointer];\n if (!obj) break;\n results.push(obj);\n j++;\n }\n\n }\n\n return results;\n },\n set: function () {},\n };\n }\n\n function pointerProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n if (Blender_Array_Length > 1) {\n let array = [];\n let j = 0;\n let off = offset;\n while (j < Blender_Array_Length) {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + off, this.__blender_file__);\n\n array.push(this.__blender_file__.memory_lookup[pointer]);\n off += length;\n j++;\n }\n\n return array;\n } else {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + offset, this.__blender_file__);\n return this.__blender_file__.memory_lookup[pointer];\n }\n },\n set: function () {},\n };\n }\n\n function compileProp (obj, name, type, offset, array_size, IS_POINTER, pointer_size, length) {\n\n if (!IS_POINTER) {\n switch (type) {\n case 'double':\n Object.defineProperty(obj, name, float64Prop(offset, array_size, length >> 3));\n break;\n case 'float':\n Object.defineProperty(obj, name, floatProp(offset, array_size, length >> 2));\n break;\n case 'int':\n Object.defineProperty(obj, name, intProp(offset, array_size, length >> 2));\n break;\n case 'short':\n case 'ushort':\n Object.defineProperty(obj, name, shortProp(offset, array_size, length >> 1));\n break;\n case 'char':\n case 'uchar':\n Object.defineProperty(obj, name, charProp(offset, array_size, length));\n break;\n default:\n // compile list to\n obj[name] = {};\n obj.__list__.push(name, type, length, offset, array_size, IS_POINTER);\n }\n obj._length += length;\n offset += length;\n } else {\n Object.defineProperty(obj, name, pointerProp(offset, array_size, pointer_size));\n offset += pointer_size * array_size;\n }\n\n return offset;\n }\n\n // Store final DNA structs\n const MASTER_SDNA_SCHEMA = function (version) {\n this.version = version;\n this.SDNA_SET = false;\n this.byte_size = 0;\n this.struct_index = 0;\n this.structs = {};\n this.SDNA = {};\n this.endianess = false;\n };\n\n MASTER_SDNA_SCHEMA.prototype = {\n getSDNAStructureConstructor: function (name, struct) {\n if (struct) {\n const blen_struct = Function('function ' + name + '(){}; return ' + name)();\n\n blen_struct.prototype = new BLENDER_STRUCTURE();\n blen_struct.prototype.blender_name = name;\n blen_struct.prototype.__pointers = [];\n blen_struct.prototype.__list__ = [];\n\n let offset = 0;\n // Create properties of struct\n for (let i = 0; i < struct.length; i += 3) {\n let _name = struct[i];\n const n = _name,\n type = struct[i + 1];\n let length = struct[i + 2],\n array_length = 0,\n match = null,\n Blender_Array_Length = 1,\n Suparray_match = 1,\n PointerToArray = false,\n Pointer_Match = 0;\n const DNA = this.SDNA[name] = {\n constructor: blen_struct,\n };\n\n\n let original_name = _name;\n\n // mini type parser\n if ((match = _name.match(/(\\*?)(\\*?)(\\w+)(\\[(\\w*)\\])?(\\[(\\w*)\\])?/))) {\n\n // base name\n _name = match[3];\n\n // pointer type\n if (match[1]) {\n Pointer_Match = 10;\n blen_struct.prototype.__pointers.push(_name);\n }\n\n if (match[2]) {\n PointerToArray = true;\n }\n\n // arrays\n if (match[4]) {\n if (match[6]) {\n Suparray_match = parseInt(match[5]);\n Blender_Array_Length = parseInt(match[7]);\n } else {\n Blender_Array_Length = parseInt(match[5]);\n }\n }\n array_length = Blender_Array_Length * length;\n length = array_length * Suparray_match;\n }\n\n DNA[n] = {\n type: type,\n length: length,\n isArray: (Blender_Array_Length > 0),\n };\n\n if (PointerToArray) {\n Object.defineProperty(blen_struct.prototype, _name, pointerProp2(offset));\n offset += pointer_size;\n } else if (Suparray_match > 1) {\n const array_names = new Array(Suparray_match);\n\n // construct sub_array object that will return the correct structs\n for (let j = 0; j < Suparray_match; j++) {\n let array_name_ = `__${_name}[${j}]__`;\n array_names[j] = array_name_;\n\n offset = compileProp(blen_struct.prototype, array_name_, type, offset, Blender_Array_Length, Pointer_Match, pointer_size, array_length);\n }\n\n Object.defineProperty(blen_struct.prototype, _name, {\n get: (function (array_names) {\n return function () {\n const array = [];\n for (let i = 0; i < array_names.length; i++) {\n array.push(this[array_names[i]]);\n }\n return array;\n };\n })(array_names),\n });\n } else {\n offset = compileProp(blen_struct.prototype, _name, type, offset, Blender_Array_Length, Pointer_Match, pointer_size, length);\n }\n }\n\n return this.SDNA[name].constructor;\n\n } else {\n if (!this.SDNA[name]) {\n return null;\n }\n return this.SDNA[name].constructor;\n }\n },\n };\n\n var BLENDER_STRUCTURE = function () {\n this.__blender_file__ = null;\n this.__list__ = null;\n this.__super_array_list__ = null;\n this.blender_name = '';\n this.__pointers = null;\n this.address = null;\n this.length = 0;\n this.__data_address__ = 0;\n this.blender_name = '';\n this._length = 0;\n };\n\n\n /*\n Returns a pre-constructed BLENDER_STRUCTURE or creates a new BLENDER_STRUCTURE to match the DNA struct type\n */\n const pointer_function = (pointer) => () => {\n return FILE.memory_lookup[pointer];\n };\n\n function getPointer (offset) {\n const pointerLow = data.getUint32(offset, BIG_ENDIAN);\n if (pointer_size > 4) {\n const pointerHigh = data.getUint32(offset + 4, BIG_ENDIAN);\n\n if (BIG_ENDIAN) {\n return (pointerLow) + '' + pointerHigh;\n } else {\n return (pointerHigh) + '' + pointerLow;\n }\n } else {\n return pointerLow;\n }\n }\n\n BLENDER_STRUCTURE.prototype = {\n setData: function (pointer, _data_offset, data_block_length, BLENDER_FILE) {\n if (this.__list__ === null) return this;\n BLENDER_FILE.addObject(this);\n\n this.__blender_file__ = BLENDER_FILE;\n\n const struct = this.__list__;\n let j = 0,\n i = 0,\n obj, name = '',\n type, length, Blender_Array_Length, Pointer_Match, offset, constructor;\n\n this.__data_address__ = _data_offset;\n\n if (struct === null) return this;\n\n for (i = 0; i < struct.length; i += 6) {\n obj = null;\n name = struct[i];\n type = struct[i + 1];\n Blender_Array_Length = struct[i + 4];\n Pointer_Match = struct[i + 5];\n offset = this.__data_address__ + struct[i + 3];\n\n if (Blender_Array_Length > 1) {\n this[name] = [];\n j = 0;\n while (j < Blender_Array_Length) {\n if (current_SDNA_template.getSDNAStructureConstructor(type)) {\n constructor = current_SDNA_template.getSDNAStructureConstructor(type);\n this[name].push((new constructor()).setData(0, offset, offset + length / Blender_Array_Length, BLENDER_FILE));\n } else this[name].push(null);\n offset += length / Blender_Array_Length;\n j++;\n }\n } else {\n if (current_SDNA_template.getSDNAStructureConstructor(type)) {\n constructor = current_SDNA_template.getSDNAStructureConstructor(type);\n this[name] = (new constructor()).setData(0, offset, length + offset, BLENDER_FILE);\n } else this[name] = null;\n }\n }\n // break connection to configuration list\n this.__list__ = null;\n return this;\n },\n\n get aname () {\n if (this.id) return this.id.name.slice(2);\n else return undefined;\n },\n };\n\n function toString (buffer, _in, _out) {\n return String.fromCharCode.apply(String, new Uint8Array(buffer, _in, _out - _in));\n }\n\n // Begin parsing blender __blender_file__\n\n function readFile () {\n let count = 0;\n let offset2 = 0;\n const root = 0;\n const i = 0;\n let data_offset = 0;\n let sdna_index = 0;\n let code = '';\n let block_length = 0;\n let curr_count = 0;\n let curr_count2 = 0;\n\n FILE.memory_lookup = {};\n struct_names = [];\n offset = 0;\n\n // Make sure we have a .blend __blender_file__. All blend files have the first 12bytes\n // set with BLENDER-v### in Utf-8\n if (toString(_data, offset, 7) !== 'BLENDER') return ERROR = 'File supplied is not a .blend compatible Blender file.';\n\n // otherwise get templete from save version.\n\n offset += 7;\n pointer_size = ((toString(_data, offset++, offset)) == '_') ? 4 : 8;\n BIG_ENDIAN = toString(_data, offset++, offset) !== 'V';\n const version = toString(_data, offset, offset + 3);\n\n\n // create new master template if none exist for current blender version;\n if (!templates[version]) {\n templates[version] = new MASTER_SDNA_SCHEMA(version);\n }\n\n current_SDNA_template = templates[version];\n\n FILE.template = current_SDNA_template;\n\n offset += 3;\n\n // Set SDNA structs if template hasn't been set.\n // Todo: Move the following block into the MASTER_SDNA_SCHEMA object.\n //* Like so:*/ current_SDNA_template.set(AB);\n\n if (!current_SDNA_template.SDNA_SET) {\n current_SDNA_template.endianess = BIG_ENDIAN;\n current_SDNA_template.pointer_size = pointer_size;\n // find DNA1 data block\n offset2 = offset;\n\n while (true) {\n sdna_index = data.getInt32(offset2 + pointer_size + 8, BIG_ENDIAN);\n // eslint-disable-next-line no-control-regex\n code = toString(_data, offset2, offset2 + 4).replace(/\\u0000/g, '');\n block_length = data.getInt32(offset2 + 4, true);\n offset2 += 16 + (pointer_size);\n if (code === 'DNA1') {\n // DNA found; This is the core of the __blender_file__ and contains all the structure for the various data types used in Blender.\n count = 0;\n let types = [],\n fields = [],\n names = [],\n lengths = [],\n name = '',\n curr_name = '';\n\n // skip SDNA and NAME identifiers\n offset2 += 8;\n\n // Number of structs.\n count = data.getInt32(offset2, true);\n offset2 += 4;\n\n curr_count = 0;\n\n // Build up list of names for structs\n while (curr_count < count) {\n curr_name = '';\n while (data.getInt8(offset2) !== 0) {\n curr_name += toString(_data, offset2, offset2 + 1);\n offset2++;\n }\n names.push(curr_name);\n offset2++;\n curr_count++;\n }\n\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n\n // Number of struct types\n count = data.getInt32(offset2, true);\n offset2 += 4;\n curr_count = 0;\n\n // Build up list of types\n while (curr_count < count) {\n curr_name = '';\n while (data.getInt8(offset2) !== 0) {\n curr_name += toString(_data, offset2, offset2 + 1);\n offset2++;\n }\n types.push(curr_name);\n offset2++;\n curr_count++;\n }\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n curr_count = 0;\n\n // Build up list of byte lengths for types\n while (curr_count < count) {\n lengths.push(data.getInt16(offset2, BIG_ENDIAN));\n offset2 += 2;\n curr_count++;\n }\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n\n // Number of structures\n const structure_count = data.getInt32(offset2, BIG_ENDIAN);\n offset2 += 4;\n curr_count = 0;\n\n // Create constructor objects from list of SDNA structs\n while (curr_count < structure_count) {\n const struct_name = types[data.getInt16(offset2, BIG_ENDIAN)];\n offset2 += 2;\n const obj = [];\n count = data.getInt16(offset2, BIG_ENDIAN);\n offset2 += 2;\n curr_count2 = 0;\n struct_names.push(struct_name);\n\n // Fill an array with name, type, and length for each SDNA struct property\n while (curr_count2 < count) {\n obj.push(names[data.getInt16(offset2 + 2, BIG_ENDIAN)], types[data.getInt16(offset2, BIG_ENDIAN)], lengths[data.getInt16(offset2, BIG_ENDIAN)]);\n offset2 += 4;\n curr_count2++;\n }\n\n // Create a SDNA constructor by passing [type,name,lenth] array as second argument\n current_SDNA_template.getSDNAStructureConstructor(struct_name, obj);\n curr_count++;\n }\n current_SDNA_template.SDNA_SET = true;\n current_SDNA_template.SDNA_NAMES = struct_names;\n break;\n }\n offset2 += block_length;\n }\n }\n\n // parse the rest of the data, starting back at the top.\n\n // TODO: turn into \"on-demand\" parsing.\n\n while (true) {\n if ((offset % 4) > 0) {\n offset = (4 - (offset % 4)) + offset;\n }\n\n data_offset = offset;\n sdna_index = data.getInt32(offset + pointer_size + 8, BIG_ENDIAN);\n let code_uint = data.getUint32(offset, BIG_ENDIAN);\n offset2 = offset + 16 + (pointer_size);\n offset += data.getInt32(offset + 4, true) + 16 + (pointer_size);\n\n if (code_uint === DNA1); // skip - already processed at this point\n else if (code_uint === ENDB) break; // end of __blender_file__ found\n else {\n // Create a Blender object using a constructor template from current_SDNA_template\n const data_start = data_offset + pointer_size + 16;\n\n // Get a SDNA constructor by name;\n const constructor = current_SDNA_template.getSDNAStructureConstructor(current_SDNA_template.SDNA_NAMES[sdna_index]);\n\n const size = data.getInt32(data_offset + 4, BIG_ENDIAN);\n\n count = data.getInt32(data_offset + 12 + pointer_size, BIG_ENDIAN);\n\n if (count > 0) {\n let obj = new constructor();\n\n const length = constructor.prototype._length;\n\n\n const address = FILE.getPointer(data_offset + 8);\n\n obj.address = address + '';\n\n obj.setData(address, data_start, data_start + size, FILE);\n\n if (count > 1) {\n let array = [];\n array.push(obj);\n for (let u = 1; u < count; u++) {\n obj = new constructor();\n obj.setData(address, data_start + length * u, data_start + (length * u) + length, FILE);\n array.push(obj);\n }\n FILE.memory_lookup[address] = array;\n } else {\n FILE.memory_lookup[address] = obj;\n }\n }\n }\n }\n }\n}\n\nworker = new worker_code();\n\nworker.postMessage = function (message) {\n return_object.onParseReady(message);\n};\n\nexport default return_object;\n",null,null,null,null,null,null,"/* eslint-disable camelcase */\n/**\n * JS.Blend\n * Original Repo: https://github.com/acweathersby/js.blend\n * Slightly modified for three.js and js updates, minor refactor.\n * Object-creation part re-written for latest three.js and typescript\n * MIT License\n * Copyright (c) 2020 Anthony C, Weathersby\n * @license\n */\nimport parser from './parser/parser.js';\n\nexport async function parseBlend (buffer, name = '') {\n return new Promise((res, rej) => {\n parser.onParseReady = (file, error) => {\n if (error) rej(error)\n else res(file)\n }\n parser.loadBlendFromArrayBuffer(buffer, name)\n })\n}\n"],"names":["DNA1","ENDB","worker","return_object","loadBlendFromArrayBuffer","array_buffer","ready","onmessage","data","onParseReady","_data","BIG_ENDIAN","pointer_size","struct_names","offset","current_SDNA_template","templates","FILE","ERROR","AB","self","this","BLENDER_FILE","byte","Uint8Array","dv","DataView","objects","memory_lookup","object_array","template","pointerProp2","get","pointer","__blender_file__","getPointer","__data_address__","link","results","address","j","obj","push","set","compileProp","name","type","array_size","IS_POINTER","length","Object","defineProperty","Blender_Array_Length","array","off","pointerProp","Float64Array","getFloat64","endianess","float","setFloat64","float64Prop","Float32Array","getFloat32","setFloat32","floatProp","Int32Array","getInt32","setInt32","intProp","Int16Array","getInt16","setInt16","shortProp","start","end","buffer_guard","toString","string","i","l","charCodeAt","charProp","__list__","_length","prototype","addObject","blender_name","pointerLow","getUint32","pointerHigh","msg","slice","count","offset2","data_offset","sdna_index","code","block_length","curr_count","curr_count2","version","MASTER_SDNA_SCHEMA","SDNA_SET","replace","types","names","lengths","curr_name","getInt8","structure_count","struct_name","getSDNAStructureConstructor","SDNA_NAMES","code_uint","data_start","constructor","size","setData","u","readFile","postMessage","byte_size","struct_index","structs","SDNA","struct","blen_struct","Function","BLENDER_STRUCTURE","__pointers","_name","n","array_length","match","Suparray_match","PointerToArray","Pointer_Match","DNA","parseInt","isArray","array_names","Array","array_name_","__super_array_list__","buffer","_in","_out","String","fromCharCode","apply","_data_offset","data_block_length","aname","id","message","blenderLightTypes","point","sun","spot","hemi","area","createLight","lamp","ldata","position","loc","color","r","g","b","intensity","energy","light","PointLight","fromArray","castShadow","shadow","mapSize","width","height","camera","near","far","console","warn","createMesh","object","geometry","mesh","origin","faces","mpoly","loops","mloop","uv","mloopuv","vertices","mvert","BufferGeometry","reduce","acc","face","Math","floor","totloop","indices","Uint32Array","uvs","normals","positions","currentIndex","len","loopstart","indexi","index","vert","v","co","no","setAttribute","BufferAttribute","setIndex","createBufferGeometry","mat","material","MeshPhysicalMaterial","setRGB","roughness","undefined","metalness","metallic","opacity","alpha","transparent","createMaterial","Mesh","receiveShadow","rotateZ","rot","rotateY","rotateX","scale","blenderObjectTypes","BlendLoadPlugin","BaseImporterPlugin","super","_importer","Importer","FileLoader","loadAsync","url","onProgress","setResponseType","res","blend","async","Promise","rej","parser","file","error","parseBlend","blendObjects","filter","o","createObjects","root","Object3D","add","scene","transform","_","PluginType"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
|
-
* @threepipe/plugin-blend-importer v0.0.
|
|
4
|
-
* Copyright 2022-
|
|
3
|
+
* @threepipe/plugin-blend-importer v0.0.2
|
|
4
|
+
* Copyright 2022-2024 repalash <palash@shaders.app>
|
|
5
5
|
* Apache-2.0 License
|
|
6
|
+
* See ./dependencies.txt for bundled third-party dependencies and licenses.
|
|
6
7
|
*/
|
|
7
8
|
import{PointLight as t,BufferGeometry as e,BufferAttribute as n,MeshPhysicalMaterial as r,Mesh as s,BaseImporterPlugin as _,Importer as i,FileLoader as o,Object3D as a}from"threepipe";const l=826363460,d=1111772741;let u=null;const c={loadBlendFromArrayBuffer:function(t){c.ready=!1,u.onmessage({data:t})},ready:!0,onParseReady:function(){}};u=new function(){let t=null,e=null,n=!1,r=0,s=[],_=0,i=null,o={},a=null,u=null,c=null;const h=this;var f=function(t){this.AB=t,this.byte=new Uint8Array(t),this.dv=new DataView(t),this.objects={},this.memory_lookup={},this.object_array=[],this.template=null};function p(t){return{get:function(){let e=this.__blender_file__.getPointer(this.__data_address__+t,this.__blender_file__);const n=this.__blender_file__.memory_lookup[e],r=[];if(n){const t=n.__data_address__;let s=0;for(;;){e=this.__blender_file__.getPointer(t+8*s,this.__blender_file__);let n=this.__blender_file__.memory_lookup[e];if(!n)break;r.push(n),s++}}return r},set:function(){}}}function b(t,e,n,r,s,_,i,o){if(_)Object.defineProperty(t,e,function(t,e,n){return{get:function(){if(e>1){let r=[],s=0,_=t;for(;s<e;){let t=this.__blender_file__.getPointer(this.__data_address__+_,this.__blender_file__);r.push(this.__blender_file__.memory_lookup[t]),_+=n,s++}return r}{let e=this.__blender_file__.getPointer(this.__data_address__+t,this.__blender_file__);return this.__blender_file__.memory_lookup[e]}},set:function(){}}}(r,s,i)),r+=i*s;else{switch(n){case"double":Object.defineProperty(t,e,function(t,e,n){return{get:function(){return e>1?new Float64Array(this.__blender_file__.AB,this.__data_address__+t,n):this.__blender_file__.dv.getFloat64(this.__data_address__+t,this.__blender_file__.template.endianess)},set:function(n){e>1||this.__blender_file__.dv.setFloat64(this.__data_address__+t,n,this.__blender_file__.template.endianess)}}}(r,s,o>>3));break;case"float":Object.defineProperty(t,e,function(t,e,n){return{get:function(){return e>1?new Float32Array(this.__blender_file__.AB,this.__data_address__+t,n):this.__blender_file__.dv.getFloat32(this.__data_address__+t,this.__blender_file__.template.endianess)},set:function(n){e>1||this.__blender_file__.dv.setFloat32(this.__data_address__+t,n,this.__blender_file__.template.endianess)}}}(r,s,o>>2));break;case"int":Object.defineProperty(t,e,function(t,e,n){return{get:function(){return e>1?new Int32Array(this.__blender_file__.AB,this.__data_address__+t,n):this.__blender_file__.dv.getInt32(this.__data_address__+t,this.__blender_file__.template.endianess)},set:function(n){e>1||this.__blender_file__.dv.setInt32(this.__data_address__+t,n,this.__blender_file__.template.endianess)}}}(r,s,o>>2));break;case"short":case"ushort":Object.defineProperty(t,e,function(t,e,n){return{get:function(){return e>1?new Int16Array(this.__blender_file__.AB,this.__data_address__+t,n):this.__blender_file__.dv.getInt16(this.__data_address__+t,this.__blender_file__.template.endianess)},set:function(n){e>1||this.__blender_file__.dv.setInt16(this.__data_address__+t,n,this.__blender_file__.template.endianess)}}}(r,s,o>>1));break;case"char":case"uchar":Object.defineProperty(t,e,function(t,e,n){return{get:function(){if(e>1){let e=this.__data_address__+t,r=e,s=0;for(;0!=this.__blender_file__.byte[r]&&s++<n;)r++;return m(this.__blender_file__.AB,e,r)}return this.__blender_file__.byte[this.__data_address__+t]},set:function(r){if(e>1){const e=r+"";let s=0;const _=e.length;for(;s<n;)this.__blender_file__.byte[this.__data_address__+t+s]=s<_?0|e.charCodeAt(s):0,s++}else this.__blender_file__.byte[this.__data_address__+t]=0|r}}}(r,s,o));break;default:t[e]={},t.__list__.push(e,n,o,r,s,_)}t._length+=o,r+=o}return r}f.prototype={addObject:function(t){this.object_array.push(t),this.objects[t.blender_name]||(this.objects[t.blender_name]=[]),this.objects[t.blender_name].push(t)},getPointer:function(t){const e=this.dv.getUint32(t,this.template.endianess);if(this.template.pointer_size>4){const n=this.dv.getUint32(t+4,this.template.endianess);return this.template.endianess?e+"l|h"+n:n+"h|l"+e}return e}},h.onmessage=function(p){"object"==typeof p.data&&(c=null,t=null,n=!1,r=0,s=[],_=0,i=null,e=p.data,c=e.slice(),t=new DataView(e),a=new f(c),function(){let c=0,h=0,f=0,p=0,b="",g=0,w=0,A=0;if(a.memory_lookup={},s=[],_=0,"BLENDER"!==m(e,_,7))return u="File supplied is not a .blend compatible Blender file.";_+=7,r="_"==m(e,_++,_)?4:8,n="V"!==m(e,_++,_);const S=m(e,_,_+3);o[S]||(o[S]=new y(S));if(i=o[S],a.template=i,_+=3,!i.SDNA_SET)for(i.endianess=n,i.pointer_size=r,h=_;;){if(p=t.getInt32(h+r+8,n),b=m(e,h,h+4).replace(/\u0000/g,""),g=t.getInt32(h+4,!0),h+=16+r,"DNA1"===b){c=0;let r=[],_=[],o=[],a="";for(h+=8,c=t.getInt32(h,!0),h+=4,w=0;w<c;){for(a="";0!==t.getInt8(h);)a+=m(e,h,h+1),h++;_.push(a),h++,w++}for(h%4>0&&(h=4-h%4+h),h+=4,c=t.getInt32(h,!0),h+=4,w=0;w<c;){for(a="";0!==t.getInt8(h);)a+=m(e,h,h+1),h++;r.push(a),h++,w++}for(h%4>0&&(h=4-h%4+h),h+=4,w=0;w<c;)o.push(t.getInt16(h,n)),h+=2,w++;h%4>0&&(h=4-h%4+h),h+=4;const l=t.getInt32(h,n);for(h+=4,w=0;w<l;){const e=r[t.getInt16(h,n)];h+=2;const a=[];for(c=t.getInt16(h,n),h+=2,A=0,s.push(e);A<c;)a.push(_[t.getInt16(h+2,n)],r[t.getInt16(h,n)],o[t.getInt16(h,n)]),h+=4,A++;i.getSDNAStructureConstructor(e,a),w++}i.SDNA_SET=!0,i.SDNA_NAMES=s;break}h+=g}for(;;){_%4>0&&(_=4-_%4+_),f=_,p=t.getInt32(_+r+8,n);let e=t.getUint32(_,n);if(h=_+16+r,_+=t.getInt32(_+4,!0)+16+r,e===l);else{if(e===d)break;{const e=f+r+16,s=i.getSDNAStructureConstructor(i.SDNA_NAMES[p]),_=t.getInt32(f+4,n);if(c=t.getInt32(f+12+r,n),c>0){let t=new s;const n=s.prototype._length,r=a.getPointer(f+8);if(t.address=r+"",t.setData(r,e,e+_,a),c>1){let _=[];_.push(t);for(let i=1;i<c;i++)t=new s,t.setData(r,e+n*i,e+n*i+n,a),_.push(t);a.memory_lookup[r]=_}else a.memory_lookup[r]=t}}}}}(),h.postMessage(a,u))};const y=function(t){this.version=t,this.SDNA_SET=!1,this.byte_size=0,this.struct_index=0,this.structs={},this.SDNA={},this.endianess=!1};y.prototype={getSDNAStructureConstructor:function(t,e){if(e){const n=Function("function "+t+"(){}; return "+t)();n.prototype=new g,n.prototype.blender_name=t,n.prototype.__pointers=[],n.prototype.__list__=[];let s=0;for(let _=0;_<e.length;_+=3){let i=e[_];const o=i,a=e[_+1];let l=e[_+2],d=0,u=null,c=1,h=1,f=!1,y=0;const g=this.SDNA[t]={constructor:n};if((u=i.match(/(\*?)(\*?)(\w+)(\[(\w*)\])?(\[(\w*)\])?/))&&(i=u[3],u[1]&&(y=10,n.prototype.__pointers.push(i)),u[2]&&(f=!0),u[4]&&(u[6]?(h=parseInt(u[5]),c=parseInt(u[7])):c=parseInt(u[5])),d=c*l,l=d*h),g[o]={type:a,length:l,isArray:c>0},f)Object.defineProperty(n.prototype,i,p(s)),s+=r;else if(h>1){const t=new Array(h);for(let e=0;e<h;e++){let _=`__${i}[${e}]__`;t[e]=_,s=b(n.prototype,_,a,s,c,y,r,d)}Object.defineProperty(n.prototype,i,{get:function(t){return function(){const e=[];for(let n=0;n<t.length;n++)e.push(this[t[n]]);return e}}(t)})}else s=b(n.prototype,i,a,s,c,y,r,l)}return this.SDNA[t].constructor}return this.SDNA[t]?this.SDNA[t].constructor:null}};var g=function(){this.__blender_file__=null,this.__list__=null,this.__super_array_list__=null,this.blender_name="",this.__pointers=null,this.address=null,this.length=0,this.__data_address__=0,this.blender_name="",this._length=0};function m(t,e,n){return String.fromCharCode.apply(String,new Uint8Array(t,e,n-e))}g.prototype={setData:function(t,e,n,r){if(null===this.__list__)return this;r.addObject(this),this.__blender_file__=r;const s=this.__list__;let _,o,a,l,d,u=0,c=0,h="";if(this.__data_address__=e,null===s)return this;for(c=0;c<s.length;c+=6)if(h=s[c],_=s[c+1],a=s[c+4],s[c+5],l=this.__data_address__+s[c+3],a>1)for(this[h]=[],u=0;u<a;)i.getSDNAStructureConstructor(_)?(d=i.getSDNAStructureConstructor(_),this[h].push((new d).setData(0,l,l+o/a,r))):this[h].push(null),l+=o/a,u++;else i.getSDNAStructureConstructor(_)?(d=i.getSDNAStructureConstructor(_),this[h]=(new d).setData(0,l,o+l,r)):this[h]=null;return this.__list__=null,this},get aname(){return this.id?this.id.name.slice(2):void 0}}},u.postMessage=function(t){c.onParseReady(t)};const h={point:0,sun:1,spot:0,hemi:0,area:0};function f(e){const n=e.data,r=[e.loc[0],e.loc[2],-e.loc[1]],s=255*n.r<<16|255*n.g<<8|255*n.b<<0,_=n.energy;let i=null;switch(n.type){case h.point:i=new t(s,_,0),i.position.fromArray(r,0),i.castShadow=!0;break;case h.sun:i=new t(s,_,0),i.position.fromArray(r,0),i.castShadow=!0,i.shadow.mapSize.width=1024,i.shadow.mapSize.height=1024,i.shadow.camera.near=.01,i.shadow.camera.far=500;break;default:console.warn("Unsupported light type",n.type)}return i}function p(t){if(!t.data)return null;const _=function(t,r){const s=Array.isArray(t.mpoly)?t.mpoly:[t.mpoly],_=t.mloop,i=t.mloopuv,o=t.mvert,a=new e;if(!s)return a;const l=s.reduce(((t,e)=>t+Math.floor(3*e.totloop/2)),0),d=new Uint32Array(l),u=new Float32Array(2*l),c=new Float32Array(3*l),h=new Float32Array(3*l);let f=0;for(const t of s){const e=t.totloop,n=t.loopstart;let s=1;for(;s<e;){let t=0;for(let a=0;a<3;a++){t=n,s-1+a<e&&(t+=s-1+a);const l=o[_[t].v];d[f]=f,h[3*f+0]=l.co[0]+r[0],h[3*f+1]=l.co[2]+r[2],h[3*f+2]=-l.co[1]-r[1],c[3*f+0]=l.no[0],c[3*f+1]=l.no[2],c[3*f+2]=-l.no[1],i&&(u[2*f+0]=i[t].uv[0],u[2*f+1]=i[t].uv[1]),f++}s+=2}}return a.setAttribute("position",new n(h,3)),a.setIndex(new n(d,1)),a.setAttribute("normal",new n(c,3)),a.setAttribute("uv",new n(u,2)),a}(t.data,[0,0,0]),i=t.data.mat[0],o=i?function(t){const e=new r;return e.color.setRGB(t.r,t.g,t.b),e.roughness=void 0!==t.roughness?t.roughness:.4,e.metalness=void 0!==t.metallic?t.metallic:0,e.opacity=void 0!==t.alpha?t.alpha:0,e.transparent=e.opacity<1,e}(i):void 0,a=new s(_,o);return a.castShadow=!0,a.receiveShadow=!0,a.rotateZ(t.rot[2]),a.rotateY(t.rot[1]),a.rotateX(t.rot[0]),a.scale.fromArray(t.size,0),a.position.fromArray([t.loc[0],t.loc[2],-t.loc[1]],0),a}const b=1,y=10;class g extends _{constructor(){super(),this._importer=new i(class extends o{async loadAsync(t,e){this.setResponseType("arraybuffer");const n=await super.loadAsync(t,e),r=
|
|
8
9
|
/**
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/js-blend/parser/parser.js","../src/loader/light.ts","../src/loader/mesh.ts","../src/loader/geometry.ts","../src/loader/material.ts","../src/loader/index.ts","../src/BlendLoadPlugin.ts","../src/js-blend/main.js"],"sourcesContent":["/* eslint-disable camelcase, no-unused-vars, no-empty, no-constant-condition */\nconst DNA1 = 826363460;\nconst ENDB = 1111772741;\n\n/* Note: Blender coordinates treat the Z axis as the vertical an Y as depth. */\n\n// web worker not functional in this version\nlet USE_WEBWORKER = false;\n\nlet worker = null;\n\n// FR = new FileReader(),\n\nconst return_object = {\n loadBlendFromArrayBuffer: function (array_buffer) {\n return_object.ready = false;\n if (USE_WEBWORKER) {\n worker.postMessage(array_buffer, array_buffer);\n } else {\n worker.onmessage({\n data: array_buffer,\n });\n }\n },\n // loadBlendFromBlob: function (blob) {\n // FR.onload = function () {\n // return_object.loadBlendFromArrayBuffer(this.result);\n // };\n // FR.readAsArrayBuffer(blob);\n // },\n ready: true,\n onParseReady: function () {},\n};\n\nfunction worker_code () {\n 'use strict';\n\n let data = null,\n _data = null,\n BIG_ENDIAN = false,\n pointer_size = 0,\n struct_names = [],\n offset = 0,\n working_blend_file = null,\n current_SDNA_template = null,\n templates = {},\n finished_objects = [],\n FILE = null,\n ERROR = null,\n AB = null;\n\n const self = this;\n\n function parseFile (msg) {\n\n if (typeof msg.data == 'object') {\n // reset global variables\n AB = null;\n data = null;\n BIG_ENDIAN = false;\n pointer_size = 0;\n struct_names = [];\n offset = 0;\n working_blend_file = null;\n finished_objects = [];\n current_SDNA_template = null;\n\n\n // set data\n _data = msg.data;\n\n AB = _data.slice();\n\n data = new DataView(_data);\n\n\n FILE = new BLENDER_FILE(AB);\n\n // start parsing\n readFile();\n\n // export parsed data\n self.postMessage(FILE, ERROR);\n }\n }\n\n /*\n Export object for a parsed __blender_file__.\n */\n\n var BLENDER_FILE = function (AB) {\n this.AB = AB;\n // this.double = new Float64Array(AB);\n this.byte = new Uint8Array(AB);\n\n this.dv = new DataView(AB);\n\n this.objects = {};\n this.memory_lookup = {},\n this.object_array = [];\n\n this.template = null;\n };\n\n BLENDER_FILE.prototype = {\n addObject: function (obj) {\n this.object_array.push(obj);\n if (!this.objects[obj.blender_name]) this.objects[obj.blender_name] = [];\n this.objects[obj.blender_name].push(obj);\n },\n\n getPointer: function (offset) {\n const pointerLow = this.dv.getUint32(offset, this.template.endianess);\n if (this.template.pointer_size > 4) {\n const pointerHigh = this.dv.getUint32(offset + 4, this.template.endianess);\n if (this.template.endianess) {\n return (pointerLow) + 'l|h' + pointerHigh;\n } else {\n return (pointerHigh) + 'h|l' + pointerLow;\n }\n } else {\n return pointerLow;\n }\n },\n };\n\n self.onmessage = parseFile;\n // this.onmessage = parseFile;\n\n /*\n These functions map offsets in the blender __blender_file__ to basic types (byte,short,int,float) through TypedArrays;\n This allows the underlying binary data to be changed.\n */\n\n function float64Prop (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Float64Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getFloat64(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setFloat64(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function floatProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Float32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getFloat32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setFloat32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function intProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Int32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getInt32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setInt32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function uIntProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Uint32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getUint32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setUint32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function shortProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Int16Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getInt16(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setInt16(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n const uShortProp = (offset, Blender_Array_Length, length) => {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Uint16Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getUint16(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {\n } else {\n this.__blender_file__.dv.setUint16(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n };\n\n function charProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n if (Blender_Array_Length > 1) {\n let start = this.__data_address__ + offset;\n let end = start;\n let buffer_guard = 0;\n\n while (this.__blender_file__.byte[end] != 0 && buffer_guard++ < length) end++;\n\n return toString(this.__blender_file__.AB, start, end);\n }\n return this.__blender_file__.byte[(this.__data_address__ + offset)];\n },\n set: function (byte) {\n if (Blender_Array_Length > 1) {\n const string = byte + '';\n let i = 0;\n const l = string.length;\n while (i < length) {\n if (i < l) {\n this.__blender_file__.byte[(this.__data_address__ + offset + i)] = string.charCodeAt(i) | 0;\n } else {\n this.__blender_file__.byte[(this.__data_address__ + offset + i)] = 0;\n }\n i++;\n }\n } else {\n this.__blender_file__.byte[(this.__data_address__ + offset)] = byte | 0;\n }\n },\n };\n }\n\n function pointerProp2 (offset) {\n return {\n get: function () {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + offset, this.__blender_file__);\n const link = this.__blender_file__.memory_lookup[pointer];\n\n const results = [];\n\n if (link) {\n const address = link.__data_address__;\n let j = 0;\n while (true) {\n pointer = this.__blender_file__.getPointer(address + j * 8, this.__blender_file__);\n let obj = this.__blender_file__.memory_lookup[pointer];\n if (!obj) break;\n results.push(obj);\n j++;\n }\n\n }\n\n return results;\n },\n set: function () {},\n };\n }\n\n function pointerProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n if (Blender_Array_Length > 1) {\n let array = [];\n let j = 0;\n let off = offset;\n while (j < Blender_Array_Length) {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + off, this.__blender_file__);\n\n array.push(this.__blender_file__.memory_lookup[pointer]);\n off += length;\n j++;\n }\n\n return array;\n } else {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + offset, this.__blender_file__);\n return this.__blender_file__.memory_lookup[pointer];\n }\n },\n set: function () {},\n };\n }\n\n function compileProp (obj, name, type, offset, array_size, IS_POINTER, pointer_size, length) {\n\n if (!IS_POINTER) {\n switch (type) {\n case 'double':\n Object.defineProperty(obj, name, float64Prop(offset, array_size, length >> 3));\n break;\n case 'float':\n Object.defineProperty(obj, name, floatProp(offset, array_size, length >> 2));\n break;\n case 'int':\n Object.defineProperty(obj, name, intProp(offset, array_size, length >> 2));\n break;\n case 'short':\n case 'ushort':\n Object.defineProperty(obj, name, shortProp(offset, array_size, length >> 1));\n break;\n case 'char':\n case 'uchar':\n Object.defineProperty(obj, name, charProp(offset, array_size, length));\n break;\n default:\n // compile list to\n obj[name] = {};\n obj.__list__.push(name, type, length, offset, array_size, IS_POINTER);\n }\n obj._length += length;\n offset += length;\n } else {\n Object.defineProperty(obj, name, pointerProp(offset, array_size, pointer_size));\n offset += pointer_size * array_size;\n }\n\n return offset;\n }\n\n // Store final DNA structs\n const MASTER_SDNA_SCHEMA = function (version) {\n this.version = version;\n this.SDNA_SET = false;\n this.byte_size = 0;\n this.struct_index = 0;\n this.structs = {};\n this.SDNA = {};\n this.endianess = false;\n };\n\n MASTER_SDNA_SCHEMA.prototype = {\n getSDNAStructureConstructor: function (name, struct) {\n if (struct) {\n const blen_struct = Function('function ' + name + '(){}; return ' + name)();\n\n blen_struct.prototype = new BLENDER_STRUCTURE();\n blen_struct.prototype.blender_name = name;\n blen_struct.prototype.__pointers = [];\n blen_struct.prototype.__list__ = [];\n\n let offset = 0;\n // Create properties of struct\n for (let i = 0; i < struct.length; i += 3) {\n let _name = struct[i];\n const n = _name,\n type = struct[i + 1];\n let length = struct[i + 2],\n array_length = 0,\n match = null,\n Blender_Array_Length = 1,\n Suparray_match = 1,\n PointerToArray = false,\n Pointer_Match = 0;\n const DNA = this.SDNA[name] = {\n constructor: blen_struct,\n };\n\n\n let original_name = _name;\n\n // mini type parser\n if ((match = _name.match(/(\\*?)(\\*?)(\\w+)(\\[(\\w*)\\])?(\\[(\\w*)\\])?/))) {\n\n // base name\n _name = match[3];\n\n // pointer type\n if (match[1]) {\n Pointer_Match = 10;\n blen_struct.prototype.__pointers.push(_name);\n }\n\n if (match[2]) {\n PointerToArray = true;\n }\n\n // arrays\n if (match[4]) {\n if (match[6]) {\n Suparray_match = parseInt(match[5]);\n Blender_Array_Length = parseInt(match[7]);\n } else {\n Blender_Array_Length = parseInt(match[5]);\n }\n }\n array_length = Blender_Array_Length * length;\n length = array_length * Suparray_match;\n }\n\n DNA[n] = {\n type: type,\n length: length,\n isArray: (Blender_Array_Length > 0),\n };\n\n if (PointerToArray) {\n Object.defineProperty(blen_struct.prototype, _name, pointerProp2(offset));\n offset += pointer_size;\n } else if (Suparray_match > 1) {\n const array_names = new Array(Suparray_match);\n\n // construct sub_array object that will return the correct structs\n for (let j = 0; j < Suparray_match; j++) {\n let array_name_ = `__${_name}[${j}]__`;\n array_names[j] = array_name_;\n\n offset = compileProp(blen_struct.prototype, array_name_, type, offset, Blender_Array_Length, Pointer_Match, pointer_size, array_length);\n }\n\n Object.defineProperty(blen_struct.prototype, _name, {\n get: (function (array_names) {\n return function () {\n const array = [];\n for (let i = 0; i < array_names.length; i++) {\n array.push(this[array_names[i]]);\n }\n return array;\n };\n })(array_names),\n });\n } else {\n offset = compileProp(blen_struct.prototype, _name, type, offset, Blender_Array_Length, Pointer_Match, pointer_size, length);\n }\n }\n\n return this.SDNA[name].constructor;\n\n } else {\n if (!this.SDNA[name]) {\n return null;\n }\n return this.SDNA[name].constructor;\n }\n },\n };\n\n var BLENDER_STRUCTURE = function () {\n this.__blender_file__ = null;\n this.__list__ = null;\n this.__super_array_list__ = null;\n this.blender_name = '';\n this.__pointers = null;\n this.address = null;\n this.length = 0;\n this.__data_address__ = 0;\n this.blender_name = '';\n this._length = 0;\n };\n\n\n /*\n Returns a pre-constructed BLENDER_STRUCTURE or creates a new BLENDER_STRUCTURE to match the DNA struct type\n */\n const pointer_function = (pointer) => () => {\n return FILE.memory_lookup[pointer];\n };\n\n function getPointer (offset) {\n const pointerLow = data.getUint32(offset, BIG_ENDIAN);\n if (pointer_size > 4) {\n const pointerHigh = data.getUint32(offset + 4, BIG_ENDIAN);\n\n if (BIG_ENDIAN) {\n return (pointerLow) + '' + pointerHigh;\n } else {\n return (pointerHigh) + '' + pointerLow;\n }\n } else {\n return pointerLow;\n }\n }\n\n BLENDER_STRUCTURE.prototype = {\n setData: function (pointer, _data_offset, data_block_length, BLENDER_FILE) {\n if (this.__list__ === null) return this;\n BLENDER_FILE.addObject(this);\n\n this.__blender_file__ = BLENDER_FILE;\n\n const struct = this.__list__;\n let j = 0,\n i = 0,\n obj, name = '',\n type, length, Blender_Array_Length, Pointer_Match, offset, constructor;\n\n this.__data_address__ = _data_offset;\n\n if (struct === null) return this;\n\n for (i = 0; i < struct.length; i += 6) {\n obj = null;\n name = struct[i];\n type = struct[i + 1];\n Blender_Array_Length = struct[i + 4];\n Pointer_Match = struct[i + 5];\n offset = this.__data_address__ + struct[i + 3];\n\n if (Blender_Array_Length > 1) {\n this[name] = [];\n j = 0;\n while (j < Blender_Array_Length) {\n if (current_SDNA_template.getSDNAStructureConstructor(type)) {\n constructor = current_SDNA_template.getSDNAStructureConstructor(type);\n this[name].push((new constructor()).setData(0, offset, offset + length / Blender_Array_Length, BLENDER_FILE));\n } else this[name].push(null);\n offset += length / Blender_Array_Length;\n j++;\n }\n } else {\n if (current_SDNA_template.getSDNAStructureConstructor(type)) {\n constructor = current_SDNA_template.getSDNAStructureConstructor(type);\n this[name] = (new constructor()).setData(0, offset, length + offset, BLENDER_FILE);\n } else this[name] = null;\n }\n }\n // break connection to configuration list\n this.__list__ = null;\n return this;\n },\n\n get aname () {\n if (this.id) return this.id.name.slice(2);\n else return undefined;\n },\n };\n\n function toString (buffer, _in, _out) {\n return String.fromCharCode.apply(String, new Uint8Array(buffer, _in, _out - _in));\n }\n\n // Begin parsing blender __blender_file__\n\n function readFile () {\n let count = 0;\n let offset2 = 0;\n const root = 0;\n const i = 0;\n let data_offset = 0;\n let sdna_index = 0;\n let code = '';\n let block_length = 0;\n let curr_count = 0;\n let curr_count2 = 0;\n\n FILE.memory_lookup = {};\n struct_names = [];\n offset = 0;\n\n // Make sure we have a .blend __blender_file__. All blend files have the first 12bytes\n // set with BLENDER-v### in Utf-8\n if (toString(_data, offset, 7) !== 'BLENDER') return ERROR = 'File supplied is not a .blend compatible Blender file.';\n\n // otherwise get templete from save version.\n\n offset += 7;\n pointer_size = ((toString(_data, offset++, offset)) == '_') ? 4 : 8;\n BIG_ENDIAN = toString(_data, offset++, offset) !== 'V';\n const version = toString(_data, offset, offset + 3);\n\n\n // create new master template if none exist for current blender version;\n if (!templates[version]) {\n templates[version] = new MASTER_SDNA_SCHEMA(version);\n }\n\n current_SDNA_template = templates[version];\n\n FILE.template = current_SDNA_template;\n\n offset += 3;\n\n // Set SDNA structs if template hasn't been set.\n // Todo: Move the following block into the MASTER_SDNA_SCHEMA object.\n //* Like so:*/ current_SDNA_template.set(AB);\n\n if (!current_SDNA_template.SDNA_SET) {\n current_SDNA_template.endianess = BIG_ENDIAN;\n current_SDNA_template.pointer_size = pointer_size;\n // find DNA1 data block\n offset2 = offset;\n\n while (true) {\n sdna_index = data.getInt32(offset2 + pointer_size + 8, BIG_ENDIAN);\n // eslint-disable-next-line no-control-regex\n code = toString(_data, offset2, offset2 + 4).replace(/\\u0000/g, '');\n block_length = data.getInt32(offset2 + 4, true);\n offset2 += 16 + (pointer_size);\n if (code === 'DNA1') {\n // DNA found; This is the core of the __blender_file__ and contains all the structure for the various data types used in Blender.\n count = 0;\n let types = [],\n fields = [],\n names = [],\n lengths = [],\n name = '',\n curr_name = '';\n\n // skip SDNA and NAME identifiers\n offset2 += 8;\n\n // Number of structs.\n count = data.getInt32(offset2, true);\n offset2 += 4;\n\n curr_count = 0;\n\n // Build up list of names for structs\n while (curr_count < count) {\n curr_name = '';\n while (data.getInt8(offset2) !== 0) {\n curr_name += toString(_data, offset2, offset2 + 1);\n offset2++;\n }\n names.push(curr_name);\n offset2++;\n curr_count++;\n }\n\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n\n // Number of struct types\n count = data.getInt32(offset2, true);\n offset2 += 4;\n curr_count = 0;\n\n // Build up list of types\n while (curr_count < count) {\n curr_name = '';\n while (data.getInt8(offset2) !== 0) {\n curr_name += toString(_data, offset2, offset2 + 1);\n offset2++;\n }\n types.push(curr_name);\n offset2++;\n curr_count++;\n }\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n curr_count = 0;\n\n // Build up list of byte lengths for types\n while (curr_count < count) {\n lengths.push(data.getInt16(offset2, BIG_ENDIAN));\n offset2 += 2;\n curr_count++;\n }\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n\n // Number of structures\n const structure_count = data.getInt32(offset2, BIG_ENDIAN);\n offset2 += 4;\n curr_count = 0;\n\n // Create constructor objects from list of SDNA structs\n while (curr_count < structure_count) {\n const struct_name = types[data.getInt16(offset2, BIG_ENDIAN)];\n offset2 += 2;\n const obj = [];\n count = data.getInt16(offset2, BIG_ENDIAN);\n offset2 += 2;\n curr_count2 = 0;\n struct_names.push(struct_name);\n\n // Fill an array with name, type, and length for each SDNA struct property\n while (curr_count2 < count) {\n obj.push(names[data.getInt16(offset2 + 2, BIG_ENDIAN)], types[data.getInt16(offset2, BIG_ENDIAN)], lengths[data.getInt16(offset2, BIG_ENDIAN)]);\n offset2 += 4;\n curr_count2++;\n }\n\n // Create a SDNA constructor by passing [type,name,lenth] array as second argument\n current_SDNA_template.getSDNAStructureConstructor(struct_name, obj);\n curr_count++;\n }\n current_SDNA_template.SDNA_SET = true;\n current_SDNA_template.SDNA_NAMES = struct_names;\n break;\n }\n offset2 += block_length;\n }\n }\n\n // parse the rest of the data, starting back at the top.\n\n // TODO: turn into \"on-demand\" parsing.\n\n while (true) {\n if ((offset % 4) > 0) {\n offset = (4 - (offset % 4)) + offset;\n }\n\n data_offset = offset;\n sdna_index = data.getInt32(offset + pointer_size + 8, BIG_ENDIAN);\n let code_uint = data.getUint32(offset, BIG_ENDIAN);\n offset2 = offset + 16 + (pointer_size);\n offset += data.getInt32(offset + 4, true) + 16 + (pointer_size);\n\n if (code_uint === DNA1); // skip - already processed at this point\n else if (code_uint === ENDB) break; // end of __blender_file__ found\n else {\n // Create a Blender object using a constructor template from current_SDNA_template\n const data_start = data_offset + pointer_size + 16;\n\n // Get a SDNA constructor by name;\n const constructor = current_SDNA_template.getSDNAStructureConstructor(current_SDNA_template.SDNA_NAMES[sdna_index]);\n\n const size = data.getInt32(data_offset + 4, BIG_ENDIAN);\n\n count = data.getInt32(data_offset + 12 + pointer_size, BIG_ENDIAN);\n\n if (count > 0) {\n let obj = new constructor();\n\n const length = constructor.prototype._length;\n\n\n const address = FILE.getPointer(data_offset + 8);\n\n obj.address = address + '';\n\n obj.setData(address, data_start, data_start + size, FILE);\n\n if (count > 1) {\n let array = [];\n array.push(obj);\n for (let u = 1; u < count; u++) {\n obj = new constructor();\n obj.setData(address, data_start + length * u, data_start + (length * u) + length, FILE);\n array.push(obj);\n }\n FILE.memory_lookup[address] = array;\n } else {\n FILE.memory_lookup[address] = obj;\n }\n }\n }\n }\n }\n}\n\nworker = new worker_code();\n\nworker.postMessage = function (message) {\n return_object.onParseReady(message);\n};\n\nexport default return_object;\n",null,null,null,null,null,null,"/* eslint-disable camelcase */\n/**\n * JS.Blend\n * Original Repo: https://github.com/acweathersby/js.blend\n * Slightly modified for three.js and js updates, minor refactor.\n * Object-creation part re-written for latest three.js and typescript\n * MIT License\n * Copyright (c) 2020 Anthony C, Weathersby\n * @license\n */\nimport parser from './parser/parser.js';\n\nexport async function parseBlend (buffer, name = '') {\n return new Promise((res, rej) => {\n parser.onParseReady = (file, error) => {\n if (error) rej(error)\n else res(file)\n }\n parser.loadBlendFromArrayBuffer(buffer, name)\n })\n}\n"],"names":["DNA1","ENDB","worker","return_object","loadBlendFromArrayBuffer","array_buffer","ready","onmessage","data","onParseReady","_data","BIG_ENDIAN","pointer_size","struct_names","offset","current_SDNA_template","templates","FILE","ERROR","AB","self","this","BLENDER_FILE","byte","Uint8Array","dv","DataView","objects","memory_lookup","object_array","template","pointerProp2","get","pointer","__blender_file__","getPointer","__data_address__","link","results","address","j","obj","push","set","compileProp","name","type","array_size","IS_POINTER","length","Object","defineProperty","Blender_Array_Length","array","off","pointerProp","Float64Array","getFloat64","endianess","float","setFloat64","float64Prop","Float32Array","getFloat32","setFloat32","floatProp","Int32Array","getInt32","setInt32","intProp","Int16Array","getInt16","setInt16","shortProp","start","end","buffer_guard","toString","string","i","l","charCodeAt","charProp","__list__","_length","prototype","addObject","blender_name","pointerLow","getUint32","pointerHigh","msg","slice","count","offset2","data_offset","sdna_index","code","block_length","curr_count","curr_count2","version","MASTER_SDNA_SCHEMA","SDNA_SET","replace","types","names","lengths","curr_name","getInt8","structure_count","struct_name","getSDNAStructureConstructor","SDNA_NAMES","code_uint","data_start","constructor","size","setData","u","readFile","postMessage","byte_size","struct_index","structs","SDNA","struct","blen_struct","Function","BLENDER_STRUCTURE","__pointers","_name","n","array_length","match","Suparray_match","PointerToArray","Pointer_Match","DNA","parseInt","isArray","array_names","Array","array_name_","__super_array_list__","buffer","_in","_out","String","fromCharCode","apply","_data_offset","data_block_length","aname","id","message","blenderLightTypes","point","sun","spot","hemi","area","createLight","lamp","ldata","position","loc","color","r","g","b","intensity","energy","light","PointLight","fromArray","castShadow","shadow","mapSize","width","height","camera","near","far","console","warn","createMesh","object","geometry","mesh","origin","faces","mpoly","loops","mloop","uv","mloopuv","vertices","mvert","BufferGeometry","reduce","acc","face","Math","floor","totloop","indices","Uint32Array","uvs","normals","positions","currentIndex","len","loopstart","indexi","index","vert","v","co","no","setAttribute","BufferAttribute","setIndex","createBufferGeometry","mat","material","MeshPhysicalMaterial","setRGB","roughness","undefined","metalness","metallic","opacity","alpha","transparent","createMaterial","Mesh","receiveShadow","rotateZ","rot","rotateY","rotateX","scale","blenderObjectTypes","BlendLoadPlugin","BaseImporterPlugin","super","_importer","Importer","FileLoader","async","url","onProgress","setResponseType","res","loadAsync","blend","Promise","rej","parser","file","error","parseBlend","blendObjects","filter","o","createObjects","root","Object3D","add","scene","transform","_","PluginType"],"mappings":";;;;;;wLACA,MAAMA,EAAO,UACPC,EAAO,WAOb,IAAIC,EAAS,KAIb,MAAMC,EAAgB,CAClBC,yBAA0B,SAAUC,GAChCF,EAAcG,OAAQ,EAIlBJ,EAAOK,UAAU,CACbC,KAAMH,GAGjB,EAODC,OAAO,EACPG,aAAc,WAAc,GAyuBhCP,EAAS,IAtuBT,WAGO,IAACM,EAAO,KACPE,EAAQ,KACRC,GAAa,EACbC,EAAe,EACfC,EAAe,GACfC,EAAS,EAETC,EAAwB,KACxBC,EAAY,CAAA,EAEZC,EAAO,KACPC,EAAQ,KACRC,EAAK,KAET,MAAMC,EAAOC,KAuCb,IAAIC,EAAe,SAAUH,GACzBE,KAAKF,GAAKA,EAEVE,KAAKE,KAAO,IAAIC,WAAWL,GAE3BE,KAAKI,GAAK,IAAIC,SAASP,GAEvBE,KAAKM,QAAU,GACfN,KAAKO,cAAgB,CAAE,EACvBP,KAAKQ,aAAe,GAEpBR,KAAKS,SAAW,IACxB,EA6JI,SAASC,EAAcjB,GACnB,MAAO,CACHkB,IAAK,WACD,IAAIC,EAAUZ,KAAKa,iBAAiBC,WAAWd,KAAKe,iBAAmBtB,EAAQO,KAAKa,kBACpF,MAAMG,EAAOhB,KAAKa,iBAAiBN,cAAcK,GAE3CK,EAAU,GAEhB,GAAID,EAAM,CACN,MAAME,EAAUF,EAAKD,iBACrB,IAAII,EAAI,EACR,OAAa,CACTP,EAAUZ,KAAKa,iBAAiBC,WAAWI,EAAc,EAAJC,EAAOnB,KAAKa,kBACjE,IAAIO,EAAMpB,KAAKa,iBAAiBN,cAAcK,GAC9C,IAAKQ,EAAK,MACVH,EAAQI,KAAKD,GACbD,GACH,CAEJ,CAED,OAAOF,CACV,EACDK,IAAK,WAAc,EAE1B,CA2BD,SAASC,EAAaH,EAAKI,EAAMC,EAAMhC,EAAQiC,EAAYC,EAAYpC,EAAcqC,GAEjF,GAAKD,EA2BDE,OAAOC,eAAeV,EAAKI,EAtDnC,SAAsB/B,EAAQsC,EAAsBH,GAChD,MAAO,CACHjB,IAAK,WACD,GAAIoB,EAAuB,EAAG,CAC1B,IAAIC,EAAQ,GACRb,EAAI,EACJc,EAAMxC,EACV,KAAO0B,EAAIY,GAAsB,CAC7B,IAAInB,EAAUZ,KAAKa,iBAAiBC,WAAWd,KAAKe,iBAAmBkB,EAAKjC,KAAKa,kBAEjFmB,EAAMX,KAAKrB,KAAKa,iBAAiBN,cAAcK,IAC/CqB,GAAOL,EACPT,GACH,CAED,OAAOa,CAC3B,CAAuB,CACH,IAAIpB,EAAUZ,KAAKa,iBAAiBC,WAAWd,KAAKe,iBAAmBtB,EAAQO,KAAKa,kBACpF,OAAOb,KAAKa,iBAAiBN,cAAcK,EAC9C,CACJ,EACDU,IAAK,WAAc,EAE1B,CA+BwCY,CAAYzC,EAAQiC,EAAYnC,IACjEE,GAAUF,EAAemC,MA5BZ,CACb,OAAQD,GACR,IAAK,SACDI,OAAOC,eAAeV,EAAKI,EAtLvC,SAAsB/B,EAAQsC,EAAsBH,GAChD,MAAO,CACHjB,IAAK,WACD,OAAQoB,EAAuB,EAC3B,IAAII,aAAanC,KAAKa,iBAAiBf,GAAIE,KAAKe,iBAAmBtB,EAAQmC,GAC3E5B,KAAKa,iBAAiBT,GAAGgC,WAAWpC,KAAKe,iBAAmBtB,EAAQO,KAAKa,iBAAiBJ,SAAS4B,UAC1G,EACDf,IAAK,SAAUgB,GACPP,EAAuB,GACvB/B,KAAKa,iBAAiBT,GAAGmC,WAAWvC,KAAKe,iBAAmBtB,EAAQ6C,EAAOtC,KAAKa,iBAAiBJ,SAAS4B,UAEjH,EAER,CAyK4CG,CAAY/C,EAAQiC,EAAYE,GAAU,IAC3E,MACJ,IAAK,QACDC,OAAOC,eAAeV,EAAKI,EA1KvC,SAAoB/B,EAAQsC,EAAsBH,GAC9C,MAAO,CACHjB,IAAK,WACD,OAAQoB,EAAuB,EAC3B,IAAIU,aAAazC,KAAKa,iBAAiBf,GAAIE,KAAKe,iBAAmBtB,EAAQmC,GAC3E5B,KAAKa,iBAAiBT,GAAGsC,WAAW1C,KAAKe,iBAAmBtB,EAAQO,KAAKa,iBAAiBJ,SAAS4B,UAC1G,EACDf,IAAK,SAAUgB,GACPP,EAAuB,GACvB/B,KAAKa,iBAAiBT,GAAGuC,WAAW3C,KAAKe,iBAAmBtB,EAAQ6C,EAAOtC,KAAKa,iBAAiBJ,SAAS4B,UAEjH,EAER,CA6J4CO,CAAUnD,EAAQiC,EAAYE,GAAU,IACzE,MACJ,IAAK,MACDC,OAAOC,eAAeV,EAAKI,EA9JvC,SAAkB/B,EAAQsC,EAAsBH,GAC5C,MAAO,CACHjB,IAAK,WACD,OAAQoB,EAAuB,EAC3B,IAAIc,WAAW7C,KAAKa,iBAAiBf,GAAIE,KAAKe,iBAAmBtB,EAAQmC,GACzE5B,KAAKa,iBAAiBT,GAAG0C,SAAS9C,KAAKe,iBAAmBtB,EAAQO,KAAKa,iBAAiBJ,SAAS4B,UACxG,EACDf,IAAK,SAAUgB,GACPP,EAAuB,GACvB/B,KAAKa,iBAAiBT,GAAG2C,SAAS/C,KAAKe,iBAAmBtB,EAAQ6C,EAAOtC,KAAKa,iBAAiBJ,SAAS4B,UAE/G,EAER,CAiJ4CW,CAAQvD,EAAQiC,EAAYE,GAAU,IACvE,MACJ,IAAK,QACL,IAAK,SACDC,OAAOC,eAAeV,EAAKI,EApIvC,SAAoB/B,EAAQsC,EAAsBH,GAC9C,MAAO,CACHjB,IAAK,WACD,OAAQoB,EAAuB,EAC3B,IAAIkB,WAAWjD,KAAKa,iBAAiBf,GAAIE,KAAKe,iBAAmBtB,EAAQmC,GACzE5B,KAAKa,iBAAiBT,GAAG8C,SAASlD,KAAKe,iBAAmBtB,EAAQO,KAAKa,iBAAiBJ,SAAS4B,UACxG,EACDf,IAAK,SAAUgB,GACPP,EAAuB,GACvB/B,KAAKa,iBAAiBT,GAAG+C,SAASnD,KAAKe,iBAAmBtB,EAAQ6C,EAAOtC,KAAKa,iBAAiBJ,SAAS4B,UAE/G,EAER,CAuH4Ce,CAAU3D,EAAQiC,EAAYE,GAAU,IACzE,MACJ,IAAK,OACL,IAAK,QACDC,OAAOC,eAAeV,EAAKI,EAzGvC,SAAmB/B,EAAQsC,EAAsBH,GAC7C,MAAO,CACHjB,IAAK,WACD,GAAIoB,EAAuB,EAAG,CAC1B,IAAIsB,EAAQrD,KAAKe,iBAAmBtB,EAChC6D,EAAMD,EACNE,EAAe,EAEnB,KAA0C,GAAnCvD,KAAKa,iBAAiBX,KAAKoD,IAAaC,IAAiB3B,GAAQ0B,IAExE,OAAOE,EAASxD,KAAKa,iBAAiBf,GAAIuD,EAAOC,EACpD,CACD,OAAOtD,KAAKa,iBAAiBX,KAAMF,KAAKe,iBAAmBtB,EAC9D,EACD6B,IAAK,SAAUpB,GACX,GAAI6B,EAAuB,EAAG,CAC1B,MAAM0B,EAASvD,EAAO,GACtB,IAAIwD,EAAI,EACR,MAAMC,EAAIF,EAAO7B,OACjB,KAAO8B,EAAI9B,GAEH5B,KAAKa,iBAAiBX,KAAMF,KAAKe,iBAAmBtB,EAASiE,GAD7DA,EAAIC,EACsF,EAAvBF,EAAOG,WAAWF,GAElB,EAEvEA,GAExB,MACoB1D,KAAKa,iBAAiBX,KAAMF,KAAKe,iBAAmBtB,GAAkB,EAAPS,CAEtE,EAER,CAyE4C2D,CAASpE,EAAQiC,EAAYE,IAC9D,MACJ,QAEIR,EAAII,GAAQ,GACZJ,EAAI0C,SAASzC,KAAKG,EAAMC,EAAMG,EAAQnC,EAAQiC,EAAYC,GAE9DP,EAAI2C,SAAWnC,EACfnC,GAAUmC,CACtB,CAKQ,OAAOnC,CACV,CAjPDQ,EAAa+D,UAAY,CACrBC,UAAW,SAAU7C,GACjBpB,KAAKQ,aAAaa,KAAKD,GAClBpB,KAAKM,QAAQc,EAAI8C,gBAAelE,KAAKM,QAAQc,EAAI8C,cAAgB,IACtElE,KAAKM,QAAQc,EAAI8C,cAAc7C,KAAKD,EACvC,EAEDN,WAAY,SAAUrB,GAClB,MAAM0E,EAAanE,KAAKI,GAAGgE,UAAU3E,EAAQO,KAAKS,SAAS4B,WAC3D,GAAIrC,KAAKS,SAASlB,aAAe,EAAG,CAChC,MAAM8E,EAAcrE,KAAKI,GAAGgE,UAAU3E,EAAS,EAAGO,KAAKS,SAAS4B,WAChE,OAAIrC,KAAKS,SAAS4B,UACP,EAAe,MAAQgC,EAEvB,EAAgB,MAAQF,CAEnD,CACgB,OAAOA,CAEd,GAGLpE,EAAKb,UAzEL,SAAoBoF,GAEO,iBAAZA,EAAInF,OAEXW,EAAK,KACLX,EAAO,KACPG,GAAa,EACbC,EAAe,EACfC,EAAe,GACfC,EAAS,EAGTC,EAAwB,KAIxBL,EAAQiF,EAAInF,KAEZW,EAAKT,EAAMkF,QAEXpF,EAAO,IAAIkB,SAAShB,GAGpBO,EAAO,IAAIK,EAAaH,GAoehC,WACI,IAAI0E,EAAQ,EACRC,EAAU,EAGVC,EAAc,EACdC,EAAa,EACbC,EAAO,GACPC,EAAe,EACfC,EAAa,EACbC,EAAc,EAQlB,GANAnF,EAAKW,cAAgB,GACrBf,EAAe,GACfC,EAAS,EAI0B,YAA/B+D,EAASnE,EAAOI,EAAQ,GAAkB,OAAOI,EAAQ,yDAI7DJ,GAAU,EACVF,EAAuD,KAAtCiE,EAASnE,EAAOI,IAAUA,GAAmB,EAAI,EAClEH,EAAmD,MAAtCkE,EAASnE,EAAOI,IAAUA,GACvC,MAAMuF,EAAUxB,EAASnE,EAAOI,EAAQA,EAAS,GAI5CE,EAAUqF,KACXrF,EAAUqF,GAAW,IAAIC,EAAmBD,IAahD,GAVAtF,EAAwBC,EAAUqF,GAElCpF,EAAKa,SAAWf,EAEhBD,GAAU,GAMLC,EAAsBwF,SAMvB,IALAxF,EAAsB2C,UAAY/C,EAClCI,EAAsBH,aAAeA,EAErCkF,EAAUhF,IAEG,CAMT,GALAkF,EAAaxF,EAAK2D,SAAS2B,EAAUlF,EAAe,EAAGD,GAEvDsF,EAAOpB,EAASnE,EAAOoF,EAASA,EAAU,GAAGU,QAAQ,UAAW,IAChEN,EAAe1F,EAAK2D,SAAS2B,EAAU,GAAG,GAC1CA,GAAW,GAAM,EACJ,SAATG,EAAiB,CAEjBJ,EAAQ,EACL,IAACY,EAAQ,GAERC,EAAQ,GACRC,EAAU,GAEVC,EAAY,GAYhB,IATAd,GAAW,EAGXD,EAAQrF,EAAK2D,SAAS2B,GAAS,GAC/BA,GAAW,EAEXK,EAAa,EAGNA,EAAaN,GAAO,CAEvB,IADAe,EAAY,GACqB,IAA1BpG,EAAKqG,QAAQf,IAChBc,GAAa/B,EAASnE,EAAOoF,EAASA,EAAU,GAChDA,IAEJY,EAAMhE,KAAKkE,GACXd,IACAK,GACH,CAaD,IATKL,EAAU,EAAK,IAAGA,EAAW,EAAKA,EAAU,EAAMA,GACvDA,GAAW,EAGXD,EAAQrF,EAAK2D,SAAS2B,GAAS,GAC/BA,GAAW,EACXK,EAAa,EAGNA,EAAaN,GAAO,CAEvB,IADAe,EAAY,GACqB,IAA1BpG,EAAKqG,QAAQf,IAChBc,GAAa/B,EAASnE,EAAOoF,EAASA,EAAU,GAChDA,IAEJW,EAAM/D,KAAKkE,GACXd,IACAK,GACH,CAQD,IALKL,EAAU,EAAK,IAAGA,EAAW,EAAKA,EAAU,EAAMA,GACvDA,GAAW,EACXK,EAAa,EAGNA,EAAaN,GAChBc,EAAQjE,KAAKlC,EAAK+D,SAASuB,EAASnF,IACpCmF,GAAW,EACXK,IAICL,EAAU,EAAK,IAAGA,EAAW,EAAKA,EAAU,EAAMA,GACvDA,GAAW,EAGX,MAAMgB,EAAkBtG,EAAK2D,SAAS2B,EAASnF,GAK/C,IAJAmF,GAAW,EACXK,EAAa,EAGNA,EAAaW,GAAiB,CACjC,MAAMC,EAAcN,EAAMjG,EAAK+D,SAASuB,EAASnF,IACjDmF,GAAW,EACX,MAAMrD,EAAM,GAOZ,IANAoD,EAAQrF,EAAK+D,SAASuB,EAASnF,GAC/BmF,GAAW,EACXM,EAAc,EACdvF,EAAa6B,KAAKqE,GAGXX,EAAcP,GACjBpD,EAAIC,KAAKgE,EAAMlG,EAAK+D,SAASuB,EAAU,EAAGnF,IAAc8F,EAAMjG,EAAK+D,SAASuB,EAASnF,IAAcgG,EAAQnG,EAAK+D,SAASuB,EAASnF,KAClImF,GAAW,EACXM,IAIJrF,EAAsBiG,4BAA4BD,EAAatE,GAC/D0D,GACH,CACDpF,EAAsBwF,UAAW,EACjCxF,EAAsBkG,WAAapG,EACnC,KACH,CACDiF,GAAWI,CACd,CAOL,OAAa,CACJpF,EAAS,EAAK,IACfA,EAAU,EAAKA,EAAS,EAAMA,GAGlCiF,EAAcjF,EACdkF,EAAaxF,EAAK2D,SAASrD,EAASF,EAAe,EAAGD,GACtD,IAAIuG,EAAY1G,EAAKiF,UAAU3E,EAAQH,GAIvC,GAHAmF,EAAUhF,EAAS,GAAM,EACzBA,GAAUN,EAAK2D,SAASrD,EAAS,GAAG,GAAQ,GAAM,EAE9CoG,IAAclH,OACb,IAAIkH,IAAcjH,EAAM,MACxB,CAED,MAAMkH,EAAapB,EAAcnF,EAAe,GAG1CwG,EAAcrG,EAAsBiG,4BAA4BjG,EAAsBkG,WAAWjB,IAEjGqB,EAAO7G,EAAK2D,SAAS4B,EAAc,EAAGpF,GAI5C,GAFAkF,EAAQrF,EAAK2D,SAAS4B,EAAc,GAAKnF,EAAcD,GAEnDkF,EAAQ,EAAG,CACX,IAAIpD,EAAM,IAAI2E,EAEd,MAAMnE,EAASmE,EAAY/B,UAAUD,QAG/B7C,EAAUtB,EAAKkB,WAAW4D,EAAc,GAM9C,GAJAtD,EAAIF,QAAUA,EAAU,GAExBE,EAAI6E,QAAQ/E,EAAS4E,EAAYA,EAAaE,EAAMpG,GAEhD4E,EAAQ,EAAG,CACX,IAAIxC,EAAQ,GACZA,EAAMX,KAAKD,GACX,IAAK,IAAI8E,EAAI,EAAGA,EAAI1B,EAAO0B,IACvB9E,EAAM,IAAI2E,EACV3E,EAAI6E,QAAQ/E,EAAS4E,EAAalE,EAASsE,EAAGJ,EAAclE,EAASsE,EAAKtE,EAAQhC,GAClFoC,EAAMX,KAAKD,GAEfxB,EAAKW,cAAcW,GAAWc,CACtD,MACwBpC,EAAKW,cAAcW,GAAWE,CAErC,CACJ,EACJ,CACJ,CAtrBO+E,GAGApG,EAAKqG,YAAYxG,EAAMC,GAE9B,EAwQD,MAAMoF,EAAqB,SAAUD,GACjChF,KAAKgF,QAAUA,EACfhF,KAAKkF,UAAW,EAChBlF,KAAKqG,UAAY,EACjBrG,KAAKsG,aAAe,EACpBtG,KAAKuG,QAAU,GACfvG,KAAKwG,KAAO,GACZxG,KAAKqC,WAAY,CACzB,EAEI4C,EAAmBjB,UAAY,CAC3B2B,4BAA6B,SAAUnE,EAAMiF,GACzC,GAAIA,EAAQ,CACR,MAAMC,EAAcC,SAAS,YAAcnF,EAAO,gBAAkBA,EAAhDmF,GAEpBD,EAAY1C,UAAY,IAAI4C,EAC5BF,EAAY1C,UAAUE,aAAe1C,EACrCkF,EAAY1C,UAAU6C,WAAa,GACnCH,EAAY1C,UAAUF,SAAW,GAEjC,IAAIrE,EAAS,EAEb,IAAK,IAAIiE,EAAI,EAAGA,EAAI+C,EAAO7E,OAAQ8B,GAAK,EAAG,CACvC,IAAIoD,EAAQL,EAAO/C,GACnB,MAAMqD,EAAID,EACNrF,EAAOgF,EAAO/C,EAAI,GACtB,IAAI9B,EAAS6E,EAAO/C,EAAI,GACpBsD,EAAe,EACfC,EAAQ,KACRlF,EAAuB,EACvBmF,EAAiB,EACjBC,GAAiB,EACjBC,EAAgB,EACpB,MAAMC,EAAMrH,KAAKwG,KAAKhF,GAAQ,CAC1BuE,YAAaW,GAyCjB,IAlCKO,EAAQH,EAAMG,MAAM,8CAGrBH,EAAQG,EAAM,GAGVA,EAAM,KACNG,EAAgB,GAChBV,EAAY1C,UAAU6C,WAAWxF,KAAKyF,IAGtCG,EAAM,KACNE,GAAiB,GAIjBF,EAAM,KACFA,EAAM,IACNC,EAAiBI,SAASL,EAAM,IAChClF,EAAuBuF,SAASL,EAAM,KAEtClF,EAAuBuF,SAASL,EAAM,KAG9CD,EAAejF,EAAuBH,EACtCA,EAASoF,EAAeE,GAG5BG,EAAIN,GAAK,CACLtF,KAAMA,EACNG,OAAQA,EACR2F,QAAUxF,EAAuB,GAGjCoF,EACAtF,OAAOC,eAAe4E,EAAY1C,UAAW8C,EAAOpG,EAAajB,IACjEA,GAAUF,OACP,GAAI2H,EAAiB,EAAG,CAC3B,MAAMM,EAAc,IAAIC,MAAMP,GAG9B,IAAK,IAAI/F,EAAI,EAAGA,EAAI+F,EAAgB/F,IAAK,CACrC,IAAIuG,EAAc,KAAKZ,KAAS3F,OAChCqG,EAAYrG,GAAKuG,EAEjBjI,EAAS8B,EAAYmF,EAAY1C,UAAW0D,EAAajG,EAAMhC,EAAQsC,EAAsBqF,EAAe7H,EAAcyH,EAC7H,CAEDnF,OAAOC,eAAe4E,EAAY1C,UAAW8C,EAAO,CAChDnG,IAAK,SAAW6G,GACZ,OAAO,WACH,MAAMxF,EAAQ,GACd,IAAK,IAAI0B,EAAI,EAAGA,EAAI8D,EAAY5F,OAAQ8B,IACpC1B,EAAMX,KAAKrB,KAAKwH,EAAY9D,KAEhC,OAAO1B,CAC3C,CAC6B,CARI,CAQFwF,IAE/B,MACwB/H,EAAS8B,EAAYmF,EAAY1C,UAAW8C,EAAOrF,EAAMhC,EAAQsC,EAAsBqF,EAAe7H,EAAcqC,EAE3H,CAED,OAAO5B,KAAKwG,KAAKhF,GAAMuE,WAEvC,CACgB,OAAK/F,KAAKwG,KAAKhF,GAGRxB,KAAKwG,KAAKhF,GAAMuE,YAFZ,IAIlB,GAGL,IAAIa,EAAoB,WACpB5G,KAAKa,iBAAmB,KACxBb,KAAK8D,SAAW,KAChB9D,KAAK2H,qBAAuB,KAC5B3H,KAAKkE,aAAe,GACpBlE,KAAK6G,WAAa,KAClB7G,KAAKkB,QAAU,KACflB,KAAK4B,OAAS,EACd5B,KAAKe,iBAAmB,EACxBf,KAAKkE,aAAe,GACpBlE,KAAK+D,QAAU,CACvB,EA+EI,SAASP,EAAUoE,EAAQC,EAAKC,GAC5B,OAAOC,OAAOC,aAAaC,MAAMF,OAAQ,IAAI5H,WAAWyH,EAAQC,EAAKC,EAAOD,GAC/E,CAxDDjB,EAAkB5C,UAAY,CAC1BiC,QAAS,SAAUrF,EAASsH,EAAcC,EAAmBlI,GACzD,GAAsB,OAAlBD,KAAK8D,SAAmB,OAAO9D,KACnCC,EAAagE,UAAUjE,MAEvBA,KAAKa,iBAAmBZ,EAExB,MAAMwG,EAASzG,KAAK8D,SACjB,IAGCrC,EAAMG,EAAQG,EAAqCtC,EAAQsG,EAH3D5E,EAAI,EACJuC,EAAI,EACClC,EAAO,GAKhB,GAFAxB,KAAKe,iBAAmBmH,EAET,OAAXzB,EAAiB,OAAOzG,KAE5B,IAAK0D,EAAI,EAAGA,EAAI+C,EAAO7E,OAAQ8B,GAAK,EAQhC,GANAlC,EAAOiF,EAAO/C,GACdjC,EAAOgF,EAAO/C,EAAI,GAClB3B,EAAuB0E,EAAO/C,EAAI,GAClB+C,EAAO/C,EAAI,GAC3BjE,EAASO,KAAKe,iBAAmB0F,EAAO/C,EAAI,GAExC3B,EAAuB,EAGvB,IAFA/B,KAAKwB,GAAQ,GACbL,EAAI,EACGA,EAAIY,GACHrC,EAAsBiG,4BAA4BlE,IAClDsE,EAAcrG,EAAsBiG,4BAA4BlE,GAChEzB,KAAKwB,GAAMH,MAAK,IAAK0E,GAAeE,QAAQ,EAAGxG,EAAQA,EAASmC,EAASG,EAAsB9B,KAC5FD,KAAKwB,GAAMH,KAAK,MACvB5B,GAAUmC,EAASG,EACnBZ,SAGAzB,EAAsBiG,4BAA4BlE,IAClDsE,EAAcrG,EAAsBiG,4BAA4BlE,GAChEzB,KAAKwB,IAAQ,IAAKuE,GAAeE,QAAQ,EAAGxG,EAAQmC,EAASnC,EAAQQ,IAClED,KAAKwB,GAAQ,KAK5B,OADAxB,KAAK8D,SAAW,KACT9D,IACV,EAEGoI,YACA,OAAIpI,KAAKqI,GAAWrI,KAAKqI,GAAG7G,KAAK+C,MAAM,QAClC,CACR,EA+NT,EAIA1F,EAAOuH,YAAc,SAAUkC,GAC3BxJ,EAAcM,aAAakJ,EAC/B,EC1wBA,MAAMC,EAAoB,CACtBC,MAAO,EACPC,IAAK,EACLC,KAAM,EACNC,KAAM,EACNC,KAAM,GAGJ,SAAUC,EAAYC,GACxB,MAAMC,EAAQD,EAAK3J,KAEb6J,EAAW,CAACF,EAAKG,IAAI,GAAIH,EAAKG,IAAI,IAAKH,EAAKG,IAAI,IAEhDC,EAAkB,IAAVH,EAAMI,GAAW,GAAe,IAAVJ,EAAMK,GAAW,EAAc,IAAVL,EAAMM,GAAW,EACpEC,EAAYP,EAAMQ,OAGxB,IAAIC,EAAQ,KAEZ,OAAQT,EAAMtH,MACd,KAAK8G,EAAkBC,MACnBgB,EAAQ,IAAIC,EAAWP,EAAOI,EANjB,GAObE,EAAMR,SAASU,UAAUV,EAAU,GACnCQ,EAAMG,YAAa,EACnB,MACJ,KAAKpB,EAAkBE,IACnBe,EAAQ,IAAIC,EAAWP,EAAOI,EAXjB,GAYbE,EAAMR,SAASU,UAAUV,EAAU,GACnCQ,EAAMG,YAAa,EACnBH,EAAMI,OAAOC,QAAQC,MAAQ,KAC7BN,EAAMI,OAAOC,QAAQE,OAAS,KAC9BP,EAAMI,OAAOI,OAAOC,KAAO,IAC3BT,EAAMI,OAAOI,OAAOE,IAAM,IAC1B,MACJ,QACIC,QAAQC,KAAK,yBAA0BrB,EAAMtH,MAGjD,OAAO+H,CACX,CCrCM,SAAUa,EAAWC,GACvB,IAAKA,EAAOnL,KAAM,OAAO,KAEzB,MAAMoL,ECLM,SAAqBC,EAAWC,GAC5C,MACIC,EAAQjD,MAAMF,QAAQiD,EAAKG,OAASH,EAAKG,MAAiB,CAACH,EAAKG,OAChEC,EAAQJ,EAAKK,MACbC,EAAKN,EAAKO,QACVC,EAAWR,EAAKS,MAEdV,EAAW,IAAIW,EAErB,IAAKR,EAAO,OAAOH,EAEnB,MAAMvE,EAAO0E,EAAMS,QAAO,CAACC,EAAKC,IAASD,EAAME,KAAKC,MAAqB,EAAfF,EAAKG,QAAgB,IAAI,GAC7EC,EAAU,IAAIC,YAAY1F,GAC1B2F,EAAM,IAAIlJ,aAAoB,EAAPuD,GACvB4F,EAAU,IAAInJ,aAAoB,EAAPuD,GAC3B6F,EAAY,IAAIpJ,aAAoB,EAAPuD,GAEnC,IAAI8F,EAAe,EAEnB,IAAK,MAAMT,KAAQX,EAAO,CACtB,MAAMqB,EAAMV,EAAKG,QACXnI,EAAQgI,EAAKW,UACnB,IAAIC,EAAS,EAEb,KAAOA,EAASF,GAAK,CAEjB,IAAIG,EAAQ,EAEZ,IAAK,IAAIvI,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAGxBuI,EAAQ7I,EACJ4I,EAAS,EAAItI,EAAIoI,IACjBG,GAASD,EAAS,EAAItI,GAE1B,MACMwI,EAAOnB,EADAJ,EAAMsB,GACQE,GAC3BX,EAAQK,GAAgBA,EAExBD,EAAyB,EAAfC,EAAmB,GAAKK,EAAKE,GAAG,GAAK5B,EAAO,GACtDoB,EAAyB,EAAfC,EAAmB,GAAKK,EAAKE,GAAG,GAAK5B,EAAO,GACtDoB,EAAyB,EAAfC,EAAmB,IAAMK,EAAKE,GAAG,GAAM5B,EAAO,GAExDmB,EAAuB,EAAfE,EAAmB,GAAKK,EAAKG,GAAG,GACxCV,EAAuB,EAAfE,EAAmB,GAAKK,EAAKG,GAAG,GACxCV,EAAuB,EAAfE,EAAmB,IAAMK,EAAKG,GAAG,GAErCxB,IACAa,EAAmB,EAAfG,EAAmB,GAAKhB,EAAGoB,GAAOpB,GAAG,GACzCa,EAAmB,EAAfG,EAAmB,GAAKhB,EAAGoB,GAAOpB,GAAG,IAG7CgB,GACH,CAEDG,GAAU,CACb,CACJ,CAOD,OALA1B,EAASgC,aAAa,WAAY,IAAIC,EAAgBX,EAAW,IACjEtB,EAASkC,SAAS,IAAID,EAAgBf,EAAS,IAC/ClB,EAASgC,aAAa,SAAU,IAAIC,EAAgBZ,EAAS,IAC7DrB,EAASgC,aAAa,KAAM,IAAIC,EAAgBb,EAAK,IAE9CpB,CACX,CD5DqBmC,CAAqBpC,EAAOnL,KAAM,CAAC,EAAG,EAAG,IAEpDwN,EAAMrC,EAAOnL,KAAKwN,IAAI,GAEtBC,EAAWD,EERf,SAAyBA,GAC3B,MAAMC,EAAW,IAAIC,EAMrB,OALAD,EAAS1D,MAAM4D,OAAOH,EAAIxD,EAAGwD,EAAIvD,EAAGuD,EAAItD,GACxCuD,EAASG,eAA8BC,IAAlBL,EAAII,UAA0BJ,EAAII,UAAY,GACnEH,EAASK,eAA6BD,IAAjBL,EAAIO,SAAyBP,EAAIO,SAAW,EACjEN,EAASO,aAAwBH,IAAdL,EAAIS,MAAsBT,EAAIS,MAAQ,EACzDR,EAASS,YAAcT,EAASO,QAAU,EACnCP,CACX,CFA2BU,CAAeX,QAAOK,EACvCxC,EAAO,IAAI+C,EAAKhD,EAAUqC,GAYhC,OAVApC,EAAKb,YAAa,EAClBa,EAAKgD,eAAgB,EAErBhD,EAAKiD,QAAQnD,EAAOoD,IAAI,IACxBlD,EAAKmD,QAAQrD,EAAOoD,IAAI,IACxBlD,EAAKoD,QAAQtD,EAAOoD,IAAI,IAExBlD,EAAKqD,MAAMnE,UAAUY,EAAOtE,KAAM,GAClCwE,EAAKxB,SAASU,UAAU,CAACY,EAAOrB,IAAI,GAAIqB,EAAOrB,IAAI,IAAKqB,EAAOrB,IAAI,IAAK,GAEjEuB,CACX,CGrBA,MAAMsD,EACI,EADJA,EAEI,GCCV,MAAaC,UAAwBC,EAEjCjI,cACIkI,QAEMjO,KAAAkO,UAAY,IAAIC,EAAS,cAAcC,EAC7CC,gBAAgBC,EAAaC,GACzBvO,KAAKwO,gBAAgB,eACrB,MAAMC,QAAaR,MAAMS,UAAUJ,EAAKC,GAClCI;;;;;;;;;SCJXN,eAA2BzG,EAAQpG,EAAO,IAC7C,OAAO,IAAIoN,SAAQ,CAACH,EAAKI,KACrBC,EAAO1P,aAAe,CAAC2P,EAAMC,KACrBA,EAAOH,EAAIG,GACVP,EAAIM,EAAK,EAElBD,EAAO/P,yBAAyB6I,EAAQpG,EAAK,GAErD,CDJgCyN,CAAWR,GACzBnO,QDRX+N,eAA6BU,GAChC,MAAMzO,EAA6B,GAC7B4O,EAAeH,EAAKzO,QAAQuB,OAClC,IAAK,MAAMyI,KAAU4E,EACjB,OAAQ5E,EAAO7I,MACf,KAAKqM,EACDxN,EAAQe,KAAKgJ,EAAWC,IACxB,MACJ,KAAKwD,EACDxN,EAAQe,KAAKwH,EAAYyB,IACzB,MACJ,QACIH,QAAQC,KAAK,0BAA2BE,EAAO7I,MAGvD,OAAOnB,EAAQ6O,QAAOC,KAAOA,GACjC,CCRkCC,CAAcV,GAC9BW,EAAO,IAAIC,EAIjB,OAHAD,EAAKE,OAAOlP,GAEZqO,EAAMc,MAAQH,EACPX,CACV,CAEDe,UAAUjB,EAAUkB,GAIhB,OAAOlB,EAAIgB,KACd,GACF,CAAC,SAAU,CAAC,0BAA0B,EApBxC,EAHsB1B,EAAU6B,WAAG"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/js-blend/parser/parser.js","../src/loader/light.ts","../src/loader/mesh.ts","../src/loader/geometry.ts","../src/loader/material.ts","../src/loader/index.ts","../src/BlendLoadPlugin.ts","../src/js-blend/main.js"],"sourcesContent":["/* eslint-disable camelcase, no-unused-vars, no-empty, no-constant-condition */\nconst DNA1 = 826363460;\nconst ENDB = 1111772741;\n\n/* Note: Blender coordinates treat the Z axis as the vertical an Y as depth. */\n\n// web worker not functional in this version\nlet USE_WEBWORKER = false;\n\nlet worker = null;\n\n// FR = new FileReader(),\n\nconst return_object = {\n loadBlendFromArrayBuffer: function (array_buffer) {\n return_object.ready = false;\n if (USE_WEBWORKER) {\n worker.postMessage(array_buffer, array_buffer);\n } else {\n worker.onmessage({\n data: array_buffer,\n });\n }\n },\n // loadBlendFromBlob: function (blob) {\n // FR.onload = function () {\n // return_object.loadBlendFromArrayBuffer(this.result);\n // };\n // FR.readAsArrayBuffer(blob);\n // },\n ready: true,\n onParseReady: function () {},\n};\n\nfunction worker_code () {\n 'use strict';\n\n let data = null,\n _data = null,\n BIG_ENDIAN = false,\n pointer_size = 0,\n struct_names = [],\n offset = 0,\n working_blend_file = null,\n current_SDNA_template = null,\n templates = {},\n finished_objects = [],\n FILE = null,\n ERROR = null,\n AB = null;\n\n const self = this;\n\n function parseFile (msg) {\n\n if (typeof msg.data == 'object') {\n // reset global variables\n AB = null;\n data = null;\n BIG_ENDIAN = false;\n pointer_size = 0;\n struct_names = [];\n offset = 0;\n working_blend_file = null;\n finished_objects = [];\n current_SDNA_template = null;\n\n\n // set data\n _data = msg.data;\n\n AB = _data.slice();\n\n data = new DataView(_data);\n\n\n FILE = new BLENDER_FILE(AB);\n\n // start parsing\n readFile();\n\n // export parsed data\n self.postMessage(FILE, ERROR);\n }\n }\n\n /*\n Export object for a parsed __blender_file__.\n */\n\n var BLENDER_FILE = function (AB) {\n this.AB = AB;\n // this.double = new Float64Array(AB);\n this.byte = new Uint8Array(AB);\n\n this.dv = new DataView(AB);\n\n this.objects = {};\n this.memory_lookup = {},\n this.object_array = [];\n\n this.template = null;\n };\n\n BLENDER_FILE.prototype = {\n addObject: function (obj) {\n this.object_array.push(obj);\n if (!this.objects[obj.blender_name]) this.objects[obj.blender_name] = [];\n this.objects[obj.blender_name].push(obj);\n },\n\n getPointer: function (offset) {\n const pointerLow = this.dv.getUint32(offset, this.template.endianess);\n if (this.template.pointer_size > 4) {\n const pointerHigh = this.dv.getUint32(offset + 4, this.template.endianess);\n if (this.template.endianess) {\n return (pointerLow) + 'l|h' + pointerHigh;\n } else {\n return (pointerHigh) + 'h|l' + pointerLow;\n }\n } else {\n return pointerLow;\n }\n },\n };\n\n self.onmessage = parseFile;\n // this.onmessage = parseFile;\n\n /*\n These functions map offsets in the blender __blender_file__ to basic types (byte,short,int,float) through TypedArrays;\n This allows the underlying binary data to be changed.\n */\n\n function float64Prop (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Float64Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getFloat64(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setFloat64(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function floatProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Float32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getFloat32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setFloat32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function intProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Int32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getInt32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setInt32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function uIntProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Uint32Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getUint32(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setUint32(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n function shortProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Int16Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getInt16(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {} else {\n this.__blender_file__.dv.setInt16(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n }\n\n const uShortProp = (offset, Blender_Array_Length, length) => {\n return {\n get: function () {\n return (Blender_Array_Length > 1) ?\n new Uint16Array(this.__blender_file__.AB, this.__data_address__ + offset, length) :\n this.__blender_file__.dv.getUint16(this.__data_address__ + offset, this.__blender_file__.template.endianess);\n },\n set: function (float) {\n if (Blender_Array_Length > 1) {\n } else {\n this.__blender_file__.dv.setUint16(this.__data_address__ + offset, float, this.__blender_file__.template.endianess);\n }\n },\n };\n };\n\n function charProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n if (Blender_Array_Length > 1) {\n let start = this.__data_address__ + offset;\n let end = start;\n let buffer_guard = 0;\n\n while (this.__blender_file__.byte[end] != 0 && buffer_guard++ < length) end++;\n\n return toString(this.__blender_file__.AB, start, end);\n }\n return this.__blender_file__.byte[(this.__data_address__ + offset)];\n },\n set: function (byte) {\n if (Blender_Array_Length > 1) {\n const string = byte + '';\n let i = 0;\n const l = string.length;\n while (i < length) {\n if (i < l) {\n this.__blender_file__.byte[(this.__data_address__ + offset + i)] = string.charCodeAt(i) | 0;\n } else {\n this.__blender_file__.byte[(this.__data_address__ + offset + i)] = 0;\n }\n i++;\n }\n } else {\n this.__blender_file__.byte[(this.__data_address__ + offset)] = byte | 0;\n }\n },\n };\n }\n\n function pointerProp2 (offset) {\n return {\n get: function () {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + offset, this.__blender_file__);\n const link = this.__blender_file__.memory_lookup[pointer];\n\n const results = [];\n\n if (link) {\n const address = link.__data_address__;\n let j = 0;\n while (true) {\n pointer = this.__blender_file__.getPointer(address + j * 8, this.__blender_file__);\n let obj = this.__blender_file__.memory_lookup[pointer];\n if (!obj) break;\n results.push(obj);\n j++;\n }\n\n }\n\n return results;\n },\n set: function () {},\n };\n }\n\n function pointerProp (offset, Blender_Array_Length, length) {\n return {\n get: function () {\n if (Blender_Array_Length > 1) {\n let array = [];\n let j = 0;\n let off = offset;\n while (j < Blender_Array_Length) {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + off, this.__blender_file__);\n\n array.push(this.__blender_file__.memory_lookup[pointer]);\n off += length;\n j++;\n }\n\n return array;\n } else {\n let pointer = this.__blender_file__.getPointer(this.__data_address__ + offset, this.__blender_file__);\n return this.__blender_file__.memory_lookup[pointer];\n }\n },\n set: function () {},\n };\n }\n\n function compileProp (obj, name, type, offset, array_size, IS_POINTER, pointer_size, length) {\n\n if (!IS_POINTER) {\n switch (type) {\n case 'double':\n Object.defineProperty(obj, name, float64Prop(offset, array_size, length >> 3));\n break;\n case 'float':\n Object.defineProperty(obj, name, floatProp(offset, array_size, length >> 2));\n break;\n case 'int':\n Object.defineProperty(obj, name, intProp(offset, array_size, length >> 2));\n break;\n case 'short':\n case 'ushort':\n Object.defineProperty(obj, name, shortProp(offset, array_size, length >> 1));\n break;\n case 'char':\n case 'uchar':\n Object.defineProperty(obj, name, charProp(offset, array_size, length));\n break;\n default:\n // compile list to\n obj[name] = {};\n obj.__list__.push(name, type, length, offset, array_size, IS_POINTER);\n }\n obj._length += length;\n offset += length;\n } else {\n Object.defineProperty(obj, name, pointerProp(offset, array_size, pointer_size));\n offset += pointer_size * array_size;\n }\n\n return offset;\n }\n\n // Store final DNA structs\n const MASTER_SDNA_SCHEMA = function (version) {\n this.version = version;\n this.SDNA_SET = false;\n this.byte_size = 0;\n this.struct_index = 0;\n this.structs = {};\n this.SDNA = {};\n this.endianess = false;\n };\n\n MASTER_SDNA_SCHEMA.prototype = {\n getSDNAStructureConstructor: function (name, struct) {\n if (struct) {\n const blen_struct = Function('function ' + name + '(){}; return ' + name)();\n\n blen_struct.prototype = new BLENDER_STRUCTURE();\n blen_struct.prototype.blender_name = name;\n blen_struct.prototype.__pointers = [];\n blen_struct.prototype.__list__ = [];\n\n let offset = 0;\n // Create properties of struct\n for (let i = 0; i < struct.length; i += 3) {\n let _name = struct[i];\n const n = _name,\n type = struct[i + 1];\n let length = struct[i + 2],\n array_length = 0,\n match = null,\n Blender_Array_Length = 1,\n Suparray_match = 1,\n PointerToArray = false,\n Pointer_Match = 0;\n const DNA = this.SDNA[name] = {\n constructor: blen_struct,\n };\n\n\n let original_name = _name;\n\n // mini type parser\n if ((match = _name.match(/(\\*?)(\\*?)(\\w+)(\\[(\\w*)\\])?(\\[(\\w*)\\])?/))) {\n\n // base name\n _name = match[3];\n\n // pointer type\n if (match[1]) {\n Pointer_Match = 10;\n blen_struct.prototype.__pointers.push(_name);\n }\n\n if (match[2]) {\n PointerToArray = true;\n }\n\n // arrays\n if (match[4]) {\n if (match[6]) {\n Suparray_match = parseInt(match[5]);\n Blender_Array_Length = parseInt(match[7]);\n } else {\n Blender_Array_Length = parseInt(match[5]);\n }\n }\n array_length = Blender_Array_Length * length;\n length = array_length * Suparray_match;\n }\n\n DNA[n] = {\n type: type,\n length: length,\n isArray: (Blender_Array_Length > 0),\n };\n\n if (PointerToArray) {\n Object.defineProperty(blen_struct.prototype, _name, pointerProp2(offset));\n offset += pointer_size;\n } else if (Suparray_match > 1) {\n const array_names = new Array(Suparray_match);\n\n // construct sub_array object that will return the correct structs\n for (let j = 0; j < Suparray_match; j++) {\n let array_name_ = `__${_name}[${j}]__`;\n array_names[j] = array_name_;\n\n offset = compileProp(blen_struct.prototype, array_name_, type, offset, Blender_Array_Length, Pointer_Match, pointer_size, array_length);\n }\n\n Object.defineProperty(blen_struct.prototype, _name, {\n get: (function (array_names) {\n return function () {\n const array = [];\n for (let i = 0; i < array_names.length; i++) {\n array.push(this[array_names[i]]);\n }\n return array;\n };\n })(array_names),\n });\n } else {\n offset = compileProp(blen_struct.prototype, _name, type, offset, Blender_Array_Length, Pointer_Match, pointer_size, length);\n }\n }\n\n return this.SDNA[name].constructor;\n\n } else {\n if (!this.SDNA[name]) {\n return null;\n }\n return this.SDNA[name].constructor;\n }\n },\n };\n\n var BLENDER_STRUCTURE = function () {\n this.__blender_file__ = null;\n this.__list__ = null;\n this.__super_array_list__ = null;\n this.blender_name = '';\n this.__pointers = null;\n this.address = null;\n this.length = 0;\n this.__data_address__ = 0;\n this.blender_name = '';\n this._length = 0;\n };\n\n\n /*\n Returns a pre-constructed BLENDER_STRUCTURE or creates a new BLENDER_STRUCTURE to match the DNA struct type\n */\n const pointer_function = (pointer) => () => {\n return FILE.memory_lookup[pointer];\n };\n\n function getPointer (offset) {\n const pointerLow = data.getUint32(offset, BIG_ENDIAN);\n if (pointer_size > 4) {\n const pointerHigh = data.getUint32(offset + 4, BIG_ENDIAN);\n\n if (BIG_ENDIAN) {\n return (pointerLow) + '' + pointerHigh;\n } else {\n return (pointerHigh) + '' + pointerLow;\n }\n } else {\n return pointerLow;\n }\n }\n\n BLENDER_STRUCTURE.prototype = {\n setData: function (pointer, _data_offset, data_block_length, BLENDER_FILE) {\n if (this.__list__ === null) return this;\n BLENDER_FILE.addObject(this);\n\n this.__blender_file__ = BLENDER_FILE;\n\n const struct = this.__list__;\n let j = 0,\n i = 0,\n obj, name = '',\n type, length, Blender_Array_Length, Pointer_Match, offset, constructor;\n\n this.__data_address__ = _data_offset;\n\n if (struct === null) return this;\n\n for (i = 0; i < struct.length; i += 6) {\n obj = null;\n name = struct[i];\n type = struct[i + 1];\n Blender_Array_Length = struct[i + 4];\n Pointer_Match = struct[i + 5];\n offset = this.__data_address__ + struct[i + 3];\n\n if (Blender_Array_Length > 1) {\n this[name] = [];\n j = 0;\n while (j < Blender_Array_Length) {\n if (current_SDNA_template.getSDNAStructureConstructor(type)) {\n constructor = current_SDNA_template.getSDNAStructureConstructor(type);\n this[name].push((new constructor()).setData(0, offset, offset + length / Blender_Array_Length, BLENDER_FILE));\n } else this[name].push(null);\n offset += length / Blender_Array_Length;\n j++;\n }\n } else {\n if (current_SDNA_template.getSDNAStructureConstructor(type)) {\n constructor = current_SDNA_template.getSDNAStructureConstructor(type);\n this[name] = (new constructor()).setData(0, offset, length + offset, BLENDER_FILE);\n } else this[name] = null;\n }\n }\n // break connection to configuration list\n this.__list__ = null;\n return this;\n },\n\n get aname () {\n if (this.id) return this.id.name.slice(2);\n else return undefined;\n },\n };\n\n function toString (buffer, _in, _out) {\n return String.fromCharCode.apply(String, new Uint8Array(buffer, _in, _out - _in));\n }\n\n // Begin parsing blender __blender_file__\n\n function readFile () {\n let count = 0;\n let offset2 = 0;\n const root = 0;\n const i = 0;\n let data_offset = 0;\n let sdna_index = 0;\n let code = '';\n let block_length = 0;\n let curr_count = 0;\n let curr_count2 = 0;\n\n FILE.memory_lookup = {};\n struct_names = [];\n offset = 0;\n\n // Make sure we have a .blend __blender_file__. All blend files have the first 12bytes\n // set with BLENDER-v### in Utf-8\n if (toString(_data, offset, 7) !== 'BLENDER') return ERROR = 'File supplied is not a .blend compatible Blender file.';\n\n // otherwise get templete from save version.\n\n offset += 7;\n pointer_size = ((toString(_data, offset++, offset)) == '_') ? 4 : 8;\n BIG_ENDIAN = toString(_data, offset++, offset) !== 'V';\n const version = toString(_data, offset, offset + 3);\n\n\n // create new master template if none exist for current blender version;\n if (!templates[version]) {\n templates[version] = new MASTER_SDNA_SCHEMA(version);\n }\n\n current_SDNA_template = templates[version];\n\n FILE.template = current_SDNA_template;\n\n offset += 3;\n\n // Set SDNA structs if template hasn't been set.\n // Todo: Move the following block into the MASTER_SDNA_SCHEMA object.\n //* Like so:*/ current_SDNA_template.set(AB);\n\n if (!current_SDNA_template.SDNA_SET) {\n current_SDNA_template.endianess = BIG_ENDIAN;\n current_SDNA_template.pointer_size = pointer_size;\n // find DNA1 data block\n offset2 = offset;\n\n while (true) {\n sdna_index = data.getInt32(offset2 + pointer_size + 8, BIG_ENDIAN);\n // eslint-disable-next-line no-control-regex\n code = toString(_data, offset2, offset2 + 4).replace(/\\u0000/g, '');\n block_length = data.getInt32(offset2 + 4, true);\n offset2 += 16 + (pointer_size);\n if (code === 'DNA1') {\n // DNA found; This is the core of the __blender_file__ and contains all the structure for the various data types used in Blender.\n count = 0;\n let types = [],\n fields = [],\n names = [],\n lengths = [],\n name = '',\n curr_name = '';\n\n // skip SDNA and NAME identifiers\n offset2 += 8;\n\n // Number of structs.\n count = data.getInt32(offset2, true);\n offset2 += 4;\n\n curr_count = 0;\n\n // Build up list of names for structs\n while (curr_count < count) {\n curr_name = '';\n while (data.getInt8(offset2) !== 0) {\n curr_name += toString(_data, offset2, offset2 + 1);\n offset2++;\n }\n names.push(curr_name);\n offset2++;\n curr_count++;\n }\n\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n\n // Number of struct types\n count = data.getInt32(offset2, true);\n offset2 += 4;\n curr_count = 0;\n\n // Build up list of types\n while (curr_count < count) {\n curr_name = '';\n while (data.getInt8(offset2) !== 0) {\n curr_name += toString(_data, offset2, offset2 + 1);\n offset2++;\n }\n types.push(curr_name);\n offset2++;\n curr_count++;\n }\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n curr_count = 0;\n\n // Build up list of byte lengths for types\n while (curr_count < count) {\n lengths.push(data.getInt16(offset2, BIG_ENDIAN));\n offset2 += 2;\n curr_count++;\n }\n\n // Adjust for 4byte alignment\n if ((offset2 % 4) > 0) offset2 = (4 - (offset2 % 4)) + offset2;\n offset2 += 4;\n\n // Number of structures\n const structure_count = data.getInt32(offset2, BIG_ENDIAN);\n offset2 += 4;\n curr_count = 0;\n\n // Create constructor objects from list of SDNA structs\n while (curr_count < structure_count) {\n const struct_name = types[data.getInt16(offset2, BIG_ENDIAN)];\n offset2 += 2;\n const obj = [];\n count = data.getInt16(offset2, BIG_ENDIAN);\n offset2 += 2;\n curr_count2 = 0;\n struct_names.push(struct_name);\n\n // Fill an array with name, type, and length for each SDNA struct property\n while (curr_count2 < count) {\n obj.push(names[data.getInt16(offset2 + 2, BIG_ENDIAN)], types[data.getInt16(offset2, BIG_ENDIAN)], lengths[data.getInt16(offset2, BIG_ENDIAN)]);\n offset2 += 4;\n curr_count2++;\n }\n\n // Create a SDNA constructor by passing [type,name,lenth] array as second argument\n current_SDNA_template.getSDNAStructureConstructor(struct_name, obj);\n curr_count++;\n }\n current_SDNA_template.SDNA_SET = true;\n current_SDNA_template.SDNA_NAMES = struct_names;\n break;\n }\n offset2 += block_length;\n }\n }\n\n // parse the rest of the data, starting back at the top.\n\n // TODO: turn into \"on-demand\" parsing.\n\n while (true) {\n if ((offset % 4) > 0) {\n offset = (4 - (offset % 4)) + offset;\n }\n\n data_offset = offset;\n sdna_index = data.getInt32(offset + pointer_size + 8, BIG_ENDIAN);\n let code_uint = data.getUint32(offset, BIG_ENDIAN);\n offset2 = offset + 16 + (pointer_size);\n offset += data.getInt32(offset + 4, true) + 16 + (pointer_size);\n\n if (code_uint === DNA1); // skip - already processed at this point\n else if (code_uint === ENDB) break; // end of __blender_file__ found\n else {\n // Create a Blender object using a constructor template from current_SDNA_template\n const data_start = data_offset + pointer_size + 16;\n\n // Get a SDNA constructor by name;\n const constructor = current_SDNA_template.getSDNAStructureConstructor(current_SDNA_template.SDNA_NAMES[sdna_index]);\n\n const size = data.getInt32(data_offset + 4, BIG_ENDIAN);\n\n count = data.getInt32(data_offset + 12 + pointer_size, BIG_ENDIAN);\n\n if (count > 0) {\n let obj = new constructor();\n\n const length = constructor.prototype._length;\n\n\n const address = FILE.getPointer(data_offset + 8);\n\n obj.address = address + '';\n\n obj.setData(address, data_start, data_start + size, FILE);\n\n if (count > 1) {\n let array = [];\n array.push(obj);\n for (let u = 1; u < count; u++) {\n obj = new constructor();\n obj.setData(address, data_start + length * u, data_start + (length * u) + length, FILE);\n array.push(obj);\n }\n FILE.memory_lookup[address] = array;\n } else {\n FILE.memory_lookup[address] = obj;\n }\n }\n }\n }\n }\n}\n\nworker = new worker_code();\n\nworker.postMessage = function (message) {\n return_object.onParseReady(message);\n};\n\nexport default return_object;\n",null,null,null,null,null,null,"/* eslint-disable camelcase */\n/**\n * JS.Blend\n * Original Repo: https://github.com/acweathersby/js.blend\n * Slightly modified for three.js and js updates, minor refactor.\n * Object-creation part re-written for latest three.js and typescript\n * MIT License\n * Copyright (c) 2020 Anthony C, Weathersby\n * @license\n */\nimport parser from './parser/parser.js';\n\nexport async function parseBlend (buffer, name = '') {\n return new Promise((res, rej) => {\n parser.onParseReady = (file, error) => {\n if (error) rej(error)\n else res(file)\n }\n parser.loadBlendFromArrayBuffer(buffer, name)\n })\n}\n"],"names":["DNA1","ENDB","worker","return_object","loadBlendFromArrayBuffer","array_buffer","ready","onmessage","data","onParseReady","_data","BIG_ENDIAN","pointer_size","struct_names","offset","current_SDNA_template","templates","FILE","ERROR","AB","self","this","BLENDER_FILE","byte","Uint8Array","dv","DataView","objects","memory_lookup","object_array","template","pointerProp2","get","pointer","__blender_file__","getPointer","__data_address__","link","results","address","j","obj","push","set","compileProp","name","type","array_size","IS_POINTER","length","Object","defineProperty","Blender_Array_Length","array","off","pointerProp","Float64Array","getFloat64","endianess","float","setFloat64","float64Prop","Float32Array","getFloat32","setFloat32","floatProp","Int32Array","getInt32","setInt32","intProp","Int16Array","getInt16","setInt16","shortProp","start","end","buffer_guard","toString","string","i","l","charCodeAt","charProp","__list__","_length","prototype","addObject","blender_name","pointerLow","getUint32","pointerHigh","msg","slice","count","offset2","data_offset","sdna_index","code","block_length","curr_count","curr_count2","version","MASTER_SDNA_SCHEMA","SDNA_SET","replace","types","names","lengths","curr_name","getInt8","structure_count","struct_name","getSDNAStructureConstructor","SDNA_NAMES","code_uint","data_start","constructor","size","setData","u","readFile","postMessage","byte_size","struct_index","structs","SDNA","struct","blen_struct","Function","BLENDER_STRUCTURE","__pointers","_name","n","array_length","match","Suparray_match","PointerToArray","Pointer_Match","DNA","parseInt","isArray","array_names","Array","array_name_","__super_array_list__","buffer","_in","_out","String","fromCharCode","apply","_data_offset","data_block_length","aname","id","message","blenderLightTypes","point","sun","spot","hemi","area","createLight","lamp","ldata","position","loc","color","r","g","b","intensity","energy","light","PointLight","fromArray","castShadow","shadow","mapSize","width","height","camera","near","far","console","warn","createMesh","object","geometry","mesh","origin","faces","mpoly","loops","mloop","uv","mloopuv","vertices","mvert","BufferGeometry","reduce","acc","face","Math","floor","totloop","indices","Uint32Array","uvs","normals","positions","currentIndex","len","loopstart","indexi","index","vert","v","co","no","setAttribute","BufferAttribute","setIndex","createBufferGeometry","mat","material","MeshPhysicalMaterial","setRGB","roughness","undefined","metalness","metallic","opacity","alpha","transparent","createMaterial","Mesh","receiveShadow","rotateZ","rot","rotateY","rotateX","scale","blenderObjectTypes","BlendLoadPlugin","BaseImporterPlugin","super","_importer","Importer","FileLoader","loadAsync","url","onProgress","setResponseType","res","blend","async","Promise","rej","parser","file","error","parseBlend","blendObjects","filter","o","createObjects","root","Object3D","add","scene","transform","_","PluginType"],"mappings":"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"}
|
package/dist/loader/light.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"light.d.ts","sourceRoot":"","sources":["../../src/loader/light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,WAAW,CAAA;AAUpC,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"light.d.ts","sourceRoot":"","sources":["../../src/loader/light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,WAAW,CAAA;AAUpC,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,oDA+BpC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { MeshPhysicalMaterial } from 'threepipe';
|
|
2
|
-
export declare function createMaterial(mat: any): MeshPhysicalMaterial<import("three").Event,
|
|
2
|
+
export declare function createMaterial(mat: any): MeshPhysicalMaterial<import("three").Event, string>;
|
|
3
3
|
//# sourceMappingURL=material.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"material.d.ts","sourceRoot":"","sources":["../../src/loader/material.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,WAAW,CAAA;AAG9C,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"material.d.ts","sourceRoot":"","sources":["../../src/loader/material.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,WAAW,CAAA;AAG9C,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,uDAQtC"}
|
package/dist/loader/mesh.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Mesh } from 'threepipe';
|
|
2
|
-
export declare function createMesh(object: any): Mesh<import("threepipe").BufferGeometry<import("three").NormalBufferAttributes, import("three").Event, string>, import("threepipe").MeshPhysicalMaterial<import("three").Event,
|
|
2
|
+
export declare function createMesh(object: any): Mesh<import("threepipe").BufferGeometry<import("three").NormalBufferAttributes, import("three").Event, string>, import("threepipe").MeshPhysicalMaterial<import("three").Event, string>> | null;
|
|
3
3
|
//# sourceMappingURL=mesh.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh.d.ts","sourceRoot":"","sources":["../../src/loader/mesh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAI9B,wBAAgB,UAAU,CAAC,MAAM,EAAE,GAAG
|
|
1
|
+
{"version":3,"file":"mesh.d.ts","sourceRoot":"","sources":["../../src/loader/mesh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAI9B,wBAAgB,UAAU,CAAC,MAAM,EAAE,GAAG,mMAqBrC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@threepipe/plugin-blend-importer",
|
|
3
3
|
"description": "Basic importer for .blend file",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.2",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"threepipe": "
|
|
6
|
+
"threepipe": "file:./../../src/"
|
|
7
7
|
},
|
|
8
8
|
"type": "module",
|
|
9
9
|
"main": "dist/index.js",
|
|
@@ -29,5 +29,11 @@
|
|
|
29
29
|
"repository": {
|
|
30
30
|
"type": "git",
|
|
31
31
|
"url": "git://github.com/repalash/threepipe.git"
|
|
32
|
+
},
|
|
33
|
+
"replace": {
|
|
34
|
+
"dependencies": {},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"threepipe": "^0.0.13"
|
|
37
|
+
}
|
|
32
38
|
}
|
|
33
39
|
}
|
package/src/global.d.ts
CHANGED