three-stdlib 2.30.2 → 2.30.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. package/_polyfill/LoaderUtils.cjs +18 -0
  2. package/_polyfill/LoaderUtils.cjs.map +1 -0
  3. package/_polyfill/LoaderUtils.js +18 -0
  4. package/_polyfill/LoaderUtils.js.map +1 -0
  5. package/loaders/3MFLoader.cjs +4 -3
  6. package/loaders/3MFLoader.cjs.map +1 -1
  7. package/loaders/3MFLoader.js +5 -4
  8. package/loaders/3MFLoader.js.map +1 -1
  9. package/loaders/AMFLoader.cjs +2 -1
  10. package/loaders/AMFLoader.cjs.map +1 -1
  11. package/loaders/AMFLoader.js +3 -2
  12. package/loaders/AMFLoader.js.map +1 -1
  13. package/loaders/FBXLoader.cjs +3 -2
  14. package/loaders/FBXLoader.cjs.map +1 -1
  15. package/loaders/FBXLoader.js +3 -2
  16. package/loaders/FBXLoader.js.map +1 -1
  17. package/loaders/GLTFLoader.cjs +5 -4
  18. package/loaders/GLTFLoader.cjs.map +1 -1
  19. package/loaders/GLTFLoader.js +5 -4
  20. package/loaders/GLTFLoader.js.map +1 -1
  21. package/loaders/PCDLoader.cjs +2 -1
  22. package/loaders/PCDLoader.cjs.map +1 -1
  23. package/loaders/PCDLoader.js +3 -2
  24. package/loaders/PCDLoader.js.map +1 -1
  25. package/loaders/PLYLoader.cjs +2 -1
  26. package/loaders/PLYLoader.cjs.map +1 -1
  27. package/loaders/PLYLoader.js +3 -2
  28. package/loaders/PLYLoader.js.map +1 -1
  29. package/loaders/STLLoader.cjs +2 -1
  30. package/loaders/STLLoader.cjs.map +1 -1
  31. package/loaders/STLLoader.js +3 -2
  32. package/loaders/STLLoader.js.map +1 -1
  33. package/loaders/VTKLoader.cjs +4 -3
  34. package/loaders/VTKLoader.cjs.map +1 -1
  35. package/loaders/VTKLoader.js +5 -4
  36. package/loaders/VTKLoader.js.map +1 -1
  37. package/loaders/XLoader.cjs +3 -2
  38. package/loaders/XLoader.cjs.map +1 -1
  39. package/loaders/XLoader.js +3 -2
  40. package/loaders/XLoader.js.map +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function decodeText(array) {
4
+ if (typeof TextDecoder !== "undefined") {
5
+ return new TextDecoder().decode(array);
6
+ }
7
+ let s = "";
8
+ for (let i = 0, il = array.length; i < il; i++) {
9
+ s += String.fromCharCode(array[i]);
10
+ }
11
+ try {
12
+ return decodeURIComponent(escape(s));
13
+ } catch (e) {
14
+ return s;
15
+ }
16
+ }
17
+ exports.decodeText = decodeText;
18
+ //# sourceMappingURL=LoaderUtils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoaderUtils.cjs","sources":["../../src/_polyfill/LoaderUtils.js"],"sourcesContent":["export function decodeText(array) {\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder().decode(array)\n }\n\n // Avoid the String.fromCharCode.apply(null, array) shortcut, which\n // throws a \"maximum call stack size exceeded\" error for large arrays.\n\n let s = ''\n\n for (let i = 0, il = array.length; i < il; i++) {\n // Implicitly assumes little-endian.\n s += String.fromCharCode(array[i])\n }\n\n try {\n // merges multi-byte utf-8 characters.\n\n return decodeURIComponent(escape(s))\n } catch (e) {\n // see https://github.com/mrdoob/three.js/issues/16358\n\n return s\n }\n}\n"],"names":[],"mappings":";;AAAO,SAAS,WAAW,OAAO;AAChC,MAAI,OAAO,gBAAgB,aAAa;AACtC,WAAO,IAAI,YAAW,EAAG,OAAO,KAAK;AAAA,EACtC;AAKD,MAAI,IAAI;AAER,WAAS,IAAI,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAK;AAE9C,SAAK,OAAO,aAAa,MAAM,CAAC,CAAC;AAAA,EAClC;AAED,MAAI;AAGF,WAAO,mBAAmB,OAAO,CAAC,CAAC;AAAA,EACpC,SAAQ,GAAP;AAGA,WAAO;AAAA,EACR;AACH;;"}
@@ -0,0 +1,18 @@
1
+ function decodeText(array) {
2
+ if (typeof TextDecoder !== "undefined") {
3
+ return new TextDecoder().decode(array);
4
+ }
5
+ let s = "";
6
+ for (let i = 0, il = array.length; i < il; i++) {
7
+ s += String.fromCharCode(array[i]);
8
+ }
9
+ try {
10
+ return decodeURIComponent(escape(s));
11
+ } catch (e) {
12
+ return s;
13
+ }
14
+ }
15
+ export {
16
+ decodeText
17
+ };
18
+ //# sourceMappingURL=LoaderUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoaderUtils.js","sources":["../../src/_polyfill/LoaderUtils.js"],"sourcesContent":["export function decodeText(array) {\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder().decode(array)\n }\n\n // Avoid the String.fromCharCode.apply(null, array) shortcut, which\n // throws a \"maximum call stack size exceeded\" error for large arrays.\n\n let s = ''\n\n for (let i = 0, il = array.length; i < il; i++) {\n // Implicitly assumes little-endian.\n s += String.fromCharCode(array[i])\n }\n\n try {\n // merges multi-byte utf-8 characters.\n\n return decodeURIComponent(escape(s))\n } catch (e) {\n // see https://github.com/mrdoob/three.js/issues/16358\n\n return s\n }\n}\n"],"names":[],"mappings":"AAAO,SAAS,WAAW,OAAO;AAChC,MAAI,OAAO,gBAAgB,aAAa;AACtC,WAAO,IAAI,YAAW,EAAG,OAAO,KAAK;AAAA,EACtC;AAKD,MAAI,IAAI;AAER,WAAS,IAAI,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAK;AAE9C,SAAK,OAAO,aAAa,MAAM,CAAC,CAAC;AAAA,EAClC;AAED,MAAI;AAGF,WAAO,mBAAmB,OAAO,CAAC,CAAC;AAAA,EACpC,SAAQ,GAAP;AAGA,WAAO;AAAA,EACR;AACH;"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const THREE = require("three");
4
4
  const fflate = require("fflate");
