@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
|
@@ -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) {
|
|
@@ -329,18 +336,19 @@ export class GltfReader {
|
|
|
329
336
|
renderGraphic = renderGraphicList[0];
|
|
330
337
|
else
|
|
331
338
|
renderGraphic = this._system.createGraphicList(renderGraphicList);
|
|
332
|
-
const transform = this.getTileTransform(transformToRoot, pseudoRtcBias);
|
|
333
|
-
let range = contentRange;
|
|
334
|
-
const invTransform = transform?.inverse();
|
|
335
|
-
if (invTransform)
|
|
336
|
-
range = invTransform.multiplyRange(contentRange);
|
|
337
339
|
if (featureTable)
|
|
338
|
-
renderGraphic = this._system.createBatch(renderGraphic, PackedFeatureTable.pack(featureTable),
|
|
339
|
-
|
|
340
|
+
renderGraphic = this._system.createBatch(renderGraphic, PackedFeatureTable.pack(featureTable), contentRange);
|
|
341
|
+
const transform = this.getTileTransform(transformToRoot, pseudoRtcBias);
|
|
342
|
+
const viewFlagOverrides = this.viewFlagOverrides;
|
|
343
|
+
if (transform || viewFlagOverrides) {
|
|
340
344
|
const branch = new GraphicBranch(true);
|
|
345
|
+
if (viewFlagOverrides)
|
|
346
|
+
branch.setViewFlagOverrides(viewFlagOverrides);
|
|
341
347
|
branch.add(renderGraphic);
|
|
342
|
-
renderGraphic = this._system.createBranch(branch, transform);
|
|
348
|
+
renderGraphic = this._system.createBranch(branch, transform ?? Transform.createIdentity());
|
|
343
349
|
}
|
|
350
|
+
const invTransform = transform?.inverse();
|
|
351
|
+
const range = invTransform ? invTransform.multiplyRange(contentRange) : contentRange;
|
|
344
352
|
return {
|
|
345
353
|
readStatus,
|
|
346
354
|
isLeaf,
|
|
@@ -387,12 +395,76 @@ export class GltfReader {
|
|
|
387
395
|
mesh.normals.push(new OctEncodedNormal(normal));
|
|
388
396
|
return mesh.getGraphics(this._system, instances);
|
|
389
397
|
}
|
|
390
|
-
|
|
398
|
+
readInstanceAttributes(node, featureTable) {
|
|
399
|
+
const ext = node.extensions?.EXT_mesh_gpu_instancing;
|
|
400
|
+
if (!ext || !ext.attributes) {
|
|
401
|
+
return undefined;
|
|
402
|
+
}
|
|
403
|
+
const translationsView = this.getBufferView(ext.attributes, "TRANSLATION");
|
|
404
|
+
const translations = translationsView?.toBufferData(GltfDataType.Float);
|
|
405
|
+
const rotations = this.getBufferView(ext.attributes, "ROTATION")?.toBufferData(GltfDataType.Float);
|
|
406
|
+
const scales = this.getBufferView(ext.attributes, "SCALE")?.toBufferData(GltfDataType.Float);
|
|
407
|
+
// All attributes must specify the same count, count must be greater than zero, and at least one attribute must be specified.
|
|
408
|
+
const count = translations?.count ?? rotations?.count ?? scales?.count;
|
|
409
|
+
if (!count || (rotations && rotations.count !== count) || (scales && scales.count !== count)) {
|
|
410
|
+
return undefined;
|
|
411
|
+
}
|
|
412
|
+
const transformCenter = new Point3d();
|
|
413
|
+
const trMin = translationsView?.accessor.min;
|
|
414
|
+
const trMax = translationsView?.accessor.max;
|
|
415
|
+
if (trMin && trMax) {
|
|
416
|
+
const half = (idx) => trMin[idx] + (trMax[idx] - trMin[idx]) / 2;
|
|
417
|
+
transformCenter.set(half(0), half(1), half(2));
|
|
418
|
+
}
|
|
419
|
+
const getTranslation = (index) => {
|
|
420
|
+
if (!translations) {
|
|
421
|
+
return undefined;
|
|
422
|
+
}
|
|
423
|
+
index *= 3;
|
|
424
|
+
return [
|
|
425
|
+
translations.buffer[index + 0] - transformCenter.x,
|
|
426
|
+
translations.buffer[index + 1] - transformCenter.y,
|
|
427
|
+
translations.buffer[index + 2] - transformCenter.z,
|
|
428
|
+
];
|
|
429
|
+
};
|
|
430
|
+
const getRotation = (index) => {
|
|
431
|
+
index *= 4;
|
|
432
|
+
return rotations ? [rotations.buffer[index], rotations.buffer[index + 1], rotations.buffer[index + 2], rotations.buffer[index + 3]] : undefined;
|
|
433
|
+
};
|
|
434
|
+
const getScale = (index) => {
|
|
435
|
+
index *= 3;
|
|
436
|
+
return scales ? [scales.buffer[index], scales.buffer[index + 1], scales.buffer[index + 2]] : undefined;
|
|
437
|
+
};
|
|
438
|
+
const transforms = new Float32Array(3 * 4 * count);
|
|
439
|
+
const transform = Transform.createIdentity();
|
|
440
|
+
for (let i = 0; i < count; i++) {
|
|
441
|
+
const tf = trsMatrix(getTranslation(i), getRotation(i), getScale(i), transform);
|
|
442
|
+
const idx = i * 3 * 4;
|
|
443
|
+
transforms[idx + 0] = tf.matrix.coffs[0];
|
|
444
|
+
transforms[idx + 1] = tf.matrix.coffs[1];
|
|
445
|
+
transforms[idx + 2] = tf.matrix.coffs[2];
|
|
446
|
+
transforms[idx + 3] = tf.origin.x;
|
|
447
|
+
transforms[idx + 4] = tf.matrix.coffs[3];
|
|
448
|
+
transforms[idx + 5] = tf.matrix.coffs[4];
|
|
449
|
+
transforms[idx + 6] = tf.matrix.coffs[5];
|
|
450
|
+
transforms[idx + 7] = tf.origin.y;
|
|
451
|
+
transforms[idx + 8] = tf.matrix.coffs[6];
|
|
452
|
+
transforms[idx + 9] = tf.matrix.coffs[7];
|
|
453
|
+
transforms[idx + 10] = tf.matrix.coffs[8];
|
|
454
|
+
transforms[idx + 11] = tf.origin.z;
|
|
455
|
+
}
|
|
456
|
+
// ###TODO? The extension currently provides no way of specifying per-instance feature Ids.
|
|
457
|
+
// For now, assume that if the feature table contains exactly one feature, all the instances belong to that feature.
|
|
458
|
+
const featureIds = featureTable && featureTable.isUniform ? new Uint8Array(3 * count) : undefined;
|
|
459
|
+
return { count, transforms, transformCenter, featureIds };
|
|
460
|
+
}
|
|
461
|
+
readNodeAndCreateGraphics(renderGraphicList, node, featureTable, transformStack, batchInstances, pseudoRtcBias) {
|
|
391
462
|
if (undefined === node)
|
|
392
463
|
return TileReadStatus.InvalidTileData;
|
|
393
464
|
// IMPORTANT: Do not return without popping this node from the stack.
|
|
394
465
|
transformStack.push(node);
|
|
395
466
|
const thisTransform = transformStack.transform;
|
|
467
|
+
const nodeInstances = !batchInstances && undefined !== node.mesh ? this.readInstanceAttributes(node, featureTable) : undefined;
|
|
396
468
|
/**
|
|
397
469
|
* This is a workaround for tiles generated by
|
|
398
470
|
* context capture which have a large offset from the tileset origin that exceeds the
|
|
@@ -407,16 +479,16 @@ export class GltfReader {
|
|
|
407
479
|
for (const meshKey of getGltfNodeMeshIds(node)) {
|
|
408
480
|
const nodeMesh = this._meshes[meshKey];
|
|
409
481
|
if (nodeMesh?.primitives) {
|
|
410
|
-
const meshes = this.readMeshPrimitives(node, featureTable, thisTransform, thisBias);
|
|
482
|
+
const meshes = this.readMeshPrimitives(node, featureTable, thisTransform, thisBias, nodeInstances);
|
|
411
483
|
let renderGraphic;
|
|
412
484
|
if (0 !== meshes.length) {
|
|
413
485
|
if (1 === meshes.length) {
|
|
414
|
-
renderGraphic = this.graphicFromMeshData(meshes[0],
|
|
486
|
+
renderGraphic = this.graphicFromMeshData(meshes[0], batchInstances ?? nodeInstances);
|
|
415
487
|
}
|
|
416
488
|
else {
|
|
417
489
|
const thisList = [];
|
|
418
490
|
for (const mesh of meshes) {
|
|
419
|
-
renderGraphic = this.graphicFromMeshData(mesh,
|
|
491
|
+
renderGraphic = this.graphicFromMeshData(mesh, batchInstances ?? nodeInstances);
|
|
420
492
|
if (undefined !== renderGraphic)
|
|
421
493
|
thisList.push(renderGraphic);
|
|
422
494
|
}
|
|
@@ -438,7 +510,7 @@ export class GltfReader {
|
|
|
438
510
|
for (const childId of node.children) {
|
|
439
511
|
const child = this._nodes[childId];
|
|
440
512
|
if (child)
|
|
441
|
-
this.readNodeAndCreateGraphics(renderGraphicList, child, featureTable, transformStack,
|
|
513
|
+
this.readNodeAndCreateGraphics(renderGraphicList, child, featureTable, transformStack, batchInstances ?? nodeInstances);
|
|
442
514
|
}
|
|
443
515
|
}
|
|
444
516
|
transformStack.pop();
|
|
@@ -667,9 +739,9 @@ export class GltfReader {
|
|
|
667
739
|
// DisplayParams doesn't want a separate texture mapping if the material already has one.
|
|
668
740
|
textureMapping = undefined;
|
|
669
741
|
}
|
|
670
|
-
return new DisplayParams(DisplayParams.Type.Mesh, color, color, 1, LinePixels.Solid, FillFlags.
|
|
742
|
+
return new DisplayParams(DisplayParams.Type.Mesh, color, color, 1, LinePixels.Solid, FillFlags.None, renderMaterial, undefined, hasBakedLighting, textureMapping);
|
|
671
743
|
}
|
|
672
|
-
readMeshPrimitives(node, featureTable, thisTransform, thisBias) {
|
|
744
|
+
readMeshPrimitives(node, featureTable, thisTransform, thisBias, instances) {
|
|
673
745
|
const meshes = [];
|
|
674
746
|
for (const meshKey of getGltfNodeMeshIds(node)) {
|
|
675
747
|
const nodeMesh = this._meshes[meshKey];
|
|
@@ -679,9 +751,30 @@ export class GltfReader {
|
|
|
679
751
|
if (mesh) {
|
|
680
752
|
meshes.push(mesh);
|
|
681
753
|
if (this._computedContentRange && mesh.pointRange) {
|
|
682
|
-
const
|
|
683
|
-
|
|
684
|
-
|
|
754
|
+
const meshRange = thisTransform ? thisTransform.multiplyRange(mesh.pointRange) : mesh.pointRange;
|
|
755
|
+
if (!instances) {
|
|
756
|
+
this._computedContentRange.extendRange(meshRange);
|
|
757
|
+
}
|
|
758
|
+
else {
|
|
759
|
+
const tfs = instances.transforms;
|
|
760
|
+
const nodeRange = new Range3d();
|
|
761
|
+
const extendTransformedRange = (i, x, y, z) => {
|
|
762
|
+
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);
|
|
763
|
+
};
|
|
764
|
+
for (let i = 0; i < tfs.length; i += 3 * 4) {
|
|
765
|
+
extendTransformedRange(i, meshRange.low.x, meshRange.low.y, meshRange.low.z);
|
|
766
|
+
extendTransformedRange(i, meshRange.low.x, meshRange.low.y, meshRange.high.z);
|
|
767
|
+
extendTransformedRange(i, meshRange.low.x, meshRange.high.y, meshRange.low.z);
|
|
768
|
+
extendTransformedRange(i, meshRange.low.x, meshRange.high.y, meshRange.high.z);
|
|
769
|
+
extendTransformedRange(i, meshRange.high.x, meshRange.low.y, meshRange.low.z);
|
|
770
|
+
extendTransformedRange(i, meshRange.high.x, meshRange.low.y, meshRange.high.z);
|
|
771
|
+
extendTransformedRange(i, meshRange.high.x, meshRange.high.y, meshRange.low.z);
|
|
772
|
+
extendTransformedRange(i, meshRange.high.x, meshRange.high.y, meshRange.high.z);
|
|
773
|
+
}
|
|
774
|
+
nodeRange.low.addInPlace(instances.transformCenter);
|
|
775
|
+
nodeRange.high.addInPlace(instances.transformCenter);
|
|
776
|
+
this._computedContentRange.extendRange(nodeRange);
|
|
777
|
+
}
|
|
685
778
|
}
|
|
686
779
|
}
|
|
687
780
|
}
|
|
@@ -1416,6 +1509,12 @@ export class GltfGraphicsReader extends GltfReader {
|
|
|
1416
1509
|
this._featureTable.insert(new Feature(pickableId));
|
|
1417
1510
|
}
|
|
1418
1511
|
}
|
|
1512
|
+
get viewFlagOverrides() {
|
|
1513
|
+
return {
|
|
1514
|
+
whiteOnWhiteReversal: false,
|
|
1515
|
+
renderMode: RenderMode.SmoothShade,
|
|
1516
|
+
};
|
|
1517
|
+
}
|
|
1419
1518
|
async read() {
|
|
1420
1519
|
await this.resolveResources();
|
|
1421
1520
|
return this.readGltfAndCreateGraphics(this._isLeaf, this._featureTable, this._contentRange, this._transform);
|