@itwin/core-frontend 5.0.0-dev.99 → 5.1.0-dev.1
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 +6 -1
- package/lib/cjs/AccuDraw.d.ts.map +1 -1
- package/lib/cjs/AccuDraw.js +20 -41
- package/lib/cjs/AccuDraw.js.map +1 -1
- package/lib/cjs/AccuSnap.d.ts +1 -0
- package/lib/cjs/AccuSnap.d.ts.map +1 -1
- package/lib/cjs/AccuSnap.js +69 -1
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts +1 -1
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/CatalogConnection.d.ts +71 -0
- package/lib/cjs/CatalogConnection.d.ts.map +1 -0
- package/lib/cjs/CatalogConnection.js +95 -0
- package/lib/cjs/CatalogConnection.js.map +1 -0
- package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
- package/lib/cjs/ElementLocateManager.js +5 -2
- package/lib/cjs/ElementLocateManager.js.map +1 -1
- package/lib/cjs/HitDetail.d.ts +29 -2
- package/lib/cjs/HitDetail.d.ts.map +1 -1
- package/lib/cjs/HitDetail.js +14 -0
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IpcApp.d.ts +1 -1
- package/lib/cjs/IpcApp.d.ts.map +1 -1
- package/lib/cjs/IpcApp.js.map +1 -1
- package/lib/cjs/ModelState.d.ts.map +1 -1
- package/lib/cjs/ModelState.js +7 -5
- package/lib/cjs/ModelState.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts +2 -1
- package/lib/cjs/NativeApp.d.ts.map +1 -1
- package/lib/cjs/NativeApp.js +1 -0
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +1 -0
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/core-frontend.d.ts +1 -0
- package/lib/cjs/core-frontend.d.ts.map +1 -1
- package/lib/cjs/core-frontend.js +1 -0
- package/lib/cjs/core-frontend.js.map +1 -1
- package/lib/cjs/internal/cross-package.d.ts +1 -1
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +3 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts +2 -0
- package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js +7 -0
- package/lib/cjs/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.d.ts +0 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/MapLayerParams.js +11 -20
- package/lib/cjs/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts +9 -0
- package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SceneCompositor.js +86 -11
- package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderBuilder.d.ts +4 -3
- package/lib/cjs/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/ShaderBuilder.js +3 -3
- package/lib/cjs/internal/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js +2 -2
- package/lib/cjs/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/internal/render/webgl/SurfaceGeometry.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/SurfaceGeometry.js +20 -8
- package/lib/cjs/internal/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Atmosphere.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.js +2 -1
- package/lib/cjs/internal/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.js +31 -1
- package/lib/cjs/internal/render/webgl/glsl/Contours.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Fragment.js +7 -2
- package/lib/cjs/internal/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js +1 -1
- package/lib/cjs/internal/render/webgl/glsl/Surface.js +1 -1
- package/lib/cjs/internal/tile/GraphicsCollector.d.ts +1 -0
- package/lib/cjs/internal/tile/GraphicsCollector.d.ts.map +1 -1
- package/lib/cjs/internal/tile/GraphicsCollector.js +1 -0
- package/lib/cjs/internal/tile/GraphicsCollector.js.map +1 -1
- package/lib/cjs/internal/tile/IModelTile.d.ts.map +1 -1
- package/lib/cjs/internal/tile/IModelTile.js +5 -0
- package/lib/cjs/internal/tile/IModelTile.js.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.d.ts +4 -1
- package/lib/cjs/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.js +5 -0
- package/lib/cjs/internal/tile/IModelTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/ImdlDecoder.d.ts +2 -0
- package/lib/cjs/internal/tile/ImdlDecoder.d.ts.map +1 -1
- package/lib/cjs/internal/tile/ImdlDecoder.js.map +1 -1
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.d.ts +2 -2
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.d.ts.map +1 -1
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.js +2 -1
- package/lib/cjs/internal/tile/ImdlGraphicsCreator.js.map +1 -1
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeHandler.d.ts +3 -3
- package/lib/cjs/internal/tile/LayerTileTreeHandler.d.ts.map +1 -0
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeHandler.js +3 -2
- package/lib/cjs/internal/tile/LayerTileTreeHandler.js.map +1 -0
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeReferenceHandler.d.ts +7 -5
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -0
- package/lib/cjs/{tile → internal/tile}/LayerTileTreeReferenceHandler.js +29 -4
- package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -0
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts +9 -4
- package/lib/cjs/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/PrimaryTileTree.js +30 -8
- package/lib/cjs/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts +0 -2
- package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/RealityModelTileTree.js +2 -21
- package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/render/Pixel.d.ts +13 -2
- package/lib/cjs/render/Pixel.d.ts.map +1 -1
- package/lib/cjs/render/Pixel.js +20 -8
- package/lib/cjs/render/Pixel.js.map +1 -1
- package/lib/cjs/tile/ImdlReader.d.ts +3 -2
- 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/internal.d.ts +3 -2
- package/lib/cjs/tile/internal.d.ts.map +1 -1
- package/lib/cjs/tile/internal.js +3 -2
- package/lib/cjs/tile/internal.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +2 -3
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +2 -4
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.d.ts +0 -12
- package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.js +2 -60
- package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts +0 -1
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.js +15 -19
- package/lib/cjs/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/cjs/tools/ViewTool.d.ts +25 -16
- package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
- package/lib/cjs/tools/ViewTool.js +29 -40
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuDraw.d.ts.map +1 -1
- package/lib/esm/AccuDraw.js +21 -42
- package/lib/esm/AccuDraw.js.map +1 -1
- package/lib/esm/AccuSnap.d.ts +1 -0
- package/lib/esm/AccuSnap.d.ts.map +1 -1
- package/lib/esm/AccuSnap.js +69 -1
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/BriefcaseConnection.d.ts +1 -1
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/CatalogConnection.d.ts +71 -0
- package/lib/esm/CatalogConnection.d.ts.map +1 -0
- package/lib/esm/CatalogConnection.js +92 -0
- package/lib/esm/CatalogConnection.js.map +1 -0
- package/lib/esm/ElementLocateManager.d.ts.map +1 -1
- package/lib/esm/ElementLocateManager.js +5 -2
- package/lib/esm/ElementLocateManager.js.map +1 -1
- package/lib/esm/HitDetail.d.ts +29 -2
- package/lib/esm/HitDetail.d.ts.map +1 -1
- package/lib/esm/HitDetail.js +14 -0
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IpcApp.d.ts +1 -1
- package/lib/esm/IpcApp.d.ts.map +1 -1
- package/lib/esm/IpcApp.js.map +1 -1
- package/lib/esm/ModelState.d.ts.map +1 -1
- package/lib/esm/ModelState.js +7 -5
- package/lib/esm/ModelState.js.map +1 -1
- package/lib/esm/NativeApp.d.ts +2 -1
- package/lib/esm/NativeApp.d.ts.map +1 -1
- package/lib/esm/NativeApp.js +1 -0
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +1 -0
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/core-frontend.d.ts +1 -0
- package/lib/esm/core-frontend.d.ts.map +1 -1
- package/lib/esm/core-frontend.js +1 -0
- package/lib/esm/core-frontend.js.map +1 -1
- package/lib/esm/internal/cross-package.d.ts +1 -1
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts +2 -0
- package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js +8 -1
- package/lib/esm/internal/render/webgl/FrustumUniforms.js.map +1 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.d.ts +0 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/MapLayerParams.js +11 -20
- package/lib/esm/internal/render/webgl/MapLayerParams.js.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts +9 -0
- package/lib/esm/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SceneCompositor.js +86 -11
- package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderBuilder.d.ts +4 -3
- package/lib/esm/internal/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/ShaderBuilder.js +3 -3
- package/lib/esm/internal/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/internal/render/webgl/SolarShadowMap.js +2 -2
- package/lib/esm/internal/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/internal/render/webgl/SurfaceGeometry.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/SurfaceGeometry.js +20 -8
- package/lib/esm/internal/render/webgl/SurfaceGeometry.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Atmosphere.js +1 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.js +2 -1
- package/lib/esm/internal/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.js +31 -1
- package/lib/esm/internal/render/webgl/glsl/Contours.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Fragment.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/Fragment.js +7 -2
- package/lib/esm/internal/render/webgl/glsl/Fragment.js.map +1 -1
- package/lib/esm/internal/render/webgl/glsl/RealityMesh.js +1 -1
- package/lib/esm/internal/render/webgl/glsl/Surface.js +1 -1
- package/lib/esm/internal/tile/GraphicsCollector.d.ts +1 -0
- package/lib/esm/internal/tile/GraphicsCollector.d.ts.map +1 -1
- package/lib/esm/internal/tile/GraphicsCollector.js +1 -0
- package/lib/esm/internal/tile/GraphicsCollector.js.map +1 -1
- package/lib/esm/internal/tile/IModelTile.d.ts.map +1 -1
- package/lib/esm/internal/tile/IModelTile.js +6 -1
- package/lib/esm/internal/tile/IModelTile.js.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.d.ts +4 -1
- package/lib/esm/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.js +6 -1
- package/lib/esm/internal/tile/IModelTileTree.js.map +1 -1
- package/lib/esm/internal/tile/ImdlDecoder.d.ts +2 -0
- package/lib/esm/internal/tile/ImdlDecoder.d.ts.map +1 -1
- package/lib/esm/internal/tile/ImdlDecoder.js.map +1 -1
- package/lib/esm/internal/tile/ImdlGraphicsCreator.d.ts +2 -2
- package/lib/esm/internal/tile/ImdlGraphicsCreator.d.ts.map +1 -1
- package/lib/esm/internal/tile/ImdlGraphicsCreator.js +2 -1
- package/lib/esm/internal/tile/ImdlGraphicsCreator.js.map +1 -1
- package/lib/esm/{tile → internal/tile}/LayerTileTreeHandler.d.ts +3 -3
- package/lib/esm/internal/tile/LayerTileTreeHandler.d.ts.map +1 -0
- package/lib/esm/{tile → internal/tile}/LayerTileTreeHandler.js +3 -2
- package/lib/esm/internal/tile/LayerTileTreeHandler.js.map +1 -0
- package/lib/esm/{tile → internal/tile}/LayerTileTreeReferenceHandler.d.ts +7 -5
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -0
- package/lib/esm/{tile → internal/tile}/LayerTileTreeReferenceHandler.js +29 -4
- package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -0
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts +9 -4
- package/lib/esm/internal/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/PrimaryTileTree.js +32 -10
- package/lib/esm/internal/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts +0 -2
- package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/RealityModelTileTree.js +2 -21
- package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/render/Pixel.d.ts +13 -2
- package/lib/esm/render/Pixel.d.ts.map +1 -1
- package/lib/esm/render/Pixel.js +20 -8
- package/lib/esm/render/Pixel.js.map +1 -1
- package/lib/esm/tile/ImdlReader.d.ts +3 -2
- 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/internal.d.ts +3 -2
- package/lib/esm/tile/internal.d.ts.map +1 -1
- package/lib/esm/tile/internal.js +3 -2
- package/lib/esm/tile/internal.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.d.ts +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +3 -4
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +2 -4
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tools/AccuDrawTool.d.ts +0 -12
- package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawTool.js +3 -60
- package/lib/esm/tools/AccuDrawTool.js.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.d.ts +0 -1
- package/lib/esm/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.js +16 -20
- package/lib/esm/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/esm/tools/ViewTool.d.ts +25 -16
- package/lib/esm/tools/ViewTool.d.ts.map +1 -1
- package/lib/esm/tools/ViewTool.js +29 -40
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/lib/public/locales/en/CoreTools.json +0 -5
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/public/sprites/SnapPerpendicularPoint.png +0 -0
- package/lib/public/sprites/SnapTangentPoint.png +0 -0
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +16 -16
- package/lib/cjs/tile/LayerTileTreeHandler.d.ts.map +0 -1
- package/lib/cjs/tile/LayerTileTreeHandler.js.map +0 -1
- package/lib/cjs/tile/LayerTileTreeReferenceHandler.d.ts.map +0 -1
- package/lib/cjs/tile/LayerTileTreeReferenceHandler.js.map +0 -1
- package/lib/esm/tile/LayerTileTreeHandler.d.ts.map +0 -1
- package/lib/esm/tile/LayerTileTreeHandler.js.map +0 -1
- package/lib/esm/tile/LayerTileTreeReferenceHandler.d.ts.map +0 -1
- package/lib/esm/tile/LayerTileTreeReferenceHandler.js.map +0 -1
|
@@ -56,11 +56,13 @@ const computeAltPickBufferOutputs = `${multiplyAlpha}
|
|
|
56
56
|
vec4 output0 = baseColor;
|
|
57
57
|
vec4 output1 = vec4(0.0);
|
|
58
58
|
vec4 output2 = vec4(0.0);
|
|
59
|
+
vec4 output3 = vec4(0.0);
|
|
59
60
|
`;
|
|
60
61
|
const assignPickBufferOutputsMRT = `
|
|
61
62
|
FragColor0 = output0;
|
|
62
63
|
FragColor1 = output1;
|
|
63
64
|
FragColor2 = output2;
|
|
65
|
+
FragColor3 = output3;
|
|
64
66
|
`;
|
|
65
67
|
const reassignFeatureId = " output1 = overrideFeatureId(output1);";
|
|
66
68
|
/** @internal */
|
|
@@ -77,6 +79,9 @@ export function addPickBufferOutputs(frag) {
|
|
|
77
79
|
prelude.addline(" float renderOrder = u_renderOrder;");
|
|
78
80
|
}
|
|
79
81
|
prelude.add(computePickBufferOutputs);
|
|
82
|
+
const computeContourLineInfo = frag.get(23 /* FragmentShaderComponent.ComputeContourLineInfo */) ?? "return vec4(0.0);";
|
|
83
|
+
frag.addFunction("vec4 computeContourLineInfo()", computeContourLineInfo);
|
|
84
|
+
prelude.addline(" vec4 output3 = computeContourLineInfo();");
|
|
80
85
|
const overrideColor = frag.get(21 /* FragmentShaderComponent.OverrideColor */);
|
|
81
86
|
if (undefined !== overrideColor) {
|
|
82
87
|
frag.addFunction("vec4 overrideColor(vec4 currentColor)", overrideColor);
|
|
@@ -88,7 +93,7 @@ export function addPickBufferOutputs(frag) {
|
|
|
88
93
|
prelude.addline(reassignFeatureId);
|
|
89
94
|
}
|
|
90
95
|
addRenderPass(frag);
|
|
91
|
-
frag.addDrawBuffersExtension(
|
|
96
|
+
frag.addDrawBuffersExtension(4);
|
|
92
97
|
frag.set(18 /* FragmentShaderComponent.AssignFragData */, prelude.source + assignPickBufferOutputsMRT);
|
|
93
98
|
}
|
|
94
99
|
/** @internal */
|
|
@@ -101,7 +106,7 @@ export function addAltPickBufferOutputs(frag) {
|
|
|
101
106
|
prelude.addline(" output0 = overrideColor(output0);");
|
|
102
107
|
}
|
|
103
108
|
addRenderPass(frag);
|
|
104
|
-
frag.addDrawBuffersExtension(
|
|
109
|
+
frag.addDrawBuffersExtension(4);
|
|
105
110
|
frag.set(18 /* FragmentShaderComponent.AssignFragData */, prelude.source + assignPickBufferOutputsMRT);
|
|
106
111
|
}
|
|
107
112
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fragment.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Fragment.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { FragmentShaderBuilder, FragmentShaderComponent, SourceBuilder, VariableType } from \"../ShaderBuilder\";\nimport { encodeDepthRgb } from \"./Decode\";\nimport { addRenderPass } from \"./RenderPass\";\n\n/** @internal */\nexport function addWindowToTexCoords(frag: FragmentShaderBuilder) {\n const windowCoordsToTexCoords = `\\nvec2 windowCoordsToTexCoords(vec2 wc) { return wc * u_invScreenSize; }\\n`;\n frag.addFunction(windowCoordsToTexCoords);\n frag.addUniform(\"u_invScreenSize\", VariableType.Vec2, (prog) => {\n prog.addProgramUniform(\"u_invScreenSize\", (uniform, params) => {\n params.target.uniforms.viewRect.bindInverseDimensions(uniform);\n });\n });\n}\n\n/** @internal */\nexport function addWhiteOnWhiteReversal(frag: FragmentShaderBuilder) {\n frag.addUniform(\"u_reverseWhiteOnWhite\", VariableType.Boolean, (prog) => {\n prog.addGraphicUniform(\"u_reverseWhiteOnWhite\", (uniform, params) => {\n const wantWoW = params.target.uniforms.style.wantWoWReversal;\n const doReversal = (wantWoW && params.geometry.wantWoWReversal(params.programParams)) ? 1 : 0;\n uniform.setUniform1i(doReversal);\n });\n });\n frag.set(FragmentShaderComponent.ReverseWhiteOnWhite, reverseWhiteOnWhite);\n}\n\nconst reverseWhiteOnWhite = `\n const vec3 white = vec3(1.0);\n const vec3 epsilon = vec3(0.0001);\n vec3 color = baseColor.rgb;\n vec3 delta = (color + epsilon) - white;\n vec4 wowColor = vec4(baseColor.rgb * vec3(float(delta.x <= 0.0 || delta.y <= 0.0 || delta.z <= 0.0)), baseColor.a); // set to black if almost white\n return u_reverseWhiteOnWhite ? wowColor : baseColor;\n`;\n\nconst multiplyAlpha = `\n if (u_renderPass >= kRenderPass_OpaqueLinear && u_renderPass <= kRenderPass_OpaqueGeneral)\n baseColor.a = 1.0;\n else\n baseColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\n`;\n\nconst computePickBufferOutputs = `${multiplyAlpha}\n vec4 output0 = baseColor;\n\n // Fix interpolation errors despite all vertices sending exact same feature_id...\n ivec4 feature_id_i = ivec4(feature_id * 255.0 + 0.5);\n vec4 output1 = vec4(feature_id_i) / 255.0;\n float linearDepth = computeLinearDepth(v_eyeSpace.z);\n vec4 output2 = vec4(renderOrder * 0.0625, encodeDepthRgb(linearDepth)); // near=1, far=0\n`;\n\nconst computeAltPickBufferOutputs = `${multiplyAlpha}\n vec4 output0 = baseColor;\n vec4 output1 = vec4(0.0);\n vec4 output2 = vec4(0.0);\n`;\n\nconst assignPickBufferOutputsMRT = `\n FragColor0 = output0;\n FragColor1 = output1;\n FragColor2 = output2;\n`;\n\nconst reassignFeatureId = \" output1 = overrideFeatureId(output1);\";\n\n/** @internal */\nexport function addPickBufferOutputs(frag: FragmentShaderBuilder): void {\n frag.addFunction(encodeDepthRgb);\n frag.addFunction(computeLinearDepth);\n\n const prelude = new SourceBuilder();\n const overrideOrder = frag.get(FragmentShaderComponent.OverrideRenderOrder);\n if (overrideOrder) {\n frag.addFunction(\"float overrideRenderOrder(float currentOrder)\", overrideOrder);\n prelude.addline(\" float renderOrder = overrideRenderOrder(u_renderOrder);\");\n } else {\n prelude.addline(\" float renderOrder = u_renderOrder;\");\n }\n\n prelude.add(computePickBufferOutputs);\n\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\n if (undefined !== overrideColor) {\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\n prelude.addline(\" output0 = overrideColor(output0);\");\n }\n\n const overrideFeatureId = frag.get(FragmentShaderComponent.OverrideFeatureId);\n if (undefined !== overrideFeatureId) {\n frag.addFunction(\"vec4 overrideFeatureId(vec4 currentId)\", overrideFeatureId);\n prelude.addline(reassignFeatureId);\n }\n\n addRenderPass(frag);\n frag.addDrawBuffersExtension(3);\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMRT);\n}\n\n/** @internal */\nexport function addAltPickBufferOutputs(frag: FragmentShaderBuilder): void {\n const prelude = new SourceBuilder();\n prelude.add(computeAltPickBufferOutputs);\n\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\n if (undefined !== overrideColor) {\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\n prelude.addline(\" output0 = overrideColor(output0);\");\n }\n\n addRenderPass(frag);\n frag.addDrawBuffersExtension(3);\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMRT);\n}\n\n/** @internal */\nexport function addFragColorWithPreMultipliedAlpha(frag: FragmentShaderBuilder): void {\n addRenderPass(frag);\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\n if (undefined === overrideColor) {\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColorWithPreMultipliedAlpha);\n } else {\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\n frag.set(FragmentShaderComponent.AssignFragData, overrideAndAssignFragColorWithPreMultipliedAlpha);\n }\n}\n\n/** @internal */\nexport const assignFragColor = \"FragColor = baseColor;\";\n\nconst assignFragColorWithPreMultipliedAlpha = `${multiplyAlpha}\n FragColor = baseColor;\n`;\n\nconst overrideAndAssignFragColorWithPreMultipliedAlpha = `${multiplyAlpha}\n vec4 fragColor = overrideColor(baseColor);\n FragColor = fragColor;\n`;\n\n/** @internal */\nexport const computeLinearDepth = `\nfloat computeLinearDepth(float eyeSpaceZ) {\n float eyeZ = -eyeSpaceZ;\n float near = u_frustum.x, far = u_frustum.y;\n float depthRange = far - near;\n float linearDepth = (eyeZ - near) / depthRange;\n return 1.0 - linearDepth;\n}\n`;\n"]}
|
|
1
|
+
{"version":3,"file":"Fragment.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Fragment.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { FragmentShaderBuilder, FragmentShaderComponent, SourceBuilder, VariableType } from \"../ShaderBuilder\";\nimport { encodeDepthRgb } from \"./Decode\";\nimport { addRenderPass } from \"./RenderPass\";\n\n/** @internal */\nexport function addWindowToTexCoords(frag: FragmentShaderBuilder) {\n const windowCoordsToTexCoords = `\\nvec2 windowCoordsToTexCoords(vec2 wc) { return wc * u_invScreenSize; }\\n`;\n frag.addFunction(windowCoordsToTexCoords);\n frag.addUniform(\"u_invScreenSize\", VariableType.Vec2, (prog) => {\n prog.addProgramUniform(\"u_invScreenSize\", (uniform, params) => {\n params.target.uniforms.viewRect.bindInverseDimensions(uniform);\n });\n });\n}\n\n/** @internal */\nexport function addWhiteOnWhiteReversal(frag: FragmentShaderBuilder) {\n frag.addUniform(\"u_reverseWhiteOnWhite\", VariableType.Boolean, (prog) => {\n prog.addGraphicUniform(\"u_reverseWhiteOnWhite\", (uniform, params) => {\n const wantWoW = params.target.uniforms.style.wantWoWReversal;\n const doReversal = (wantWoW && params.geometry.wantWoWReversal(params.programParams)) ? 1 : 0;\n uniform.setUniform1i(doReversal);\n });\n });\n frag.set(FragmentShaderComponent.ReverseWhiteOnWhite, reverseWhiteOnWhite);\n}\n\nconst reverseWhiteOnWhite = `\n const vec3 white = vec3(1.0);\n const vec3 epsilon = vec3(0.0001);\n vec3 color = baseColor.rgb;\n vec3 delta = (color + epsilon) - white;\n vec4 wowColor = vec4(baseColor.rgb * vec3(float(delta.x <= 0.0 || delta.y <= 0.0 || delta.z <= 0.0)), baseColor.a); // set to black if almost white\n return u_reverseWhiteOnWhite ? wowColor : baseColor;\n`;\n\nconst multiplyAlpha = `\n if (u_renderPass >= kRenderPass_OpaqueLinear && u_renderPass <= kRenderPass_OpaqueGeneral)\n baseColor.a = 1.0;\n else\n baseColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\n`;\n\nconst computePickBufferOutputs = `${multiplyAlpha}\n vec4 output0 = baseColor;\n\n // Fix interpolation errors despite all vertices sending exact same feature_id...\n ivec4 feature_id_i = ivec4(feature_id * 255.0 + 0.5);\n vec4 output1 = vec4(feature_id_i) / 255.0;\n float linearDepth = computeLinearDepth(v_eyeSpace.z);\n vec4 output2 = vec4(renderOrder * 0.0625, encodeDepthRgb(linearDepth)); // near=1, far=0\n`;\n\nconst computeAltPickBufferOutputs = `${multiplyAlpha}\n vec4 output0 = baseColor;\n vec4 output1 = vec4(0.0);\n vec4 output2 = vec4(0.0);\n vec4 output3 = vec4(0.0);\n`;\n\nconst assignPickBufferOutputsMRT = `\n FragColor0 = output0;\n FragColor1 = output1;\n FragColor2 = output2;\n FragColor3 = output3;\n`;\n\nconst reassignFeatureId = \" output1 = overrideFeatureId(output1);\";\n\n/** @internal */\nexport function addPickBufferOutputs(frag: FragmentShaderBuilder): void {\n frag.addFunction(encodeDepthRgb);\n frag.addFunction(computeLinearDepth);\n\n const prelude = new SourceBuilder();\n const overrideOrder = frag.get(FragmentShaderComponent.OverrideRenderOrder);\n if (overrideOrder) {\n frag.addFunction(\"float overrideRenderOrder(float currentOrder)\", overrideOrder);\n prelude.addline(\" float renderOrder = overrideRenderOrder(u_renderOrder);\");\n } else {\n prelude.addline(\" float renderOrder = u_renderOrder;\");\n }\n\n prelude.add(computePickBufferOutputs);\n\n const computeContourLineInfo = frag.get(FragmentShaderComponent.ComputeContourLineInfo) ?? \"return vec4(0.0);\";\n frag.addFunction(\"vec4 computeContourLineInfo()\", computeContourLineInfo);\n prelude.addline(\" vec4 output3 = computeContourLineInfo();\");\n\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\n if (undefined !== overrideColor) {\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\n prelude.addline(\" output0 = overrideColor(output0);\");\n }\n\n const overrideFeatureId = frag.get(FragmentShaderComponent.OverrideFeatureId);\n if (undefined !== overrideFeatureId) {\n frag.addFunction(\"vec4 overrideFeatureId(vec4 currentId)\", overrideFeatureId);\n prelude.addline(reassignFeatureId);\n }\n\n addRenderPass(frag);\n frag.addDrawBuffersExtension(4);\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMRT);\n}\n\n/** @internal */\nexport function addAltPickBufferOutputs(frag: FragmentShaderBuilder): void {\n const prelude = new SourceBuilder();\n prelude.add(computeAltPickBufferOutputs);\n\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\n if (undefined !== overrideColor) {\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\n prelude.addline(\" output0 = overrideColor(output0);\");\n }\n\n addRenderPass(frag);\n frag.addDrawBuffersExtension(4);\n frag.set(FragmentShaderComponent.AssignFragData, prelude.source + assignPickBufferOutputsMRT);\n}\n\n/** @internal */\nexport function addFragColorWithPreMultipliedAlpha(frag: FragmentShaderBuilder): void {\n addRenderPass(frag);\n const overrideColor = frag.get(FragmentShaderComponent.OverrideColor);\n if (undefined === overrideColor) {\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColorWithPreMultipliedAlpha);\n } else {\n frag.addFunction(\"vec4 overrideColor(vec4 currentColor)\", overrideColor);\n frag.set(FragmentShaderComponent.AssignFragData, overrideAndAssignFragColorWithPreMultipliedAlpha);\n }\n}\n\n/** @internal */\nexport const assignFragColor = \"FragColor = baseColor;\";\n\nconst assignFragColorWithPreMultipliedAlpha = `${multiplyAlpha}\n FragColor = baseColor;\n`;\n\nconst overrideAndAssignFragColorWithPreMultipliedAlpha = `${multiplyAlpha}\n vec4 fragColor = overrideColor(baseColor);\n FragColor = fragColor;\n`;\n\n/** @internal */\nexport const computeLinearDepth = `\nfloat computeLinearDepth(float eyeSpaceZ) {\n float eyeZ = -eyeSpaceZ;\n float near = u_frustum.x, far = u_frustum.y;\n float depthRange = far - near;\n float linearDepth = (eyeZ - near) / depthRange;\n return 1.0 - linearDepth;\n}\n`;\n"]}
|
|
@@ -135,7 +135,7 @@ function addThematicToRealityMesh(builder, gradientTextureUnit) {
|
|
|
135
135
|
builder.vert.addGlobal("g_hillshadeIndex", 2 /* VariableType.Float */);
|
|
136
136
|
builder.addFunctionComputedVarying("v_n", 4 /* VariableType.Vec3 */, "computeLightingNormal", computeNormal);
|
|
137
137
|
builder.frag.addGlobal("g_normal", 4 /* VariableType.Vec3 */);
|
|
138
|
-
builder.frag.set(
|
|
138
|
+
builder.frag.set(25 /* FragmentShaderComponent.FinalizeNormal */, finalizeNormal);
|
|
139
139
|
addThematicDisplay(builder, false, true);
|
|
140
140
|
builder.addInlineComputedVarying("v_thematicIndex", 2 /* VariableType.Float */, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));
|
|
141
141
|
builder.vert.addUniform("u_worldToViewN", 6 /* VariableType.Mat3 */, (prog) => {
|
|
@@ -481,7 +481,7 @@ function addNormal(builder, animated) {
|
|
|
481
481
|
});
|
|
482
482
|
});
|
|
483
483
|
finalizeNormal += finalizeNormalPostlude;
|
|
484
|
-
builder.frag.set(
|
|
484
|
+
builder.frag.set(25 /* FragmentShaderComponent.FinalizeNormal */, finalizeNormal);
|
|
485
485
|
// Set to true to colorize surfaces based on normals (in world space).
|
|
486
486
|
// You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.
|
|
487
487
|
const debugNormals = false;
|
|
@@ -10,6 +10,7 @@ import { TileDrawArgs, TileGraphicType, TileTreeReference } from "../../tile/int
|
|
|
10
10
|
export interface GraphicsCollector {
|
|
11
11
|
addGraphic(graphic: RenderGraphic): void;
|
|
12
12
|
}
|
|
13
|
+
/** @internal*/
|
|
13
14
|
export declare class GraphicsCollectorDrawArgs extends TileDrawArgs {
|
|
14
15
|
private _planes;
|
|
15
16
|
private _worldToViewMap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphicsCollector.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/GraphicsCollector.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEvF,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CAC1C;AAED,qBAAa,yBAA0B,SAAQ,YAAY;IACzD,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,UAAU,CAAoB;IAEtC,OAAO;IAQP,IAAoB,aAAa,IAAI,aAAa,CAAyB;IAC3E,IAAoB,cAAc,IAAI,KAAK,CAAiC;IAC5D,oBAAoB,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa;IAI3E,YAAY,IAAI,IAAI;WAQtB,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS;CAO1K"}
|
|
1
|
+
{"version":3,"file":"GraphicsCollector.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/GraphicsCollector.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEvF,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CAC1C;AAED,eAAe;AACf,qBAAa,yBAA0B,SAAQ,YAAY;IACzD,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,UAAU,CAAoB;IAEtC,OAAO;IAQP,IAAoB,aAAa,IAAI,aAAa,CAAyB;IAC3E,IAAoB,cAAc,IAAI,KAAK,CAAiC;IAC5D,oBAAoB,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa;IAI3E,YAAY,IAAI,IAAI;WAQtB,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS;CAO1K"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphicsCollector.js","sourceRoot":"","sources":["../../../../src/internal/tile/GraphicsCollector.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAOH,OAAO,EAAE,YAAY,EAAsC,MAAM,qBAAqB,CAAC;AAMvF,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IACjD,OAAO,CAAgB;IACvB,eAAe,CAAQ;IACvB,UAAU,CAAoB;IAEtC,YAAoB,MAAqB,EAAE,cAAqB,EAAE,SAA4B,EAAE,IAAkB;QAChH,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,IAAoB,aAAa,KAAoB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,IAAoB,cAAc,KAAY,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5D,oBAAoB,CAAC,YAA6B,EAAE,QAAuB;QACzF,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjF,CAAC;IAEe,YAAY;QAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,SAAS,KAAK,QAAQ;gBACxB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAAqB,EAAE,SAA4B,EAAE,GAAsB,EAAE,MAAqB,EAAE,cAAqB;QAC5I,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO,SAAS,CAAC;QAEnB,OAAO,IAAI,yBAAyB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { Map4d } from \"@itwin/core-geometry\";\nimport { FrustumPlanes } from \"@itwin/core-common\";\nimport { GraphicBranch } from \"../../render/GraphicBranch\";\nimport { RenderGraphic } from \"../../render/RenderGraphic\";\nimport { SceneContext } from \"../../ViewContext\";\nimport { TileDrawArgs, TileGraphicType, TileTreeReference } from \"../../tile/internal\";\n\nexport interface GraphicsCollector {\n addGraphic(graphic: RenderGraphic): void;\n}\n\nexport class GraphicsCollectorDrawArgs extends TileDrawArgs {\n private _planes: FrustumPlanes;\n private _worldToViewMap: Map4d;\n private _collector: GraphicsCollector;\n\n private constructor(planes: FrustumPlanes, worldToViewMap: Map4d, collector: GraphicsCollector, args: TileDrawArgs) {\n super(args);\n\n this._planes = planes;\n this._worldToViewMap = worldToViewMap;\n this._collector = collector;\n }\n\n public override get frustumPlanes(): FrustumPlanes { return this._planes; }\n public override get worldToViewMap(): Map4d { return this._worldToViewMap; }\n public override drawGraphicsWithType(_graphicType: TileGraphicType, graphics: GraphicBranch) {\n this._collector.addGraphic(this.context.createBranch(graphics, this.location));\n }\n\n public override drawGraphics(): void {\n if (!this.graphics.isEmpty) {\n const graphics = this.produceGraphics();\n if (undefined !== graphics)\n this._collector.addGraphic(graphics);\n }\n }\n\n public static create(context: SceneContext, collector: GraphicsCollector, ref: TileTreeReference, planes: FrustumPlanes, worldToViewMap: Map4d): TileDrawArgs | undefined {\n const args = ref.createDrawArgs(context);\n if (undefined === args)\n return undefined;\n\n return new GraphicsCollectorDrawArgs(planes, worldToViewMap, collector, args);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GraphicsCollector.js","sourceRoot":"","sources":["../../../../src/internal/tile/GraphicsCollector.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAOH,OAAO,EAAE,YAAY,EAAsC,MAAM,qBAAqB,CAAC;AAMvF,eAAe;AACf,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IACjD,OAAO,CAAgB;IACvB,eAAe,CAAQ;IACvB,UAAU,CAAoB;IAEtC,YAAoB,MAAqB,EAAE,cAAqB,EAAE,SAA4B,EAAE,IAAkB;QAChH,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,IAAoB,aAAa,KAAoB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,IAAoB,cAAc,KAAY,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5D,oBAAoB,CAAC,YAA6B,EAAE,QAAuB;QACzF,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjF,CAAC;IAEe,YAAY;QAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,SAAS,KAAK,QAAQ;gBACxB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,OAAqB,EAAE,SAA4B,EAAE,GAAsB,EAAE,MAAqB,EAAE,cAAqB;QAC5I,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,SAAS,KAAK,IAAI;YACpB,OAAO,SAAS,CAAC;QAEnB,OAAO,IAAI,yBAAyB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { Map4d } from \"@itwin/core-geometry\";\nimport { FrustumPlanes } from \"@itwin/core-common\";\nimport { GraphicBranch } from \"../../render/GraphicBranch\";\nimport { RenderGraphic } from \"../../render/RenderGraphic\";\nimport { SceneContext } from \"../../ViewContext\";\nimport { TileDrawArgs, TileGraphicType, TileTreeReference } from \"../../tile/internal\";\n\nexport interface GraphicsCollector {\n addGraphic(graphic: RenderGraphic): void;\n}\n\n/** @internal*/\nexport class GraphicsCollectorDrawArgs extends TileDrawArgs {\n private _planes: FrustumPlanes;\n private _worldToViewMap: Map4d;\n private _collector: GraphicsCollector;\n\n private constructor(planes: FrustumPlanes, worldToViewMap: Map4d, collector: GraphicsCollector, args: TileDrawArgs) {\n super(args);\n\n this._planes = planes;\n this._worldToViewMap = worldToViewMap;\n this._collector = collector;\n }\n\n public override get frustumPlanes(): FrustumPlanes { return this._planes; }\n public override get worldToViewMap(): Map4d { return this._worldToViewMap; }\n public override drawGraphicsWithType(_graphicType: TileGraphicType, graphics: GraphicBranch) {\n this._collector.addGraphic(this.context.createBranch(graphics, this.location));\n }\n\n public override drawGraphics(): void {\n if (!this.graphics.isEmpty) {\n const graphics = this.produceGraphics();\n if (undefined !== graphics)\n this._collector.addGraphic(graphics);\n }\n }\n\n public static create(context: SceneContext, collector: GraphicsCollector, ref: TileTreeReference, planes: FrustumPlanes, worldToViewMap: Map4d): TileDrawArgs | undefined {\n const args = ref.createDrawArgs(context);\n if (undefined === args)\n return undefined;\n\n return new GraphicsCollectorDrawArgs(planes, worldToViewMap, collector, args);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelTile.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/IModelTile.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAwB,WAAW,EAAc,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EACL,QAAQ,EAAyH,SAAS,EAC3I,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACY,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAkB,UAAU,EAAE,WAAW,EAC5H,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B;GACG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAS3G;AAED;;GAEG;AACH,oBAAY,YAAY;IACtB,EAAE,IAAA;IACF,GAAG,IAAA;CACJ;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;GACG;AACH,qBAAa,UAAW,SAAQ,IAAI;IAClC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC;;OAEG;IACI,cAAc,CAAC,EAAE,kBAAkB,CAAC;gBAExB,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc;IAYjE,IAAW,UAAU,IAAI,cAAc,CAAwC;IAC/E,IAAW,cAAc,IAAI,UAAU,EAAE,GAAG,SAAS,CAAsD;IAC3G,IAAW,iBAAiB,IAAI,MAAM,CAAyC;IAE/E,IAAW,cAAc,IAAI,MAAM,GAAG,SAAS,CAAiC;IAChF,IAAW,iBAAiB,YAAgD;IAC5E,IAAoB,WAAW,IAAI,MAAM,CAExC;IAED,IAAW,OAAO,IAAI,kBAAkB,CAEvC;IAEY,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAI/C,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"IModelTile.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/IModelTile.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAwB,WAAW,EAAc,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EACL,QAAQ,EAAyH,SAAS,EAC3I,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACY,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAkB,UAAU,EAAE,WAAW,EAC5H,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B;GACG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAS3G;AAED;;GAEG;AACH,oBAAY,YAAY;IACtB,EAAE,IAAA;IACF,GAAG,IAAA;CACJ;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;GACG;AACH,qBAAa,UAAW,SAAQ,IAAI;IAClC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC;;OAEG;IACI,cAAc,CAAC,EAAE,kBAAkB,CAAC;gBAExB,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc;IAYjE,IAAW,UAAU,IAAI,cAAc,CAAwC;IAC/E,IAAW,cAAc,IAAI,UAAU,EAAE,GAAG,SAAS,CAAsD;IAC3G,IAAW,iBAAiB,IAAI,MAAM,CAAyC;IAE/E,IAAW,cAAc,IAAI,MAAM,GAAG,SAAS,CAAiC;IAChF,IAAW,iBAAiB,YAAgD;IAC5E,IAAoB,WAAW,IAAI,MAAM,CAExC;IAED,IAAW,OAAO,IAAI,kBAAkB,CAEvC;IAEY,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAI/C,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqCtH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAoB5D,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAkBlG,cAAuB,iBAAiB,IAAI,QAAQ,CAEnD;cAEkB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAgBnF,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAc3C,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;CAkI3F"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @module Tiles
|
|
7
7
|
*/
|
|
8
8
|
import { assert, BentleyError, ByteStream } from "@itwin/core-bentley";
|
|
9
|
-
import { Range3d } from "@itwin/core-geometry";
|
|
9
|
+
import { Range3d, Transform } from "@itwin/core-geometry";
|
|
10
10
|
import { ColorDef, computeChildTileProps, computeChildTileRanges, computeTileChordTolerance, LinePixels, TileFormat, } from "@itwin/core-common";
|
|
11
11
|
import { IModelApp } from "../../IModelApp";
|
|
12
12
|
import { addRangeGraphic, Tile, TileBoundingBoxes, TileLoadStatus, TileTreeLoadStatus, TileVisibility, } from "./../../tile/internal";
|
|
@@ -79,6 +79,11 @@ export class IModelTile extends Tile {
|
|
|
79
79
|
system,
|
|
80
80
|
isCanceled,
|
|
81
81
|
sizeMultiplier,
|
|
82
|
+
tileData: {
|
|
83
|
+
ecefTransform: this.tree.iModel.ecefLocation?.getTransform() ?? Transform.createIdentity(),
|
|
84
|
+
range: this.range,
|
|
85
|
+
layerClassifiers: this.tree.layerHandler?.layerClassifiers,
|
|
86
|
+
},
|
|
82
87
|
});
|
|
83
88
|
}
|
|
84
89
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelTile.js","sourceRoot":"","sources":["../../../../src/internal/tile/IModelTile.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, BentleyError, BeTimePoint, ByteStream } from \"@itwin/core-bentley\";\nimport { Range3d } from \"@itwin/core-geometry\";\nimport {\n ColorDef, computeChildTileProps, computeChildTileRanges, computeTileChordTolerance, ElementAlignedBox3d, LinePixels, TileFormat, TileProps,\n} from \"@itwin/core-common\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { GraphicBuilder } from \"../../render/GraphicBuilder\";\nimport { RenderSystem } from \"../../render/RenderSystem\";\nimport {\n addRangeGraphic, IModelTileTree, Tile, TileBoundingBoxes, TileContent, TileDrawArgs, TileLoadStatus, TileParams, TileRequest,\n TileRequestChannel, TileTreeLoadStatus, TileVisibility,\n} from \"./../../tile/internal\";\n\n/** Parameters used to construct an [[IModelTile]].\n */\nexport interface IModelTileParams extends TileParams {\n sizeMultiplier?: number;\n}\n\nexport function iModelTileParamsFromJSON(props: TileProps, parent: IModelTile | undefined): IModelTileParams {\n const { contentId, maximumSize, isLeaf, sizeMultiplier } = props;\n const range = Range3d.fromJSON(props.range);\n\n let contentRange;\n if (undefined !== props.contentRange)\n contentRange = Range3d.fromJSON<ElementAlignedBox3d>(props.contentRange);\n\n return { contentId, range, maximumSize, isLeaf, parent, contentRange, sizeMultiplier };\n}\n\n/**\n * Indicates whether a parent tile should be drawn in place of a child tile.\n */\nexport enum SelectParent {\n No,\n Yes,\n}\n\nexport interface IModelTileContent extends TileContent {\n /** If this tile was produced by refinement, the multiplier applied to its screen size. */\n sizeMultiplier?: number;\n /** A bitfield describing empty sub-volumes of this tile's volume. */\n emptySubRangeMask?: number;\n}\n\n/** A tile belonging to an [[IModelTileTree].\n */\nexport class IModelTile extends Tile {\n private _sizeMultiplier?: number;\n private _emptySubRangeMask?: number;\n /** If an initial attempt to obtain this tile's content (e.g., from cloud storage cache) failed,\n * the next channel to try.\n */\n public requestChannel?: TileRequestChannel;\n\n public constructor(params: IModelTileParams, tree: IModelTileTree) {\n super(params, tree);\n this._sizeMultiplier = params.sizeMultiplier;\n\n if (!this.isLeaf && this.tree.is3d && !this.isReady) { // ###TODO: Want to know specifically if tree is *spatial*.\n // Do not sub-divide such that chord tolerance would be below specified minimum, if minimum defined.\n const minTolerance = IModelApp.tileAdmin.minimumSpatialTolerance;\n if (minTolerance > 0 && computeTileChordTolerance(this, this.tree.is3d, this.iModelTree.tileScreenSize) <= minTolerance)\n this.setLeaf();\n }\n }\n\n public get iModelTree(): IModelTileTree { return this.tree as IModelTileTree; }\n public get iModelChildren(): IModelTile[] | undefined { return this.children as IModelTile[] | undefined; }\n public get emptySubRangeMask(): number { return this._emptySubRangeMask ?? 0; }\n\n public get sizeMultiplier(): number | undefined { return this._sizeMultiplier; }\n public get hasSizeMultiplier() { return undefined !== this.sizeMultiplier; }\n public override get maximumSize(): number {\n return super.maximumSize * (this.sizeMultiplier ?? 1.0);\n }\n\n public get channel(): TileRequestChannel {\n return IModelApp.tileAdmin.channels.getIModelTileChannel(this);\n }\n\n public async requestContent(): Promise<TileRequest.Response> {\n return IModelApp.tileAdmin.generateTileContent(this);\n }\n\n public async readContent(data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<IModelTileContent> {\n if (undefined === isCanceled)\n isCanceled = () => !this.isLoading;\n\n assert(data instanceof Uint8Array);\n const streamBuffer = ByteStream.fromUint8Array(data);\n\n const position = streamBuffer.curPos;\n const format = streamBuffer.readUint32();\n streamBuffer.curPos = position;\n\n let content: IModelTileContent = { isLeaf: true };\n assert(TileFormat.IModel === format);\n if (format !== TileFormat.IModel)\n return content;\n\n const sizeMultiplier = this.hasSizeMultiplier ? this.sizeMultiplier : undefined;\n try {\n content = await this.iModelTree.decoder.decode({\n stream: streamBuffer,\n options: { tileId: this.contentId },\n system,\n isCanceled,\n sizeMultiplier,\n });\n } catch {\n //\n }\n\n return content;\n }\n\n public override setContent(content: IModelTileContent): void {\n super.setContent(content);\n\n this._emptySubRangeMask = content.emptySubRangeMask;\n\n // NB: If this tile has no graphics, it may or may not have children - but we don't want to load the children until\n // this tile is too coarse for view based on its size in pixels.\n // That is different than an \"undisplayable\" tile (maximumSize=0) whose children should be loaded immediately.\n if (undefined !== content.graphic && 0 === this.maximumSize)\n this._maximumSize = this.iModelTree.tileScreenSize;\n\n const sizeMult = content.sizeMultiplier;\n if (undefined !== sizeMult && (undefined === this._sizeMultiplier || sizeMult > this._sizeMultiplier)) {\n this._sizeMultiplier = sizeMult;\n this._contentId = this.iModelTree.contentIdProvider.idFromParentAndMultiplier(this.contentId, sizeMult);\n if (undefined !== this.children && this.children.length > 1)\n this.disposeChildren();\n }\n }\n\n protected _loadChildren(resolve: (children: Tile[]) => void, reject: (error: Error) => void): void {\n try {\n const tree = this.iModelTree;\n const kids = computeChildTileProps(this, tree.contentIdProvider, tree);\n IModelApp.tileAdmin.onTilesElided(kids.numEmpty);\n\n const children: IModelTile[] = [];\n for (const props of kids.children) {\n const child = new IModelTile(iModelTileParamsFromJSON(props, this), tree);\n children.push(child);\n }\n\n resolve(children);\n } catch (err) {\n reject(err instanceof Error ? err : new Error(BentleyError.getErrorMessage(err)));\n }\n }\n\n protected override get rangeGraphicColor(): ColorDef {\n return this.hasSizeMultiplier ? ColorDef.red : super.rangeGraphicColor;\n }\n\n protected override addRangeGraphic(builder: GraphicBuilder, type: TileBoundingBoxes): void {\n if (TileBoundingBoxes.ChildVolumes !== type) {\n super.addRangeGraphic(builder, type);\n return;\n }\n\n const ranges = computeChildTileRanges(this, this.iModelTree);\n for (const range of ranges) {\n const color = range.isEmpty ? ColorDef.blue : ColorDef.green;\n const pixels = !range.isEmpty ? LinePixels.HiddenLine : LinePixels.Solid;\n const width = !range.isEmpty ? 2 : 1;\n builder.setSymbology(color, color, width, pixels);\n addRangeGraphic(builder, range.range, this.tree.is2d);\n }\n }\n\n public pruneChildren(olderThan: BeTimePoint): void {\n // A tile's usage marker indicates its the most recent time its *children* were used.\n if (this.usageMarker.isExpired(olderThan)) {\n this.disposeChildren();\n return;\n }\n\n // this node has been used recently. Keep it, but potentially unload its grandchildren.\n const children = this.iModelChildren;\n if (undefined !== children)\n for (const child of children)\n child.pruneChildren(olderThan);\n }\n\n public selectTiles(selected: Tile[], args: TileDrawArgs, numSkipped: number): SelectParent {\n let vis = this.computeVisibility(args);\n if (TileVisibility.OutsideFrustum === vis)\n return SelectParent.No;\n\n const maxDepth = this.iModelTree.debugMaxDepth;\n if (undefined !== maxDepth && this.depth >= maxDepth)\n vis = TileVisibility.Visible;\n\n if (TileVisibility.Visible === vis) {\n // This tile is of appropriate resolution to draw. If need loading or refinement, enqueue.\n if (!this.isReady)\n args.insertMissing(this);\n\n if (this.hasGraphics) {\n // It can be drawn - select it\n args.markReady(this);\n selected.push(this);\n } else if (!this.isReady) {\n // It can't be drawn. Try to draw children in its place; otherwise draw the parent.\n // Do not load/request the children for this purpose.\n const initialSize = selected.length;\n const kids = this.iModelChildren;\n if (undefined === kids)\n return SelectParent.Yes;\n\n // Find any descendant to draw, until we exceed max initial tiles to skip.\n if (this.depth < this.iModelTree.maxInitialTilesToSkip) {\n for (const kid of kids) {\n if (SelectParent.Yes === kid.selectTiles(selected, args, numSkipped)) {\n selected.length = initialSize;\n return SelectParent.Yes;\n }\n\n return SelectParent.No;\n }\n }\n\n // If all visible direct children can be drawn, draw them.\n for (const kid of kids) {\n if (TileVisibility.OutsideFrustum !== kid.computeVisibility(args)) {\n if (!kid.hasGraphics) {\n selected.length = initialSize;\n return SelectParent.Yes;\n } else {\n selected.push(kid);\n }\n }\n }\n\n args.markUsed(this);\n }\n\n // We're drawing either this tile, or its direct children.\n return SelectParent.No;\n }\n\n // This tile is too coarse to draw. Try to draw something more appropriate.\n // If it is not ready to draw, we may want to skip loading in favor of loading its descendants.\n // If we previously loaded and later unloaded content for this tile to free memory, don't force it to reload its content - proceed to children.\n let canSkipThisTile = (this._hadGraphics && !this.hasGraphics) || this.depth < this.iModelTree.maxInitialTilesToSkip;\n if (canSkipThisTile) {\n numSkipped = 1;\n } else {\n canSkipThisTile = this.isReady || this.isParentDisplayable || this.depth < this.iModelTree.maxInitialTilesToSkip;\n if (canSkipThisTile && this.isDisplayable) { // skipping an undisplayable tile doesn't count toward the maximum\n // Some tiles do not sub-divide - they only facet the same geometry to a higher resolution. We can skip directly to the correct resolution.\n const isNotReady = !this.isReady && !this.hasGraphics && !this.hasSizeMultiplier;\n if (isNotReady) {\n if (numSkipped >= this.iModelTree.maxTilesToSkip)\n canSkipThisTile = false;\n else\n numSkipped += 1;\n }\n }\n }\n\n const childrenLoadStatus = this.loadChildren(); // NB: asynchronous\n const children = canSkipThisTile ? this.iModelChildren : undefined;\n if (canSkipThisTile && TileTreeLoadStatus.Loading === childrenLoadStatus) {\n args.markChildrenLoading();\n args.markUsed(this);\n }\n\n if (undefined !== children) {\n // If we are the root tile and we are not displayable, then we want to draw *any* currently available children in our place, or else we would draw nothing.\n // Otherwise, if we want to draw children in our place, we should wait for *all* of them to load, or else we would show missing chunks where not-yet-loaded children belong.\n const isUndisplayableRootTile = this.isUndisplayableRootTile;\n args.markUsed(this);\n let drawChildren = true;\n const initialSize = selected.length;\n for (const child of children) {\n // NB: We must continue iterating children so that they can be requested if missing.\n if (SelectParent.Yes === child.selectTiles(selected, args, numSkipped)) {\n if (child.loadStatus === TileLoadStatus.NotFound) {\n // At least one child we want to draw failed to load. e.g., we reached max depth of map tile tree. Draw parent instead.\n drawChildren = canSkipThisTile = false;\n } else {\n // At least one child we want to draw is not yet loaded. Wait for it to load before drawing it and its siblings, unless we have nothing to draw in their place.\n drawChildren = isUndisplayableRootTile;\n }\n }\n }\n\n if (drawChildren)\n return SelectParent.No;\n\n // Some types of tiles (like maps) allow the ready children to be drawn on top of the parent while other children are not yet loaded.\n if (args.parentsAndChildrenExclusive)\n selected.length = initialSize;\n }\n\n if (this.isReady) {\n if (this.hasGraphics) {\n selected.push(this);\n if (!canSkipThisTile) {\n // This tile is too coarse, but we require loading it before we can start loading higher-res children.\n args.markReady(this);\n }\n }\n\n return SelectParent.No;\n }\n\n // This tile is not ready to be drawn. Request it *only* if we cannot skip it.\n if (!canSkipThisTile)\n args.insertMissing(this);\n\n return this.isParentDisplayable ? SelectParent.Yes : SelectParent.No;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"IModelTile.js","sourceRoot":"","sources":["../../../../src/internal/tile/IModelTile.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, BentleyError, BeTimePoint, ByteStream } from \"@itwin/core-bentley\";\nimport { Range3d, Transform } from \"@itwin/core-geometry\";\nimport {\n ColorDef, computeChildTileProps, computeChildTileRanges, computeTileChordTolerance, ElementAlignedBox3d, LinePixels, TileFormat, TileProps,\n} from \"@itwin/core-common\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { GraphicBuilder } from \"../../render/GraphicBuilder\";\nimport { RenderSystem } from \"../../render/RenderSystem\";\nimport {\n addRangeGraphic, IModelTileTree, Tile, TileBoundingBoxes, TileContent, TileDrawArgs, TileLoadStatus, TileParams, TileRequest,\n TileRequestChannel, TileTreeLoadStatus, TileVisibility,\n} from \"./../../tile/internal\";\n\n/** Parameters used to construct an [[IModelTile]].\n */\nexport interface IModelTileParams extends TileParams {\n sizeMultiplier?: number;\n}\n\nexport function iModelTileParamsFromJSON(props: TileProps, parent: IModelTile | undefined): IModelTileParams {\n const { contentId, maximumSize, isLeaf, sizeMultiplier } = props;\n const range = Range3d.fromJSON(props.range);\n\n let contentRange;\n if (undefined !== props.contentRange)\n contentRange = Range3d.fromJSON<ElementAlignedBox3d>(props.contentRange);\n\n return { contentId, range, maximumSize, isLeaf, parent, contentRange, sizeMultiplier };\n}\n\n/**\n * Indicates whether a parent tile should be drawn in place of a child tile.\n */\nexport enum SelectParent {\n No,\n Yes,\n}\n\nexport interface IModelTileContent extends TileContent {\n /** If this tile was produced by refinement, the multiplier applied to its screen size. */\n sizeMultiplier?: number;\n /** A bitfield describing empty sub-volumes of this tile's volume. */\n emptySubRangeMask?: number;\n}\n\n/** A tile belonging to an [[IModelTileTree].\n */\nexport class IModelTile extends Tile {\n private _sizeMultiplier?: number;\n private _emptySubRangeMask?: number;\n /** If an initial attempt to obtain this tile's content (e.g., from cloud storage cache) failed,\n * the next channel to try.\n */\n public requestChannel?: TileRequestChannel;\n\n public constructor(params: IModelTileParams, tree: IModelTileTree) {\n super(params, tree);\n this._sizeMultiplier = params.sizeMultiplier;\n\n if (!this.isLeaf && this.tree.is3d && !this.isReady) { // ###TODO: Want to know specifically if tree is *spatial*.\n // Do not sub-divide such that chord tolerance would be below specified minimum, if minimum defined.\n const minTolerance = IModelApp.tileAdmin.minimumSpatialTolerance;\n if (minTolerance > 0 && computeTileChordTolerance(this, this.tree.is3d, this.iModelTree.tileScreenSize) <= minTolerance)\n this.setLeaf();\n }\n }\n\n public get iModelTree(): IModelTileTree { return this.tree as IModelTileTree; }\n public get iModelChildren(): IModelTile[] | undefined { return this.children as IModelTile[] | undefined; }\n public get emptySubRangeMask(): number { return this._emptySubRangeMask ?? 0; }\n\n public get sizeMultiplier(): number | undefined { return this._sizeMultiplier; }\n public get hasSizeMultiplier() { return undefined !== this.sizeMultiplier; }\n public override get maximumSize(): number {\n return super.maximumSize * (this.sizeMultiplier ?? 1.0);\n }\n\n public get channel(): TileRequestChannel {\n return IModelApp.tileAdmin.channels.getIModelTileChannel(this);\n }\n\n public async requestContent(): Promise<TileRequest.Response> {\n return IModelApp.tileAdmin.generateTileContent(this);\n }\n\n public async readContent(data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<IModelTileContent> {\n if (undefined === isCanceled)\n isCanceled = () => !this.isLoading;\n\n assert(data instanceof Uint8Array);\n const streamBuffer = ByteStream.fromUint8Array(data);\n\n const position = streamBuffer.curPos;\n const format = streamBuffer.readUint32();\n streamBuffer.curPos = position;\n\n let content: IModelTileContent = { isLeaf: true };\n assert(TileFormat.IModel === format);\n if (format !== TileFormat.IModel)\n return content;\n\n const sizeMultiplier = this.hasSizeMultiplier ? this.sizeMultiplier : undefined;\n try {\n content = await this.iModelTree.decoder.decode({\n stream: streamBuffer,\n options: { tileId: this.contentId },\n system,\n isCanceled,\n sizeMultiplier,\n tileData: {\n ecefTransform: this.tree.iModel.ecefLocation?.getTransform() ?? Transform.createIdentity(),\n range: this.range,\n layerClassifiers: this.tree.layerHandler?.layerClassifiers,\n },\n });\n } catch {\n //\n }\n\n return content;\n }\n\n public override setContent(content: IModelTileContent): void {\n super.setContent(content);\n\n this._emptySubRangeMask = content.emptySubRangeMask;\n\n // NB: If this tile has no graphics, it may or may not have children - but we don't want to load the children until\n // this tile is too coarse for view based on its size in pixels.\n // That is different than an \"undisplayable\" tile (maximumSize=0) whose children should be loaded immediately.\n if (undefined !== content.graphic && 0 === this.maximumSize)\n this._maximumSize = this.iModelTree.tileScreenSize;\n\n const sizeMult = content.sizeMultiplier;\n if (undefined !== sizeMult && (undefined === this._sizeMultiplier || sizeMult > this._sizeMultiplier)) {\n this._sizeMultiplier = sizeMult;\n this._contentId = this.iModelTree.contentIdProvider.idFromParentAndMultiplier(this.contentId, sizeMult);\n if (undefined !== this.children && this.children.length > 1)\n this.disposeChildren();\n }\n }\n\n protected _loadChildren(resolve: (children: Tile[]) => void, reject: (error: Error) => void): void {\n try {\n const tree = this.iModelTree;\n const kids = computeChildTileProps(this, tree.contentIdProvider, tree);\n IModelApp.tileAdmin.onTilesElided(kids.numEmpty);\n\n const children: IModelTile[] = [];\n for (const props of kids.children) {\n const child = new IModelTile(iModelTileParamsFromJSON(props, this), tree);\n children.push(child);\n }\n\n resolve(children);\n } catch (err) {\n reject(err instanceof Error ? err : new Error(BentleyError.getErrorMessage(err)));\n }\n }\n\n protected override get rangeGraphicColor(): ColorDef {\n return this.hasSizeMultiplier ? ColorDef.red : super.rangeGraphicColor;\n }\n\n protected override addRangeGraphic(builder: GraphicBuilder, type: TileBoundingBoxes): void {\n if (TileBoundingBoxes.ChildVolumes !== type) {\n super.addRangeGraphic(builder, type);\n return;\n }\n\n const ranges = computeChildTileRanges(this, this.iModelTree);\n for (const range of ranges) {\n const color = range.isEmpty ? ColorDef.blue : ColorDef.green;\n const pixels = !range.isEmpty ? LinePixels.HiddenLine : LinePixels.Solid;\n const width = !range.isEmpty ? 2 : 1;\n builder.setSymbology(color, color, width, pixels);\n addRangeGraphic(builder, range.range, this.tree.is2d);\n }\n }\n\n public pruneChildren(olderThan: BeTimePoint): void {\n // A tile's usage marker indicates its the most recent time its *children* were used.\n if (this.usageMarker.isExpired(olderThan)) {\n this.disposeChildren();\n return;\n }\n\n // this node has been used recently. Keep it, but potentially unload its grandchildren.\n const children = this.iModelChildren;\n if (undefined !== children)\n for (const child of children)\n child.pruneChildren(olderThan);\n }\n\n public selectTiles(selected: Tile[], args: TileDrawArgs, numSkipped: number): SelectParent {\n let vis = this.computeVisibility(args);\n if (TileVisibility.OutsideFrustum === vis)\n return SelectParent.No;\n\n const maxDepth = this.iModelTree.debugMaxDepth;\n if (undefined !== maxDepth && this.depth >= maxDepth)\n vis = TileVisibility.Visible;\n\n if (TileVisibility.Visible === vis) {\n // This tile is of appropriate resolution to draw. If need loading or refinement, enqueue.\n if (!this.isReady)\n args.insertMissing(this);\n\n if (this.hasGraphics) {\n // It can be drawn - select it\n args.markReady(this);\n selected.push(this);\n } else if (!this.isReady) {\n // It can't be drawn. Try to draw children in its place; otherwise draw the parent.\n // Do not load/request the children for this purpose.\n const initialSize = selected.length;\n const kids = this.iModelChildren;\n if (undefined === kids)\n return SelectParent.Yes;\n\n // Find any descendant to draw, until we exceed max initial tiles to skip.\n if (this.depth < this.iModelTree.maxInitialTilesToSkip) {\n for (const kid of kids) {\n if (SelectParent.Yes === kid.selectTiles(selected, args, numSkipped)) {\n selected.length = initialSize;\n return SelectParent.Yes;\n }\n\n return SelectParent.No;\n }\n }\n\n // If all visible direct children can be drawn, draw them.\n for (const kid of kids) {\n if (TileVisibility.OutsideFrustum !== kid.computeVisibility(args)) {\n if (!kid.hasGraphics) {\n selected.length = initialSize;\n return SelectParent.Yes;\n } else {\n selected.push(kid);\n }\n }\n }\n\n args.markUsed(this);\n }\n\n // We're drawing either this tile, or its direct children.\n return SelectParent.No;\n }\n\n // This tile is too coarse to draw. Try to draw something more appropriate.\n // If it is not ready to draw, we may want to skip loading in favor of loading its descendants.\n // If we previously loaded and later unloaded content for this tile to free memory, don't force it to reload its content - proceed to children.\n let canSkipThisTile = (this._hadGraphics && !this.hasGraphics) || this.depth < this.iModelTree.maxInitialTilesToSkip;\n if (canSkipThisTile) {\n numSkipped = 1;\n } else {\n canSkipThisTile = this.isReady || this.isParentDisplayable || this.depth < this.iModelTree.maxInitialTilesToSkip;\n if (canSkipThisTile && this.isDisplayable) { // skipping an undisplayable tile doesn't count toward the maximum\n // Some tiles do not sub-divide - they only facet the same geometry to a higher resolution. We can skip directly to the correct resolution.\n const isNotReady = !this.isReady && !this.hasGraphics && !this.hasSizeMultiplier;\n if (isNotReady) {\n if (numSkipped >= this.iModelTree.maxTilesToSkip)\n canSkipThisTile = false;\n else\n numSkipped += 1;\n }\n }\n }\n\n const childrenLoadStatus = this.loadChildren(); // NB: asynchronous\n const children = canSkipThisTile ? this.iModelChildren : undefined;\n if (canSkipThisTile && TileTreeLoadStatus.Loading === childrenLoadStatus) {\n args.markChildrenLoading();\n args.markUsed(this);\n }\n\n if (undefined !== children) {\n // If we are the root tile and we are not displayable, then we want to draw *any* currently available children in our place, or else we would draw nothing.\n // Otherwise, if we want to draw children in our place, we should wait for *all* of them to load, or else we would show missing chunks where not-yet-loaded children belong.\n const isUndisplayableRootTile = this.isUndisplayableRootTile;\n args.markUsed(this);\n let drawChildren = true;\n const initialSize = selected.length;\n for (const child of children) {\n // NB: We must continue iterating children so that they can be requested if missing.\n if (SelectParent.Yes === child.selectTiles(selected, args, numSkipped)) {\n if (child.loadStatus === TileLoadStatus.NotFound) {\n // At least one child we want to draw failed to load. e.g., we reached max depth of map tile tree. Draw parent instead.\n drawChildren = canSkipThisTile = false;\n } else {\n // At least one child we want to draw is not yet loaded. Wait for it to load before drawing it and its siblings, unless we have nothing to draw in their place.\n drawChildren = isUndisplayableRootTile;\n }\n }\n }\n\n if (drawChildren)\n return SelectParent.No;\n\n // Some types of tiles (like maps) allow the ready children to be drawn on top of the parent while other children are not yet loaded.\n if (args.parentsAndChildrenExclusive)\n selected.length = initialSize;\n }\n\n if (this.isReady) {\n if (this.hasGraphics) {\n selected.push(this);\n if (!canSkipThisTile) {\n // This tile is too coarse, but we require loading it before we can start loading higher-res children.\n args.markReady(this);\n }\n }\n\n return SelectParent.No;\n }\n\n // This tile is not ready to be drawn. Request it *only* if we cannot skip it.\n if (!canSkipThisTile)\n args.insertMissing(this);\n\n return this.isParentDisplayable ? SelectParent.Yes : SelectParent.No;\n }\n}\n"]}
|
|
@@ -5,7 +5,7 @@ import { GuidString, Id64Array, Id64String } from "@itwin/core-bentley";
|
|
|
5
5
|
import { Range3d } from "@itwin/core-geometry";
|
|
6
6
|
import { BatchType, ContentIdProvider, EdgeOptions, IModelTileTreeId, IModelTileTreeProps, RenderSchedule, TileProps } from "@itwin/core-common";
|
|
7
7
|
import { IModelConnection } from "../../IModelConnection";
|
|
8
|
-
import { ImdlDecoder, IModelTile, Tile, TileDrawArgs, TileLoadPriority, TileTree, TileTreeParams } from "../../tile/internal";
|
|
8
|
+
import { ImdlDecoder, IModelTile, LayerTileTreeHandler, MapLayerTreeSetting, Tile, TileDrawArgs, TileLoadPriority, TileTree, TileTreeParams } from "../../tile/internal";
|
|
9
9
|
export interface IModelTileTreeOptions {
|
|
10
10
|
readonly allowInstancing: boolean;
|
|
11
11
|
readonly edges: EdgeOptions | false;
|
|
@@ -55,6 +55,9 @@ export declare class IModelTileTree extends TileTree {
|
|
|
55
55
|
* used by draw().
|
|
56
56
|
*/
|
|
57
57
|
private _numStaticTilesSelected;
|
|
58
|
+
layerImageryTrees: MapLayerTreeSetting[];
|
|
59
|
+
private readonly _layerHandler;
|
|
60
|
+
get layerHandler(): LayerTileTreeHandler;
|
|
58
61
|
constructor(params: IModelTileTreeParams, treeId: IModelTileTreeId);
|
|
59
62
|
[Symbol.dispose](): void;
|
|
60
63
|
get maxDepth(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelTileTree.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/IModelTileTree.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAuB,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAa,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,SAAS,EAAE,iBAAiB,EAAE,WAAW,EACzC,gBAAgB,EAAE,mBAAmB,EAAwB,cAAc,EAAE,SAAS,EACvF,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,EACkC,WAAW,EAAE,UAAU,EAA8C,IAAI,
|
|
1
|
+
{"version":3,"file":"IModelTileTree.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/IModelTileTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { BatchType, ContentIdProvider, FeatureAppearanceProvider } from "@itwin/
|
|
|
11
11
|
import { IModelApp } from "../../IModelApp";
|
|
12
12
|
import { GraphicalEditingScope } from "../../GraphicalEditingScope";
|
|
13
13
|
import { GraphicBranch } from "../../render/GraphicBranch";
|
|
14
|
-
import { acquireImdlDecoder, DynamicIModelTile, IModelTile, iModelTileParamsFromJSON, Tile, TileLoadPriority, TileTree } from "../../tile/internal";
|
|
14
|
+
import { acquireImdlDecoder, DynamicIModelTile, IModelTile, iModelTileParamsFromJSON, LayerTileTreeHandler, Tile, TileLoadPriority, TileTree } from "../../tile/internal";
|
|
15
15
|
// Overrides nothing.
|
|
16
16
|
const viewFlagOverrides = {};
|
|
17
17
|
export function iModelTileTreeParamsFromJSON(props, iModel, modelId, options) {
|
|
@@ -263,12 +263,16 @@ export class IModelTileTree extends TileTree {
|
|
|
263
263
|
* used by draw().
|
|
264
264
|
*/
|
|
265
265
|
_numStaticTilesSelected = 0;
|
|
266
|
+
layerImageryTrees = [];
|
|
267
|
+
_layerHandler;
|
|
268
|
+
get layerHandler() { return this._layerHandler; }
|
|
266
269
|
constructor(params, treeId) {
|
|
267
270
|
super(params);
|
|
268
271
|
this.iModelTileTreeId = treeId;
|
|
269
272
|
this.contentIdQualifier = params.contentIdQualifier;
|
|
270
273
|
this.geometryGuid = params.geometryGuid;
|
|
271
274
|
this.tileScreenSize = params.tileScreenSize;
|
|
275
|
+
this._layerHandler = new LayerTileTreeHandler(this);
|
|
272
276
|
if (BatchType.Primary === treeId.type)
|
|
273
277
|
this.stringifiedSectionClip = treeId.sectionCut;
|
|
274
278
|
this.maxInitialTilesToSkip = params.maxInitialTilesToSkip ?? 0;
|
|
@@ -319,6 +323,7 @@ export class IModelTileTree extends TileTree {
|
|
|
319
323
|
draw(args) {
|
|
320
324
|
const tiles = this.selectTiles(args);
|
|
321
325
|
this._rootTile.draw(args, tiles, this._numStaticTilesSelected);
|
|
326
|
+
this._layerHandler.collectClassifierGraphics(args, tiles);
|
|
322
327
|
}
|
|
323
328
|
prune() {
|
|
324
329
|
const olderThan = BeTimePoint.now().minus(this.expirationTime);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelTileTree.js","sourceRoot":"","sources":["../../../../src/internal/tile/IModelTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, BeTimePoint, GuidString, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { Range3d, Transform } from \"@itwin/core-geometry\";\nimport {\n BatchType, ContentIdProvider, EdgeOptions, ElementAlignedBox3d, ElementGeometryChange, FeatureAppearanceProvider,\n IModelTileTreeId, IModelTileTreeProps, ModelGeometryChanges, RenderSchedule, TileProps\n} from \"@itwin/core-common\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { IModelConnection } from \"../../IModelConnection\";\nimport { GraphicalEditingScope } from \"../../GraphicalEditingScope\";\nimport { RenderSystem } from \"../../render/RenderSystem\";\nimport { GraphicBranch } from \"../../render/GraphicBranch\";\nimport {\n acquireImdlDecoder, DynamicIModelTile, ImdlDecoder, IModelTile, IModelTileParams, iModelTileParamsFromJSON, Tile,\n TileContent, TileDrawArgs, TileLoadPriority, TileParams, TileRequest, TileRequestChannel, TileTree, TileTreeParams\n} from \"../../tile/internal\";\n\nexport interface IModelTileTreeOptions {\n readonly allowInstancing: boolean;\n readonly edges: EdgeOptions | false;\n readonly batchType: BatchType;\n readonly is3d: boolean;\n readonly timeline: RenderSchedule.ModelTimeline | undefined;\n}\n\n// Overrides nothing.\nconst viewFlagOverrides = {};\n\n/** Parameters used to construct an [[IModelTileTree]]\n */\nexport interface IModelTileTreeParams extends TileTreeParams {\n rootTile: TileProps;\n contentIdQualifier?: string;\n geometryGuid?: GuidString;\n maxInitialTilesToSkip?: number;\n formatVersion?: number;\n tileScreenSize: number;\n options: IModelTileTreeOptions;\n transformNodeRanges?: Map<number, Range3d>;\n}\n\nexport function iModelTileTreeParamsFromJSON(props: IModelTileTreeProps, iModel: IModelConnection, modelId: Id64String, options: IModelTileTreeOptions): IModelTileTreeParams {\n const location = Transform.fromJSON(props.location);\n const { formatVersion, id, rootTile, contentIdQualifier, maxInitialTilesToSkip, geometryGuid } = props;\n const tileScreenSize = props.tileScreenSize ?? 512;\n\n let contentRange;\n if (undefined !== props.contentRange)\n contentRange = Range3d.fromJSON<ElementAlignedBox3d>(props.contentRange);\n\n let transformNodeRanges;\n if (props.transformNodeRanges) {\n transformNodeRanges = new Map<number, Range3d>();\n for (const entry of props.transformNodeRanges)\n transformNodeRanges.set(entry.id, Range3d.fromJSON(entry));\n }\n\n const priority = BatchType.Primary === options.batchType ? TileLoadPriority.Primary : TileLoadPriority.Classifier;\n return {\n formatVersion,\n id,\n rootTile,\n iModel,\n location,\n modelId,\n contentRange,\n geometryGuid,\n contentIdQualifier,\n maxInitialTilesToSkip,\n priority,\n options,\n tileScreenSize,\n transformNodeRanges,\n };\n}\n\nfunction findElementChangesForModel(changes: Iterable<ModelGeometryChanges>, modelId: Id64String): Iterable<ElementGeometryChange> | undefined {\n for (const change of changes)\n if (change.id === modelId)\n return change.elements;\n\n return undefined;\n}\n\n/** No graphical editing scope is currently active. */\nclass StaticState {\n public readonly type = \"static\";\n public readonly [Symbol.dispose]!: () => void;\n\n public constructor(root: RootTile) {\n this[Symbol.dispose] = GraphicalEditingScope.onEnter.addOnce((scope: GraphicalEditingScope) => {\n root.transition(new InteractiveState(scope, root));\n });\n }\n}\n\n/** A graphical editing scope is currently active, but no elements in the tile tree's model have been modified. */\nclass InteractiveState {\n public readonly type = \"interactive\";\n public readonly [Symbol.dispose]!: () => void;\n\n public constructor(scope: GraphicalEditingScope, root: RootTile) {\n const removeEndingListener = scope.onExiting.addOnce((_) => {\n root.transition(new StaticState(root));\n });\n\n const removeGeomListener = scope.onGeometryChanges.addListener((changes: Iterable<ModelGeometryChanges>, _scope: GraphicalEditingScope) => {\n assert(scope === _scope);\n const elemChanges = findElementChangesForModel(changes, root.tree.modelId);\n if (elemChanges)\n root.transition(new DynamicState(root, elemChanges, scope));\n });\n\n this[Symbol.dispose] = () => {\n removeEndingListener();\n removeGeomListener();\n };\n }\n}\n\n/** Elements in the tile tree's model have been modified during the current editing scope. */\nclass DynamicState {\n public readonly type = \"dynamic\";\n public readonly rootTile: DynamicIModelTile;\n private readonly _dispose: () => void;\n\n public [Symbol.dispose](): void {\n this._dispose();\n this.rootTile[Symbol.dispose]();\n }\n\n public constructor(root: RootTile, elemChanges: Iterable<ElementGeometryChange>, scope: GraphicalEditingScope) {\n this.rootTile = DynamicIModelTile.create(root, elemChanges);\n\n const removeEndingListener = scope.onExiting.addOnce((_) => {\n root.transition(new StaticState(root));\n });\n\n const removeGeomListener = scope.onGeometryChanges.addListener((changes: Iterable<ModelGeometryChanges>, _scope: GraphicalEditingScope) => {\n assert(scope === _scope);\n const elems = findElementChangesForModel(changes, root.tree.modelId);\n if (elems)\n this.rootTile.handleGeometryChanges(elems);\n });\n\n this._dispose = () => {\n removeEndingListener();\n removeGeomListener();\n };\n }\n}\n\n/** The tile tree has been disposed. */\nclass DisposedState {\n public readonly type = \"disposed\";\n public [Symbol.dispose](): void { }\n}\n\nconst disposedState = new DisposedState();\n\n/** The current state of an [[IModelTileTree]]'s [[RootTile]]. The tile transitions between these states primarily in response to GraphicalEditingScope events. */\ntype RootTileState = StaticState | InteractiveState | DynamicState | DisposedState;\n\n/** The root tile for an [[IModelTileTree]].\n */\nexport type RootIModelTile = Tile & { tileScreenSize: number, updateDynamicRange: (childTile: Tile) => void };\n\n/** Represents the root [[Tile]] of an [[IModelTileTree]]. The root tile has one or two direct child tiles which represent different branches of the tree:\n * - The static branch, containing tiles that represent the state of the model's geometry as of the beginning of the current [[GraphicalEditingScope]].\n * - The dynamic branch, containing tiles representing the geometry of elements that have been modified during the current [[GraphicalEditingScope]].\n * If no editing scope is currently active, the dynamic branch does not exist, and the static branch represents the current state of all elements in the model.\n */\nclass RootTile extends Tile {\n public readonly staticBranch: IModelTile;\n private _tileState: RootTileState;\n private readonly _staticTreeContentRange?: Range3d;\n\n public get tileState(): RootTileState {\n return this._tileState;\n }\n\n public constructor(params: IModelTileParams, tree: IModelTileTree) {\n const rootParams: TileParams = {\n ...params,\n range: params.range.clone(),\n contentRange: params.contentRange?.clone(),\n isLeaf: false,\n contentId: \"\",\n };\n\n super(rootParams, tree);\n this.staticBranch = new IModelTile(params, tree);\n this._staticTreeContentRange = tree.contentRange?.clone();\n\n if (!this._contentRange)\n this._contentRange = this.staticBranch.contentRange.clone();\n\n // Determine initial state.\n const scope = tree.iModel.isBriefcaseConnection() ? tree.iModel.editingScope : undefined;\n if (undefined === scope) {\n this._tileState = new StaticState(this);\n } else {\n const changes = scope.getGeometryChangesForModel(tree.modelId);\n this._tileState = changes ? new DynamicState(this, changes, scope) : new InteractiveState(scope, this);\n }\n\n // Load the children immediately.\n this.setIsReady();\n this.loadChildren();\n }\n\n public override[Symbol.dispose](): void {\n this.transition(disposedState);\n super[Symbol.dispose]();\n }\n\n protected _loadChildren(resolve: (children: Tile[] | undefined) => void, _reject: (error: Error) => void): void {\n const children: Tile[] = [this.staticBranch];\n if (this._tileState.type === \"dynamic\")\n children.push(this._tileState.rootTile);\n\n resolve(children);\n }\n\n public get channel(): TileRequestChannel {\n throw new Error(\"Root iModel tile has no content\");\n }\n\n public async requestContent(_isCanceled: () => boolean): Promise<TileRequest.Response> {\n assert(false, \"Root iModel tile has no content\");\n return undefined;\n }\n\n public async readContent(_data: TileRequest.ResponseData, _system: RenderSystem, _isCanceled: () => boolean): Promise<TileContent> {\n throw new Error(\"Root iModel tile has no content\");\n }\n\n public draw(args: TileDrawArgs, tiles: Tile[], numStaticTiles: number): void {\n assert(numStaticTiles >= 0 && numStaticTiles <= tiles.length);\n\n // Draw the static tiles.\n for (let i = 0; i < numStaticTiles; i++)\n tiles[i].drawGraphics(args);\n\n if (\"dynamic\" !== this._tileState.type || numStaticTiles === tiles.length) {\n if (\"dynamic\" === this._tileState.type)\n args.addAppearanceProvider(this._tileState.rootTile.appearanceProvider);\n\n args.drawGraphics();\n return;\n }\n\n // We need to hide any modified elements in the static tiles. Pull their graphics into a separate branch.\n if (!args.graphics.isEmpty) {\n const staticBranch = new GraphicBranch();\n for (const staticGraphic of args.graphics.entries)\n staticBranch.add(staticGraphic);\n\n let appearanceProvider = this._tileState.rootTile.appearanceProvider;\n if (args.appearanceProvider)\n appearanceProvider = FeatureAppearanceProvider.chain(args.appearanceProvider, appearanceProvider);\n\n args.graphics.clear();\n args.graphics.add(args.context.createGraphicBranch(staticBranch, Transform.createIdentity(), { appearanceProvider }));\n }\n\n // Draw the dynamic tiles.\n for (let i = numStaticTiles; i < tiles.length; i++)\n tiles[i].drawGraphics(args);\n\n args.drawGraphics();\n }\n\n public prune(olderThan: BeTimePoint): void {\n this.staticBranch.pruneChildren(olderThan);\n if (\"dynamic\" === this._tileState.type)\n this._tileState.rootTile.pruneChildren(olderThan);\n }\n\n public transition(newState: RootTileState): void {\n assert(newState.type !== this._tileState.type);\n const resetRange = \"dynamic\" === this._tileState.type;\n\n assert(undefined !== this.children);\n if (\"dynamic\" === this._tileState.type) {\n assert(2 === this.children.length);\n this.children.pop();\n } else if (\"dynamic\" === newState.type) {\n assert(1 === this.children.length);\n this.children.push(newState.rootTile);\n }\n\n this._tileState[Symbol.dispose]();\n this._tileState = newState;\n\n if (resetRange)\n this.resetRange();\n }\n\n private resetRange(): void {\n this.staticBranch.range.clone(this.range);\n this.staticBranch.contentRange.clone(this._contentRange);\n\n if (this._staticTreeContentRange && this.tree.contentRange)\n this._staticTreeContentRange.clone(this.tree.contentRange);\n\n }\n\n public get tileScreenSize(): number {\n return this.staticBranch.iModelTree.tileScreenSize;\n }\n\n public updateDynamicRange(tile: Tile): void {\n this.resetRange();\n if (this._staticTreeContentRange && this.tree.contentRange && !tile.contentRange.isNull)\n this.tree.contentRange.extendRange(tile.contentRange);\n\n if (!tile.range.isNull)\n this.range.extendRange(tile.range);\n\n assert(undefined !== this._contentRange);\n if (!tile.contentRange.isNull)\n this._contentRange.extendRange(tile.contentRange);\n }\n}\n\n/** A TileTree whose contents are derived from geometry stored in a Model in an IModelDb.\n * @internal exported strictly for display-test-app until we remove CommonJS support.\n */\nexport class IModelTileTree extends TileTree {\n public readonly decoder: ImdlDecoder;\n private readonly _rootTile: RootTile;\n private readonly _options: IModelTileTreeOptions;\n private readonly _transformNodeRanges?: Map<number, Range3d>;\n public readonly contentIdQualifier?: string;\n public readonly geometryGuid?: string;\n public readonly maxTilesToSkip: number;\n public readonly maxInitialTilesToSkip: number;\n public readonly contentIdProvider: ContentIdProvider;\n public readonly stringifiedSectionClip?: string;\n public readonly tileScreenSize: number;\n public readonly iModelTileTreeId: IModelTileTreeId;\n /** Strictly for debugging/testing - forces tile selection to halt at the specified depth. */\n public debugMaxDepth?: number;\n /** A little hacky...we must not override selectTiles(), but draw() needs to distinguish between static and dynamic tiles.\n * So _selectTiles() puts the static tiles first in the Tile[] array, and records the number of static tiles selected, to be\n * used by draw().\n */\n private _numStaticTilesSelected = 0;\n\n public constructor(params: IModelTileTreeParams, treeId: IModelTileTreeId) {\n super(params);\n this.iModelTileTreeId = treeId;\n this.contentIdQualifier = params.contentIdQualifier;\n this.geometryGuid = params.geometryGuid;\n this.tileScreenSize = params.tileScreenSize;\n\n if (BatchType.Primary === treeId.type)\n this.stringifiedSectionClip = treeId.sectionCut;\n\n this.maxInitialTilesToSkip = params.maxInitialTilesToSkip ?? 0;\n this.maxTilesToSkip = IModelApp.tileAdmin.maximumLevelsToSkip;\n\n this._options = params.options;\n this._transformNodeRanges = params.transformNodeRanges;\n\n this.contentIdProvider = ContentIdProvider.create(params.options.allowInstancing, IModelApp.tileAdmin, params.formatVersion);\n\n params.rootTile.contentId = this.contentIdProvider.rootContentId;\n this._rootTile = new RootTile(iModelTileParamsFromJSON(params.rootTile, undefined), this);\n\n this.decoder = acquireImdlDecoder({\n type: this.batchType,\n omitEdges: false === this.edgeOptions,\n timeline: this.timeline,\n iModel: this.iModel,\n batchModelId: this.modelId,\n is3d: this.is3d,\n containsTransformNodes: this.containsTransformNodes,\n noWorker: !IModelApp.tileAdmin.decodeImdlInWorker,\n });\n }\n\n public override[Symbol.dispose](): void {\n this.decoder.release();\n super[Symbol.dispose]();\n }\n\n public get maxDepth() { return 32; }\n public get rootTile(): Tile { return this._rootTile; }\n /** Exposed chiefly for tests. */\n public get staticBranch(): IModelTile { return this._rootTile.staticBranch; }\n public get is3d() { return this._options.is3d; }\n public override get isContentUnbounded() { return false; }\n public get viewFlagOverrides() { return viewFlagOverrides; }\n\n public get batchType(): BatchType { return this._options.batchType; }\n public get edgeOptions(): EdgeOptions | false { return this._options.edges; }\n public get timeline(): RenderSchedule.ModelTimeline | undefined { return this._options.timeline; }\n\n public override get loadPriority(): TileLoadPriority {\n // If the model has been modified, we want to prioritize keeping its graphics up to date.\n return this.tileState === \"dynamic\" ? TileLoadPriority.Dynamic : super.loadPriority;\n }\n\n protected _selectTiles(args: TileDrawArgs): Tile[] {\n args.markUsed(this._rootTile);\n const tiles: Tile[] = [];\n this._rootTile.staticBranch.selectTiles(tiles, args, 0);\n this._numStaticTilesSelected = tiles.length;\n\n if (this._rootTile.tileState.type === \"dynamic\")\n this._rootTile.tileState.rootTile.selectTiles(tiles, args);\n\n return tiles;\n }\n\n public draw(args: TileDrawArgs): void {\n const tiles = this.selectTiles(args);\n this._rootTile.draw(args, tiles, this._numStaticTilesSelected);\n }\n\n public prune(): void {\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\n this._rootTile.prune(olderThan);\n }\n\n /** Exposed strictly for tests. */\n public get tileState(): \"static\" | \"dynamic\" | \"interactive\" | \"disposed\" {\n return this._rootTile.tileState.type;\n }\n\n /** Exposed strictly for tests. */\n public get hiddenElements(): Id64Array {\n const state = this._rootTile.tileState;\n return \"dynamic\" === state.type ? state.rootTile.hiddenElements : [];\n }\n\n public getTransformNodeRange(nodeId: number): Range3d | undefined {\n return this._transformNodeRanges?.get(nodeId);\n }\n\n public get containsTransformNodes(): boolean {\n return undefined !== this._transformNodeRanges;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"IModelTileTree.js","sourceRoot":"","sources":["../../../../src/internal/tile/IModelTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, BeTimePoint, GuidString, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { Range3d, Transform } from \"@itwin/core-geometry\";\nimport {\n BatchType, ContentIdProvider, EdgeOptions, ElementAlignedBox3d, ElementGeometryChange, FeatureAppearanceProvider,\n IModelTileTreeId, IModelTileTreeProps, ModelGeometryChanges, RenderSchedule, TileProps\n} from \"@itwin/core-common\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { IModelConnection } from \"../../IModelConnection\";\nimport { GraphicalEditingScope } from \"../../GraphicalEditingScope\";\nimport { RenderSystem } from \"../../render/RenderSystem\";\nimport { GraphicBranch } from \"../../render/GraphicBranch\";\nimport {\n acquireImdlDecoder, DynamicIModelTile, ImdlDecoder, IModelTile, IModelTileParams, iModelTileParamsFromJSON, LayerTileTreeHandler, MapLayerTreeSetting, Tile,\n TileContent, TileDrawArgs, TileLoadPriority, TileParams, TileRequest, TileRequestChannel, TileTree, TileTreeParams\n} from \"../../tile/internal\";\n\nexport interface IModelTileTreeOptions {\n readonly allowInstancing: boolean;\n readonly edges: EdgeOptions | false;\n readonly batchType: BatchType;\n readonly is3d: boolean;\n readonly timeline: RenderSchedule.ModelTimeline | undefined;\n}\n\n// Overrides nothing.\nconst viewFlagOverrides = {};\n\n/** Parameters used to construct an [[IModelTileTree]]\n */\nexport interface IModelTileTreeParams extends TileTreeParams {\n rootTile: TileProps;\n contentIdQualifier?: string;\n geometryGuid?: GuidString;\n maxInitialTilesToSkip?: number;\n formatVersion?: number;\n tileScreenSize: number;\n options: IModelTileTreeOptions;\n transformNodeRanges?: Map<number, Range3d>;\n}\n\nexport function iModelTileTreeParamsFromJSON(props: IModelTileTreeProps, iModel: IModelConnection, modelId: Id64String, options: IModelTileTreeOptions): IModelTileTreeParams {\n const location = Transform.fromJSON(props.location);\n const { formatVersion, id, rootTile, contentIdQualifier, maxInitialTilesToSkip, geometryGuid } = props;\n const tileScreenSize = props.tileScreenSize ?? 512;\n\n let contentRange;\n if (undefined !== props.contentRange)\n contentRange = Range3d.fromJSON<ElementAlignedBox3d>(props.contentRange);\n\n let transformNodeRanges;\n if (props.transformNodeRanges) {\n transformNodeRanges = new Map<number, Range3d>();\n for (const entry of props.transformNodeRanges)\n transformNodeRanges.set(entry.id, Range3d.fromJSON(entry));\n }\n\n const priority = BatchType.Primary === options.batchType ? TileLoadPriority.Primary : TileLoadPriority.Classifier;\n return {\n formatVersion,\n id,\n rootTile,\n iModel,\n location,\n modelId,\n contentRange,\n geometryGuid,\n contentIdQualifier,\n maxInitialTilesToSkip,\n priority,\n options,\n tileScreenSize,\n transformNodeRanges,\n };\n}\n\nfunction findElementChangesForModel(changes: Iterable<ModelGeometryChanges>, modelId: Id64String): Iterable<ElementGeometryChange> | undefined {\n for (const change of changes)\n if (change.id === modelId)\n return change.elements;\n\n return undefined;\n}\n\n/** No graphical editing scope is currently active. */\nclass StaticState {\n public readonly type = \"static\";\n public readonly [Symbol.dispose]!: () => void;\n\n public constructor(root: RootTile) {\n this[Symbol.dispose] = GraphicalEditingScope.onEnter.addOnce((scope: GraphicalEditingScope) => {\n root.transition(new InteractiveState(scope, root));\n });\n }\n}\n\n/** A graphical editing scope is currently active, but no elements in the tile tree's model have been modified. */\nclass InteractiveState {\n public readonly type = \"interactive\";\n public readonly [Symbol.dispose]!: () => void;\n\n public constructor(scope: GraphicalEditingScope, root: RootTile) {\n const removeEndingListener = scope.onExiting.addOnce((_) => {\n root.transition(new StaticState(root));\n });\n\n const removeGeomListener = scope.onGeometryChanges.addListener((changes: Iterable<ModelGeometryChanges>, _scope: GraphicalEditingScope) => {\n assert(scope === _scope);\n const elemChanges = findElementChangesForModel(changes, root.tree.modelId);\n if (elemChanges)\n root.transition(new DynamicState(root, elemChanges, scope));\n });\n\n this[Symbol.dispose] = () => {\n removeEndingListener();\n removeGeomListener();\n };\n }\n}\n\n/** Elements in the tile tree's model have been modified during the current editing scope. */\nclass DynamicState {\n public readonly type = \"dynamic\";\n public readonly rootTile: DynamicIModelTile;\n private readonly _dispose: () => void;\n\n public [Symbol.dispose](): void {\n this._dispose();\n this.rootTile[Symbol.dispose]();\n }\n\n public constructor(root: RootTile, elemChanges: Iterable<ElementGeometryChange>, scope: GraphicalEditingScope) {\n this.rootTile = DynamicIModelTile.create(root, elemChanges);\n\n const removeEndingListener = scope.onExiting.addOnce((_) => {\n root.transition(new StaticState(root));\n });\n\n const removeGeomListener = scope.onGeometryChanges.addListener((changes: Iterable<ModelGeometryChanges>, _scope: GraphicalEditingScope) => {\n assert(scope === _scope);\n const elems = findElementChangesForModel(changes, root.tree.modelId);\n if (elems)\n this.rootTile.handleGeometryChanges(elems);\n });\n\n this._dispose = () => {\n removeEndingListener();\n removeGeomListener();\n };\n }\n}\n\n/** The tile tree has been disposed. */\nclass DisposedState {\n public readonly type = \"disposed\";\n public [Symbol.dispose](): void { }\n}\n\nconst disposedState = new DisposedState();\n\n/** The current state of an [[IModelTileTree]]'s [[RootTile]]. The tile transitions between these states primarily in response to GraphicalEditingScope events. */\ntype RootTileState = StaticState | InteractiveState | DynamicState | DisposedState;\n\n/** The root tile for an [[IModelTileTree]].\n */\nexport type RootIModelTile = Tile & { tileScreenSize: number, updateDynamicRange: (childTile: Tile) => void };\n\n/** Represents the root [[Tile]] of an [[IModelTileTree]]. The root tile has one or two direct child tiles which represent different branches of the tree:\n * - The static branch, containing tiles that represent the state of the model's geometry as of the beginning of the current [[GraphicalEditingScope]].\n * - The dynamic branch, containing tiles representing the geometry of elements that have been modified during the current [[GraphicalEditingScope]].\n * If no editing scope is currently active, the dynamic branch does not exist, and the static branch represents the current state of all elements in the model.\n */\nclass RootTile extends Tile {\n public readonly staticBranch: IModelTile;\n private _tileState: RootTileState;\n private readonly _staticTreeContentRange?: Range3d;\n\n public get tileState(): RootTileState {\n return this._tileState;\n }\n\n public constructor(params: IModelTileParams, tree: IModelTileTree) {\n const rootParams: TileParams = {\n ...params,\n range: params.range.clone(),\n contentRange: params.contentRange?.clone(),\n isLeaf: false,\n contentId: \"\",\n };\n\n super(rootParams, tree);\n this.staticBranch = new IModelTile(params, tree);\n this._staticTreeContentRange = tree.contentRange?.clone();\n\n if (!this._contentRange)\n this._contentRange = this.staticBranch.contentRange.clone();\n\n // Determine initial state.\n const scope = tree.iModel.isBriefcaseConnection() ? tree.iModel.editingScope : undefined;\n if (undefined === scope) {\n this._tileState = new StaticState(this);\n } else {\n const changes = scope.getGeometryChangesForModel(tree.modelId);\n this._tileState = changes ? new DynamicState(this, changes, scope) : new InteractiveState(scope, this);\n }\n\n // Load the children immediately.\n this.setIsReady();\n this.loadChildren();\n }\n\n public override[Symbol.dispose](): void {\n this.transition(disposedState);\n super[Symbol.dispose]();\n }\n\n protected _loadChildren(resolve: (children: Tile[] | undefined) => void, _reject: (error: Error) => void): void {\n const children: Tile[] = [this.staticBranch];\n if (this._tileState.type === \"dynamic\")\n children.push(this._tileState.rootTile);\n\n resolve(children);\n }\n\n public get channel(): TileRequestChannel {\n throw new Error(\"Root iModel tile has no content\");\n }\n\n public async requestContent(_isCanceled: () => boolean): Promise<TileRequest.Response> {\n assert(false, \"Root iModel tile has no content\");\n return undefined;\n }\n\n public async readContent(_data: TileRequest.ResponseData, _system: RenderSystem, _isCanceled: () => boolean): Promise<TileContent> {\n throw new Error(\"Root iModel tile has no content\");\n }\n\n public draw(args: TileDrawArgs, tiles: Tile[], numStaticTiles: number): void {\n assert(numStaticTiles >= 0 && numStaticTiles <= tiles.length);\n\n // Draw the static tiles.\n for (let i = 0; i < numStaticTiles; i++)\n tiles[i].drawGraphics(args);\n\n if (\"dynamic\" !== this._tileState.type || numStaticTiles === tiles.length) {\n if (\"dynamic\" === this._tileState.type)\n args.addAppearanceProvider(this._tileState.rootTile.appearanceProvider);\n\n args.drawGraphics();\n return;\n }\n\n // We need to hide any modified elements in the static tiles. Pull their graphics into a separate branch.\n if (!args.graphics.isEmpty) {\n const staticBranch = new GraphicBranch();\n for (const staticGraphic of args.graphics.entries)\n staticBranch.add(staticGraphic);\n\n let appearanceProvider = this._tileState.rootTile.appearanceProvider;\n if (args.appearanceProvider)\n appearanceProvider = FeatureAppearanceProvider.chain(args.appearanceProvider, appearanceProvider);\n\n args.graphics.clear();\n args.graphics.add(args.context.createGraphicBranch(staticBranch, Transform.createIdentity(), { appearanceProvider }));\n }\n\n // Draw the dynamic tiles.\n for (let i = numStaticTiles; i < tiles.length; i++)\n tiles[i].drawGraphics(args);\n\n args.drawGraphics();\n }\n\n public prune(olderThan: BeTimePoint): void {\n this.staticBranch.pruneChildren(olderThan);\n if (\"dynamic\" === this._tileState.type)\n this._tileState.rootTile.pruneChildren(olderThan);\n }\n\n public transition(newState: RootTileState): void {\n assert(newState.type !== this._tileState.type);\n const resetRange = \"dynamic\" === this._tileState.type;\n\n assert(undefined !== this.children);\n if (\"dynamic\" === this._tileState.type) {\n assert(2 === this.children.length);\n this.children.pop();\n } else if (\"dynamic\" === newState.type) {\n assert(1 === this.children.length);\n this.children.push(newState.rootTile);\n }\n\n this._tileState[Symbol.dispose]();\n this._tileState = newState;\n\n if (resetRange)\n this.resetRange();\n }\n\n private resetRange(): void {\n this.staticBranch.range.clone(this.range);\n this.staticBranch.contentRange.clone(this._contentRange);\n\n if (this._staticTreeContentRange && this.tree.contentRange)\n this._staticTreeContentRange.clone(this.tree.contentRange);\n\n }\n\n public get tileScreenSize(): number {\n return this.staticBranch.iModelTree.tileScreenSize;\n }\n\n public updateDynamicRange(tile: Tile): void {\n this.resetRange();\n if (this._staticTreeContentRange && this.tree.contentRange && !tile.contentRange.isNull)\n this.tree.contentRange.extendRange(tile.contentRange);\n\n if (!tile.range.isNull)\n this.range.extendRange(tile.range);\n\n assert(undefined !== this._contentRange);\n if (!tile.contentRange.isNull)\n this._contentRange.extendRange(tile.contentRange);\n }\n}\n\n/** A TileTree whose contents are derived from geometry stored in a Model in an IModelDb.\n * @internal exported strictly for display-test-app until we remove CommonJS support.\n */\nexport class IModelTileTree extends TileTree {\n public readonly decoder: ImdlDecoder;\n private readonly _rootTile: RootTile;\n private readonly _options: IModelTileTreeOptions;\n private readonly _transformNodeRanges?: Map<number, Range3d>;\n public readonly contentIdQualifier?: string;\n public readonly geometryGuid?: string;\n public readonly maxTilesToSkip: number;\n public readonly maxInitialTilesToSkip: number;\n public readonly contentIdProvider: ContentIdProvider;\n public readonly stringifiedSectionClip?: string;\n public readonly tileScreenSize: number;\n public readonly iModelTileTreeId: IModelTileTreeId;\n /** Strictly for debugging/testing - forces tile selection to halt at the specified depth. */\n public debugMaxDepth?: number;\n /** A little hacky...we must not override selectTiles(), but draw() needs to distinguish between static and dynamic tiles.\n * So _selectTiles() puts the static tiles first in the Tile[] array, and records the number of static tiles selected, to be\n * used by draw().\n */\n private _numStaticTilesSelected = 0;\n public layerImageryTrees: MapLayerTreeSetting[] = [];\n\n private readonly _layerHandler: LayerTileTreeHandler;\n public override get layerHandler() { return this._layerHandler; }\n\n public constructor(params: IModelTileTreeParams, treeId: IModelTileTreeId) {\n super(params);\n this.iModelTileTreeId = treeId;\n this.contentIdQualifier = params.contentIdQualifier;\n this.geometryGuid = params.geometryGuid;\n this.tileScreenSize = params.tileScreenSize;\n this._layerHandler = new LayerTileTreeHandler(this);\n\n if (BatchType.Primary === treeId.type)\n this.stringifiedSectionClip = treeId.sectionCut;\n\n this.maxInitialTilesToSkip = params.maxInitialTilesToSkip ?? 0;\n this.maxTilesToSkip = IModelApp.tileAdmin.maximumLevelsToSkip;\n\n this._options = params.options;\n this._transformNodeRanges = params.transformNodeRanges;\n\n this.contentIdProvider = ContentIdProvider.create(params.options.allowInstancing, IModelApp.tileAdmin, params.formatVersion);\n\n params.rootTile.contentId = this.contentIdProvider.rootContentId;\n this._rootTile = new RootTile(iModelTileParamsFromJSON(params.rootTile, undefined), this);\n\n this.decoder = acquireImdlDecoder({\n type: this.batchType,\n omitEdges: false === this.edgeOptions,\n timeline: this.timeline,\n iModel: this.iModel,\n batchModelId: this.modelId,\n is3d: this.is3d,\n containsTransformNodes: this.containsTransformNodes,\n noWorker: !IModelApp.tileAdmin.decodeImdlInWorker,\n });\n }\n\n public override[Symbol.dispose](): void {\n this.decoder.release();\n super[Symbol.dispose]();\n }\n\n public get maxDepth() { return 32; }\n public get rootTile(): Tile { return this._rootTile; }\n /** Exposed chiefly for tests. */\n public get staticBranch(): IModelTile { return this._rootTile.staticBranch; }\n public get is3d() { return this._options.is3d; }\n public override get isContentUnbounded() { return false; }\n public get viewFlagOverrides() { return viewFlagOverrides; }\n\n public get batchType(): BatchType { return this._options.batchType; }\n public get edgeOptions(): EdgeOptions | false { return this._options.edges; }\n public get timeline(): RenderSchedule.ModelTimeline | undefined { return this._options.timeline; }\n\n public override get loadPriority(): TileLoadPriority {\n // If the model has been modified, we want to prioritize keeping its graphics up to date.\n return this.tileState === \"dynamic\" ? TileLoadPriority.Dynamic : super.loadPriority;\n }\n\n protected _selectTiles(args: TileDrawArgs): Tile[] {\n args.markUsed(this._rootTile);\n const tiles: Tile[] = [];\n this._rootTile.staticBranch.selectTiles(tiles, args, 0);\n this._numStaticTilesSelected = tiles.length;\n\n if (this._rootTile.tileState.type === \"dynamic\")\n this._rootTile.tileState.rootTile.selectTiles(tiles, args);\n\n return tiles;\n }\n\n public draw(args: TileDrawArgs): void {\n const tiles = this.selectTiles(args);\n this._rootTile.draw(args, tiles, this._numStaticTilesSelected);\n this._layerHandler.collectClassifierGraphics(args, tiles);\n }\n\n public prune(): void {\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\n this._rootTile.prune(olderThan);\n }\n\n /** Exposed strictly for tests. */\n public get tileState(): \"static\" | \"dynamic\" | \"interactive\" | \"disposed\" {\n return this._rootTile.tileState.type;\n }\n\n /** Exposed strictly for tests. */\n public get hiddenElements(): Id64Array {\n const state = this._rootTile.tileState;\n return \"dynamic\" === state.type ? state.rootTile.hiddenElements : [];\n }\n\n public getTransformNodeRange(nodeId: number): Range3d | undefined {\n return this._transformNodeRanges?.get(nodeId);\n }\n\n public get containsTransformNodes(): boolean {\n return undefined !== this._transformNodeRanges;\n }\n}"]}
|
|
@@ -8,6 +8,7 @@ import { RenderSystem } from "../../render/RenderSystem";
|
|
|
8
8
|
import type { ImdlTimeline } from "../../common/imdl/ParseImdlDocument";
|
|
9
9
|
import { ImdlReaderResult } from "../../tile/internal";
|
|
10
10
|
import { BatchOptions } from "../../common/render/BatchOptions";
|
|
11
|
+
import { LayerTileData } from "../render/webgl/MapLayerParams";
|
|
11
12
|
/** Arguments supplied to [[ImdlDecoder.decode]].
|
|
12
13
|
*/
|
|
13
14
|
export interface ImdlDecodeArgs {
|
|
@@ -23,6 +24,7 @@ export interface ImdlDecodeArgs {
|
|
|
23
24
|
* with [[GraphicBranch.groupNodeId]] set to the index of the group to which the model belongs.
|
|
24
25
|
*/
|
|
25
26
|
modelGroups?: Id64Set[];
|
|
27
|
+
tileData?: LayerTileData;
|
|
26
28
|
}
|
|
27
29
|
/** An object that can decode graphics in iMdl format.
|
|
28
30
|
* @note decoders are reference-counted. When you are finished using one, call [[release]].
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImdlDecoder.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/ImdlDecoder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAqB,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"ImdlDecoder.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/ImdlDecoder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAqB,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D;GACG;AACH,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,uEAAuE;IACvE,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;GACG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,EAAE,UAAU,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,WAAW,CAc5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImdlDecoder.js","sourceRoot":"","sources":["../../../../src/internal/tile/ImdlDecoder.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAOH,OAAO,EAAE,iBAAiB,EAAoB,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"ImdlDecoder.js","sourceRoot":"","sources":["../../../../src/internal/tile/ImdlDecoder.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAOH,OAAO,EAAE,iBAAiB,EAAoB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA6C3F;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA4B;IAC7D,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE;QAC/B,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,OAAO,eAAe,CAAC;gBACrB,GAAG,IAAI;gBACP,GAAG,UAAU;gBACb,OAAO,EAAE,IAAI,CAAC,YAAY;gBAC1B,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS;gBAC1B,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport type { ByteStream, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport { BatchType } from \"@itwin/core-common\";\nimport type { IModelConnection } from \"../../IModelConnection\";\nimport { RenderSystem } from \"../../render/RenderSystem\";\nimport type { ImdlTimeline } from \"../../common/imdl/ParseImdlDocument\";\nimport { acquireImdlParser, ImdlReaderResult, readImdlContent } from \"../../tile/internal\";\nimport { BatchOptions } from \"../../common/render/BatchOptions\";\nimport { LayerTileData } from \"../render/webgl/MapLayerParams\";\n\n/** Arguments supplied to [[ImdlDecoder.decode]].\n */\nexport interface ImdlDecodeArgs {\n /** The encoded tile content. */\n stream: ByteStream;\n /** The render system used to create graphics from the tile content. */\n system: RenderSystem;\n isLeaf?: boolean;\n sizeMultiplier?: number;\n options?: BatchOptions | false;\n isCanceled?: () => boolean;\n /** An array of model groups. If supplied, the graphics associated with each group of models will be decoded into a separate GraphciBranch\n * with [[GraphicBranch.groupNodeId]] set to the index of the group to which the model belongs.\n */\n modelGroups?: Id64Set[];\n tileData?: LayerTileData;\n}\n\n/** An object that can decode graphics in iMdl format.\n * @note decoders are reference-counted. When you are finished using one, call [[release]].\n * @see [[acquireImdlDecoder]] to acquire a decoder.\n * @internal\n */\nexport interface ImdlDecoder {\n decode(args: ImdlDecodeArgs): Promise<ImdlReaderResult>;\n release(): void;\n}\n\n/** Arguments supplied to [[acquireImdlDecoder]].\n */\nexport interface AcquireImdlDecoderArgs {\n iModel: IModelConnection;\n batchModelId: Id64String;\n is3d: boolean;\n type?: BatchType;\n omitEdges?: boolean;\n containsTransformNodes?: boolean;\n timeline?: ImdlTimeline;\n noWorker?: boolean;\n}\n\n/** Acquire shared ownership of an [[ImdlDecoder]].\n * Decoders are reference-counted, because they make use of reference-counted [[ImdlParser]]s internally.\n * The caller of this function increments the reference count of the decoder and is responsible\n * for decrementing it by calling [[ImdlDecoder.release]] when it is no longer needed. Typically, a decoder's lifetime is tied to the\n * lifetime of some `Disposable` object like a [[TileTree]] - acquired in the constructor, and released in the `[Symbol.dispose]` method.\n * @internal\n */\nexport function acquireImdlDecoder(args: AcquireImdlDecoderArgs): ImdlDecoder {\n const parser = acquireImdlParser(args);\n return {\n release: () => parser.release(),\n decode: async (decodeArgs) => {\n return readImdlContent({\n ...args,\n ...decodeArgs,\n modelId: args.batchModelId,\n loadEdges: !args.omitEdges,\n parseDocument: async (parserOpts) => parser.parse(parserOpts),\n });\n },\n };\n}\n"]}
|
|
@@ -8,7 +8,7 @@ import type { IModelConnection } from "../../IModelConnection";
|
|
|
8
8
|
import { GraphicDescription } from "../../common/render/GraphicDescriptionBuilder";
|
|
9
9
|
import { GraphicDescriptionContext } from "../../common/render/GraphicDescriptionContext";
|
|
10
10
|
import { GraphicTemplate } from "../../render/GraphicTemplate";
|
|
11
|
-
import {
|
|
11
|
+
import { LayerTileData } from "../render/webgl/MapLayerParams";
|
|
12
12
|
/** Options provided to [[decodeImdlContent]].
|
|
13
13
|
*/
|
|
14
14
|
export interface ImdlDecodeOptions {
|
|
@@ -16,7 +16,7 @@ export interface ImdlDecodeOptions {
|
|
|
16
16
|
system: RenderSystem;
|
|
17
17
|
iModel: IModelConnection;
|
|
18
18
|
isCanceled?: () => boolean;
|
|
19
|
-
|
|
19
|
+
tileData?: LayerTileData;
|
|
20
20
|
}
|
|
21
21
|
export declare function decodeImdlGraphics(options: ImdlDecodeOptions): Promise<RenderGraphic | undefined>;
|
|
22
22
|
export declare function createGraphicTemplateFromDescription(descr: GraphicDescription, context: GraphicDescriptionContext, system: RenderSystem): GraphicTemplate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImdlGraphicsCreator.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/ImdlGraphicsCreator.ts"],"names":[],"mappings":"AAIA;;GAEG;AASH,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAEnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAI1F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ImdlGraphicsCreator.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/ImdlGraphicsCreator.ts"],"names":[],"mappings":"AAIA;;GAEG;AASH,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAIhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAEnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAI1F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D;GACG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AA0WD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAuBvG;AAsDD,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe,CA+CzJ;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,YAAY,GAAG,aAAa,GAAG,SAAS,CAG3J"}
|