5
+ const LoaderUtils = require("../_polyfill/LoaderUtils.cjs");
5
6
  class ThreeMFLoader extends THREE.Loader {
6
7
  constructor(manager) {
7
8
  super(manager);
@@ -70,17 +71,17 @@ class ThreeMFLoader extends THREE.Loader {
70
71
  ;
71
72
  }
72
73
  const relsView = zip[relsName];
73
- const relsFileText = THREE.LoaderUtils.decodeText(relsView);
74
+ const relsFileText = LoaderUtils.decodeText(relsView);
74
75
  const rels = parseRelsXml(relsFileText);
75
76
  if (modelRelsName) {
76
77
  const relsView2 = zip[modelRelsName];
77
- const relsFileText2 = THREE.LoaderUtils.decodeText(relsView2);
78
+ const relsFileText2 = LoaderUtils.decodeText(relsView2);
78
79
  modelRels = parseRelsXml(relsFileText2);
79
80
  }
80
81
  for (let i = 0; i < modelPartNames.length; i++) {
81
82
  const modelPart = modelPartNames[i];
82
83
  const view = zip[modelPart];
83
- const fileText = THREE.LoaderUtils.decodeText(view);
84
+ const fileText = LoaderUtils.decodeText(view);
84
85
  const xmlData = new DOMParser().parseFromString(fileText, "application/xml");
85
86
  if (xmlData.documentElement.nodeName.toLowerCase() !== "model") {
86
87
  console.error("THREE.3MFLoader: Error loading 3MF - no 3MF document found: ", modelPart);
@@ -1 +1 @@
1
- {"version":3,"file":"3MFLoader.cjs","sources":["../../src/loaders/3MFLoader.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n ClampToEdgeWrapping,\n Color,\n FileLoader,\n Float32BufferAttribute,\n Group,\n LinearFilter,\n LinearMipmapLinearFilter,\n Loader,\n LoaderUtils,\n Matrix4,\n Mesh,\n MeshPhongMaterial,\n MeshStandardMaterial,\n MirroredRepeatWrapping,\n NearestFilter,\n RepeatWrapping,\n TextureLoader,\n} from 'three'\nimport { unzipSync } from 'fflate'\n\n/**\n *\n * 3D Manufacturing Format (3MF) specification: https://3mf.io/specification/\n *\n * The following features from the core specification are supported:\n *\n * - 3D Models\n * - Object Resources (Meshes and Components)\n * - Material Resources (Base Materials)\n *\n * 3MF Materials and Properties Extension are only partially supported.\n *\n * - Texture 2D\n * - Texture 2D Groups\n * - Color Groups (Vertex Colors)\n * - Metallic Display Properties (PBR)\n */\n\nclass ThreeMFLoader extends Loader {\n constructor(manager) {\n super(manager)\n this.availableExtensions = []\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n const loader = new FileLoader(scope.manager)\n loader.setPath(scope.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(scope.requestHeader)\n loader.setWithCredentials(scope.withCredentials)\n loader.load(\n url,\n function (buffer) {\n try {\n onLoad(scope.parse(buffer))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n parse(data) {\n const scope = this\n const textureLoader = new TextureLoader(this.manager)\n\n function loadDocument(data) {\n let zip = null\n let file = null\n\n let relsName\n let modelRelsName\n const modelPartNames = []\n const printTicketPartNames = []\n const texturesPartNames = []\n const otherPartNames = []\n\n let modelRels\n const modelParts = {}\n const printTicketParts = {}\n const texturesParts = {}\n const otherParts = {}\n\n try {\n zip = unzipSync(new Uint8Array(data))\n } catch (e) {\n if (e instanceof ReferenceError) {\n console.error('THREE.3MFLoader: fflate missing and file is compressed.')\n return null\n }\n }\n\n for (file in zip) {\n if (file.match(/\\_rels\\/.rels$/)) {\n relsName = file\n } else if (file.match(/3D\\/_rels\\/.*\\.model\\.rels$/)) {\n modelRelsName = file\n } else if (file.match(/^3D\\/.*\\.model$/)) {\n modelPartNames.push(file)\n } else if (file.match(/^3D\\/Metadata\\/.*\\.xml$/)) {\n printTicketPartNames.push(file)\n } else if (file.match(/^3D\\/Textures?\\/.*/)) {\n texturesPartNames.push(file)\n } else if (file.match(/^3D\\/Other\\/.*/)) {\n otherPartNames.push(file)\n }\n }\n\n //\n\n const relsView = zip[relsName]\n const relsFileText = LoaderUtils.decodeText(relsView)\n const rels = parseRelsXml(relsFileText)\n\n //\n\n if (modelRelsName) {\n const relsView = zip[modelRelsName]\n const relsFileText = LoaderUtils.decodeText(relsView)\n modelRels = parseRelsXml(relsFileText)\n }\n\n //\n\n for (let i = 0; i < modelPartNames.length; i++) {\n const modelPart = modelPartNames[i]\n const view = zip[modelPart]\n\n const fileText = LoaderUtils.decodeText(view)\n const xmlData = new DOMParser().parseFromString(fileText, 'application/xml')\n\n if (xmlData.documentElement.nodeName.toLowerCase() !== 'model') {\n console.error('THREE.3MFLoader: Error loading 3MF - no 3MF document found: ', modelPart)\n }\n\n const modelNode = xmlData.querySelector('model')\n const extensions = {}\n\n for (let i = 0; i < modelNode.attributes.length; i++) {\n const attr = modelNode.attributes[i]\n if (attr.name.match(/^xmlns:(.+)$/)) {\n extensions[attr.value] = RegExp.$1\n }\n }\n\n const modelData = parseModelNode(modelNode)\n modelData['xml'] = modelNode\n\n if (0 < Object.keys(extensions).length) {\n modelData['extensions'] = extensions\n }\n\n modelParts[modelPart] = modelData\n }\n\n //\n\n for (let i = 0; i < texturesPartNames.length; i++) {\n const texturesPartName = texturesPartNames[i]\n texturesParts[texturesPartName] = zip[texturesPartName].buffer\n }\n\n return {\n rels: rels,\n modelRels: modelRels,\n model: modelParts,\n printTicket: printTicketParts,\n texture: texturesParts,\n other: otherParts,\n }\n }\n\n function parseRelsXml(relsFileText) {\n const relationships = []\n\n const relsXmlData = new DOMParser().parseFromString(relsFileText, 'application/xml')\n\n const relsNodes = relsXmlData.querySelectorAll('Relationship')\n\n for (let i = 0; i < relsNodes.length; i++) {\n const relsNode = relsNodes[i]\n\n const relationship = {\n target: relsNode.getAttribute('Target'), //required\n id: relsNode.getAttribute('Id'), //required\n type: relsNode.getAttribute('Type'), //required\n }\n\n relationships.push(relationship)\n }\n\n return relationships\n }\n\n function parseMetadataNodes(metadataNodes) {\n const metadataData = {}\n\n for (let i = 0; i < metadataNodes.length; i++) {\n const metadataNode = metadataNodes[i]\n const name = metadataNode.getAttribute('name')\n const validNames = [\n 'Title',\n 'Designer',\n 'Description',\n 'Copyright',\n 'LicenseTerms',\n 'Rating',\n 'CreationDate',\n 'ModificationDate',\n ]\n\n if (0 <= validNames.indexOf(name)) {\n metadataData[name] = metadataNode.textContent\n }\n }\n\n return metadataData\n }\n\n function parseBasematerialsNode(basematerialsNode) {\n const basematerialsData = {\n id: basematerialsNode.getAttribute('id'), // required\n basematerials: [],\n }\n\n const basematerialNodes = basematerialsNode.querySelectorAll('base')\n\n for (let i = 0; i < basematerialNodes.length; i++) {\n const basematerialNode = basematerialNodes[i]\n const basematerialData = parseBasematerialNode(basematerialNode)\n basematerialData.index = i // the order and count of the material nodes form an implicit 0-based index\n basematerialsData.basematerials.push(basematerialData)\n }\n\n return basematerialsData\n }\n\n function parseTexture2DNode(texture2DNode) {\n const texture2dData = {\n id: texture2DNode.getAttribute('id'), // required\n path: texture2DNode.getAttribute('path'), // required\n contenttype: texture2DNode.getAttribute('contenttype'), // required\n tilestyleu: texture2DNode.getAttribute('tilestyleu'),\n tilestylev: texture2DNode.getAttribute('tilestylev'),\n filter: texture2DNode.getAttribute('filter'),\n }\n\n return texture2dData\n }\n\n function parseTextures2DGroupNode(texture2DGroupNode) {\n const texture2DGroupData = {\n id: texture2DGroupNode.getAttribute('id'), // required\n texid: texture2DGroupNode.getAttribute('texid'), // required\n displaypropertiesid: texture2DGroupNode.getAttribute('displaypropertiesid'),\n }\n\n const tex2coordNodes = texture2DGroupNode.querySelectorAll('tex2coord')\n\n const uvs = []\n\n for (let i = 0; i < tex2coordNodes.length; i++) {\n const tex2coordNode = tex2coordNodes[i]\n const u = tex2coordNode.getAttribute('u')\n const v = tex2coordNode.getAttribute('v')\n\n uvs.push(parseFloat(u), parseFloat(v))\n }\n\n texture2DGroupData['uvs'] = new Float32Array(uvs)\n\n return texture2DGroupData\n }\n\n function parseColorGroupNode(colorGroupNode) {\n const colorGroupData = {\n id: colorGroupNode.getAttribute('id'), // required\n displaypropertiesid: colorGroupNode.getAttribute('displaypropertiesid'),\n }\n\n const colorNodes = colorGroupNode.querySelectorAll('color')\n\n const colors = []\n const colorObject = new Color()\n\n for (let i = 0; i < colorNodes.length; i++) {\n const colorNode = colorNodes[i]\n const color = colorNode.getAttribute('color')\n\n colorObject.setStyle(color.substring(0, 7))\n colorObject.convertSRGBToLinear() // color is in sRGB\n\n colors.push(colorObject.r, colorObject.g, colorObject.b)\n }\n\n colorGroupData['colors'] = new Float32Array(colors)\n\n return colorGroupData\n }\n\n function parseMetallicDisplaypropertiesNode(metallicDisplaypropetiesNode) {\n const metallicDisplaypropertiesData = {\n id: metallicDisplaypropetiesNode.getAttribute('id'), // required\n }\n\n const metallicNodes = metallicDisplaypropetiesNode.querySelectorAll('pbmetallic')\n\n const metallicData = []\n\n for (let i = 0; i < metallicNodes.length; i++) {\n const metallicNode = metallicNodes[i]\n\n metallicData.push({\n name: metallicNode.getAttribute('name'), // required\n metallicness: parseFloat(metallicNode.getAttribute('metallicness')), // required\n roughness: parseFloat(metallicNode.getAttribute('roughness')), // required\n })\n }\n\n metallicDisplaypropertiesData.data = metallicData\n\n return metallicDisplaypropertiesData\n }\n\n function parseBasematerialNode(basematerialNode) {\n const basematerialData = {}\n\n basematerialData['name'] = basematerialNode.getAttribute('name') // required\n basematerialData['displaycolor'] = basematerialNode.getAttribute('displaycolor') // required\n basematerialData['displaypropertiesid'] = basematerialNode.getAttribute('displaypropertiesid')\n\n return basematerialData\n }\n\n function parseMeshNode(meshNode) {\n const meshData = {}\n\n const vertices = []\n const vertexNodes = meshNode.querySelectorAll('vertices vertex')\n\n for (let i = 0; i < vertexNodes.length; i++) {\n const vertexNode = vertexNodes[i]\n const x = vertexNode.getAttribute('x')\n const y = vertexNode.getAttribute('y')\n const z = vertexNode.getAttribute('z')\n\n vertices.push(parseFloat(x), parseFloat(y), parseFloat(z))\n }\n\n meshData['vertices'] = new Float32Array(vertices)\n\n const triangleProperties = []\n const triangles = []\n const triangleNodes = meshNode.querySelectorAll('triangles triangle')\n\n for (let i = 0; i < triangleNodes.length; i++) {\n const triangleNode = triangleNodes[i]\n const v1 = triangleNode.getAttribute('v1')\n const v2 = triangleNode.getAttribute('v2')\n const v3 = triangleNode.getAttribute('v3')\n const p1 = triangleNode.getAttribute('p1')\n const p2 = triangleNode.getAttribute('p2')\n const p3 = triangleNode.getAttribute('p3')\n const pid = triangleNode.getAttribute('pid')\n\n const triangleProperty = {}\n\n triangleProperty['v1'] = parseInt(v1, 10)\n triangleProperty['v2'] = parseInt(v2, 10)\n triangleProperty['v3'] = parseInt(v3, 10)\n\n triangles.push(triangleProperty['v1'], triangleProperty['v2'], triangleProperty['v3'])\n\n // optional\n\n if (p1) {\n triangleProperty['p1'] = parseInt(p1, 10)\n }\n\n if (p2) {\n triangleProperty['p2'] = parseInt(p2, 10)\n }\n\n if (p3) {\n triangleProperty['p3'] = parseInt(p3, 10)\n }\n\n if (pid) {\n triangleProperty['pid'] = pid\n }\n\n if (0 < Object.keys(triangleProperty).length) {\n triangleProperties.push(triangleProperty)\n }\n }\n\n meshData['triangleProperties'] = triangleProperties\n meshData['triangles'] = new Uint32Array(triangles)\n\n return meshData\n }\n\n function parseComponentsNode(componentsNode) {\n const components = []\n\n const componentNodes = componentsNode.querySelectorAll('component')\n\n for (let i = 0; i < componentNodes.length; i++) {\n const componentNode = componentNodes[i]\n const componentData = parseComponentNode(componentNode)\n components.push(componentData)\n }\n\n return components\n }\n\n function parseComponentNode(componentNode) {\n const componentData = {}\n\n componentData['objectId'] = componentNode.getAttribute('objectid') // required\n\n const transform = componentNode.getAttribute('transform')\n\n if (transform) {\n componentData['transform'] = parseTransform(transform)\n }\n\n return componentData\n }\n\n function parseTransform(transform) {\n const t = []\n transform.split(' ').forEach(function (s) {\n t.push(parseFloat(s))\n })\n\n const matrix = new Matrix4()\n matrix.set(t[0], t[3], t[6], t[9], t[1], t[4], t[7], t[10], t[2], t[5], t[8], t[11], 0.0, 0.0, 0.0, 1.0)\n\n return matrix\n }\n\n function parseObjectNode(objectNode) {\n const objectData = {\n type: objectNode.getAttribute('type'),\n }\n\n const id = objectNode.getAttribute('id')\n\n if (id) {\n objectData['id'] = id\n }\n\n const pid = objectNode.getAttribute('pid')\n\n if (pid) {\n objectData['pid'] = pid\n }\n\n const pindex = objectNode.getAttribute('pindex')\n\n if (pindex) {\n objectData['pindex'] = pindex\n }\n\n const thumbnail = objectNode.getAttribute('thumbnail')\n\n if (thumbnail) {\n objectData['thumbnail'] = thumbnail\n }\n\n const partnumber = objectNode.getAttribute('partnumber')\n\n if (partnumber) {\n objectData['partnumber'] = partnumber\n }\n\n const name = objectNode.getAttribute('name')\n\n if (name) {\n objectData['name'] = name\n }\n\n const meshNode = objectNode.querySelector('mesh')\n\n if (meshNode) {\n objectData['mesh'] = parseMeshNode(meshNode)\n }\n\n const componentsNode = objectNode.querySelector('components')\n\n if (componentsNode) {\n objectData['components'] = parseComponentsNode(componentsNode)\n }\n\n return objectData\n }\n\n function parseResourcesNode(resourcesNode) {\n const resourcesData = {}\n\n resourcesData['basematerials'] = {}\n const basematerialsNodes = resourcesNode.querySelectorAll('basematerials')\n\n for (let i = 0; i < basematerialsNodes.length; i++) {\n const basematerialsNode = basematerialsNodes[i]\n const basematerialsData = parseBasematerialsNode(basematerialsNode)\n resourcesData['basematerials'][basematerialsData['id']] = basematerialsData\n }\n\n //\n\n resourcesData['texture2d'] = {}\n const textures2DNodes = resourcesNode.querySelectorAll('texture2d')\n\n for (let i = 0; i < textures2DNodes.length; i++) {\n const textures2DNode = textures2DNodes[i]\n const texture2DData = parseTexture2DNode(textures2DNode)\n resourcesData['texture2d'][texture2DData['id']] = texture2DData\n }\n\n //\n\n resourcesData['colorgroup'] = {}\n const colorGroupNodes = resourcesNode.querySelectorAll('colorgroup')\n\n for (let i = 0; i < colorGroupNodes.length; i++) {\n const colorGroupNode = colorGroupNodes[i]\n const colorGroupData = parseColorGroupNode(colorGroupNode)\n resourcesData['colorgroup'][colorGroupData['id']] = colorGroupData\n }\n\n //\n\n resourcesData['pbmetallicdisplayproperties'] = {}\n const pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll('pbmetallicdisplayproperties')\n\n for (let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i++) {\n const pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[i]\n const pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode(pbmetallicdisplaypropertiesNode)\n resourcesData['pbmetallicdisplayproperties'][\n pbmetallicdisplaypropertiesData['id']\n ] = pbmetallicdisplaypropertiesData\n }\n\n //\n\n resourcesData['texture2dgroup'] = {}\n const textures2DGroupNodes = resourcesNode.querySelectorAll('texture2dgroup')\n\n for (let i = 0; i < textures2DGroupNodes.length; i++) {\n const textures2DGroupNode = textures2DGroupNodes[i]\n const textures2DGroupData = parseTextures2DGroupNode(textures2DGroupNode)\n resourcesData['texture2dgroup'][textures2DGroupData['id']] = textures2DGroupData\n }\n\n //\n\n resourcesData['object'] = {}\n const objectNodes = resourcesNode.querySelectorAll('object')\n\n for (let i = 0; i < objectNodes.length; i++) {\n const objectNode = objectNodes[i]\n const objectData = parseObjectNode(objectNode)\n resourcesData['object'][objectData['id']] = objectData\n }\n\n return resourcesData\n }\n\n function parseBuildNode(buildNode) {\n const buildData = []\n const itemNodes = buildNode.querySelectorAll('item')\n\n for (let i = 0; i < itemNodes.length; i++) {\n const itemNode = itemNodes[i]\n const buildItem = {\n objectId: itemNode.getAttribute('objectid'),\n }\n const transform = itemNode.getAttribute('transform')\n\n if (transform) {\n buildItem['transform'] = parseTransform(transform)\n }\n\n buildData.push(buildItem)\n }\n\n return buildData\n }\n\n function parseModelNode(modelNode) {\n const modelData = { unit: modelNode.getAttribute('unit') || 'millimeter' }\n const metadataNodes = modelNode.querySelectorAll('metadata')\n\n if (metadataNodes) {\n modelData['metadata'] = parseMetadataNodes(metadataNodes)\n }\n\n const resourcesNode = modelNode.querySelector('resources')\n\n if (resourcesNode) {\n modelData['resources'] = parseResourcesNode(resourcesNode)\n }\n\n const buildNode = modelNode.querySelector('build')\n\n if (buildNode) {\n modelData['build'] = parseBuildNode(buildNode)\n }\n\n return modelData\n }\n\n function buildTexture(texture2dgroup, objects, modelData, textureData) {\n const texid = texture2dgroup.texid\n const texture2ds = modelData.resources.texture2d\n const texture2d = texture2ds[texid]\n\n if (texture2d) {\n const data = textureData[texture2d.path]\n const type = texture2d.contenttype\n\n const blob = new Blob([data], { type: type })\n const sourceURI = URL.createObjectURL(blob)\n\n const texture = textureLoader.load(sourceURI, function () {\n URL.revokeObjectURL(sourceURI)\n })\n\n if ('colorSpace' in texture) texture.colorSpace = 'srgb'\n else texture.encoding = 3001 // sRGBEncoding\n\n // texture parameters\n\n switch (texture2d.tilestyleu) {\n case 'wrap':\n texture.wrapS = RepeatWrapping\n break\n\n case 'mirror':\n texture.wrapS = MirroredRepeatWrapping\n break\n\n case 'none':\n case 'clamp':\n texture.wrapS = ClampToEdgeWrapping\n break\n\n default:\n texture.wrapS = RepeatWrapping\n }\n\n switch (texture2d.tilestylev) {\n case 'wrap':\n texture.wrapT = RepeatWrapping\n break\n\n case 'mirror':\n texture.wrapT = MirroredRepeatWrapping\n break\n\n case 'none':\n case 'clamp':\n texture.wrapT = ClampToEdgeWrapping\n break\n\n default:\n texture.wrapT = RepeatWrapping\n }\n\n switch (texture2d.filter) {\n case 'auto':\n texture.magFilter = LinearFilter\n texture.minFilter = LinearMipmapLinearFilter\n break\n\n case 'linear':\n texture.magFilter = LinearFilter\n texture.minFilter = LinearFilter\n break\n\n case 'nearest':\n texture.magFilter = NearestFilter\n texture.minFilter = NearestFilter\n break\n\n default:\n texture.magFilter = LinearFilter\n texture.minFilter = LinearMipmapLinearFilter\n }\n\n return texture\n } else {\n return null\n }\n }\n\n function buildBasematerialsMeshes(\n basematerials,\n triangleProperties,\n meshData,\n objects,\n modelData,\n textureData,\n objectData,\n ) {\n const objectPindex = objectData.pindex\n\n const materialMap = {}\n\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i]\n const pindex = triangleProperty.p1 !== undefined ? triangleProperty.p1 : objectPindex\n\n if (materialMap[pindex] === undefined) materialMap[pindex] = []\n\n materialMap[pindex].push(triangleProperty)\n }\n\n //\n\n const keys = Object.keys(materialMap)\n const meshes = []\n\n for (let i = 0, l = keys.length; i < l; i++) {\n const materialIndex = keys[i]\n const trianglePropertiesProps = materialMap[materialIndex]\n const basematerialData = basematerials.basematerials[materialIndex]\n const material = getBuild(basematerialData, objects, modelData, textureData, objectData, buildBasematerial)\n\n //\n\n const geometry = new BufferGeometry()\n\n const positionData = []\n\n const vertices = meshData.vertices\n\n for (let j = 0, jl = trianglePropertiesProps.length; j < jl; j++) {\n const triangleProperty = trianglePropertiesProps[j]\n\n positionData.push(vertices[triangleProperty.v1 * 3 + 0])\n positionData.push(vertices[triangleProperty.v1 * 3 + 1])\n positionData.push(vertices[triangleProperty.v1 * 3 + 2])\n\n positionData.push(vertices[triangleProperty.v2 * 3 + 0])\n positionData.push(vertices[triangleProperty.v2 * 3 + 1])\n positionData.push(vertices[triangleProperty.v2 * 3 + 2])\n\n positionData.push(vertices[triangleProperty.v3 * 3 + 0])\n positionData.push(vertices[triangleProperty.v3 * 3 + 1])\n positionData.push(vertices[triangleProperty.v3 * 3 + 2])\n }\n\n geometry.setAttribute('position', new Float32BufferAttribute(positionData, 3))\n\n //\n\n const mesh = new Mesh(geometry, material)\n meshes.push(mesh)\n }\n\n return meshes\n }\n\n function buildTexturedMesh(\n texture2dgroup,\n triangleProperties,\n meshData,\n objects,\n modelData,\n textureData,\n objectData,\n ) {\n // geometry\n\n const geometry = new BufferGeometry()\n\n const positionData = []\n const uvData = []\n\n const vertices = meshData.vertices\n const uvs = texture2dgroup.uvs\n\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i]\n\n positionData.push(vertices[triangleProperty.v1 * 3 + 0])\n positionData.push(vertices[triangleProperty.v1 * 3 + 1])\n positionData.push(vertices[triangleProperty.v1 * 3 + 2])\n\n positionData.push(vertices[triangleProperty.v2 * 3 + 0])\n positionData.push(vertices[triangleProperty.v2 * 3 + 1])\n positionData.push(vertices[triangleProperty.v2 * 3 + 2])\n\n positionData.push(vertices[triangleProperty.v3 * 3 + 0])\n positionData.push(vertices[triangleProperty.v3 * 3 + 1])\n positionData.push(vertices[triangleProperty.v3 * 3 + 2])\n\n //\n\n uvData.push(uvs[triangleProperty.p1 * 2 + 0])\n uvData.push(uvs[triangleProperty.p1 * 2 + 1])\n\n uvData.push(uvs[triangleProperty.p2 * 2 + 0])\n uvData.push(uvs[triangleProperty.p2 * 2 + 1])\n\n uvData.push(uvs[triangleProperty.p3 * 2 + 0])\n uvData.push(uvs[triangleProperty.p3 * 2 + 1])\n }\n\n geometry.setAttribute('position', new Float32BufferAttribute(positionData, 3))\n geometry.setAttribute('uv', new Float32BufferAttribute(uvData, 2))\n\n // material\n\n const texture = getBuild(texture2dgroup, objects, modelData, textureData, objectData, buildTexture)\n\n const material = new MeshPhongMaterial({ map: texture, flatShading: true })\n\n // mesh\n\n const mesh = new Mesh(geometry, material)\n\n return mesh\n }\n\n function buildVertexColorMesh(colorgroup, triangleProperties, meshData, objects, modelData, objectData) {\n // geometry\n\n const geometry = new BufferGeometry()\n\n const positionData = []\n const colorData = []\n\n const vertices = meshData.vertices\n const colors = colorgroup.colors\n\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i]\n\n const v1 = triangleProperty.v1\n const v2 = triangleProperty.v2\n const v3 = triangleProperty.v3\n\n positionData.push(vertices[v1 * 3 + 0])\n positionData.push(vertices[v1 * 3 + 1])\n positionData.push(vertices[v1 * 3 + 2])\n\n positionData.push(vertices[v2 * 3 + 0])\n positionData.push(vertices[v2 * 3 + 1])\n positionData.push(vertices[v2 * 3 + 2])\n\n positionData.push(vertices[v3 * 3 + 0])\n positionData.push(vertices[v3 * 3 + 1])\n positionData.push(vertices[v3 * 3 + 2])\n\n //\n\n const p1 = triangleProperty.p1 !== undefined ? triangleProperty.p1 : objectData.pindex\n const p2 = triangleProperty.p2 !== undefined ? triangleProperty.p2 : p1\n const p3 = triangleProperty.p3 !== undefined ? triangleProperty.p3 : p1\n\n colorData.push(colors[p1 * 3 + 0])\n colorData.push(colors[p1 * 3 + 1])\n colorData.push(colors[p1 * 3 + 2])\n\n colorData.push(colors[p2 * 3 + 0])\n colorData.push(colors[p2 * 3 + 1])\n colorData.push(colors[p2 * 3 + 2])\n\n colorData.push(colors[p3 * 3 + 0])\n colorData.push(colors[p3 * 3 + 1])\n colorData.push(colors[p3 * 3 + 2])\n }\n\n geometry.setAttribute('position', new Float32BufferAttribute(positionData, 3))\n geometry.setAttribute('color', new Float32BufferAttribute(colorData, 3))\n\n // material\n\n const material = new MeshPhongMaterial({ vertexColors: true, flatShading: true })\n\n // mesh\n\n const mesh = new Mesh(geometry, material)\n\n return mesh\n }\n\n function buildDefaultMesh(meshData) {\n const geometry = new BufferGeometry()\n geometry.setIndex(new BufferAttribute(meshData['triangles'], 1))\n geometry.setAttribute('position', new BufferAttribute(meshData['vertices'], 3))\n\n const material = new MeshPhongMaterial({ color: 0xaaaaff, flatShading: true })\n\n const mesh = new Mesh(geometry, material)\n\n return mesh\n }\n\n function buildMeshes(resourceMap, meshData, objects, modelData, textureData, objectData) {\n const keys = Object.keys(resourceMap)\n const meshes = []\n\n for (let i = 0, il = keys.length; i < il; i++) {\n const resourceId = keys[i]\n const triangleProperties = resourceMap[resourceId]\n const resourceType = getResourceType(resourceId, modelData)\n\n switch (resourceType) {\n case 'material':\n const basematerials = modelData.resources.basematerials[resourceId]\n const newMeshes = buildBasematerialsMeshes(\n basematerials,\n triangleProperties,\n meshData,\n objects,\n modelData,\n textureData,\n objectData,\n )\n\n for (let j = 0, jl = newMeshes.length; j < jl; j++) {\n meshes.push(newMeshes[j])\n }\n\n break\n\n case 'texture':\n const texture2dgroup = modelData.resources.texture2dgroup[resourceId]\n meshes.push(\n buildTexturedMesh(\n texture2dgroup,\n triangleProperties,\n meshData,\n objects,\n modelData,\n textureData,\n objectData,\n ),\n )\n break\n\n case 'vertexColors':\n const colorgroup = modelData.resources.colorgroup[resourceId]\n meshes.push(buildVertexColorMesh(colorgroup, triangleProperties, meshData, objects, modelData, objectData))\n break\n\n case 'default':\n meshes.push(buildDefaultMesh(meshData))\n break\n\n default:\n console.error('THREE.3MFLoader: Unsupported resource type.')\n }\n }\n\n return meshes\n }\n\n function getResourceType(pid, modelData) {\n if (modelData.resources.texture2dgroup[pid] !== undefined) {\n return 'texture'\n } else if (modelData.resources.basematerials[pid] !== undefined) {\n return 'material'\n } else if (modelData.resources.colorgroup[pid] !== undefined) {\n return 'vertexColors'\n } else if (pid === 'default') {\n return 'default'\n } else {\n return undefined\n }\n }\n\n function analyzeObject(modelData, meshData, objectData) {\n const resourceMap = {}\n\n const triangleProperties = meshData['triangleProperties']\n\n const objectPid = objectData.pid\n\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i]\n let pid = triangleProperty.pid !== undefined ? triangleProperty.pid : objectPid\n\n if (pid === undefined) pid = 'default'\n\n if (resourceMap[pid] === undefined) resourceMap[pid] = []\n\n resourceMap[pid].push(triangleProperty)\n }\n\n return resourceMap\n }\n\n function buildGroup(meshData, objects, modelData, textureData, objectData) {\n const group = new Group()\n\n const resourceMap = analyzeObject(modelData, meshData, objectData)\n const meshes = buildMeshes(resourceMap, meshData, objects, modelData, textureData, objectData)\n\n for (let i = 0, l = meshes.length; i < l; i++) {\n group.add(meshes[i])\n }\n\n return group\n }\n\n function applyExtensions(extensions, meshData, modelXml) {\n if (!extensions) {\n return\n }\n\n const availableExtensions = []\n const keys = Object.keys(extensions)\n\n for (let i = 0; i < keys.length; i++) {\n const ns = keys[i]\n\n for (let j = 0; j < scope.availableExtensions.length; j++) {\n const extension = scope.availableExtensions[j]\n\n if (extension.ns === ns) {\n availableExtensions.push(extension)\n }\n }\n }\n\n for (let i = 0; i < availableExtensions.length; i++) {\n const extension = availableExtensions[i]\n extension.apply(modelXml, extensions[extension['ns']], meshData)\n }\n }\n\n function getBuild(data, objects, modelData, textureData, objectData, builder) {\n if (data.build !== undefined) return data.build\n\n data.build = builder(data, objects, modelData, textureData, objectData)\n\n return data.build\n }\n\n function buildBasematerial(materialData, objects, modelData) {\n let material\n\n const displaypropertiesid = materialData.displaypropertiesid\n const pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties\n\n if (displaypropertiesid !== null && pbmetallicdisplayproperties[displaypropertiesid] !== undefined) {\n // metallic display property, use StandardMaterial\n\n const pbmetallicdisplayproperty = pbmetallicdisplayproperties[displaypropertiesid]\n const metallicData = pbmetallicdisplayproperty.data[materialData.index]\n\n material = new MeshStandardMaterial({\n flatShading: true,\n roughness: metallicData.roughness,\n metalness: metallicData.metallicness,\n })\n } else {\n // otherwise use PhongMaterial\n\n material = new MeshPhongMaterial({ flatShading: true })\n }\n\n material.name = materialData.name\n\n // displaycolor MUST be specified with a value of a 6 or 8 digit hexadecimal number, e.g. \"#RRGGBB\" or \"#RRGGBBAA\"\n\n const displaycolor = materialData.displaycolor\n\n const color = displaycolor.substring(0, 7)\n material.color.setStyle(color)\n material.color.convertSRGBToLinear() // displaycolor is in sRGB\n\n // process alpha if set\n\n if (displaycolor.length === 9) {\n material.opacity = parseInt(displaycolor.charAt(7) + displaycolor.charAt(8), 16) / 255\n }\n\n return material\n }\n\n function buildComposite(compositeData, objects, modelData, textureData) {\n const composite = new Group()\n\n for (let j = 0; j < compositeData.length; j++) {\n const component = compositeData[j]\n let build = objects[component.objectId]\n\n if (build === undefined) {\n buildObject(component.objectId, objects, modelData, textureData)\n build = objects[component.objectId]\n }\n\n const object3D = build.clone()\n\n // apply component transform\n\n const transform = component.transform\n\n if (transform) {\n object3D.applyMatrix4(transform)\n }\n\n composite.add(object3D)\n }\n\n return composite\n }\n\n function buildObject(objectId, objects, modelData, textureData) {\n const objectData = modelData['resources']['object'][objectId]\n\n if (objectData['mesh']) {\n const meshData = objectData['mesh']\n\n const extensions = modelData['extensions']\n const modelXml = modelData['xml']\n\n applyExtensions(extensions, meshData, modelXml)\n\n objects[objectData.id] = getBuild(meshData, objects, modelData, textureData, objectData, buildGroup)\n } else {\n const compositeData = objectData['components']\n\n objects[objectData.id] = getBuild(compositeData, objects, modelData, textureData, objectData, buildComposite)\n }\n }\n\n function buildObjects(data3mf) {\n const modelsData = data3mf.model\n const modelRels = data3mf.modelRels\n const objects = {}\n const modelsKeys = Object.keys(modelsData)\n const textureData = {}\n\n // evaluate model relationships to textures\n\n if (modelRels) {\n for (let i = 0, l = modelRels.length; i < l; i++) {\n const modelRel = modelRels[i]\n const textureKey = modelRel.target.substring(1)\n\n if (data3mf.texture[textureKey]) {\n textureData[modelRel.target] = data3mf.texture[textureKey]\n }\n }\n }\n\n // start build\n\n for (let i = 0; i < modelsKeys.length; i++) {\n const modelsKey = modelsKeys[i]\n const modelData = modelsData[modelsKey]\n\n const objectIds = Object.keys(modelData['resources']['object'])\n\n for (let j = 0; j < objectIds.length; j++) {\n const objectId = objectIds[j]\n\n buildObject(objectId, objects, modelData, textureData)\n }\n }\n\n return objects\n }\n\n function fetch3DModelPart(rels) {\n for (let i = 0; i < rels.length; i++) {\n const rel = rels[i]\n const extension = rel.target.split('.').pop()\n\n if (extension.toLowerCase() === 'model') return rel\n }\n }\n\n function build(objects, data3mf) {\n const group = new Group()\n\n const relationship = fetch3DModelPart(data3mf['rels'])\n const buildData = data3mf.model[relationship['target'].substring(1)]['build']\n\n for (let i = 0; i < buildData.length; i++) {\n const buildItem = buildData[i]\n const object3D = objects[buildItem['objectId']]\n\n // apply transform\n\n const transform = buildItem['transform']\n\n if (transform) {\n object3D.applyMatrix4(transform)\n }\n\n group.add(object3D)\n }\n\n return group\n }\n\n const data3mf = loadDocument(data)\n const objects = buildObjects(data3mf)\n\n return build(objects, data3mf)\n }\n\n addExtension(extension) {\n this.availableExtensions.push(extension)\n }\n}\n\nexport { ThreeMFLoader }\n"],"names":["Loader","FileLoader","TextureLoader","data","unzipSync","LoaderUtils","relsView","relsFileText","i","Color","Matrix4","objects","RepeatWrapping","MirroredRepeatWrapping","ClampToEdgeWrapping","LinearFilter","LinearMipmapLinearFilter","NearestFilter","BufferGeometry","Float32BufferAttribute","Mesh","MeshPhongMaterial","BufferAttribute","Group","MeshStandardMaterial","build","data3mf"],"mappings":"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"}
1
+ {"version":3,"file":"3MFLoader.cjs","sources":["../../src/loaders/3MFLoader.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n ClampToEdgeWrapping,\n Color,\n FileLoader,\n Float32BufferAttribute,\n Group,\n LinearFilter,\n LinearMipmapLinearFilter,\n Loader,\n LoaderUtils,\n Matrix4,\n Mesh,\n MeshPhongMaterial,\n MeshStandardMaterial,\n MirroredRepeatWrapping,\n NearestFilter,\n RepeatWrapping,\n TextureLoader,\n} from 'three'\nimport { unzipSync } from 'fflate'\nimport { decodeText } from '../_polyfill/LoaderUtils'\n\n/**\n *\n * 3D Manufacturing Format (3MF) specification: https://3mf.io/specification/\n *\n * The following features from the core specification are supported:\n *\n * - 3D Models\n * - Object Resources (Meshes and Components)\n * - Material Resources (Base Materials)\n *\n * 3MF Materials and Properties Extension are only partially supported.\n *\n * - Texture 2D\n * - Texture 2D Groups\n * - Color Groups (Vertex Colors)\n * - Metallic Display Properties (PBR)\n */\n\nclass ThreeMFLoader extends Loader {\n constructor(manager) {\n super(manager)\n this.availableExtensions = []\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n const loader = new FileLoader(scope.manager)\n loader.setPath(scope.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(scope.requestHeader)\n loader.setWithCredentials(scope.withCredentials)\n loader.load(\n url,\n function (buffer) {\n try {\n onLoad(scope.parse(buffer))\n } catch (e) {\n if (onError) {\n onError(e)\n } else {\n console.error(e)\n }\n\n scope.manager.itemError(url)\n }\n },\n onProgress,\n onError,\n )\n }\n\n parse(data) {\n const scope = this\n const textureLoader = new TextureLoader(this.manager)\n\n function loadDocument(data) {\n let zip = null\n let file = null\n\n let relsName\n let modelRelsName\n const modelPartNames = []\n const printTicketPartNames = []\n const texturesPartNames = []\n const otherPartNames = []\n\n let modelRels\n const modelParts = {}\n const printTicketParts = {}\n const texturesParts = {}\n const otherParts = {}\n\n try {\n zip = unzipSync(new Uint8Array(data))\n } catch (e) {\n if (e instanceof ReferenceError) {\n console.error('THREE.3MFLoader: fflate missing and file is compressed.')\n return null\n }\n }\n\n for (file in zip) {\n if (file.match(/\\_rels\\/.rels$/)) {\n relsName = file\n } else if (file.match(/3D\\/_rels\\/.*\\.model\\.rels$/)) {\n modelRelsName = file\n } else if (file.match(/^3D\\/.*\\.model$/)) {\n modelPartNames.push(file)\n } else if (file.match(/^3D\\/Metadata\\/.*\\.xml$/)) {\n printTicketPartNames.push(file)\n } else if (file.match(/^3D\\/Textures?\\/.*/)) {\n texturesPartNames.push(file)\n } else if (file.match(/^3D\\/Other\\/.*/)) {\n otherPartNames.push(file)\n }\n }\n\n //\n\n const relsView = zip[relsName]\n const relsFileText = decodeText(relsView)\n const rels = parseRelsXml(relsFileText)\n\n //\n\n if (modelRelsName) {\n const relsView = zip[modelRelsName]\n const relsFileText = decodeText(relsView)\n modelRels = parseRelsXml(relsFileText)\n }\n\n //\n\n for (let i = 0; i < modelPartNames.length; i++) {\n const modelPart = modelPartNames[i]\n const view = zip[modelPart]\n\n const fileText = decodeText(view)\n const xmlData = new DOMParser().parseFromString(fileText, 'application/xml')\n\n if (xmlData.documentElement.nodeName.toLowerCase() !== 'model') {\n console.error('THREE.3MFLoader: Error loading 3MF - no 3MF document found: ', modelPart)\n }\n\n const modelNode = xmlData.querySelector('model')\n const extensions = {}\n\n for (let i = 0; i < modelNode.attributes.length; i++) {\n const attr = modelNode.attributes[i]\n if (attr.name.match(/^xmlns:(.+)$/)) {\n extensions[attr.value] = RegExp.$1\n }\n }\n\n const modelData = parseModelNode(modelNode)\n modelData['xml'] = modelNode\n\n if (0 < Object.keys(extensions).length) {\n modelData['extensions'] = extensions\n }\n\n modelParts[modelPart] = modelData\n }\n\n //\n\n for (let i = 0; i < texturesPartNames.length; i++) {\n const texturesPartName = texturesPartNames[i]\n texturesParts[texturesPartName] = zip[texturesPartName].buffer\n }\n\n return {\n rels: rels,\n modelRels: modelRels,\n model: modelParts,\n printTicket: printTicketParts,\n texture: texturesParts,\n other: otherParts,\n }\n }\n\n function parseRelsXml(relsFileText) {\n const relationships = []\n\n const relsXmlData = new DOMParser().parseFromString(relsFileText, 'application/xml')\n\n const relsNodes = relsXmlData.querySelectorAll('Relationship')\n\n for (let i = 0; i < relsNodes.length; i++) {\n const relsNode = relsNodes[i]\n\n const relationship = {\n target: relsNode.getAttribute('Target'), //required\n id: relsNode.getAttribute('Id'), //required\n type: relsNode.getAttribute('Type'), //required\n }\n\n relationships.push(relationship)\n }\n\n return relationships\n }\n\n function parseMetadataNodes(metadataNodes) {\n const metadataData = {}\n\n for (let i = 0; i < metadataNodes.length; i++) {\n const metadataNode = metadataNodes[i]\n const name = metadataNode.getAttribute('name')\n const validNames = [\n 'Title',\n 'Designer',\n 'Description',\n 'Copyright',\n 'LicenseTerms',\n 'Rating',\n 'CreationDate',\n 'ModificationDate',\n ]\n\n if (0 <= validNames.indexOf(name)) {\n metadataData[name] = metadataNode.textContent\n }\n }\n\n return metadataData\n }\n\n function parseBasematerialsNode(basematerialsNode) {\n const basematerialsData = {\n id: basematerialsNode.getAttribute('id'), // required\n basematerials: [],\n }\n\n const basematerialNodes = basematerialsNode.querySelectorAll('base')\n\n for (let i = 0; i < basematerialNodes.length; i++) {\n const basematerialNode = basematerialNodes[i]\n const basematerialData = parseBasematerialNode(basematerialNode)\n basematerialData.index = i // the order and count of the material nodes form an implicit 0-based index\n basematerialsData.basematerials.push(basematerialData)\n }\n\n return basematerialsData\n }\n\n function parseTexture2DNode(texture2DNode) {\n const texture2dData = {\n id: texture2DNode.getAttribute('id'), // required\n path: texture2DNode.getAttribute('path'), // required\n contenttype: texture2DNode.getAttribute('contenttype'), // required\n tilestyleu: texture2DNode.getAttribute('tilestyleu'),\n tilestylev: texture2DNode.getAttribute('tilestylev'),\n filter: texture2DNode.getAttribute('filter'),\n }\n\n return texture2dData\n }\n\n function parseTextures2DGroupNode(texture2DGroupNode) {\n const texture2DGroupData = {\n id: texture2DGroupNode.getAttribute('id'), // required\n texid: texture2DGroupNode.getAttribute('texid'), // required\n displaypropertiesid: texture2DGroupNode.getAttribute('displaypropertiesid'),\n }\n\n const tex2coordNodes = texture2DGroupNode.querySelectorAll('tex2coord')\n\n const uvs = []\n\n for (let i = 0; i < tex2coordNodes.length; i++) {\n const tex2coordNode = tex2coordNodes[i]\n const u = tex2coordNode.getAttribute('u')\n const v = tex2coordNode.getAttribute('v')\n\n uvs.push(parseFloat(u), parseFloat(v))\n }\n\n texture2DGroupData['uvs'] = new Float32Array(uvs)\n\n return texture2DGroupData\n }\n\n function parseColorGroupNode(colorGroupNode) {\n const colorGroupData = {\n id: colorGroupNode.getAttribute('id'), // required\n displaypropertiesid: colorGroupNode.getAttribute('displaypropertiesid'),\n }\n\n const colorNodes = colorGroupNode.querySelectorAll('color')\n\n const colors = []\n const colorObject = new Color()\n\n for (let i = 0; i < colorNodes.length; i++) {\n const colorNode = colorNodes[i]\n const color = colorNode.getAttribute('color')\n\n colorObject.setStyle(color.substring(0, 7))\n colorObject.convertSRGBToLinear() // color is in sRGB\n\n colors.push(colorObject.r, colorObject.g, colorObject.b)\n }\n\n colorGroupData['colors'] = new Float32Array(colors)\n\n return colorGroupData\n }\n\n function parseMetallicDisplaypropertiesNode(metallicDisplaypropetiesNode) {\n const metallicDisplaypropertiesData = {\n id: metallicDisplaypropetiesNode.getAttribute('id'), // required\n }\n\n const metallicNodes = metallicDisplaypropetiesNode.querySelectorAll('pbmetallic')\n\n const metallicData = []\n\n for (let i = 0; i < metallicNodes.length; i++) {\n const metallicNode = metallicNodes[i]\n\n metallicData.push({\n name: metallicNode.getAttribute('name'), // required\n metallicness: parseFloat(metallicNode.getAttribute('metallicness')), // required\n roughness: parseFloat(metallicNode.getAttribute('roughness')), // required\n })\n }\n\n metallicDisplaypropertiesData.data = metallicData\n\n return metallicDisplaypropertiesData\n }\n\n function parseBasematerialNode(basematerialNode) {\n const basematerialData = {}\n\n basematerialData['name'] = basematerialNode.getAttribute('name') // required\n basematerialData['displaycolor'] = basematerialNode.getAttribute('displaycolor') // required\n basematerialData['displaypropertiesid'] = basematerialNode.getAttribute('displaypropertiesid')\n\n return basematerialData\n }\n\n function parseMeshNode(meshNode) {\n const meshData = {}\n\n const vertices = []\n const vertexNodes = meshNode.querySelectorAll('vertices vertex')\n\n for (let i = 0; i < vertexNodes.length; i++) {\n const vertexNode = vertexNodes[i]\n const x = vertexNode.getAttribute('x')\n const y = vertexNode.getAttribute('y')\n const z = vertexNode.getAttribute('z')\n\n vertices.push(parseFloat(x), parseFloat(y), parseFloat(z))\n }\n\n meshData['vertices'] = new Float32Array(vertices)\n\n const triangleProperties = []\n const triangles = []\n const triangleNodes = meshNode.querySelectorAll('triangles triangle')\n\n for (let i = 0; i < triangleNodes.length; i++) {\n const triangleNode = triangleNodes[i]\n const v1 = triangleNode.getAttribute('v1')\n const v2 = triangleNode.getAttribute('v2')\n const v3 = triangleNode.getAttribute('v3')\n const p1 = triangleNode.getAttribute('p1')\n const p2 = triangleNode.getAttribute('p2')\n const p3 = triangleNode.getAttribute('p3')\n const pid = triangleNode.getAttribute('pid')\n\n const triangleProperty = {}\n\n triangleProperty['v1'] = parseInt(v1, 10)\n triangleProperty['v2'] = parseInt(v2, 10)\n triangleProperty['v3'] = parseInt(v3, 10)\n\n triangles.push(triangleProperty['v1'], triangleProperty['v2'], triangleProperty['v3'])\n\n // optional\n\n if (p1) {\n triangleProperty['p1'] = parseInt(p1, 10)\n }\n\n if (p2) {\n triangleProperty['p2'] = parseInt(p2, 10)\n }\n\n if (p3) {\n triangleProperty['p3'] = parseInt(p3, 10)\n }\n\n if (pid) {\n triangleProperty['pid'] = pid\n }\n\n if (0 < Object.keys(triangleProperty).length) {\n triangleProperties.push(triangleProperty)\n }\n }\n\n meshData['triangleProperties'] = triangleProperties\n meshData['triangles'] = new Uint32Array(triangles)\n\n return meshData\n }\n\n function parseComponentsNode(componentsNode) {\n const components = []\n\n const componentNodes = componentsNode.querySelectorAll('component')\n\n for (let i = 0; i < componentNodes.length; i++) {\n const componentNode = componentNodes[i]\n const componentData = parseComponentNode(componentNode)\n components.push(componentData)\n }\n\n return components\n }\n\n function parseComponentNode(componentNode) {\n const componentData = {}\n\n componentData['objectId'] = componentNode.getAttribute('objectid') // required\n\n const transform = componentNode.getAttribute('transform')\n\n if (transform) {\n componentData['transform'] = parseTransform(transform)\n }\n\n return componentData\n }\n\n function parseTransform(transform) {\n const t = []\n transform.split(' ').forEach(function (s) {\n t.push(parseFloat(s))\n })\n\n const matrix = new Matrix4()\n matrix.set(t[0], t[3], t[6], t[9], t[1], t[4], t[7], t[10], t[2], t[5], t[8], t[11], 0.0, 0.0, 0.0, 1.0)\n\n return matrix\n }\n\n function parseObjectNode(objectNode) {\n const objectData = {\n type: objectNode.getAttribute('type'),\n }\n\n const id = objectNode.getAttribute('id')\n\n if (id) {\n objectData['id'] = id\n }\n\n const pid = objectNode.getAttribute('pid')\n\n if (pid) {\n objectData['pid'] = pid\n }\n\n const pindex = objectNode.getAttribute('pindex')\n\n if (pindex) {\n objectData['pindex'] = pindex\n }\n\n const thumbnail = objectNode.getAttribute('thumbnail')\n\n if (thumbnail) {\n objectData['thumbnail'] = thumbnail\n }\n\n const partnumber = objectNode.getAttribute('partnumber')\n\n if (partnumber) {\n objectData['partnumber'] = partnumber\n }\n\n const name = objectNode.getAttribute('name')\n\n if (name) {\n objectData['name'] = name\n }\n\n const meshNode = objectNode.querySelector('mesh')\n\n if (meshNode) {\n objectData['mesh'] = parseMeshNode(meshNode)\n }\n\n const componentsNode = objectNode.querySelector('components')\n\n if (componentsNode) {\n objectData['components'] = parseComponentsNode(componentsNode)\n }\n\n return objectData\n }\n\n function parseResourcesNode(resourcesNode) {\n const resourcesData = {}\n\n resourcesData['basematerials'] = {}\n const basematerialsNodes = resourcesNode.querySelectorAll('basematerials')\n\n for (let i = 0; i < basematerialsNodes.length; i++) {\n const basematerialsNode = basematerialsNodes[i]\n const basematerialsData = parseBasematerialsNode(basematerialsNode)\n resourcesData['basematerials'][basematerialsData['id']] = basematerialsData\n }\n\n //\n\n resourcesData['texture2d'] = {}\n const textures2DNodes = resourcesNode.querySelectorAll('texture2d')\n\n for (let i = 0; i < textures2DNodes.length; i++) {\n const textures2DNode = textures2DNodes[i]\n const texture2DData = parseTexture2DNode(textures2DNode)\n resourcesData['texture2d'][texture2DData['id']] = texture2DData\n }\n\n //\n\n resourcesData['colorgroup'] = {}\n const colorGroupNodes = resourcesNode.querySelectorAll('colorgroup')\n\n for (let i = 0; i < colorGroupNodes.length; i++) {\n const colorGroupNode = colorGroupNodes[i]\n const colorGroupData = parseColorGroupNode(colorGroupNode)\n resourcesData['colorgroup'][colorGroupData['id']] = colorGroupData\n }\n\n //\n\n resourcesData['pbmetallicdisplayproperties'] = {}\n const pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll('pbmetallicdisplayproperties')\n\n for (let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i++) {\n const pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[i]\n const pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode(pbmetallicdisplaypropertiesNode)\n resourcesData['pbmetallicdisplayproperties'][\n pbmetallicdisplaypropertiesData['id']\n ] = pbmetallicdisplaypropertiesData\n }\n\n //\n\n resourcesData['texture2dgroup'] = {}\n const textures2DGroupNodes = resourcesNode.querySelectorAll('texture2dgroup')\n\n for (let i = 0; i < textures2DGroupNodes.length; i++) {\n const textures2DGroupNode = textures2DGroupNodes[i]\n const textures2DGroupData = parseTextures2DGroupNode(textures2DGroupNode)\n resourcesData['texture2dgroup'][textures2DGroupData['id']] = textures2DGroupData\n }\n\n //\n\n resourcesData['object'] = {}\n const objectNodes = resourcesNode.querySelectorAll('object')\n\n for (let i = 0; i < objectNodes.length; i++) {\n const objectNode = objectNodes[i]\n const objectData = parseObjectNode(objectNode)\n resourcesData['object'][objectData['id']] = objectData\n }\n\n return resourcesData\n }\n\n function parseBuildNode(buildNode) {\n const buildData = []\n const itemNodes = buildNode.querySelectorAll('item')\n\n for (let i = 0; i < itemNodes.length; i++) {\n const itemNode = itemNodes[i]\n const buildItem = {\n objectId: itemNode.getAttribute('objectid'),\n }\n const transform = itemNode.getAttribute('transform')\n\n if (transform) {\n buildItem['transform'] = parseTransform(transform)\n }\n\n buildData.push(buildItem)\n }\n\n return buildData\n }\n\n function parseModelNode(modelNode) {\n const modelData = { unit: modelNode.getAttribute('unit') || 'millimeter' }\n const metadataNodes = modelNode.querySelectorAll('metadata')\n\n if (metadataNodes) {\n modelData['metadata'] = parseMetadataNodes(metadataNodes)\n }\n\n const resourcesNode = modelNode.querySelector('resources')\n\n if (resourcesNode) {\n modelData['resources'] = parseResourcesNode(resourcesNode)\n }\n\n const buildNode = modelNode.querySelector('build')\n\n if (buildNode) {\n modelData['build'] = parseBuildNode(buildNode)\n }\n\n return modelData\n }\n\n function buildTexture(texture2dgroup, objects, modelData, textureData) {\n const texid = texture2dgroup.texid\n const texture2ds = modelData.resources.texture2d\n const texture2d = texture2ds[texid]\n\n if (texture2d) {\n const data = textureData[texture2d.path]\n const type = texture2d.contenttype\n\n const blob = new Blob([data], { type: type })\n const sourceURI = URL.createObjectURL(blob)\n\n const texture = textureLoader.load(sourceURI, function () {\n URL.revokeObjectURL(sourceURI)\n })\n\n if ('colorSpace' in texture) texture.colorSpace = 'srgb'\n else texture.encoding = 3001 // sRGBEncoding\n\n // texture parameters\n\n switch (texture2d.tilestyleu) {\n case 'wrap':\n texture.wrapS = RepeatWrapping\n break\n\n case 'mirror':\n texture.wrapS = MirroredRepeatWrapping\n break\n\n case 'none':\n case 'clamp':\n texture.wrapS = ClampToEdgeWrapping\n break\n\n default:\n texture.wrapS = RepeatWrapping\n }\n\n switch (texture2d.tilestylev) {\n case 'wrap':\n texture.wrapT = RepeatWrapping\n break\n\n case 'mirror':\n texture.wrapT = MirroredRepeatWrapping\n break\n\n case 'none':\n case 'clamp':\n texture.wrapT = ClampToEdgeWrapping\n break\n\n default:\n texture.wrapT = RepeatWrapping\n }\n\n switch (texture2d.filter) {\n case 'auto':\n texture.magFilter = LinearFilter\n texture.minFilter = LinearMipmapLinearFilter\n break\n\n case 'linear':\n texture.magFilter = LinearFilter\n texture.minFilter = LinearFilter\n break\n\n case 'nearest':\n texture.magFilter = NearestFilter\n texture.minFilter = NearestFilter\n break\n\n default:\n texture.magFilter = LinearFilter\n texture.minFilter = LinearMipmapLinearFilter\n }\n\n return texture\n } else {\n return null\n }\n }\n\n function buildBasematerialsMeshes(\n basematerials,\n triangleProperties,\n meshData,\n objects,\n modelData,\n textureData,\n objectData,\n ) {\n const objectPindex = objectData.pindex\n\n const materialMap = {}\n\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i]\n const pindex = triangleProperty.p1 !== undefined ? triangleProperty.p1 : objectPindex\n\n if (materialMap[pindex] === undefined) materialMap[pindex] = []\n\n materialMap[pindex].push(triangleProperty)\n }\n\n //\n\n const keys = Object.keys(materialMap)\n const meshes = []\n\n for (let i = 0, l = keys.length; i < l; i++) {\n const materialIndex = keys[i]\n const trianglePropertiesProps = materialMap[materialIndex]\n const basematerialData = basematerials.basematerials[materialIndex]\n const material = getBuild(basematerialData, objects, modelData, textureData, objectData, buildBasematerial)\n\n //\n\n const geometry = new BufferGeometry()\n\n const positionData = []\n\n const vertices = meshData.vertices\n\n for (let j = 0, jl = trianglePropertiesProps.length; j < jl; j++) {\n const triangleProperty = trianglePropertiesProps[j]\n\n positionData.push(vertices[triangleProperty.v1 * 3 + 0])\n positionData.push(vertices[triangleProperty.v1 * 3 + 1])\n positionData.push(vertices[triangleProperty.v1 * 3 + 2])\n\n positionData.push(vertices[triangleProperty.v2 * 3 + 0])\n positionData.push(vertices[triangleProperty.v2 * 3 + 1])\n positionData.push(vertices[triangleProperty.v2 * 3 + 2])\n\n positionData.push(vertices[triangleProperty.v3 * 3 + 0])\n positionData.push(vertices[triangleProperty.v3 * 3 + 1])\n positionData.push(vertices[triangleProperty.v3 * 3 + 2])\n }\n\n geometry.setAttribute('position', new Float32BufferAttribute(positionData, 3))\n\n //\n\n const mesh = new Mesh(geometry, material)\n meshes.push(mesh)\n }\n\n return meshes\n }\n\n function buildTexturedMesh(\n texture2dgroup,\n triangleProperties,\n meshData,\n objects,\n modelData,\n textureData,\n objectData,\n ) {\n // geometry\n\n const geometry = new BufferGeometry()\n\n const positionData = []\n const uvData = []\n\n const vertices = meshData.vertices\n const uvs = texture2dgroup.uvs\n\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i]\n\n positionData.push(vertices[triangleProperty.v1 * 3 + 0])\n positionData.push(vertices[triangleProperty.v1 * 3 + 1])\n positionData.push(vertices[triangleProperty.v1 * 3 + 2])\n\n positionData.push(vertices[triangleProperty.v2 * 3 + 0])\n positionData.push(vertices[triangleProperty.v2 * 3 + 1])\n positionData.push(vertices[triangleProperty.v2 * 3 + 2])\n\n positionData.push(vertices[triangleProperty.v3 * 3 + 0])\n positionData.push(vertices[triangleProperty.v3 * 3 + 1])\n positionData.push(vertices[triangleProperty.v3 * 3 + 2])\n\n //\n\n uvData.push(uvs[triangleProperty.p1 * 2 + 0])\n uvData.push(uvs[triangleProperty.p1 * 2 + 1])\n\n uvData.push(uvs[triangleProperty.p2 * 2 + 0])\n uvData.push(uvs[triangleProperty.p2 * 2 + 1])\n\n uvData.push(uvs[triangleProperty.p3 * 2 + 0])\n uvData.push(uvs[triangleProperty.p3 * 2 + 1])\n }\n\n geometry.setAttribute('position', new Float32BufferAttribute(positionData, 3))\n geometry.setAttribute('uv', new Float32BufferAttribute(uvData, 2))\n\n // material\n\n const texture = getBuild(texture2dgroup, objects, modelData, textureData, objectData, buildTexture)\n\n const material = new MeshPhongMaterial({ map: texture, flatShading: true })\n\n // mesh\n\n const mesh = new Mesh(geometry, material)\n\n return mesh\n }\n\n function buildVertexColorMesh(colorgroup, triangleProperties, meshData, objects, modelData, objectData) {\n // geometry\n\n const geometry = new BufferGeometry()\n\n const positionData = []\n const colorData = []\n\n const vertices = meshData.vertices\n const colors = colorgroup.colors\n\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i]\n\n const v1 = triangleProperty.v1\n const v2 = triangleProperty.v2\n const v3 = triangleProperty.v3\n\n positionData.push(vertices[v1 * 3 + 0])\n positionData.push(vertices[v1 * 3 + 1])\n positionData.push(vertices[v1 * 3 + 2])\n\n positionData.push(vertices[v2 * 3 + 0])\n positionData.push(vertices[v2 * 3 + 1])\n positionData.push(vertices[v2 * 3 + 2])\n\n positionData.push(vertices[v3 * 3 + 0])\n positionData.push(vertices[v3 * 3 + 1])\n positionData.push(vertices[v3 * 3 + 2])\n\n //\n\n const p1 = triangleProperty.p1 !== undefined ? triangleProperty.p1 : objectData.pindex\n const p2 = triangleProperty.p2 !== undefined ? triangleProperty.p2 : p1\n const p3 = triangleProperty.p3 !== undefined ? triangleProperty.p3 : p1\n\n colorData.push(colors[p1 * 3 + 0])\n colorData.push(colors[p1 * 3 + 1])\n colorData.push(colors[p1 * 3 + 2])\n\n colorData.push(colors[p2 * 3 + 0])\n colorData.push(colors[p2 * 3 + 1])\n colorData.push(colors[p2 * 3 + 2])\n\n colorData.push(colors[p3 * 3 + 0])\n colorData.push(colors[p3 * 3 + 1])\n colorData.push(colors[p3 * 3 + 2])\n }\n\n geometry.setAttribute('position', new Float32BufferAttribute(positionData, 3))\n geometry.setAttribute('color', new Float32BufferAttribute(colorData, 3))\n\n // material\n\n const material = new MeshPhongMaterial({ vertexColors: true, flatShading: true })\n\n // mesh\n\n const mesh = new Mesh(geometry, material)\n\n return mesh\n }\n\n function buildDefaultMesh(meshData) {\n const geometry = new BufferGeometry()\n geometry.setIndex(new BufferAttribute(meshData['triangles'], 1))\n geometry.setAttribute('position', new BufferAttribute(meshData['vertices'], 3))\n\n const material = new MeshPhongMaterial({ color: 0xaaaaff, flatShading: true })\n\n const mesh = new Mesh(geometry, material)\n\n return mesh\n }\n\n function buildMeshes(resourceMap, meshData, objects, modelData, textureData, objectData) {\n const keys = Object.keys(resourceMap)\n const meshes = []\n\n for (let i = 0, il = keys.length; i < il; i++) {\n const resourceId = keys[i]\n const triangleProperties = resourceMap[resourceId]\n const resourceType = getResourceType(resourceId, modelData)\n\n switch (resourceType) {\n case 'material':\n const basematerials = modelData.resources.basematerials[resourceId]\n const newMeshes = buildBasematerialsMeshes(\n basematerials,\n triangleProperties,\n meshData,\n objects,\n modelData,\n textureData,\n objectData,\n )\n\n for (let j = 0, jl = newMeshes.length; j < jl; j++) {\n meshes.push(newMeshes[j])\n }\n\n break\n\n case 'texture':\n const texture2dgroup = modelData.resources.texture2dgroup[resourceId]\n meshes.push(\n buildTexturedMesh(\n texture2dgroup,\n triangleProperties,\n meshData,\n objects,\n modelData,\n textureData,\n objectData,\n ),\n )\n break\n\n case 'vertexColors':\n const colorgroup = modelData.resources.colorgroup[resourceId]\n meshes.push(buildVertexColorMesh(colorgroup, triangleProperties, meshData, objects, modelData, objectData))\n break\n\n case 'default':\n meshes.push(buildDefaultMesh(meshData))\n break\n\n default:\n console.error('THREE.3MFLoader: Unsupported resource type.')\n }\n }\n\n return meshes\n }\n\n function getResourceType(pid, modelData) {\n if (modelData.resources.texture2dgroup[pid] !== undefined) {\n return 'texture'\n } else if (modelData.resources.basematerials[pid] !== undefined) {\n return 'material'\n } else if (modelData.resources.colorgroup[pid] !== undefined) {\n return 'vertexColors'\n } else if (pid === 'default') {\n return 'default'\n } else {\n return undefined\n }\n }\n\n function analyzeObject(modelData, meshData, objectData) {\n const resourceMap = {}\n\n const triangleProperties = meshData['triangleProperties']\n\n const objectPid = objectData.pid\n\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i]\n let pid = triangleProperty.pid !== undefined ? triangleProperty.pid : objectPid\n\n if (pid === undefined) pid = 'default'\n\n if (resourceMap[pid] === undefined) resourceMap[pid] = []\n\n resourceMap[pid].push(triangleProperty)\n }\n\n return resourceMap\n }\n\n function buildGroup(meshData, objects, modelData, textureData, objectData) {\n const group = new Group()\n\n const resourceMap = analyzeObject(modelData, meshData, objectData)\n const meshes = buildMeshes(resourceMap, meshData, objects, modelData, textureData, objectData)\n\n for (let i = 0, l = meshes.length; i < l; i++) {\n group.add(meshes[i])\n }\n\n return group\n }\n\n function applyExtensions(extensions, meshData, modelXml) {\n if (!extensions) {\n return\n }\n\n const availableExtensions = []\n const keys = Object.keys(extensions)\n\n for (let i = 0; i < keys.length; i++) {\n const ns = keys[i]\n\n for (let j = 0; j < scope.availableExtensions.length; j++) {\n const extension = scope.availableExtensions[j]\n\n if (extension.ns === ns) {\n availableExtensions.push(extension)\n }\n }\n }\n\n for (let i = 0; i < availableExtensions.length; i++) {\n const extension = availableExtensions[i]\n extension.apply(modelXml, extensions[extension['ns']], meshData)\n }\n }\n\n function getBuild(data, objects, modelData, textureData, objectData, builder) {\n if (data.build !== undefined) return data.build\n\n data.build = builder(data, objects, modelData, textureData, objectData)\n\n return data.build\n }\n\n function buildBasematerial(materialData, objects, modelData) {\n let material\n\n const displaypropertiesid = materialData.displaypropertiesid\n const pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties\n\n if (displaypropertiesid !== null && pbmetallicdisplayproperties[displaypropertiesid] !== undefined) {\n // metallic display property, use StandardMaterial\n\n const pbmetallicdisplayproperty = pbmetallicdisplayproperties[displaypropertiesid]\n const metallicData = pbmetallicdisplayproperty.data[materialData.index]\n\n material = new MeshStandardMaterial({\n flatShading: true,\n roughness: metallicData.roughness,\n metalness: metallicData.metallicness,\n })\n } else {\n // otherwise use PhongMaterial\n\n material = new MeshPhongMaterial({ flatShading: true })\n }\n\n material.name = materialData.name\n\n // displaycolor MUST be specified with a value of a 6 or 8 digit hexadecimal number, e.g. \"#RRGGBB\" or \"#RRGGBBAA\"\n\n const displaycolor = materialData.displaycolor\n\n const color = displaycolor.substring(0, 7)\n material.color.setStyle(color)\n material.color.convertSRGBToLinear() // displaycolor is in sRGB\n\n // process alpha if set\n\n if (displaycolor.length === 9) {\n material.opacity = parseInt(displaycolor.charAt(7) + displaycolor.charAt(8), 16) / 255\n }\n\n return material\n }\n\n function buildComposite(compositeData, objects, modelData, textureData) {\n const composite = new Group()\n\n for (let j = 0; j < compositeData.length; j++) {\n const component = compositeData[j]\n let build = objects[component.objectId]\n\n if (build === undefined) {\n buildObject(component.objectId, objects, modelData, textureData)\n build = objects[component.objectId]\n }\n\n const object3D = build.clone()\n\n // apply component transform\n\n const transform = component.transform\n\n if (transform) {\n object3D.applyMatrix4(transform)\n }\n\n composite.add(object3D)\n }\n\n return composite\n }\n\n function buildObject(objectId, objects, modelData, textureData) {\n const objectData = modelData['resources']['object'][objectId]\n\n if (objectData['mesh']) {\n const meshData = objectData['mesh']\n\n const extensions = modelData['extensions']\n const modelXml = modelData['xml']\n\n applyExtensions(extensions, meshData, modelXml)\n\n objects[objectData.id] = getBuild(meshData, objects, modelData, textureData, objectData, buildGroup)\n } else {\n const compositeData = objectData['components']\n\n objects[objectData.id] = getBuild(compositeData, objects, modelData, textureData, objectData, buildComposite)\n }\n }\n\n function buildObjects(data3mf) {\n const modelsData = data3mf.model\n const modelRels = data3mf.modelRels\n const objects = {}\n const modelsKeys = Object.keys(modelsData)\n const textureData = {}\n\n // evaluate model relationships to textures\n\n if (modelRels) {\n for (let i = 0, l = modelRels.length; i < l; i++) {\n const modelRel = modelRels[i]\n const textureKey = modelRel.target.substring(1)\n\n if (data3mf.texture[textureKey]) {\n textureData[modelRel.target] = data3mf.texture[textureKey]\n }\n }\n }\n\n // start build\n\n for (let i = 0; i < modelsKeys.length; i++) {\n const modelsKey = modelsKeys[i]\n const modelData = modelsData[modelsKey]\n\n const objectIds = Object.keys(modelData['resources']['object'])\n\n for (let j = 0; j < objectIds.length; j++) {\n const objectId = objectIds[j]\n\n buildObject(objectId, objects, modelData, textureData)\n }\n }\n\n return objects\n }\n\n function fetch3DModelPart(rels) {\n for (let i = 0; i < rels.length; i++) {\n const rel = rels[i]\n const extension = rel.target.split('.').pop()\n\n if (extension.toLowerCase() === 'model') return rel\n }\n }\n\n function build(objects, data3mf) {\n const group = new Group()\n\n const relationship = fetch3DModelPart(data3mf['rels'])\n const buildData = data3mf.model[relationship['target'].substring(1)]['build']\n\n for (let i = 0; i < buildData.length; i++) {\n const buildItem = buildData[i]\n const object3D = objects[buildItem['objectId']]\n\n // apply transform\n\n const transform = buildItem['transform']\n\n if (transform) {\n object3D.applyMatrix4(transform)\n }\n\n group.add(object3D)\n }\n\n return group\n }\n\n const data3mf = loadDocument(data)\n const objects = buildObjects(data3mf)\n\n return build(objects, data3mf)\n }\n\n addExtension(extension) {\n this.availableExtensions.push(extension)\n }\n}\n\nexport { ThreeMFLoader }\n"],"names":["Loader","FileLoader","TextureLoader","data","unzipSync","decodeText","relsView","relsFileText","i","Color","Matrix4","objects","RepeatWrapping","MirroredRepeatWrapping","ClampToEdgeWrapping","LinearFilter","LinearMipmapLinearFilter","NearestFilter","BufferGeometry","Float32BufferAttribute","Mesh","MeshPhongMaterial","BufferAttribute","Group","MeshStandardMaterial","build","data3mf"],"mappings":";;;;;AA0CA,MAAM,sBAAsBA,MAAAA,OAAO;AAAA,EACjC,YAAY,SAAS;AACnB,UAAM,OAAO;AACb,SAAK,sBAAsB,CAAE;AAAA,EAC9B;AAAA,EAED,KAAK,KAAK,QAAQ,YAAY,SAAS;AACrC,UAAM,QAAQ;AACd,UAAM,SAAS,IAAIC,iBAAW,MAAM,OAAO;AAC3C,WAAO,QAAQ,MAAM,IAAI;AACzB,WAAO,gBAAgB,aAAa;AACpC,WAAO,iBAAiB,MAAM,aAAa;AAC3C,WAAO,mBAAmB,MAAM,eAAe;AAC/C,WAAO;AAAA,MACL;AAAA,MACA,SAAU,QAAQ;AAChB,YAAI;AACF,iBAAO,MAAM,MAAM,MAAM,CAAC;AAAA,QAC3B,SAAQ,GAAP;AACA,cAAI,SAAS;AACX,oBAAQ,CAAC;AAAA,UACrB,OAAiB;AACL,oBAAQ,MAAM,CAAC;AAAA,UAChB;AAED,gBAAM,QAAQ,UAAU,GAAG;AAAA,QAC5B;AAAA,MACF;AAAA,MACD;AAAA,MACA;AAAA,IACD;AAAA,EACF;AAAA,EAED,MAAM,MAAM;AACV,UAAM,QAAQ;AACd,UAAM,gBAAgB,IAAIC,oBAAc,KAAK,OAAO;AAEpD,aAAS,aAAaC,OAAM;AAC1B,UAAI,MAAM;AACV,UAAI,OAAO;AAEX,UAAI;AACJ,UAAI;AACJ,YAAM,iBAAiB,CAAE;AAEzB,YAAM,oBAAoB,CAAE;AAG5B,UAAI;AACJ,YAAM,aAAa,CAAE;AACrB,YAAM,mBAAmB,CAAE;AAC3B,YAAM,gBAAgB,CAAE;AACxB,YAAM,aAAa,CAAE;AAErB,UAAI;AACF,cAAMC,OAAS,UAAC,IAAI,WAAWD,KAAI,CAAC;AAAA,MACrC,SAAQ,GAAP;AACA,YAAI,aAAa,gBAAgB;AAC/B,kBAAQ,MAAM,yDAAyD;AACvE,iBAAO;AAAA,QACR;AAAA,MACF;AAED,WAAK,QAAQ,KAAK;AAChB,YAAI,KAAK,MAAM,gBAAgB,GAAG;AAChC,qBAAW;AAAA,QACZ,WAAU,KAAK,MAAM,6BAA6B,GAAG;AACpD,0BAAgB;AAAA,QACjB,WAAU,KAAK,MAAM,iBAAiB,GAAG;AACxC,yBAAe,KAAK,IAAI;AAAA,QAClC,WAAmB,KAAK,MAAM,yBAAyB;AAAG;AAAA,iBAEvC,KAAK,MAAM,oBAAoB,GAAG;AAC3C,4BAAkB,KAAK,IAAI;AAAA,QAC5B,WAAU,KAAK,MAAM,gBAAgB;AAAG;AAAA,MAG1C;AAID,YAAM,WAAW,IAAI,QAAQ;AAC7B,YAAM,eAAeE,YAAU,WAAC,QAAQ;AACxC,YAAM,OAAO,aAAa,YAAY;AAItC,UAAI,eAAe;AACjB,cAAMC,YAAW,IAAI,aAAa;AAClC,cAAMC,gBAAeF,YAAU,WAACC,SAAQ;AACxC,oBAAY,aAAaC,aAAY;AAAA,MACtC;AAID,eAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,cAAM,YAAY,eAAe,CAAC;AAClC,cAAM,OAAO,IAAI,SAAS;AAE1B,cAAM,WAAWF,YAAU,WAAC,IAAI;AAChC,cAAM,UAAU,IAAI,UAAS,EAAG,gBAAgB,UAAU,iBAAiB;AAE3E,YAAI,QAAQ,gBAAgB,SAAS,YAAW,MAAO,SAAS;AAC9D,kBAAQ,MAAM,gEAAgE,SAAS;AAAA,QACxF;AAED,cAAM,YAAY,QAAQ,cAAc,OAAO;AAC/C,cAAM,aAAa,CAAE;AAErB,iBAASG,KAAI,GAAGA,KAAI,UAAU,WAAW,QAAQA,MAAK;AACpD,gBAAM,OAAO,UAAU,WAAWA,EAAC;AACnC,cAAI,KAAK,KAAK,MAAM,cAAc,GAAG;AACnC,uBAAW,KAAK,KAAK,IAAI,OAAO;AAAA,UACjC;AAAA,QACF;AAED,cAAM,YAAY,eAAe,SAAS;AAC1C,kBAAU,KAAK,IAAI;AAEnB,YAAI,IAAI,OAAO,KAAK,UAAU,EAAE,QAAQ;AACtC,oBAAU,YAAY,IAAI;AAAA,QAC3B;AAED,mBAAW,SAAS,IAAI;AAAA,MACzB;AAID,eAAS,IAAI,GAAG,IAAI,kBAAkB,QAAQ,KAAK;AACjD,cAAM,mBAAmB,kBAAkB,CAAC;AAC5C,sBAAc,gBAAgB,IAAI,IAAI,gBAAgB,EAAE;AAAA,MACzD;AAED,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,aAAa;AAAA,QACb,SAAS;AAAA,QACT,OAAO;AAAA,MACR;AAAA,IACF;AAED,aAAS,aAAa,cAAc;AAClC,YAAM,gBAAgB,CAAE;AAExB,YAAM,cAAc,IAAI,UAAS,EAAG,gBAAgB,cAAc,iBAAiB;AAEnF,YAAM,YAAY,YAAY,iBAAiB,cAAc;AAE7D,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,cAAM,WAAW,UAAU,CAAC;AAE5B,cAAM,eAAe;AAAA,UACnB,QAAQ,SAAS,aAAa,QAAQ;AAAA;AAAA,UACtC,IAAI,SAAS,aAAa,IAAI;AAAA;AAAA,UAC9B,MAAM,SAAS,aAAa,MAAM;AAAA;AAAA,QACnC;AAED,sBAAc,KAAK,YAAY;AAAA,MAChC;AAED,aAAO;AAAA,IACR;AAED,aAAS,mBAAmB,eAAe;AACzC,YAAM,eAAe,CAAE;AAEvB,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,cAAM,eAAe,cAAc,CAAC;AACpC,cAAM,OAAO,aAAa,aAAa,MAAM;AAC7C,cAAM,aAAa;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAED,YAAI,KAAK,WAAW,QAAQ,IAAI,GAAG;AACjC,uBAAa,IAAI,IAAI,aAAa;AAAA,QACnC;AAAA,MACF;AAED,aAAO;AAAA,IACR;AAED,aAAS,uBAAuB,mBAAmB;AACjD,YAAM,oBAAoB;AAAA,QACxB,IAAI,kBAAkB,aAAa,IAAI;AAAA;AAAA,QACvC,eAAe,CAAE;AAAA,MAClB;AAED,YAAM,oBAAoB,kBAAkB,iBAAiB,MAAM;AAEnE,eAAS,IAAI,GAAG,IAAI,kBAAkB,QAAQ,KAAK;AACjD,cAAM,mBAAmB,kBAAkB,CAAC;AAC5C,cAAM,mBAAmB,sBAAsB,gBAAgB;AAC/D,yBAAiB,QAAQ;AACzB,0BAAkB,cAAc,KAAK,gBAAgB;AAAA,MACtD;AAED,aAAO;AAAA,IACR;AAED,aAAS,mBAAmB,eAAe;AACzC,YAAM,gBAAgB;AAAA,QACpB,IAAI,cAAc,aAAa,IAAI;AAAA;AAAA,QACnC,MAAM,cAAc,aAAa,MAAM;AAAA;AAAA,QACvC,aAAa,cAAc,aAAa,aAAa;AAAA;AAAA,QACrD,YAAY,cAAc,aAAa,YAAY;AAAA,QACnD,YAAY,cAAc,aAAa,YAAY;AAAA,QACnD,QAAQ,cAAc,aAAa,QAAQ;AAAA,MAC5C;AAED,aAAO;AAAA,IACR;AAED,aAAS,yBAAyB,oBAAoB;AACpD,YAAM,qBAAqB;AAAA,QACzB,IAAI,mBAAmB,aAAa,IAAI;AAAA;AAAA,QACxC,OAAO,mBAAmB,aAAa,OAAO;AAAA;AAAA,QAC9C,qBAAqB,mBAAmB,aAAa,qBAAqB;AAAA,MAC3E;AAED,YAAM,iBAAiB,mBAAmB,iBAAiB,WAAW;AAEtE,YAAM,MAAM,CAAE;AAEd,eAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,cAAM,gBAAgB,eAAe,CAAC;AACtC,cAAM,IAAI,cAAc,aAAa,GAAG;AACxC,cAAM,IAAI,cAAc,aAAa,GAAG;AAExC,YAAI,KAAK,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC;AAAA,MACtC;AAED,yBAAmB,KAAK,IAAI,IAAI,aAAa,GAAG;AAEhD,aAAO;AAAA,IACR;AAED,aAAS,oBAAoB,gBAAgB;AAC3C,YAAM,iBAAiB;AAAA,QACrB,IAAI,eAAe,aAAa,IAAI;AAAA;AAAA,QACpC,qBAAqB,eAAe,aAAa,qBAAqB;AAAA,MACvE;AAED,YAAM,aAAa,eAAe,iBAAiB,OAAO;AAE1D,YAAM,SAAS,CAAE;AACjB,YAAM,cAAc,IAAIC,YAAO;AAE/B,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,cAAM,YAAY,WAAW,CAAC;AAC9B,cAAM,QAAQ,UAAU,aAAa,OAAO;AAE5C,oBAAY,SAAS,MAAM,UAAU,GAAG,CAAC,CAAC;AAC1C,oBAAY,oBAAqB;AAEjC,eAAO,KAAK,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;AAAA,MACxD;AAED,qBAAe,QAAQ,IAAI,IAAI,aAAa,MAAM;AAElD,aAAO;AAAA,IACR;AAED,aAAS,mCAAmC,8BAA8B;AACxE,YAAM,gCAAgC;AAAA,QACpC,IAAI,6BAA6B,aAAa,IAAI;AAAA;AAAA,MACnD;AAED,YAAM,gBAAgB,6BAA6B,iBAAiB,YAAY;AAEhF,YAAM,eAAe,CAAE;AAEvB,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,cAAM,eAAe,cAAc,CAAC;AAEpC,qBAAa,KAAK;AAAA,UAChB,MAAM,aAAa,aAAa,MAAM;AAAA;AAAA,UACtC,cAAc,WAAW,aAAa,aAAa,cAAc,CAAC;AAAA;AAAA,UAClE,WAAW,WAAW,aAAa,aAAa,WAAW,CAAC;AAAA;AAAA,QACtE,CAAS;AAAA,MACF;AAED,oCAA8B,OAAO;AAErC,aAAO;AAAA,IACR;AAED,aAAS,sBAAsB,kBAAkB;AAC/C,YAAM,mBAAmB,CAAE;AAE3B,uBAAiB,MAAM,IAAI,iBAAiB,aAAa,MAAM;AAC/D,uBAAiB,cAAc,IAAI,iBAAiB,aAAa,cAAc;AAC/E,uBAAiB,qBAAqB,IAAI,iBAAiB,aAAa,qBAAqB;AAE7F,aAAO;AAAA,IACR;AAED,aAAS,cAAc,UAAU;AAC/B,YAAM,WAAW,CAAE;AAEnB,YAAM,WAAW,CAAE;AACnB,YAAM,cAAc,SAAS,iBAAiB,iBAAiB;AAE/D,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,cAAM,aAAa,YAAY,CAAC;AAChC,cAAM,IAAI,WAAW,aAAa,GAAG;AACrC,cAAM,IAAI,WAAW,aAAa,GAAG;AACrC,cAAM,IAAI,WAAW,aAAa,GAAG;AAErC,iBAAS,KAAK,WAAW,CAAC,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC;AAAA,MAC1D;AAED,eAAS,UAAU,IAAI,IAAI,aAAa,QAAQ;AAEhD,YAAM,qBAAqB,CAAE;AAC7B,YAAM,YAAY,CAAE;AACpB,YAAM,gBAAgB,SAAS,iBAAiB,oBAAoB;AAEpE,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,cAAM,eAAe,cAAc,CAAC;AACpC,cAAM,KAAK,aAAa,aAAa,IAAI;AACzC,cAAM,KAAK,aAAa,aAAa,IAAI;AACzC,cAAM,KAAK,aAAa,aAAa,IAAI;AACzC,cAAM,KAAK,aAAa,aAAa,IAAI;AACzC,cAAM,KAAK,aAAa,aAAa,IAAI;AACzC,cAAM,KAAK,aAAa,aAAa,IAAI;AACzC,cAAM,MAAM,aAAa,aAAa,KAAK;AAE3C,cAAM,mBAAmB,CAAE;AAE3B,yBAAiB,IAAI,IAAI,SAAS,IAAI,EAAE;AACxC,yBAAiB,IAAI,IAAI,SAAS,IAAI,EAAE;AACxC,yBAAiB,IAAI,IAAI,SAAS,IAAI,EAAE;AAExC,kBAAU,KAAK,iBAAiB,IAAI,GAAG,iBAAiB,IAAI,GAAG,iBAAiB,IAAI,CAAC;AAIrF,YAAI,IAAI;AACN,2BAAiB,IAAI,IAAI,SAAS,IAAI,EAAE;AAAA,QACzC;AAED,YAAI,IAAI;AACN,2BAAiB,IAAI,IAAI,SAAS,IAAI,EAAE;AAAA,QACzC;AAED,YAAI,IAAI;AACN,2BAAiB,IAAI,IAAI,SAAS,IAAI,EAAE;AAAA,QACzC;AAED,YAAI,KAAK;AACP,2BAAiB,KAAK,IAAI;AAAA,QAC3B;AAED,YAAI,IAAI,OAAO,KAAK,gBAAgB,EAAE,QAAQ;AAC5C,6BAAmB,KAAK,gBAAgB;AAAA,QACzC;AAAA,MACF;AAED,eAAS,oBAAoB,IAAI;AACjC,eAAS,WAAW,IAAI,IAAI,YAAY,SAAS;AAEjD,aAAO;AAAA,IACR;AAED,aAAS,oBAAoB,gBAAgB;AAC3C,YAAM,aAAa,CAAE;AAErB,YAAM,iBAAiB,eAAe,iBAAiB,WAAW;AAElE,eAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,cAAM,gBAAgB,eAAe,CAAC;AACtC,cAAM,gBAAgB,mBAAmB,aAAa;AACtD,mBAAW,KAAK,aAAa;AAAA,MAC9B;AAED,aAAO;AAAA,IACR;AAED,aAAS,mBAAmB,eAAe;AACzC,YAAM,gBAAgB,CAAE;AAExB,oBAAc,UAAU,IAAI,cAAc,aAAa,UAAU;AAEjE,YAAM,YAAY,cAAc,aAAa,WAAW;AAExD,UAAI,WAAW;AACb,sBAAc,WAAW,IAAI,eAAe,SAAS;AAAA,MACtD;AAED,aAAO;AAAA,IACR;AAED,aAAS,eAAe,WAAW;AACjC,YAAM,IAAI,CAAE;AACZ,gBAAU,MAAM,GAAG,EAAE,QAAQ,SAAU,GAAG;AACxC,UAAE,KAAK,WAAW,CAAC,CAAC;AAAA,MAC5B,CAAO;AAED,YAAM,SAAS,IAAIC,cAAS;AAC5B,aAAO,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,GAAK,GAAK,GAAK,CAAG;AAEvG,aAAO;AAAA,IACR;AAED,aAAS,gBAAgB,YAAY;AACnC,YAAM,aAAa;AAAA,QACjB,MAAM,WAAW,aAAa,MAAM;AAAA,MACrC;AAED,YAAM,KAAK,WAAW,aAAa,IAAI;AAEvC,UAAI,IAAI;AACN,mBAAW,IAAI,IAAI;AAAA,MACpB;AAED,YAAM,MAAM,WAAW,aAAa,KAAK;AAEzC,UAAI,KAAK;AACP,mBAAW,KAAK,IAAI;AAAA,MACrB;AAED,YAAM,SAAS,WAAW,aAAa,QAAQ;AAE/C,UAAI,QAAQ;AACV,mBAAW,QAAQ,IAAI;AAAA,MACxB;AAED,YAAM,YAAY,WAAW,aAAa,WAAW;AAErD,UAAI,WAAW;AACb,mBAAW,WAAW,IAAI;AAAA,MAC3B;AAED,YAAM,aAAa,WAAW,aAAa,YAAY;AAEvD,UAAI,YAAY;AACd,mBAAW,YAAY,IAAI;AAAA,MAC5B;AAED,YAAM,OAAO,WAAW,aAAa,MAAM;AAE3C,UAAI,MAAM;AACR,mBAAW,MAAM,IAAI;AAAA,MACtB;AAED,YAAM,WAAW,WAAW,cAAc,MAAM;AAEhD,UAAI,UAAU;AACZ,mBAAW,MAAM,IAAI,cAAc,QAAQ;AAAA,MAC5C;AAED,YAAM,iBAAiB,WAAW,cAAc,YAAY;AAE5D,UAAI,gBAAgB;AAClB,mBAAW,YAAY,IAAI,oBAAoB,cAAc;AAAA,MAC9D;AAED,aAAO;AAAA,IACR;AAED,aAAS,mBAAmB,eAAe;AACzC,YAAM,gBAAgB,CAAE;AAExB,oBAAc,eAAe,IAAI,CAAE;AACnC,YAAM,qBAAqB,cAAc,iBAAiB,eAAe;AAEzE,eAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,KAAK;AAClD,cAAM,oBAAoB,mBAAmB,CAAC;AAC9C,cAAM,oBAAoB,uBAAuB,iBAAiB;AAClE,sBAAc,eAAe,EAAE,kBAAkB,IAAI,CAAC,IAAI;AAAA,MAC3D;AAID,oBAAc,WAAW,IAAI,CAAE;AAC/B,YAAM,kBAAkB,cAAc,iBAAiB,WAAW;AAElE,eAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,cAAM,iBAAiB,gBAAgB,CAAC;AACxC,cAAM,gBAAgB,mBAAmB,cAAc;AACvD,sBAAc,WAAW,EAAE,cAAc,IAAI,CAAC,IAAI;AAAA,MACnD;AAID,oBAAc,YAAY,IAAI,CAAE;AAChC,YAAM,kBAAkB,cAAc,iBAAiB,YAAY;AAEnE,eAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;AAC/C,cAAM,iBAAiB,gBAAgB,CAAC;AACxC,cAAM,iBAAiB,oBAAoB,cAAc;AACzD,sBAAc,YAAY,EAAE,eAAe,IAAI,CAAC,IAAI;AAAA,MACrD;AAID,oBAAc,6BAA6B,IAAI,CAAE;AACjD,YAAM,mCAAmC,cAAc,iBAAiB,6BAA6B;AAErG,eAAS,IAAI,GAAG,IAAI,iCAAiC,QAAQ,KAAK;AAChE,cAAM,kCAAkC,iCAAiC,CAAC;AAC1E,cAAM,kCAAkC,mCAAmC,+BAA+B;AAC1G,sBAAc,6BAA6B,EACzC,gCAAgC,IAAI,CAC9C,IAAY;AAAA,MACL;AAID,oBAAc,gBAAgB,IAAI,CAAE;AACpC,YAAM,uBAAuB,cAAc,iBAAiB,gBAAgB;AAE5E,eAAS,IAAI,GAAG,IAAI,qBAAqB,QAAQ,KAAK;AACpD,cAAM,sBAAsB,qBAAqB,CAAC;AAClD,cAAM,sBAAsB,yBAAyB,mBAAmB;AACxE,sBAAc,gBAAgB,EAAE,oBAAoB,IAAI,CAAC,IAAI;AAAA,MAC9D;AAID,oBAAc,QAAQ,IAAI,CAAE;AAC5B,YAAM,cAAc,cAAc,iBAAiB,QAAQ;AAE3D,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,cAAM,aAAa,YAAY,CAAC;AAChC,cAAM,aAAa,gBAAgB,UAAU;AAC7C,sBAAc,QAAQ,EAAE,WAAW,IAAI,CAAC,IAAI;AAAA,MAC7C;AAED,aAAO;AAAA,IACR;AAED,aAAS,eAAe,WAAW;AACjC,YAAM,YAAY,CAAE;AACpB,YAAM,YAAY,UAAU,iBAAiB,MAAM;AAEnD,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,cAAM,WAAW,UAAU,CAAC;AAC5B,cAAM,YAAY;AAAA,UAChB,UAAU,SAAS,aAAa,UAAU;AAAA,QAC3C;AACD,cAAM,YAAY,SAAS,aAAa,WAAW;AAEnD,YAAI,WAAW;AACb,oBAAU,WAAW,IAAI,eAAe,SAAS;AAAA,QAClD;AAED,kBAAU,KAAK,SAAS;AAAA,MACzB;AAED,aAAO;AAAA,IACR;AAED,aAAS,eAAe,WAAW;AACjC,YAAM,YAAY,EAAE,MAAM,UAAU,aAAa,MAAM,KAAK,aAAc;AAC1E,YAAM,gBAAgB,UAAU,iBAAiB,UAAU;AAE3D,UAAI,eAAe;AACjB,kBAAU,UAAU,IAAI,mBAAmB,aAAa;AAAA,MACzD;AAED,YAAM,gBAAgB,UAAU,cAAc,WAAW;AAEzD,UAAI,eAAe;AACjB,kBAAU,WAAW,IAAI,mBAAmB,aAAa;AAAA,MAC1D;AAED,YAAM,YAAY,UAAU,cAAc,OAAO;AAEjD,UAAI,WAAW;AACb,kBAAU,OAAO,IAAI,eAAe,SAAS;AAAA,MAC9C;AAED,aAAO;AAAA,IACR;AAED,aAAS,aAAa,gBAAgBC,UAAS,WAAW,aAAa;AACrE,YAAM,QAAQ,eAAe;AAC7B,YAAM,aAAa,UAAU,UAAU;AACvC,YAAM,YAAY,WAAW,KAAK;AAElC,UAAI,WAAW;AACb,cAAMR,QAAO,YAAY,UAAU,IAAI;AACvC,cAAM,OAAO,UAAU;AAEvB,cAAM,OAAO,IAAI,KAAK,CAACA,KAAI,GAAG,EAAE,MAAY;AAC5C,cAAM,YAAY,IAAI,gBAAgB,IAAI;AAE1C,cAAM,UAAU,cAAc,KAAK,WAAW,WAAY;AACxD,cAAI,gBAAgB,SAAS;AAAA,QACvC,CAAS;AAED,YAAI,gBAAgB;AAAS,kBAAQ,aAAa;AAAA;AAC7C,kBAAQ,WAAW;AAIxB,gBAAQ,UAAU,YAAU;AAAA,UAC1B,KAAK;AACH,oBAAQ,QAAQS,MAAc;AAC9B;AAAA,UAEF,KAAK;AACH,oBAAQ,QAAQC,MAAsB;AACtC;AAAA,UAEF,KAAK;AAAA,UACL,KAAK;AACH,oBAAQ,QAAQC,MAAmB;AACnC;AAAA,UAEF;AACE,oBAAQ,QAAQF,MAAc;AAAA,QACjC;AAED,gBAAQ,UAAU,YAAU;AAAA,UAC1B,KAAK;AACH,oBAAQ,QAAQA,MAAc;AAC9B;AAAA,UAEF,KAAK;AACH,oBAAQ,QAAQC,MAAsB;AACtC;AAAA,UAEF,KAAK;AAAA,UACL,KAAK;AACH,oBAAQ,QAAQC,MAAmB;AACnC;AAAA,UAEF;AACE,oBAAQ,QAAQF,MAAc;AAAA,QACjC;AAED,gBAAQ,UAAU,QAAM;AAAA,UACtB,KAAK;AACH,oBAAQ,YAAYG,MAAY;AAChC,oBAAQ,YAAYC,MAAwB;AAC5C;AAAA,UAEF,KAAK;AACH,oBAAQ,YAAYD,MAAY;AAChC,oBAAQ,YAAYA,MAAY;AAChC;AAAA,UAEF,KAAK;AACH,oBAAQ,YAAYE,MAAa;AACjC,oBAAQ,YAAYA,MAAa;AACjC;AAAA,UAEF;AACE,oBAAQ,YAAYF,MAAY;AAChC,oBAAQ,YAAYC,MAAwB;AAAA,QAC/C;AAED,eAAO;AAAA,MACf,OAAa;AACL,eAAO;AAAA,MACR;AAAA,IACF;AAED,aAAS,yBACP,eACA,oBACA,UACAL,UACA,WACA,aACA,YACA;AACA,YAAM,eAAe,WAAW;AAEhC,YAAM,cAAc,CAAE;AAEtB,eAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG,KAAK;AACzD,cAAM,mBAAmB,mBAAmB,CAAC;AAC7C,cAAM,SAAS,iBAAiB,OAAO,SAAY,iBAAiB,KAAK;AAEzE,YAAI,YAAY,MAAM,MAAM;AAAW,sBAAY,MAAM,IAAI,CAAE;AAE/D,oBAAY,MAAM,EAAE,KAAK,gBAAgB;AAAA,MAC1C;AAID,YAAM,OAAO,OAAO,KAAK,WAAW;AACpC,YAAM,SAAS,CAAE;AAEjB,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK;AAC3C,cAAM,gBAAgB,KAAK,CAAC;AAC5B,cAAM,0BAA0B,YAAY,aAAa;AACzD,cAAM,mBAAmB,cAAc,cAAc,aAAa;AAClE,cAAM,WAAW,SAAS,kBAAkBA,UAAS,WAAW,aAAa,YAAY,iBAAiB;AAI1G,cAAM,WAAW,IAAIO,qBAAgB;AAErC,cAAM,eAAe,CAAE;AAEvB,cAAM,WAAW,SAAS;AAE1B,iBAAS,IAAI,GAAG,KAAK,wBAAwB,QAAQ,IAAI,IAAI,KAAK;AAChE,gBAAM,mBAAmB,wBAAwB,CAAC;AAElD,uBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,uBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,uBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAEvD,uBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,uBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,uBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAEvD,uBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,uBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,uBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAAA,QACxD;AAED,iBAAS,aAAa,YAAY,IAAIC,MAAAA,uBAAuB,cAAc,CAAC,CAAC;AAI7E,cAAM,OAAO,IAAIC,WAAK,UAAU,QAAQ;AACxC,eAAO,KAAK,IAAI;AAAA,MACjB;AAED,aAAO;AAAA,IACR;AAED,aAAS,kBACP,gBACA,oBACA,UACAT,UACA,WACA,aACA,YACA;AAGA,YAAM,WAAW,IAAIO,qBAAgB;AAErC,YAAM,eAAe,CAAE;AACvB,YAAM,SAAS,CAAE;AAEjB,YAAM,WAAW,SAAS;AAC1B,YAAM,MAAM,eAAe;AAE3B,eAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG,KAAK;AACzD,cAAM,mBAAmB,mBAAmB,CAAC;AAE7C,qBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,qBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,qBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAEvD,qBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,qBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,qBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAEvD,qBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,qBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AACvD,qBAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAIvD,eAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAC5C,eAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAE5C,eAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAC5C,eAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAE5C,eAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAC5C,eAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,CAAC,CAAC;AAAA,MAC7C;AAED,eAAS,aAAa,YAAY,IAAIC,MAAAA,uBAAuB,cAAc,CAAC,CAAC;AAC7E,eAAS,aAAa,MAAM,IAAIA,MAAAA,uBAAuB,QAAQ,CAAC,CAAC;AAIjE,YAAM,UAAU,SAAS,gBAAgBR,UAAS,WAAW,aAAa,YAAY,YAAY;AAElG,YAAM,WAAW,IAAIU,wBAAkB,EAAE,KAAK,SAAS,aAAa,MAAM;AAI1E,YAAM,OAAO,IAAID,WAAK,UAAU,QAAQ;AAExC,aAAO;AAAA,IACR;AAED,aAAS,qBAAqB,YAAY,oBAAoB,UAAUT,UAAS,WAAW,YAAY;AAGtG,YAAM,WAAW,IAAIO,qBAAgB;AAErC,YAAM,eAAe,CAAE;AACvB,YAAM,YAAY,CAAE;AAEpB,YAAM,WAAW,SAAS;AAC1B,YAAM,SAAS,WAAW;AAE1B,eAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG,KAAK;AACzD,cAAM,mBAAmB,mBAAmB,CAAC;AAE7C,cAAM,KAAK,iBAAiB;AAC5B,cAAM,KAAK,iBAAiB;AAC5B,cAAM,KAAK,iBAAiB;AAE5B,qBAAa,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACtC,qBAAa,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACtC,qBAAa,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AAEtC,qBAAa,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACtC,qBAAa,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACtC,qBAAa,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AAEtC,qBAAa,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACtC,qBAAa,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACtC,qBAAa,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AAItC,cAAM,KAAK,iBAAiB,OAAO,SAAY,iBAAiB,KAAK,WAAW;AAChF,cAAM,KAAK,iBAAiB,OAAO,SAAY,iBAAiB,KAAK;AACrE,cAAM,KAAK,iBAAiB,OAAO,SAAY,iBAAiB,KAAK;AAErE,kBAAU,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AACjC,kBAAU,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AACjC,kBAAU,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AAEjC,kBAAU,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AACjC,kBAAU,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AACjC,kBAAU,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AAEjC,kBAAU,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AACjC,kBAAU,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AACjC,kBAAU,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC;AAAA,MAClC;AAED,eAAS,aAAa,YAAY,IAAIC,MAAAA,uBAAuB,cAAc,CAAC,CAAC;AAC7E,eAAS,aAAa,SAAS,IAAIA,MAAAA,uBAAuB,WAAW,CAAC,CAAC;AAIvE,YAAM,WAAW,IAAIE,wBAAkB,EAAE,cAAc,MAAM,aAAa,MAAM;AAIhF,YAAM,OAAO,IAAID,WAAK,UAAU,QAAQ;AAExC,aAAO;AAAA,IACR;AAED,aAAS,iBAAiB,UAAU;AAClC,YAAM,WAAW,IAAIF,qBAAgB;AACrC,eAAS,SAAS,IAAII,MAAe,gBAAC,SAAS,WAAW,GAAG,CAAC,CAAC;AAC/D,eAAS,aAAa,YAAY,IAAIA,MAAAA,gBAAgB,SAAS,UAAU,GAAG,CAAC,CAAC;AAE9E,YAAM,WAAW,IAAID,wBAAkB,EAAE,OAAO,UAAU,aAAa,MAAM;AAE7E,YAAM,OAAO,IAAID,WAAK,UAAU,QAAQ;AAExC,aAAO;AAAA,IACR;AAED,aAAS,YAAY,aAAa,UAAUT,UAAS,WAAW,aAAa,YAAY;AACvF,YAAM,OAAO,OAAO,KAAK,WAAW;AACpC,YAAM,SAAS,CAAE;AAEjB,eAAS,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,IAAI,KAAK;AAC7C,cAAM,aAAa,KAAK,CAAC;AACzB,cAAM,qBAAqB,YAAY,UAAU;AACjD,cAAM,eAAe,gBAAgB,YAAY,SAAS;AAE1D,gBAAQ,cAAY;AAAA,UAClB,KAAK;AACH,kBAAM,gBAAgB,UAAU,UAAU,cAAc,UAAU;AAClE,kBAAM,YAAY;AAAA,cAChB;AAAA,cACA;AAAA,cACA;AAAA,cACAA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACD;AAED,qBAAS,IAAI,GAAG,KAAK,UAAU,QAAQ,IAAI,IAAI,KAAK;AAClD,qBAAO,KAAK,UAAU,CAAC,CAAC;AAAA,YACzB;AAED;AAAA,UAEF,KAAK;AACH,kBAAM,iBAAiB,UAAU,UAAU,eAAe,UAAU;AACpE,mBAAO;AAAA,cACL;AAAA,gBACE;AAAA,gBACA;AAAA,gBACA;AAAA,gBACAA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACD;AAAA,YACF;AACD;AAAA,UAEF,KAAK;AACH,kBAAM,aAAa,UAAU,UAAU,WAAW,UAAU;AAC5D,mBAAO,KAAK,qBAAqB,YAAY,oBAAoB,UAAUA,UAAS,WAAW,UAAU,CAAC;AAC1G;AAAA,UAEF,KAAK;AACH,mBAAO,KAAK,iBAAiB,QAAQ,CAAC;AACtC;AAAA,UAEF;AACE,oBAAQ,MAAM,6CAA6C;AAAA,QAC9D;AAAA,MACF;AAED,aAAO;AAAA,IACR;AAED,aAAS,gBAAgB,KAAK,WAAW;AACvC,UAAI,UAAU,UAAU,eAAe,GAAG,MAAM,QAAW;AACzD,eAAO;AAAA,MACf,WAAiB,UAAU,UAAU,cAAc,GAAG,MAAM,QAAW;AAC/D,eAAO;AAAA,MACf,WAAiB,UAAU,UAAU,WAAW,GAAG,MAAM,QAAW;AAC5D,eAAO;AAAA,MACf,WAAiB,QAAQ,WAAW;AAC5B,eAAO;AAAA,MACf,OAAa;AACL,eAAO;AAAA,MACR;AAAA,IACF;AAED,aAAS,cAAc,WAAW,UAAU,YAAY;AACtD,YAAM,cAAc,CAAE;AAEtB,YAAM,qBAAqB,SAAS,oBAAoB;AAExD,YAAM,YAAY,WAAW;AAE7B,eAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG,KAAK;AACzD,cAAM,mBAAmB,mBAAmB,CAAC;AAC7C,YAAI,MAAM,iBAAiB,QAAQ,SAAY,iBAAiB,MAAM;AAEtE,YAAI,QAAQ;AAAW,gBAAM;AAE7B,YAAI,YAAY,GAAG,MAAM;AAAW,sBAAY,GAAG,IAAI,CAAE;AAEzD,oBAAY,GAAG,EAAE,KAAK,gBAAgB;AAAA,MACvC;AAED,aAAO;AAAA,IACR;AAED,aAAS,WAAW,UAAUA,UAAS,WAAW,aAAa,YAAY;AACzE,YAAM,QAAQ,IAAIY,YAAO;AAEzB,YAAM,cAAc,cAAc,WAAW,UAAU,UAAU;AACjE,YAAM,SAAS,YAAY,aAAa,UAAUZ,UAAS,WAAW,aAAa,UAAU;AAE7F,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG,KAAK;AAC7C,cAAM,IAAI,OAAO,CAAC,CAAC;AAAA,MACpB;AAED,aAAO;AAAA,IACR;AAED,aAAS,gBAAgB,YAAY,UAAU,UAAU;AACvD,UAAI,CAAC,YAAY;AACf;AAAA,MACD;AAED,YAAM,sBAAsB,CAAE;AAC9B,YAAM,OAAO,OAAO,KAAK,UAAU;AAEnC,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAM,KAAK,KAAK,CAAC;AAEjB,iBAAS,IAAI,GAAG,IAAI,MAAM,oBAAoB,QAAQ,KAAK;AACzD,gBAAM,YAAY,MAAM,oBAAoB,CAAC;AAE7C,cAAI,UAAU,OAAO,IAAI;AACvB,gCAAoB,KAAK,SAAS;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAED,eAAS,IAAI,GAAG,IAAI,oBAAoB,QAAQ,KAAK;AACnD,cAAM,YAAY,oBAAoB,CAAC;AACvC,kBAAU,MAAM,UAAU,WAAW,UAAU,IAAI,CAAC,GAAG,QAAQ;AAAA,MAChE;AAAA,IACF;AAED,aAAS,SAASR,OAAMQ,UAAS,WAAW,aAAa,YAAY,SAAS;AAC5E,UAAIR,MAAK,UAAU;AAAW,eAAOA,MAAK;AAE1C,MAAAA,MAAK,QAAQ,QAAQA,OAAMQ,UAAS,WAAW,aAAa,UAAU;AAEtE,aAAOR,MAAK;AAAA,IACb;AAED,aAAS,kBAAkB,cAAcQ,UAAS,WAAW;AAC3D,UAAI;AAEJ,YAAM,sBAAsB,aAAa;AACzC,YAAM,8BAA8B,UAAU,UAAU;AAExD,UAAI,wBAAwB,QAAQ,4BAA4B,mBAAmB,MAAM,QAAW;AAGlG,cAAM,4BAA4B,4BAA4B,mBAAmB;AACjF,cAAM,eAAe,0BAA0B,KAAK,aAAa,KAAK;AAEtE,mBAAW,IAAIa,MAAAA,qBAAqB;AAAA,UAClC,aAAa;AAAA,UACb,WAAW,aAAa;AAAA,UACxB,WAAW,aAAa;AAAA,QAClC,CAAS;AAAA,MACT,OAAa;AAGL,mBAAW,IAAIH,MAAiB,kBAAC,EAAE,aAAa,KAAI,CAAE;AAAA,MACvD;AAED,eAAS,OAAO,aAAa;AAI7B,YAAM,eAAe,aAAa;AAElC,YAAM,QAAQ,aAAa,UAAU,GAAG,CAAC;AACzC,eAAS,MAAM,SAAS,KAAK;AAC7B,eAAS,MAAM,oBAAqB;AAIpC,UAAI,aAAa,WAAW,GAAG;AAC7B,iBAAS,UAAU,SAAS,aAAa,OAAO,CAAC,IAAI,aAAa,OAAO,CAAC,GAAG,EAAE,IAAI;AAAA,MACpF;AAED,aAAO;AAAA,IACR;AAED,aAAS,eAAe,eAAeV,UAAS,WAAW,aAAa;AACtE,YAAM,YAAY,IAAIY,YAAO;AAE7B,eAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,cAAM,YAAY,cAAc,CAAC;AACjC,YAAIE,SAAQd,SAAQ,UAAU,QAAQ;AAEtC,YAAIc,WAAU,QAAW;AACvB,sBAAY,UAAU,UAAUd,UAAS,WAAW,WAAW;AAC/D,UAAAc,SAAQd,SAAQ,UAAU,QAAQ;AAAA,QACnC;AAED,cAAM,WAAWc,OAAM,MAAO;AAI9B,cAAM,YAAY,UAAU;AAE5B,YAAI,WAAW;AACb,mBAAS,aAAa,SAAS;AAAA,QAChC;AAED,kBAAU,IAAI,QAAQ;AAAA,MACvB;AAED,aAAO;AAAA,IACR;AAED,aAAS,YAAY,UAAUd,UAAS,WAAW,aAAa;AAC9D,YAAM,aAAa,UAAU,WAAW,EAAE,QAAQ,EAAE,QAAQ;AAE5D,UAAI,WAAW,MAAM,GAAG;AACtB,cAAM,WAAW,WAAW,MAAM;AAElC,cAAM,aAAa,UAAU,YAAY;AACzC,cAAM,WAAW,UAAU,KAAK;AAEhC,wBAAgB,YAAY,UAAU,QAAQ;AAE9C,QAAAA,SAAQ,WAAW,EAAE,IAAI,SAAS,UAAUA,UAAS,WAAW,aAAa,YAAY,UAAU;AAAA,MAC3G,OAAa;AACL,cAAM,gBAAgB,WAAW,YAAY;AAE7C,QAAAA,SAAQ,WAAW,EAAE,IAAI,SAAS,eAAeA,UAAS,WAAW,aAAa,YAAY,cAAc;AAAA,MAC7G;AAAA,IACF;AAED,aAAS,aAAae,UAAS;AAC7B,YAAM,aAAaA,SAAQ;AAC3B,YAAM,YAAYA,SAAQ;AAC1B,YAAMf,WAAU,CAAE;AAClB,YAAM,aAAa,OAAO,KAAK,UAAU;AACzC,YAAM,cAAc,CAAE;AAItB,UAAI,WAAW;AACb,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;AAChD,gBAAM,WAAW,UAAU,CAAC;AAC5B,gBAAM,aAAa,SAAS,OAAO,UAAU,CAAC;AAE9C,cAAIe,SAAQ,QAAQ,UAAU,GAAG;AAC/B,wBAAY,SAAS,MAAM,IAAIA,SAAQ,QAAQ,UAAU;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AAID,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,cAAM,YAAY,WAAW,CAAC;AAC9B,cAAM,YAAY,WAAW,SAAS;AAEtC,cAAM,YAAY,OAAO,KAAK,UAAU,WAAW,EAAE,QAAQ,CAAC;AAE9D,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,gBAAM,WAAW,UAAU,CAAC;AAE5B,sBAAY,UAAUf,UAAS,WAAW,WAAW;AAAA,QACtD;AAAA,MACF;AAED,aAAOA;AAAA,IACR;AAED,aAAS,iBAAiB,MAAM;AAC9B,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAM,MAAM,KAAK,CAAC;AAClB,cAAM,YAAY,IAAI,OAAO,MAAM,GAAG,EAAE,IAAK;AAE7C,YAAI,UAAU,kBAAkB;AAAS,iBAAO;AAAA,MACjD;AAAA,IACF;AAED,aAAS,MAAMA,UAASe,UAAS;AAC/B,YAAM,QAAQ,IAAIH,YAAO;AAEzB,YAAM,eAAe,iBAAiBG,SAAQ,MAAM,CAAC;AACrD,YAAM,YAAYA,SAAQ,MAAM,aAAa,QAAQ,EAAE,UAAU,CAAC,CAAC,EAAE,OAAO;AAE5E,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,cAAM,YAAY,UAAU,CAAC;AAC7B,cAAM,WAAWf,SAAQ,UAAU,UAAU,CAAC;AAI9C,cAAM,YAAY,UAAU,WAAW;AAEvC,YAAI,WAAW;AACb,mBAAS,aAAa,SAAS;AAAA,QAChC;AAED,cAAM,IAAI,QAAQ;AAAA,MACnB;AAED,aAAO;AAAA,IACR;AAED,UAAM,UAAU,aAAa,IAAI;AACjC,UAAM,UAAU,aAAa,OAAO;AAEpC,WAAO,MAAM,SAAS,OAAO;AAAA,EAC9B;AAAA,EAED,aAAa,WAAW;AACtB,SAAK,oBAAoB,KAAK,SAAS;AAAA,EACxC;AACH;;"}
@@ -1,5 +1,6 @@
1
- import { Loader, FileLoader, TextureLoader, LoaderUtils, Group, Color, Matrix4, BufferGeometry, Float32BufferAttribute, Mesh, MeshPhongMaterial, BufferAttribute, MeshStandardMaterial, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, LinearFilter, LinearMipmapLinearFilter, NearestFilter } from "three";
1
+ import { Loader, FileLoader, TextureLoader, Group, Color, Matrix4, BufferGeometry, Float32BufferAttribute, Mesh, MeshPhongMaterial, BufferAttribute, MeshStandardMaterial, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, LinearFilter, LinearMipmapLinearFilter, NearestFilter } from "three";
2
2
  import { unzipSync } from "fflate";
3
+ import { decodeText } from "../_polyfill/LoaderUtils.js";
3
4
  class ThreeMFLoader extends Loader {
4
5
  constructor(manager) {
5
6
  super(manager);
@@ -68,17 +69,17 @@ class ThreeMFLoader extends Loader {
68
69
  ;
69
70
  }
70
71
  const relsView = zip[relsName];
71
- const relsFileText = LoaderUtils.decodeText(relsView);
72
+ const relsFileText = decodeText(relsView);
72
73
  const rels = parseRelsXml(relsFileText);
73
74
  if (modelRelsName) {
74
75
  const relsView2 = zip[modelRelsName];
75
- const relsFileText2 = LoaderUtils.decodeText(relsView2);
76
+ const relsFileText2 = decodeText(relsView2);
76
77
  modelRels = parseRelsXml(relsFileText2);
77
78
  }
78
79
  for (let i = 0; i < modelPartNames.length; i++) {
79
80
  const modelPart = modelPartNames[i];
80
81
  const view = zip[modelPart];
81
- const fileText = LoaderUtils.decodeText(view);
82
+ const fileText = decodeText(view);
82
83
  const xmlData = new DOMParser().parseFromString(fileText, "application/xml");
83
84
  if (xmlData.documentElement.nodeName.toLowerCase() !== "model") {
84
85
  console.error("THREE.3MFLoader: Error loading 3MF - no 3MF document found: ", modelPart);