@loaders.gl/ply 4.0.0-alpha.5 → 4.0.0-alpha.6

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 (74) hide show
  1. package/dist/bundle.js +2 -2
  2. package/dist/dist.min.js +201 -609
  3. package/dist/es5/bundle.js +6 -0
  4. package/dist/es5/bundle.js.map +1 -0
  5. package/dist/es5/index.js +51 -0
  6. package/dist/es5/index.js.map +1 -0
  7. package/dist/es5/lib/get-ply-schema.js +28 -0
  8. package/dist/es5/lib/get-ply-schema.js.map +1 -0
  9. package/dist/es5/lib/normalize-ply.js +93 -0
  10. package/dist/es5/lib/normalize-ply.js.map +1 -0
  11. package/dist/es5/lib/parse-ply-in-batches.js +289 -0
  12. package/dist/es5/lib/parse-ply-in-batches.js.map +1 -0
  13. package/dist/es5/lib/parse-ply.js +348 -0
  14. package/dist/es5/lib/parse-ply.js.map +1 -0
  15. package/dist/es5/lib/ply-types.js +2 -0
  16. package/dist/es5/lib/ply-types.js.map +1 -0
  17. package/dist/es5/ply-loader.js +26 -0
  18. package/dist/es5/ply-loader.js.map +1 -0
  19. package/dist/es5/workers/ply-worker.js +6 -0
  20. package/dist/es5/workers/ply-worker.js.map +1 -0
  21. package/dist/esm/bundle.js +4 -0
  22. package/dist/esm/bundle.js.map +1 -0
  23. package/dist/esm/index.js +12 -0
  24. package/dist/esm/index.js.map +1 -0
  25. package/dist/esm/lib/get-ply-schema.js +22 -0
  26. package/dist/esm/lib/get-ply-schema.js.map +1 -0
  27. package/dist/esm/lib/normalize-ply.js +86 -0
  28. package/dist/esm/lib/normalize-ply.js.map +1 -0
  29. package/dist/esm/lib/parse-ply-in-batches.js +177 -0
  30. package/dist/esm/lib/parse-ply-in-batches.js.map +1 -0
  31. package/dist/esm/lib/parse-ply.js +319 -0
  32. package/dist/esm/lib/parse-ply.js.map +1 -0
  33. package/dist/esm/lib/ply-types.js +2 -0
  34. package/dist/esm/lib/ply-types.js.map +1 -0
  35. package/dist/esm/ply-loader.js +18 -0
  36. package/dist/esm/ply-loader.js.map +1 -0
  37. package/dist/esm/workers/ply-worker.js +4 -0
  38. package/dist/esm/workers/ply-worker.js.map +1 -0
  39. package/dist/index.d.ts +7 -24
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +18 -11
  42. package/dist/lib/get-ply-schema.js +34 -24
  43. package/dist/lib/normalize-ply.js +76 -65
  44. package/dist/lib/parse-ply-in-batches.d.ts +1 -1
  45. package/dist/lib/parse-ply-in-batches.d.ts.map +1 -1
  46. package/dist/lib/parse-ply-in-batches.js +237 -202
  47. package/dist/lib/parse-ply.d.ts +4 -1
  48. package/dist/lib/parse-ply.d.ts.map +1 -1
  49. package/dist/lib/parse-ply.js +378 -299
  50. package/dist/lib/ply-types.d.ts +22 -14
  51. package/dist/lib/ply-types.d.ts.map +1 -1
  52. package/dist/lib/ply-types.js +2 -2
  53. package/dist/ply-loader.d.ts +3 -17
  54. package/dist/ply-loader.d.ts.map +1 -1
  55. package/dist/ply-loader.js +27 -18
  56. package/dist/ply-worker.js +240 -578
  57. package/dist/workers/ply-worker.js +5 -4
  58. package/package.json +6 -6
  59. package/src/index.ts +15 -10
  60. package/src/lib/get-ply-schema.ts +11 -10
  61. package/src/lib/normalize-ply.ts +34 -12
  62. package/src/lib/parse-ply-in-batches.ts +20 -22
  63. package/src/lib/parse-ply.ts +114 -55
  64. package/src/lib/ply-types.ts +21 -12
  65. package/src/ply-loader.ts +4 -3
  66. package/dist/bundle.js.map +0 -1
  67. package/dist/index.js.map +0 -1
  68. package/dist/lib/get-ply-schema.js.map +0 -1
  69. package/dist/lib/normalize-ply.js.map +0 -1
  70. package/dist/lib/parse-ply-in-batches.js.map +0 -1
  71. package/dist/lib/parse-ply.js.map +0 -1
  72. package/dist/lib/ply-types.js.map +0 -1
  73. package/dist/ply-loader.js.map +0 -1
  74. package/dist/workers/ply-worker.js.map +0 -1
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ var moduleExports = require('./index');
4
+ globalThis.loaders = globalThis.loaders || {};
5
+ module.exports = Object.assign(globalThis.loaders, moduleExports);
6
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.PLYLoader = void 0;
8
+ Object.defineProperty(exports, "PLYWorkerLoader", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _plyLoader.PLYLoader;
12
+ }
13
+ });
14
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
15
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+ var _plyLoader = require("./ply-loader");
18
+ var _parsePly = require("./lib/parse-ply");
19
+ var _parsePlyInBatches = require("./lib/parse-ply-in-batches");
20
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22
+ var PLYLoader = _objectSpread(_objectSpread({}, _plyLoader.PLYLoader), {}, {
23
+ parse: function () {
24
+ var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
25
+ return _regenerator.default.wrap(function _callee$(_context) {
26
+ while (1) switch (_context.prev = _context.next) {
27
+ case 0:
28
+ return _context.abrupt("return", (0, _parsePly.parsePLY)(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply));
29
+ case 1:
30
+ case "end":
31
+ return _context.stop();
32
+ }
33
+ }, _callee);
34
+ }));
35
+ function parse(_x, _x2) {
36
+ return _parse.apply(this, arguments);
37
+ }
38
+ return parse;
39
+ }(),
40
+ parseTextSync: function parseTextSync(arrayBuffer, options) {
41
+ return (0, _parsePly.parsePLY)(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply);
42
+ },
43
+ parseSync: function parseSync(arrayBuffer, options) {
44
+ return (0, _parsePly.parsePLY)(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply);
45
+ },
46
+ parseInBatches: function parseInBatches(arrayBuffer, options) {
47
+ return (0, _parsePlyInBatches.parsePLYInBatches)(arrayBuffer, options === null || options === void 0 ? void 0 : options.ply);
48
+ }
49
+ });
50
+ exports.PLYLoader = PLYLoader;
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_plyLoader","require","_parsePly","_parsePlyInBatches","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","PLYLoader","PLYWorkerLoader","parse","_parse","_asyncToGenerator2","_regenerator","mark","_callee","arrayBuffer","options","wrap","_callee$","_context","prev","next","abrupt","parsePLY","ply","stop","_x","_x2","parseTextSync","parseSync","parseInBatches","parsePLYInBatches","exports"],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {PLYMesh} from './lib/ply-types';\nimport {PLYLoader as PLYWorkerLoader} from './ply-loader';\nimport {ParsePLYOptions, parsePLY} from './lib/parse-ply';\nimport {parsePLYInBatches} from './lib/parse-ply-in-batches';\n\n// PLYLoader\n\nexport {PLYWorkerLoader};\n\nexport type PLYLoaderOptions = LoaderOptions & {\n ply?: ParsePLYOptions;\n};\n\n/**\n * Loader for PLY - Polygon File Format\n */\nexport const PLYLoader: LoaderWithParser<PLYMesh, any, PLYLoaderOptions> = {\n ...PLYWorkerLoader,\n // Note: parsePLY supports both text and binary\n parse: async (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply), // TODO - this may not detect text correctly?\n parseTextSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),\n parseSync: (arrayBuffer, options) => parsePLY(arrayBuffer, options?.ply),\n parseInBatches: (arrayBuffer, options) => parsePLYInBatches(arrayBuffer, options?.ply)\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAIA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,kBAAA,GAAAF,OAAA;AAA6D,SAAAG,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,QAAAC,gBAAA,CAAAC,OAAA,EAAAR,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAmB,yBAAA,GAAAnB,MAAA,CAAAoB,gBAAA,CAAAV,MAAA,EAAAV,MAAA,CAAAmB,yBAAA,CAAAL,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAqB,cAAA,CAAAX,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAatD,IAAMY,SAA2D,GAAAb,aAAA,CAAAA,aAAA,KACnEc,oBAAe;EAElBC,KAAK;IAAA,IAAAC,MAAA,OAAAC,kBAAA,CAAAR,OAAA,EAAAS,YAAA,CAAAT,OAAA,CAAAU,IAAA,CAAE,SAAAC,QAAOC,WAAW,EAAEC,OAAO;MAAA,OAAAJ,YAAA,CAAAT,OAAA,CAAAc,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAA,OAAAF,QAAA,CAAAG,MAAA,WAAK,IAAAC,kBAAQ,EAACR,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,GAAG,CAAC;UAAA;UAAA;YAAA,OAAAL,QAAA,CAAAM,IAAA;QAAA;MAAA,GAAAX,OAAA;IAAA;IAAA,SAAAL,MAAAiB,EAAA,EAAAC,GAAA;MAAA,OAAAjB,MAAA,CAAAjB,KAAA,OAAAI,SAAA;IAAA;IAAA,OAAAY,KAAA;EAAA;EAC1EmB,aAAa,EAAE,SAAAA,cAACb,WAAW,EAAEC,OAAO;IAAA,OAAK,IAAAO,kBAAQ,EAACR,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,GAAG,CAAC;EAAA;EAC5EK,SAAS,EAAE,SAAAA,UAACd,WAAW,EAAEC,OAAO;IAAA,OAAK,IAAAO,kBAAQ,EAACR,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,GAAG,CAAC;EAAA;EACxEM,cAAc,EAAE,SAAAA,eAACf,WAAW,EAAEC,OAAO;IAAA,OAAK,IAAAe,oCAAiB,EAAChB,WAAW,EAAEC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEQ,GAAG,CAAC;EAAA;AAAA,EACvF;AAACQ,OAAA,CAAAzB,SAAA,GAAAA,SAAA"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getPLYSchema = getPLYSchema;
7
+ var _schema = require("@loaders.gl/schema");
8
+ function getPLYSchema(plyHeader, attributes) {
9
+ var metadata = makeMetadataFromPlyHeader(plyHeader);
10
+ var schema = (0, _schema.deduceMeshSchema)(attributes, metadata);
11
+ return schema;
12
+ }
13
+ function makeMetadataFromPlyHeader(plyHeader) {
14
+ var metadata = {};
15
+ metadata.ply_comments = JSON.stringify(plyHeader.comments);
16
+ metadata.ply_elements = JSON.stringify(plyHeader.elements);
17
+ if (plyHeader.format !== undefined) {
18
+ metadata.ply_format = plyHeader.format;
19
+ }
20
+ if (plyHeader.version !== undefined) {
21
+ metadata.ply_version = plyHeader.version;
22
+ }
23
+ if (plyHeader.headerLength !== undefined) {
24
+ metadata.ply_headerLength = plyHeader.headerLength.toString(10);
25
+ }
26
+ return metadata;
27
+ }
28
+ //# sourceMappingURL=get-ply-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-ply-schema.js","names":["_schema","require","getPLYSchema","plyHeader","attributes","metadata","makeMetadataFromPlyHeader","schema","deduceMeshSchema","ply_comments","JSON","stringify","comments","ply_elements","elements","format","undefined","ply_format","version","ply_version","headerLength","ply_headerLength","toString"],"sources":["../../../src/lib/get-ply-schema.ts"],"sourcesContent":["import {Schema, MeshAttributes, deduceMeshSchema} from '@loaders.gl/schema';\nimport type {PLYHeader} from './ply-types';\n\n/**\n * Gets schema from PLY header\n * @param plyHeader\n * @param metadata\n * @returns Schema\n */\nexport function getPLYSchema(plyHeader: PLYHeader, attributes: MeshAttributes): Schema {\n const metadata = makeMetadataFromPlyHeader(plyHeader);\n const schema = deduceMeshSchema(attributes, metadata);\n return schema;\n}\n\n/**\n * Make arrow like schema metadata by PlyHeader properties\n * @param plyHeader\n * @returns\n */\nfunction makeMetadataFromPlyHeader(plyHeader: PLYHeader): Record<string, string> {\n /* eslint-disable camelcase */\n const metadata: Record<string, string> = {};\n metadata.ply_comments = JSON.stringify(plyHeader.comments);\n metadata.ply_elements = JSON.stringify(plyHeader.elements);\n if (plyHeader.format !== undefined) {\n metadata.ply_format = plyHeader.format;\n }\n if (plyHeader.version !== undefined) {\n metadata.ply_version = plyHeader.version;\n }\n if (plyHeader.headerLength !== undefined) {\n metadata.ply_headerLength = plyHeader.headerLength.toString(10);\n }\n return metadata;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AASO,SAASC,YAAYA,CAACC,SAAoB,EAAEC,UAA0B,EAAU;EACrF,IAAMC,QAAQ,GAAGC,yBAAyB,CAACH,SAAS,CAAC;EACrD,IAAMI,MAAM,GAAG,IAAAC,wBAAgB,EAACJ,UAAU,EAAEC,QAAQ,CAAC;EACrD,OAAOE,MAAM;AACf;AAOA,SAASD,yBAAyBA,CAACH,SAAoB,EAA0B;EAE/E,IAAME,QAAgC,GAAG,CAAC,CAAC;EAC3CA,QAAQ,CAACI,YAAY,GAAGC,IAAI,CAACC,SAAS,CAACR,SAAS,CAACS,QAAQ,CAAC;EAC1DP,QAAQ,CAACQ,YAAY,GAAGH,IAAI,CAACC,SAAS,CAACR,SAAS,CAACW,QAAQ,CAAC;EAC1D,IAAIX,SAAS,CAACY,MAAM,KAAKC,SAAS,EAAE;IAClCX,QAAQ,CAACY,UAAU,GAAGd,SAAS,CAACY,MAAM;EACxC;EACA,IAAIZ,SAAS,CAACe,OAAO,KAAKF,SAAS,EAAE;IACnCX,QAAQ,CAACc,WAAW,GAAGhB,SAAS,CAACe,OAAO;EAC1C;EACA,IAAIf,SAAS,CAACiB,YAAY,KAAKJ,SAAS,EAAE;IACxCX,QAAQ,CAACgB,gBAAgB,GAAGlB,SAAS,CAACiB,YAAY,CAACE,QAAQ,CAAC,EAAE,CAAC;EACjE;EACA,OAAOjB,QAAQ;AACjB"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = normalizePLY;
7
+ var _schema = require("@loaders.gl/schema");
8
+ var _getPlySchema = require("./get-ply-schema");
9
+ function normalizePLY(plyHeader, plyAttributes, options) {
10
+ var attributes = getMeshAttributes(plyAttributes);
11
+ var boundingBox = (0, _schema.getMeshBoundingBox)(attributes);
12
+ var vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;
13
+ var isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;
14
+ var mode = isTriangles ? 4 : 0;
15
+ var topology = isTriangles ? 'triangle-list' : 'point-list';
16
+ var schema = (0, _getPlySchema.getPLYSchema)(plyHeader, attributes);
17
+ var plyMesh = {
18
+ loader: 'ply',
19
+ loaderData: plyHeader,
20
+ header: {
21
+ vertexCount: vertexCount,
22
+ boundingBox: boundingBox
23
+ },
24
+ schema: schema,
25
+ attributes: attributes,
26
+ indices: {
27
+ value: new Uint32Array(0),
28
+ size: 0
29
+ },
30
+ mode: mode,
31
+ topology: topology
32
+ };
33
+ if (plyAttributes.indices.length > 0) {
34
+ plyMesh.indices = {
35
+ value: new Uint32Array(plyAttributes.indices),
36
+ size: 1
37
+ };
38
+ }
39
+ return plyMesh;
40
+ }
41
+ function getMeshAttributes(attributes) {
42
+ var accessors = {};
43
+ for (var _i = 0, _Object$keys = Object.keys(attributes); _i < _Object$keys.length; _i++) {
44
+ var attributeName = _Object$keys[_i];
45
+ switch (attributeName) {
46
+ case 'vertices':
47
+ if (attributes.vertices.length > 0) {
48
+ accessors.POSITION = {
49
+ value: new Float32Array(attributes.vertices),
50
+ size: 3
51
+ };
52
+ }
53
+ break;
54
+ case 'normals':
55
+ if (attributes.normals.length > 0) {
56
+ accessors.NORMAL = {
57
+ value: new Float32Array(attributes.normals),
58
+ size: 3
59
+ };
60
+ }
61
+ break;
62
+ case 'uvs':
63
+ if (attributes.uvs.length > 0) {
64
+ accessors.TEXCOORD_0 = {
65
+ value: new Float32Array(attributes.uvs),
66
+ size: 2
67
+ };
68
+ }
69
+ break;
70
+ case 'colors':
71
+ if (attributes.colors.length > 0) {
72
+ accessors.COLOR_0 = {
73
+ value: new Uint8Array(attributes.colors),
74
+ size: 3,
75
+ normalized: true
76
+ };
77
+ }
78
+ break;
79
+ case 'indices':
80
+ break;
81
+ default:
82
+ if (attributes[attributeName].length > 0) {
83
+ accessors[attributeName] = {
84
+ value: new Float32Array(attributes[attributeName]),
85
+ size: 1
86
+ };
87
+ }
88
+ break;
89
+ }
90
+ }
91
+ return accessors;
92
+ }
93
+ //# sourceMappingURL=normalize-ply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-ply.js","names":["_schema","require","_getPlySchema","normalizePLY","plyHeader","plyAttributes","options","attributes","getMeshAttributes","boundingBox","getMeshBoundingBox","vertexCount","indices","length","vertices","isTriangles","mode","topology","schema","getPLYSchema","plyMesh","loader","loaderData","header","value","Uint32Array","size","accessors","_i","_Object$keys","Object","keys","attributeName","POSITION","Float32Array","normals","NORMAL","uvs","TEXCOORD_0","colors","COLOR_0","Uint8Array","normalized"],"sources":["../../../src/lib/normalize-ply.ts"],"sourcesContent":["import type {MeshAttributes} from '@loaders.gl/schema';\nimport {getMeshBoundingBox} from '@loaders.gl/schema';\nimport type {PLYMesh, PLYHeader, PLYAttributes, MeshHeader} from './ply-types';\nimport {getPLYSchema} from './get-ply-schema';\n\n/**\n * @param header\n * @param attributes\n * @returns data and header\n */\nexport default function normalizePLY(\n plyHeader: MeshHeader & PLYHeader,\n plyAttributes: PLYAttributes,\n options?: {}\n): PLYMesh {\n const attributes = getMeshAttributes(plyAttributes);\n const boundingBox = getMeshBoundingBox(attributes);\n const vertexCount = plyAttributes.indices.length || plyAttributes.vertices.length / 3;\n\n // TODO - how to detect POINT CLOUDS vs MESHES?\n // TODO - For Meshes, PLY quadrangles must be split?\n const isTriangles = plyAttributes.indices && plyAttributes.indices.length > 0;\n const mode = isTriangles ? 4 : 0; // TRIANGLES vs POINTS\n const topology = isTriangles ? 'triangle-list' : 'point-list';\n\n const schema = getPLYSchema(plyHeader, attributes);\n\n const plyMesh: PLYMesh = {\n loader: 'ply',\n loaderData: plyHeader,\n header: {\n vertexCount,\n boundingBox\n },\n schema,\n attributes,\n indices: {value: new Uint32Array(0), size: 0},\n mode,\n topology\n };\n\n if (plyAttributes.indices.length > 0) {\n plyMesh.indices = {value: new Uint32Array(plyAttributes.indices), size: 1};\n }\n\n return plyMesh;\n}\n\n/**\n * @param attributes\n * @returns accessors []\n */\n// eslint-disable-next-line complexity\nfunction getMeshAttributes(attributes: PLYAttributes): MeshAttributes {\n const accessors: MeshAttributes = {};\n\n for (const attributeName of Object.keys(attributes)) {\n switch (attributeName) {\n case 'vertices':\n if (attributes.vertices.length > 0) {\n accessors.POSITION = {value: new Float32Array(attributes.vertices), size: 3};\n }\n break;\n\n // optional attributes data\n case 'normals':\n if (attributes.normals.length > 0) {\n accessors.NORMAL = {value: new Float32Array(attributes.normals), size: 3};\n }\n break;\n\n case 'uvs':\n if (attributes.uvs.length > 0) {\n accessors.TEXCOORD_0 = {value: new Float32Array(attributes.uvs), size: 2};\n }\n break;\n\n case 'colors':\n if (attributes.colors.length > 0) {\n // TODO - normalized shoud be based on `uchar` flag in source data?\n accessors.COLOR_0 = {value: new Uint8Array(attributes.colors), size: 3, normalized: true};\n }\n break;\n\n case 'indices':\n break;\n\n default:\n if (attributes[attributeName].length > 0) {\n accessors[attributeName] = {value: new Float32Array(attributes[attributeName]), size: 1};\n }\n break;\n }\n }\n return accessors;\n}\n"],"mappings":"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"}
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.parsePLYInBatches = parsePLYInBatches;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _awaitAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/awaitAsyncGenerator"));
11
+ var _wrapAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapAsyncGenerator"));
12
+ var _loaderUtils = require("@loaders.gl/loader-utils");
13
+ var _normalizePly = _interopRequireDefault(require("./normalize-ply"));
14
+ function _asyncIterator(iterable) { var method, async, sync, retry = 2; for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
15
+ function AsyncFromSyncIterator(s) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var done = r.done; return Promise.resolve(r.value).then(function (value) { return { value: value, done: done }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(s) { this.s = s, this.n = s.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function _return(value) { var ret = this.s.return; return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments)); }, throw: function _throw(value) { var thr = this.s.return; return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(s); }
16
+ var currentElement;
17
+ function parsePLYInBatches(_x, _x2) {
18
+ return _parsePLYInBatches.apply(this, arguments);
19
+ }
20
+ function _parsePLYInBatches() {
21
+ _parsePLYInBatches = (0, _wrapAsyncGenerator2.default)(_regenerator.default.mark(function _callee(iterator, options) {
22
+ var lineIterator, header, attributes;
23
+ return _regenerator.default.wrap(function _callee$(_context) {
24
+ while (1) switch (_context.prev = _context.next) {
25
+ case 0:
26
+ lineIterator = (0, _loaderUtils.makeLineIterator)((0, _loaderUtils.makeTextDecoderIterator)(iterator));
27
+ _context.next = 3;
28
+ return (0, _awaitAsyncGenerator2.default)(parsePLYHeader(lineIterator, options));
29
+ case 3:
30
+ header = _context.sent;
31
+ _context.t0 = header.format;
32
+ _context.next = _context.t0 === 'ascii' ? 7 : 11;
33
+ break;
34
+ case 7:
35
+ _context.next = 9;
36
+ return (0, _awaitAsyncGenerator2.default)(parseASCII(lineIterator, header));
37
+ case 9:
38
+ attributes = _context.sent;
39
+ return _context.abrupt("break", 12);
40
+ case 11:
41
+ throw new Error('Binary PLY can not yet be parsed in streaming mode');
42
+ case 12:
43
+ _context.next = 14;
44
+ return (0, _normalizePly.default)(header, attributes, options);
45
+ case 14:
46
+ case "end":
47
+ return _context.stop();
48
+ }
49
+ }, _callee);
50
+ }));
51
+ return _parsePLYInBatches.apply(this, arguments);
52
+ }
53
+ function parsePLYHeader(_x3, _x4) {
54
+ return _parsePLYHeader.apply(this, arguments);
55
+ }
56
+ function _parsePLYHeader() {
57
+ _parsePLYHeader = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(lineIterator, options) {
58
+ var header;
59
+ return _regenerator.default.wrap(function _callee2$(_context2) {
60
+ while (1) switch (_context2.prev = _context2.next) {
61
+ case 0:
62
+ header = {
63
+ comments: [],
64
+ elements: []
65
+ };
66
+ _context2.next = 3;
67
+ return (0, _loaderUtils.forEach)(lineIterator, function (line) {
68
+ line = line.trim();
69
+ if (line === 'end_header') {
70
+ return true;
71
+ }
72
+ if (line === '') {
73
+ return false;
74
+ }
75
+ var lineValues = line.split(/\s+/);
76
+ var lineType = lineValues.shift();
77
+ line = lineValues.join(' ');
78
+ switch (lineType) {
79
+ case 'ply':
80
+ break;
81
+ case 'format':
82
+ header.format = lineValues[0];
83
+ header.version = lineValues[1];
84
+ break;
85
+ case 'comment':
86
+ header.comments.push(line);
87
+ break;
88
+ case 'element':
89
+ if (currentElement) {
90
+ header.elements.push(currentElement);
91
+ }
92
+ currentElement = {
93
+ name: lineValues[0],
94
+ count: parseInt(lineValues[1], 10),
95
+ properties: []
96
+ };
97
+ break;
98
+ case 'property':
99
+ var property = makePLYElementProperty(lineValues, options.propertyNameMapping);
100
+ currentElement.properties.push(property);
101
+ break;
102
+ default:
103
+ console.log('unhandled', lineType, lineValues);
104
+ }
105
+ return false;
106
+ });
107
+ case 3:
108
+ if (currentElement) {
109
+ header.elements.push(currentElement);
110
+ }
111
+ return _context2.abrupt("return", header);
112
+ case 5:
113
+ case "end":
114
+ return _context2.stop();
115
+ }
116
+ }, _callee2);
117
+ }));
118
+ return _parsePLYHeader.apply(this, arguments);
119
+ }
120
+ function makePLYElementProperty(propertyValues, propertyNameMapping) {
121
+ var type = propertyValues[0];
122
+ switch (type) {
123
+ case 'list':
124
+ return {
125
+ type: type,
126
+ name: propertyValues[3],
127
+ countType: propertyValues[1],
128
+ itemType: propertyValues[2]
129
+ };
130
+ default:
131
+ return {
132
+ type: type,
133
+ name: propertyValues[1]
134
+ };
135
+ }
136
+ }
137
+ function parseASCII(_x5, _x6) {
138
+ return _parseASCII.apply(this, arguments);
139
+ }
140
+ function _parseASCII() {
141
+ _parseASCII = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(lineIterator, header) {
142
+ var attributes, currentElement, currentElementCount, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, line, element;
143
+ return _regenerator.default.wrap(function _callee3$(_context3) {
144
+ while (1) switch (_context3.prev = _context3.next) {
145
+ case 0:
146
+ attributes = {
147
+ indices: [],
148
+ vertices: [],
149
+ normals: [],
150
+ uvs: [],
151
+ colors: []
152
+ };
153
+ currentElement = 0;
154
+ currentElementCount = 0;
155
+ _iteratorAbruptCompletion = false;
156
+ _didIteratorError = false;
157
+ _context3.prev = 5;
158
+ _iterator = _asyncIterator(lineIterator);
159
+ case 7:
160
+ _context3.next = 9;
161
+ return _iterator.next();
162
+ case 9:
163
+ if (!(_iteratorAbruptCompletion = !(_step = _context3.sent).done)) {
164
+ _context3.next = 16;
165
+ break;
166
+ }
167
+ line = _step.value;
168
+ line = line.trim();
169
+ if (line !== '') {
170
+ if (currentElementCount >= header.elements[currentElement].count) {
171
+ currentElement++;
172
+ currentElementCount = 0;
173
+ }
174
+ element = parsePLYElement(header.elements[currentElement].properties, line);
175
+ handleElement(attributes, header.elements[currentElement].name, element);
176
+ currentElementCount++;
177
+ }
178
+ case 13:
179
+ _iteratorAbruptCompletion = false;
180
+ _context3.next = 7;
181
+ break;
182
+ case 16:
183
+ _context3.next = 22;
184
+ break;
185
+ case 18:
186
+ _context3.prev = 18;
187
+ _context3.t0 = _context3["catch"](5);
188
+ _didIteratorError = true;
189
+ _iteratorError = _context3.t0;
190
+ case 22:
191
+ _context3.prev = 22;
192
+ _context3.prev = 23;
193
+ if (!(_iteratorAbruptCompletion && _iterator.return != null)) {
194
+ _context3.next = 27;
195
+ break;
196
+ }
197
+ _context3.next = 27;
198
+ return _iterator.return();
199
+ case 27:
200
+ _context3.prev = 27;
201
+ if (!_didIteratorError) {
202
+ _context3.next = 30;
203
+ break;
204
+ }
205
+ throw _iteratorError;
206
+ case 30:
207
+ return _context3.finish(27);
208
+ case 31:
209
+ return _context3.finish(22);
210
+ case 32:
211
+ return _context3.abrupt("return", attributes);
212
+ case 33:
213
+ case "end":
214
+ return _context3.stop();
215
+ }
216
+ }, _callee3, null, [[5, 18, 22, 32], [23,, 27, 31]]);
217
+ }));
218
+ return _parseASCII.apply(this, arguments);
219
+ }
220
+ function parseASCIINumber(n, type) {
221
+ switch (type) {
222
+ case 'char':
223
+ case 'uchar':
224
+ case 'short':
225
+ case 'ushort':
226
+ case 'int':
227
+ case 'uint':
228
+ case 'int8':
229
+ case 'uint8':
230
+ case 'int16':
231
+ case 'uint16':
232
+ case 'int32':
233
+ case 'uint32':
234
+ return parseInt(n, 10);
235
+ case 'float':
236
+ case 'double':
237
+ case 'float32':
238
+ case 'float64':
239
+ return parseFloat(n);
240
+ default:
241
+ throw new Error(type);
242
+ }
243
+ }
244
+ function parsePLYElement(properties, line) {
245
+ var values = line.split(/\s+/);
246
+ var element = {};
247
+ for (var i = 0; i < properties.length; i++) {
248
+ if (properties[i].type === 'list') {
249
+ var list = [];
250
+ var n = parseASCIINumber(values.shift(), properties[i].countType);
251
+ for (var j = 0; j < n; j++) {
252
+ list.push(parseASCIINumber(values.shift(), properties[i].itemType));
253
+ }
254
+ element[properties[i].name] = list;
255
+ } else {
256
+ element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);
257
+ }
258
+ }
259
+ return element;
260
+ }
261
+ function handleElement(buffer, elementName) {
262
+ var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
263
+ switch (elementName) {
264
+ case 'vertex':
265
+ buffer.vertices.push(element.x, element.y, element.z);
266
+ if ('nx' in element && 'ny' in element && 'nz' in element) {
267
+ buffer.normals.push(element.nx, element.ny, element.nz);
268
+ }
269
+ if ('s' in element && 't' in element) {
270
+ buffer.uvs.push(element.s, element.t);
271
+ }
272
+ if ('red' in element && 'green' in element && 'blue' in element) {
273
+ buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);
274
+ }
275
+ break;
276
+ case 'face':
277
+ var vertexIndices = element.vertex_indices || element.vertex_index;
278
+ if (vertexIndices.length === 3) {
279
+ buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);
280
+ } else if (vertexIndices.length === 4) {
281
+ buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);
282
+ buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);
283
+ }
284
+ break;
285
+ default:
286
+ break;
287
+ }
288
+ }
289
+ //# sourceMappingURL=parse-ply-in-batches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-ply-in-batches.js","names":["_loaderUtils","require","_normalizePly","_interopRequireDefault","_asyncIterator","iterable","method","async","sync","retry","Symbol","asyncIterator","iterator","call","AsyncFromSyncIterator","TypeError","s","AsyncFromSyncIteratorContinuation","r","Object","Promise","reject","done","resolve","value","then","n","next","prototype","apply","arguments","return","_return","ret","throw","_throw","thr","currentElement","parsePLYInBatches","_x","_x2","_parsePLYInBatches","_wrapAsyncGenerator2","default","_regenerator","mark","_callee","options","lineIterator","header","attributes","wrap","_callee$","_context","prev","makeLineIterator","makeTextDecoderIterator","_awaitAsyncGenerator2","parsePLYHeader","sent","t0","format","parseASCII","abrupt","Error","normalizePLY","stop","_x3","_x4","_parsePLYHeader","_asyncToGenerator2","_callee2","_callee2$","_context2","comments","elements","forEach","line","trim","lineValues","split","lineType","shift","join","version","push","name","count","parseInt","properties","property","makePLYElementProperty","propertyNameMapping","console","log","propertyValues","type","countType","itemType","_x5","_x6","_parseASCII","_callee3","currentElementCount","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_iterator","_step","element","_callee3$","_context3","indices","vertices","normals","uvs","colors","parsePLYElement","handleElement","finish","parseASCIINumber","parseFloat","values","i","length","list","j","buffer","elementName","undefined","x","y","z","nx","ny","nz","t","red","green","blue","vertexIndices","vertex_indices","vertex_index"],"sources":["../../../src/lib/parse-ply-in-batches.ts"],"sourcesContent":["// PLY Loader, adapted from THREE.js (MIT license)\n//\n// Attributions per original THREE.js source file:\n//\n// @author Wei Meng / http://about.me/menway\n//\n// Description: A loader for PLY ASCII files (known as the Polygon File Format\n// or the Stanford Triangle Format).\n//\n// Limitations: ASCII decoding assumes file is UTF-8.\n//\n// If the PLY file uses non standard property names, they can be mapped while\n// loading. For example, the following maps the properties\n// “diffuse_(red|green|blue)” in the file to standard color names.\n//\n// parsePLY(data, {\n// propertyNameMapping: {\n// diffuse_red: 'red',\n// diffuse_green: 'green',\n// diffuse_blue: 'blue'\n// }\n// });\n\nimport {makeLineIterator, makeTextDecoderIterator, forEach} from '@loaders.gl/loader-utils';\nimport normalizePLY from './normalize-ply';\nimport {PLYMesh, PLYHeader, PLYElement, PLYProperty, PLYAttributes} from './ply-types';\n\nlet currentElement: PLYElement;\n\n/**\n * PARSER\n * @param iterator\n * @param options\n */\nexport async function* parsePLYInBatches(\n iterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n options: any\n): AsyncIterable<PLYMesh> {\n const lineIterator = makeLineIterator(makeTextDecoderIterator(iterator));\n const header = await parsePLYHeader(lineIterator, options);\n\n let attributes: PLYAttributes;\n switch (header.format) {\n case 'ascii':\n attributes = await parseASCII(lineIterator, header);\n break;\n default:\n throw new Error('Binary PLY can not yet be parsed in streaming mode');\n // attributes = await parseBinary(lineIterator, header);\n }\n\n yield normalizePLY(header, attributes, options);\n}\n\n/**\n * Parses header\n * @param lineIterator\n * @param options\n * @returns\n */\nasync function parsePLYHeader(\n lineIterator: AsyncIterable<string> | Iterable<string>,\n options: {[key: string]: any}\n): Promise<PLYHeader> {\n const header: PLYHeader = {\n comments: [],\n elements: []\n // headerLength\n };\n\n // Note: forEach does not reset iterator if exiting loop prematurely\n // so that iteration can continue in a second loop\n await forEach(lineIterator, (line: string) => {\n line = line.trim();\n\n // End of header\n if (line === 'end_header') {\n return true; // Returning true cancels `forEach`\n }\n\n // Ignore empty lines\n if (line === '') {\n // eslint-disable-next-line\n return false; // Returning false does not cancel `forEach`\n }\n\n const lineValues = line.split(/\\s+/);\n const lineType = lineValues.shift();\n line = lineValues.join(' ');\n\n switch (lineType) {\n case 'ply':\n // First line magic characters, ignore\n break;\n\n case 'format':\n header.format = lineValues[0];\n header.version = lineValues[1];\n break;\n\n case 'comment':\n header.comments.push(line);\n break;\n\n case 'element':\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n currentElement = {\n name: lineValues[0],\n count: parseInt(lineValues[1], 10),\n properties: []\n };\n break;\n\n case 'property':\n const property = makePLYElementProperty(lineValues, options.propertyNameMapping);\n currentElement.properties.push(property);\n break;\n\n default:\n // eslint-disable-next-line\n console.log('unhandled', lineType, lineValues);\n }\n\n return false;\n });\n\n if (currentElement) {\n header.elements.push(currentElement);\n }\n\n return header;\n}\n\nfunction makePLYElementProperty(propertyValues: string[], propertyNameMapping: []): PLYProperty {\n const type = propertyValues[0];\n switch (type) {\n case 'list':\n return {\n type,\n name: propertyValues[3],\n countType: propertyValues[1],\n itemType: propertyValues[2]\n };\n default:\n return {\n type,\n name: propertyValues[1]\n };\n }\n}\n\n// ASCII PARSING\n/**\n * @param lineIterator\n * @param header\n * @returns\n */\nasync function parseASCII(lineIterator: AsyncIterable<string>, header: PLYHeader) {\n // PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n const attributes: PLYAttributes = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n colors: []\n };\n\n let currentElement = 0;\n let currentElementCount = 0;\n\n for await (let line of lineIterator) {\n line = line.trim();\n\n if (line !== '') {\n if (currentElementCount >= header.elements[currentElement].count) {\n currentElement++;\n currentElementCount = 0;\n }\n\n const element = parsePLYElement(header.elements[currentElement].properties, line);\n handleElement(attributes, header.elements[currentElement].name, element);\n currentElementCount++;\n }\n }\n\n return attributes;\n}\n/**\n * Parses ASCII number\n * @param n\n * @param type\n * @returns ASCII number\n */\n// eslint-disable-next-line complexity\nfunction parseASCIINumber(n: string, type: string): number {\n switch (type) {\n case 'char':\n case 'uchar':\n case 'short':\n case 'ushort':\n case 'int':\n case 'uint':\n case 'int8':\n case 'uint8':\n case 'int16':\n case 'uint16':\n case 'int32':\n case 'uint32':\n return parseInt(n, 10);\n\n case 'float':\n case 'double':\n case 'float32':\n case 'float64':\n return parseFloat(n);\n\n default:\n throw new Error(type);\n }\n}\n/**\n * Parses ASCII element\n * @param properties\n * @param line\n * @returns element\n */\nfunction parsePLYElement(properties: any[], line: string) {\n const values: any = line.split(/\\s+/);\n\n const element = {};\n\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === 'list') {\n const list: any = [];\n const n = parseASCIINumber(values.shift(), properties[i].countType);\n\n for (let j = 0; j < n; j++) {\n list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n }\n\n element[properties[i].name] = list;\n } else {\n element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n }\n }\n\n return element;\n}\n/**\n * @param buffer\n * @param elementName\n * @param element\n */\n// HELPER FUNCTIONS\n// eslint-disable-next-line complexity\nfunction handleElement(\n buffer: {[index: string]: number[]},\n elementName: string,\n element: any = {}\n) {\n switch (elementName) {\n case 'vertex':\n buffer.vertices.push(element.x, element.y, element.z);\n if ('nx' in element && 'ny' in element && 'nz' in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n if ('s' in element && 't' in element) {\n buffer.uvs.push(element.s, element.t);\n }\n if ('red' in element && 'green' in element && 'blue' in element) {\n buffer.colors.push(element.red / 255.0, element.green / 255.0, element.blue / 255.0);\n }\n break;\n\n case 'face':\n const vertexIndices = element.vertex_indices || element.vertex_index; // issue #9338\n if (vertexIndices.length === 3) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[2]);\n } else if (vertexIndices.length === 4) {\n buffer.indices.push(vertexIndices[0], vertexIndices[1], vertexIndices[3]);\n buffer.indices.push(vertexIndices[1], vertexIndices[2], vertexIndices[3]);\n }\n break;\n\n default:\n break;\n }\n}\n"],"mappings":"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"}