@itwin/core-frontend 3.1.0-dev.14 → 3.1.0-dev.21

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 (85) hide show
  1. package/lib/cjs/FrontendLoggerCategory.d.ts +3 -1
  2. package/lib/cjs/FrontendLoggerCategory.d.ts.map +1 -1
  3. package/lib/cjs/FrontendLoggerCategory.js +2 -0
  4. package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
  5. package/lib/cjs/IModelConnection.d.ts +3 -5
  6. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  7. package/lib/cjs/IModelConnection.js +4 -10
  8. package/lib/cjs/IModelConnection.js.map +1 -1
  9. package/lib/cjs/ImageUtil.d.ts.map +1 -1
  10. package/lib/cjs/ImageUtil.js +8 -14
  11. package/lib/cjs/ImageUtil.js.map +1 -1
  12. package/lib/cjs/RealityDataSource.d.ts +2 -0
  13. package/lib/cjs/RealityDataSource.d.ts.map +1 -1
  14. package/lib/cjs/RealityDataSource.js +13 -0
  15. package/lib/cjs/RealityDataSource.js.map +1 -1
  16. package/lib/cjs/Viewport.d.ts +8 -8
  17. package/lib/cjs/Viewport.d.ts.map +1 -1
  18. package/lib/cjs/Viewport.js.map +1 -1
  19. package/lib/cjs/render/webgl/SceneCompositor.js +14 -13
  20. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  21. package/lib/cjs/tile/GltfReader.d.ts +16 -2
  22. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  23. package/lib/cjs/tile/GltfReader.js +122 -13
  24. package/lib/cjs/tile/GltfReader.js.map +1 -1
  25. package/lib/cjs/tile/PntsReader.d.ts +1 -1
  26. package/lib/cjs/tile/PntsReader.d.ts.map +1 -1
  27. package/lib/cjs/tile/PntsReader.js +107 -35
  28. package/lib/cjs/tile/PntsReader.js.map +1 -1
  29. package/lib/cjs/tile/RealityTileLoader.js +1 -1
  30. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  31. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  32. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +4 -3
  33. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  34. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +1 -1
  35. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  36. package/lib/cjs/tools/ViewTool.d.ts +4 -4
  37. package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
  38. package/lib/cjs/tools/ViewTool.js.map +1 -1
  39. package/lib/esm/FrontendLoggerCategory.d.ts +3 -1
  40. package/lib/esm/FrontendLoggerCategory.d.ts.map +1 -1
  41. package/lib/esm/FrontendLoggerCategory.js +2 -0
  42. package/lib/esm/FrontendLoggerCategory.js.map +1 -1
  43. package/lib/esm/IModelConnection.d.ts +3 -5
  44. package/lib/esm/IModelConnection.d.ts.map +1 -1
  45. package/lib/esm/IModelConnection.js +5 -11
  46. package/lib/esm/IModelConnection.js.map +1 -1
  47. package/lib/esm/ImageUtil.d.ts.map +1 -1
  48. package/lib/esm/ImageUtil.js +8 -14
  49. package/lib/esm/ImageUtil.js.map +1 -1
  50. package/lib/esm/RealityDataSource.d.ts +2 -0
  51. package/lib/esm/RealityDataSource.d.ts.map +1 -1
  52. package/lib/esm/RealityDataSource.js +14 -1
  53. package/lib/esm/RealityDataSource.js.map +1 -1
  54. package/lib/esm/Viewport.d.ts +8 -8
  55. package/lib/esm/Viewport.d.ts.map +1 -1
  56. package/lib/esm/Viewport.js.map +1 -1
  57. package/lib/esm/render/webgl/SceneCompositor.js +14 -13
  58. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  59. package/lib/esm/tile/GltfReader.d.ts +16 -2
  60. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  61. package/lib/esm/tile/GltfReader.js +104 -14
  62. package/lib/esm/tile/GltfReader.js.map +1 -1
  63. package/lib/esm/tile/PntsReader.d.ts +1 -1
  64. package/lib/esm/tile/PntsReader.d.ts.map +1 -1
  65. package/lib/esm/tile/PntsReader.js +91 -38
  66. package/lib/esm/tile/PntsReader.js.map +1 -1
  67. package/lib/esm/tile/RealityTileLoader.js +1 -1
  68. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  69. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  70. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +4 -3
  71. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  72. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +1 -1
  73. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  74. package/lib/esm/tools/ViewTool.d.ts +4 -4
  75. package/lib/esm/tools/ViewTool.d.ts.map +1 -1
  76. package/lib/esm/tools/ViewTool.js.map +1 -1
  77. package/package.json +22 -20
  78. package/lib/cjs/tile/DracoDecoder.d.ts +0 -20
  79. package/lib/cjs/tile/DracoDecoder.d.ts.map +0 -1
  80. package/lib/cjs/tile/DracoDecoder.js +0 -169
  81. package/lib/cjs/tile/DracoDecoder.js.map +0 -1
  82. package/lib/esm/tile/DracoDecoder.d.ts +0 -20
  83. package/lib/esm/tile/DracoDecoder.d.ts.map +0 -1
  84. package/lib/esm/tile/DracoDecoder.js +0 -165
  85. package/lib/esm/tile/DracoDecoder.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-frontend",
3
- "version": "3.1.0-dev.14",
3
+ "version": "3.1.0-dev.21",
4
4
  "description": "iTwin.js frontend components",
5
5
  "main": "lib/cjs/core-frontend.js",
6
6
  "module": "lib/esm/core-frontend.js",
@@ -23,29 +23,29 @@
23
23
  "url": "http://www.bentley.com"
24
24
  },
25
25
  "peerDependencies": {
26
- "@itwin/appui-abstract": "^3.1.0-dev.14",
27
- "@itwin/core-bentley": "^3.1.0-dev.14",
28
- "@itwin/core-common": "^3.1.0-dev.14",
29
- "@itwin/core-geometry": "^3.1.0-dev.14",
30
- "@itwin/core-orbitgt": "^3.1.0-dev.14",
31
- "@itwin/core-quantity": "^3.1.0-dev.14",
32
- "@itwin/webgl-compatibility": "^3.1.0-dev.14"
26
+ "@itwin/appui-abstract": "^3.1.0-dev.21",
27
+ "@itwin/core-bentley": "^3.1.0-dev.21",
28
+ "@itwin/core-common": "^3.1.0-dev.21",
29
+ "@itwin/core-geometry": "^3.1.0-dev.21",
30
+ "@itwin/core-orbitgt": "^3.1.0-dev.21",
31
+ "@itwin/core-quantity": "^3.1.0-dev.21",
32
+ "@itwin/webgl-compatibility": "^3.1.0-dev.21"
33
33
  },
