@itwin/core-frontend 4.4.0-dev.9 → 4.5.0-dev.2

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 (210) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/lib/cjs/DisplayStyleState.d.ts +3 -0
  3. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  4. package/lib/cjs/DisplayStyleState.js +10 -0
  5. package/lib/cjs/DisplayStyleState.js.map +1 -1
  6. package/lib/cjs/Viewport.d.ts +5 -0
  7. package/lib/cjs/Viewport.d.ts.map +1 -1
  8. package/lib/cjs/Viewport.js +6 -0
  9. package/lib/cjs/Viewport.js.map +1 -1
  10. package/lib/cjs/common/gltf/GltfSchema.d.ts +20 -3
  11. package/lib/cjs/common/gltf/GltfSchema.d.ts.map +1 -1
  12. package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
  13. package/lib/cjs/common/imdl/ImdlModel.d.ts +15 -1
  14. package/lib/cjs/common/imdl/ImdlModel.d.ts.map +1 -1
  15. package/lib/cjs/common/imdl/ImdlModel.js +11 -3
  16. package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
  17. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts +3 -1
  18. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  19. package/lib/cjs/common/imdl/ParseImdlDocument.js +66 -11
  20. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  21. package/lib/cjs/render/GraphicBranch.d.ts +10 -0
  22. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  23. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  24. package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
  25. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  26. package/lib/cjs/render/webgl/BranchState.js +2 -0
  27. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  28. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  29. package/lib/cjs/render/webgl/Graphic.js +3 -0
  30. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  31. package/lib/cjs/render/webgl/InstancedGeometry.d.ts +1 -0
  32. package/lib/cjs/render/webgl/InstancedGeometry.d.ts.map +1 -1
  33. package/lib/cjs/render/webgl/InstancedGeometry.js +1 -0
  34. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  35. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  36. package/lib/cjs/render/webgl/RealityMesh.js +6 -0
  37. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  38. package/lib/cjs/request/utils.d.ts +18 -0
  39. package/lib/cjs/request/utils.d.ts.map +1 -0
  40. package/lib/cjs/request/utils.js +45 -0
  41. package/lib/cjs/request/utils.js.map +1 -0
  42. package/lib/cjs/tile/BatchedTileIdMap.d.ts +1 -2
  43. package/lib/cjs/tile/BatchedTileIdMap.d.ts.map +1 -1
  44. package/lib/cjs/tile/BatchedTileIdMap.js +3 -3
  45. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  46. package/lib/cjs/tile/GltfReader.d.ts +4 -1
  47. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  48. package/lib/cjs/tile/GltfReader.js +125 -26
  49. package/lib/cjs/tile/GltfReader.js.map +1 -1
  50. package/lib/cjs/tile/ImdlDecoder.d.ts +7 -1
  51. package/lib/cjs/tile/ImdlDecoder.d.ts.map +1 -1
  52. package/lib/cjs/tile/ImdlDecoder.js.map +1 -1
  53. package/lib/cjs/tile/ImdlGraphicsCreator.d.ts.map +1 -1
  54. package/lib/cjs/tile/ImdlGraphicsCreator.js +28 -17
  55. package/lib/cjs/tile/ImdlGraphicsCreator.js.map +1 -1
  56. package/lib/cjs/tile/ImdlReader.d.ts +2 -1
  57. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  58. package/lib/cjs/tile/ImdlReader.js +1 -0
  59. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  60. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  61. package/lib/cjs/tile/RealityModelTileTree.js +2 -3
  62. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  63. package/lib/cjs/tile/RealityTileTree.d.ts +31 -0
  64. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  65. package/lib/cjs/tile/RealityTileTree.js +6 -0
  66. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  67. package/lib/cjs/tile/TileDrawArgs.d.ts +6 -0
  68. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  69. package/lib/cjs/tile/TileDrawArgs.js +7 -0
  70. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  71. package/lib/cjs/tile/TileTreeReference.d.ts +2 -0
  72. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  73. package/lib/cjs/tile/TileTreeReference.js +5 -0
  74. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  75. package/lib/cjs/tile/map/ArcGISTileMap.d.ts +6 -2
  76. package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -1
  77. package/lib/cjs/tile/map/ArcGISTileMap.js +127 -69
  78. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  79. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  80. package/lib/cjs/tile/map/ArcGisUtilities.js +5 -0
  81. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  82. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  83. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +61 -39
  84. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  85. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
  86. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  87. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +6 -0
  88. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  89. package/lib/cjs/tile/map/MapLayerImageryProvider.js +47 -7
  90. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  91. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  92. package/lib/cjs/tile/map/WmsCapabilities.js +1 -15
  93. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  94. package/lib/cjs/tile/map/WmsUtilities.d.ts +7 -0
  95. package/lib/cjs/tile/map/WmsUtilities.d.ts.map +1 -1
  96. package/lib/cjs/tile/map/WmsUtilities.js +22 -0
  97. package/lib/cjs/tile/map/WmsUtilities.js.map +1 -1
  98. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  99. package/lib/cjs/tile/map/WmtsCapabilities.js +2 -16
  100. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  101. package/lib/cjs/tools/SelectTool.d.ts +1 -0
  102. package/lib/cjs/tools/SelectTool.d.ts.map +1 -1
  103. package/lib/cjs/tools/SelectTool.js +19 -13
  104. package/lib/cjs/tools/SelectTool.js.map +1 -1
  105. package/lib/esm/DisplayStyleState.d.ts +3 -0
  106. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  107. package/lib/esm/DisplayStyleState.js +10 -0
  108. package/lib/esm/DisplayStyleState.js.map +1 -1
  109. package/lib/esm/Viewport.d.ts +5 -0
  110. package/lib/esm/Viewport.d.ts.map +1 -1
  111. package/lib/esm/Viewport.js +6 -0
  112. package/lib/esm/Viewport.js.map +1 -1
  113. package/lib/esm/common/gltf/GltfSchema.d.ts +20 -3
  114. package/lib/esm/common/gltf/GltfSchema.d.ts.map +1 -1
  115. package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
  116. package/lib/esm/common/imdl/ImdlModel.d.ts +15 -1
  117. package/lib/esm/common/imdl/ImdlModel.d.ts.map +1 -1
  118. package/lib/esm/common/imdl/ImdlModel.js +11 -3
  119. package/lib/esm/common/imdl/ImdlModel.js.map +1 -1
  120. package/lib/esm/common/imdl/ParseImdlDocument.d.ts +3 -1
  121. package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  122. package/lib/esm/common/imdl/ParseImdlDocument.js +67 -12
  123. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  124. package/lib/esm/render/GraphicBranch.d.ts +10 -0
  125. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  126. package/lib/esm/render/GraphicBranch.js.map +1 -1
  127. package/lib/esm/render/webgl/BranchState.d.ts +2 -0
  128. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  129. package/lib/esm/render/webgl/BranchState.js +2 -0
  130. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  131. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  132. package/lib/esm/render/webgl/Graphic.js +3 -0
  133. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  134. package/lib/esm/render/webgl/InstancedGeometry.d.ts +1 -0
  135. package/lib/esm/render/webgl/InstancedGeometry.d.ts.map +1 -1
  136. package/lib/esm/render/webgl/InstancedGeometry.js +1 -0
  137. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  138. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  139. package/lib/esm/render/webgl/RealityMesh.js +6 -0
  140. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  141. package/lib/esm/request/utils.d.ts +18 -0
  142. package/lib/esm/request/utils.d.ts.map +1 -0
  143. package/lib/esm/request/utils.js +40 -0
  144. package/lib/esm/request/utils.js.map +1 -0
  145. package/lib/esm/tile/BatchedTileIdMap.d.ts +1 -2
  146. package/lib/esm/tile/BatchedTileIdMap.d.ts.map +1 -1
  147. package/lib/esm/tile/BatchedTileIdMap.js +3 -3
  148. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  149. package/lib/esm/tile/GltfReader.d.ts +4 -1
  150. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  151. package/lib/esm/tile/GltfReader.js +126 -27
  152. package/lib/esm/tile/GltfReader.js.map +1 -1
  153. package/lib/esm/tile/ImdlDecoder.d.ts +7 -1
  154. package/lib/esm/tile/ImdlDecoder.d.ts.map +1 -1
  155. package/lib/esm/tile/ImdlDecoder.js.map +1 -1
  156. package/lib/esm/tile/ImdlGraphicsCreator.d.ts.map +1 -1
  157. package/lib/esm/tile/ImdlGraphicsCreator.js +28 -17
  158. package/lib/esm/tile/ImdlGraphicsCreator.js.map +1 -1
  159. package/lib/esm/tile/ImdlReader.d.ts +2 -1
  160. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  161. package/lib/esm/tile/ImdlReader.js +1 -0
  162. package/lib/esm/tile/ImdlReader.js.map +1 -1
  163. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  164. package/lib/esm/tile/RealityModelTileTree.js +2 -3
  165. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  166. package/lib/esm/tile/RealityTileTree.d.ts +31 -0
  167. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  168. package/lib/esm/tile/RealityTileTree.js +6 -0
  169. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  170. package/lib/esm/tile/TileDrawArgs.d.ts +6 -0
  171. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  172. package/lib/esm/tile/TileDrawArgs.js +8 -1
  173. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  174. package/lib/esm/tile/TileTreeReference.d.ts +2 -0
  175. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  176. package/lib/esm/tile/TileTreeReference.js +5 -0
  177. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  178. package/lib/esm/tile/map/ArcGISTileMap.d.ts +6 -2
  179. package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -1
  180. package/lib/esm/tile/map/ArcGISTileMap.js +130 -71
  181. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  182. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  183. package/lib/esm/tile/map/ArcGisUtilities.js +5 -0
  184. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  185. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  186. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +61 -39
  187. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  188. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
  189. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  190. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +6 -0
  191. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  192. package/lib/esm/tile/map/MapLayerImageryProvider.js +48 -8
  193. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  194. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  195. package/lib/esm/tile/map/WmsCapabilities.js +1 -15
  196. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  197. package/lib/esm/tile/map/WmsUtilities.d.ts +7 -0
  198. package/lib/esm/tile/map/WmsUtilities.d.ts.map +1 -1
  199. package/lib/esm/tile/map/WmsUtilities.js +22 -0
  200. package/lib/esm/tile/map/WmsUtilities.js.map +1 -1
  201. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  202. package/lib/esm/tile/map/WmtsCapabilities.js +2 -16
  203. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  204. package/lib/esm/tools/SelectTool.d.ts +1 -0
  205. package/lib/esm/tools/SelectTool.d.ts.map +1 -1
  206. package/lib/esm/tools/SelectTool.js +19 -13
  207. package/lib/esm/tools/SelectTool.js.map +1 -1
  208. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  209. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  210. package/package.json +20 -19
