@itwin/core-frontend 4.4.0-dev.8 → 4.4.0
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 +40 -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 +126 -21
- 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 +127 -22
- 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
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { assert, ByteStream, compareBooleans, compareNumbers, compareStrings, Dictionary, JsonUtils, Logger, utf8ToString, } from "@itwin/core-bentley";
|
|
9
9
|
import { Angle, IndexedPolyface, Matrix3d, Point2d, Point3d, Point4d, Range2d, Range3d, Transform, Vector3d, } from "@itwin/core-geometry";
|
|
10
|
-
import { BatchType, ColorDef, Feature, FeatureIndex, FeatureIndexType, FeatureTable, FillFlags, GlbHeader, ImageSource, LinePixels, MeshEdge, MeshEdges, MeshPolyline, OctEncodedNormal, PackedFeatureTable, QParams2d, QParams3d, QPoint2dList, QPoint3dList, Quantization, RenderTexture, TextureMapping, TextureTransparency, TileFormat, TileReadStatus, } from "@itwin/core-common";
|
|
10
|
+
import { BatchType, ColorDef, Feature, FeatureIndex, FeatureIndexType, FeatureTable, FillFlags, GlbHeader, ImageSource, LinePixels, MeshEdge, MeshEdges, MeshPolyline, OctEncodedNormal, PackedFeatureTable, QParams2d, QParams3d, QPoint2dList, QPoint3dList, Quantization, RenderMode, RenderTexture, TextureMapping, TextureTransparency, TileFormat, TileReadStatus, } from "@itwin/core-common";
|
|
11
11
|
import { IModelApp } from "../IModelApp";
|
|
12
12
|
import { GraphicBranch } from "../render/GraphicBranch";
|
|
13
13
|
import { RealityMeshParams } from "../render/RealityMeshParams";
|
|
@@ -206,6 +206,17 @@ function colorFromMaterial(material, isTransparent) {
|
|
|
206
206
|
color = color.withTransparency(0);
|
|
207
207
|
return color;
|
|
208
208
|
}
|
|
209
|
+
function trsMatrix(translation, rotation, scale, result) {
|
|
210
|
+
// SPEC: To compose the local transformation matrix, TRS properties MUST be converted to matrices and postmultiplied in the T * R * S order;
|
|
211
|
+
// first the scale is applied to the vertices, then the rotation, and then the translation.
|
|
212
|
+
const scaleTf = Transform.createRefs(undefined, scale ? Matrix3d.createScale(scale[0], scale[1], scale[2]) : Matrix3d.identity);
|
|
213
|
+
const rotTf = Transform.createRefs(undefined, rotation ? Matrix3d.createFromQuaternion(Point4d.create(rotation[0], rotation[1], rotation[2], rotation[3])) : Matrix3d.identity);
|
|
214
|
+
rotTf.matrix.transposeInPlace(); // See comment on Matrix3d.createFromQuaternion
|
|
215
|
+
const transTf = Transform.createTranslation(translation ? new Point3d(translation[0], translation[1], translation[2]) : Point3d.createZero());
|
|
216
|
+
const tf = scaleTf.multiplyTransformTransform(rotTf, result);
|
|
217
|
+
transTf.multiplyTransformTransform(tf, tf);
|
|
218
|
+
return tf;
|
|
219
|
+
}
|
|
209
220
|
class TransformStack {
|
|
210
221
|
constructor(transform) {
|
|
211
222
|
this._stack = [];
|
|
@@ -226,14 +237,7 @@ class TransformStack {
|
|
|
226
237
|
nodeTransform = Transform.createOriginAndMatrix(origin, matrix);
|
|
227
238
|
}
|
|
228
239
|
else if (node.rotation || node.scale || node.translation) {
|
|
229
|
-
|
|
230
|
-
// first the scale is applied to the vertices, then the rotation, and then the translation.
|
|
231
|
-
const scale = Transform.createRefs(undefined, node.scale ? Matrix3d.createScale(node.scale[0], node.scale[1], node.scale[2]) : Matrix3d.identity);
|
|
232
|
-
const rot = Transform.createRefs(undefined, node.rotation ? Matrix3d.createFromQuaternion(Point4d.create(node.rotation[0], node.rotation[1], node.rotation[2], node.rotation[3])) : Matrix3d.identity);
|
|
233
|
-
rot.matrix.transposeInPlace(); // See comment on Matrix3d.createFromQuaternion
|
|
234
|
-
const trans = Transform.createTranslation(node.translation ? new Point3d(node.translation[0], node.translation[1], node.translation[2]) : Point3d.createZero());
|
|
235
|
-
nodeTransform = scale.multiplyTransformTransform(rot);
|
|
236
|
-
trans.multiplyTransformTransform(nodeTransform, nodeTransform);
|
|
240
|
+
nodeTransform = trsMatrix(node.translation, node.rotation, node.scale);
|
|
237
241
|
}
|
|
238
242
|
const top = this.transform;
|
|
239
243
|
if (!top)
|
|
@@ -286,6 +290,9 @@ export class GltfReader {
|
|
|
286
290
|
traverseScene() {
|
|
287
291
|
return this.traverseNodes(this._sceneNodes);
|
|
288
292
|
}
|
|
293
|
+
get viewFlagOverrides() {
|
|
294
|
+
return undefined;
|
|
295
|
+
}
|
|
289
296
|
getTileTransform(transformToRoot, pseudoRtcBias) {
|
|
290
297
|
let transform;
|
|
291
298
|
if (this._returnToCenter || pseudoRtcBias || this._yAxisUp || transformToRoot) {
|
|
@@ -330,16 +337,23 @@ export class GltfReader {
|
|
|
330
337
|
else
|
|
331
338
|
renderGraphic = this._system.createGraphicList(renderGraphicList);
|
|
332
339
|
const transform = this.getTileTransform(transformToRoot, pseudoRtcBias);
|
|
340
|
+
// Compute range in tileset/world space.
|
|
333
341
|
let range = contentRange;
|
|
334
342
|
const invTransform = transform?.inverse();
|
|
335
343
|
if (invTransform)
|
|
336
344
|
range = invTransform.multiplyRange(contentRange);
|
|
345
|
+
// The batch range needs to be in tile coordinate space.
|
|
346
|
+
// If we computed the content range ourselves, it's already in tile space.
|
|
347
|
+
// If the content range was supplied by the caller, it's in tileset space and needs to be transformed to tile space.
|
|
337
348
|
if (featureTable)
|
|
338
|
-
renderGraphic = this._system.createBatch(renderGraphic, PackedFeatureTable.pack(featureTable), range);
|
|
339
|
-
|
|
349
|
+
renderGraphic = this._system.createBatch(renderGraphic, PackedFeatureTable.pack(featureTable), this._computedContentRange ? contentRange : range);
|
|
350
|
+
const viewFlagOverrides = this.viewFlagOverrides;
|
|
351
|
+
if (transform || viewFlagOverrides) {
|
|
340
352
|
const branch = new GraphicBranch(true);
|
|
353
|
+
if (viewFlagOverrides)
|
|
354
|
+
branch.setViewFlagOverrides(viewFlagOverrides);
|
|
341
355
|
branch.add(renderGraphic);
|
|
342
|
-
renderGraphic = this._system.createBranch(branch, transform);
|
|
356
|
+
renderGraphic = this._system.createBranch(branch, transform ?? Transform.createIdentity());
|
|
343
357
|
}
|
|
344
358
|
return {
|
|
345
359
|
readStatus,
|
|
@@ -387,12 +401,76 @@ export class GltfReader {
|
|
|
387
401
|
mesh.normals.push(new OctEncodedNormal(normal));
|
|
388
402
|
return mesh.getGraphics(this._system, instances);
|
|
389
403
|
}
|
|
390
|
-
|
|
404
|
+
readInstanceAttributes(node, featureTable) {
|
|
405
|
+
const ext = node.extensions?.EXT_mesh_gpu_instancing;
|
|
406
|
+
if (!ext || !ext.attributes) {
|
|
407
|
+
return undefined;
|
|
408
|
+
}
|
|
409
|
+
const translationsView = this.getBufferView(ext.attributes, "TRANSLATION");
|
|
410
|
+
const translations = translationsView?.toBufferData(GltfDataType.Float);
|
|
411
|
+
const rotations = this.getBufferView(ext.attributes, "ROTATION")?.toBufferData(GltfDataType.Float);
|
|
412
|
+
const scales = this.getBufferView(ext.attributes, "SCALE")?.toBufferData(GltfDataType.Float);
|
|
413
|
+
// All attributes must specify the same count, count must be greater than zero, and at least one attribute must be specified.
|
|
414
|
+
const count = translations?.count ?? rotations?.count ?? scales?.count;
|
|
415
|
+
if (!count || (rotations && rotations.count !== count) || (scales && scales.count !== count)) {
|
|
416
|
+
return undefined;
|
|
417
|
+
}
|
|
418
|
+
const transformCenter = new Point3d();
|
|
419
|
+
const trMin = translationsView?.accessor.min;
|
|
420
|
+
const trMax = translationsView?.accessor.max;
|
|
421
|
+
if (trMin && trMax) {
|
|
422
|
+
const half = (idx) => trMin[idx] + (trMax[idx] - trMin[idx]) / 2;
|
|
423
|
+
transformCenter.set(half(0), half(1), half(2));
|
|
424
|
+
}
|
|
425
|
+
const getTranslation = (index) => {
|
|
426
|
+
if (!translations) {
|
|
427
|
+
return undefined;
|
|
428
|
+
}
|
|
429
|
+
index *= 3;
|
|
430
|
+
return [
|
|
431
|
+
translations.buffer[index + 0] - transformCenter.x,
|
|
432
|
+
translations.buffer[index + 1] - transformCenter.y,
|
|
433
|
+
translations.buffer[index + 2] - transformCenter.z,
|
|
434
|
+
];
|
|
435
|
+
};
|
|
436
|
+
const getRotation = (index) => {
|
|
437
|
+
index *= 4;
|
|
438
|
+
return rotations ? [rotations.buffer[index], rotations.buffer[index + 1], rotations.buffer[index + 2], rotations.buffer[index + 3]] : undefined;
|
|
439
|
+
};
|
|
440
|
+
const getScale = (index) => {
|
|
441
|
+
index *= 3;
|
|
442
|
+
return scales ? [scales.buffer[index], scales.buffer[index + 1], scales.buffer[index + 2]] : undefined;
|
|
443
|
+
};
|
|
444
|
+
const transforms = new Float32Array(3 * 4 * count);
|
|
445
|
+
const transform = Transform.createIdentity();
|
|
446
|
+
for (let i = 0; i < count; i++) {
|
|
447
|
+
const tf = trsMatrix(getTranslation(i), getRotation(i), getScale(i), transform);
|
|
448
|
+
const idx = i * 3 * 4;
|
|
449
|
+
transforms[idx + 0] = tf.matrix.coffs[0];
|
|
450
|
+
transforms[idx + 1] = tf.matrix.coffs[1];
|
|
451
|
+
transforms[idx + 2] = tf.matrix.coffs[2];
|
|
452
|
+
transforms[idx + 3] = tf.origin.x;
|
|
453
|
+
transforms[idx + 4] = tf.matrix.coffs[3];
|
|
454
|
+
transforms[idx + 5] = tf.matrix.coffs[4];
|
|
455
|
+
transforms[idx + 6] = tf.matrix.coffs[5];
|
|
456
|
+
transforms[idx + 7] = tf.origin.y;
|
|
457
|
+
transforms[idx + 8] = tf.matrix.coffs[6];
|
|
458
|
+
transforms[idx + 9] = tf.matrix.coffs[7];
|
|
459
|
+
transforms[idx + 10] = tf.matrix.coffs[8];
|
|
460
|
+
transforms[idx + 11] = tf.origin.z;
|
|
461
|
+
}
|
|
462
|
+
// ###TODO? The extension currently provides no way of specifying per-instance feature Ids.
|
|
463
|
+
// For now, assume that if the feature table contains exactly one feature, all the instances belong to that feature.
|
|
464
|
+
const featureIds = featureTable && featureTable.isUniform ? new Uint8Array(3 * count) : undefined;
|
|
465
|
+
return { count, transforms, transformCenter, featureIds };
|
|
466
|
+
}
|
|
467
|
+
readNodeAndCreateGraphics(renderGraphicList, node, featureTable, transformStack, batchInstances, pseudoRtcBias) {
|
|
391
468
|
if (undefined === node)
|
|
392
469
|
return TileReadStatus.InvalidTileData;
|
|
393
470
|
// IMPORTANT: Do not return without popping this node from the stack.
|
|
394
471
|
transformStack.push(node);
|
|
395
472
|
const thisTransform = transformStack.transform;
|
|
473
|
+
const nodeInstances = !batchInstances && undefined !== node.mesh ? this.readInstanceAttributes(node, featureTable) : undefined;
|
|
396
474
|
/**
|
|
397
475
|
* This is a workaround for tiles generated by
|
|
398
476
|
* context capture which have a large offset from the tileset origin that exceeds the
|
|
@@ -407,16 +485,16 @@ export class GltfReader {
|
|
|
407
485
|
for (const meshKey of getGltfNodeMeshIds(node)) {
|
|
408
486
|
const nodeMesh = this._meshes[meshKey];
|
|
409
487
|
if (nodeMesh?.primitives) {
|
|
410
|
-
const meshes = this.readMeshPrimitives(node, featureTable, thisTransform, thisBias);
|
|
488
|
+
const meshes = this.readMeshPrimitives(node, featureTable, thisTransform, thisBias, nodeInstances);
|
|
411
489
|
let renderGraphic;
|
|
412
490
|
if (0 !== meshes.length) {
|
|
413
491
|
if (1 === meshes.length) {
|
|
414
|
-
renderGraphic = this.graphicFromMeshData(meshes[0],
|
|
492
|
+
renderGraphic = this.graphicFromMeshData(meshes[0], batchInstances ?? nodeInstances);
|
|
415
493
|
}
|
|
416
494
|
else {
|
|
417
495
|
const thisList = [];
|
|
418
496
|
for (const mesh of meshes) {
|
|
419
|
-
renderGraphic = this.graphicFromMeshData(mesh,
|
|
497
|
+
renderGraphic = this.graphicFromMeshData(mesh, batchInstances ?? nodeInstances);
|
|
420
498
|
if (undefined !== renderGraphic)
|
|
421
499
|
thisList.push(renderGraphic);
|
|
422
500
|
}
|
|
@@ -438,7 +516,7 @@ export class GltfReader {
|
|
|
438
516
|
for (const childId of node.children) {
|
|
439
517
|
const child = this._nodes[childId];
|
|
440
518
|
if (child)
|
|
441
|
-
this.readNodeAndCreateGraphics(renderGraphicList, child, featureTable, transformStack,
|
|
519
|
+
this.readNodeAndCreateGraphics(renderGraphicList, child, featureTable, transformStack, batchInstances ?? nodeInstances);
|
|
442
520
|
}
|
|
443
521
|
}
|
|
444
522
|
transformStack.pop();
|
|
@@ -667,9 +745,9 @@ export class GltfReader {
|
|
|
667
745
|
// DisplayParams doesn't want a separate texture mapping if the material already has one.
|
|
668
746
|
textureMapping = undefined;
|
|
669
747
|
}
|
|
670
|
-
return new DisplayParams(DisplayParams.Type.Mesh, color, color, 1, LinePixels.Solid, FillFlags.
|
|
748
|
+
return new DisplayParams(DisplayParams.Type.Mesh, color, color, 1, LinePixels.Solid, FillFlags.None, renderMaterial, undefined, hasBakedLighting, textureMapping);
|
|
671
749
|
}
|
|
672
|
-
readMeshPrimitives(node, featureTable, thisTransform, thisBias) {
|
|
750
|
+
readMeshPrimitives(node, featureTable, thisTransform, thisBias, instances) {
|
|
673
751
|
const meshes = [];
|
|
674
752
|
for (const meshKey of getGltfNodeMeshIds(node)) {
|
|
675
753
|
const nodeMesh = this._meshes[meshKey];
|
|
@@ -679,9 +757,30 @@ export class GltfReader {
|
|
|
679
757
|
if (mesh) {
|
|
680
758
|
meshes.push(mesh);
|
|
681
759
|
if (this._computedContentRange && mesh.pointRange) {
|
|
682
|
-
const
|
|
683
|
-
|
|
684
|
-
|
|
760
|
+
const meshRange = thisTransform ? thisTransform.multiplyRange(mesh.pointRange) : mesh.pointRange;
|
|
761
|
+
if (!instances) {
|
|
762
|
+
this._computedContentRange.extendRange(meshRange);
|
|
763
|
+
}
|
|
764
|
+
else {
|
|
765
|
+
const tfs = instances.transforms;
|
|
766
|
+
const nodeRange = new Range3d();
|
|
767
|
+
const extendTransformedRange = (i, x, y, z) => {
|
|
768
|
+
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);
|
|
769
|
+
};
|
|
770
|
+
for (let i = 0; i < tfs.length; i += 3 * 4) {
|
|
771
|
+
extendTransformedRange(i, meshRange.low.x, meshRange.low.y, meshRange.low.z);
|
|
772
|
+
extendTransformedRange(i, meshRange.low.x, meshRange.low.y, meshRange.high.z);
|
|
773
|
+
extendTransformedRange(i, meshRange.low.x, meshRange.high.y, meshRange.low.z);
|
|
774
|
+
extendTransformedRange(i, meshRange.low.x, meshRange.high.y, meshRange.high.z);
|
|
775
|
+
extendTransformedRange(i, meshRange.high.x, meshRange.low.y, meshRange.low.z);
|
|
776
|
+
extendTransformedRange(i, meshRange.high.x, meshRange.low.y, meshRange.high.z);
|
|
777
|
+
extendTransformedRange(i, meshRange.high.x, meshRange.high.y, meshRange.low.z);
|
|
778
|
+
extendTransformedRange(i, meshRange.high.x, meshRange.high.y, meshRange.high.z);
|
|
779
|
+
}
|
|
780
|
+
nodeRange.low.addInPlace(instances.transformCenter);
|
|
781
|
+
nodeRange.high.addInPlace(instances.transformCenter);
|
|
782
|
+
this._computedContentRange.extendRange(nodeRange);
|
|
783
|
+
}
|
|
685
784
|
}
|
|
686
785
|
}
|
|
687
786
|
}
|
|
@@ -1416,6 +1515,12 @@ export class GltfGraphicsReader extends GltfReader {
|
|
|
1416
1515
|
this._featureTable.insert(new Feature(pickableId));
|
|
1417
1516
|
}
|
|
1418
1517
|
}
|
|
1518
|
+
get viewFlagOverrides() {
|
|
1519
|
+
return {
|
|
1520
|
+
whiteOnWhiteReversal: false,
|
|
1521
|
+
renderMode: RenderMode.SmoothShade,
|
|
1522
|
+
};
|
|
1523
|
+
}
|
|
1419
1524
|
async read() {
|
|
1420
1525
|
await this.resolveResources();
|
|
1421
1526
|
return this.readGltfAndCreateGraphics(this._isLeaf, this._featureTable, this._contentRange, this._transform);
|