@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.
- package/CHANGELOG.md +8 -1
- package/lib/cjs/DisplayStyleState.d.ts +3 -0
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +10 -0
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +5 -0
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +6 -0
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/common/gltf/GltfSchema.d.ts +20 -3
- package/lib/cjs/common/gltf/GltfSchema.d.ts.map +1 -1
- package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
- package/lib/cjs/common/imdl/ImdlModel.d.ts +15 -1
- package/lib/cjs/common/imdl/ImdlModel.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ImdlModel.js +11 -3
- package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.d.ts +3 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.js +66 -11
- package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/cjs/render/GraphicBranch.d.ts +10 -0
- package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +2 -0
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +3 -0
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.d.ts +1 -0
- package/lib/cjs/render/webgl/InstancedGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/InstancedGeometry.js +1 -0
- package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +6 -0
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/request/utils.d.ts +18 -0
- package/lib/cjs/request/utils.d.ts.map +1 -0
- package/lib/cjs/request/utils.js +45 -0
- package/lib/cjs/request/utils.js.map +1 -0
- package/lib/cjs/tile/BatchedTileIdMap.d.ts +1 -2
- package/lib/cjs/tile/BatchedTileIdMap.d.ts.map +1 -1
- package/lib/cjs/tile/BatchedTileIdMap.js +3 -3
- package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +4 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +125 -26
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/ImdlDecoder.d.ts +7 -1
- package/lib/cjs/tile/ImdlDecoder.d.ts.map +1 -1
- package/lib/cjs/tile/ImdlDecoder.js.map +1 -1
- package/lib/cjs/tile/ImdlGraphicsCreator.d.ts.map +1 -1
- package/lib/cjs/tile/ImdlGraphicsCreator.js +28 -17
- package/lib/cjs/tile/ImdlGraphicsCreator.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.d.ts +2 -1
- package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
- package/lib/cjs/tile/ImdlReader.js +1 -0
- package/lib/cjs/tile/ImdlReader.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +2 -3
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +31 -0
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +6 -0
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.d.ts +6 -0
- package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +7 -0
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/TileTreeReference.d.ts +2 -0
- package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/TileTreeReference.js +5 -0
- package/lib/cjs/tile/TileTreeReference.js.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.d.ts +6 -2
- package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js +127 -69
- package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +5 -0
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +61 -39
- package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +6 -0
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +47 -7
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.js +1 -15
- package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/cjs/tile/map/WmsUtilities.d.ts +7 -0
- package/lib/cjs/tile/map/WmsUtilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/WmsUtilities.js +22 -0
- package/lib/cjs/tile/map/WmsUtilities.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +2 -16
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/cjs/tools/SelectTool.d.ts +1 -0
- package/lib/cjs/tools/SelectTool.d.ts.map +1 -1
- package/lib/cjs/tools/SelectTool.js +19 -13
- package/lib/cjs/tools/SelectTool.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts +3 -0
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +10 -0
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/Viewport.d.ts +5 -0
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +6 -0
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/gltf/GltfSchema.d.ts +20 -3
- package/lib/esm/common/gltf/GltfSchema.d.ts.map +1 -1
- package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
- package/lib/esm/common/imdl/ImdlModel.d.ts +15 -1
- package/lib/esm/common/imdl/ImdlModel.d.ts.map +1 -1
- package/lib/esm/common/imdl/ImdlModel.js +11 -3
- package/lib/esm/common/imdl/ImdlModel.js.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.d.ts +3 -1
- package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.js +67 -12
- package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/esm/render/GraphicBranch.d.ts +10 -0
- package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.d.ts +2 -0
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +2 -0
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +3 -0
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/InstancedGeometry.d.ts +1 -0
- package/lib/esm/render/webgl/InstancedGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/InstancedGeometry.js +1 -0
- package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +6 -0
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/request/utils.d.ts +18 -0
- package/lib/esm/request/utils.d.ts.map +1 -0
- package/lib/esm/request/utils.js +40 -0
- package/lib/esm/request/utils.js.map +1 -0
- package/lib/esm/tile/BatchedTileIdMap.d.ts +1 -2
- package/lib/esm/tile/BatchedTileIdMap.d.ts.map +1 -1
- package/lib/esm/tile/BatchedTileIdMap.js +3 -3
- package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +4 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +126 -27
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/ImdlDecoder.d.ts +7 -1
- package/lib/esm/tile/ImdlDecoder.d.ts.map +1 -1
- package/lib/esm/tile/ImdlDecoder.js.map +1 -1
- package/lib/esm/tile/ImdlGraphicsCreator.d.ts.map +1 -1
- package/lib/esm/tile/ImdlGraphicsCreator.js +28 -17
- package/lib/esm/tile/ImdlGraphicsCreator.js.map +1 -1
- package/lib/esm/tile/ImdlReader.d.ts +2 -1
- package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
- package/lib/esm/tile/ImdlReader.js +1 -0
- package/lib/esm/tile/ImdlReader.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +2 -3
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +31 -0
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +6 -0
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.d.ts +6 -0
- package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +8 -1
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/TileTreeReference.d.ts +2 -0
- package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/TileTreeReference.js +5 -0
- package/lib/esm/tile/TileTreeReference.js.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.d.ts +6 -2
- package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js +130 -71
- package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +5 -0
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +61 -39
- package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +6 -0
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +48 -8
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js +1 -15
- package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/tile/map/WmsUtilities.d.ts +7 -0
- package/lib/esm/tile/map/WmsUtilities.d.ts.map +1 -1
- package/lib/esm/tile/map/WmsUtilities.js +22 -0
- package/lib/esm/tile/map/WmsUtilities.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +2 -16
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/tools/SelectTool.d.ts +1 -0
- package/lib/esm/tools/SelectTool.d.ts.map +1 -1
- package/lib/esm/tools/SelectTool.js +19 -13
- package/lib/esm/tools/SelectTool.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- 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
|
-
|
|
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),
|
|
368
|
-
|
|
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
|
-
|
|
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],
|
|
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,
|
|
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,
|
|
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.
|
|
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
|
|
712
|
-
|
|
713
|
-
|
|
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);
|