34
34
  "//devDependencies": [
35
35
  "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install",
36
36
  "NOTE: All tools used by scripts in this package must be listed as devDependencies"
37
37
  ],
38
38
  "devDependencies": {
39
- "@itwin/appui-abstract": "3.1.0-dev.14",
40
- "@itwin/build-tools": "3.1.0-dev.14",
41
- "@itwin/core-bentley": "3.1.0-dev.14",
42
- "@itwin/core-common": "3.1.0-dev.14",
43
- "@itwin/core-geometry": "3.1.0-dev.14",
44
- "@itwin/core-orbitgt": "3.1.0-dev.14",
45
- "@itwin/core-quantity": "3.1.0-dev.14",
46
- "@itwin/certa": "3.1.0-dev.14",
47
- "@itwin/eslint-plugin": "3.1.0-dev.14",
48
- "@itwin/webgl-compatibility": "3.1.0-dev.14",
39
+ "@itwin/appui-abstract": "3.1.0-dev.21",
40
+ "@itwin/build-tools": "3.1.0-dev.21",
41
+ "@itwin/core-bentley": "3.1.0-dev.21",
42
+ "@itwin/core-common": "3.1.0-dev.21",
43
+ "@itwin/core-geometry": "3.1.0-dev.21",
44
+ "@itwin/core-orbitgt": "3.1.0-dev.21",
45
+ "@itwin/core-quantity": "3.1.0-dev.21",
46
+ "@itwin/certa": "3.1.0-dev.21",
47
+ "@itwin/eslint-plugin": "3.1.0-dev.21",
48
+ "@itwin/webgl-compatibility": "3.1.0-dev.21",
49
49
  "@types/chai": "^4.1.4",
50
50
  "@types/chai-as-promised": "^7",
51
51
  "@types/deep-assign": "^0.1.0",
@@ -74,8 +74,10 @@
74
74
  "NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"
75
75
  ],