@@ -235,6 +235,17 @@ function colorFromMaterial(material, isTransparent) {
235
235
  color = color.withTransparency(0);
236
236
  return color;
237
237
  }
238
+ function trsMatrix(translation, rotation, scale, result) {
239
+ // SPEC: To compose the local transformation matrix, TRS properties MUST be converted to matrices and postmultiplied in the T * R * S order;
240
+ // first the scale is applied to the vertices, then the rotation, and then the translation.
241
+ const scaleTf = core_geometry_1.Transform.createRefs(undefined, scale ? core_geometry_1.Matrix3d.createScale(scale[0], scale[1], scale[2]) : core_geometry_1.Matrix3d.identity);
242
+ const rotTf = core_geometry_1.Transform.createRefs(undefined, rotation ? core_geometry_1.Matrix3d.createFromQuaternion(core_geometry_1.Point4d.create(rotation[0], rotation[1], rotation[2], rotation[3])) : core_geometry_1.Matrix3d.identity);
243
+ rotTf.matrix.transposeInPlace(); // See comment on Matrix3d.createFromQuaternion
244
+ const transTf = core_geometry_1.Transform.createTranslation(translation ? new core_geometry_1.Point3d(translation[0], translation[1], translation[2]) : core_geometry_1.Point3d.createZero());
245
+ const tf = scaleTf.multiplyTransformTransform(rotTf, result);
246
+ transTf.multiplyTransformTransform(tf, tf);
247
+ return tf;
248
+ }
238
249
  class TransformStack {
239
250
  constructor(transform) {
240
251
  this._stack = [];
@@ -255,14 +266,7 @@ class TransformStack {
255
266
  nodeTransform = core_geometry_1.Transform.createOriginAndMatrix(origin, matrix);
256
267
  }
257
268
  else if (node.rotation || node.scale || node.translation) {
258
- // SPEC: To compose the local transformation matrix, TRS properties MUST be converted to matrices and postmultiplied in the T * R * S order;
259
- // first the scale is applied to the vertices, then the rotation, and then the translation.
260
- const scale = core_geometry_1.Transform.createRefs(undefined, node.scale ? core_geometry_1.Matrix3d.createScale(node.scale[0], node.scale[1], node.scale[2]) : core_geometry_1.Matrix3d.identity);
261
- const rot = core_geometry_1.Transform.createRefs(undefined, node.rotation ? core_geometry_1.Matrix3d.createFromQuaternion(core_geometry_1.Point4d.create(node.rotation[0], node.rotation[1], node.rotation[2], node.rotation[3])) : core_geometry_1.Matrix3d.identity);
262
- rot.matrix.transposeInPlace(); // See comment on Matrix3d.createFromQuaternion
263
- const trans = core_geometry_1.Transform.createTranslation(node.translation ? new core_geometry_1.Point3d(node.translation[0], node.translation[1], node.translation[2]) : core_geometry_1.Point3d.createZero());
264
- nodeTransform = scale.multiplyTransformTransform(rot);
265
- trans.multiplyTransformTransform(nodeTransform, nodeTransform);
269
+ nodeTransform = trsMatrix(node.translation, node.rotation, node.scale);
266
270
  }
267
271
  const top = this.transform;
268
272
  if (!top)
@@ -315,6 +319,9 @@ class GltfReader {
315
319
  traverseScene() {
316
320
  return this.traverseNodes(this._sceneNodes);
317
321
  }
322
+ get viewFlagOverrides() {
323
+ return undefined;
324
+ }
318
325
  getTileTransform(transformToRoot, pseudoRtcBias) {
319
326
  let transform;
320
327
  if (this._returnToCenter || pseudoRtcBias || this._yAxisUp || transformToRoot) {
@@ -358,18 +365,19 @@ class GltfReader {
358
365
  renderGraphic = renderGraphicList[0];
359
366
  else
360
367
  renderGraphic = this._system.createGraphicList(renderGraphicList);
361
- const transform = this.getTileTransform(transformToRoot, pseudoRtcBias);
362
- let range = contentRange;
363
- const invTransform = transform?.inverse();
364
- if (invTransform)
365
- range = invTransform.multiplyRange(contentRange);
366
368
  if (featureTable)
367
- renderGraphic = this._system.createBatch(renderGraphic, core_common_1.PackedFeatureTable.pack(featureTable), range);
368
- if (transform) {
369
+ renderGraphic = this._system.createBatch(renderGraphic, core_common_1.PackedFeatureTable.pack(featureTable), contentRange);
370
+ const transform = this.getTileTransform(transformToRoot, pseudoRtcBias);
371
+ const viewFlagOverrides = this.viewFlagOverrides;
372
+ if (transform || viewFlagOverrides) {
369
373
  const branch = new GraphicBranch_1.GraphicBranch(true);
374
+ if (viewFlagOverrides)
375
+ branch.setViewFlagOverrides(viewFlagOverrides);
370
376
  branch.add(renderGraphic);
371
- renderGraphic = this._system.createBranch(branch, transform);
377
+ renderGraphic = this._system.createBranch(branch, transform ?? core_geometry_1.Transform.createIdentity());
372
378
  }
379
+ const invTransform = transform?.inverse();
380
+ const range = invTransform ? invTransform.multiplyRange(contentRange) : contentRange;
373
381
  return {
374
382
  readStatus,
375
383
  isLeaf,
@@ -416,12 +424,76 @@ class GltfReader {
416
424
  mesh.normals.push(new core_common_1.OctEncodedNormal(normal));
417
425
  return mesh.getGraphics(this._system, instances);
418
426
  }
419
- readNodeAndCreateGraphics(renderGraphicList, node, featureTable, transformStack, instances, pseudoRtcBias) {
427
+ readInstanceAttributes(node, featureTable) {
428
+ const ext = node.extensions?.EXT_mesh_gpu_instancing;
429
+ if (!ext || !ext.attributes) {
430
+ return undefined;
431
+ }
432
+ const translationsView = this.getBufferView(ext.attributes, "TRANSLATION");
433
+ const translations = translationsView?.toBufferData(GltfSchema_1.GltfDataType.Float);
434
+ const rotations = this.getBufferView(ext.attributes, "ROTATION")?.toBufferData(GltfSchema_1.GltfDataType.Float);
435
+ const scales = this.getBufferView(ext.attributes, "SCALE")?.toBufferData(GltfSchema_1.GltfDataType.Float);
436
+ // All attributes must specify the same count, count must be greater than zero, and at least one attribute must be specified.
437
+ const count = translations?.count ?? rotations?.count ?? scales?.count;
438
+ if (!count || (rotations && rotations.count !== count) || (scales && scales.count !== count)) {
439
+ return undefined;
440
+ }
441
+ const transformCenter = new core_geometry_1.Point3d();
442
+ const trMin = translationsView?.accessor.min;
443
+ const trMax = translationsView?.accessor.max;
444
+ if (trMin && trMax) {
445
+ const half = (idx) => trMin[idx] + (trMax[idx] - trMin[idx]) / 2;
446
+ transformCenter.set(half(0), half(1), half(2));
447
+ }
448
+ const getTranslation = (index) => {
449
+ if (!translations) {
450
+ return undefined;
451
+ }
452
+ index *= 3;
453
+ return [
454
+ translations.buffer[index + 0] - transformCenter.x,
455
+ translations.buffer[index + 1] - transformCenter.y,
456
+ translations.buffer[index + 2] - transformCenter.z,
457
+ ];
458
+ };
459
+ const getRotation = (index) => {
460
+ index *= 4;
461
+ return rotations ? [rotations.buffer[index], rotations.buffer[index + 1], rotations.buffer[index + 2], rotations.buffer[index + 3]] : undefined;
462
+ };
463
+ const getScale = (index) => {
464
+ index *= 3;
465
+ return scales ? [scales.buffer[index], scales.buffer[index + 1], scales.buffer[index + 2]] : undefined;
466
+ };
467
+ const transforms = new Float32Array(3 * 4 * count);
468
+ const transform = core_geometry_1.Transform.createIdentity();
469
+ for (let i = 0; i < count; i++) {
470
+ const tf = trsMatrix(getTranslation(i), getRotation(i), getScale(i), transform);
471
+ const idx = i * 3 * 4;
472
+ transforms[idx + 0] = tf.matrix.coffs[0];
473
+ transforms[idx + 1] = tf.matrix.coffs[1];
474
+ transforms[idx + 2] = tf.matrix.coffs[2];
475
+ transforms[idx + 3] = tf.origin.x;
476
+ transforms[idx + 4] = tf.matrix.coffs[3];
477
+ transforms[idx + 5] = tf.matrix.coffs[4];
478
+ transforms[idx + 6] = tf.matrix.coffs[5];
479
+ transforms[idx + 7] = tf.origin.y;
480
+ transforms[idx + 8] = tf.matrix.coffs[6];
481
+ transforms[idx + 9] = tf.matrix.coffs[7];
482
+ transforms[idx + 10] = tf.matrix.coffs[8];
483
+ transforms[idx + 11] = tf.origin.z;
484
+ }
485
+ // ###TODO? The extension currently provides no way of specifying per-instance feature Ids.
486
+ // For now, assume that if the feature table contains exactly one feature, all the instances belong to that feature.
487
+ const featureIds = featureTable && featureTable.isUniform ? new Uint8Array(3 * count) : undefined;
488
+ return { count, transforms, transformCenter, featureIds };
489
+ }
490
+ readNodeAndCreateGraphics(renderGraphicList, node, featureTable, transformStack, batchInstances, pseudoRtcBias) {
420
491
  if (undefined === node)
421
492
  return core_common_1.TileReadStatus.InvalidTileData;
422
493
  // IMPORTANT: Do not return without popping this node from the stack.
423
494
  transformStack.push(node);
424
495
  const thisTransform = transformStack.transform;
496
+ const nodeInstances = !batchInstances && undefined !== node.mesh ? this.readInstanceAttributes(node, featureTable) : undefined;
425
497
  /**
426
498
  * This is a workaround for tiles generated by
427
499
  * context capture which have a large offset from the tileset origin that exceeds the
@@ -436,16 +508,16 @@ class GltfReader {
436
508
  for (const meshKey of (0, GltfSchema_1.getGltfNodeMeshIds)(node)) {
437
509
  const nodeMesh = this._meshes[meshKey];
438
510
  if (nodeMesh?.primitives) {
439
- const meshes = this.readMeshPrimitives(node, featureTable, thisTransform, thisBias);
511
+ const meshes = this.readMeshPrimitives(node, featureTable, thisTransform, thisBias, nodeInstances);
440
512
  let renderGraphic;
441
513
  if (0 !== meshes.length) {
442
514
  if (1 === meshes.length) {
443
- renderGraphic = this.graphicFromMeshData(meshes[0], instances);
515
+ renderGraphic = this.graphicFromMeshData(meshes[0], batchInstances ?? nodeInstances);
444
516
  }
445
517
  else {
446
518
  const thisList = [];
447
519
  for (const mesh of meshes) {
448
- renderGraphic = this.graphicFromMeshData(mesh, instances);
520
+ renderGraphic = this.graphicFromMeshData(mesh, batchInstances ?? nodeInstances);
449
521
  if (undefined !== renderGraphic)
450
522
  thisList.push(renderGraphic);
451
523
  }
@@ -467,7 +539,7 @@ class GltfReader {
467
539
  for (const childId of node.children) {
468
540
  const child = this._nodes[childId];
469
541
  if (child)
470
- this.readNodeAndCreateGraphics(renderGraphicList, child, featureTable, transformStack, instances);
542
+ this.readNodeAndCreateGraphics(renderGraphicList, child, featureTable, transformStack, batchInstances ?? nodeInstances);
471
543
  }
472
544
  }
473
545
  transformStack.pop();
@@ -696,9 +768,9 @@ class GltfReader {
696
768
  // DisplayParams doesn't want a separate texture mapping if the material already has one.
697
769
  textureMapping = undefined;
698
770
  }
699
- return new DisplayParams_1.DisplayParams(DisplayParams_1.DisplayParams.Type.Mesh, color, color, 1, core_common_1.LinePixels.Solid, core_common_1.FillFlags.Always, renderMaterial, undefined, hasBakedLighting, textureMapping);
771
+ return new DisplayParams_1.DisplayParams(DisplayParams_1.DisplayParams.Type.Mesh, color, color, 1, core_common_1.LinePixels.Solid, core_common_1.FillFlags.None, renderMaterial, undefined, hasBakedLighting, textureMapping);
700
772
  }
701
- readMeshPrimitives(node, featureTable, thisTransform, thisBias) {
773
+ readMeshPrimitives(node, featureTable, thisTransform, thisBias, instances) {
702
774
  const meshes = [];
703
775
  for (const meshKey of (0, GltfSchema_1.getGltfNodeMeshIds)(node)) {
704
776
  const nodeMesh = this._meshes[meshKey];
@@ -708,9 +780,30 @@ class GltfReader {
708
780
  if (mesh) {
709
781
  meshes.push(mesh);
710
782
  if (this._computedContentRange && mesh.pointRange) {
711
- const invTransform = thisTransform?.inverse();
712
- const meshRange = invTransform ? invTransform.multiplyRange(mesh.pointRange) : mesh.pointRange;
713
- this._computedContentRange.extendRange(meshRange);
783
+ const meshRange = thisTransform ? thisTransform.multiplyRange(mesh.pointRange) : mesh.pointRange;
784
+ if (!instances) {
785
+ this._computedContentRange.extendRange(meshRange);
786
+ }
787
+ else {
788
+ const tfs = instances.transforms;
789
+ const nodeRange = new core_geometry_1.Range3d();
790
+ const extendTransformedRange = (i, x, y, z) => {
791
+ nodeRange.extendXYZ(tfs[i + 3] + tfs[i + 0] * x + tfs[i + 1] * y + tfs[i + 2] * z, tfs[i + 7] + tfs[i + 4] * x + tfs[i + 5] * y + tfs[i + 6] * z, tfs[i + 11] + tfs[i + 8] * x + tfs[i + 9] * y + tfs[i + 10] * z);
792
+ };
793
+ for (let i = 0; i < tfs.length; i += 3 * 4) {
794
+ extendTransformedRange(i, meshRange.low.x, meshRange.low.y, meshRange.low.z);
795
+ extendTransformedRange(i, meshRange.low.x, meshRange.low.y, meshRange.high.z);
796
+ extendTransformedRange(i, meshRange.low.x, meshRange.high.y, meshRange.low.z);
797
+ extendTransformedRange(i, meshRange.low.x, meshRange.high.y, meshRange.high.z);
798
+ extendTransformedRange(i, meshRange.high.x, meshRange.low.y, meshRange.low.z);
799
+ extendTransformedRange(i, meshRange.high.x, meshRange.low.y, meshRange.high.z);
800
+ extendTransformedRange(i, meshRange.high.x, meshRange.high.y, meshRange.low.z);
801
+ extendTransformedRange(i, meshRange.high.x, meshRange.high.y, meshRange.high.z);
802
+ }
803
+ nodeRange.low.addInPlace(instances.transformCenter);
804
+ nodeRange.high.addInPlace(instances.transformCenter);
805
+ this._computedContentRange.extendRange(nodeRange);
806
+ }
714
807
  }
715
808
  }
716
809
  }
@@ -1448,6 +1541,12 @@ class GltfGraphicsReader extends GltfReader {
1448
1541
  this._featureTable.insert(new core_common_1.Feature(pickableId));
1449
1542
  }
1450
1543
  }
1544
+ get viewFlagOverrides() {
1545
+ return {
1546
+ whiteOnWhiteReversal: false,
1547
+ renderMode: core_common_1.RenderMode.SmoothShade,
1548
+ };
1549
+ }
1451
1550
  async read() {
1452
1551
  await this.resolveResources();
1453
1552
  return this.readGltfAndCreateGraphics(this._isLeaf, this._featureTable, this._contentRange, this._transform);