three-stdlib 2.30.2 → 2.30.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -1 +1 @@
1
- {"version":3,"file":"STLLoader.js","sources":["../../src/loaders/STLLoader.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n FileLoader,\n Float32BufferAttribute,\n Loader,\n LoaderUtils,\n Vector3,\n} from 'three'\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n * Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n * There is perhaps some question as to how valid it is to always assume little-endian-ness.\n * ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n * const loader = new STLLoader();\n * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n * scene.add( new THREE.Mesh( geometry ) );\n * });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n * // use the same code to load STL as above\n * if (geometry.hasColors) {\n * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n * } else { .... }\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n * const materials = [];\n * const nGeometryGroups = geometry.groups.length;\n *\n * const colorMap = ...; // Some logic to index colors.\n *\n * for (let i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tconst material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n * }\n *\n * materials.push(material);\n * const mesh = new THREE.Mesh(geometry, materials);\n */\n\nclass STLLoader extends Loader {\n constructor(manager) {\n super(manager)\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(this.manager)\n loader.setPath(this.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(this.requestHeader)\n loader.setWithCredentials(this.withCredentials)\n\n loader.load(\n url,\n function (text) {\n try {\n onLoad(scope.parse(text))\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 function isBinary(data) {\n const reader = new DataView(data)\n const face_size = (32 / 8) * 3 + (32 / 8) * 3 * 3 + 16 / 8\n const n_faces = reader.getUint32(80, true)\n const expect = 80 + 32 / 8 + n_faces * face_size\n\n if (expect === reader.byteLength) {\n return true\n }\n\n // An ASCII STL data must begin with 'solid ' as the first six bytes.\n // However, ASCII STLs lacking the SPACE after the 'd' are known to be\n // plentiful. So, check the first 5 bytes for 'solid'.\n\n // Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n // https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n // Search for \"solid\" to start anywhere after those prefixes.\n\n // US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n const solid = [115, 111, 108, 105, 100]\n\n for (let off = 0; off < 5; off++) {\n // If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n if (matchDataViewAt(solid, reader, off)) return false\n }\n\n // Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n return true\n }\n\n function matchDataViewAt(query, reader, offset) {\n // Check if each byte in query matches the corresponding byte from the current offset\n\n for (let i = 0, il = query.length; i < il; i++) {\n if (query[i] !== reader.getUint8(offset + i, false)) return false\n }\n\n return true\n }\n\n function parseBinary(data) {\n const reader = new DataView(data)\n const faces = reader.getUint32(80, true)\n\n let r,\n g,\n b,\n hasColors = false,\n colors\n let defaultR, defaultG, defaultB, alpha\n\n // process STL header\n // check for default color in header (\"COLOR=rgba\" sequence).\n\n for (let index = 0; index < 80 - 10; index++) {\n if (\n reader.getUint32(index, false) == 0x434f4c4f /*COLO*/ &&\n reader.getUint8(index + 4) == 0x52 /*'R'*/ &&\n reader.getUint8(index + 5) == 0x3d /*'='*/\n ) {\n hasColors = true\n colors = new Float32Array(faces * 3 * 3)\n\n defaultR = reader.getUint8(index + 6) / 255\n defaultG = reader.getUint8(index + 7) / 255\n defaultB = reader.getUint8(index + 8) / 255\n alpha = reader.getUint8(index + 9) / 255\n }\n }\n\n const dataOffset = 84\n const faceLength = 12 * 4 + 2\n\n const geometry = new BufferGeometry()\n\n const vertices = new Float32Array(faces * 3 * 3)\n const normals = new Float32Array(faces * 3 * 3)\n\n for (let face = 0; face < faces; face++) {\n const start = dataOffset + face * faceLength\n const normalX = reader.getFloat32(start, true)\n const normalY = reader.getFloat32(start + 4, true)\n const normalZ = reader.getFloat32(start + 8, true)\n\n if (hasColors) {\n const packedColor = reader.getUint16(start + 48, true)\n\n if ((packedColor & 0x8000) === 0) {\n // facet has its own unique color\n\n r = (packedColor & 0x1f) / 31\n g = ((packedColor >> 5) & 0x1f) / 31\n b = ((packedColor >> 10) & 0x1f) / 31\n } else {\n r = defaultR\n g = defaultG\n b = defaultB\n }\n }\n\n for (let i = 1; i <= 3; i++) {\n const vertexstart = start + i * 12\n const componentIdx = face * 3 * 3 + (i - 1) * 3\n\n vertices[componentIdx] = reader.getFloat32(vertexstart, true)\n vertices[componentIdx + 1] = reader.getFloat32(vertexstart + 4, true)\n vertices[componentIdx + 2] = reader.getFloat32(vertexstart + 8, true)\n\n normals[componentIdx] = normalX\n normals[componentIdx + 1] = normalY\n normals[componentIdx + 2] = normalZ\n\n if (hasColors) {\n colors[componentIdx] = r\n colors[componentIdx + 1] = g\n colors[componentIdx + 2] = b\n }\n }\n }\n\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n geometry.setAttribute('normal', new BufferAttribute(normals, 3))\n\n if (hasColors) {\n geometry.setAttribute('color', new BufferAttribute(colors, 3))\n geometry.hasColors = true\n geometry.alpha = alpha\n }\n\n return geometry\n }\n\n function parseASCII(data) {\n const geometry = new BufferGeometry()\n const patternSolid = /solid([\\s\\S]*?)endsolid/g\n const patternFace = /facet([\\s\\S]*?)endfacet/g\n let faceCounter = 0\n\n const patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source\n const patternVertex = new RegExp('vertex' + patternFloat + patternFloat + patternFloat, 'g')\n const patternNormal = new RegExp('normal' + patternFloat + patternFloat + patternFloat, 'g')\n\n const vertices = []\n const normals = []\n\n const normal = new Vector3()\n\n let result\n\n let groupCount = 0\n let startVertex = 0\n let endVertex = 0\n\n while ((result = patternSolid.exec(data)) !== null) {\n startVertex = endVertex\n\n const solid = result[0]\n\n while ((result = patternFace.exec(solid)) !== null) {\n let vertexCountPerFace = 0\n let normalCountPerFace = 0\n\n const text = result[0]\n\n while ((result = patternNormal.exec(text)) !== null) {\n normal.x = parseFloat(result[1])\n normal.y = parseFloat(result[2])\n normal.z = parseFloat(result[3])\n normalCountPerFace++\n }\n\n while ((result = patternVertex.exec(text)) !== null) {\n vertices.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3]))\n normals.push(normal.x, normal.y, normal.z)\n vertexCountPerFace++\n endVertex++\n }\n\n // every face have to own ONE valid normal\n\n if (normalCountPerFace !== 1) {\n console.error(\"THREE.STLLoader: Something isn't right with the normal of face number \" + faceCounter)\n }\n\n // each face have to own THREE valid vertices\n\n if (vertexCountPerFace !== 3) {\n console.error(\"THREE.STLLoader: Something isn't right with the vertices of face number \" + faceCounter)\n }\n\n faceCounter++\n }\n\n const start = startVertex\n const count = endVertex - startVertex\n\n geometry.addGroup(start, count, groupCount)\n groupCount++\n }\n\n geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3))\n geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3))\n\n return geometry\n }\n\n function ensureString(buffer) {\n if (typeof buffer !== 'string') {\n return LoaderUtils.decodeText(new Uint8Array(buffer))\n }\n\n return buffer\n }\n\n function ensureBinary(buffer) {\n if (typeof buffer === 'string') {\n const array_buffer = new Uint8Array(buffer.length)\n for (let i = 0; i < buffer.length; i++) {\n array_buffer[i] = buffer.charCodeAt(i) & 0xff // implicitly assumes little-endian\n }\n\n return array_buffer.buffer || array_buffer\n } else {\n return buffer\n }\n }\n\n // start\n\n const binData = ensureBinary(data)\n\n return isBinary(binData) ? parseBinary(binData) : parseASCII(ensureString(data))\n }\n}\n\nexport { STLLoader }\n"],"names":["data"],"mappings":"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"}
1
+ {"version":3,"file":"STLLoader.js","sources":["../../src/loaders/STLLoader.js"],"sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n FileLoader,\n Float32BufferAttribute,\n Loader,\n LoaderUtils,\n Vector3,\n} from 'three'\nimport { decodeText } from '../_polyfill/LoaderUtils'\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n * Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n * There is perhaps some question as to how valid it is to always assume little-endian-ness.\n * ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n * const loader = new STLLoader();\n * loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n * scene.add( new THREE.Mesh( geometry ) );\n * });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n * // use the same code to load STL as above\n * if (geometry.hasColors) {\n * material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n * } else { .... }\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * const mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n * const materials = [];\n * const nGeometryGroups = geometry.groups.length;\n *\n * const colorMap = ...; // Some logic to index colors.\n *\n * for (let i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tconst material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n * }\n *\n * materials.push(material);\n * const mesh = new THREE.Mesh(geometry, materials);\n */\n\nclass STLLoader extends Loader {\n constructor(manager) {\n super(manager)\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\n const loader = new FileLoader(this.manager)\n loader.setPath(this.path)\n loader.setResponseType('arraybuffer')\n loader.setRequestHeader(this.requestHeader)\n loader.setWithCredentials(this.withCredentials)\n\n loader.load(\n url,\n function (text) {\n try {\n onLoad(scope.parse(text))\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 function isBinary(data) {\n const reader = new DataView(data)\n const face_size = (32 / 8) * 3 + (32 / 8) * 3 * 3 + 16 / 8\n const n_faces = reader.getUint32(80, true)\n const expect = 80 + 32 / 8 + n_faces * face_size\n\n if (expect === reader.byteLength) {\n return true\n }\n\n // An ASCII STL data must begin with 'solid ' as the first six bytes.\n // However, ASCII STLs lacking the SPACE after the 'd' are known to be\n // plentiful. So, check the first 5 bytes for 'solid'.\n\n // Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n // https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n // Search for \"solid\" to start anywhere after those prefixes.\n\n // US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n const solid = [115, 111, 108, 105, 100]\n\n for (let off = 0; off < 5; off++) {\n // If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n if (matchDataViewAt(solid, reader, off)) return false\n }\n\n // Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n return true\n }\n\n function matchDataViewAt(query, reader, offset) {\n // Check if each byte in query matches the corresponding byte from the current offset\n\n for (let i = 0, il = query.length; i < il; i++) {\n if (query[i] !== reader.getUint8(offset + i, false)) return false\n }\n\n return true\n }\n\n function parseBinary(data) {\n const reader = new DataView(data)\n const faces = reader.getUint32(80, true)\n\n let r,\n g,\n b,\n hasColors = false,\n colors\n let defaultR, defaultG, defaultB, alpha\n\n // process STL header\n // check for default color in header (\"COLOR=rgba\" sequence).\n\n for (let index = 0; index < 80 - 10; index++) {\n if (\n reader.getUint32(index, false) == 0x434f4c4f /*COLO*/ &&\n reader.getUint8(index + 4) == 0x52 /*'R'*/ &&\n reader.getUint8(index + 5) == 0x3d /*'='*/\n ) {\n hasColors = true\n colors = new Float32Array(faces * 3 * 3)\n\n defaultR = reader.getUint8(index + 6) / 255\n defaultG = reader.getUint8(index + 7) / 255\n defaultB = reader.getUint8(index + 8) / 255\n alpha = reader.getUint8(index + 9) / 255\n }\n }\n\n const dataOffset = 84\n const faceLength = 12 * 4 + 2\n\n const geometry = new BufferGeometry()\n\n const vertices = new Float32Array(faces * 3 * 3)\n const normals = new Float32Array(faces * 3 * 3)\n\n for (let face = 0; face < faces; face++) {\n const start = dataOffset + face * faceLength\n const normalX = reader.getFloat32(start, true)\n const normalY = reader.getFloat32(start + 4, true)\n const normalZ = reader.getFloat32(start + 8, true)\n\n if (hasColors) {\n const packedColor = reader.getUint16(start + 48, true)\n\n if ((packedColor & 0x8000) === 0) {\n // facet has its own unique color\n\n r = (packedColor & 0x1f) / 31\n g = ((packedColor >> 5) & 0x1f) / 31\n b = ((packedColor >> 10) & 0x1f) / 31\n } else {\n r = defaultR\n g = defaultG\n b = defaultB\n }\n }\n\n for (let i = 1; i <= 3; i++) {\n const vertexstart = start + i * 12\n const componentIdx = face * 3 * 3 + (i - 1) * 3\n\n vertices[componentIdx] = reader.getFloat32(vertexstart, true)\n vertices[componentIdx + 1] = reader.getFloat32(vertexstart + 4, true)\n vertices[componentIdx + 2] = reader.getFloat32(vertexstart + 8, true)\n\n normals[componentIdx] = normalX\n normals[componentIdx + 1] = normalY\n normals[componentIdx + 2] = normalZ\n\n if (hasColors) {\n colors[componentIdx] = r\n colors[componentIdx + 1] = g\n colors[componentIdx + 2] = b\n }\n }\n }\n\n geometry.setAttribute('position', new BufferAttribute(vertices, 3))\n geometry.setAttribute('normal', new BufferAttribute(normals, 3))\n\n if (hasColors) {\n geometry.setAttribute('color', new BufferAttribute(colors, 3))\n geometry.hasColors = true\n geometry.alpha = alpha\n }\n\n return geometry\n }\n\n function parseASCII(data) {\n const geometry = new BufferGeometry()\n const patternSolid = /solid([\\s\\S]*?)endsolid/g\n const patternFace = /facet([\\s\\S]*?)endfacet/g\n let faceCounter = 0\n\n const patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source\n const patternVertex = new RegExp('vertex' + patternFloat + patternFloat + patternFloat, 'g')\n const patternNormal = new RegExp('normal' + patternFloat + patternFloat + patternFloat, 'g')\n\n const vertices = []\n const normals = []\n\n const normal = new Vector3()\n\n let result\n\n let groupCount = 0\n let startVertex = 0\n let endVertex = 0\n\n while ((result = patternSolid.exec(data)) !== null) {\n startVertex = endVertex\n\n const solid = result[0]\n\n while ((result = patternFace.exec(solid)) !== null) {\n let vertexCountPerFace = 0\n let normalCountPerFace = 0\n\n const text = result[0]\n\n while ((result = patternNormal.exec(text)) !== null) {\n normal.x = parseFloat(result[1])\n normal.y = parseFloat(result[2])\n normal.z = parseFloat(result[3])\n normalCountPerFace++\n }\n\n while ((result = patternVertex.exec(text)) !== null) {\n vertices.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3]))\n normals.push(normal.x, normal.y, normal.z)\n vertexCountPerFace++\n endVertex++\n }\n\n // every face have to own ONE valid normal\n\n if (normalCountPerFace !== 1) {\n console.error(\"THREE.STLLoader: Something isn't right with the normal of face number \" + faceCounter)\n }\n\n // each face have to own THREE valid vertices\n\n if (vertexCountPerFace !== 3) {\n console.error(\"THREE.STLLoader: Something isn't right with the vertices of face number \" + faceCounter)\n }\n\n faceCounter++\n }\n\n const start = startVertex\n const count = endVertex - startVertex\n\n geometry.addGroup(start, count, groupCount)\n groupCount++\n }\n\n geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3))\n geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3))\n\n return geometry\n }\n\n function ensureString(buffer) {\n if (typeof buffer !== 'string') {\n return decodeText(new Uint8Array(buffer))\n }\n\n return buffer\n }\n\n function ensureBinary(buffer) {\n if (typeof buffer === 'string') {\n const array_buffer = new Uint8Array(buffer.length)\n for (let i = 0; i < buffer.length; i++) {\n array_buffer[i] = buffer.charCodeAt(i) & 0xff // implicitly assumes little-endian\n }\n\n return array_buffer.buffer || array_buffer\n } else {\n return buffer\n }\n }\n\n // start\n\n const binData = ensureBinary(data)\n\n return isBinary(binData) ? parseBinary(binData) : parseASCII(ensureString(data))\n }\n}\n\nexport { STLLoader }\n"],"names":["data"],"mappings":"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"}
@@ -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 VTKLoader extends THREE.Loader {
6
7
  constructor(manager) {
7
8
  super(manager);
@@ -629,11 +630,11 @@ class VTKLoader extends THREE.Loader {
629
630
  throw new Error("Unsupported DATASET type");
630
631
  }
631
632
  }
632
- var meta = THREE.LoaderUtils.decodeText(new Uint8Array(data, 0, 250)).split("\n");
633
+ var meta = LoaderUtils.decodeText(new Uint8Array(data, 0, 250)).split("\n");
633
634
  if (meta[0].indexOf("xml") !== -1) {
634
- return parseXML(THREE.LoaderUtils.decodeText(data));
635
+ return parseXML(LoaderUtils.decodeText(data));
635
636
  } else if (meta[2].includes("ASCII")) {
636
- return parseASCII(THREE.LoaderUtils.decodeText(data));
637
+ return parseASCII(LoaderUtils.decodeText(data));
637
638
  } else {
638
639
  return parseBinary(data);
639
640
  }
@@ -1 +1 @@
1
- {"version":3,"file":"VTKLoader.cjs","sources":["../../src/loaders/VTKLoader.js"],"sourcesContent":["import { BufferAttribute, BufferGeometry, FileLoader, Float32BufferAttribute, Loader, LoaderUtils } from 'three'\nimport { unzlibSync } from 'fflate'\n\nclass VTKLoader extends Loader {\n constructor(manager) {\n super(manager)\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\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 (text) {\n try {\n onLoad(scope.parse(text))\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 function parseASCII(data) {\n // connectivity of the triangles\n var indices = []\n\n // triangles vertices\n var positions = []\n\n // red, green, blue colors in the range 0 to 1\n var colors = []\n\n // normal vector, one per vertex\n var normals = []\n\n var result\n\n // pattern for detecting the end of a number sequence\n var patWord = /^[^\\d.\\s-]+/\n\n // pattern for reading vertices, 3 floats or integers\n var pat3Floats = /(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)/g\n\n // pattern for connectivity, an integer followed by any number of ints\n // the first integer is the number of polygon nodes\n var patConnectivity = /^(\\d+)\\s+([\\s\\d]*)/\n\n // indicates start of vertex data section\n var patPOINTS = /^POINTS /\n\n // indicates start of polygon connectivity section\n var patPOLYGONS = /^POLYGONS /\n\n // indicates start of triangle strips section\n var patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /\n\n // POINT_DATA number_of_values\n var patPOINT_DATA = /^POINT_DATA[ ]+(\\d+)/\n\n // CELL_DATA number_of_polys\n var patCELL_DATA = /^CELL_DATA[ ]+(\\d+)/\n\n // Start of color section\n var patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\\w+)[ ]+3/\n\n // NORMALS Normals float\n var patNORMALS = /^NORMALS[ ]+(\\w+)[ ]+(\\w+)/\n\n var inPointsSection = false\n var inPolygonsSection = false\n var inTriangleStripSection = false\n var inPointDataSection = false\n var inCellDataSection = false\n var inColorSection = false\n var inNormalsSection = false\n\n var lines = data.split('\\n')\n\n for (var i in lines) {\n var line = lines[i].trim()\n\n if (line.indexOf('DATASET') === 0) {\n var dataset = line.split(' ')[1]\n\n if (dataset !== 'POLYDATA') throw new Error('Unsupported DATASET type: ' + dataset)\n } else if (inPointsSection) {\n // get the vertices\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var x = parseFloat(result[1])\n var y = parseFloat(result[2])\n var z = parseFloat(result[3])\n positions.push(x, y, z)\n }\n } else if (inPolygonsSection) {\n if ((result = patConnectivity.exec(line)) !== null) {\n // numVertices i0 i1 i2 ...\n var numVertices = parseInt(result[1])\n var inds = result[2].split(/\\s+/)\n\n if (numVertices >= 3) {\n var i0 = parseInt(inds[0])\n var i1, i2\n var k = 1\n // split the polygon in numVertices - 2 triangles\n for (var j = 0; j < numVertices - 2; ++j) {\n i1 = parseInt(inds[k])\n i2 = parseInt(inds[k + 1])\n indices.push(i0, i1, i2)\n k++\n }\n }\n }\n } else if (inTriangleStripSection) {\n if ((result = patConnectivity.exec(line)) !== null) {\n // numVertices i0 i1 i2 ...\n var numVertices = parseInt(result[1])\n var inds = result[2].split(/\\s+/)\n\n if (numVertices >= 3) {\n var i0, i1, i2\n // split the polygon in numVertices - 2 triangles\n for (var j = 0; j < numVertices - 2; j++) {\n if (j % 2 === 1) {\n i0 = parseInt(inds[j])\n i1 = parseInt(inds[j + 2])\n i2 = parseInt(inds[j + 1])\n indices.push(i0, i1, i2)\n } else {\n i0 = parseInt(inds[j])\n i1 = parseInt(inds[j + 1])\n i2 = parseInt(inds[j + 2])\n indices.push(i0, i1, i2)\n }\n }\n }\n }\n } else if (inPointDataSection || inCellDataSection) {\n if (inColorSection) {\n // Get the colors\n\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var r = parseFloat(result[1])\n var g = parseFloat(result[2])\n var b = parseFloat(result[3])\n colors.push(r, g, b)\n }\n } else if (inNormalsSection) {\n // Get the normal vectors\n\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var nx = parseFloat(result[1])\n var ny = parseFloat(result[2])\n var nz = parseFloat(result[3])\n normals.push(nx, ny, nz)\n }\n }\n }\n\n if (patPOLYGONS.exec(line) !== null) {\n inPolygonsSection = true\n inPointsSection = false\n inTriangleStripSection = false\n } else if (patPOINTS.exec(line) !== null) {\n inPolygonsSection = false\n inPointsSection = true\n inTriangleStripSection = false\n } else if (patTRIANGLE_STRIPS.exec(line) !== null) {\n inPolygonsSection = false\n inPointsSection = false\n inTriangleStripSection = true\n } else if (patPOINT_DATA.exec(line) !== null) {\n inPointDataSection = true\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patCELL_DATA.exec(line) !== null) {\n inCellDataSection = true\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patCOLOR_SCALARS.exec(line) !== null) {\n inColorSection = true\n inNormalsSection = false\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patNORMALS.exec(line) !== null) {\n inNormalsSection = true\n inColorSection = false\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n }\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(indices)\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3))\n\n if (normals.length === positions.length) {\n geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3))\n }\n\n if (colors.length !== indices.length) {\n // stagger\n\n if (colors.length === positions.length) {\n geometry.setAttribute('color', new Float32BufferAttribute(colors, 3))\n }\n } else {\n // cell\n\n geometry = geometry.toNonIndexed()\n var numTriangles = geometry.attributes.position.count / 3\n\n if (colors.length === numTriangles * 3) {\n var newColors = []\n\n for (var i = 0; i < numTriangles; i++) {\n var r = colors[3 * i + 0]\n var g = colors[3 * i + 1]\n var b = colors[3 * i + 2]\n\n newColors.push(r, g, b)\n newColors.push(r, g, b)\n newColors.push(r, g, b)\n }\n\n geometry.setAttribute('color', new Float32BufferAttribute(newColors, 3))\n }\n }\n\n return geometry\n }\n\n function parseBinary(data) {\n var count, pointIndex, i, numberOfPoints, s\n var buffer = new Uint8Array(data)\n var dataView = new DataView(data)\n\n // Points and normals, by default, are empty\n var points = []\n var normals = []\n var indices = []\n\n // Going to make a big array of strings\n var vtk = []\n var index = 0\n\n function findString(buffer, start) {\n var index = start\n var c = buffer[index]\n var s = []\n while (c !== 10) {\n s.push(String.fromCharCode(c))\n index++\n c = buffer[index]\n }\n\n return { start: start, end: index, next: index + 1, parsedString: s.join('') }\n }\n\n var state, line\n\n while (true) {\n // Get a string\n state = findString(buffer, index)\n line = state.parsedString\n\n if (line.indexOf('DATASET') === 0) {\n var dataset = line.split(' ')[1]\n\n if (dataset !== 'POLYDATA') throw new Error('Unsupported DATASET type: ' + dataset)\n } else if (line.indexOf('POINTS') === 0) {\n vtk.push(line)\n // Add the points\n numberOfPoints = parseInt(line.split(' ')[1], 10)\n\n // Each point is 3 4-byte floats\n count = numberOfPoints * 4 * 3\n\n points = new Float32Array(numberOfPoints * 3)\n\n pointIndex = state.next\n for (i = 0; i < numberOfPoints; i++) {\n points[3 * i] = dataView.getFloat32(pointIndex, false)\n points[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false)\n points[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false)\n pointIndex = pointIndex + 12\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('TRIANGLE_STRIPS') === 0) {\n var numberOfStrips = parseInt(line.split(' ')[1], 10)\n var size = parseInt(line.split(' ')[2], 10)\n // 4 byte integers\n count = size * 4\n\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n var indicesIndex = 0\n\n pointIndex = state.next\n for (i = 0; i < numberOfStrips; i++) {\n // For each strip, read the first value, then record that many more points\n var indexCount = dataView.getInt32(pointIndex, false)\n var strip = []\n pointIndex += 4\n for (s = 0; s < indexCount; s++) {\n strip.push(dataView.getInt32(pointIndex, false))\n pointIndex += 4\n }\n\n // retrieves the n-2 triangles from the triangle strip\n for (var j = 0; j < indexCount - 2; j++) {\n if (j % 2) {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 2]\n indices[indicesIndex++] = strip[j + 1]\n } else {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n indices[indicesIndex++] = strip[j + 2]\n }\n }\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('POLYGONS') === 0) {\n var numberOfStrips = parseInt(line.split(' ')[1], 10)\n var size = parseInt(line.split(' ')[2], 10)\n // 4 byte integers\n count = size * 4\n\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n var indicesIndex = 0\n\n pointIndex = state.next\n for (i = 0; i < numberOfStrips; i++) {\n // For each strip, read the first value, then record that many more points\n var indexCount = dataView.getInt32(pointIndex, false)\n var strip = []\n pointIndex += 4\n for (s = 0; s < indexCount; s++) {\n strip.push(dataView.getInt32(pointIndex, false))\n pointIndex += 4\n }\n\n // divide the polygon in n-2 triangle\n for (var j = 1; j < indexCount - 1; j++) {\n indices[indicesIndex++] = strip[0]\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n }\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('POINT_DATA') === 0) {\n numberOfPoints = parseInt(line.split(' ')[1], 10)\n\n // Grab the next line\n state = findString(buffer, state.next)\n\n // Now grab the binary data\n count = numberOfPoints * 4 * 3\n\n normals = new Float32Array(numberOfPoints * 3)\n pointIndex = state.next\n for (i = 0; i < numberOfPoints; i++) {\n normals[3 * i] = dataView.getFloat32(pointIndex, false)\n normals[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false)\n normals[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false)\n pointIndex += 12\n }\n\n // Increment past our data\n state.next = state.next + count\n }\n\n // Increment index\n index = state.next\n\n if (index >= buffer.byteLength) {\n break\n }\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(new BufferAttribute(indices, 1))\n geometry.setAttribute('position', new BufferAttribute(points, 3))\n\n if (normals.length === points.length) {\n geometry.setAttribute('normal', new BufferAttribute(normals, 3))\n }\n\n return geometry\n }\n\n function Float32Concat(first, second) {\n const firstLength = first.length,\n result = new Float32Array(firstLength + second.length)\n\n result.set(first)\n result.set(second, firstLength)\n\n return result\n }\n\n function Int32Concat(first, second) {\n var firstLength = first.length,\n result = new Int32Array(firstLength + second.length)\n\n result.set(first)\n result.set(second, firstLength)\n\n return result\n }\n\n function parseXML(stringFile) {\n // Changes XML to JSON, based on https://davidwalsh.name/convert-xml-json\n\n function xmlToJson(xml) {\n // Create the return object\n var obj = {}\n\n if (xml.nodeType === 1) {\n // element\n\n // do attributes\n\n if (xml.attributes) {\n if (xml.attributes.length > 0) {\n obj['attributes'] = {}\n\n for (var j = 0; j < xml.attributes.length; j++) {\n var attribute = xml.attributes.item(j)\n obj['attributes'][attribute.nodeName] = attribute.nodeValue.trim()\n }\n }\n }\n } else if (xml.nodeType === 3) {\n // text\n\n obj = xml.nodeValue.trim()\n }\n\n // do children\n if (xml.hasChildNodes()) {\n for (var i = 0; i < xml.childNodes.length; i++) {\n var item = xml.childNodes.item(i)\n var nodeName = item.nodeName\n\n if (typeof obj[nodeName] === 'undefined') {\n var tmp = xmlToJson(item)\n\n if (tmp !== '') obj[nodeName] = tmp\n } else {\n if (typeof obj[nodeName].push === 'undefined') {\n var old = obj[nodeName]\n obj[nodeName] = [old]\n }\n\n var tmp = xmlToJson(item)\n\n if (tmp !== '') obj[nodeName].push(tmp)\n }\n }\n }\n\n return obj\n }\n\n // Taken from Base64-js\n function Base64toByteArray(b64) {\n var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n var i\n var lookup = []\n var revLookup = []\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n var len = code.length\n\n for (i = 0; i < len; i++) {\n lookup[i] = code[i]\n }\n\n for (i = 0; i < len; ++i) {\n revLookup[code.charCodeAt(i)] = i\n }\n\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n\n var j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n arr = new Arr((len * 3) / 4 - placeHolders)\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp & 0xff0000) >> 16\n arr[L++] = (tmp & 0xff00) >> 8\n arr[L++] = tmp & 0xff\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xff\n } else if (placeHolders === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xff\n arr[L++] = tmp & 0xff\n }\n\n return arr\n }\n\n function parseDataArray(ele, compressed) {\n var numBytes = 0\n\n if (json.attributes.header_type === 'UInt64') {\n numBytes = 8\n } else if (json.attributes.header_type === 'UInt32') {\n numBytes = 4\n }\n\n // Check the format\n if (ele.attributes.format === 'binary' && compressed) {\n var rawData, content, byteData, blocks, cSizeStart, headerSize, padding, dataOffsets, currentOffset\n\n if (ele.attributes.type === 'Float32') {\n var txt = new Float32Array()\n } else if (ele.attributes.type === 'Int64') {\n var txt = new Int32Array()\n }\n\n // VTP data with the header has the following structure:\n // [#blocks][#u-size][#p-size][#c-size-1][#c-size-2]...[#c-size-#blocks][DATA]\n //\n // Each token is an integer value whose type is specified by \"header_type\" at the top of the file (UInt32 if no type specified). The token meanings are:\n // [#blocks] = Number of blocks\n // [#u-size] = Block size before compression\n // [#p-size] = Size of last partial block (zero if it not needed)\n // [#c-size-i] = Size in bytes of block i after compression\n //\n // The [DATA] portion stores contiguously every block appended together. The offset from the beginning of the data section to the beginning of a block is\n // computed by summing the compressed block sizes from preceding blocks according to the header.\n\n rawData = ele['#text']\n\n byteData = Base64toByteArray(rawData)\n\n blocks = byteData[0]\n for (var i = 1; i < numBytes - 1; i++) {\n blocks = blocks | (byteData[i] << (i * numBytes))\n }\n\n headerSize = (blocks + 3) * numBytes\n padding = headerSize % 3 > 0 ? 3 - (headerSize % 3) : 0\n headerSize = headerSize + padding\n\n dataOffsets = []\n currentOffset = headerSize\n dataOffsets.push(currentOffset)\n\n // Get the blocks sizes after the compression.\n // There are three blocks before c-size-i, so we skip 3*numBytes\n cSizeStart = 3 * numBytes\n\n for (var i = 0; i < blocks; i++) {\n var currentBlockSize = byteData[i * numBytes + cSizeStart]\n\n for (var j = 1; j < numBytes - 1; j++) {\n // Each data point consists of 8 bytes regardless of the header type\n currentBlockSize = currentBlockSize | (byteData[i * numBytes + cSizeStart + j] << (j * 8))\n }\n\n currentOffset = currentOffset + currentBlockSize\n dataOffsets.push(currentOffset)\n }\n\n for (var i = 0; i < dataOffsets.length - 1; i++) {\n var data = unzlibSync(byteData.slice(dataOffsets[i], dataOffsets[i + 1]))\n content = data.buffer\n\n if (ele.attributes.type === 'Float32') {\n content = new Float32Array(content)\n txt = Float32Concat(txt, content)\n } else if (ele.attributes.type === 'Int64') {\n content = new Int32Array(content)\n txt = Int32Concat(txt, content)\n }\n }\n\n delete ele['#text']\n\n if (ele.attributes.type === 'Int64') {\n if (ele.attributes.format === 'binary') {\n txt = txt.filter(function (el, idx) {\n if (idx % 2 !== 1) return true\n })\n }\n }\n } else {\n if (ele.attributes.format === 'binary' && !compressed) {\n var content = Base64toByteArray(ele['#text'])\n\n // VTP data for the uncompressed case has the following structure:\n // [#bytes][DATA]\n // where \"[#bytes]\" is an integer value specifying the number of bytes in the block of data following it.\n content = content.slice(numBytes).buffer\n } else {\n if (ele['#text']) {\n var content = ele['#text'].split(/\\s+/).filter(function (el) {\n if (el !== '') return el\n })\n } else {\n var content = new Int32Array(0).buffer\n }\n }\n\n delete ele['#text']\n\n // Get the content and optimize it\n if (ele.attributes.type === 'Float32') {\n var txt = new Float32Array(content)\n } else if (ele.attributes.type === 'Int32') {\n var txt = new Int32Array(content)\n } else if (ele.attributes.type === 'Int64') {\n var txt = new Int32Array(content)\n\n if (ele.attributes.format === 'binary') {\n txt = txt.filter(function (el, idx) {\n if (idx % 2 !== 1) return true\n })\n }\n }\n } // endif ( ele.attributes.format === 'binary' && compressed )\n\n return txt\n }\n\n // Main part\n // Get Dom\n var dom = null\n\n if (window.DOMParser) {\n try {\n dom = new DOMParser().parseFromString(stringFile, 'text/xml')\n } catch (e) {\n dom = null\n }\n } else if (window.ActiveXObject) {\n try {\n dom = new ActiveXObject('Microsoft.XMLDOM')\n dom.async = false\n\n if (!(dom.loadXML(/* xml */))) {\n throw new Error(dom.parseError.reason + dom.parseError.srcText)\n }\n } catch (e) {\n dom = null\n }\n } else {\n throw new Error('Cannot parse xml string!')\n }\n\n // Get the doc\n var doc = dom.documentElement\n // Convert to json\n var json = xmlToJson(doc)\n var points = []\n var normals = []\n var indices = []\n\n if (json.PolyData) {\n var piece = json.PolyData.Piece\n var compressed = json.attributes.hasOwnProperty('compressor')\n\n // Can be optimized\n // Loop through the sections\n var sections = ['PointData', 'Points', 'Strips', 'Polys'] // +['CellData', 'Verts', 'Lines'];\n var sectionIndex = 0,\n numberOfSections = sections.length\n\n while (sectionIndex < numberOfSections) {\n var section = piece[sections[sectionIndex]]\n\n // If it has a DataArray in it\n\n if (section && section.DataArray) {\n // Depending on the number of DataArrays\n\n if (Object.prototype.toString.call(section.DataArray) === '[object Array]') {\n var arr = section.DataArray\n } else {\n var arr = [section.DataArray]\n }\n\n var dataArrayIndex = 0,\n numberOfDataArrays = arr.length\n\n while (dataArrayIndex < numberOfDataArrays) {\n // Parse the DataArray\n if ('#text' in arr[dataArrayIndex] && arr[dataArrayIndex]['#text'].length > 0) {\n arr[dataArrayIndex].text = parseDataArray(arr[dataArrayIndex], compressed)\n }\n\n dataArrayIndex++\n }\n\n switch (sections[sectionIndex]) {\n // if iti is point data\n case 'PointData':\n var numberOfPoints = parseInt(piece.attributes.NumberOfPoints)\n var normalsName = section.attributes.Normals\n\n if (numberOfPoints > 0) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (normalsName === arr[i].attributes.Name) {\n var components = arr[i].attributes.NumberOfComponents\n normals = new Float32Array(numberOfPoints * components)\n normals.set(arr[i].text, 0)\n }\n }\n }\n\n break\n\n // if it is points\n case 'Points':\n var numberOfPoints = parseInt(piece.attributes.NumberOfPoints)\n\n if (numberOfPoints > 0) {\n var components = section.DataArray.attributes.NumberOfComponents\n points = new Float32Array(numberOfPoints * components)\n points.set(section.DataArray.text, 0)\n }\n\n break\n\n // if it is strips\n case 'Strips':\n var numberOfStrips = parseInt(piece.attributes.NumberOfStrips)\n\n if (numberOfStrips > 0) {\n var connectivity = new Int32Array(section.DataArray[0].text.length)\n var offset = new Int32Array(section.DataArray[1].text.length)\n connectivity.set(section.DataArray[0].text, 0)\n offset.set(section.DataArray[1].text, 0)\n\n var size = numberOfStrips + connectivity.length\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n\n var indicesIndex = 0\n\n for (var i = 0, len = numberOfStrips; i < len; i++) {\n var strip = []\n\n for (var s = 0, len1 = offset[i], len0 = 0; s < len1 - len0; s++) {\n strip.push(connectivity[s])\n\n if (i > 0) len0 = offset[i - 1]\n }\n\n for (var j = 0, len1 = offset[i], len0 = 0; j < len1 - len0 - 2; j++) {\n if (j % 2) {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 2]\n indices[indicesIndex++] = strip[j + 1]\n } else {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n indices[indicesIndex++] = strip[j + 2]\n }\n\n if (i > 0) len0 = offset[i - 1]\n }\n }\n }\n\n break\n\n // if it is polys\n case 'Polys':\n var numberOfPolys = parseInt(piece.attributes.NumberOfPolys)\n\n if (numberOfPolys > 0) {\n var connectivity = new Int32Array(section.DataArray[0].text.length)\n var offset = new Int32Array(section.DataArray[1].text.length)\n connectivity.set(section.DataArray[0].text, 0)\n offset.set(section.DataArray[1].text, 0)\n\n var size = numberOfPolys + connectivity.length\n indices = new Uint32Array(3 * size - 9 * numberOfPolys)\n var indicesIndex = 0,\n connectivityIndex = 0\n var i = 0,\n len = numberOfPolys,\n len0 = 0\n\n while (i < len) {\n var poly = []\n var s = 0,\n len1 = offset[i]\n\n while (s < len1 - len0) {\n poly.push(connectivity[connectivityIndex++])\n s++\n }\n\n var j = 1\n\n while (j < len1 - len0 - 1) {\n indices[indicesIndex++] = poly[0]\n indices[indicesIndex++] = poly[j]\n indices[indicesIndex++] = poly[j + 1]\n j++\n }\n\n i++\n len0 = offset[i - 1]\n }\n }\n\n break\n\n default:\n break\n }\n }\n\n sectionIndex++\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(new BufferAttribute(indices, 1))\n geometry.setAttribute('position', new BufferAttribute(points, 3))\n\n if (normals.length === points.length) {\n geometry.setAttribute('normal', new BufferAttribute(normals, 3))\n }\n\n return geometry\n } else {\n throw new Error('Unsupported DATASET type')\n }\n }\n\n // get the 5 first lines of the files to check if there is the key word binary\n var meta = LoaderUtils.decodeText(new Uint8Array(data, 0, 250)).split('\\n')\n\n if (meta[0].indexOf('xml') !== -1) {\n return parseXML(LoaderUtils.decodeText(data))\n } else if (meta[2].includes('ASCII')) {\n return parseASCII(LoaderUtils.decodeText(data))\n } else {\n return parseBinary(data)\n }\n }\n}\n\nexport { VTKLoader }\n"],"names":["Loader","FileLoader","data","BufferGeometry","Float32BufferAttribute","buffer","index","s","BufferAttribute","j","i","len","arr","compressed","unzlibSync","LoaderUtils"],"mappings":"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"}
1
+ {"version":3,"file":"VTKLoader.cjs","sources":["../../src/loaders/VTKLoader.js"],"sourcesContent":["import { BufferAttribute, BufferGeometry, FileLoader, Float32BufferAttribute, Loader, LoaderUtils } from 'three'\nimport { unzlibSync } from 'fflate'\nimport { decodeText } from '../_polyfill/LoaderUtils'\n\nclass VTKLoader extends Loader {\n constructor(manager) {\n super(manager)\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\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 (text) {\n try {\n onLoad(scope.parse(text))\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 function parseASCII(data) {\n // connectivity of the triangles\n var indices = []\n\n // triangles vertices\n var positions = []\n\n // red, green, blue colors in the range 0 to 1\n var colors = []\n\n // normal vector, one per vertex\n var normals = []\n\n var result\n\n // pattern for detecting the end of a number sequence\n var patWord = /^[^\\d.\\s-]+/\n\n // pattern for reading vertices, 3 floats or integers\n var pat3Floats = /(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)/g\n\n // pattern for connectivity, an integer followed by any number of ints\n // the first integer is the number of polygon nodes\n var patConnectivity = /^(\\d+)\\s+([\\s\\d]*)/\n\n // indicates start of vertex data section\n var patPOINTS = /^POINTS /\n\n // indicates start of polygon connectivity section\n var patPOLYGONS = /^POLYGONS /\n\n // indicates start of triangle strips section\n var patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /\n\n // POINT_DATA number_of_values\n var patPOINT_DATA = /^POINT_DATA[ ]+(\\d+)/\n\n // CELL_DATA number_of_polys\n var patCELL_DATA = /^CELL_DATA[ ]+(\\d+)/\n\n // Start of color section\n var patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\\w+)[ ]+3/\n\n // NORMALS Normals float\n var patNORMALS = /^NORMALS[ ]+(\\w+)[ ]+(\\w+)/\n\n var inPointsSection = false\n var inPolygonsSection = false\n var inTriangleStripSection = false\n var inPointDataSection = false\n var inCellDataSection = false\n var inColorSection = false\n var inNormalsSection = false\n\n var lines = data.split('\\n')\n\n for (var i in lines) {\n var line = lines[i].trim()\n\n if (line.indexOf('DATASET') === 0) {\n var dataset = line.split(' ')[1]\n\n if (dataset !== 'POLYDATA') throw new Error('Unsupported DATASET type: ' + dataset)\n } else if (inPointsSection) {\n // get the vertices\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var x = parseFloat(result[1])\n var y = parseFloat(result[2])\n var z = parseFloat(result[3])\n positions.push(x, y, z)\n }\n } else if (inPolygonsSection) {\n if ((result = patConnectivity.exec(line)) !== null) {\n // numVertices i0 i1 i2 ...\n var numVertices = parseInt(result[1])\n var inds = result[2].split(/\\s+/)\n\n if (numVertices >= 3) {\n var i0 = parseInt(inds[0])\n var i1, i2\n var k = 1\n // split the polygon in numVertices - 2 triangles\n for (var j = 0; j < numVertices - 2; ++j) {\n i1 = parseInt(inds[k])\n i2 = parseInt(inds[k + 1])\n indices.push(i0, i1, i2)\n k++\n }\n }\n }\n } else if (inTriangleStripSection) {\n if ((result = patConnectivity.exec(line)) !== null) {\n // numVertices i0 i1 i2 ...\n var numVertices = parseInt(result[1])\n var inds = result[2].split(/\\s+/)\n\n if (numVertices >= 3) {\n var i0, i1, i2\n // split the polygon in numVertices - 2 triangles\n for (var j = 0; j < numVertices - 2; j++) {\n if (j % 2 === 1) {\n i0 = parseInt(inds[j])\n i1 = parseInt(inds[j + 2])\n i2 = parseInt(inds[j + 1])\n indices.push(i0, i1, i2)\n } else {\n i0 = parseInt(inds[j])\n i1 = parseInt(inds[j + 1])\n i2 = parseInt(inds[j + 2])\n indices.push(i0, i1, i2)\n }\n }\n }\n }\n } else if (inPointDataSection || inCellDataSection) {\n if (inColorSection) {\n // Get the colors\n\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var r = parseFloat(result[1])\n var g = parseFloat(result[2])\n var b = parseFloat(result[3])\n colors.push(r, g, b)\n }\n } else if (inNormalsSection) {\n // Get the normal vectors\n\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var nx = parseFloat(result[1])\n var ny = parseFloat(result[2])\n var nz = parseFloat(result[3])\n normals.push(nx, ny, nz)\n }\n }\n }\n\n if (patPOLYGONS.exec(line) !== null) {\n inPolygonsSection = true\n inPointsSection = false\n inTriangleStripSection = false\n } else if (patPOINTS.exec(line) !== null) {\n inPolygonsSection = false\n inPointsSection = true\n inTriangleStripSection = false\n } else if (patTRIANGLE_STRIPS.exec(line) !== null) {\n inPolygonsSection = false\n inPointsSection = false\n inTriangleStripSection = true\n } else if (patPOINT_DATA.exec(line) !== null) {\n inPointDataSection = true\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patCELL_DATA.exec(line) !== null) {\n inCellDataSection = true\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patCOLOR_SCALARS.exec(line) !== null) {\n inColorSection = true\n inNormalsSection = false\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patNORMALS.exec(line) !== null) {\n inNormalsSection = true\n inColorSection = false\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n }\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(indices)\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3))\n\n if (normals.length === positions.length) {\n geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3))\n }\n\n if (colors.length !== indices.length) {\n // stagger\n\n if (colors.length === positions.length) {\n geometry.setAttribute('color', new Float32BufferAttribute(colors, 3))\n }\n } else {\n // cell\n\n geometry = geometry.toNonIndexed()\n var numTriangles = geometry.attributes.position.count / 3\n\n if (colors.length === numTriangles * 3) {\n var newColors = []\n\n for (var i = 0; i < numTriangles; i++) {\n var r = colors[3 * i + 0]\n var g = colors[3 * i + 1]\n var b = colors[3 * i + 2]\n\n newColors.push(r, g, b)\n newColors.push(r, g, b)\n newColors.push(r, g, b)\n }\n\n geometry.setAttribute('color', new Float32BufferAttribute(newColors, 3))\n }\n }\n\n return geometry\n }\n\n function parseBinary(data) {\n var count, pointIndex, i, numberOfPoints, s\n var buffer = new Uint8Array(data)\n var dataView = new DataView(data)\n\n // Points and normals, by default, are empty\n var points = []\n var normals = []\n var indices = []\n\n // Going to make a big array of strings\n var vtk = []\n var index = 0\n\n function findString(buffer, start) {\n var index = start\n var c = buffer[index]\n var s = []\n while (c !== 10) {\n s.push(String.fromCharCode(c))\n index++\n c = buffer[index]\n }\n\n return { start: start, end: index, next: index + 1, parsedString: s.join('') }\n }\n\n var state, line\n\n while (true) {\n // Get a string\n state = findString(buffer, index)\n line = state.parsedString\n\n if (line.indexOf('DATASET') === 0) {\n var dataset = line.split(' ')[1]\n\n if (dataset !== 'POLYDATA') throw new Error('Unsupported DATASET type: ' + dataset)\n } else if (line.indexOf('POINTS') === 0) {\n vtk.push(line)\n // Add the points\n numberOfPoints = parseInt(line.split(' ')[1], 10)\n\n // Each point is 3 4-byte floats\n count = numberOfPoints * 4 * 3\n\n points = new Float32Array(numberOfPoints * 3)\n\n pointIndex = state.next\n for (i = 0; i < numberOfPoints; i++) {\n points[3 * i] = dataView.getFloat32(pointIndex, false)\n points[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false)\n points[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false)\n pointIndex = pointIndex + 12\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('TRIANGLE_STRIPS') === 0) {\n var numberOfStrips = parseInt(line.split(' ')[1], 10)\n var size = parseInt(line.split(' ')[2], 10)\n // 4 byte integers\n count = size * 4\n\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n var indicesIndex = 0\n\n pointIndex = state.next\n for (i = 0; i < numberOfStrips; i++) {\n // For each strip, read the first value, then record that many more points\n var indexCount = dataView.getInt32(pointIndex, false)\n var strip = []\n pointIndex += 4\n for (s = 0; s < indexCount; s++) {\n strip.push(dataView.getInt32(pointIndex, false))\n pointIndex += 4\n }\n\n // retrieves the n-2 triangles from the triangle strip\n for (var j = 0; j < indexCount - 2; j++) {\n if (j % 2) {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 2]\n indices[indicesIndex++] = strip[j + 1]\n } else {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n indices[indicesIndex++] = strip[j + 2]\n }\n }\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('POLYGONS') === 0) {\n var numberOfStrips = parseInt(line.split(' ')[1], 10)\n var size = parseInt(line.split(' ')[2], 10)\n // 4 byte integers\n count = size * 4\n\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n var indicesIndex = 0\n\n pointIndex = state.next\n for (i = 0; i < numberOfStrips; i++) {\n // For each strip, read the first value, then record that many more points\n var indexCount = dataView.getInt32(pointIndex, false)\n var strip = []\n pointIndex += 4\n for (s = 0; s < indexCount; s++) {\n strip.push(dataView.getInt32(pointIndex, false))\n pointIndex += 4\n }\n\n // divide the polygon in n-2 triangle\n for (var j = 1; j < indexCount - 1; j++) {\n indices[indicesIndex++] = strip[0]\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n }\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('POINT_DATA') === 0) {\n numberOfPoints = parseInt(line.split(' ')[1], 10)\n\n // Grab the next line\n state = findString(buffer, state.next)\n\n // Now grab the binary data\n count = numberOfPoints * 4 * 3\n\n normals = new Float32Array(numberOfPoints * 3)\n pointIndex = state.next\n for (i = 0; i < numberOfPoints; i++) {\n normals[3 * i] = dataView.getFloat32(pointIndex, false)\n normals[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false)\n normals[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false)\n pointIndex += 12\n }\n\n // Increment past our data\n state.next = state.next + count\n }\n\n // Increment index\n index = state.next\n\n if (index >= buffer.byteLength) {\n break\n }\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(new BufferAttribute(indices, 1))\n geometry.setAttribute('position', new BufferAttribute(points, 3))\n\n if (normals.length === points.length) {\n geometry.setAttribute('normal', new BufferAttribute(normals, 3))\n }\n\n return geometry\n }\n\n function Float32Concat(first, second) {\n const firstLength = first.length,\n result = new Float32Array(firstLength + second.length)\n\n result.set(first)\n result.set(second, firstLength)\n\n return result\n }\n\n function Int32Concat(first, second) {\n var firstLength = first.length,\n result = new Int32Array(firstLength + second.length)\n\n result.set(first)\n result.set(second, firstLength)\n\n return result\n }\n\n function parseXML(stringFile) {\n // Changes XML to JSON, based on https://davidwalsh.name/convert-xml-json\n\n function xmlToJson(xml) {\n // Create the return object\n var obj = {}\n\n if (xml.nodeType === 1) {\n // element\n\n // do attributes\n\n if (xml.attributes) {\n if (xml.attributes.length > 0) {\n obj['attributes'] = {}\n\n for (var j = 0; j < xml.attributes.length; j++) {\n var attribute = xml.attributes.item(j)\n obj['attributes'][attribute.nodeName] = attribute.nodeValue.trim()\n }\n }\n }\n } else if (xml.nodeType === 3) {\n // text\n\n obj = xml.nodeValue.trim()\n }\n\n // do children\n if (xml.hasChildNodes()) {\n for (var i = 0; i < xml.childNodes.length; i++) {\n var item = xml.childNodes.item(i)\n var nodeName = item.nodeName\n\n if (typeof obj[nodeName] === 'undefined') {\n var tmp = xmlToJson(item)\n\n if (tmp !== '') obj[nodeName] = tmp\n } else {\n if (typeof obj[nodeName].push === 'undefined') {\n var old = obj[nodeName]\n obj[nodeName] = [old]\n }\n\n var tmp = xmlToJson(item)\n\n if (tmp !== '') obj[nodeName].push(tmp)\n }\n }\n }\n\n return obj\n }\n\n // Taken from Base64-js\n function Base64toByteArray(b64) {\n var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n var i\n var lookup = []\n var revLookup = []\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n var len = code.length\n\n for (i = 0; i < len; i++) {\n lookup[i] = code[i]\n }\n\n for (i = 0; i < len; ++i) {\n revLookup[code.charCodeAt(i)] = i\n }\n\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n\n var j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n arr = new Arr((len * 3) / 4 - placeHolders)\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp & 0xff0000) >> 16\n arr[L++] = (tmp & 0xff00) >> 8\n arr[L++] = tmp & 0xff\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xff\n } else if (placeHolders === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xff\n arr[L++] = tmp & 0xff\n }\n\n return arr\n }\n\n function parseDataArray(ele, compressed) {\n var numBytes = 0\n\n if (json.attributes.header_type === 'UInt64') {\n numBytes = 8\n } else if (json.attributes.header_type === 'UInt32') {\n numBytes = 4\n }\n\n // Check the format\n if (ele.attributes.format === 'binary' && compressed) {\n var rawData, content, byteData, blocks, cSizeStart, headerSize, padding, dataOffsets, currentOffset\n\n if (ele.attributes.type === 'Float32') {\n var txt = new Float32Array()\n } else if (ele.attributes.type === 'Int64') {\n var txt = new Int32Array()\n }\n\n // VTP data with the header has the following structure:\n // [#blocks][#u-size][#p-size][#c-size-1][#c-size-2]...[#c-size-#blocks][DATA]\n //\n // Each token is an integer value whose type is specified by \"header_type\" at the top of the file (UInt32 if no type specified). The token meanings are:\n // [#blocks] = Number of blocks\n // [#u-size] = Block size before compression\n // [#p-size] = Size of last partial block (zero if it not needed)\n // [#c-size-i] = Size in bytes of block i after compression\n //\n // The [DATA] portion stores contiguously every block appended together. The offset from the beginning of the data section to the beginning of a block is\n // computed by summing the compressed block sizes from preceding blocks according to the header.\n\n rawData = ele['#text']\n\n byteData = Base64toByteArray(rawData)\n\n blocks = byteData[0]\n for (var i = 1; i < numBytes - 1; i++) {\n blocks = blocks | (byteData[i] << (i * numBytes))\n }\n\n headerSize = (blocks + 3) * numBytes\n padding = headerSize % 3 > 0 ? 3 - (headerSize % 3) : 0\n headerSize = headerSize + padding\n\n dataOffsets = []\n currentOffset = headerSize\n dataOffsets.push(currentOffset)\n\n // Get the blocks sizes after the compression.\n // There are three blocks before c-size-i, so we skip 3*numBytes\n cSizeStart = 3 * numBytes\n\n for (var i = 0; i < blocks; i++) {\n var currentBlockSize = byteData[i * numBytes + cSizeStart]\n\n for (var j = 1; j < numBytes - 1; j++) {\n // Each data point consists of 8 bytes regardless of the header type\n currentBlockSize = currentBlockSize | (byteData[i * numBytes + cSizeStart + j] << (j * 8))\n }\n\n currentOffset = currentOffset + currentBlockSize\n dataOffsets.push(currentOffset)\n }\n\n for (var i = 0; i < dataOffsets.length - 1; i++) {\n var data = unzlibSync(byteData.slice(dataOffsets[i], dataOffsets[i + 1]))\n content = data.buffer\n\n if (ele.attributes.type === 'Float32') {\n content = new Float32Array(content)\n txt = Float32Concat(txt, content)\n } else if (ele.attributes.type === 'Int64') {\n content = new Int32Array(content)\n txt = Int32Concat(txt, content)\n }\n }\n\n delete ele['#text']\n\n if (ele.attributes.type === 'Int64') {\n if (ele.attributes.format === 'binary') {\n txt = txt.filter(function (el, idx) {\n if (idx % 2 !== 1) return true\n })\n }\n }\n } else {\n if (ele.attributes.format === 'binary' && !compressed) {\n var content = Base64toByteArray(ele['#text'])\n\n // VTP data for the uncompressed case has the following structure:\n // [#bytes][DATA]\n // where \"[#bytes]\" is an integer value specifying the number of bytes in the block of data following it.\n content = content.slice(numBytes).buffer\n } else {\n if (ele['#text']) {\n var content = ele['#text'].split(/\\s+/).filter(function (el) {\n if (el !== '') return el\n })\n } else {\n var content = new Int32Array(0).buffer\n }\n }\n\n delete ele['#text']\n\n // Get the content and optimize it\n if (ele.attributes.type === 'Float32') {\n var txt = new Float32Array(content)\n } else if (ele.attributes.type === 'Int32') {\n var txt = new Int32Array(content)\n } else if (ele.attributes.type === 'Int64') {\n var txt = new Int32Array(content)\n\n if (ele.attributes.format === 'binary') {\n txt = txt.filter(function (el, idx) {\n if (idx % 2 !== 1) return true\n })\n }\n }\n } // endif ( ele.attributes.format === 'binary' && compressed )\n\n return txt\n }\n\n // Main part\n // Get Dom\n var dom = null\n\n if (window.DOMParser) {\n try {\n dom = new DOMParser().parseFromString(stringFile, 'text/xml')\n } catch (e) {\n dom = null\n }\n } else if (window.ActiveXObject) {\n try {\n dom = new ActiveXObject('Microsoft.XMLDOM')\n dom.async = false\n\n if (!(dom.loadXML(/* xml */))) {\n throw new Error(dom.parseError.reason + dom.parseError.srcText)\n }\n } catch (e) {\n dom = null\n }\n } else {\n throw new Error('Cannot parse xml string!')\n }\n\n // Get the doc\n var doc = dom.documentElement\n // Convert to json\n var json = xmlToJson(doc)\n var points = []\n var normals = []\n var indices = []\n\n if (json.PolyData) {\n var piece = json.PolyData.Piece\n var compressed = json.attributes.hasOwnProperty('compressor')\n\n // Can be optimized\n // Loop through the sections\n var sections = ['PointData', 'Points', 'Strips', 'Polys'] // +['CellData', 'Verts', 'Lines'];\n var sectionIndex = 0,\n numberOfSections = sections.length\n\n while (sectionIndex < numberOfSections) {\n var section = piece[sections[sectionIndex]]\n\n // If it has a DataArray in it\n\n if (section && section.DataArray) {\n // Depending on the number of DataArrays\n\n if (Object.prototype.toString.call(section.DataArray) === '[object Array]') {\n var arr = section.DataArray\n } else {\n var arr = [section.DataArray]\n }\n\n var dataArrayIndex = 0,\n numberOfDataArrays = arr.length\n\n while (dataArrayIndex < numberOfDataArrays) {\n // Parse the DataArray\n if ('#text' in arr[dataArrayIndex] && arr[dataArrayIndex]['#text'].length > 0) {\n arr[dataArrayIndex].text = parseDataArray(arr[dataArrayIndex], compressed)\n }\n\n dataArrayIndex++\n }\n\n switch (sections[sectionIndex]) {\n // if iti is point data\n case 'PointData':\n var numberOfPoints = parseInt(piece.attributes.NumberOfPoints)\n var normalsName = section.attributes.Normals\n\n if (numberOfPoints > 0) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (normalsName === arr[i].attributes.Name) {\n var components = arr[i].attributes.NumberOfComponents\n normals = new Float32Array(numberOfPoints * components)\n normals.set(arr[i].text, 0)\n }\n }\n }\n\n break\n\n // if it is points\n case 'Points':\n var numberOfPoints = parseInt(piece.attributes.NumberOfPoints)\n\n if (numberOfPoints > 0) {\n var components = section.DataArray.attributes.NumberOfComponents\n points = new Float32Array(numberOfPoints * components)\n points.set(section.DataArray.text, 0)\n }\n\n break\n\n // if it is strips\n case 'Strips':\n var numberOfStrips = parseInt(piece.attributes.NumberOfStrips)\n\n if (numberOfStrips > 0) {\n var connectivity = new Int32Array(section.DataArray[0].text.length)\n var offset = new Int32Array(section.DataArray[1].text.length)\n connectivity.set(section.DataArray[0].text, 0)\n offset.set(section.DataArray[1].text, 0)\n\n var size = numberOfStrips + connectivity.length\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n\n var indicesIndex = 0\n\n for (var i = 0, len = numberOfStrips; i < len; i++) {\n var strip = []\n\n for (var s = 0, len1 = offset[i], len0 = 0; s < len1 - len0; s++) {\n strip.push(connectivity[s])\n\n if (i > 0) len0 = offset[i - 1]\n }\n\n for (var j = 0, len1 = offset[i], len0 = 0; j < len1 - len0 - 2; j++) {\n if (j % 2) {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 2]\n indices[indicesIndex++] = strip[j + 1]\n } else {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n indices[indicesIndex++] = strip[j + 2]\n }\n\n if (i > 0) len0 = offset[i - 1]\n }\n }\n }\n\n break\n\n // if it is polys\n case 'Polys':\n var numberOfPolys = parseInt(piece.attributes.NumberOfPolys)\n\n if (numberOfPolys > 0) {\n var connectivity = new Int32Array(section.DataArray[0].text.length)\n var offset = new Int32Array(section.DataArray[1].text.length)\n connectivity.set(section.DataArray[0].text, 0)\n offset.set(section.DataArray[1].text, 0)\n\n var size = numberOfPolys + connectivity.length\n indices = new Uint32Array(3 * size - 9 * numberOfPolys)\n var indicesIndex = 0,\n connectivityIndex = 0\n var i = 0,\n len = numberOfPolys,\n len0 = 0\n\n while (i < len) {\n var poly = []\n var s = 0,\n len1 = offset[i]\n\n while (s < len1 - len0) {\n poly.push(connectivity[connectivityIndex++])\n s++\n }\n\n var j = 1\n\n while (j < len1 - len0 - 1) {\n indices[indicesIndex++] = poly[0]\n indices[indicesIndex++] = poly[j]\n indices[indicesIndex++] = poly[j + 1]\n j++\n }\n\n i++\n len0 = offset[i - 1]\n }\n }\n\n break\n\n default:\n break\n }\n }\n\n sectionIndex++\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(new BufferAttribute(indices, 1))\n geometry.setAttribute('position', new BufferAttribute(points, 3))\n\n if (normals.length === points.length) {\n geometry.setAttribute('normal', new BufferAttribute(normals, 3))\n }\n\n return geometry\n } else {\n throw new Error('Unsupported DATASET type')\n }\n }\n\n // get the 5 first lines of the files to check if there is the key word binary\n var meta = decodeText(new Uint8Array(data, 0, 250)).split('\\n')\n\n if (meta[0].indexOf('xml') !== -1) {\n return parseXML(decodeText(data))\n } else if (meta[2].includes('ASCII')) {\n return parseASCII(decodeText(data))\n } else {\n return parseBinary(data)\n }\n }\n}\n\nexport { VTKLoader }\n"],"names":["Loader","FileLoader","data","BufferGeometry","Float32BufferAttribute","buffer","index","s","BufferAttribute","j","i","len","arr","compressed","unzlibSync","decodeText"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import { Loader, FileLoader, LoaderUtils, BufferGeometry, Float32BufferAttribute, BufferAttribute } from "three";
1
+ import { Loader, FileLoader, BufferGeometry, Float32BufferAttribute, BufferAttribute } from "three";
2
2
  import { unzlibSync } from "fflate";
3
+ import { decodeText } from "../_polyfill/LoaderUtils.js";
3
4
  class VTKLoader extends Loader {
4
5
  constructor(manager) {
5
6
  super(manager);
@@ -627,11 +628,11 @@ class VTKLoader extends Loader {
627
628
  throw new Error("Unsupported DATASET type");
628
629
  }
629
630
  }
630
- var meta = LoaderUtils.decodeText(new Uint8Array(data, 0, 250)).split("\n");
631
+ var meta = decodeText(new Uint8Array(data, 0, 250)).split("\n");
631
632
  if (meta[0].indexOf("xml") !== -1) {
632
- return parseXML(LoaderUtils.decodeText(data));
633
+ return parseXML(decodeText(data));
633
634
  } else if (meta[2].includes("ASCII")) {
634
- return parseASCII(LoaderUtils.decodeText(data));
635
+ return parseASCII(decodeText(data));
635
636
  } else {
636
637
  return parseBinary(data);
637
638
  }
@@ -1 +1 @@
1
- {"version":3,"file":"VTKLoader.js","sources":["../../src/loaders/VTKLoader.js"],"sourcesContent":["import { BufferAttribute, BufferGeometry, FileLoader, Float32BufferAttribute, Loader, LoaderUtils } from 'three'\nimport { unzlibSync } from 'fflate'\n\nclass VTKLoader extends Loader {\n constructor(manager) {\n super(manager)\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\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 (text) {\n try {\n onLoad(scope.parse(text))\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 function parseASCII(data) {\n // connectivity of the triangles\n var indices = []\n\n // triangles vertices\n var positions = []\n\n // red, green, blue colors in the range 0 to 1\n var colors = []\n\n // normal vector, one per vertex\n var normals = []\n\n var result\n\n // pattern for detecting the end of a number sequence\n var patWord = /^[^\\d.\\s-]+/\n\n // pattern for reading vertices, 3 floats or integers\n var pat3Floats = /(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)/g\n\n // pattern for connectivity, an integer followed by any number of ints\n // the first integer is the number of polygon nodes\n var patConnectivity = /^(\\d+)\\s+([\\s\\d]*)/\n\n // indicates start of vertex data section\n var patPOINTS = /^POINTS /\n\n // indicates start of polygon connectivity section\n var patPOLYGONS = /^POLYGONS /\n\n // indicates start of triangle strips section\n var patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /\n\n // POINT_DATA number_of_values\n var patPOINT_DATA = /^POINT_DATA[ ]+(\\d+)/\n\n // CELL_DATA number_of_polys\n var patCELL_DATA = /^CELL_DATA[ ]+(\\d+)/\n\n // Start of color section\n var patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\\w+)[ ]+3/\n\n // NORMALS Normals float\n var patNORMALS = /^NORMALS[ ]+(\\w+)[ ]+(\\w+)/\n\n var inPointsSection = false\n var inPolygonsSection = false\n var inTriangleStripSection = false\n var inPointDataSection = false\n var inCellDataSection = false\n var inColorSection = false\n var inNormalsSection = false\n\n var lines = data.split('\\n')\n\n for (var i in lines) {\n var line = lines[i].trim()\n\n if (line.indexOf('DATASET') === 0) {\n var dataset = line.split(' ')[1]\n\n if (dataset !== 'POLYDATA') throw new Error('Unsupported DATASET type: ' + dataset)\n } else if (inPointsSection) {\n // get the vertices\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var x = parseFloat(result[1])\n var y = parseFloat(result[2])\n var z = parseFloat(result[3])\n positions.push(x, y, z)\n }\n } else if (inPolygonsSection) {\n if ((result = patConnectivity.exec(line)) !== null) {\n // numVertices i0 i1 i2 ...\n var numVertices = parseInt(result[1])\n var inds = result[2].split(/\\s+/)\n\n if (numVertices >= 3) {\n var i0 = parseInt(inds[0])\n var i1, i2\n var k = 1\n // split the polygon in numVertices - 2 triangles\n for (var j = 0; j < numVertices - 2; ++j) {\n i1 = parseInt(inds[k])\n i2 = parseInt(inds[k + 1])\n indices.push(i0, i1, i2)\n k++\n }\n }\n }\n } else if (inTriangleStripSection) {\n if ((result = patConnectivity.exec(line)) !== null) {\n // numVertices i0 i1 i2 ...\n var numVertices = parseInt(result[1])\n var inds = result[2].split(/\\s+/)\n\n if (numVertices >= 3) {\n var i0, i1, i2\n // split the polygon in numVertices - 2 triangles\n for (var j = 0; j < numVertices - 2; j++) {\n if (j % 2 === 1) {\n i0 = parseInt(inds[j])\n i1 = parseInt(inds[j + 2])\n i2 = parseInt(inds[j + 1])\n indices.push(i0, i1, i2)\n } else {\n i0 = parseInt(inds[j])\n i1 = parseInt(inds[j + 1])\n i2 = parseInt(inds[j + 2])\n indices.push(i0, i1, i2)\n }\n }\n }\n }\n } else if (inPointDataSection || inCellDataSection) {\n if (inColorSection) {\n // Get the colors\n\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var r = parseFloat(result[1])\n var g = parseFloat(result[2])\n var b = parseFloat(result[3])\n colors.push(r, g, b)\n }\n } else if (inNormalsSection) {\n // Get the normal vectors\n\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var nx = parseFloat(result[1])\n var ny = parseFloat(result[2])\n var nz = parseFloat(result[3])\n normals.push(nx, ny, nz)\n }\n }\n }\n\n if (patPOLYGONS.exec(line) !== null) {\n inPolygonsSection = true\n inPointsSection = false\n inTriangleStripSection = false\n } else if (patPOINTS.exec(line) !== null) {\n inPolygonsSection = false\n inPointsSection = true\n inTriangleStripSection = false\n } else if (patTRIANGLE_STRIPS.exec(line) !== null) {\n inPolygonsSection = false\n inPointsSection = false\n inTriangleStripSection = true\n } else if (patPOINT_DATA.exec(line) !== null) {\n inPointDataSection = true\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patCELL_DATA.exec(line) !== null) {\n inCellDataSection = true\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patCOLOR_SCALARS.exec(line) !== null) {\n inColorSection = true\n inNormalsSection = false\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patNORMALS.exec(line) !== null) {\n inNormalsSection = true\n inColorSection = false\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n }\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(indices)\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3))\n\n if (normals.length === positions.length) {\n geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3))\n }\n\n if (colors.length !== indices.length) {\n // stagger\n\n if (colors.length === positions.length) {\n geometry.setAttribute('color', new Float32BufferAttribute(colors, 3))\n }\n } else {\n // cell\n\n geometry = geometry.toNonIndexed()\n var numTriangles = geometry.attributes.position.count / 3\n\n if (colors.length === numTriangles * 3) {\n var newColors = []\n\n for (var i = 0; i < numTriangles; i++) {\n var r = colors[3 * i + 0]\n var g = colors[3 * i + 1]\n var b = colors[3 * i + 2]\n\n newColors.push(r, g, b)\n newColors.push(r, g, b)\n newColors.push(r, g, b)\n }\n\n geometry.setAttribute('color', new Float32BufferAttribute(newColors, 3))\n }\n }\n\n return geometry\n }\n\n function parseBinary(data) {\n var count, pointIndex, i, numberOfPoints, s\n var buffer = new Uint8Array(data)\n var dataView = new DataView(data)\n\n // Points and normals, by default, are empty\n var points = []\n var normals = []\n var indices = []\n\n // Going to make a big array of strings\n var vtk = []\n var index = 0\n\n function findString(buffer, start) {\n var index = start\n var c = buffer[index]\n var s = []\n while (c !== 10) {\n s.push(String.fromCharCode(c))\n index++\n c = buffer[index]\n }\n\n return { start: start, end: index, next: index + 1, parsedString: s.join('') }\n }\n\n var state, line\n\n while (true) {\n // Get a string\n state = findString(buffer, index)\n line = state.parsedString\n\n if (line.indexOf('DATASET') === 0) {\n var dataset = line.split(' ')[1]\n\n if (dataset !== 'POLYDATA') throw new Error('Unsupported DATASET type: ' + dataset)\n } else if (line.indexOf('POINTS') === 0) {\n vtk.push(line)\n // Add the points\n numberOfPoints = parseInt(line.split(' ')[1], 10)\n\n // Each point is 3 4-byte floats\n count = numberOfPoints * 4 * 3\n\n points = new Float32Array(numberOfPoints * 3)\n\n pointIndex = state.next\n for (i = 0; i < numberOfPoints; i++) {\n points[3 * i] = dataView.getFloat32(pointIndex, false)\n points[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false)\n points[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false)\n pointIndex = pointIndex + 12\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('TRIANGLE_STRIPS') === 0) {\n var numberOfStrips = parseInt(line.split(' ')[1], 10)\n var size = parseInt(line.split(' ')[2], 10)\n // 4 byte integers\n count = size * 4\n\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n var indicesIndex = 0\n\n pointIndex = state.next\n for (i = 0; i < numberOfStrips; i++) {\n // For each strip, read the first value, then record that many more points\n var indexCount = dataView.getInt32(pointIndex, false)\n var strip = []\n pointIndex += 4\n for (s = 0; s < indexCount; s++) {\n strip.push(dataView.getInt32(pointIndex, false))\n pointIndex += 4\n }\n\n // retrieves the n-2 triangles from the triangle strip\n for (var j = 0; j < indexCount - 2; j++) {\n if (j % 2) {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 2]\n indices[indicesIndex++] = strip[j + 1]\n } else {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n indices[indicesIndex++] = strip[j + 2]\n }\n }\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('POLYGONS') === 0) {\n var numberOfStrips = parseInt(line.split(' ')[1], 10)\n var size = parseInt(line.split(' ')[2], 10)\n // 4 byte integers\n count = size * 4\n\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n var indicesIndex = 0\n\n pointIndex = state.next\n for (i = 0; i < numberOfStrips; i++) {\n // For each strip, read the first value, then record that many more points\n var indexCount = dataView.getInt32(pointIndex, false)\n var strip = []\n pointIndex += 4\n for (s = 0; s < indexCount; s++) {\n strip.push(dataView.getInt32(pointIndex, false))\n pointIndex += 4\n }\n\n // divide the polygon in n-2 triangle\n for (var j = 1; j < indexCount - 1; j++) {\n indices[indicesIndex++] = strip[0]\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n }\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('POINT_DATA') === 0) {\n numberOfPoints = parseInt(line.split(' ')[1], 10)\n\n // Grab the next line\n state = findString(buffer, state.next)\n\n // Now grab the binary data\n count = numberOfPoints * 4 * 3\n\n normals = new Float32Array(numberOfPoints * 3)\n pointIndex = state.next\n for (i = 0; i < numberOfPoints; i++) {\n normals[3 * i] = dataView.getFloat32(pointIndex, false)\n normals[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false)\n normals[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false)\n pointIndex += 12\n }\n\n // Increment past our data\n state.next = state.next + count\n }\n\n // Increment index\n index = state.next\n\n if (index >= buffer.byteLength) {\n break\n }\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(new BufferAttribute(indices, 1))\n geometry.setAttribute('position', new BufferAttribute(points, 3))\n\n if (normals.length === points.length) {\n geometry.setAttribute('normal', new BufferAttribute(normals, 3))\n }\n\n return geometry\n }\n\n function Float32Concat(first, second) {\n const firstLength = first.length,\n result = new Float32Array(firstLength + second.length)\n\n result.set(first)\n result.set(second, firstLength)\n\n return result\n }\n\n function Int32Concat(first, second) {\n var firstLength = first.length,\n result = new Int32Array(firstLength + second.length)\n\n result.set(first)\n result.set(second, firstLength)\n\n return result\n }\n\n function parseXML(stringFile) {\n // Changes XML to JSON, based on https://davidwalsh.name/convert-xml-json\n\n function xmlToJson(xml) {\n // Create the return object\n var obj = {}\n\n if (xml.nodeType === 1) {\n // element\n\n // do attributes\n\n if (xml.attributes) {\n if (xml.attributes.length > 0) {\n obj['attributes'] = {}\n\n for (var j = 0; j < xml.attributes.length; j++) {\n var attribute = xml.attributes.item(j)\n obj['attributes'][attribute.nodeName] = attribute.nodeValue.trim()\n }\n }\n }\n } else if (xml.nodeType === 3) {\n // text\n\n obj = xml.nodeValue.trim()\n }\n\n // do children\n if (xml.hasChildNodes()) {\n for (var i = 0; i < xml.childNodes.length; i++) {\n var item = xml.childNodes.item(i)\n var nodeName = item.nodeName\n\n if (typeof obj[nodeName] === 'undefined') {\n var tmp = xmlToJson(item)\n\n if (tmp !== '') obj[nodeName] = tmp\n } else {\n if (typeof obj[nodeName].push === 'undefined') {\n var old = obj[nodeName]\n obj[nodeName] = [old]\n }\n\n var tmp = xmlToJson(item)\n\n if (tmp !== '') obj[nodeName].push(tmp)\n }\n }\n }\n\n return obj\n }\n\n // Taken from Base64-js\n function Base64toByteArray(b64) {\n var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n var i\n var lookup = []\n var revLookup = []\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n var len = code.length\n\n for (i = 0; i < len; i++) {\n lookup[i] = code[i]\n }\n\n for (i = 0; i < len; ++i) {\n revLookup[code.charCodeAt(i)] = i\n }\n\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n\n var j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n arr = new Arr((len * 3) / 4 - placeHolders)\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp & 0xff0000) >> 16\n arr[L++] = (tmp & 0xff00) >> 8\n arr[L++] = tmp & 0xff\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xff\n } else if (placeHolders === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xff\n arr[L++] = tmp & 0xff\n }\n\n return arr\n }\n\n function parseDataArray(ele, compressed) {\n var numBytes = 0\n\n if (json.attributes.header_type === 'UInt64') {\n numBytes = 8\n } else if (json.attributes.header_type === 'UInt32') {\n numBytes = 4\n }\n\n // Check the format\n if (ele.attributes.format === 'binary' && compressed) {\n var rawData, content, byteData, blocks, cSizeStart, headerSize, padding, dataOffsets, currentOffset\n\n if (ele.attributes.type === 'Float32') {\n var txt = new Float32Array()\n } else if (ele.attributes.type === 'Int64') {\n var txt = new Int32Array()\n }\n\n // VTP data with the header has the following structure:\n // [#blocks][#u-size][#p-size][#c-size-1][#c-size-2]...[#c-size-#blocks][DATA]\n //\n // Each token is an integer value whose type is specified by \"header_type\" at the top of the file (UInt32 if no type specified). The token meanings are:\n // [#blocks] = Number of blocks\n // [#u-size] = Block size before compression\n // [#p-size] = Size of last partial block (zero if it not needed)\n // [#c-size-i] = Size in bytes of block i after compression\n //\n // The [DATA] portion stores contiguously every block appended together. The offset from the beginning of the data section to the beginning of a block is\n // computed by summing the compressed block sizes from preceding blocks according to the header.\n\n rawData = ele['#text']\n\n byteData = Base64toByteArray(rawData)\n\n blocks = byteData[0]\n for (var i = 1; i < numBytes - 1; i++) {\n blocks = blocks | (byteData[i] << (i * numBytes))\n }\n\n headerSize = (blocks + 3) * numBytes\n padding = headerSize % 3 > 0 ? 3 - (headerSize % 3) : 0\n headerSize = headerSize + padding\n\n dataOffsets = []\n currentOffset = headerSize\n dataOffsets.push(currentOffset)\n\n // Get the blocks sizes after the compression.\n // There are three blocks before c-size-i, so we skip 3*numBytes\n cSizeStart = 3 * numBytes\n\n for (var i = 0; i < blocks; i++) {\n var currentBlockSize = byteData[i * numBytes + cSizeStart]\n\n for (var j = 1; j < numBytes - 1; j++) {\n // Each data point consists of 8 bytes regardless of the header type\n currentBlockSize = currentBlockSize | (byteData[i * numBytes + cSizeStart + j] << (j * 8))\n }\n\n currentOffset = currentOffset + currentBlockSize\n dataOffsets.push(currentOffset)\n }\n\n for (var i = 0; i < dataOffsets.length - 1; i++) {\n var data = unzlibSync(byteData.slice(dataOffsets[i], dataOffsets[i + 1]))\n content = data.buffer\n\n if (ele.attributes.type === 'Float32') {\n content = new Float32Array(content)\n txt = Float32Concat(txt, content)\n } else if (ele.attributes.type === 'Int64') {\n content = new Int32Array(content)\n txt = Int32Concat(txt, content)\n }\n }\n\n delete ele['#text']\n\n if (ele.attributes.type === 'Int64') {\n if (ele.attributes.format === 'binary') {\n txt = txt.filter(function (el, idx) {\n if (idx % 2 !== 1) return true\n })\n }\n }\n } else {\n if (ele.attributes.format === 'binary' && !compressed) {\n var content = Base64toByteArray(ele['#text'])\n\n // VTP data for the uncompressed case has the following structure:\n // [#bytes][DATA]\n // where \"[#bytes]\" is an integer value specifying the number of bytes in the block of data following it.\n content = content.slice(numBytes).buffer\n } else {\n if (ele['#text']) {\n var content = ele['#text'].split(/\\s+/).filter(function (el) {\n if (el !== '') return el\n })\n } else {\n var content = new Int32Array(0).buffer\n }\n }\n\n delete ele['#text']\n\n // Get the content and optimize it\n if (ele.attributes.type === 'Float32') {\n var txt = new Float32Array(content)\n } else if (ele.attributes.type === 'Int32') {\n var txt = new Int32Array(content)\n } else if (ele.attributes.type === 'Int64') {\n var txt = new Int32Array(content)\n\n if (ele.attributes.format === 'binary') {\n txt = txt.filter(function (el, idx) {\n if (idx % 2 !== 1) return true\n })\n }\n }\n } // endif ( ele.attributes.format === 'binary' && compressed )\n\n return txt\n }\n\n // Main part\n // Get Dom\n var dom = null\n\n if (window.DOMParser) {\n try {\n dom = new DOMParser().parseFromString(stringFile, 'text/xml')\n } catch (e) {\n dom = null\n }\n } else if (window.ActiveXObject) {\n try {\n dom = new ActiveXObject('Microsoft.XMLDOM')\n dom.async = false\n\n if (!(dom.loadXML(/* xml */))) {\n throw new Error(dom.parseError.reason + dom.parseError.srcText)\n }\n } catch (e) {\n dom = null\n }\n } else {\n throw new Error('Cannot parse xml string!')\n }\n\n // Get the doc\n var doc = dom.documentElement\n // Convert to json\n var json = xmlToJson(doc)\n var points = []\n var normals = []\n var indices = []\n\n if (json.PolyData) {\n var piece = json.PolyData.Piece\n var compressed = json.attributes.hasOwnProperty('compressor')\n\n // Can be optimized\n // Loop through the sections\n var sections = ['PointData', 'Points', 'Strips', 'Polys'] // +['CellData', 'Verts', 'Lines'];\n var sectionIndex = 0,\n numberOfSections = sections.length\n\n while (sectionIndex < numberOfSections) {\n var section = piece[sections[sectionIndex]]\n\n // If it has a DataArray in it\n\n if (section && section.DataArray) {\n // Depending on the number of DataArrays\n\n if (Object.prototype.toString.call(section.DataArray) === '[object Array]') {\n var arr = section.DataArray\n } else {\n var arr = [section.DataArray]\n }\n\n var dataArrayIndex = 0,\n numberOfDataArrays = arr.length\n\n while (dataArrayIndex < numberOfDataArrays) {\n // Parse the DataArray\n if ('#text' in arr[dataArrayIndex] && arr[dataArrayIndex]['#text'].length > 0) {\n arr[dataArrayIndex].text = parseDataArray(arr[dataArrayIndex], compressed)\n }\n\n dataArrayIndex++\n }\n\n switch (sections[sectionIndex]) {\n // if iti is point data\n case 'PointData':\n var numberOfPoints = parseInt(piece.attributes.NumberOfPoints)\n var normalsName = section.attributes.Normals\n\n if (numberOfPoints > 0) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (normalsName === arr[i].attributes.Name) {\n var components = arr[i].attributes.NumberOfComponents\n normals = new Float32Array(numberOfPoints * components)\n normals.set(arr[i].text, 0)\n }\n }\n }\n\n break\n\n // if it is points\n case 'Points':\n var numberOfPoints = parseInt(piece.attributes.NumberOfPoints)\n\n if (numberOfPoints > 0) {\n var components = section.DataArray.attributes.NumberOfComponents\n points = new Float32Array(numberOfPoints * components)\n points.set(section.DataArray.text, 0)\n }\n\n break\n\n // if it is strips\n case 'Strips':\n var numberOfStrips = parseInt(piece.attributes.NumberOfStrips)\n\n if (numberOfStrips > 0) {\n var connectivity = new Int32Array(section.DataArray[0].text.length)\n var offset = new Int32Array(section.DataArray[1].text.length)\n connectivity.set(section.DataArray[0].text, 0)\n offset.set(section.DataArray[1].text, 0)\n\n var size = numberOfStrips + connectivity.length\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n\n var indicesIndex = 0\n\n for (var i = 0, len = numberOfStrips; i < len; i++) {\n var strip = []\n\n for (var s = 0, len1 = offset[i], len0 = 0; s < len1 - len0; s++) {\n strip.push(connectivity[s])\n\n if (i > 0) len0 = offset[i - 1]\n }\n\n for (var j = 0, len1 = offset[i], len0 = 0; j < len1 - len0 - 2; j++) {\n if (j % 2) {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 2]\n indices[indicesIndex++] = strip[j + 1]\n } else {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n indices[indicesIndex++] = strip[j + 2]\n }\n\n if (i > 0) len0 = offset[i - 1]\n }\n }\n }\n\n break\n\n // if it is polys\n case 'Polys':\n var numberOfPolys = parseInt(piece.attributes.NumberOfPolys)\n\n if (numberOfPolys > 0) {\n var connectivity = new Int32Array(section.DataArray[0].text.length)\n var offset = new Int32Array(section.DataArray[1].text.length)\n connectivity.set(section.DataArray[0].text, 0)\n offset.set(section.DataArray[1].text, 0)\n\n var size = numberOfPolys + connectivity.length\n indices = new Uint32Array(3 * size - 9 * numberOfPolys)\n var indicesIndex = 0,\n connectivityIndex = 0\n var i = 0,\n len = numberOfPolys,\n len0 = 0\n\n while (i < len) {\n var poly = []\n var s = 0,\n len1 = offset[i]\n\n while (s < len1 - len0) {\n poly.push(connectivity[connectivityIndex++])\n s++\n }\n\n var j = 1\n\n while (j < len1 - len0 - 1) {\n indices[indicesIndex++] = poly[0]\n indices[indicesIndex++] = poly[j]\n indices[indicesIndex++] = poly[j + 1]\n j++\n }\n\n i++\n len0 = offset[i - 1]\n }\n }\n\n break\n\n default:\n break\n }\n }\n\n sectionIndex++\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(new BufferAttribute(indices, 1))\n geometry.setAttribute('position', new BufferAttribute(points, 3))\n\n if (normals.length === points.length) {\n geometry.setAttribute('normal', new BufferAttribute(normals, 3))\n }\n\n return geometry\n } else {\n throw new Error('Unsupported DATASET type')\n }\n }\n\n // get the 5 first lines of the files to check if there is the key word binary\n var meta = LoaderUtils.decodeText(new Uint8Array(data, 0, 250)).split('\\n')\n\n if (meta[0].indexOf('xml') !== -1) {\n return parseXML(LoaderUtils.decodeText(data))\n } else if (meta[2].includes('ASCII')) {\n return parseASCII(LoaderUtils.decodeText(data))\n } else {\n return parseBinary(data)\n }\n }\n}\n\nexport { VTKLoader }\n"],"names":["data","buffer","index","s","j","i","len","arr","compressed"],"mappings":"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"}
1
+ {"version":3,"file":"VTKLoader.js","sources":["../../src/loaders/VTKLoader.js"],"sourcesContent":["import { BufferAttribute, BufferGeometry, FileLoader, Float32BufferAttribute, Loader, LoaderUtils } from 'three'\nimport { unzlibSync } from 'fflate'\nimport { decodeText } from '../_polyfill/LoaderUtils'\n\nclass VTKLoader extends Loader {\n constructor(manager) {\n super(manager)\n }\n\n load(url, onLoad, onProgress, onError) {\n const scope = this\n\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 (text) {\n try {\n onLoad(scope.parse(text))\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 function parseASCII(data) {\n // connectivity of the triangles\n var indices = []\n\n // triangles vertices\n var positions = []\n\n // red, green, blue colors in the range 0 to 1\n var colors = []\n\n // normal vector, one per vertex\n var normals = []\n\n var result\n\n // pattern for detecting the end of a number sequence\n var patWord = /^[^\\d.\\s-]+/\n\n // pattern for reading vertices, 3 floats or integers\n var pat3Floats = /(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)/g\n\n // pattern for connectivity, an integer followed by any number of ints\n // the first integer is the number of polygon nodes\n var patConnectivity = /^(\\d+)\\s+([\\s\\d]*)/\n\n // indicates start of vertex data section\n var patPOINTS = /^POINTS /\n\n // indicates start of polygon connectivity section\n var patPOLYGONS = /^POLYGONS /\n\n // indicates start of triangle strips section\n var patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /\n\n // POINT_DATA number_of_values\n var patPOINT_DATA = /^POINT_DATA[ ]+(\\d+)/\n\n // CELL_DATA number_of_polys\n var patCELL_DATA = /^CELL_DATA[ ]+(\\d+)/\n\n // Start of color section\n var patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\\w+)[ ]+3/\n\n // NORMALS Normals float\n var patNORMALS = /^NORMALS[ ]+(\\w+)[ ]+(\\w+)/\n\n var inPointsSection = false\n var inPolygonsSection = false\n var inTriangleStripSection = false\n var inPointDataSection = false\n var inCellDataSection = false\n var inColorSection = false\n var inNormalsSection = false\n\n var lines = data.split('\\n')\n\n for (var i in lines) {\n var line = lines[i].trim()\n\n if (line.indexOf('DATASET') === 0) {\n var dataset = line.split(' ')[1]\n\n if (dataset !== 'POLYDATA') throw new Error('Unsupported DATASET type: ' + dataset)\n } else if (inPointsSection) {\n // get the vertices\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var x = parseFloat(result[1])\n var y = parseFloat(result[2])\n var z = parseFloat(result[3])\n positions.push(x, y, z)\n }\n } else if (inPolygonsSection) {\n if ((result = patConnectivity.exec(line)) !== null) {\n // numVertices i0 i1 i2 ...\n var numVertices = parseInt(result[1])\n var inds = result[2].split(/\\s+/)\n\n if (numVertices >= 3) {\n var i0 = parseInt(inds[0])\n var i1, i2\n var k = 1\n // split the polygon in numVertices - 2 triangles\n for (var j = 0; j < numVertices - 2; ++j) {\n i1 = parseInt(inds[k])\n i2 = parseInt(inds[k + 1])\n indices.push(i0, i1, i2)\n k++\n }\n }\n }\n } else if (inTriangleStripSection) {\n if ((result = patConnectivity.exec(line)) !== null) {\n // numVertices i0 i1 i2 ...\n var numVertices = parseInt(result[1])\n var inds = result[2].split(/\\s+/)\n\n if (numVertices >= 3) {\n var i0, i1, i2\n // split the polygon in numVertices - 2 triangles\n for (var j = 0; j < numVertices - 2; j++) {\n if (j % 2 === 1) {\n i0 = parseInt(inds[j])\n i1 = parseInt(inds[j + 2])\n i2 = parseInt(inds[j + 1])\n indices.push(i0, i1, i2)\n } else {\n i0 = parseInt(inds[j])\n i1 = parseInt(inds[j + 1])\n i2 = parseInt(inds[j + 2])\n indices.push(i0, i1, i2)\n }\n }\n }\n }\n } else if (inPointDataSection || inCellDataSection) {\n if (inColorSection) {\n // Get the colors\n\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var r = parseFloat(result[1])\n var g = parseFloat(result[2])\n var b = parseFloat(result[3])\n colors.push(r, g, b)\n }\n } else if (inNormalsSection) {\n // Get the normal vectors\n\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null) break\n\n var nx = parseFloat(result[1])\n var ny = parseFloat(result[2])\n var nz = parseFloat(result[3])\n normals.push(nx, ny, nz)\n }\n }\n }\n\n if (patPOLYGONS.exec(line) !== null) {\n inPolygonsSection = true\n inPointsSection = false\n inTriangleStripSection = false\n } else if (patPOINTS.exec(line) !== null) {\n inPolygonsSection = false\n inPointsSection = true\n inTriangleStripSection = false\n } else if (patTRIANGLE_STRIPS.exec(line) !== null) {\n inPolygonsSection = false\n inPointsSection = false\n inTriangleStripSection = true\n } else if (patPOINT_DATA.exec(line) !== null) {\n inPointDataSection = true\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patCELL_DATA.exec(line) !== null) {\n inCellDataSection = true\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patCOLOR_SCALARS.exec(line) !== null) {\n inColorSection = true\n inNormalsSection = false\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n } else if (patNORMALS.exec(line) !== null) {\n inNormalsSection = true\n inColorSection = false\n inPointsSection = false\n inPolygonsSection = false\n inTriangleStripSection = false\n }\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(indices)\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3))\n\n if (normals.length === positions.length) {\n geometry.setAttribute('normal', new Float32BufferAttribute(normals, 3))\n }\n\n if (colors.length !== indices.length) {\n // stagger\n\n if (colors.length === positions.length) {\n geometry.setAttribute('color', new Float32BufferAttribute(colors, 3))\n }\n } else {\n // cell\n\n geometry = geometry.toNonIndexed()\n var numTriangles = geometry.attributes.position.count / 3\n\n if (colors.length === numTriangles * 3) {\n var newColors = []\n\n for (var i = 0; i < numTriangles; i++) {\n var r = colors[3 * i + 0]\n var g = colors[3 * i + 1]\n var b = colors[3 * i + 2]\n\n newColors.push(r, g, b)\n newColors.push(r, g, b)\n newColors.push(r, g, b)\n }\n\n geometry.setAttribute('color', new Float32BufferAttribute(newColors, 3))\n }\n }\n\n return geometry\n }\n\n function parseBinary(data) {\n var count, pointIndex, i, numberOfPoints, s\n var buffer = new Uint8Array(data)\n var dataView = new DataView(data)\n\n // Points and normals, by default, are empty\n var points = []\n var normals = []\n var indices = []\n\n // Going to make a big array of strings\n var vtk = []\n var index = 0\n\n function findString(buffer, start) {\n var index = start\n var c = buffer[index]\n var s = []\n while (c !== 10) {\n s.push(String.fromCharCode(c))\n index++\n c = buffer[index]\n }\n\n return { start: start, end: index, next: index + 1, parsedString: s.join('') }\n }\n\n var state, line\n\n while (true) {\n // Get a string\n state = findString(buffer, index)\n line = state.parsedString\n\n if (line.indexOf('DATASET') === 0) {\n var dataset = line.split(' ')[1]\n\n if (dataset !== 'POLYDATA') throw new Error('Unsupported DATASET type: ' + dataset)\n } else if (line.indexOf('POINTS') === 0) {\n vtk.push(line)\n // Add the points\n numberOfPoints = parseInt(line.split(' ')[1], 10)\n\n // Each point is 3 4-byte floats\n count = numberOfPoints * 4 * 3\n\n points = new Float32Array(numberOfPoints * 3)\n\n pointIndex = state.next\n for (i = 0; i < numberOfPoints; i++) {\n points[3 * i] = dataView.getFloat32(pointIndex, false)\n points[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false)\n points[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false)\n pointIndex = pointIndex + 12\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('TRIANGLE_STRIPS') === 0) {\n var numberOfStrips = parseInt(line.split(' ')[1], 10)\n var size = parseInt(line.split(' ')[2], 10)\n // 4 byte integers\n count = size * 4\n\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n var indicesIndex = 0\n\n pointIndex = state.next\n for (i = 0; i < numberOfStrips; i++) {\n // For each strip, read the first value, then record that many more points\n var indexCount = dataView.getInt32(pointIndex, false)\n var strip = []\n pointIndex += 4\n for (s = 0; s < indexCount; s++) {\n strip.push(dataView.getInt32(pointIndex, false))\n pointIndex += 4\n }\n\n // retrieves the n-2 triangles from the triangle strip\n for (var j = 0; j < indexCount - 2; j++) {\n if (j % 2) {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 2]\n indices[indicesIndex++] = strip[j + 1]\n } else {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n indices[indicesIndex++] = strip[j + 2]\n }\n }\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('POLYGONS') === 0) {\n var numberOfStrips = parseInt(line.split(' ')[1], 10)\n var size = parseInt(line.split(' ')[2], 10)\n // 4 byte integers\n count = size * 4\n\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n var indicesIndex = 0\n\n pointIndex = state.next\n for (i = 0; i < numberOfStrips; i++) {\n // For each strip, read the first value, then record that many more points\n var indexCount = dataView.getInt32(pointIndex, false)\n var strip = []\n pointIndex += 4\n for (s = 0; s < indexCount; s++) {\n strip.push(dataView.getInt32(pointIndex, false))\n pointIndex += 4\n }\n\n // divide the polygon in n-2 triangle\n for (var j = 1; j < indexCount - 1; j++) {\n indices[indicesIndex++] = strip[0]\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n }\n }\n\n // increment our next pointer\n state.next = state.next + count + 1\n } else if (line.indexOf('POINT_DATA') === 0) {\n numberOfPoints = parseInt(line.split(' ')[1], 10)\n\n // Grab the next line\n state = findString(buffer, state.next)\n\n // Now grab the binary data\n count = numberOfPoints * 4 * 3\n\n normals = new Float32Array(numberOfPoints * 3)\n pointIndex = state.next\n for (i = 0; i < numberOfPoints; i++) {\n normals[3 * i] = dataView.getFloat32(pointIndex, false)\n normals[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false)\n normals[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false)\n pointIndex += 12\n }\n\n // Increment past our data\n state.next = state.next + count\n }\n\n // Increment index\n index = state.next\n\n if (index >= buffer.byteLength) {\n break\n }\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(new BufferAttribute(indices, 1))\n geometry.setAttribute('position', new BufferAttribute(points, 3))\n\n if (normals.length === points.length) {\n geometry.setAttribute('normal', new BufferAttribute(normals, 3))\n }\n\n return geometry\n }\n\n function Float32Concat(first, second) {\n const firstLength = first.length,\n result = new Float32Array(firstLength + second.length)\n\n result.set(first)\n result.set(second, firstLength)\n\n return result\n }\n\n function Int32Concat(first, second) {\n var firstLength = first.length,\n result = new Int32Array(firstLength + second.length)\n\n result.set(first)\n result.set(second, firstLength)\n\n return result\n }\n\n function parseXML(stringFile) {\n // Changes XML to JSON, based on https://davidwalsh.name/convert-xml-json\n\n function xmlToJson(xml) {\n // Create the return object\n var obj = {}\n\n if (xml.nodeType === 1) {\n // element\n\n // do attributes\n\n if (xml.attributes) {\n if (xml.attributes.length > 0) {\n obj['attributes'] = {}\n\n for (var j = 0; j < xml.attributes.length; j++) {\n var attribute = xml.attributes.item(j)\n obj['attributes'][attribute.nodeName] = attribute.nodeValue.trim()\n }\n }\n }\n } else if (xml.nodeType === 3) {\n // text\n\n obj = xml.nodeValue.trim()\n }\n\n // do children\n if (xml.hasChildNodes()) {\n for (var i = 0; i < xml.childNodes.length; i++) {\n var item = xml.childNodes.item(i)\n var nodeName = item.nodeName\n\n if (typeof obj[nodeName] === 'undefined') {\n var tmp = xmlToJson(item)\n\n if (tmp !== '') obj[nodeName] = tmp\n } else {\n if (typeof obj[nodeName].push === 'undefined') {\n var old = obj[nodeName]\n obj[nodeName] = [old]\n }\n\n var tmp = xmlToJson(item)\n\n if (tmp !== '') obj[nodeName].push(tmp)\n }\n }\n }\n\n return obj\n }\n\n // Taken from Base64-js\n function Base64toByteArray(b64) {\n var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n var i\n var lookup = []\n var revLookup = []\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n var len = code.length\n\n for (i = 0; i < len; i++) {\n lookup[i] = code[i]\n }\n\n for (i = 0; i < len; ++i) {\n revLookup[code.charCodeAt(i)] = i\n }\n\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n\n var j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n arr = new Arr((len * 3) / 4 - placeHolders)\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp & 0xff0000) >> 16\n arr[L++] = (tmp & 0xff00) >> 8\n arr[L++] = tmp & 0xff\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xff\n } else if (placeHolders === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xff\n arr[L++] = tmp & 0xff\n }\n\n return arr\n }\n\n function parseDataArray(ele, compressed) {\n var numBytes = 0\n\n if (json.attributes.header_type === 'UInt64') {\n numBytes = 8\n } else if (json.attributes.header_type === 'UInt32') {\n numBytes = 4\n }\n\n // Check the format\n if (ele.attributes.format === 'binary' && compressed) {\n var rawData, content, byteData, blocks, cSizeStart, headerSize, padding, dataOffsets, currentOffset\n\n if (ele.attributes.type === 'Float32') {\n var txt = new Float32Array()\n } else if (ele.attributes.type === 'Int64') {\n var txt = new Int32Array()\n }\n\n // VTP data with the header has the following structure:\n // [#blocks][#u-size][#p-size][#c-size-1][#c-size-2]...[#c-size-#blocks][DATA]\n //\n // Each token is an integer value whose type is specified by \"header_type\" at the top of the file (UInt32 if no type specified). The token meanings are:\n // [#blocks] = Number of blocks\n // [#u-size] = Block size before compression\n // [#p-size] = Size of last partial block (zero if it not needed)\n // [#c-size-i] = Size in bytes of block i after compression\n //\n // The [DATA] portion stores contiguously every block appended together. The offset from the beginning of the data section to the beginning of a block is\n // computed by summing the compressed block sizes from preceding blocks according to the header.\n\n rawData = ele['#text']\n\n byteData = Base64toByteArray(rawData)\n\n blocks = byteData[0]\n for (var i = 1; i < numBytes - 1; i++) {\n blocks = blocks | (byteData[i] << (i * numBytes))\n }\n\n headerSize = (blocks + 3) * numBytes\n padding = headerSize % 3 > 0 ? 3 - (headerSize % 3) : 0\n headerSize = headerSize + padding\n\n dataOffsets = []\n currentOffset = headerSize\n dataOffsets.push(currentOffset)\n\n // Get the blocks sizes after the compression.\n // There are three blocks before c-size-i, so we skip 3*numBytes\n cSizeStart = 3 * numBytes\n\n for (var i = 0; i < blocks; i++) {\n var currentBlockSize = byteData[i * numBytes + cSizeStart]\n\n for (var j = 1; j < numBytes - 1; j++) {\n // Each data point consists of 8 bytes regardless of the header type\n currentBlockSize = currentBlockSize | (byteData[i * numBytes + cSizeStart + j] << (j * 8))\n }\n\n currentOffset = currentOffset + currentBlockSize\n dataOffsets.push(currentOffset)\n }\n\n for (var i = 0; i < dataOffsets.length - 1; i++) {\n var data = unzlibSync(byteData.slice(dataOffsets[i], dataOffsets[i + 1]))\n content = data.buffer\n\n if (ele.attributes.type === 'Float32') {\n content = new Float32Array(content)\n txt = Float32Concat(txt, content)\n } else if (ele.attributes.type === 'Int64') {\n content = new Int32Array(content)\n txt = Int32Concat(txt, content)\n }\n }\n\n delete ele['#text']\n\n if (ele.attributes.type === 'Int64') {\n if (ele.attributes.format === 'binary') {\n txt = txt.filter(function (el, idx) {\n if (idx % 2 !== 1) return true\n })\n }\n }\n } else {\n if (ele.attributes.format === 'binary' && !compressed) {\n var content = Base64toByteArray(ele['#text'])\n\n // VTP data for the uncompressed case has the following structure:\n // [#bytes][DATA]\n // where \"[#bytes]\" is an integer value specifying the number of bytes in the block of data following it.\n content = content.slice(numBytes).buffer\n } else {\n if (ele['#text']) {\n var content = ele['#text'].split(/\\s+/).filter(function (el) {\n if (el !== '') return el\n })\n } else {\n var content = new Int32Array(0).buffer\n }\n }\n\n delete ele['#text']\n\n // Get the content and optimize it\n if (ele.attributes.type === 'Float32') {\n var txt = new Float32Array(content)\n } else if (ele.attributes.type === 'Int32') {\n var txt = new Int32Array(content)\n } else if (ele.attributes.type === 'Int64') {\n var txt = new Int32Array(content)\n\n if (ele.attributes.format === 'binary') {\n txt = txt.filter(function (el, idx) {\n if (idx % 2 !== 1) return true\n })\n }\n }\n } // endif ( ele.attributes.format === 'binary' && compressed )\n\n return txt\n }\n\n // Main part\n // Get Dom\n var dom = null\n\n if (window.DOMParser) {\n try {\n dom = new DOMParser().parseFromString(stringFile, 'text/xml')\n } catch (e) {\n dom = null\n }\n } else if (window.ActiveXObject) {\n try {\n dom = new ActiveXObject('Microsoft.XMLDOM')\n dom.async = false\n\n if (!(dom.loadXML(/* xml */))) {\n throw new Error(dom.parseError.reason + dom.parseError.srcText)\n }\n } catch (e) {\n dom = null\n }\n } else {\n throw new Error('Cannot parse xml string!')\n }\n\n // Get the doc\n var doc = dom.documentElement\n // Convert to json\n var json = xmlToJson(doc)\n var points = []\n var normals = []\n var indices = []\n\n if (json.PolyData) {\n var piece = json.PolyData.Piece\n var compressed = json.attributes.hasOwnProperty('compressor')\n\n // Can be optimized\n // Loop through the sections\n var sections = ['PointData', 'Points', 'Strips', 'Polys'] // +['CellData', 'Verts', 'Lines'];\n var sectionIndex = 0,\n numberOfSections = sections.length\n\n while (sectionIndex < numberOfSections) {\n var section = piece[sections[sectionIndex]]\n\n // If it has a DataArray in it\n\n if (section && section.DataArray) {\n // Depending on the number of DataArrays\n\n if (Object.prototype.toString.call(section.DataArray) === '[object Array]') {\n var arr = section.DataArray\n } else {\n var arr = [section.DataArray]\n }\n\n var dataArrayIndex = 0,\n numberOfDataArrays = arr.length\n\n while (dataArrayIndex < numberOfDataArrays) {\n // Parse the DataArray\n if ('#text' in arr[dataArrayIndex] && arr[dataArrayIndex]['#text'].length > 0) {\n arr[dataArrayIndex].text = parseDataArray(arr[dataArrayIndex], compressed)\n }\n\n dataArrayIndex++\n }\n\n switch (sections[sectionIndex]) {\n // if iti is point data\n case 'PointData':\n var numberOfPoints = parseInt(piece.attributes.NumberOfPoints)\n var normalsName = section.attributes.Normals\n\n if (numberOfPoints > 0) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (normalsName === arr[i].attributes.Name) {\n var components = arr[i].attributes.NumberOfComponents\n normals = new Float32Array(numberOfPoints * components)\n normals.set(arr[i].text, 0)\n }\n }\n }\n\n break\n\n // if it is points\n case 'Points':\n var numberOfPoints = parseInt(piece.attributes.NumberOfPoints)\n\n if (numberOfPoints > 0) {\n var components = section.DataArray.attributes.NumberOfComponents\n points = new Float32Array(numberOfPoints * components)\n points.set(section.DataArray.text, 0)\n }\n\n break\n\n // if it is strips\n case 'Strips':\n var numberOfStrips = parseInt(piece.attributes.NumberOfStrips)\n\n if (numberOfStrips > 0) {\n var connectivity = new Int32Array(section.DataArray[0].text.length)\n var offset = new Int32Array(section.DataArray[1].text.length)\n connectivity.set(section.DataArray[0].text, 0)\n offset.set(section.DataArray[1].text, 0)\n\n var size = numberOfStrips + connectivity.length\n indices = new Uint32Array(3 * size - 9 * numberOfStrips)\n\n var indicesIndex = 0\n\n for (var i = 0, len = numberOfStrips; i < len; i++) {\n var strip = []\n\n for (var s = 0, len1 = offset[i], len0 = 0; s < len1 - len0; s++) {\n strip.push(connectivity[s])\n\n if (i > 0) len0 = offset[i - 1]\n }\n\n for (var j = 0, len1 = offset[i], len0 = 0; j < len1 - len0 - 2; j++) {\n if (j % 2) {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 2]\n indices[indicesIndex++] = strip[j + 1]\n } else {\n indices[indicesIndex++] = strip[j]\n indices[indicesIndex++] = strip[j + 1]\n indices[indicesIndex++] = strip[j + 2]\n }\n\n if (i > 0) len0 = offset[i - 1]\n }\n }\n }\n\n break\n\n // if it is polys\n case 'Polys':\n var numberOfPolys = parseInt(piece.attributes.NumberOfPolys)\n\n if (numberOfPolys > 0) {\n var connectivity = new Int32Array(section.DataArray[0].text.length)\n var offset = new Int32Array(section.DataArray[1].text.length)\n connectivity.set(section.DataArray[0].text, 0)\n offset.set(section.DataArray[1].text, 0)\n\n var size = numberOfPolys + connectivity.length\n indices = new Uint32Array(3 * size - 9 * numberOfPolys)\n var indicesIndex = 0,\n connectivityIndex = 0\n var i = 0,\n len = numberOfPolys,\n len0 = 0\n\n while (i < len) {\n var poly = []\n var s = 0,\n len1 = offset[i]\n\n while (s < len1 - len0) {\n poly.push(connectivity[connectivityIndex++])\n s++\n }\n\n var j = 1\n\n while (j < len1 - len0 - 1) {\n indices[indicesIndex++] = poly[0]\n indices[indicesIndex++] = poly[j]\n indices[indicesIndex++] = poly[j + 1]\n j++\n }\n\n i++\n len0 = offset[i - 1]\n }\n }\n\n break\n\n default:\n break\n }\n }\n\n sectionIndex++\n }\n\n var geometry = new BufferGeometry()\n geometry.setIndex(new BufferAttribute(indices, 1))\n geometry.setAttribute('position', new BufferAttribute(points, 3))\n\n if (normals.length === points.length) {\n geometry.setAttribute('normal', new BufferAttribute(normals, 3))\n }\n\n return geometry\n } else {\n throw new Error('Unsupported DATASET type')\n }\n }\n\n // get the 5 first lines of the files to check if there is the key word binary\n var meta = decodeText(new Uint8Array(data, 0, 250)).split('\\n')\n\n if (meta[0].indexOf('xml') !== -1) {\n return parseXML(decodeText(data))\n } else if (meta[2].includes('ASCII')) {\n return parseASCII(decodeText(data))\n } else {\n return parseBinary(data)\n }\n }\n}\n\nexport { VTKLoader }\n"],"names":["data","buffer","index","s","j","i","len","arr","compressed"],"mappings":";;;AAIA,MAAM,kBAAkB,OAAO;AAAA,EAC7B,YAAY,SAAS;AACnB,UAAM,OAAO;AAAA,EACd;AAAA,EAED,KAAK,KAAK,QAAQ,YAAY,SAAS;AACrC,UAAM,QAAQ;AAEd,UAAM,SAAS,IAAI,WAAW,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,MAAM;AACd,YAAI;AACF,iBAAO,MAAM,MAAM,IAAI,CAAC;AAAA,QACzB,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,aAAS,WAAWA,OAAM;AAExB,UAAI,UAAU,CAAE;AAGhB,UAAI,YAAY,CAAE;AAGlB,UAAI,SAAS,CAAE;AAGf,UAAI,UAAU,CAAE;AAEhB,UAAI;AAGJ,UAAI,UAAU;AAGd,UAAI,aAAa;AAIjB,UAAI,kBAAkB;AAGtB,UAAI,YAAY;AAGhB,UAAI,cAAc;AAGlB,UAAI,qBAAqB;AAGzB,UAAI,gBAAgB;AAGpB,UAAI,eAAe;AAGnB,UAAI,mBAAmB;AAGvB,UAAI,aAAa;AAEjB,UAAI,kBAAkB;AACtB,UAAI,oBAAoB;AACxB,UAAI,yBAAyB;AAC7B,UAAI,qBAAqB;AACzB,UAAI,oBAAoB;AACxB,UAAI,iBAAiB;AACrB,UAAI,mBAAmB;AAEvB,UAAI,QAAQA,MAAK,MAAM,IAAI;AAE3B,eAAS,KAAK,OAAO;AACnB,YAAI,OAAO,MAAM,CAAC,EAAE,KAAM;AAE1B,YAAI,KAAK,QAAQ,SAAS,MAAM,GAAG;AACjC,cAAI,UAAU,KAAK,MAAM,GAAG,EAAE,CAAC;AAE/B,cAAI,YAAY;AAAY,kBAAM,IAAI,MAAM,+BAA+B,OAAO;AAAA,QACnF,WAAU,iBAAiB;AAE1B,kBAAQ,SAAS,WAAW,KAAK,IAAI,OAAO,MAAM;AAChD,gBAAI,QAAQ,KAAK,IAAI,MAAM;AAAM;AAEjC,gBAAI,IAAI,WAAW,OAAO,CAAC,CAAC;AAC5B,gBAAI,IAAI,WAAW,OAAO,CAAC,CAAC;AAC5B,gBAAI,IAAI,WAAW,OAAO,CAAC,CAAC;AAC5B,sBAAU,KAAK,GAAG,GAAG,CAAC;AAAA,UACvB;AAAA,QACF,WAAU,mBAAmB;AAC5B,eAAK,SAAS,gBAAgB,KAAK,IAAI,OAAO,MAAM;AAElD,gBAAI,cAAc,SAAS,OAAO,CAAC,CAAC;AACpC,gBAAI,OAAO,OAAO,CAAC,EAAE,MAAM,KAAK;AAEhC,gBAAI,eAAe,GAAG;AACpB,kBAAI,KAAK,SAAS,KAAK,CAAC,CAAC;AACzB,kBAAI,IAAI;AACR,kBAAI,IAAI;AAER,uBAAS,IAAI,GAAG,IAAI,cAAc,GAAG,EAAE,GAAG;AACxC,qBAAK,SAAS,KAAK,CAAC,CAAC;AACrB,qBAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACzB,wBAAQ,KAAK,IAAI,IAAI,EAAE;AACvB;AAAA,cACD;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAU,wBAAwB;AACjC,eAAK,SAAS,gBAAgB,KAAK,IAAI,OAAO,MAAM;AAElD,gBAAI,cAAc,SAAS,OAAO,CAAC,CAAC;AACpC,gBAAI,OAAO,OAAO,CAAC,EAAE,MAAM,KAAK;AAEhC,gBAAI,eAAe,GAAG;AACpB,kBAAI,IAAI,IAAI;AAEZ,uBAAS,IAAI,GAAG,IAAI,cAAc,GAAG,KAAK;AACxC,oBAAI,IAAI,MAAM,GAAG;AACf,uBAAK,SAAS,KAAK,CAAC,CAAC;AACrB,uBAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACzB,uBAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACzB,0BAAQ,KAAK,IAAI,IAAI,EAAE;AAAA,gBACzC,OAAuB;AACL,uBAAK,SAAS,KAAK,CAAC,CAAC;AACrB,uBAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACzB,uBAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AACzB,0BAAQ,KAAK,IAAI,IAAI,EAAE;AAAA,gBACxB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACX,WAAmB,sBAAsB,mBAAmB;AAClD,cAAI,gBAAgB;AAGlB,oBAAQ,SAAS,WAAW,KAAK,IAAI,OAAO,MAAM;AAChD,kBAAI,QAAQ,KAAK,IAAI,MAAM;AAAM;AAEjC,kBAAI,IAAI,WAAW,OAAO,CAAC,CAAC;AAC5B,kBAAI,IAAI,WAAW,OAAO,CAAC,CAAC;AAC5B,kBAAI,IAAI,WAAW,OAAO,CAAC,CAAC;AAC5B,qBAAO,KAAK,GAAG,GAAG,CAAC;AAAA,YACpB;AAAA,UACF,WAAU,kBAAkB;AAG3B,oBAAQ,SAAS,WAAW,KAAK,IAAI,OAAO,MAAM;AAChD,kBAAI,QAAQ,KAAK,IAAI,MAAM;AAAM;AAEjC,kBAAI,KAAK,WAAW,OAAO,CAAC,CAAC;AAC7B,kBAAI,KAAK,WAAW,OAAO,CAAC,CAAC;AAC7B,kBAAI,KAAK,WAAW,OAAO,CAAC,CAAC;AAC7B,sBAAQ,KAAK,IAAI,IAAI,EAAE;AAAA,YACxB;AAAA,UACF;AAAA,QACF;AAED,YAAI,YAAY,KAAK,IAAI,MAAM,MAAM;AACnC,8BAAoB;AACpB,4BAAkB;AAClB,mCAAyB;AAAA,QAC1B,WAAU,UAAU,KAAK,IAAI,MAAM,MAAM;AACxC,8BAAoB;AACpB,4BAAkB;AAClB,mCAAyB;AAAA,QAC1B,WAAU,mBAAmB,KAAK,IAAI,MAAM,MAAM;AACjD,8BAAoB;AACpB,4BAAkB;AAClB,mCAAyB;AAAA,QAC1B,WAAU,cAAc,KAAK,IAAI,MAAM,MAAM;AAC5C,+BAAqB;AACrB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAC1B,WAAU,aAAa,KAAK,IAAI,MAAM,MAAM;AAC3C,8BAAoB;AACpB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAC1B,WAAU,iBAAiB,KAAK,IAAI,MAAM,MAAM;AAC/C,2BAAiB;AACjB,6BAAmB;AACnB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAC1B,WAAU,WAAW,KAAK,IAAI,MAAM,MAAM;AACzC,6BAAmB;AACnB,2BAAiB;AACjB,4BAAkB;AAClB,8BAAoB;AACpB,mCAAyB;AAAA,QAC1B;AAAA,MACF;AAED,UAAI,WAAW,IAAI,eAAgB;AACnC,eAAS,SAAS,OAAO;AACzB,eAAS,aAAa,YAAY,IAAI,uBAAuB,WAAW,CAAC,CAAC;AAE1E,UAAI,QAAQ,WAAW,UAAU,QAAQ;AACvC,iBAAS,aAAa,UAAU,IAAI,uBAAuB,SAAS,CAAC,CAAC;AAAA,MACvE;AAED,UAAI,OAAO,WAAW,QAAQ,QAAQ;AAGpC,YAAI,OAAO,WAAW,UAAU,QAAQ;AACtC,mBAAS,aAAa,SAAS,IAAI,uBAAuB,QAAQ,CAAC,CAAC;AAAA,QACrE;AAAA,MACT,OAAa;AAGL,mBAAW,SAAS,aAAc;AAClC,YAAI,eAAe,SAAS,WAAW,SAAS,QAAQ;AAExD,YAAI,OAAO,WAAW,eAAe,GAAG;AACtC,cAAI,YAAY,CAAE;AAElB,mBAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACrC,gBAAI,IAAI,OAAO,IAAI,IAAI,CAAC;AACxB,gBAAI,IAAI,OAAO,IAAI,IAAI,CAAC;AACxB,gBAAI,IAAI,OAAO,IAAI,IAAI,CAAC;AAExB,sBAAU,KAAK,GAAG,GAAG,CAAC;AACtB,sBAAU,KAAK,GAAG,GAAG,CAAC;AACtB,sBAAU,KAAK,GAAG,GAAG,CAAC;AAAA,UACvB;AAED,mBAAS,aAAa,SAAS,IAAI,uBAAuB,WAAW,CAAC,CAAC;AAAA,QACxE;AAAA,MACF;AAED,aAAO;AAAA,IACR;AAED,aAAS,YAAYA,OAAM;AACzB,UAAI,OAAO,YAAY,GAAG,gBAAgB;AAC1C,UAAI,SAAS,IAAI,WAAWA,KAAI;AAChC,UAAI,WAAW,IAAI,SAASA,KAAI;AAGhC,UAAI,SAAS,CAAE;AACf,UAAI,UAAU,CAAE;AAChB,UAAI,UAAU,CAAE;AAIhB,UAAI,QAAQ;AAEZ,eAAS,WAAWC,SAAQ,OAAO;AACjC,YAAIC,SAAQ;AACZ,YAAI,IAAID,QAAOC,MAAK;AACpB,YAAIC,KAAI,CAAE;AACV,eAAO,MAAM,IAAI;AACf,UAAAA,GAAE,KAAK,OAAO,aAAa,CAAC,CAAC;AAC7B,UAAAD;AACA,cAAID,QAAOC,MAAK;AAAA,QACjB;AAED,eAAO,EAAE,OAAc,KAAKA,QAAO,MAAMA,SAAQ,GAAG,cAAcC,GAAE,KAAK,EAAE,EAAG;AAAA,MAC/E;AAED,UAAI,OAAO;AAEX,aAAO,MAAM;AAEX,gBAAQ,WAAW,QAAQ,KAAK;AAChC,eAAO,MAAM;AAEb,YAAI,KAAK,QAAQ,SAAS,MAAM,GAAG;AACjC,cAAI,UAAU,KAAK,MAAM,GAAG,EAAE,CAAC;AAE/B,cAAI,YAAY;AAAY,kBAAM,IAAI,MAAM,+BAA+B,OAAO;AAAA,QACnF,WAAU,KAAK,QAAQ,QAAQ,MAAM,GAAG;AAGvC,2BAAiB,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;AAGhD,kBAAQ,iBAAiB,IAAI;AAE7B,mBAAS,IAAI,aAAa,iBAAiB,CAAC;AAE5C,uBAAa,MAAM;AACnB,eAAK,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACnC,mBAAO,IAAI,CAAC,IAAI,SAAS,WAAW,YAAY,KAAK;AACrD,mBAAO,IAAI,IAAI,CAAC,IAAI,SAAS,WAAW,aAAa,GAAG,KAAK;AAC7D,mBAAO,IAAI,IAAI,CAAC,IAAI,SAAS,WAAW,aAAa,GAAG,KAAK;AAC7D,yBAAa,aAAa;AAAA,UAC3B;AAGD,gBAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,QACnC,WAAU,KAAK,QAAQ,iBAAiB,MAAM,GAAG;AAChD,cAAI,iBAAiB,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;AACpD,cAAI,OAAO,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;AAE1C,kBAAQ,OAAO;AAEf,oBAAU,IAAI,YAAY,IAAI,OAAO,IAAI,cAAc;AACvD,cAAI,eAAe;AAEnB,uBAAa,MAAM;AACnB,eAAK,IAAI,GAAG,IAAI,gBAAgB,KAAK;AAEnC,gBAAI,aAAa,SAAS,SAAS,YAAY,KAAK;AACpD,gBAAI,QAAQ,CAAE;AACd,0BAAc;AACd,iBAAK,IAAI,GAAG,IAAI,YAAY,KAAK;AAC/B,oBAAM,KAAK,SAAS,SAAS,YAAY,KAAK,CAAC;AAC/C,4BAAc;AAAA,YACf;AAGD,qBAAS,IAAI,GAAG,IAAI,aAAa,GAAG,KAAK;AACvC,kBAAI,IAAI,GAAG;AACT,wBAAQ,cAAc,IAAI,MAAM,CAAC;AACjC,wBAAQ,cAAc,IAAI,MAAM,IAAI,CAAC;AACrC,wBAAQ,cAAc,IAAI,MAAM,IAAI,CAAC;AAAA,cACrD,OAAqB;AACL,wBAAQ,cAAc,IAAI,MAAM,CAAC;AACjC,wBAAQ,cAAc,IAAI,MAAM,IAAI,CAAC;AACrC,wBAAQ,cAAc,IAAI,MAAM,IAAI,CAAC;AAAA,cACtC;AAAA,YACF;AAAA,UACF;AAGD,gBAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,QACnC,WAAU,KAAK,QAAQ,UAAU,MAAM,GAAG;AACzC,cAAI,iBAAiB,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;AACpD,cAAI,OAAO,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;AAE1C,kBAAQ,OAAO;AAEf,oBAAU,IAAI,YAAY,IAAI,OAAO,IAAI,cAAc;AACvD,cAAI,eAAe;AAEnB,uBAAa,MAAM;AACnB,eAAK,IAAI,GAAG,IAAI,gBAAgB,KAAK;AAEnC,gBAAI,aAAa,SAAS,SAAS,YAAY,KAAK;AACpD,gBAAI,QAAQ,CAAE;AACd,0BAAc;AACd,iBAAK,IAAI,GAAG,IAAI,YAAY,KAAK;AAC/B,oBAAM,KAAK,SAAS,SAAS,YAAY,KAAK,CAAC;AAC/C,4BAAc;AAAA,YACf;AAGD,qBAAS,IAAI,GAAG,IAAI,aAAa,GAAG,KAAK;AACvC,sBAAQ,cAAc,IAAI,MAAM,CAAC;AACjC,sBAAQ,cAAc,IAAI,MAAM,CAAC;AACjC,sBAAQ,cAAc,IAAI,MAAM,IAAI,CAAC;AAAA,YACtC;AAAA,UACF;AAGD,gBAAM,OAAO,MAAM,OAAO,QAAQ;AAAA,QACnC,WAAU,KAAK,QAAQ,YAAY,MAAM,GAAG;AAC3C,2BAAiB,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;AAGhD,kBAAQ,WAAW,QAAQ,MAAM,IAAI;AAGrC,kBAAQ,iBAAiB,IAAI;AAE7B,oBAAU,IAAI,aAAa,iBAAiB,CAAC;AAC7C,uBAAa,MAAM;AACnB,eAAK,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACnC,oBAAQ,IAAI,CAAC,IAAI,SAAS,WAAW,YAAY,KAAK;AACtD,oBAAQ,IAAI,IAAI,CAAC,IAAI,SAAS,WAAW,aAAa,GAAG,KAAK;AAC9D,oBAAQ,IAAI,IAAI,CAAC,IAAI,SAAS,WAAW,aAAa,GAAG,KAAK;AAC9D,0BAAc;AAAA,UACf;AAGD,gBAAM,OAAO,MAAM,OAAO;AAAA,QAC3B;AAGD,gBAAQ,MAAM;AAEd,YAAI,SAAS,OAAO,YAAY;AAC9B;AAAA,QACD;AAAA,MACF;AAED,UAAI,WAAW,IAAI,eAAgB;AACnC,eAAS,SAAS,IAAI,gBAAgB,SAAS,CAAC,CAAC;AACjD,eAAS,aAAa,YAAY,IAAI,gBAAgB,QAAQ,CAAC,CAAC;AAEhE,UAAI,QAAQ,WAAW,OAAO,QAAQ;AACpC,iBAAS,aAAa,UAAU,IAAI,gBAAgB,SAAS,CAAC,CAAC;AAAA,MAChE;AAED,aAAO;AAAA,IACR;AAED,aAAS,cAAc,OAAO,QAAQ;AACpC,YAAM,cAAc,MAAM,QACxB,SAAS,IAAI,aAAa,cAAc,OAAO,MAAM;AAEvD,aAAO,IAAI,KAAK;AAChB,aAAO,IAAI,QAAQ,WAAW;AAE9B,aAAO;AAAA,IACR;AAED,aAAS,YAAY,OAAO,QAAQ;AAClC,UAAI,cAAc,MAAM,QACtB,SAAS,IAAI,WAAW,cAAc,OAAO,MAAM;AAErD,aAAO,IAAI,KAAK;AAChB,aAAO,IAAI,QAAQ,WAAW;AAE9B,aAAO;AAAA,IACR;AAED,aAAS,SAAS,YAAY;AAG5B,eAAS,UAAU,KAAK;AAEtB,YAAI,MAAM,CAAE;AAEZ,YAAI,IAAI,aAAa,GAAG;AAKtB,cAAI,IAAI,YAAY;AAClB,gBAAI,IAAI,WAAW,SAAS,GAAG;AAC7B,kBAAI,YAAY,IAAI,CAAE;AAEtB,uBAASC,KAAI,GAAGA,KAAI,IAAI,WAAW,QAAQA,MAAK;AAC9C,oBAAI,YAAY,IAAI,WAAW,KAAKA,EAAC;AACrC,oBAAI,YAAY,EAAE,UAAU,QAAQ,IAAI,UAAU,UAAU,KAAM;AAAA,cACnE;AAAA,YACF;AAAA,UACF;AAAA,QACX,WAAmB,IAAI,aAAa,GAAG;AAG7B,gBAAM,IAAI,UAAU,KAAM;AAAA,QAC3B;AAGD,YAAI,IAAI,iBAAiB;AACvB,mBAASC,KAAI,GAAGA,KAAI,IAAI,WAAW,QAAQA,MAAK;AAC9C,gBAAI,OAAO,IAAI,WAAW,KAAKA,EAAC;AAChC,gBAAI,WAAW,KAAK;AAEpB,gBAAI,OAAO,IAAI,QAAQ,MAAM,aAAa;AACxC,kBAAI,MAAM,UAAU,IAAI;AAExB,kBAAI,QAAQ;AAAI,oBAAI,QAAQ,IAAI;AAAA,YAC9C,OAAmB;AACL,kBAAI,OAAO,IAAI,QAAQ,EAAE,SAAS,aAAa;AAC7C,oBAAI,MAAM,IAAI,QAAQ;AACtB,oBAAI,QAAQ,IAAI,CAAC,GAAG;AAAA,cACrB;AAED,kBAAI,MAAM,UAAU,IAAI;AAExB,kBAAI,QAAQ;AAAI,oBAAI,QAAQ,EAAE,KAAK,GAAG;AAAA,YACvC;AAAA,UACF;AAAA,QACF;AAED,eAAO;AAAA,MACR;AAGD,eAAS,kBAAkB,KAAK;AAC9B,YAAI,MAAM,OAAO,eAAe,cAAc,aAAa;AAC3D,YAAIA;AAEJ,YAAI,YAAY,CAAE;AAClB,YAAI,OAAO;AACX,YAAIC,OAAM,KAAK;AAEf,aAAKD,KAAI,GAAGA,KAAIC,MAAKD,MAAK;AAAA,QAEzB;AAED,aAAKA,KAAI,GAAGA,KAAIC,MAAK,EAAED,IAAG;AACxB,oBAAU,KAAK,WAAWA,EAAC,CAAC,IAAIA;AAAA,QACjC;AAED,kBAAU,IAAI,WAAW,CAAC,CAAC,IAAI;AAC/B,kBAAU,IAAI,WAAW,CAAC,CAAC,IAAI;AAE/B,YAAID,IAAG,GAAG,KAAK,cAAcG;AAC7B,YAAID,OAAM,IAAI;AAEd,YAAIA,OAAM,IAAI,GAAG;AACf,gBAAM,IAAI,MAAM,gDAAgD;AAAA,QACjE;AAED,uBAAe,IAAIA,OAAM,CAAC,MAAM,MAAM,IAAI,IAAIA,OAAM,CAAC,MAAM,MAAM,IAAI;AACrE,QAAAC,OAAM,IAAI,IAAKD,OAAM,IAAK,IAAI,YAAY;AAC1C,YAAI,eAAe,IAAIA,OAAM,IAAIA;AAEjC,YAAI,IAAI;AAER,aAAKD,KAAI,GAAGD,KAAI,GAAGC,KAAI,GAAGA,MAAK,GAAGD,MAAK,GAAG;AACxC,gBACG,UAAU,IAAI,WAAWC,EAAC,CAAC,KAAK,KAChC,UAAU,IAAI,WAAWA,KAAI,CAAC,CAAC,KAAK,KACpC,UAAU,IAAI,WAAWA,KAAI,CAAC,CAAC,KAAK,IACrC,UAAU,IAAI,WAAWA,KAAI,CAAC,CAAC;AACjC,UAAAE,KAAI,GAAG,KAAK,MAAM,aAAa;AAC/B,UAAAA,KAAI,GAAG,KAAK,MAAM,UAAW;AAC7B,UAAAA,KAAI,GAAG,IAAI,MAAM;AAAA,QAClB;AAED,YAAI,iBAAiB,GAAG;AACtB,gBAAO,UAAU,IAAI,WAAWF,EAAC,CAAC,KAAK,IAAM,UAAU,IAAI,WAAWA,KAAI,CAAC,CAAC,KAAK;AACjF,UAAAE,KAAI,GAAG,IAAI,MAAM;AAAA,QAC3B,WAAmB,iBAAiB,GAAG;AAC7B,gBACG,UAAU,IAAI,WAAWF,EAAC,CAAC,KAAK,KAChC,UAAU,IAAI,WAAWA,KAAI,CAAC,CAAC,KAAK,IACpC,UAAU,IAAI,WAAWA,KAAI,CAAC,CAAC,KAAK;AACvC,UAAAE,KAAI,GAAG,IAAK,OAAO,IAAK;AACxB,UAAAA,KAAI,GAAG,IAAI,MAAM;AAAA,QAClB;AAED,eAAOA;AAAA,MACR;AAED,eAAS,eAAe,KAAKC,aAAY;AACvC,YAAI,WAAW;AAEf,YAAI,KAAK,WAAW,gBAAgB,UAAU;AAC5C,qBAAW;AAAA,QACZ,WAAU,KAAK,WAAW,gBAAgB,UAAU;AACnD,qBAAW;AAAA,QACZ;AAGD,YAAI,IAAI,WAAW,WAAW,YAAYA,aAAY;AACpD,cAAI,SAAS,SAAS,UAAU,QAAQ,YAAY,YAAY,SAAS,aAAa;AAEtF,cAAI,IAAI,WAAW,SAAS,WAAW;AACrC,gBAAI,MAAM,IAAI,aAAc;AAAA,UAC7B,WAAU,IAAI,WAAW,SAAS,SAAS;AAC1C,gBAAI,MAAM,IAAI,WAAY;AAAA,UAC3B;AAcD,oBAAU,IAAI,OAAO;AAErB,qBAAW,kBAAkB,OAAO;AAEpC,mBAAS,SAAS,CAAC;AACnB,mBAASH,KAAI,GAAGA,KAAI,WAAW,GAAGA,MAAK;AACrC,qBAAS,SAAU,SAASA,EAAC,KAAMA,KAAI;AAAA,UACxC;AAED,wBAAc,SAAS,KAAK;AAC5B,oBAAU,aAAa,IAAI,IAAI,IAAK,aAAa,IAAK;AACtD,uBAAa,aAAa;AAE1B,wBAAc,CAAE;AAChB,0BAAgB;AAChB,sBAAY,KAAK,aAAa;AAI9B,uBAAa,IAAI;AAEjB,mBAASA,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,gBAAI,mBAAmB,SAASA,KAAI,WAAW,UAAU;AAEzD,qBAASD,KAAI,GAAGA,KAAI,WAAW,GAAGA,MAAK;AAErC,iCAAmB,mBAAoB,SAASC,KAAI,WAAW,aAAaD,EAAC,KAAMA,KAAI;AAAA,YACxF;AAED,4BAAgB,gBAAgB;AAChC,wBAAY,KAAK,aAAa;AAAA,UAC/B;AAED,mBAASC,KAAI,GAAGA,KAAI,YAAY,SAAS,GAAGA,MAAK;AAC/C,gBAAIL,QAAO,WAAW,SAAS,MAAM,YAAYK,EAAC,GAAG,YAAYA,KAAI,CAAC,CAAC,CAAC;AACxE,sBAAUL,MAAK;AAEf,gBAAI,IAAI,WAAW,SAAS,WAAW;AACrC,wBAAU,IAAI,aAAa,OAAO;AAClC,oBAAM,cAAc,KAAK,OAAO;AAAA,YACjC,WAAU,IAAI,WAAW,SAAS,SAAS;AAC1C,wBAAU,IAAI,WAAW,OAAO;AAChC,oBAAM,YAAY,KAAK,OAAO;AAAA,YAC/B;AAAA,UACF;AAED,iBAAO,IAAI,OAAO;AAElB,cAAI,IAAI,WAAW,SAAS,SAAS;AACnC,gBAAI,IAAI,WAAW,WAAW,UAAU;AACtC,oBAAM,IAAI,OAAO,SAAU,IAAI,KAAK;AAClC,oBAAI,MAAM,MAAM;AAAG,yBAAO;AAAA,cAC1C,CAAe;AAAA,YACF;AAAA,UACF;AAAA,QACX,OAAe;AACL,cAAI,IAAI,WAAW,WAAW,YAAY,CAACQ,aAAY;AACrD,gBAAI,UAAU,kBAAkB,IAAI,OAAO,CAAC;AAK5C,sBAAU,QAAQ,MAAM,QAAQ,EAAE;AAAA,UAC9C,OAAiB;AACL,gBAAI,IAAI,OAAO,GAAG;AAChB,kBAAI,UAAU,IAAI,OAAO,EAAE,MAAM,KAAK,EAAE,OAAO,SAAU,IAAI;AAC3D,oBAAI,OAAO;AAAI,yBAAO;AAAA,cACtC,CAAe;AAAA,YACf,OAAmB;AACL,kBAAI,UAAU,IAAI,WAAW,CAAC,EAAE;AAAA,YACjC;AAAA,UACF;AAED,iBAAO,IAAI,OAAO;AAGlB,cAAI,IAAI,WAAW,SAAS,WAAW;AACrC,gBAAI,MAAM,IAAI,aAAa,OAAO;AAAA,UACnC,WAAU,IAAI,WAAW,SAAS,SAAS;AAC1C,gBAAI,MAAM,IAAI,WAAW,OAAO;AAAA,UACjC,WAAU,IAAI,WAAW,SAAS,SAAS;AAC1C,gBAAI,MAAM,IAAI,WAAW,OAAO;AAEhC,gBAAI,IAAI,WAAW,WAAW,UAAU;AACtC,oBAAM,IAAI,OAAO,SAAU,IAAI,KAAK;AAClC,oBAAI,MAAM,MAAM;AAAG,yBAAO;AAAA,cAC1C,CAAe;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAED,eAAO;AAAA,MACR;AAID,UAAI,MAAM;AAEV,UAAI,OAAO,WAAW;AACpB,YAAI;AACF,gBAAM,IAAI,UAAS,EAAG,gBAAgB,YAAY,UAAU;AAAA,QAC7D,SAAQ,GAAP;AACA,gBAAM;AAAA,QACP;AAAA,MACT,WAAiB,OAAO,eAAe;AAC/B,YAAI;AACF,gBAAM,IAAI,cAAc,kBAAkB;AAC1C,cAAI,QAAQ;AAEZ,cAAI,CAAE,IAAI;AAAA;AAAA,UAAO,GAAc;AAC7B,kBAAM,IAAI,MAAM,IAAI,WAAW,SAAS,IAAI,WAAW,OAAO;AAAA,UAC/D;AAAA,QACF,SAAQ,GAAP;AACA,gBAAM;AAAA,QACP;AAAA,MACT,OAAa;AACL,cAAM,IAAI,MAAM,0BAA0B;AAAA,MAC3C;AAGD,UAAI,MAAM,IAAI;AAEd,UAAI,OAAO,UAAU,GAAG;AACxB,UAAI,SAAS,CAAE;AACf,UAAI,UAAU,CAAE;AAChB,UAAI,UAAU,CAAE;AAEhB,UAAI,KAAK,UAAU;AACjB,YAAI,QAAQ,KAAK,SAAS;AAC1B,YAAI,aAAa,KAAK,WAAW,eAAe,YAAY;AAI5D,YAAI,WAAW,CAAC,aAAa,UAAU,UAAU,OAAO;AACxD,YAAI,eAAe,GACjB,mBAAmB,SAAS;AAE9B,eAAO,eAAe,kBAAkB;AACtC,cAAI,UAAU,MAAM,SAAS,YAAY,CAAC;AAI1C,cAAI,WAAW,QAAQ,WAAW;AAGhC,gBAAI,OAAO,UAAU,SAAS,KAAK,QAAQ,SAAS,MAAM,kBAAkB;AAC1E,kBAAI,MAAM,QAAQ;AAAA,YAChC,OAAmB;AACL,kBAAI,MAAM,CAAC,QAAQ,SAAS;AAAA,YAC7B;AAED,gBAAI,iBAAiB,GACnB,qBAAqB,IAAI;AAE3B,mBAAO,iBAAiB,oBAAoB;AAE1C,kBAAI,WAAW,IAAI,cAAc,KAAK,IAAI,cAAc,EAAE,OAAO,EAAE,SAAS,GAAG;AAC7E,oBAAI,cAAc,EAAE,OAAO,eAAe,IAAI,cAAc,GAAG,UAAU;AAAA,cAC1E;AAED;AAAA,YACD;AAED,oBAAQ,SAAS,YAAY,GAAC;AAAA,cAE5B,KAAK;AACH,oBAAI,iBAAiB,SAAS,MAAM,WAAW,cAAc;AAC7D,oBAAI,cAAc,QAAQ,WAAW;AAErC,oBAAI,iBAAiB,GAAG;AACtB,2BAAS,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AAC9C,wBAAI,gBAAgB,IAAI,CAAC,EAAE,WAAW,MAAM;AAC1C,0BAAI,aAAa,IAAI,CAAC,EAAE,WAAW;AACnC,gCAAU,IAAI,aAAa,iBAAiB,UAAU;AACtD,8BAAQ,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC;AAAA,oBAC3B;AAAA,kBACF;AAAA,gBACF;AAED;AAAA,cAGF,KAAK;AACH,oBAAI,iBAAiB,SAAS,MAAM,WAAW,cAAc;AAE7D,oBAAI,iBAAiB,GAAG;AACtB,sBAAI,aAAa,QAAQ,UAAU,WAAW;AAC9C,2BAAS,IAAI,aAAa,iBAAiB,UAAU;AACrD,yBAAO,IAAI,QAAQ,UAAU,MAAM,CAAC;AAAA,gBACrC;AAED;AAAA,cAGF,KAAK;AACH,oBAAI,iBAAiB,SAAS,MAAM,WAAW,cAAc;AAE7D,oBAAI,iBAAiB,GAAG;AACtB,sBAAI,eAAe,IAAI,WAAW,QAAQ,UAAU,CAAC,EAAE,KAAK,MAAM;AAClE,sBAAI,SAAS,IAAI,WAAW,QAAQ,UAAU,CAAC,EAAE,KAAK,MAAM;AAC5D,+BAAa,IAAI,QAAQ,UAAU,CAAC,EAAE,MAAM,CAAC;AAC7C,yBAAO,IAAI,QAAQ,UAAU,CAAC,EAAE,MAAM,CAAC;AAEvC,sBAAI,OAAO,iBAAiB,aAAa;AACzC,4BAAU,IAAI,YAAY,IAAI,OAAO,IAAI,cAAc;AAEvD,sBAAI,eAAe;AAEnB,2BAAS,IAAI,GAAG,MAAM,gBAAgB,IAAI,KAAK,KAAK;AAClD,wBAAI,QAAQ,CAAE;AAEd,6BAAS,IAAI,GAAG,OAAO,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI,OAAO,MAAM,KAAK;AAChE,4BAAM,KAAK,aAAa,CAAC,CAAC;AAE1B,0BAAI,IAAI;AAAG,+BAAO,OAAO,IAAI,CAAC;AAAA,oBAC/B;AAED,6BAAS,IAAI,GAAG,OAAO,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI,OAAO,OAAO,GAAG,KAAK;AACpE,0BAAI,IAAI,GAAG;AACT,gCAAQ,cAAc,IAAI,MAAM,CAAC;AACjC,gCAAQ,cAAc,IAAI,MAAM,IAAI,CAAC;AACrC,gCAAQ,cAAc,IAAI,MAAM,IAAI,CAAC;AAAA,sBAC7D,OAA6B;AACL,gCAAQ,cAAc,IAAI,MAAM,CAAC;AACjC,gCAAQ,cAAc,IAAI,MAAM,IAAI,CAAC;AACrC,gCAAQ,cAAc,IAAI,MAAM,IAAI,CAAC;AAAA,sBACtC;AAED,0BAAI,IAAI;AAAG,+BAAO,OAAO,IAAI,CAAC;AAAA,oBAC/B;AAAA,kBACF;AAAA,gBACF;AAED;AAAA,cAGF,KAAK;AACH,oBAAI,gBAAgB,SAAS,MAAM,WAAW,aAAa;AAE3D,oBAAI,gBAAgB,GAAG;AACrB,sBAAI,eAAe,IAAI,WAAW,QAAQ,UAAU,CAAC,EAAE,KAAK,MAAM;AAClE,sBAAI,SAAS,IAAI,WAAW,QAAQ,UAAU,CAAC,EAAE,KAAK,MAAM;AAC5D,+BAAa,IAAI,QAAQ,UAAU,CAAC,EAAE,MAAM,CAAC;AAC7C,yBAAO,IAAI,QAAQ,UAAU,CAAC,EAAE,MAAM,CAAC;AAEvC,sBAAI,OAAO,gBAAgB,aAAa;AACxC,4BAAU,IAAI,YAAY,IAAI,OAAO,IAAI,aAAa;AACtD,sBAAI,eAAe,GACjB,oBAAoB;AACtB,sBAAI,IAAI,GACN,MAAM,eACN,OAAO;AAET,yBAAO,IAAI,KAAK;AACd,wBAAI,OAAO,CAAE;AACb,wBAAI,IAAI,GACN,OAAO,OAAO,CAAC;AAEjB,2BAAO,IAAI,OAAO,MAAM;AACtB,2BAAK,KAAK,aAAa,mBAAmB,CAAC;AAC3C;AAAA,oBACD;AAED,wBAAI,IAAI;AAER,2BAAO,IAAI,OAAO,OAAO,GAAG;AAC1B,8BAAQ,cAAc,IAAI,KAAK,CAAC;AAChC,8BAAQ,cAAc,IAAI,KAAK,CAAC;AAChC,8BAAQ,cAAc,IAAI,KAAK,IAAI,CAAC;AACpC;AAAA,oBACD;AAED;AACA,2BAAO,OAAO,IAAI,CAAC;AAAA,kBACpB;AAAA,gBACF;AAED;AAAA,YAIH;AAAA,UACF;AAED;AAAA,QACD;AAED,YAAI,WAAW,IAAI,eAAgB;AACnC,iBAAS,SAAS,IAAI,gBAAgB,SAAS,CAAC,CAAC;AACjD,iBAAS,aAAa,YAAY,IAAI,gBAAgB,QAAQ,CAAC,CAAC;AAEhE,YAAI,QAAQ,WAAW,OAAO,QAAQ;AACpC,mBAAS,aAAa,UAAU,IAAI,gBAAgB,SAAS,CAAC,CAAC;AAAA,QAChE;AAED,eAAO;AAAA,MACf,OAAa;AACL,cAAM,IAAI,MAAM,0BAA0B;AAAA,MAC3C;AAAA,IACF;AAGD,QAAI,OAAO,WAAW,IAAI,WAAW,MAAM,GAAG,GAAG,CAAC,EAAE,MAAM,IAAI;AAE9D,QAAI,KAAK,CAAC,EAAE,QAAQ,KAAK,MAAM,IAAI;AACjC,aAAO,SAAS,WAAW,IAAI,CAAC;AAAA,IACjC,WAAU,KAAK,CAAC,EAAE,SAAS,OAAO,GAAG;AACpC,aAAO,WAAW,WAAW,IAAI,CAAC;AAAA,IACxC,OAAW;AACL,aAAO,YAAY,IAAI;AAAA,IACxB;AAAA,EACF;AACH;"}