@threepipe/plugin-blend-importer 0.0.2 → 0.0.5

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.
@@ -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","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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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/js-blend/parser/parser.js","../src/js-blend/main.js","../src/loader/camera.ts","../src/loader/light.ts","../src/loader/geometry.ts","../src/loader/material.ts","../src/loader/mesh.ts","../src/loader/index.ts","../src/BlendLoadPlugin.ts"],"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 const 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 enumerable: true,\n configurable: true,\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 enumerable: true,\n configurable: true,\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 enumerable: true,\n configurable: true,\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 enumerable: true,\n configurable: true,\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 enumerable: true,\n configurable: true,\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 enumerable: true,\n configurable: true,\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 enumerable: true,\n configurable: true,\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 enumerable: true,\n configurable: true,\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 enumerable: true,\n configurable: true,\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 Object.defineProperty(obj, name, shortProp(offset, array_size, length >> 1));\n break;\n case 'ushort':\n Object.defineProperty(obj, name, uShortProp(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 obj._length += pointer_size * array_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 jsName = name === 'void' ? 'void_' : name\n const blen_struct = Function('function ' + jsName + '(){}; return ' + jsName)();\n\n // if(name === 'CustomDataLayer') debugger\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 const DNA = this.SDNA[name] = {\n constructor: blen_struct,\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\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 enumerable: true,\n configurable: true,\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 const 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(this.blender_name === 'CustomDataLayer') debugger\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 // todo gzip, zstd(28 b5 2f fd, https://projects.blender.org/archive/blender-file/issues/93858)\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 const magic = toString(_data, offset, 7)\n if (magic !== '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 // todo fix seek logic\n // Adjust for 4byte alignment TYPE\n if (toString(_data, offset2, offset2 + 4) !== 'TYPE'\n ) {\n for (let j = 0; j < 8; j++) {\n if(toString(_data, offset2, offset2 + 4) === 'TYPE') break\n offset2++;\n }\n // offset2 = (4 - (offset2 % 4)) + offset2;\n }\n if(toString(_data, offset2, offset2 + 4) !== 'TYPE') {\n debugger\n }\n offset2 += 4;\n\n // Number of struct types\n count = data.getUint32(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 // todo fix seek logic\n // Adjust for 4byte alignment\n if (toString(_data, offset2, offset2 + 4) !== 'TLEN'\n ) {\n for (let j = 0; j < 8; j++) {\n if(toString(_data, offset2, offset2 + 4) === 'TLEN') break\n offset2++;\n }\n // offset2 = (4 - (offset2 % 4)) + offset2;\n }\n if(toString(_data, offset2, offset2 + 4) !== 'TLEN') {\n debugger\n }\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 // todo fix seek logic\n // Adjust for 4byte alignment STRC\n if (toString(_data, offset2, offset2 + 4) !== 'STRC'\n ) {\n for (let j = 0; j < 8; j++) {\n if(toString(_data, offset2, offset2 + 4) === 'STRC') break\n offset2++;\n }\n // offset2 = (4 - (offset2 % 4)) + offset2;\n }\n if(toString(_data, offset2, offset2 + 4) !== 'STRC') {\n debugger\n }\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\n // const n = names[data.getInt16(offset2 + 2, BIG_ENDIAN)]\n // if(obj.find((o, i)=>i%3===0 && o===n)){\n // debugger\n // }\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 // https://github.com/fschutt/mystery-of-the-blend-backup\n while (true) {\n // todo fix cleanup\n // this is not the case, see blend-load-test.blend and Ruins_Assets.blend\n // if ((offset % 4) > 0) {\n // console.log('fix', offset, offset % 4)\n // debugger\n // offset = (4 - (offset % 4)) + offset;\n // }\n for (let j = 0; j < 8; j++) {\n if(data.getInt8(offset) === 0) {\n offset++\n continue\n }\n break\n }\n if(data.getInt8(offset) === 0) {\n debugger\n }\n\n data_offset = offset;\n\n if (offset + pointer_size + 12 >= data.byteLength) {\n ERROR = 'Unexpected end of file while parsing';\n break\n }\n\n sdna_index = data.getInt32(offset + pointer_size + 8, BIG_ENDIAN);\n // let code_uint = data.getUint32(offset, BIG_ENDIAN);\n const code_str = toString(_data, offset, offset + 4) // data.getUint32(offset, BIG_ENDIAN);\n\n offset2 = offset + 16 + (pointer_size);\n // console.log(code_str, code_str.length, data.getInt8(offset))\n\n const blockLength = data.getInt32(offset + 4, true);\n if (blockLength < 0 || offset + blockLength + 16 + pointer_size > data.byteLength) {\n ERROR = 'Invalid block length detected';\n break\n }\n // if(blockLength === 1) {\n // debugger\n // }\n\n // last_offset = offset\n\n offset += blockLength + 16 + (pointer_size);\n\n if (code_str === 'DNA1') {} // skip - already processed at this point\n else if (code_str === 'ENDB') break; // end of __blender_file__ found\n else if (code_str === 'TEST') { // snapshot\n const data_start = data_offset + pointer_size + 16;\n const width = data.getInt32(data_start, BIG_ENDIAN);\n const height = data.getInt32(data_start + 4, BIG_ENDIAN);\n if ((width * height > 0)) {\n const data_len = width * height * 4; // RGBA\n if(blockLength < data_len + 8) {\n ERROR = 'Invalid TEST block length detected';\n break;\n }\n const image_data = new Uint32Array(_data, data_start + 8, data_len >> 2);\n const image = {\n width: width,\n height: height,\n data: image_data,\n };\n FILE.thumbnail = image\n }\n }\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 && constructor) {\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, err) {\n return_object.onParseReady(message, err);\n};\n\nexport default return_object;\n\n// window.prettyPrintHex = function (view, offset = 0, length = view.byteLength - offset) {\n// const bytes = Array.from({ length }, (_, i) => view.getUint8(offset + i));\n// console.log(bytes.map((b, i) => (i % 16 === 0 ? '\\n' : '') + b.toString(16).padStart(2, '0')).join(' '));\n// console.log(bytes.map((b, i) => (i % 16 === 0 ? '\\n' : '') + String.fromCharCode(b)).join(''));\n// }\n","/* 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 // todo throw error if no objects?\n if (error) console.error(error)\n res(file)\n }\n parser.loadBlendFromArrayBuffer(buffer, name)\n })\n}\n","import {Object3D} from 'threepipe'\n\nexport function createCamera(object: any, ctx: any): Object3D | undefined {\n const cdata = object.data\n // console.log(bakeGetters(object))\n if (!cdata) return undefined\n\n // Blender camera types: 0 = Perspective, 1 = Orthographic\n const type = cdata.type\n let camera: Object3D\n if (type === 0) {\n // Perspective\n camera = new ctx.PerspectiveCamera(\n cdata.lens || 50, // fov or lens\n (cdata.sensor_x || 36) / (cdata.sensor_y || 24), // aspect\n cdata.clipsta || 0.1, // near\n cdata.clipend || 1000 // far\n )\n // Set additional properties if needed\n camera.position.set(0, 0, 0)\n if ('shiftx' in cdata) camera.userData.shiftX = cdata.shiftx // todo?\n if ('shifty' in cdata) camera.userData.shiftY = cdata.shifty\n } else if (type === 1) {\n // Orthographic\n const scale = cdata.ortho_scale || 1\n const aspect = (cdata.sensor_x || 36) / (cdata.sensor_y || 24)\n const left = -scale * aspect / 2\n const right = scale * aspect / 2\n const top = scale / 2\n const bottom = -scale / 2\n camera = new ctx.OrthographicCamera(\n left, right, top, bottom,\n cdata.clipsta || 0.1,\n cdata.clipend || 1000\n )\n camera.position.set(0, 0, 0)\n if ('shiftx' in cdata) camera.userData.shiftX = cdata.shiftx\n if ('shifty' in cdata) camera.userData.shiftY = cdata.shifty\n } else {\n // Unknown camera type\n camera = new ctx.PerspectiveCamera()\n console.warn('Unsupported camera type', type)\n }\n\n return camera\n}\n","import {Light} from 'threepipe'\n\nconst blenderLightTypes = {\n point: 0,\n sun: 1,\n spot: 0,\n hemi: 0,\n area: 0,\n}\n\nexport function createLight(lamp: any, ctx: any) {\n const ldata = lamp.data\n\n const position = [lamp.loc[0], lamp.loc[2], -lamp.loc[1]]\n\n const color = ldata.r * 255 << 16 | ldata.g * 255 << 8 | ldata.b * 255 << 0\n const intensity = ldata.energy\n const distance = 0\n\n let light: Light | undefined = undefined\n\n switch (ldata.type) {\n case blenderLightTypes.point:\n light = new ctx.PointLight(color, intensity, distance)\n light!.position.fromArray(position, 0)\n light!.castShadow = true\n break\n case blenderLightTypes.sun:\n light = new ctx.PointLight(color, intensity, distance)\n light!.position.fromArray(position, 0)\n light!.castShadow = true\n if (light!.shadow) {\n light!.shadow.mapSize.width = 1024\n light!.shadow.mapSize.height = 1024\n // @ts-expect-error ??/\n light!.shadow.camera.near = 0.01\n // @ts-expect-error ??/\n light!.shadow.camera.far = 500\n }\n break\n default:\n console.warn('Unsupported light type', ldata.type)\n }\n\n return light\n}\n","function getLayer(layers: any, i: number) {\n if (!Array.isArray(layers)) return layers\n return layers[i]\n}\n// https://projects.blender.org/blender/blender/pulls/108015/files\n// https://projects.blender.org/blender/blender/commit/1b63a290c68636211b16c5e212a699e6b63031b9\n// https://developer.blender.org/docs/release_notes/4.0/python_api/#breaking-changes\n// https://developer.blender.org/docs/release_notes/4.0/#blend-files\n// https://projects.blender.org/blender/blender/commit/7966cd16d6dc4e66d01f7bd68a090107c1a7978c\n// https://projects.blender.org/blender/blender/issues/95967\n// https://projects.blender.org/blender/blender/pulls/106638\n\n// https://github.com/blender/blender/blob/55e2fd2929b7577e0785c128c8f8069efd990c07/source/blender/blenkernel/intern/mesh.cc#L413\nexport function createBufferGeometry(meshData: any, ctx: any) {\n\n if (meshData.mpoly) return createBufferGeometryOld(meshData, ctx)\n const geometry = new ctx.BufferGeometry()\n geometry.name = meshData.aname || ''\n\n // console.log(bakeGetters(meshData))\n\n // https://github.com/blender/blender/blob/05dcc0377b62d8e026e1901dfbecbd4b06fda0b5/scripts/addons_core/io_scene_gltf2/blender/exp/primitive_extract.py#L19\n\n let vertices\n let indices\n\n // Extract vertex positions from vdata layers\n if (meshData.vdata && meshData.vdata.layers && meshData.vdata.totlayer > 0) {\n for (let i = 0; i < meshData.vdata.totlayer; i++) {\n const layer = getLayer(meshData.vdata.layers, i)\n // if (layer.type === 0) {\n // https://github.com/blender/blender/blob/05dcc0377b62d8e026e1901dfbecbd4b06fda0b5/scripts/addons_core/io_scene_gltf2/blender/exp/primitive_extract.py#L1575\n const data = layer.data || []\n // if (layer.name === 'position') { // type = 48 (custom vec3)\n if (data.length === meshData.totvert) {\n if (vertices && (layer.name !== 'position' || vertices.name === 'position')) {\n // console.warn('BlendLoader - multiple vertices, ignoring', layer)\n continue\n }\n vertices = layer\n } else {\n // console.log('unknown vdata', layer)\n }\n }\n }\n\n // Blender loops are indexes in three.js/blender. Called dots in gltf exporter\n\n // // Extract indexes from loop data layers\n if (meshData.ldata && meshData.ldata.layers) {\n for (let i = 0; i < meshData.ldata.totlayer; i++) {\n const layer = getLayer(meshData.ldata.layers, i)\n // if (layer.type === 0) {\n const data = layer.data || []\n // if (layer.name === '.corner_vert') { // type = 11\n if (data.length === meshData.totloop) { // type = 11\n if (indices && (layer.name !== '.corner_vert' || indices.name === '.corner_vert')) {\n // console.warn('BlendLoader - multiple indices, ignoring', layer)\n continue\n }\n indices = layer\n } else {\n // console.log('unknown ldata', layer)\n }\n }\n }\n // if (meshData.pdata && meshData.pdata.layers) {\n // for (let i = 0; i < meshData.pdata.totlayer; i++) {\n // const layer = getLayer(meshData.pdata.layers, i)\n // // if (layer.type === 0) {\n // // if (layer.name === '.corner_vert') { // type = 11\n // // } else {\n // console.log('unknown pdata', layer)\n // // }\n // }\n // }\n // if (meshData.fdata && meshData.fdata.layers) {\n // for (let i = 0; i < meshData.fdata.totlayer; i++) {\n // const layer = getLayer(meshData.fdata.layers, i)\n // // if (layer.type === 0) {\n // // if (layer.name === '.corner_vert') { // type = 11\n // // } else {\n // console.log('unknown fdata', layer)\n // // }\n // }\n // }\n // if (meshData.edata && meshData.edata.layers) {\n // for (let i = 0; i < meshData.edata.totlayer; i++) {\n // const layer = getLayer(meshData.edata.layers, i)\n // // if (layer.type === 0) {\n // // if (layer.name === '.corner_vert') { // type = 11\n // // } else {\n // console.log('unknown edata', layer)\n // // }\n // }\n // }\n\n let faceIndices: number[] = []\n if (meshData.poly_offset_indices && meshData.totpoly > 0) {\n faceIndices = [...new Int32Array(meshData.poly_offset_indices.__blender_file__.AB, meshData.poly_offset_indices.__data_address__, meshData.totpoly + 1)]\n }\n // if (faceSize !== 3 && faceSize !== 4 && !faceIndices.length) {\n // console.error('not supported polygons with ', faceSize, 'vertices')\n // return geometry\n // }\n\n if (vertices?.data && vertices.data.length > 0) {\n const positions = new Float32Array(vertices.data.length * 3)\n for (let j = 0; j < vertices.data.length; j++) {\n const vertex = vertices.data[j]\n if (vertex.x !== undefined) {\n positions[j * 3] = vertex.x\n positions[j * 3 + 1] = vertex.z\n positions[j * 3 + 2] = -vertex.y\n } else if (vertex.co !== undefined) {\n positions[j * 3] = vertex.co[0]\n positions[j * 3 + 1] = vertex.co[2]\n positions[j * 3 + 2] = -vertex.co[1]\n } else {\n // console.log(bakeGetters(meshData))\n // const t = [...new Int32Array(vertex.__blender_file__.AB, vertex.__data_address__, 8)]\n // debugger\n console.error('BlendLoader - unknown vertex', vertex)\n break\n }\n }\n geometry.setAttribute('position', new ctx.BufferAttribute(positions, 3))\n }\n\n if (indices?.data && indices.data.length > 0 && vertices?.data?.length) {\n const faceSize = meshData.totloop / meshData.totpoly\n if (faceIndices.length > 0) {\n // Use face offset indices for variable-sized faces\n let totalTriangles = 0\n for (let i = 0; i < faceIndices.length - 1; i++) {\n const faceVertCount = faceIndices[i + 1] - faceIndices[i]\n totalTriangles += Math.max(0, faceVertCount - 2)\n }\n\n const indexes = new Uint32Array(totalTriangles * 3)\n let t = 0\n\n for (let i = 0; i < faceIndices.length - 1; i++) {\n const faceStart = faceIndices[i]\n const faceEnd = faceIndices[i + 1]\n const faceVertCount = faceEnd - faceStart\n\n if (faceVertCount >= 3) {\n // todo better Triangulate the face using fan triangulation\n const firstVert = indices.data[faceStart].i\n for (let k = 1; k < faceVertCount - 1; k++) {\n indexes[t++] = firstVert\n indexes[t++] = indices.data[faceStart + k].i\n indexes[t++] = indices.data[faceStart + k + 1].i\n }\n } else {\n // debugger\n }\n }\n\n // console.log(indexes)\n geometry.setIndex(new ctx.BufferAttribute(indexes, 1))\n } else if (faceSize === 3 || faceSize === 4) {\n // Fall back to uniform face size approach\n const isQuad = faceSize === 4\n const faceCount = indices.length / faceSize\n const indexes = new Uint32Array(faceCount * 3 * (isQuad ? 2 : 1))\n\n if (faceSize !== 3 && faceSize !== 4) return geometry\n for (let j = 0, t = 0; j < indices.length; j += faceSize) {\n const a = indices[j].i\n const b = indices[j + 1].i\n const c = indices[j + 2].i\n indexes[t++] = a\n indexes[t++] = b\n indexes[t++] = c\n\n if (isQuad) {\n const d = indices[j + 3].i\n indexes[t++] = a\n indexes[t++] = c\n indexes[t++] = d\n }\n }\n geometry.setIndex(new ctx.BufferAttribute(indexes, 1))\n }\n } else if (faceIndices) {\n console.error('BlendLoader - no indices data found, but face indices are present', faceIndices)\n }\n\n // console.log(geometry.attributes.position)\n // console.log(geometry.index)\n\n // compute stuff not present\n if (geometry.attributes.position && !geometry.attributes.normal)\n geometry.computeVertexNormals()\n\n // if (meshData.loc) { // maybe this is the bbox center?\n // geometry.translate(meshData.loc[0], meshData.loc[2], -meshData.loc[1])\n // }\n // if (meshData.size) { // maybe this is the bbox size?\n // geometry.scale(meshData.size[0], meshData.size[2], -meshData.size[1])\n // }\n\n return geometry\n}\n// // https://github.com/blender/blender/blob/05dcc0377b62d8e026e1901dfbecbd4b06fda0b5/scripts/addons_core/io_scene_gltf2/blender/exp/primitive_extract.py#L19\n// // https://github.com/blender/blender/blob/05dcc0377b62d8e026e1901dfbecbd4b06fda0b5/scripts/addons_core/io_scene_gltf2/blender/exp/primitive_extract.py#L1575\n// // todo __set_morph_locs_attribute\n// // todo __set_morph_tangent_attribute\n// // todo pdata(points), edata(edge), fdata(face? legacy?)\n// // meshData.eData = domain edge - https://github.com/blender/blender/blob/05dcc0377b62d8e026e1901dfbecbd4b06fda0b5/scripts/addons_core/io_scene_gltf2/blender/exp/primitive_extract.py#L189\n// // todo normals, tangents\n\nexport function createBufferGeometryOld(mesh: any, ctx: any) {\n const\n faces = Array.isArray(mesh.mpoly) ? mesh.mpoly as any[] : [mesh.mpoly],\n loops = mesh.mloop,\n uv = mesh.mloopuv,\n vertices = mesh.mvert\n\n const geometry = new ctx.BufferGeometry()\n\n if (!faces) return geometry\n\n const size = faces.reduce((acc, face) => acc + Math.floor(face.totloop * 3.0 / 2), 0)\n const indices = new Uint32Array(size)\n const uvs = new Float32Array(size * 2)\n const normals = new Float32Array(size * 3)\n const positions = new Float32Array(size * 3)\n\n let currentIndex = 0\n let computeNormals = false\n\n for (const face of faces) {\n const len = face.totloop\n const start = face.loopstart\n let indexi = 1\n\n while (indexi < len) {\n\n let index = 0\n\n for (let l = 0; l < 3; l++) {\n // Per Vertex\n\n index = start\n if (indexi - 1 + l < len)\n index += indexi - 1 + l\n\n const loop = loops[index]\n const vert = vertices[loop.v]\n indices[currentIndex] = currentIndex\n\n positions[currentIndex * 3 + 0] = vert.co[0]\n positions[currentIndex * 3 + 1] = vert.co[2]\n positions[currentIndex * 3 + 2] = -vert.co[1]\n\n if (vert.no) {\n normals[currentIndex * 3 + 0] = vert.no[0]\n normals[currentIndex * 3 + 1] = vert.no[2]\n normals[currentIndex * 3 + 2] = -vert.no[1]\n } else {\n computeNormals = true\n }\n\n if (uv) {\n uvs[currentIndex * 2 + 0] = uv[index].uv[0]\n uvs[currentIndex * 2 + 1] = uv[index].uv[1]\n }\n\n currentIndex++\n }\n\n indexi += 2\n }\n }\n\n geometry.setAttribute('position', new ctx.BufferAttribute(positions, 3))\n geometry.setIndex(new ctx.BufferAttribute(indices, 1))\n geometry.setAttribute('normal', new ctx.BufferAttribute(normals, 3))\n geometry.setAttribute('uv', new ctx.BufferAttribute(uvs, 2))\n\n if (computeNormals) {\n geometry.computeVertexNormals()\n }\n\n return geometry\n}\n","// todo see blender gltf exporter and convert to js. structure is the same\n// https://github.com/KhronosGroup/glTF-Blender-IO/blob/ed5100ab6c40472b7c3254fddfe0dd0d76d60644/addons/io_scene_gltf2/blender/exp/material/materials.py#L60\nexport function createMaterial(mat: any, ctx: any) {\n const material = new ctx.MeshPhysicalMaterial()\n material.color.setRGB(mat.r, mat.g, mat.b)\n material.roughness = mat.roughness !== undefined ? mat.roughness : 0.4\n material.metalness = mat.metallic !== undefined ? mat.metallic : 0.0\n // material.opacity = mat.alpha !== undefined ? mat.alpha : 0.0\n material.opacity = 1\n material.transparent = material.opacity < 1.0\n return material\n}\n","import {Object3D} from 'threepipe'\nimport {createBufferGeometry} from './geometry'\nimport {createMaterial} from './material'\n\nexport function setCreateTransform(object: any, obj: Object3D) {\n // obj.rotateZ(object.rot[2])\n // obj.rotateY(object.rot[1])\n // obj.rotateX(object.rot[0])\n\n obj.name = object.aname\n obj.quaternion.set(object.quat[1], object.quat[3], -object.quat[2], object.quat[0]) // wxyz\n obj.scale.set(object.size[0], object.size[1], object.size[2])\n obj.position.set(object.loc[0], object.loc[2], -object.loc[1])\n obj.updateMatrix()\n}\n\nexport function createMesh(object: any, loaded: WeakMap<any, any>, ctx: any) {\n if (!object.data) {\n return undefined\n }\n\n const geometry = loaded.get(object.data) ?? createBufferGeometry(object.data, ctx)\n loaded.set(object.data, geometry)\n\n const mat = object.data.mat[0]\n\n // const material = mat ? createMaterial(mat) : undefined\n const material = mat ? loaded.get(mat) ?? createMaterial(mat, ctx) : new ctx.MeshPhysicalMaterial()\n if (mat) loaded.set(mat, material)\n\n // console.log(material, mat)\n // material.side = DoubleSide\n const mesh = new ctx.Mesh(geometry, material)\n\n mesh.castShadow = true\n mesh.receiveShadow = true\n\n return mesh\n}\n","import {createCamera} from './camera'\nimport {createLight} from './light'\nimport {createMesh, setCreateTransform} from './mesh'\nimport {Object3D} from 'threepipe'\n\n// https://github.com/blender/blender/blob/99a4c93081cc2310a09a14f20a1493e8974c10d2/source/blender/makesdna/DNA_object_types.h#L445\nconst blenderObjectTypes = {\n empty: 0,\n mesh: 1,\n lamp: 10,\n camera: 11,\n}\n\nexport async function createObjects(file: any, ctx: any) {\n const objects: (Object3D|null)[] = []\n const childMap = new Map<any, Object3D[]>()\n const objMap = new Map<any, Object3D>()\n const blendObjects = file.objects.Object ?? []\n const loaded = new WeakMap()\n // console.log(bakeGetters(file))\n for (const object of blendObjects) {\n if (loaded.has(object)) {\n console.warn('BlendLoader - duplicate object')\n continue\n }\n let obj: Object3D | undefined = undefined\n switch (object.type) {\n case blenderObjectTypes.empty:\n obj = new ctx.Object3D()\n break\n case blenderObjectTypes.mesh:\n obj = createMesh(object, loaded, ctx)\n break\n case blenderObjectTypes.lamp:\n obj = createLight(object, ctx)\n break\n case blenderObjectTypes.camera:\n obj = createCamera(object, ctx)\n break\n default:\n obj = new ctx.Object3D()\n console.warn('Unsupported object type', object.type, object, obj)\n }\n if (obj) {\n setCreateTransform(object, obj)\n const exChildren = childMap.get(object)\n if (exChildren) {\n for (const exChild of exChildren) {\n obj.add(exChild)\n }\n childMap.delete(object)\n }\n objMap.set(object, obj)\n if (object.parent === object) {\n console.error('invalid, parent same as object, adding to root', object)\n objects.push(obj)\n } else if (!object.parent) { // just in case\n objects.push(obj)\n } else {\n const parent = objMap.get(object.parent)\n if (!parent) {\n const chi = childMap.get(object.parent) ?? []\n chi.push(obj)\n childMap.set(object, chi)\n } else {\n parent.add(obj)\n }\n }\n loaded.set(object, obj)\n }\n }\n if (childMap.size) {\n const vals = [...childMap.values()].flat()\n console.warn('unknown objects with parents, adding to root', vals, childMap)\n objects.push(...vals)\n }\n return objects.filter(o => !!o) as Object3D[]\n}\n","import {\n AnyOptions,\n BaseImporterPlugin,\n BufferAttribute,\n BufferGeometry2,\n DirectionalLight2,\n FileLoader,\n ILoader,\n Importer,\n Mesh2,\n Object3D,\n Object3D2,\n OrthographicCamera0,\n PerspectiveCamera0,\n PhysicalMaterial,\n PointLight2,\n Scene,\n UnlitMaterial,\n} from 'threepipe'\nimport {parseBlend} from './js-blend/main.js'\nimport {createObjects} from './loader'\n\n/**\n * Adds support for loading Blend `.blend`, `application/x-blender` files and data uris\n */\nexport class BlendLoadPlugin extends BaseImporterPlugin {\n public static readonly PluginType = 'BlendLoadPlugin'\n constructor() {\n super()\n }\n protected _importer = new Importer(class extends FileLoader implements ILoader {\n async loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<any> {\n this.setResponseType('arraybuffer')\n const res = (await super.loadAsync(url, onProgress)) as ArrayBuffer\n const blend = await parseBlend(res)\n // console.log(bakeGetters(blend))\n const ctx = {\n Object3D: Object3D2,\n Mesh: Mesh2,\n MeshPhysicalMaterial: PhysicalMaterial,\n MeshBasicMaterial: UnlitMaterial,\n PerspectiveCamera: PerspectiveCamera0,\n OrthographicCamera: OrthographicCamera0,\n PointLight: PointLight2,\n DirectionalLight: DirectionalLight2,\n BufferGeometry: BufferGeometry2,\n BufferAttribute: BufferAttribute,\n }\n const objects = await createObjects(blend, ctx)\n const root = new Object3D()\n root.add(...objects)\n // console.log(res, blend, root)\n blend.scene = root\n return blend\n }\n\n transform(res: any, options: AnyOptions): Scene {\n // console.log(res)\n // res.scene.userData.kinematics = res.kinematics\n // res.scene.userData.library = res.library\n if (typeof options.onBlendLoad === 'function') {\n options.onBlendLoad(res)\n }\n return res.scene\n }\n }, ['blend'], ['application/x-blender'], true)\n}\n"],"names":["AB","offset","pointer_size","array_names","i","BLENDER_FILE","parser"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export function parseBlend(arrayBuffer: ArrayBuffer): Promise<any>
@@ -0,0 +1,2 @@
1
+ export declare function bakeGetters(obj: any): string;
2
+ //# sourceMappingURL=bakeGetters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bakeGetters.d.ts","sourceRoot":"","sources":["../../src/loader/bakeGetters.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CACvB,GAAG,EAAE,GAAG,GACT,MAAM,CAiDR"}
@@ -0,0 +1,3 @@
1
+ import { Object3D } from 'threepipe';
2
+ export declare function createCamera(object: any, ctx: any): Object3D | undefined;
3
+ //# sourceMappingURL=camera.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../src/loader/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAElC,wBAAgB,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,QAAQ,GAAG,SAAS,CA2CxE"}
@@ -1,3 +1,3 @@
1
- import { BufferGeometry, Vector3Tuple } from 'threepipe';
2
- export declare function createBufferGeometry(mesh: any, origin: Vector3Tuple): BufferGeometry<import("three").NormalBufferAttributes, import("three").Event, string>;
1
+ export declare function createBufferGeometry(meshData: any, ctx: any): any;
2
+ export declare function createBufferGeometryOld(mesh: any, ctx: any): any;
3
3
  //# sourceMappingURL=geometry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/loader/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,YAAY,EAAC,MAAM,WAAW,CAAA;AAEvE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,yFAiEnE"}
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/loader/geometry.ts"],"names":[],"mappings":"AAaA,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,OAgM3D;AASD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,OA0E1D"}
@@ -1,3 +1,3 @@
1
- import { Object3D } from 'three';
2
- export declare function createObjects(file: any): Promise<Object3D<import("three").Event, string>[]>;
1
+ import { Object3D } from 'threepipe';
2
+ export declare function createObjects(file: any, ctx: any): Promise<Object3D<import('threepipe').Object3DEventMap>[]>;
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loader/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAA;AAO9B,wBAAsB,aAAa,CAAC,IAAI,EAAE,GAAG,sDAgB5C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loader/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAUlC,wBAAsB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,6DAgEtD"}
@@ -1,3 +1,3 @@
1
- import { PointLight } from 'threepipe';
2
- export declare function createLight(lamp: any): PointLight<import("three").Event, string> | null;
1
+ import { Light } from 'threepipe';
2
+ export declare function createLight(lamp: any, ctx: any): Light<import('three').LightShadow<import('threepipe').Camera<import('threepipe').Object3DEventMap>> | undefined, import('threepipe').Object3DEventMap> | undefined;
3
3
  //# sourceMappingURL=light.d.ts.map
@@ -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,oDA+BpC"}
1
+ {"version":3,"file":"light.d.ts","sourceRoot":"","sources":["../../src/loader/light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,WAAW,CAAA;AAU/B,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,sKAmC9C"}
@@ -1,3 +1,2 @@
1
- import { MeshPhysicalMaterial } from 'threepipe';
2
- export declare function createMaterial(mat: any): MeshPhysicalMaterial<import("three").Event, string>;
1
+ export declare function createMaterial(mat: any, ctx: any): any;
3
2
  //# 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,uDAQtC"}
1
+ {"version":3,"file":"material.d.ts","sourceRoot":"","sources":["../../src/loader/material.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,OAShD"}
@@ -1,3 +1,4 @@
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, string>> | null;
1
+ import { Object3D } from 'threepipe';
2
+ export declare function setCreateTransform(object: any, obj: Object3D): void;
3
+ export declare function createMesh(object: any, loaded: WeakMap<any, any>, ctx: any): any;
3
4
  //# 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,mMAqBrC"}
1
+ {"version":3,"file":"mesh.d.ts","sourceRoot":"","sources":["../../src/loader/mesh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAIlC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,QAU5D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,OAsB1E"}
package/package.json CHANGED
@@ -1,9 +1,18 @@
1
1
  {
2
2
  "name": "@threepipe/plugin-blend-importer",
3
3
  "description": "Basic importer for .blend file",
4
- "version": "0.0.2",
5
- "dependencies": {
6
- "threepipe": "file:./../../src/"
4
+ "version": "0.0.5",
5
+ "dependencies": {},
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "import": "./dist/index.mjs",
10
+ "require": "./dist/index.js"
11
+ },
12
+ "./dist/": {
13
+ "import": "./dist/",
14
+ "require": "./dist/"
15
+ }
7
16
  },
8
17
  "type": "module",
9
18
  "main": "dist/index.js",
@@ -16,10 +25,11 @@
16
25
  "author": "repalash <palash@shaders.app>",
17
26
  "license": "Apache-2.0",
18
27
  "keywords": [
19
- "three",
20
28
  "three.js",
21
29
  "threepipe",
22
- "editor",
30
+ "importer",
31
+ "blend",
32
+ "blender",
23
33
  "plugin"
24
34
  ],
25
35
  "bugs": {
@@ -28,12 +38,10 @@
28
38
  "homepage": "https://github.com/repalash/threepipe#readme",
29
39
  "repository": {
30
40
  "type": "git",
31
- "url": "git://github.com/repalash/threepipe.git"
41
+ "url": "git://github.com/repalash/threepipe.git",
42
+ "directory": "plugins/blend-importer"
32
43
  },
33
- "replace": {
34
- "dependencies": {},
35
- "peerDependencies": {
36
- "threepipe": "^0.0.13"
37
- }
44
+ "peerDependencies": {
45
+ "threepipe": "^0.0.54"
38
46
  }
39
47
  }
@@ -1,4 +1,22 @@
1
- import {AnyOptions, BaseImporterPlugin, FileLoader, ILoader, Importer, Object3D, Scene} from 'threepipe'
1
+ import {
2
+ AnyOptions,
3
+ BaseImporterPlugin,
4
+ BufferAttribute,
5
+ BufferGeometry2,
6
+ DirectionalLight2,
7
+ FileLoader,
8
+ ILoader,
9
+ Importer,
10
+ Mesh2,
11
+ Object3D,
12
+ Object3D2,
13
+ OrthographicCamera0,
14
+ PerspectiveCamera0,
15
+ PhysicalMaterial,
16
+ PointLight2,
17
+ Scene,
18
+ UnlitMaterial,
19
+ } from 'threepipe'
2
20
  import {parseBlend} from './js-blend/main.js'
3
21
  import {createObjects} from './loader'
4
22
 
@@ -15,7 +33,20 @@ export class BlendLoadPlugin extends BaseImporterPlugin {
15
33
  this.setResponseType('arraybuffer')
16
34
  const res = (await super.loadAsync(url, onProgress)) as ArrayBuffer
17
35
  const blend = await parseBlend(res)
18
- const objects = await createObjects(blend)
36
+ // console.log(bakeGetters(blend))
37
+ const ctx = {
38
+ Object3D: Object3D2,
39
+ Mesh: Mesh2,
40
+ MeshPhysicalMaterial: PhysicalMaterial,
41
+ MeshBasicMaterial: UnlitMaterial,
42
+ PerspectiveCamera: PerspectiveCamera0,
43
+ OrthographicCamera: OrthographicCamera0,
44
+ PointLight: PointLight2,
45
+ DirectionalLight: DirectionalLight2,
46
+ BufferGeometry: BufferGeometry2,
47
+ BufferAttribute: BufferAttribute,
48
+ }
49
+ const objects = await createObjects(blend, ctx)
19
50
  const root = new Object3D()
20
51
  root.add(...objects)
21
52
  // console.log(res, blend, root)
@@ -23,10 +54,13 @@ export class BlendLoadPlugin extends BaseImporterPlugin {
23
54
  return blend
24
55
  }
25
56
 
26
- transform(res: any, _: AnyOptions): Scene {
57
+ transform(res: any, options: AnyOptions): Scene {
27
58
  // console.log(res)
28
59
  // res.scene.userData.kinematics = res.kinematics
29
60
  // res.scene.userData.library = res.library
61
+ if (typeof options.onBlendLoad === 'function') {
62
+ options.onBlendLoad(res)
63
+ }
30
64
  return res.scene
31
65
  }
32
66
  }, ['blend'], ['application/x-blender'], true)
@@ -13,8 +13,9 @@ import parser from './parser/parser.js';
13
13
  export async function parseBlend (buffer, name = '') {
14
14
  return new Promise((res, rej) => {
15
15
  parser.onParseReady = (file, error) => {
16
- if (error) rej(error)
17
- else res(file)
16
+ // todo throw error if no objects?
17
+ if (error) console.error(error)
18
+ res(file)
18
19
  }
19
20
  parser.loadBlendFromArrayBuffer(buffer, name)
20
21
  })