76
76
  "dependencies": {
77
- "@itwin/core-i18n": "3.1.0-dev.14",
78
- "@itwin/core-telemetry": "3.1.0-dev.14",
77
+ "@itwin/core-i18n": "3.1.0-dev.21",
78
+ "@itwin/core-telemetry": "3.1.0-dev.21",
79
+ "@loaders.gl/core": "^3.1.6",
80
+ "@loaders.gl/draco": "^3.1.6",
79
81
  "deep-assign": "^2.0.0",
80
82
  "fuse.js": "^3.3.0",
81
83
  "lodash": "^4.17.10",
@@ -1,20 +0,0 @@
1
- import { QParams3d } from "@itwin/core-common";
2
- import { Mesh } from "../render/primitives/mesh/MeshPrimitives";
3
- export interface DecodedPointCloud {
4
- qParams: QParams3d;
5
- qPoints: Uint16Array;
6
- colors?: Uint8Array;
7
- }
8
- /** @internal */
9
- export declare class DracoDecoder {
10
- private static _dracoDecoderModule;
11
- static readDracoPointCloud(bufferData: Uint8Array, attributeId: number, colorAttributeId?: number): undefined | DecodedPointCloud;
12
- static readDracoMesh(mesh: Mesh, _primitive: any, bufferData: Uint8Array, attributes: any): Mesh | undefined;
13
- private static decodeVertices;
14
- private static decodeBatchIds;
15
- private static decodeUVParams;
16
- private static decodeNormals;
17
- private static decodeTriangles;
18
- private static decodeAndQuantize;
19
- }
20
- //# sourceMappingURL=DracoDecoder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DracoDecoder.d.ts","sourceRoot":"","sources":["../../../src/tile/DracoDecoder.ts"],"names":[],"mappings":"AASA,OAAO,EAAoB,SAAS,EAA0B,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAIhE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,gBAAgB;AAChB,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAM;WAE1B,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB;WA2C1H,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GAAG,IAAI,GAAG,SAAS;IAgCnH,OAAO,CAAC,MAAM,CAAC,cAAc;IAQ7B,OAAO,CAAC,MAAM,CAAC,cAAc;IAe7B,OAAO,CAAC,MAAM,CAAC,cAAc;IAa7B,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B,OAAO,CAAC,MAAM,CAAC,eAAe;IAqB9B,OAAO,CAAC,MAAM,CAAC,iBAAiB;CA0BjC"}
@@ -1,169 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DracoDecoder = void 0;
4
- /*---------------------------------------------------------------------------------------------
5
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
- * See LICENSE.md in the project root for license terms and full copyright notice.
7
- *--------------------------------------------------------------------------------------------*/
8
- /** @packageDocumentation
9
- * @module Tiles
10
- */
11
- const draco3d_1 = require("draco3d");
12
- const core_geometry_1 = require("@itwin/core-geometry");
13
- const core_common_1 = require("@itwin/core-common");
14
- const Primitives_1 = require("../render/primitives/Primitives");
15
- const core_bentley_1 = require("@itwin/core-bentley");
16
- /** @internal */
17
- class DracoDecoder {
18
- static readDracoPointCloud(bufferData, attributeId, colorAttributeId) {
19
- if (!DracoDecoder._dracoDecoderModule)
20
- DracoDecoder._dracoDecoderModule = (0, draco3d_1.createDecoderModule)(undefined);
21
- const dracoModule = DracoDecoder._dracoDecoderModule;
22
- const dracoDecoder = new dracoModule.Decoder();
23
- const buffer = new dracoModule.DecoderBuffer();
24
- buffer.Init(bufferData, bufferData.length);
25
- const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);
26
- if (geometryType !== dracoModule.POINT_CLOUD)
27
- return undefined;
28
- const dracoPointCloud = new dracoModule.PointCloud();
29
- const decodingStatus = dracoDecoder.DecodeBufferToPointCloud(buffer, dracoPointCloud);
30
- dracoModule.destroy(buffer);
31
- if (!decodingStatus.ok() || dracoPointCloud.ptr === 0)
32
- return undefined;
33
- const quantizedPoints = DracoDecoder.decodeAndQuantize(dracoPointCloud, dracoDecoder, attributeId);
34
- let decodedPointCloud;
35
- if (quantizedPoints) {
36
- decodedPointCloud = quantizedPoints;
37
- if (undefined !== colorAttributeId) {
38
- const colorDracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoPointCloud, colorAttributeId);
39
- if (colorDracoAttribute) {
40
- const dracoColors = new DracoDecoder._dracoDecoderModule.DracoUInt8Array();
41
- dracoDecoder.GetAttributeUInt8ForAllPoints(dracoPointCloud, colorDracoAttribute, dracoColors);
42
- const length = 3 * dracoPointCloud.num_points();
43
- const attrLength = dracoColors.size();
44
- (0, core_bentley_1.assert)(length === attrLength);
45
- decodedPointCloud.colors = new Uint8Array(length);
46
- for (let i = 0; i < length; i++)
47
- decodedPointCloud.colors[i] = dracoColors.GetValue(i);
48
- }
49
- }
50
- }
51
- dracoModule.destroy(dracoPointCloud);
52
- dracoModule.destroy(dracoDecoder);
53
- return decodedPointCloud;
54
- }
55
- static readDracoMesh(mesh, _primitive, bufferData, attributes) {
56
- if (!DracoDecoder._dracoDecoderModule)
57
- DracoDecoder._dracoDecoderModule = (0, draco3d_1.createDecoderModule)(undefined);
58
- const dracoModule = DracoDecoder._dracoDecoderModule;
59
- const dracoDecoder = new dracoModule.Decoder();
60
- const buffer = new dracoModule.DecoderBuffer();
61
- buffer.Init(bufferData, bufferData.length);
62
- const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);
63
- if (geometryType !== dracoModule.TRIANGULAR_MESH)
64
- return undefined;
65
- const dracoGeometry = new dracoModule.Mesh();
66
- const decodingStatus = dracoDecoder.DecodeBufferToMesh(buffer, dracoGeometry);
67
- dracoModule.destroy(buffer);
68
- if (!decodingStatus.ok() || dracoGeometry.ptr === 0)
69
- return undefined;
70
- if (!DracoDecoder.decodeTriangles(mesh, dracoGeometry, dracoDecoder) ||
71
- !DracoDecoder.decodeVertices(mesh.points, dracoGeometry, dracoDecoder, attributes.POSITION))
72
- return undefined;
73
- DracoDecoder.decodeUVParams(mesh.uvParams, dracoGeometry, dracoDecoder, attributes.TEXCOORD_0);
74
- DracoDecoder.decodeNormals(mesh.normals, dracoGeometry, dracoDecoder, attributes.NORMAL);
75
- if (attributes._BATCHID !== undefined && mesh.features !== undefined)
76
- DracoDecoder.decodeBatchIds(mesh.features, dracoGeometry, dracoDecoder, attributes._BATCHID);
77
- dracoModule.destroy(dracoGeometry);
78
- dracoModule.destroy(dracoDecoder);
79
- return mesh;
80
- }
81
- static decodeVertices(qPoints, dracoGeometry, dracoDecoder, attributeId) {
82
- const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);
83
- if (undefined === dracoAttribute)
84
- return false;
85
- const quantized = DracoDecoder.decodeAndQuantize(dracoGeometry, dracoDecoder, attributeId);
86
- qPoints.fromTypedArray(quantized.range, quantized.qPoints);
87
- return true;
88
- }
89
- static decodeBatchIds(features, dracoGeometry, dracoDecoder, attributeId) {
90
- const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);
91
- if (undefined === dracoAttribute)
92
- return false;
93
- const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();
94
- const numPoints = dracoGeometry.num_points();
95
- dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);
96
- const featureIndices = [];
97
- featureIndices.length = numPoints;
98
- for (let i = 0; i < numPoints; i++)
99
- featureIndices[i] = unquantizedValues.GetValue(i);
100
- features.setIndices(featureIndices);
101
- return true;
102
- }
103
- static decodeUVParams(points, dracoGeometry, dracoDecoder, attributeId) {
104
- const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);
105
- if (undefined === dracoAttribute)
106
- return false;
107
- const numPoints = dracoGeometry.num_points();
108
- const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();
109
- dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);
110
- for (let i = 0, j = 0; i < numPoints; i++)
111
- points.push(new core_geometry_1.Point2d(unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++)));
112
- DracoDecoder._dracoDecoderModule.destroy(unquantizedValues);
113
- return true;
114
- }
115
- static decodeNormals(normals, dracoGeometry, dracoDecoder, attributeId) {
116
- const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);
117
- if (undefined === dracoAttribute)
118
- return false;
119
- const numPoints = dracoGeometry.num_points();
120
- const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();
121
- dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);
122
- for (let i = 0, j = 0; i < numPoints; i++)
123
- normals.push(core_common_1.OctEncodedNormal.fromVector({ x: unquantizedValues.GetValue(j++), y: unquantizedValues.GetValue(j++), z: unquantizedValues.GetValue(j++) }));
124
- DracoDecoder._dracoDecoderModule.destroy(unquantizedValues);
125
- return true;
126
- }
127
- static decodeTriangles(mesh, dracoGeometry, dracoDecoder) {
128
- const numFaces = dracoGeometry.num_faces();
129
- const faceIndices = new DracoDecoder._dracoDecoderModule.DracoInt32Array();
130
- const numIndices = numFaces * 3;
131
- const indexArray = new Uint32Array();
132
- const triangle = new Primitives_1.Triangle();
133
- for (let i = 0; i < numFaces; ++i) {
134
- dracoDecoder.GetFaceFromMesh(dracoGeometry, i, faceIndices);
135
- triangle.setIndices(faceIndices.GetValue(0), faceIndices.GetValue(1), faceIndices.GetValue(2));
136
- mesh.addTriangle(triangle);
137
- }
138
- DracoDecoder._dracoDecoderModule.destroy(faceIndices);
139
- return {
140
- typedArray: indexArray,
141
- numberOfIndices: numIndices,
142
- };
143
- }
144
- static decodeAndQuantize(dracoGeometry, dracoDecoder, attributeId) {
145
- const dracoModule = DracoDecoder._dracoDecoderModule;
146
- const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);
147
- const numPoints = dracoGeometry.num_points();
148
- const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();
149
- const range = core_geometry_1.Range3d.createNull();
150
- dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);
151
- for (let i = 0, j = 0; i < numPoints; i++)
152
- range.extendXYZ(unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++));
153
- const qParams = core_common_1.QParams3d.fromRange(range);
154
- const qPoints = new Uint16Array(3 * numPoints);
155
- const point = core_geometry_1.Point3d.createZero();
156
- const qPoint = core_common_1.QPoint3d.create(point, qParams);
157
- for (let i = 0, j = 0; i < numPoints; i++) {
158
- point.set(unquantizedValues.GetValue(j), unquantizedValues.GetValue(j + 1), unquantizedValues.GetValue(j + 2));
159
- qPoint.init(point, qParams);
160
- qPoints[j++] = qPoint.x;
161
- qPoints[j++] = qPoint.y;
162
- qPoints[j++] = qPoint.z;
163
- }
164
- dracoModule.destroy(unquantizedValues);
165
- return { qParams, range, qPoints };
166
- }
167
- }
168
- exports.DracoDecoder = DracoDecoder;
169
- //# sourceMappingURL=DracoDecoder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DracoDecoder.js","sourceRoot":"","sources":["../../../src/tile/DracoDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\nimport { createDecoderModule } from \"draco3d\";\r\nimport { Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport { OctEncodedNormal, QParams3d, QPoint3d, QPoint3dList } from \"@itwin/core-common\";\r\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { Triangle } from \"../render/primitives/Primitives\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\n\r\nexport interface DecodedPointCloud {\r\n qParams: QParams3d;\r\n qPoints: Uint16Array;\r\n colors?: Uint8Array;\r\n}\r\n\r\n/** @internal */\r\nexport class DracoDecoder {\r\n private static _dracoDecoderModule: any;\r\n\r\n public static readDracoPointCloud(bufferData: Uint8Array, attributeId: number, colorAttributeId?: number): undefined | DecodedPointCloud {\r\n if (!DracoDecoder._dracoDecoderModule)\r\n DracoDecoder._dracoDecoderModule = createDecoderModule(undefined);\r\n\r\n const dracoModule = DracoDecoder._dracoDecoderModule;\r\n const dracoDecoder = new dracoModule.Decoder();\r\n\r\n const buffer = new dracoModule.DecoderBuffer();\r\n buffer.Init(bufferData, bufferData.length);\r\n\r\n const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);\r\n if (geometryType !== dracoModule.POINT_CLOUD)\r\n return undefined;\r\n\r\n const dracoPointCloud = new dracoModule.PointCloud();\r\n const decodingStatus = dracoDecoder.DecodeBufferToPointCloud(buffer, dracoPointCloud);\r\n dracoModule.destroy(buffer);\r\n if (!decodingStatus.ok() || dracoPointCloud.ptr === 0)\r\n return undefined;\r\n\r\n const quantizedPoints = DracoDecoder.decodeAndQuantize(dracoPointCloud, dracoDecoder, attributeId);\r\n let decodedPointCloud: DecodedPointCloud | undefined;\r\n if (quantizedPoints) {\r\n decodedPointCloud = quantizedPoints;\r\n if (undefined !== colorAttributeId) {\r\n const colorDracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoPointCloud, colorAttributeId);\r\n if (colorDracoAttribute) {\r\n const dracoColors = new DracoDecoder._dracoDecoderModule.DracoUInt8Array();\r\n dracoDecoder.GetAttributeUInt8ForAllPoints(dracoPointCloud, colorDracoAttribute, dracoColors);\r\n const length = 3 * dracoPointCloud.num_points();\r\n const attrLength = dracoColors.size();\r\n assert(length === attrLength);\r\n decodedPointCloud.colors = new Uint8Array(length);\r\n for (let i = 0; i < length; i++)\r\n decodedPointCloud.colors[i] = dracoColors.GetValue(i);\r\n }\r\n }\r\n }\r\n dracoModule.destroy(dracoPointCloud);\r\n dracoModule.destroy(dracoDecoder);\r\n return decodedPointCloud;\r\n }\r\n\r\n public static readDracoMesh(mesh: Mesh, _primitive: any, bufferData: Uint8Array, attributes: any): Mesh | undefined {\r\n if (!DracoDecoder._dracoDecoderModule)\r\n DracoDecoder._dracoDecoderModule = createDecoderModule(undefined);\r\n\r\n const dracoModule = DracoDecoder._dracoDecoderModule;\r\n const dracoDecoder = new dracoModule.Decoder();\r\n\r\n const buffer = new dracoModule.DecoderBuffer();\r\n buffer.Init(bufferData, bufferData.length);\r\n\r\n const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);\r\n if (geometryType !== dracoModule.TRIANGULAR_MESH)\r\n return undefined;\r\n\r\n const dracoGeometry = new dracoModule.Mesh();\r\n const decodingStatus = dracoDecoder.DecodeBufferToMesh(buffer, dracoGeometry);\r\n dracoModule.destroy(buffer);\r\n if (!decodingStatus.ok() || dracoGeometry.ptr === 0)\r\n return undefined;\r\n\r\n if (!DracoDecoder.decodeTriangles(mesh, dracoGeometry, dracoDecoder) ||\r\n !DracoDecoder.decodeVertices(mesh.points, dracoGeometry, dracoDecoder, attributes.POSITION))\r\n return undefined;\r\n DracoDecoder.decodeUVParams(mesh.uvParams, dracoGeometry, dracoDecoder, attributes.TEXCOORD_0);\r\n DracoDecoder.decodeNormals(mesh.normals, dracoGeometry, dracoDecoder, attributes.NORMAL);\r\n if (attributes._BATCHID !== undefined && mesh.features !== undefined)\r\n DracoDecoder.decodeBatchIds(mesh.features, dracoGeometry, dracoDecoder, attributes._BATCHID);\r\n dracoModule.destroy(dracoGeometry);\r\n dracoModule.destroy(dracoDecoder);\r\n\r\n return mesh;\r\n }\r\n private static decodeVertices(qPoints: QPoint3dList, dracoGeometry: any, dracoDecoder: any, attributeId: number): boolean {\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);\r\n if (undefined === dracoAttribute) return false;\r\n\r\n const quantized = DracoDecoder.decodeAndQuantize(dracoGeometry, dracoDecoder, attributeId);\r\n qPoints.fromTypedArray(quantized.range, quantized.qPoints);\r\n return true;\r\n }\r\n private static decodeBatchIds(features: Mesh.Features, dracoGeometry: any, dracoDecoder: any, attributeId: number): boolean {\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);\r\n if (undefined === dracoAttribute) return false;\r\n\r\n const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();\r\n const numPoints = dracoGeometry.num_points();\r\n dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);\r\n const featureIndices = [];\r\n featureIndices.length = numPoints;\r\n for (let i = 0; i < numPoints; i++)\r\n featureIndices[i] = unquantizedValues.GetValue(i);\r\n\r\n features.setIndices(featureIndices);\r\n return true;\r\n }\r\n private static decodeUVParams(points: Point2d[], dracoGeometry: any, dracoDecoder: any, attributeId: number): boolean {\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);\r\n if (undefined === dracoAttribute) return false;\r\n\r\n const numPoints = dracoGeometry.num_points();\r\n const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();\r\n dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);\r\n for (let i = 0, j = 0; i < numPoints; i++)\r\n points.push(new Point2d(unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++)));\r\n DracoDecoder._dracoDecoderModule.destroy(unquantizedValues);\r\n return true;\r\n }\r\n\r\n private static decodeNormals(normals: OctEncodedNormal[], dracoGeometry: any, dracoDecoder: any, attributeId: number): boolean {\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);\r\n if (undefined === dracoAttribute) return false;\r\n\r\n const numPoints = dracoGeometry.num_points();\r\n const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();\r\n dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);\r\n for (let i = 0, j = 0; i < numPoints; i++)\r\n normals.push(OctEncodedNormal.fromVector({ x: unquantizedValues.GetValue(j++), y: unquantizedValues.GetValue(j++), z: unquantizedValues.GetValue(j++) }));\r\n DracoDecoder._dracoDecoderModule.destroy(unquantizedValues);\r\n return true;\r\n }\r\n private static decodeTriangles(mesh: Mesh, dracoGeometry: any, dracoDecoder: any) {\r\n const numFaces = dracoGeometry.num_faces();\r\n const faceIndices = new DracoDecoder._dracoDecoderModule.DracoInt32Array();\r\n const numIndices = numFaces * 3;\r\n const indexArray = new Uint32Array();\r\n const triangle = new Triangle();\r\n\r\n for (let i = 0; i < numFaces; ++i) {\r\n dracoDecoder.GetFaceFromMesh(dracoGeometry, i, faceIndices);\r\n triangle.setIndices(faceIndices.GetValue(0), faceIndices.GetValue(1), faceIndices.GetValue(2));\r\n mesh.addTriangle(triangle);\r\n }\r\n\r\n DracoDecoder._dracoDecoderModule.destroy(faceIndices);\r\n\r\n return {\r\n typedArray: indexArray,\r\n numberOfIndices: numIndices,\r\n };\r\n }\r\n\r\n private static decodeAndQuantize(dracoGeometry: any, dracoDecoder: any, attributeId: number): { qParams: QParams3d, range: Range3d, qPoints: Uint16Array } {\r\n const dracoModule = DracoDecoder._dracoDecoderModule;\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);\r\n const numPoints = dracoGeometry.num_points();\r\n\r\n const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();\r\n const range = Range3d.createNull();\r\n dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);\r\n for (let i = 0, j = 0; i < numPoints; i++)\r\n range.extendXYZ(unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++));\r\n\r\n const qParams = QParams3d.fromRange(range);\r\n const qPoints = new Uint16Array(3 * numPoints);\r\n const point = Point3d.createZero();\r\n const qPoint = QPoint3d.create(point, qParams);\r\n for (let i = 0, j = 0; i < numPoints; i++) {\r\n point.set(unquantizedValues.GetValue(j), unquantizedValues.GetValue(j + 1), unquantizedValues.GetValue(j + 2));\r\n qPoint.init(point, qParams);\r\n qPoints[j++] = qPoint.x;\r\n qPoints[j++] = qPoint.y;\r\n qPoints[j++] = qPoint.z;\r\n }\r\n\r\n dracoModule.destroy(unquantizedValues);\r\n return { qParams, range, qPoints };\r\n }\r\n}\r\n"]}
@@ -1,20 +0,0 @@
1
- import { QParams3d } from "@itwin/core-common";
2
- import { Mesh } from "../render/primitives/mesh/MeshPrimitives";
3
- export interface DecodedPointCloud {
4
- qParams: QParams3d;
5
- qPoints: Uint16Array;
6
- colors?: Uint8Array;
7
- }
8
- /** @internal */
9
- export declare class DracoDecoder {
10
- private static _dracoDecoderModule;
11
- static readDracoPointCloud(bufferData: Uint8Array, attributeId: number, colorAttributeId?: number): undefined | DecodedPointCloud;
12
- static readDracoMesh(mesh: Mesh, _primitive: any, bufferData: Uint8Array, attributes: any): Mesh | undefined;
13
- private static decodeVertices;
14
- private static decodeBatchIds;
15
- private static decodeUVParams;
16
- private static decodeNormals;
17
- private static decodeTriangles;
18
- private static decodeAndQuantize;
19
- }
20
- //# sourceMappingURL=DracoDecoder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DracoDecoder.d.ts","sourceRoot":"","sources":["../../../src/tile/DracoDecoder.ts"],"names":[],"mappings":"AASA,OAAO,EAAoB,SAAS,EAA0B,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAIhE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,gBAAgB;AAChB,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAM;WAE1B,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB;WA2C1H,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GAAG,IAAI,GAAG,SAAS;IAgCnH,OAAO,CAAC,MAAM,CAAC,cAAc;IAQ7B,OAAO,CAAC,MAAM,CAAC,cAAc;IAe7B,OAAO,CAAC,MAAM,CAAC,cAAc;IAa7B,OAAO,CAAC,MAAM,CAAC,aAAa;IAY5B,OAAO,CAAC,MAAM,CAAC,eAAe;IAqB9B,OAAO,CAAC,MAAM,CAAC,iBAAiB;CA0BjC"}
@@ -1,165 +0,0 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module Tiles
7
- */
8
- import { createDecoderModule } from "draco3d";
9
- import { Point2d, Point3d, Range3d } from "@itwin/core-geometry";
10
- import { OctEncodedNormal, QParams3d, QPoint3d } from "@itwin/core-common";
11
- import { Triangle } from "../render/primitives/Primitives";
12
- import { assert } from "@itwin/core-bentley";
13
- /** @internal */
14
- export class DracoDecoder {
15
- static readDracoPointCloud(bufferData, attributeId, colorAttributeId) {
16
- if (!DracoDecoder._dracoDecoderModule)
17
- DracoDecoder._dracoDecoderModule = createDecoderModule(undefined);
18
- const dracoModule = DracoDecoder._dracoDecoderModule;
19
- const dracoDecoder = new dracoModule.Decoder();
20
- const buffer = new dracoModule.DecoderBuffer();
21
- buffer.Init(bufferData, bufferData.length);
22
- const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);
23
- if (geometryType !== dracoModule.POINT_CLOUD)
24
- return undefined;
25
- const dracoPointCloud = new dracoModule.PointCloud();
26
- const decodingStatus = dracoDecoder.DecodeBufferToPointCloud(buffer, dracoPointCloud);
27
- dracoModule.destroy(buffer);
28
- if (!decodingStatus.ok() || dracoPointCloud.ptr === 0)
29
- return undefined;
30
- const quantizedPoints = DracoDecoder.decodeAndQuantize(dracoPointCloud, dracoDecoder, attributeId);
31
- let decodedPointCloud;
32
- if (quantizedPoints) {
33
- decodedPointCloud = quantizedPoints;
34
- if (undefined !== colorAttributeId) {
35
- const colorDracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoPointCloud, colorAttributeId);
36
- if (colorDracoAttribute) {
37
- const dracoColors = new DracoDecoder._dracoDecoderModule.DracoUInt8Array();
38
- dracoDecoder.GetAttributeUInt8ForAllPoints(dracoPointCloud, colorDracoAttribute, dracoColors);
39
- const length = 3 * dracoPointCloud.num_points();
40
- const attrLength = dracoColors.size();
41
- assert(length === attrLength);
42
- decodedPointCloud.colors = new Uint8Array(length);
43
- for (let i = 0; i < length; i++)
44
- decodedPointCloud.colors[i] = dracoColors.GetValue(i);
45
- }
46
- }
47
- }
48
- dracoModule.destroy(dracoPointCloud);
49
- dracoModule.destroy(dracoDecoder);
50
- return decodedPointCloud;
51
- }
52
- static readDracoMesh(mesh, _primitive, bufferData, attributes) {
53
- if (!DracoDecoder._dracoDecoderModule)
54
- DracoDecoder._dracoDecoderModule = createDecoderModule(undefined);
55
- const dracoModule = DracoDecoder._dracoDecoderModule;
56
- const dracoDecoder = new dracoModule.Decoder();
57
- const buffer = new dracoModule.DecoderBuffer();
58
- buffer.Init(bufferData, bufferData.length);
59
- const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);
60
- if (geometryType !== dracoModule.TRIANGULAR_MESH)
61
- return undefined;
62
- const dracoGeometry = new dracoModule.Mesh();
63
- const decodingStatus = dracoDecoder.DecodeBufferToMesh(buffer, dracoGeometry);
64
- dracoModule.destroy(buffer);
65
- if (!decodingStatus.ok() || dracoGeometry.ptr === 0)
66
- return undefined;
67
- if (!DracoDecoder.decodeTriangles(mesh, dracoGeometry, dracoDecoder) ||
68
- !DracoDecoder.decodeVertices(mesh.points, dracoGeometry, dracoDecoder, attributes.POSITION))
69
- return undefined;
70
- DracoDecoder.decodeUVParams(mesh.uvParams, dracoGeometry, dracoDecoder, attributes.TEXCOORD_0);
71
- DracoDecoder.decodeNormals(mesh.normals, dracoGeometry, dracoDecoder, attributes.NORMAL);
72
- if (attributes._BATCHID !== undefined && mesh.features !== undefined)
73
- DracoDecoder.decodeBatchIds(mesh.features, dracoGeometry, dracoDecoder, attributes._BATCHID);
74
- dracoModule.destroy(dracoGeometry);
75
- dracoModule.destroy(dracoDecoder);
76
- return mesh;
77
- }
78
- static decodeVertices(qPoints, dracoGeometry, dracoDecoder, attributeId) {
79
- const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);
80
- if (undefined === dracoAttribute)
81
- return false;
82
- const quantized = DracoDecoder.decodeAndQuantize(dracoGeometry, dracoDecoder, attributeId);
83
- qPoints.fromTypedArray(quantized.range, quantized.qPoints);
84
- return true;
85
- }
86
- static decodeBatchIds(features, dracoGeometry, dracoDecoder, attributeId) {
87
- const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);
88
- if (undefined === dracoAttribute)
89
- return false;
90
- const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();
91
- const numPoints = dracoGeometry.num_points();
92
- dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);
93
- const featureIndices = [];
94
- featureIndices.length = numPoints;
95
- for (let i = 0; i < numPoints; i++)
96
- featureIndices[i] = unquantizedValues.GetValue(i);
97
- features.setIndices(featureIndices);
98
- return true;
99
- }
100
- static decodeUVParams(points, dracoGeometry, dracoDecoder, attributeId) {
101
- const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);
102
- if (undefined === dracoAttribute)
103
- return false;
104
- const numPoints = dracoGeometry.num_points();
105
- const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();
106
- dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);
107
- for (let i = 0, j = 0; i < numPoints; i++)
108
- points.push(new Point2d(unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++)));
109
- DracoDecoder._dracoDecoderModule.destroy(unquantizedValues);
110
- return true;
111
- }
112
- static decodeNormals(normals, dracoGeometry, dracoDecoder, attributeId) {
113
- const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);
114
- if (undefined === dracoAttribute)
115
- return false;
116
- const numPoints = dracoGeometry.num_points();
117
- const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();
118
- dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);
119
- for (let i = 0, j = 0; i < numPoints; i++)
120
- normals.push(OctEncodedNormal.fromVector({ x: unquantizedValues.GetValue(j++), y: unquantizedValues.GetValue(j++), z: unquantizedValues.GetValue(j++) }));
121
- DracoDecoder._dracoDecoderModule.destroy(unquantizedValues);
122
- return true;
123
- }
124
- static decodeTriangles(mesh, dracoGeometry, dracoDecoder) {
125
- const numFaces = dracoGeometry.num_faces();
126
- const faceIndices = new DracoDecoder._dracoDecoderModule.DracoInt32Array();
127
- const numIndices = numFaces * 3;
128
- const indexArray = new Uint32Array();
129
- const triangle = new Triangle();
130
- for (let i = 0; i < numFaces; ++i) {
131
- dracoDecoder.GetFaceFromMesh(dracoGeometry, i, faceIndices);
132
- triangle.setIndices(faceIndices.GetValue(0), faceIndices.GetValue(1), faceIndices.GetValue(2));
133
- mesh.addTriangle(triangle);
134
- }
135
- DracoDecoder._dracoDecoderModule.destroy(faceIndices);
136
- return {
137
- typedArray: indexArray,
138
- numberOfIndices: numIndices,
139
- };
140
- }
141
- static decodeAndQuantize(dracoGeometry, dracoDecoder, attributeId) {
142
- const dracoModule = DracoDecoder._dracoDecoderModule;
143
- const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);
144
- const numPoints = dracoGeometry.num_points();
145
- const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();
146
- const range = Range3d.createNull();
147
- dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);
148
- for (let i = 0, j = 0; i < numPoints; i++)
149
- range.extendXYZ(unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++));
150
- const qParams = QParams3d.fromRange(range);
151
- const qPoints = new Uint16Array(3 * numPoints);
152
- const point = Point3d.createZero();
153
- const qPoint = QPoint3d.create(point, qParams);
154
- for (let i = 0, j = 0; i < numPoints; i++) {
155
- point.set(unquantizedValues.GetValue(j), unquantizedValues.GetValue(j + 1), unquantizedValues.GetValue(j + 2));
156
- qPoint.init(point, qParams);
157
- qPoints[j++] = qPoint.x;
158
- qPoints[j++] = qPoint.y;
159
- qPoints[j++] = qPoint.z;
160
- }
161
- dracoModule.destroy(unquantizedValues);
162
- return { qParams, range, qPoints };
163
- }
164
- }
165
- //# sourceMappingURL=DracoDecoder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DracoDecoder.js","sourceRoot":"","sources":["../../../src/tile/DracoDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\nimport { createDecoderModule } from \"draco3d\";\r\nimport { Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport { OctEncodedNormal, QParams3d, QPoint3d, QPoint3dList } from \"@itwin/core-common\";\r\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { Triangle } from \"../render/primitives/Primitives\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\n\r\nexport interface DecodedPointCloud {\r\n qParams: QParams3d;\r\n qPoints: Uint16Array;\r\n colors?: Uint8Array;\r\n}\r\n\r\n/** @internal */\r\nexport class DracoDecoder {\r\n private static _dracoDecoderModule: any;\r\n\r\n public static readDracoPointCloud(bufferData: Uint8Array, attributeId: number, colorAttributeId?: number): undefined | DecodedPointCloud {\r\n if (!DracoDecoder._dracoDecoderModule)\r\n DracoDecoder._dracoDecoderModule = createDecoderModule(undefined);\r\n\r\n const dracoModule = DracoDecoder._dracoDecoderModule;\r\n const dracoDecoder = new dracoModule.Decoder();\r\n\r\n const buffer = new dracoModule.DecoderBuffer();\r\n buffer.Init(bufferData, bufferData.length);\r\n\r\n const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);\r\n if (geometryType !== dracoModule.POINT_CLOUD)\r\n return undefined;\r\n\r\n const dracoPointCloud = new dracoModule.PointCloud();\r\n const decodingStatus = dracoDecoder.DecodeBufferToPointCloud(buffer, dracoPointCloud);\r\n dracoModule.destroy(buffer);\r\n if (!decodingStatus.ok() || dracoPointCloud.ptr === 0)\r\n return undefined;\r\n\r\n const quantizedPoints = DracoDecoder.decodeAndQuantize(dracoPointCloud, dracoDecoder, attributeId);\r\n let decodedPointCloud: DecodedPointCloud | undefined;\r\n if (quantizedPoints) {\r\n decodedPointCloud = quantizedPoints;\r\n if (undefined !== colorAttributeId) {\r\n const colorDracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoPointCloud, colorAttributeId);\r\n if (colorDracoAttribute) {\r\n const dracoColors = new DracoDecoder._dracoDecoderModule.DracoUInt8Array();\r\n dracoDecoder.GetAttributeUInt8ForAllPoints(dracoPointCloud, colorDracoAttribute, dracoColors);\r\n const length = 3 * dracoPointCloud.num_points();\r\n const attrLength = dracoColors.size();\r\n assert(length === attrLength);\r\n decodedPointCloud.colors = new Uint8Array(length);\r\n for (let i = 0; i < length; i++)\r\n decodedPointCloud.colors[i] = dracoColors.GetValue(i);\r\n }\r\n }\r\n }\r\n dracoModule.destroy(dracoPointCloud);\r\n dracoModule.destroy(dracoDecoder);\r\n return decodedPointCloud;\r\n }\r\n\r\n public static readDracoMesh(mesh: Mesh, _primitive: any, bufferData: Uint8Array, attributes: any): Mesh | undefined {\r\n if (!DracoDecoder._dracoDecoderModule)\r\n DracoDecoder._dracoDecoderModule = createDecoderModule(undefined);\r\n\r\n const dracoModule = DracoDecoder._dracoDecoderModule;\r\n const dracoDecoder = new dracoModule.Decoder();\r\n\r\n const buffer = new dracoModule.DecoderBuffer();\r\n buffer.Init(bufferData, bufferData.length);\r\n\r\n const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);\r\n if (geometryType !== dracoModule.TRIANGULAR_MESH)\r\n return undefined;\r\n\r\n const dracoGeometry = new dracoModule.Mesh();\r\n const decodingStatus = dracoDecoder.DecodeBufferToMesh(buffer, dracoGeometry);\r\n dracoModule.destroy(buffer);\r\n if (!decodingStatus.ok() || dracoGeometry.ptr === 0)\r\n return undefined;\r\n\r\n if (!DracoDecoder.decodeTriangles(mesh, dracoGeometry, dracoDecoder) ||\r\n !DracoDecoder.decodeVertices(mesh.points, dracoGeometry, dracoDecoder, attributes.POSITION))\r\n return undefined;\r\n DracoDecoder.decodeUVParams(mesh.uvParams, dracoGeometry, dracoDecoder, attributes.TEXCOORD_0);\r\n DracoDecoder.decodeNormals(mesh.normals, dracoGeometry, dracoDecoder, attributes.NORMAL);\r\n if (attributes._BATCHID !== undefined && mesh.features !== undefined)\r\n DracoDecoder.decodeBatchIds(mesh.features, dracoGeometry, dracoDecoder, attributes._BATCHID);\r\n dracoModule.destroy(dracoGeometry);\r\n dracoModule.destroy(dracoDecoder);\r\n\r\n return mesh;\r\n }\r\n private static decodeVertices(qPoints: QPoint3dList, dracoGeometry: any, dracoDecoder: any, attributeId: number): boolean {\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);\r\n if (undefined === dracoAttribute) return false;\r\n\r\n const quantized = DracoDecoder.decodeAndQuantize(dracoGeometry, dracoDecoder, attributeId);\r\n qPoints.fromTypedArray(quantized.range, quantized.qPoints);\r\n return true;\r\n }\r\n private static decodeBatchIds(features: Mesh.Features, dracoGeometry: any, dracoDecoder: any, attributeId: number): boolean {\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);\r\n if (undefined === dracoAttribute) return false;\r\n\r\n const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();\r\n const numPoints = dracoGeometry.num_points();\r\n dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);\r\n const featureIndices = [];\r\n featureIndices.length = numPoints;\r\n for (let i = 0; i < numPoints; i++)\r\n featureIndices[i] = unquantizedValues.GetValue(i);\r\n\r\n features.setIndices(featureIndices);\r\n return true;\r\n }\r\n private static decodeUVParams(points: Point2d[], dracoGeometry: any, dracoDecoder: any, attributeId: number): boolean {\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);\r\n if (undefined === dracoAttribute) return false;\r\n\r\n const numPoints = dracoGeometry.num_points();\r\n const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();\r\n dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);\r\n for (let i = 0, j = 0; i < numPoints; i++)\r\n points.push(new Point2d(unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++)));\r\n DracoDecoder._dracoDecoderModule.destroy(unquantizedValues);\r\n return true;\r\n }\r\n\r\n private static decodeNormals(normals: OctEncodedNormal[], dracoGeometry: any, dracoDecoder: any, attributeId: number): boolean {\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);\r\n if (undefined === dracoAttribute) return false;\r\n\r\n const numPoints = dracoGeometry.num_points();\r\n const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();\r\n dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);\r\n for (let i = 0, j = 0; i < numPoints; i++)\r\n normals.push(OctEncodedNormal.fromVector({ x: unquantizedValues.GetValue(j++), y: unquantizedValues.GetValue(j++), z: unquantizedValues.GetValue(j++) }));\r\n DracoDecoder._dracoDecoderModule.destroy(unquantizedValues);\r\n return true;\r\n }\r\n private static decodeTriangles(mesh: Mesh, dracoGeometry: any, dracoDecoder: any) {\r\n const numFaces = dracoGeometry.num_faces();\r\n const faceIndices = new DracoDecoder._dracoDecoderModule.DracoInt32Array();\r\n const numIndices = numFaces * 3;\r\n const indexArray = new Uint32Array();\r\n const triangle = new Triangle();\r\n\r\n for (let i = 0; i < numFaces; ++i) {\r\n dracoDecoder.GetFaceFromMesh(dracoGeometry, i, faceIndices);\r\n triangle.setIndices(faceIndices.GetValue(0), faceIndices.GetValue(1), faceIndices.GetValue(2));\r\n mesh.addTriangle(triangle);\r\n }\r\n\r\n DracoDecoder._dracoDecoderModule.destroy(faceIndices);\r\n\r\n return {\r\n typedArray: indexArray,\r\n numberOfIndices: numIndices,\r\n };\r\n }\r\n\r\n private static decodeAndQuantize(dracoGeometry: any, dracoDecoder: any, attributeId: number): { qParams: QParams3d, range: Range3d, qPoints: Uint16Array } {\r\n const dracoModule = DracoDecoder._dracoDecoderModule;\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(dracoGeometry, attributeId);\r\n const numPoints = dracoGeometry.num_points();\r\n\r\n const unquantizedValues = new DracoDecoder._dracoDecoderModule.DracoFloat32Array();\r\n const range = Range3d.createNull();\r\n dracoDecoder.GetAttributeFloatForAllPoints(dracoGeometry, dracoAttribute, unquantizedValues);\r\n for (let i = 0, j = 0; i < numPoints; i++)\r\n range.extendXYZ(unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++), unquantizedValues.GetValue(j++));\r\n\r\n const qParams = QParams3d.fromRange(range);\r\n const qPoints = new Uint16Array(3 * numPoints);\r\n const point = Point3d.createZero();\r\n const qPoint = QPoint3d.create(point, qParams);\r\n for (let i = 0, j = 0; i < numPoints; i++) {\r\n point.set(unquantizedValues.GetValue(j), unquantizedValues.GetValue(j + 1), unquantizedValues.GetValue(j + 2));\r\n qPoint.init(point, qParams);\r\n qPoints[j++] = qPoint.x;\r\n qPoints[j++] = qPoint.y;\r\n qPoints[j++] = qPoint.z;\r\n }\r\n\r\n dracoModule.destroy(unquantizedValues);\r\n return { qParams, range, qPoints };\r\n }\r\n}\r\n"]}