@itwin/core-frontend 3.1.0-dev.8 → 3.2.0-dev.3
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 +163 -35
- package/lib/cjs/AccuSnap.js +2 -2
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/ApproximateTerrainHeights.d.ts +1 -1
- package/lib/cjs/ApproximateTerrainHeights.d.ts.map +1 -1
- package/lib/cjs/ApproximateTerrainHeights.js +21 -9
- package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
- package/lib/cjs/ApproximateTerrainHeightsProps.d.ts +12 -0
- package/lib/cjs/ApproximateTerrainHeightsProps.d.ts.map +1 -0
- package/lib/cjs/ApproximateTerrainHeightsProps.js +13 -0
- package/lib/cjs/ApproximateTerrainHeightsProps.js.map +1 -0
- package/lib/cjs/CategorySelectorState.js +1 -1
- package/lib/cjs/CategorySelectorState.js.map +1 -1
- package/lib/cjs/DisplayStyleState.d.ts +4 -3
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +32 -8
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/DrawingViewState.d.ts.map +1 -1
- package/lib/cjs/DrawingViewState.js +6 -5
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/FrontendLoggerCategory.d.ts +3 -1
- package/lib/cjs/FrontendLoggerCategory.d.ts.map +1 -1
- package/lib/cjs/FrontendLoggerCategory.js +2 -0
- package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts +8 -4
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +20 -10
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +3 -5
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +4 -10
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/ImageUtil.d.ts.map +1 -1
- package/lib/cjs/ImageUtil.js +8 -14
- package/lib/cjs/ImageUtil.js.map +1 -1
- package/lib/cjs/LocalhostIpcApp.d.ts +2 -0
- package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
- package/lib/cjs/LocalhostIpcApp.js +10 -4
- package/lib/cjs/LocalhostIpcApp.js.map +1 -1
- package/lib/cjs/RealityDataSource.d.ts +60 -14
- package/lib/cjs/RealityDataSource.d.ts.map +1 -1
- package/lib/cjs/RealityDataSource.js +36 -235
- package/lib/cjs/RealityDataSource.js.map +1 -1
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts +67 -0
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -0
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +166 -0
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -0
- package/lib/cjs/RealityDataSourceContextShareImpl.d.ts +83 -0
- package/lib/cjs/RealityDataSourceContextShareImpl.d.ts.map +1 -0
- package/lib/cjs/RealityDataSourceContextShareImpl.js +234 -0
- package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -0
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +65 -0
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -0
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +135 -0
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -0
- package/lib/cjs/SheetViewState.js +4 -0
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/ViewState.d.ts +8 -0
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js +1 -1
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +30 -12
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +43 -1
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/core-frontend.d.ts +6 -4
- package/lib/cjs/core-frontend.d.ts.map +1 -1
- package/lib/cjs/core-frontend.js +6 -4
- package/lib/cjs/core-frontend.js.map +1 -1
- package/lib/cjs/extension/Extension.d.ts +48 -0
- package/lib/cjs/extension/Extension.d.ts.map +1 -0
- package/lib/cjs/extension/Extension.js +18 -0
- package/lib/cjs/extension/Extension.js.map +1 -0
- package/lib/cjs/extension/ExtensionAdmin.d.ts +64 -0
- package/lib/cjs/extension/ExtensionAdmin.d.ts.map +1 -0
- package/lib/cjs/extension/ExtensionAdmin.js +106 -0
- package/lib/cjs/extension/ExtensionAdmin.js.map +1 -0
- package/lib/cjs/extension/ExtensionHost.d.ts +23 -0
- package/lib/cjs/extension/ExtensionHost.d.ts.map +1 -0
- package/lib/cjs/extension/ExtensionHost.js +26 -0
- package/lib/cjs/extension/ExtensionHost.js.map +1 -0
- package/lib/cjs/extension/ExtensionImpl.d.ts +21 -0
- package/lib/cjs/extension/ExtensionImpl.d.ts.map +1 -0
- package/lib/cjs/extension/ExtensionImpl.js +45 -0
- package/lib/cjs/extension/ExtensionImpl.js.map +1 -0
- package/lib/cjs/extension/ExtensionLoader.d.ts +26 -0
- package/lib/cjs/extension/ExtensionLoader.d.ts.map +1 -0
- package/lib/cjs/extension/ExtensionLoader.js +10 -0
- package/lib/cjs/extension/ExtensionLoader.js.map +1 -0
- package/lib/cjs/extension/ExtensionRuntime.d.ts +5 -0
- package/lib/cjs/extension/ExtensionRuntime.d.ts.map +1 -0
- package/lib/cjs/extension/ExtensionRuntime.js +86 -0
- package/lib/cjs/extension/ExtensionRuntime.js.map +1 -0
- package/lib/cjs/extension/extensions.d.ts +19 -0
- package/lib/cjs/extension/extensions.d.ts.map +1 -0
- package/lib/cjs/extension/extensions.js +36 -0
- package/lib/cjs/extension/extensions.js.map +1 -0
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts +2 -2
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +48 -44
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +90 -80
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +85 -45
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts +54 -0
- package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -0
- package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js +32 -0
- package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -0
- package/lib/cjs/quantity-formatting/UnitsData.d.ts +11 -0
- package/lib/cjs/quantity-formatting/UnitsData.d.ts.map +1 -0
- package/lib/cjs/quantity-formatting/UnitsData.js +59 -0
- package/lib/cjs/quantity-formatting/UnitsData.js.map +1 -0
- package/lib/cjs/render/GraphicBranch.d.ts +2 -0
- package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.js.map +1 -1
- package/lib/cjs/render/ParticleCollectionBuilder.d.ts.map +1 -1
- package/lib/cjs/render/ParticleCollectionBuilder.js +16 -9
- package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
- package/lib/cjs/render/RenderPlanarClassifier.d.ts +1 -1
- package/lib/cjs/render/RenderPlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +12 -7
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js +27 -22
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/RenderTarget.d.ts +4 -4
- package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
- package/lib/cjs/render/RenderTarget.js.map +1 -1
- package/lib/cjs/render/Scene.d.ts.map +1 -1
- package/lib/cjs/render/Scene.js.map +1 -1
- package/lib/cjs/render/primitives/EdgeParams.d.ts.map +1 -1
- package/lib/cjs/render/primitives/EdgeParams.js +3 -1
- package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
- package/lib/cjs/render/primitives/PolylineParams.d.ts.map +1 -1
- package/lib/cjs/render/primitives/PolylineParams.js +10 -5
- package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
- package/lib/cjs/render/primitives/VertexKey.d.ts +11 -8
- package/lib/cjs/render/primitives/VertexKey.d.ts.map +1 -1
- package/lib/cjs/render/primitives/VertexKey.js +24 -6
- package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
- package/lib/cjs/render/primitives/VertexTable.d.ts +15 -2
- package/lib/cjs/render/primitives/VertexTable.d.ts.map +1 -1
- package/lib/cjs/render/primitives/VertexTable.js +273 -108
- package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +22 -10
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts +4 -6
- package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilder.js +16 -13
- package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilderMap.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js +12 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +45 -28
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +107 -146
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts +17 -2
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js +39 -2
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +5 -3
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.d.ts +6 -0
- package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.js +6 -0
- package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.d.ts +5 -3
- package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +7 -2
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts +4 -1
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +22 -9
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts +2 -2
- package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js +5 -3
- package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts +31 -11
- package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +155 -52
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js +4 -0
- package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.d.ts +3 -0
- package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +45 -19
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts +8 -7
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +12 -5
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -0
- package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderProgram.js +1 -0
- package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +9 -9
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +5 -5
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/VertexLUT.d.ts +2 -1
- package/lib/cjs/render/webgl/VertexLUT.d.ts.map +1 -1
- package/lib/cjs/render/webgl/VertexLUT.js +4 -3
- package/lib/cjs/render/webgl/VertexLUT.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Color.js +1 -1
- package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Decode.d.ts +6 -0
- package/lib/cjs/render/webgl/glsl/Decode.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Decode.js +18 -1
- package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.js +15 -6
- package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.js +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Polyline.d.ts +2 -2
- package/lib/cjs/render/webgl/glsl/Polyline.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Polyline.js +24 -9
- package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +102 -27
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +18 -19
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Thematic.js +1 -6
- package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.js +31 -14
- package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/cjs/tile/ClassifierTileTree.d.ts +4 -2
- package/lib/cjs/tile/ClassifierTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/ClassifierTileTree.js +31 -16
- package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +22 -3
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +231 -45
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/OPCFormatInterpreter.d.ts +22 -0
- package/lib/cjs/tile/OPCFormatInterpreter.d.ts.map +1 -0
- package/lib/cjs/tile/OPCFormatInterpreter.js +92 -0
- package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -0
- package/lib/cjs/tile/PntsReader.d.ts +1 -1
- package/lib/cjs/tile/PntsReader.d.ts.map +1 -1
- package/lib/cjs/tile/PntsReader.js +170 -36
- package/lib/cjs/tile/PntsReader.js.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.d.ts +18 -2
- package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.js +53 -2
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts +24 -3
- package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +36 -11
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTile.d.ts +16 -2
- package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTile.js +32 -0
- package/lib/cjs/tile/RealityTile.js.map +1 -1
- package/lib/cjs/tile/RealityTileDrawArgs.d.ts +4 -1
- package/lib/cjs/tile/RealityTileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileDrawArgs.js +3 -1
- package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.d.ts +7 -4
- package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +19 -5
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +4 -1
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +11 -3
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts +52 -0
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -0
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +179 -0
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -0
- package/lib/cjs/tile/TileDrawArgs.d.ts +2 -0
- package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +5 -0
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/TileGeometryCollector.d.ts +80 -0
- package/lib/cjs/tile/TileGeometryCollector.d.ts.map +1 -0
- package/lib/cjs/tile/TileGeometryCollector.js +71 -0
- package/lib/cjs/tile/TileGeometryCollector.js.map +1 -0
- package/lib/cjs/tile/TileTree.d.ts +7 -1
- package/lib/cjs/tile/TileTree.d.ts.map +1 -1
- package/lib/cjs/tile/TileTree.js +7 -0
- package/lib/cjs/tile/TileTree.js.map +1 -1
- package/lib/cjs/tile/TileTreeReference.d.ts +26 -1
- package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/TileTreeReference.js +40 -0
- package/lib/cjs/tile/TileTreeReference.js.map +1 -1
- package/lib/cjs/tile/internal.d.ts +4 -0
- package/lib/cjs/tile/internal.d.ts.map +1 -1
- package/lib/cjs/tile/internal.js +4 -0
- package/lib/cjs/tile/internal.js.map +1 -1
- package/lib/cjs/tile/map/BingElevation.d.ts +2 -16
- package/lib/cjs/tile/map/BingElevation.d.ts.map +1 -1
- package/lib/cjs/tile/map/BingElevation.js +1 -63
- package/lib/cjs/tile/map/BingElevation.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +2 -2
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +5 -3
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +45 -12
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +4 -3
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -3
- package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +4 -3
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapFeatureInfo.d.ts +26 -0
- package/lib/cjs/tile/map/MapFeatureInfo.d.ts.map +1 -0
- package/lib/cjs/tile/map/MapFeatureInfo.js +19 -0
- package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -0
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +4 -4
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +3 -3
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +5 -4
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +5 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts +2 -2
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +6 -4
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts +10 -2
- package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerTileTreeReference.js +26 -3
- package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts +12 -10
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +60 -39
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileLoader.d.ts +2 -1
- package/lib/cjs/tile/map/MapTileLoader.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js +4 -1
- package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +18 -8
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +148 -61
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.d.ts +2 -3
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +7 -2
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/tools/ViewTool.d.ts +4 -4
- package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
- package/lib/cjs/tools/ViewTool.js +1 -1
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuSnap.js +2 -2
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/ApproximateTerrainHeights.d.ts +1 -1
- package/lib/esm/ApproximateTerrainHeights.d.ts.map +1 -1
- package/lib/esm/ApproximateTerrainHeights.js +2 -9
- package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
- package/lib/esm/ApproximateTerrainHeightsProps.d.ts +12 -0
- package/lib/esm/ApproximateTerrainHeightsProps.d.ts.map +1 -0
- package/lib/esm/ApproximateTerrainHeightsProps.js +10 -0
- package/lib/esm/ApproximateTerrainHeightsProps.js.map +1 -0
- package/lib/esm/CategorySelectorState.js +1 -1
- package/lib/esm/CategorySelectorState.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts +4 -3
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +34 -10
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/DrawingViewState.d.ts.map +1 -1
- package/lib/esm/DrawingViewState.js +6 -5
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/FrontendLoggerCategory.d.ts +3 -1
- package/lib/esm/FrontendLoggerCategory.d.ts.map +1 -1
- package/lib/esm/FrontendLoggerCategory.js +2 -0
- package/lib/esm/FrontendLoggerCategory.js.map +1 -1
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +8 -4
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +20 -10
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +3 -5
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +5 -11
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/ImageUtil.d.ts.map +1 -1
- package/lib/esm/ImageUtil.js +8 -14
- package/lib/esm/ImageUtil.js.map +1 -1
- package/lib/esm/LocalhostIpcApp.d.ts +2 -0
- package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
- package/lib/esm/LocalhostIpcApp.js +10 -4
- package/lib/esm/LocalhostIpcApp.js.map +1 -1
- package/lib/esm/RealityDataSource.d.ts +60 -14
- package/lib/esm/RealityDataSource.d.ts.map +1 -1
- package/lib/esm/RealityDataSource.js +37 -237
- package/lib/esm/RealityDataSource.js.map +1 -1
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts +67 -0
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -0
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +162 -0
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -0
- package/lib/esm/RealityDataSourceContextShareImpl.d.ts +83 -0
- package/lib/esm/RealityDataSourceContextShareImpl.d.ts.map +1 -0
- package/lib/esm/RealityDataSourceContextShareImpl.js +230 -0
- package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -0
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +65 -0
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -0
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js +131 -0
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -0
- package/lib/esm/SheetViewState.js +4 -0
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/ViewState.d.ts +8 -0
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js +1 -1
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.d.ts +30 -12
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +43 -1
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/core-frontend.d.ts +6 -4
- package/lib/esm/core-frontend.d.ts.map +1 -1
- package/lib/esm/core-frontend.js +6 -4
- package/lib/esm/core-frontend.js.map +1 -1
- package/lib/esm/extension/Extension.d.ts +48 -0
- package/lib/esm/extension/Extension.d.ts.map +1 -0
- package/lib/esm/extension/Extension.js +15 -0
- package/lib/esm/extension/Extension.js.map +1 -0
- package/lib/esm/extension/ExtensionAdmin.d.ts +64 -0
- package/lib/esm/extension/ExtensionAdmin.d.ts.map +1 -0
- package/lib/esm/extension/ExtensionAdmin.js +102 -0
- package/lib/esm/extension/ExtensionAdmin.js.map +1 -0
- package/lib/esm/extension/ExtensionHost.d.ts +23 -0
- package/lib/esm/extension/ExtensionHost.d.ts.map +1 -0
- package/lib/esm/extension/ExtensionHost.js +22 -0
- package/lib/esm/extension/ExtensionHost.js.map +1 -0
- package/lib/esm/extension/ExtensionImpl.d.ts +21 -0
- package/lib/esm/extension/ExtensionImpl.d.ts.map +1 -0
- package/lib/esm/extension/ExtensionImpl.js +40 -0
- package/lib/esm/extension/ExtensionImpl.js.map +1 -0
- package/lib/esm/extension/ExtensionLoader.d.ts +26 -0
- package/lib/esm/extension/ExtensionLoader.d.ts.map +1 -0
- package/lib/esm/extension/ExtensionLoader.js +9 -0
- package/lib/esm/extension/ExtensionLoader.js.map +1 -0
- package/lib/esm/extension/ExtensionRuntime.d.ts +5 -0
- package/lib/esm/extension/ExtensionRuntime.d.ts.map +1 -0
- package/lib/esm/extension/ExtensionRuntime.js +84 -0
- package/lib/esm/extension/ExtensionRuntime.js.map +1 -0
- package/lib/esm/extension/extensions.d.ts +19 -0
- package/lib/esm/extension/extensions.d.ts.map +1 -0
- package/lib/esm/extension/extensions.js +24 -0
- package/lib/esm/extension/extensions.js.map +1 -0
- package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts +2 -2
- package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/BasicUnitsProvider.js +48 -44
- package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +90 -80
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +85 -42
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts +54 -0
- package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -0
- package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js +26 -0
- package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -0
- package/lib/esm/quantity-formatting/UnitsData.d.ts +11 -0
- package/lib/esm/quantity-formatting/UnitsData.d.ts.map +1 -0
- package/lib/esm/quantity-formatting/UnitsData.js +56 -0
- package/lib/esm/quantity-formatting/UnitsData.js.map +1 -0
- package/lib/esm/render/GraphicBranch.d.ts +2 -0
- package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.js.map +1 -1
- package/lib/esm/render/ParticleCollectionBuilder.d.ts.map +1 -1
- package/lib/esm/render/ParticleCollectionBuilder.js +17 -10
- package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
- package/lib/esm/render/RenderPlanarClassifier.d.ts +1 -1
- package/lib/esm/render/RenderPlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +12 -7
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js +25 -20
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/RenderTarget.d.ts +4 -4
- package/lib/esm/render/RenderTarget.d.ts.map +1 -1
- package/lib/esm/render/RenderTarget.js.map +1 -1
- package/lib/esm/render/Scene.d.ts.map +1 -1
- package/lib/esm/render/Scene.js.map +1 -1
- package/lib/esm/render/primitives/EdgeParams.d.ts.map +1 -1
- package/lib/esm/render/primitives/EdgeParams.js +3 -1
- package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
- package/lib/esm/render/primitives/PolylineParams.d.ts.map +1 -1
- package/lib/esm/render/primitives/PolylineParams.js +11 -6
- package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
- package/lib/esm/render/primitives/VertexKey.d.ts +11 -8
- package/lib/esm/render/primitives/VertexKey.d.ts.map +1 -1
- package/lib/esm/render/primitives/VertexKey.js +24 -6
- package/lib/esm/render/primitives/VertexKey.js.map +1 -1
- package/lib/esm/render/primitives/VertexTable.d.ts +15 -2
- package/lib/esm/render/primitives/VertexTable.d.ts.map +1 -1
- package/lib/esm/render/primitives/VertexTable.js +274 -109
- package/lib/esm/render/primitives/VertexTable.js.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +23 -11
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts +4 -6
- package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilder.js +17 -14
- package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilderMap.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilderMap.js +12 -1
- package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +45 -28
- package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js +108 -144
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts +17 -2
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js +39 -2
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.d.ts +2 -0
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +5 -3
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.d.ts +6 -0
- package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.js +6 -0
- package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +1 -1
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.d.ts +5 -3
- package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +7 -2
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.d.ts +4 -1
- package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +22 -9
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.d.ts +2 -2
- package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js +5 -3
- package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts +31 -11
- package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +155 -52
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.js +4 -0
- package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts +3 -0
- package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +45 -19
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.d.ts +8 -7
- package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +12 -5
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -0
- package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderProgram.js +1 -0
- package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +9 -9
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +6 -6
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/VertexLUT.d.ts +2 -1
- package/lib/esm/render/webgl/VertexLUT.d.ts.map +1 -1
- package/lib/esm/render/webgl/VertexLUT.js +4 -3
- package/lib/esm/render/webgl/VertexLUT.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Color.js +1 -1
- package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Decode.d.ts +6 -0
- package/lib/esm/render/webgl/glsl/Decode.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Decode.js +17 -0
- package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Edge.js +15 -6
- package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/esm/render/webgl/glsl/PlanarClassification.js +1 -1
- package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/esm/render/webgl/glsl/PointString.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/PointString.js +1 -1
- package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Polyline.d.ts +2 -2
- package/lib/esm/render/webgl/glsl/Polyline.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Polyline.js +24 -9
- package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +103 -28
- package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +18 -19
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Thematic.js +1 -6
- package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.js +32 -15
- package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/esm/tile/ClassifierTileTree.d.ts +4 -2
- package/lib/esm/tile/ClassifierTileTree.d.ts.map +1 -1
- package/lib/esm/tile/ClassifierTileTree.js +32 -17
- package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +22 -3
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +215 -48
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/OPCFormatInterpreter.d.ts +22 -0
- package/lib/esm/tile/OPCFormatInterpreter.d.ts.map +1 -0
- package/lib/esm/tile/OPCFormatInterpreter.js +88 -0
- package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -0
- package/lib/esm/tile/PntsReader.d.ts +1 -1
- package/lib/esm/tile/PntsReader.d.ts.map +1 -1
- package/lib/esm/tile/PntsReader.js +154 -39
- package/lib/esm/tile/PntsReader.js.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.d.ts +18 -2
- package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.js +51 -2
- package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts +24 -3
- package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +36 -12
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTile.d.ts +16 -2
- package/lib/esm/tile/RealityTile.d.ts.map +1 -1
- package/lib/esm/tile/RealityTile.js +32 -0
- package/lib/esm/tile/RealityTile.js.map +1 -1
- package/lib/esm/tile/RealityTileDrawArgs.d.ts +4 -1
- package/lib/esm/tile/RealityTileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileDrawArgs.js +3 -1
- package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.d.ts +7 -4
- package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +19 -5
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +4 -1
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +13 -5
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts +52 -0
- package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -0
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js +175 -0
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -0
- package/lib/esm/tile/TileDrawArgs.d.ts +2 -0
- package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +5 -0
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/TileGeometryCollector.d.ts +80 -0
- package/lib/esm/tile/TileGeometryCollector.d.ts.map +1 -0
- package/lib/esm/tile/TileGeometryCollector.js +67 -0
- package/lib/esm/tile/TileGeometryCollector.js.map +1 -0
- package/lib/esm/tile/TileTree.d.ts +7 -1
- package/lib/esm/tile/TileTree.d.ts.map +1 -1
- package/lib/esm/tile/TileTree.js +7 -0
- package/lib/esm/tile/TileTree.js.map +1 -1
- package/lib/esm/tile/TileTreeReference.d.ts +26 -1
- package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/TileTreeReference.js +42 -2
- package/lib/esm/tile/TileTreeReference.js.map +1 -1
- package/lib/esm/tile/internal.d.ts +4 -0
- package/lib/esm/tile/internal.d.ts.map +1 -1
- package/lib/esm/tile/internal.js +4 -0
- package/lib/esm/tile/internal.js.map +1 -1
- package/lib/esm/tile/map/BingElevation.d.ts +2 -16
- package/lib/esm/tile/map/BingElevation.d.ts.map +1 -1
- package/lib/esm/tile/map/BingElevation.js +1 -63
- package/lib/esm/tile/map/BingElevation.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +2 -2
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +5 -3
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +46 -13
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +4 -3
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -3
- package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +4 -3
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapFeatureInfo.d.ts +26 -0
- package/lib/esm/tile/map/MapFeatureInfo.d.ts.map +1 -0
- package/lib/esm/tile/map/MapFeatureInfo.js +15 -0
- package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -0
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +4 -4
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +3 -3
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +5 -4
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +5 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts +2 -2
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +6 -4
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts +10 -2
- package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerTileTreeReference.js +25 -3
- package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts +12 -10
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +60 -39
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileLoader.d.ts +2 -1
- package/lib/esm/tile/map/MapTileLoader.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileLoader.js +4 -1
- package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +18 -8
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +150 -63
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js +2 -2
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.d.ts +2 -3
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +8 -3
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/tools/ViewTool.d.ts +4 -4
- package/lib/esm/tools/ViewTool.d.ts.map +1 -1
- package/lib/esm/tools/ViewTool.js +1 -1
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/package.json +22 -20
- package/lib/cjs/tile/DracoDecoder.d.ts +0 -20
- package/lib/cjs/tile/DracoDecoder.d.ts.map +0 -1
- package/lib/cjs/tile/DracoDecoder.js +0 -169
- package/lib/cjs/tile/DracoDecoder.js.map +0 -1
- package/lib/esm/tile/DracoDecoder.d.ts +0 -20
- package/lib/esm/tile/DracoDecoder.d.ts.map +0 -1
- package/lib/esm/tile/DracoDecoder.js +0 -165
- package/lib/esm/tile/DracoDecoder.js.map +0 -1
- package/lib/public/assets/approximateTerrainHeights.json +0 -1
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.GeometryAccumulator = void 0;
|
|
11
11
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
12
|
const core_geometry_1 = require("@itwin/core-geometry");
|
|
13
|
+
const core_common_1 = require("@itwin/core-common");
|
|
13
14
|
const GraphicBranch_1 = require("../../GraphicBranch");
|
|
14
15
|
const MeshBuilderMap_1 = require("../mesh/MeshBuilderMap");
|
|
15
16
|
const MeshPrimitives_1 = require("../mesh/MeshPrimitives");
|
|
@@ -132,27 +133,38 @@ class GeometryAccumulator {
|
|
|
132
133
|
const meshes = this.toMeshes(options, tolerance, pickableId);
|
|
133
134
|
if (0 === meshes.length)
|
|
134
135
|
return undefined;
|
|
135
|
-
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
136
|
+
// If the meshes contain quantized positions, they are all quantized to the same range. If that range is small relative to the distance
|
|
137
|
+
// from the origin, quantization errors can produce display artifacts. Remove the translation from the quantization parameters and apply
|
|
138
|
+
// it in the transform instead.
|
|
139
|
+
//
|
|
140
|
+
// If the positions are not quantized, they have already been transformed to be relative to the center of the meshes' range.
|
|
141
|
+
// Apply the inverse translation to put them back into model space.
|
|
139
142
|
const branch = new GraphicBranch_1.GraphicBranch(true);
|
|
140
|
-
|
|
143
|
+
let transformOrigin;
|
|
141
144
|
for (const mesh of meshes) {
|
|
142
145
|
const verts = mesh.points;
|
|
143
146
|
if (branch.isEmpty) {
|
|
144
|
-
|
|
147
|
+
(0, core_bentley_1.assert)(transformOrigin === undefined);
|
|
148
|
+
if (verts instanceof core_common_1.QPoint3dList) {
|
|
149
|
+
transformOrigin = verts.params.origin.clone();
|
|
150
|
+
verts.params.origin.setZero();
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
transformOrigin = verts.range.center;
|
|
154
|
+
}
|
|
145
155
|
}
|
|
146
156
|
else {
|
|
147
|
-
(0, core_bentley_1.assert)(
|
|
157
|
+
(0, core_bentley_1.assert)(undefined !== transformOrigin);
|
|
158
|
+
(0, core_bentley_1.assert)((verts instanceof core_common_1.QPoint3dList && transformOrigin.isAlmostEqual(verts.params.origin))
|
|
159
|
+
|| (!(verts instanceof core_common_1.QPoint3dList) && transformOrigin.isAlmostEqual(verts.range.center)));
|
|
148
160
|
}
|
|
149
|
-
|
|
150
|
-
const graphic = mesh.getGraphics(args, this.system, this._viewIndependentOrigin);
|
|
161
|
+
const graphic = mesh.getGraphics(this.system, this._viewIndependentOrigin);
|
|
151
162
|
if (undefined !== graphic)
|
|
152
163
|
branch.add(graphic);
|
|
153
164
|
}
|
|
154
165
|
if (!branch.isEmpty) {
|
|
155
|
-
|
|
166
|
+
(0, core_bentley_1.assert)(undefined !== transformOrigin);
|
|
167
|
+
const transform = core_geometry_1.Transform.createTranslation(transformOrigin);
|
|
156
168
|
graphics.push(this.system.createBranch(branch, transform));
|
|
157
169
|
}
|
|
158
170
|
return meshes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeometryAccumulator.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { IndexedPolyface, Loop, Path, Point3d, Range3d, SolidPrimitive, Transform } from \"@itwin/core-geometry\";\r\nimport { AnalysisStyleDisplacement } from \"@itwin/core-common\";\r\nimport { GraphicBranch } from \"../../GraphicBranch\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { MeshBuilderMap } from \"../mesh/MeshBuilderMap\";\r\nimport { MeshGraphicArgs, MeshList } from \"../mesh/MeshPrimitives\";\r\nimport { GeometryOptions } from \"../Primitives\";\r\nimport { GeometryList } from \"./GeometryList\";\r\nimport { Geometry, PrimitiveGeometryType } from \"./GeometryPrimitives\";\r\nimport { IModelApp } from \"../../../IModelApp\";\r\n\r\n/** @internal */\r\nexport class GeometryAccumulator {\r\n private _transform: Transform;\r\n private _surfacesOnly: boolean;\r\n private readonly _analysisDisplacement?: AnalysisStyleDisplacement;\r\n private readonly _viewIndependentOrigin?: Point3d;\r\n\r\n public readonly tileRange: Range3d;\r\n public readonly geometries: GeometryList = new GeometryList();\r\n public readonly system: RenderSystem;\r\n\r\n public get surfacesOnly(): boolean { return this._surfacesOnly; }\r\n public get transform(): Transform { return this._transform; }\r\n public get isEmpty(): boolean { return this.geometries.isEmpty; }\r\n public get haveTransform(): boolean { return !this._transform.isIdentity; }\r\n\r\n public constructor(options?: {\r\n system?: RenderSystem;\r\n surfacesOnly?: boolean;\r\n transform?: Transform;\r\n tileRange?: Range3d;\r\n analysisStyleDisplacement?: AnalysisStyleDisplacement;\r\n viewIndependentOrigin?: Point3d;\r\n }) {\r\n this.system = options?.system ?? IModelApp.renderSystem;\r\n this.tileRange = options?.tileRange ?? Range3d.createNull();\r\n this._surfacesOnly = true === options?.surfacesOnly;\r\n this._transform = options?.transform ?? Transform.createIdentity();\r\n this._analysisDisplacement = options?.analysisStyleDisplacement;\r\n this._viewIndependentOrigin = options?.viewIndependentOrigin;\r\n }\r\n\r\n private getPrimitiveRange(geom: PrimitiveGeometryType): Range3d | undefined {\r\n const range = new Range3d();\r\n geom.range(undefined, range);\r\n return range.isNull ? undefined : range;\r\n }\r\n\r\n private calculateTransform(transform: Transform, range: Range3d): Transform {\r\n if (this.haveTransform)\r\n transform = this._transform.multiplyTransformTransform(transform);\r\n\r\n transform.multiplyRange(range, range);\r\n return transform;\r\n }\r\n\r\n public addLoop(loop: Loop, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\r\n const range = this.getPrimitiveRange(loop);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromLoop(loop, xform, range, displayParams, disjoint));\r\n }\r\n\r\n public addLineString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\r\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\r\n const range = Range3d.createNull();\r\n range.extendArray(pts, undefined);\r\n if (range.isNull)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromLineString(pts, xform, range, displayParams));\r\n }\r\n\r\n public addPointString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\r\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\r\n const range = Range3d.createNull();\r\n range.extendArray(pts, undefined);\r\n if (range.isNull)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPointString(pts, xform, range, displayParams));\r\n }\r\n\r\n public addPath(path: Path, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\r\n const range = this.getPrimitiveRange(path);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPath(path, xform, range, displayParams, disjoint));\r\n }\r\n\r\n public addPolyface(pf: IndexedPolyface, displayParams: DisplayParams, transform: Transform): boolean {\r\n // Adjust the mesh range based on displacements applied to vertices by analysis style, if applicable.\r\n let range;\r\n if (this._analysisDisplacement) {\r\n const channel = pf.data.auxData?.channels.find((x) => x.name === this._analysisDisplacement!.channelName);\r\n const displacementRange = channel?.computeDisplacementRange(this._analysisDisplacement.scale);\r\n if (displacementRange && !displacementRange.isNull) {\r\n range = Range3d.createNull();\r\n const pt = new Point3d();\r\n for (let i = 0; i < pf.data.point.length; i++) {\r\n pf.data.point.getPoint3dAtUncheckedPointIndex(i, pt);\r\n range.extendXYZ(pt.x + displacementRange.low.x, pt.y + displacementRange.low.y, pt.z + displacementRange.low.z);\r\n range.extendXYZ(pt.x + displacementRange.high.x, pt.y + displacementRange.high.y, pt.z + displacementRange.high.z);\r\n }\r\n }\r\n }\r\n\r\n if (!range && !(range = this.getPrimitiveRange(pf)))\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPolyface(pf, xform, range, displayParams));\r\n }\r\n\r\n public addSolidPrimitive(primitive: SolidPrimitive, displayParams: DisplayParams, transform: Transform): boolean {\r\n const range = this.getPrimitiveRange(primitive);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromSolidPrimitive(primitive, xform, range, displayParams));\r\n }\r\n\r\n public addGeometry(geom: Geometry): boolean { this.geometries.push(geom); return true; }\r\n\r\n public clear(): void { this.geometries.clear(); }\r\n\r\n /**\r\n * Generates a MeshBuilderMap\r\n * native: GeometryAccumulator::ToMeshBuilderMap(GeometryOptionsCR options, double tolerance, FeatureTableP featureTable, ViewContextR context) const\r\n * note : removed featureTable, ViewContext\r\n * @param tolerance should derive from Viewport.getPixelSizeAtPoint\r\n */\r\n public toMeshBuilderMap(options: GeometryOptions, tolerance: number, pickableId?: string): MeshBuilderMap {\r\n const { geometries } = this; // declare internal dependencies\r\n\r\n const range = geometries.computeRange();\r\n const is2d = !range.isNull && range.isAlmostZeroZ;\r\n\r\n return MeshBuilderMap.createFromGeometries(geometries, tolerance, range, is2d, options, pickableId);\r\n }\r\n\r\n public toMeshes(options: GeometryOptions, tolerance: number, pickableId?: string): MeshList {\r\n if (this.geometries.isEmpty)\r\n return new MeshList();\r\n\r\n const builderMap = this.toMeshBuilderMap(options, tolerance, pickableId);\r\n return builderMap.toMeshes();\r\n }\r\n\r\n /**\r\n * Populate a list of Graphic objects from the accumulated Geometry objects.\r\n * removed ViewContext\r\n */\r\n public saveToGraphicList(graphics: RenderGraphic[], options: GeometryOptions, tolerance: number, pickableId?: string): MeshList | undefined {\r\n const meshes = this.toMeshes(options, tolerance, pickableId);\r\n if (0 === meshes.length)\r\n return undefined;\r\n\r\n const args = new MeshGraphicArgs();\r\n\r\n // All of the meshes are quantized to the same range.\r\n // If that range is small relative to the distance from the origin, quantization errors can produce display artifacts.\r\n // Remove the translation from the quantization parameters and apply it in the transform instead.\r\n const branch = new GraphicBranch(true);\r\n const qorigin = new Point3d();\r\n\r\n for (const mesh of meshes) {\r\n const verts = mesh.points;\r\n if (branch.isEmpty) {\r\n qorigin.setFrom(verts.params.origin);\r\n } else {\r\n assert(verts.params.origin.isAlmostEqual(qorigin));\r\n }\r\n\r\n verts.params.origin.setZero();\r\n\r\n const graphic = mesh.getGraphics(args, this.system, this._viewIndependentOrigin);\r\n if (undefined !== graphic)\r\n branch.add(graphic);\r\n }\r\n\r\n if (!branch.isEmpty) {\r\n const transform = Transform.createTranslationXYZ(qorigin.x, qorigin.y, qorigin.z);\r\n graphics.push(this.system.createBranch(branch, transform));\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"GeometryAccumulator.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { IndexedPolyface, Loop, Path, Point3d, Range3d, SolidPrimitive, Transform } from \"@itwin/core-geometry\";\r\nimport { AnalysisStyleDisplacement, QPoint3dList } from \"@itwin/core-common\";\r\nimport { GraphicBranch } from \"../../GraphicBranch\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { MeshBuilderMap } from \"../mesh/MeshBuilderMap\";\r\nimport { MeshList } from \"../mesh/MeshPrimitives\";\r\nimport { GeometryOptions } from \"../Primitives\";\r\nimport { GeometryList } from \"./GeometryList\";\r\nimport { Geometry, PrimitiveGeometryType } from \"./GeometryPrimitives\";\r\nimport { IModelApp } from \"../../../IModelApp\";\r\n\r\n/** @internal */\r\nexport class GeometryAccumulator {\r\n private _transform: Transform;\r\n private _surfacesOnly: boolean;\r\n private readonly _analysisDisplacement?: AnalysisStyleDisplacement;\r\n private readonly _viewIndependentOrigin?: Point3d;\r\n\r\n public readonly tileRange: Range3d;\r\n public readonly geometries: GeometryList = new GeometryList();\r\n public readonly system: RenderSystem;\r\n\r\n public get surfacesOnly(): boolean { return this._surfacesOnly; }\r\n public get transform(): Transform { return this._transform; }\r\n public get isEmpty(): boolean { return this.geometries.isEmpty; }\r\n public get haveTransform(): boolean { return !this._transform.isIdentity; }\r\n\r\n public constructor(options?: {\r\n system?: RenderSystem;\r\n surfacesOnly?: boolean;\r\n transform?: Transform;\r\n tileRange?: Range3d;\r\n analysisStyleDisplacement?: AnalysisStyleDisplacement;\r\n viewIndependentOrigin?: Point3d;\r\n }) {\r\n this.system = options?.system ?? IModelApp.renderSystem;\r\n this.tileRange = options?.tileRange ?? Range3d.createNull();\r\n this._surfacesOnly = true === options?.surfacesOnly;\r\n this._transform = options?.transform ?? Transform.createIdentity();\r\n this._analysisDisplacement = options?.analysisStyleDisplacement;\r\n this._viewIndependentOrigin = options?.viewIndependentOrigin;\r\n }\r\n\r\n private getPrimitiveRange(geom: PrimitiveGeometryType): Range3d | undefined {\r\n const range = new Range3d();\r\n geom.range(undefined, range);\r\n return range.isNull ? undefined : range;\r\n }\r\n\r\n private calculateTransform(transform: Transform, range: Range3d): Transform {\r\n if (this.haveTransform)\r\n transform = this._transform.multiplyTransformTransform(transform);\r\n\r\n transform.multiplyRange(range, range);\r\n return transform;\r\n }\r\n\r\n public addLoop(loop: Loop, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\r\n const range = this.getPrimitiveRange(loop);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromLoop(loop, xform, range, displayParams, disjoint));\r\n }\r\n\r\n public addLineString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\r\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\r\n const range = Range3d.createNull();\r\n range.extendArray(pts, undefined);\r\n if (range.isNull)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromLineString(pts, xform, range, displayParams));\r\n }\r\n\r\n public addPointString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\r\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\r\n const range = Range3d.createNull();\r\n range.extendArray(pts, undefined);\r\n if (range.isNull)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPointString(pts, xform, range, displayParams));\r\n }\r\n\r\n public addPath(path: Path, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\r\n const range = this.getPrimitiveRange(path);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPath(path, xform, range, displayParams, disjoint));\r\n }\r\n\r\n public addPolyface(pf: IndexedPolyface, displayParams: DisplayParams, transform: Transform): boolean {\r\n // Adjust the mesh range based on displacements applied to vertices by analysis style, if applicable.\r\n let range;\r\n if (this._analysisDisplacement) {\r\n const channel = pf.data.auxData?.channels.find((x) => x.name === this._analysisDisplacement!.channelName);\r\n const displacementRange = channel?.computeDisplacementRange(this._analysisDisplacement.scale);\r\n if (displacementRange && !displacementRange.isNull) {\r\n range = Range3d.createNull();\r\n const pt = new Point3d();\r\n for (let i = 0; i < pf.data.point.length; i++) {\r\n pf.data.point.getPoint3dAtUncheckedPointIndex(i, pt);\r\n range.extendXYZ(pt.x + displacementRange.low.x, pt.y + displacementRange.low.y, pt.z + displacementRange.low.z);\r\n range.extendXYZ(pt.x + displacementRange.high.x, pt.y + displacementRange.high.y, pt.z + displacementRange.high.z);\r\n }\r\n }\r\n }\r\n\r\n if (!range && !(range = this.getPrimitiveRange(pf)))\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPolyface(pf, xform, range, displayParams));\r\n }\r\n\r\n public addSolidPrimitive(primitive: SolidPrimitive, displayParams: DisplayParams, transform: Transform): boolean {\r\n const range = this.getPrimitiveRange(primitive);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromSolidPrimitive(primitive, xform, range, displayParams));\r\n }\r\n\r\n public addGeometry(geom: Geometry): boolean { this.geometries.push(geom); return true; }\r\n\r\n public clear(): void { this.geometries.clear(); }\r\n\r\n /**\r\n * Generates a MeshBuilderMap\r\n * native: GeometryAccumulator::ToMeshBuilderMap(GeometryOptionsCR options, double tolerance, FeatureTableP featureTable, ViewContextR context) const\r\n * note : removed featureTable, ViewContext\r\n * @param tolerance should derive from Viewport.getPixelSizeAtPoint\r\n */\r\n public toMeshBuilderMap(options: GeometryOptions, tolerance: number, pickableId?: string): MeshBuilderMap {\r\n const { geometries } = this; // declare internal dependencies\r\n\r\n const range = geometries.computeRange();\r\n const is2d = !range.isNull && range.isAlmostZeroZ;\r\n\r\n return MeshBuilderMap.createFromGeometries(geometries, tolerance, range, is2d, options, pickableId);\r\n }\r\n\r\n public toMeshes(options: GeometryOptions, tolerance: number, pickableId?: string): MeshList {\r\n if (this.geometries.isEmpty)\r\n return new MeshList();\r\n\r\n const builderMap = this.toMeshBuilderMap(options, tolerance, pickableId);\r\n return builderMap.toMeshes();\r\n }\r\n\r\n /**\r\n * Populate a list of Graphic objects from the accumulated Geometry objects.\r\n * removed ViewContext\r\n */\r\n public saveToGraphicList(graphics: RenderGraphic[], options: GeometryOptions, tolerance: number, pickableId?: string): MeshList | undefined {\r\n const meshes = this.toMeshes(options, tolerance, pickableId);\r\n if (0 === meshes.length)\r\n return undefined;\r\n\r\n // If the meshes contain quantized positions, they are all quantized to the same range. If that range is small relative to the distance\r\n // from the origin, quantization errors can produce display artifacts. Remove the translation from the quantization parameters and apply\r\n // it in the transform instead.\r\n //\r\n // If the positions are not quantized, they have already been transformed to be relative to the center of the meshes' range.\r\n // Apply the inverse translation to put them back into model space.\r\n const branch = new GraphicBranch(true);\r\n let transformOrigin: Point3d | undefined;\r\n\r\n for (const mesh of meshes) {\r\n const verts = mesh.points;\r\n if (branch.isEmpty) {\r\n assert(transformOrigin === undefined);\r\n if (verts instanceof QPoint3dList) {\r\n transformOrigin = verts.params.origin.clone();\r\n verts.params.origin.setZero();\r\n } else {\r\n transformOrigin = verts.range.center;\r\n }\r\n } else {\r\n assert(undefined !== transformOrigin);\r\n assert((verts instanceof QPoint3dList && transformOrigin.isAlmostEqual(verts.params.origin))\r\n || (!(verts instanceof QPoint3dList) && transformOrigin.isAlmostEqual(verts.range.center)));\r\n }\r\n\r\n const graphic = mesh.getGraphics(this.system, this._viewIndependentOrigin);\r\n if (undefined !== graphic)\r\n branch.add(graphic);\r\n }\r\n\r\n if (!branch.isEmpty) {\r\n assert(undefined !== transformOrigin);\r\n const transform = Transform.createTranslation(transformOrigin);\r\n graphics.push(this.system.createBranch(branch, transform));\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module Rendering
|
|
3
3
|
*/
|
|
4
4
|
import { IndexedPolyface, Point3d, Polyface, PolyfaceVisitor, Range3d } from "@itwin/core-geometry";
|
|
5
|
-
import {
|
|
5
|
+
import { TextureMapping } from "@itwin/core-common";
|
|
6
6
|
import { DisplayParams } from "../DisplayParams";
|
|
7
7
|
import { Triangle, TriangleSet } from "../Primitives";
|
|
8
8
|
import { StrokesPrimitivePointLists } from "../Strokes";
|
|
@@ -13,7 +13,7 @@ declare type VertexKeyPropsWithIndex = VertexKeyProps & {
|
|
|
13
13
|
};
|
|
14
14
|
/** @internal */
|
|
15
15
|
export declare class MeshBuilder {
|
|
16
|
-
|
|
16
|
+
readonly vertexMap: VertexMap;
|
|
17
17
|
private _triangleSet?;
|
|
18
18
|
private _currentPolyface?;
|
|
19
19
|
readonly mesh: Mesh;
|
|
@@ -22,8 +22,6 @@ export declare class MeshBuilder {
|
|
|
22
22
|
readonly tileRange: Range3d;
|
|
23
23
|
get currentPolyface(): MeshBuilderPolyface | undefined;
|
|
24
24
|
set displayParams(params: DisplayParams);
|
|
25
|
-
/** create reference for vertexMap on demand */
|
|
26
|
-
get vertexMap(): VertexMap;
|
|
27
25
|
/** create reference for triangleSet on demand */
|
|
28
26
|
get triangleSet(): TriangleSet;
|
|
29
27
|
private constructor();
|
|
@@ -50,9 +48,9 @@ export declare class MeshBuilder {
|
|
|
50
48
|
createTriangleVertices(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions): VertexKeyPropsWithIndex[] | undefined;
|
|
51
49
|
createTriangle(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions): Triangle | undefined;
|
|
52
50
|
/** removed Feature for now */
|
|
53
|
-
addPolyline(
|
|
51
|
+
addPolyline(points: Point3d[], fillColor: number): void;
|
|
54
52
|
/** removed Feature for now */
|
|
55
|
-
addPointString(
|
|
53
|
+
addPointString(points: Point3d[], fillColor: number): void;
|
|
56
54
|
beginPolyface(polyface: Polyface, options: MeshEdgeCreationOptions): void;
|
|
57
55
|
endPolyface(): void;
|
|
58
56
|
addVertex(vertex: VertexKeyProps, addToMeshOnInsert?: boolean): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAS,eAAe,EAAW,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAY,MAAM,sBAAsB,CAAC;AAC9H,OAAO,
|
|
1
|
+
{"version":3,"file":"MeshBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,15 +21,19 @@ class MeshBuilder {
|
|
|
21
21
|
this.tolerance = tolerance;
|
|
22
22
|
this.areaTolerance = areaTolerance;
|
|
23
23
|
this.tileRange = tileRange;
|
|
24
|
+
let vertexTolerance;
|
|
25
|
+
if (mesh.points instanceof core_common_1.QPoint3dList) {
|
|
26
|
+
const p0 = mesh.points.params.unquantize(0, 0, 0);
|
|
27
|
+
const p1 = mesh.points.params.unquantize(1, 1, 1);
|
|
28
|
+
vertexTolerance = p1.minus(p0, p0);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
vertexTolerance = { x: tolerance, y: tolerance, z: tolerance };
|
|
32
|
+
}
|
|
33
|
+
this.vertexMap = new VertexKey_1.VertexMap(vertexTolerance);
|
|
24
34
|
}
|
|
25
35
|
get currentPolyface() { return this._currentPolyface; }
|
|
26
36
|
set displayParams(params) { this.mesh.displayParams = params; }
|
|
27
|
-
/** create reference for vertexMap on demand */
|
|
28
|
-
get vertexMap() {
|
|
29
|
-
if (undefined === this._vertexMap)
|
|
30
|
-
this._vertexMap = new VertexKey_1.VertexMap();
|
|
31
|
-
return this._vertexMap;
|
|
32
|
-
}
|
|
33
37
|
/** create reference for triangleSet on demand */
|
|
34
38
|
get triangleSet() {
|
|
35
39
|
if (undefined === this._triangleSet)
|
|
@@ -95,7 +99,6 @@ class MeshBuilder {
|
|
|
95
99
|
createTriangleVertices(triangleIndex, visitor, options) {
|
|
96
100
|
const { point, requireNormals } = visitor;
|
|
97
101
|
const { fillColor, haveParam } = options;
|
|
98
|
-
const qPointParams = this.mesh.points.params;
|
|
99
102
|
// If we do not have UVParams stored on the IndexedPolyface, compute them now
|
|
100
103
|
let params;
|
|
101
104
|
if (haveParam && options.mappedTexture) {
|
|
@@ -109,7 +112,7 @@ class MeshBuilder {
|
|
|
109
112
|
const vertices = [];
|
|
110
113
|
for (let i = 0; i < 3; ++i) {
|
|
111
114
|
const vertexIndex = 0 === i ? 0 : triangleIndex + i;
|
|
112
|
-
const position =
|
|
115
|
+
const position = point.getPoint3dAtUncheckedPointIndex(vertexIndex);
|
|
113
116
|
const normal = requireNormals ? core_common_1.OctEncodedNormal.fromVector(visitor.getNormal(vertexIndex)) : undefined;
|
|
114
117
|
const uvParam = params ? params[vertexIndex] : undefined;
|
|
115
118
|
vertices[i] = { position, fillColor, normal, uvParam, sourceIndex: vertexIndex };
|
|
@@ -117,7 +120,9 @@ class MeshBuilder {
|
|
|
117
120
|
// Previously we would add all 3 vertices to our map, then detect degenerate triangles in AddTriangle().
|
|
118
121
|
// This led to unused vertex data, and caused mismatch in # of vertices when recreating the MeshBuilder from the data in the tile cache.
|
|
119
122
|
// Detect beforehand instead.
|
|
120
|
-
if (
|
|
123
|
+
if (this.vertexMap.arePositionsAlmostEqual(vertices[0], vertices[1])
|
|
124
|
+
|| this.vertexMap.arePositionsAlmostEqual(vertices[0], vertices[2])
|
|
125
|
+
|| this.vertexMap.arePositionsAlmostEqual(vertices[1], vertices[2]))
|
|
121
126
|
return undefined;
|
|
122
127
|
return vertices;
|
|
123
128
|
}
|
|
@@ -149,19 +154,17 @@ class MeshBuilder {
|
|
|
149
154
|
return triangle;
|
|
150
155
|
}
|
|
151
156
|
/** removed Feature for now */
|
|
152
|
-
addPolyline(
|
|
157
|
+
addPolyline(points, fillColor) {
|
|
153
158
|
const { mesh } = this;
|
|
154
159
|
const poly = new core_common_1.MeshPolyline();
|
|
155
|
-
const points = pts instanceof core_common_1.QPoint3dList ? pts : core_common_1.QPoint3dList.createFrom(pts, mesh.points.params);
|
|
156
160
|
for (const position of points)
|
|
157
161
|
poly.addIndex(this.addVertex({ position, fillColor }));
|
|
158
162
|
mesh.addPolyline(poly);
|
|
159
163
|
}
|
|
160
164
|
/** removed Feature for now */
|
|
161
|
-
addPointString(
|
|
165
|
+
addPointString(points, fillColor) {
|
|
162
166
|
const { mesh } = this;
|
|
163
167
|
const poly = new core_common_1.MeshPolyline();
|
|
164
|
-
const points = core_common_1.QPoint3dList.createFrom(pts, mesh.points.params);
|
|
165
168
|
for (const position of points)
|
|
166
169
|
poly.addIndex(this.addVertex({ position, fillColor }));
|
|
167
170
|
mesh.addPolyline(poly);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshBuilder.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert, Dictionary } from \"@itwin/core-bentley\";\r\nimport { Angle, IndexedPolyface, Point2d, Point3d, Polyface, PolyfaceVisitor, Range3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { MeshEdge, MeshEdges, MeshPolyline, OctEncodedNormal, OctEncodedNormalPair, QPoint3d, QPoint3dList, TextureMapping } from \"@itwin/core-common\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { Triangle, TriangleKey, TriangleSet } from \"../Primitives\";\r\nimport { StrokesPrimitivePointLists } from \"../Strokes\";\r\nimport { VertexKey, VertexKeyProps, VertexMap } from \"../VertexKey\";\r\nimport { Mesh } from \"./MeshPrimitives\";\r\n\r\n// Describes a vertex along with the index of the source vertex in the source PolyfaceVisitor.\r\ntype VertexKeyPropsWithIndex = VertexKeyProps & { sourceIndex: number };\r\n\r\n/** @internal */\r\nexport class MeshBuilder {\r\n private _vertexMap?: VertexMap;\r\n private _triangleSet?: TriangleSet;\r\n private _currentPolyface?: MeshBuilderPolyface;\r\n public readonly mesh: Mesh;\r\n public readonly tolerance: number;\r\n public readonly areaTolerance: number;\r\n public readonly tileRange: Range3d;\r\n public get currentPolyface(): MeshBuilderPolyface | undefined { return this._currentPolyface; }\r\n public set displayParams(params: DisplayParams) { this.mesh.displayParams = params; }\r\n\r\n /** create reference for vertexMap on demand */\r\n public get vertexMap(): VertexMap {\r\n if (undefined === this._vertexMap) this._vertexMap = new VertexMap();\r\n return this._vertexMap;\r\n }\r\n\r\n /** create reference for triangleSet on demand */\r\n public get triangleSet(): TriangleSet {\r\n if (undefined === this._triangleSet) this._triangleSet = new TriangleSet();\r\n return this._triangleSet;\r\n }\r\n\r\n private constructor(mesh: Mesh, tolerance: number, areaTolerance: number, tileRange: Range3d) {\r\n this.mesh = mesh;\r\n this.tolerance = tolerance;\r\n this.areaTolerance = areaTolerance;\r\n this.tileRange = tileRange;\r\n }\r\n\r\n /** create a new MeshBuilder */\r\n public static create(props: MeshBuilder.Props): MeshBuilder {\r\n const mesh = Mesh.create(props);\r\n const { tolerance, areaTolerance, range } = props;\r\n return new MeshBuilder(mesh, tolerance, areaTolerance, range);\r\n }\r\n\r\n /**\r\n * iterate through each point list of the strokes primitive and either load the point string or polyline into builder\r\n * @param strokes lists of stroke primitive point lists to iterate\r\n * @param isDisjoint if true add point string, else add polyline\r\n * @param fillColor\r\n */\r\n public addStrokePointLists(strokes: StrokesPrimitivePointLists, isDisjoint: boolean, fillColor: number): void {\r\n for (const strokePoints of strokes) {\r\n if (isDisjoint)\r\n this.addPointString(strokePoints.points, fillColor);\r\n else\r\n this.addPolyline(strokePoints.points, fillColor);\r\n }\r\n }\r\n\r\n /**\r\n * add data from polyface into mesh builder\r\n * @param polyface the indexed polyface to iterate the facets of to load each facet's triangles' vertices\r\n * @param props the properties required for this operation\r\n */\r\n public addFromPolyface(polyface: IndexedPolyface, props: MeshBuilder.PolyfaceOptions): void {\r\n this.beginPolyface(polyface, props.edgeOptions);\r\n const visitor = polyface.createVisitor();\r\n\r\n while (visitor.moveToNextFacet()) {\r\n this.addFromPolyfaceVisitor(visitor, props);\r\n }\r\n\r\n this.endPolyface();\r\n }\r\n\r\n /**\r\n * @param visitor the PolyfaceVisitor containing the face data to be added\r\n * @param props the properties required for this operation:\r\n */\r\n public addFromPolyfaceVisitor(visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceOptions): void {\r\n const { pointCount, normalCount, paramCount, requireNormals } = visitor;\r\n const { includeParams, mappedTexture } = options;\r\n\r\n const isDegenerate = requireNormals && normalCount < pointCount; // TFS#790263: Degenerate triangle - no normals.\r\n\r\n // a triangle must have at least 3 points\r\n if (pointCount < 3 || isDegenerate)\r\n return;\r\n\r\n const haveParam = includeParams && paramCount > 0;\r\n const triangleCount = pointCount - 2;\r\n\r\n assert(!includeParams || paramCount > 0);\r\n assert(!haveParam || undefined !== mappedTexture);\r\n\r\n // The face represented by this visitor should be convex (we request that in facet options) - so we do a simple fan triangulation.\r\n const polyfaceVisitorOptions = { ...options, triangleCount, haveParam };\r\n for (let triangleIndex = 0; triangleIndex < triangleCount; triangleIndex++) {\r\n const triangle = this.createTriangle(triangleIndex, visitor, polyfaceVisitorOptions);\r\n if (undefined !== triangle)\r\n this.addTriangle(triangle);\r\n }\r\n }\r\n\r\n public createTriangleVertices(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions): VertexKeyPropsWithIndex[] | undefined {\r\n const { point, requireNormals } = visitor;\r\n const { fillColor, haveParam } = options;\r\n const qPointParams = this.mesh.points.params;\r\n\r\n // If we do not have UVParams stored on the IndexedPolyface, compute them now\r\n let params: Point2d[] | undefined;\r\n if (haveParam && options.mappedTexture) {\r\n assert(this.mesh.points.length === 0 || this.mesh.uvParams.length !== 0);\r\n const mappedTexture = options.mappedTexture;\r\n const transformToImodel = mappedTexture.params.textureMatrix.transform;\r\n if (transformToImodel)\r\n params = mappedTexture.computeUVParams(visitor, transformToImodel);\r\n assert(params !== undefined);\r\n }\r\n\r\n const vertices = [];\r\n for (let i = 0; i < 3; ++i) {\r\n const vertexIndex = 0 === i ? 0 : triangleIndex + i;\r\n const position = QPoint3d.create(point.getPoint3dAtUncheckedPointIndex(vertexIndex), qPointParams);\r\n const normal = requireNormals ? OctEncodedNormal.fromVector(visitor.getNormal(vertexIndex)!) : undefined;\r\n const uvParam: Point2d | undefined = params ? params[vertexIndex] : undefined;\r\n vertices[i] = { position, fillColor, normal, uvParam, sourceIndex: vertexIndex };\r\n }\r\n\r\n // Previously we would add all 3 vertices to our map, then detect degenerate triangles in AddTriangle().\r\n // This led to unused vertex data, and caused mismatch in # of vertices when recreating the MeshBuilder from the data in the tile cache.\r\n // Detect beforehand instead.\r\n if (vertices[0].position.equals(vertices[1].position) || vertices[0].position.equals(vertices[2].position) || vertices[1].position.equals(vertices[2].position))\r\n return undefined;\r\n\r\n return vertices;\r\n }\r\n\r\n public createTriangle(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions): Triangle | undefined {\r\n // generate vertex key properties for each of the three sides of the triangle\r\n const vertices = this.createTriangleVertices(triangleIndex, visitor, options);\r\n\r\n // avoid creating degenerate triangles\r\n if (undefined === vertices)\r\n return undefined;\r\n\r\n const { edgeVisible } = visitor;\r\n\r\n const triangle = new Triangle();\r\n\r\n triangle.setEdgeVisibility(\r\n 0 === triangleIndex ? edgeVisible[0] : false,\r\n edgeVisible[triangleIndex + 1],\r\n triangleIndex === options.triangleCount - 1 ? edgeVisible[triangleIndex + 2] : false,\r\n );\r\n\r\n // set each triangle index to the index associated with the vertex key location in the vertex map\r\n vertices.forEach((vertexProps, i: number) => {\r\n let vertexKeyIndex;\r\n if (visitor.auxData) {\r\n // No deduplication with auxData (for now...)\r\n vertexKeyIndex = this.mesh.addVertex(vertexProps);\r\n this.mesh.addAuxChannels(visitor.auxData.channels, vertexProps.sourceIndex);\r\n } else {\r\n vertexKeyIndex = this.addVertex(vertexProps);\r\n }\r\n\r\n triangle.indices[i] = vertexKeyIndex;\r\n\r\n // if the current polyface exists, map the vertex key index to the visitor's client point index\r\n if (this.currentPolyface !== undefined)\r\n this.currentPolyface.vertexIndexMap.set(vertexKeyIndex, visitor.clientPointIndex(vertexProps.sourceIndex));\r\n });\r\n\r\n return triangle;\r\n }\r\n\r\n /** removed Feature for now */\r\n public addPolyline(pts: QPoint3dList | Point3d[], fillColor: number): void {\r\n const { mesh } = this;\r\n\r\n const poly = new MeshPolyline();\r\n const points = pts instanceof QPoint3dList ? pts : QPoint3dList.createFrom(pts, mesh.points.params);\r\n\r\n for (const position of points)\r\n poly.addIndex(this.addVertex({ position, fillColor }));\r\n\r\n mesh.addPolyline(poly);\r\n }\r\n\r\n /** removed Feature for now */\r\n public addPointString(pts: Point3d[], fillColor: number): void {\r\n const { mesh } = this;\r\n const poly = new MeshPolyline();\r\n const points = QPoint3dList.createFrom(pts, mesh.points.params);\r\n\r\n for (const position of points)\r\n poly.addIndex(this.addVertex({ position, fillColor }));\r\n\r\n mesh.addPolyline(poly);\r\n }\r\n\r\n public beginPolyface(polyface: Polyface, options: MeshEdgeCreationOptions): void {\r\n if (!options.generateNoEdges) {\r\n const triangles = this.mesh.triangles;\r\n this._currentPolyface = new MeshBuilderPolyface(polyface, options, triangles === undefined ? 0 : triangles.length);\r\n }\r\n }\r\n\r\n public endPolyface(): void {\r\n const { currentPolyface, mesh } = this;\r\n if (undefined === currentPolyface)\r\n return;\r\n\r\n this._currentPolyface = undefined;\r\n buildMeshEdges(mesh, currentPolyface);\r\n }\r\n\r\n public addVertex(vertex: VertexKeyProps, addToMeshOnInsert = true): number {\r\n // if vertex key isn't duplicate, then also insert properties into mesh\r\n const onInsert = (vk: VertexKey) => this.mesh.addVertex(vk);\r\n return this.vertexMap.insertKey(vertex, addToMeshOnInsert ? onInsert : undefined);\r\n }\r\n\r\n public addTriangle(triangle: Triangle): void {\r\n // Prefer to avoid adding vertices originating from degenerate triangles before we get here...\r\n assert(!triangle.isDegenerate);\r\n\r\n const onInsert = (_vk: TriangleKey) => this.mesh.addTriangle(triangle);\r\n this.triangleSet.insertKey(triangle, onInsert);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshBuilder { // eslint-disable-line no-redeclare\r\n export interface Props extends Mesh.Props {\r\n tolerance: number;\r\n areaTolerance: number;\r\n }\r\n export interface PolyfaceOptions {\r\n includeParams: boolean;\r\n fillColor: number;\r\n mappedTexture?: TextureMapping;\r\n edgeOptions: MeshEdgeCreationOptions;\r\n }\r\n\r\n export interface PolyfaceVisitorOptions extends PolyfaceOptions {\r\n triangleCount: number;\r\n haveParam: boolean;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshEdgeCreationOptions {\r\n public readonly type: MeshEdgeCreationOptions.Type;\r\n public readonly minCreaseAngle = 20.0 * Angle.radiansPerDegree;\r\n public get generateAllEdges(): boolean { return this.type === MeshEdgeCreationOptions.Type.AllEdges; }\r\n public get generateNoEdges(): boolean { return this.type === MeshEdgeCreationOptions.Type.NoEdges; }\r\n public get generateCreaseEdges(): boolean { return 0 !== (this.type & MeshEdgeCreationOptions.Type.CreaseEdges); }\r\n /** Create edge chains for polyfaces that do not already have them. */\r\n public get createEdgeChains(): boolean { return 0 !== (this.type & MeshEdgeCreationOptions.Type.CreateChains); }\r\n constructor(type = MeshEdgeCreationOptions.Type.NoEdges) { this.type = type; }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshEdgeCreationOptions { // eslint-disable-line no-redeclare\r\n export enum Type {\r\n NoEdges = 0x0000,\r\n CreaseEdges = 0x0001 << 1,\r\n SmoothEdges = 0x0001 << 2,\r\n CreateChains = 0x0001 << 3,\r\n DefaultEdges = CreaseEdges,\r\n AllEdges = CreaseEdges | SmoothEdges,\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshBuilderPolyface {\r\n public readonly polyface: Polyface;\r\n public readonly edgeOptions: MeshEdgeCreationOptions;\r\n public readonly vertexIndexMap: Map<number, number> = new Map<number, number>();\r\n public readonly baseTriangleIndex: number;\r\n constructor(polyface: Polyface, edgeOptions: MeshEdgeCreationOptions, baseTriangleIndex: number) {\r\n this.polyface = polyface;\r\n this.edgeOptions = edgeOptions;\r\n this.baseTriangleIndex = baseTriangleIndex;\r\n }\r\n}\r\n\r\nclass EdgeInfo {\r\n public faceIndex1?: number;\r\n\r\n public constructor(\r\n public visible: boolean,\r\n public faceIndex0: number,\r\n public edge: MeshEdge,\r\n public point0: Point3d,\r\n public point1: Point3d) {\r\n }\r\n\r\n public addFace(visible: boolean, faceIndex: number) {\r\n if (undefined === this.faceIndex1) {\r\n this.visible ||= visible;\r\n this.faceIndex1 = faceIndex;\r\n }\r\n }\r\n}\r\n\r\nfunction buildMeshEdges(mesh: Mesh, polyface: MeshBuilderPolyface): void {\r\n if (!mesh.triangles)\r\n return;\r\n\r\n const edgeMap = new Dictionary<MeshEdge, EdgeInfo>((lhs, rhs) => lhs.compareTo(rhs));\r\n const triangleNormals: Vector3d[] = [];\r\n\r\n // We need to detect the edge pairs -- Can't do that from the Mesh indices as these are not shared - so we'll\r\n // assume that the polyface indices are properly shared, this should be true as a seperate index array is used\r\n // for Polyfaces.\r\n const triangle = new Triangle();\r\n const polyfacePoints = [new Point3d(), new Point3d(), new Point3d()];\r\n const polyfaceIndices = [0, 0, 0];\r\n\r\n for (let triangleIndex = polyface.baseTriangleIndex; triangleIndex < mesh.triangles.length; triangleIndex++) {\r\n let indexNotFound = false;\r\n mesh.triangles.getTriangle(triangleIndex, triangle);\r\n for (let j = 0; j < 3; j++) {\r\n const foundPolyfaceIndex = polyface.vertexIndexMap.get(triangle.indices[j]);\r\n assert(undefined !== foundPolyfaceIndex);\r\n if (undefined === foundPolyfaceIndex) {\r\n indexNotFound = true;\r\n continue;\r\n }\r\n\r\n polyfaceIndices[j] = foundPolyfaceIndex;\r\n polyface.polyface.data.getPoint(foundPolyfaceIndex, polyfacePoints[j]);\r\n }\r\n\r\n if (indexNotFound)\r\n continue;\r\n\r\n for (let j = 0; j < 3; j++) {\r\n const jNext = (j + 1) % 3;\r\n const triangleNormalIndex = triangleNormals.length;\r\n const meshEdge = new MeshEdge(triangle.indices[j], triangle.indices[jNext]);\r\n const polyfaceEdge = new MeshEdge(polyfaceIndices[j], polyfaceIndices[jNext]);\r\n const edgeInfo = new EdgeInfo(triangle.isEdgeVisible(j), triangleNormalIndex, meshEdge, polyfacePoints[j], polyfacePoints[jNext]);\r\n\r\n const findOrInsert = edgeMap.findOrInsert(polyfaceEdge, edgeInfo);\r\n if (!findOrInsert.inserted)\r\n findOrInsert.value.addFace(edgeInfo.visible, triangleNormalIndex);\r\n }\r\n\r\n const normal = Vector3d.createCrossProductToPoints(polyfacePoints[0], polyfacePoints[1], polyfacePoints[2]);\r\n normal.normalizeInPlace();\r\n triangleNormals.push(normal);\r\n }\r\n\r\n // If there is no visibility indication in the mesh, infer from the mesh geometry.\r\n if (!polyface.edgeOptions.generateAllEdges) {\r\n const minEdgeDot = Math.cos(polyface.edgeOptions.minCreaseAngle);\r\n for (const edgeInfo of edgeMap.values()) {\r\n if (undefined !== edgeInfo.faceIndex1) {\r\n const normal0 = triangleNormals[edgeInfo.faceIndex0];\r\n const normal1 = triangleNormals[edgeInfo.faceIndex1];\r\n if (Math.abs(normal0.dotProduct(normal1)) > minEdgeDot)\r\n edgeInfo.visible = false;\r\n }\r\n }\r\n }\r\n\r\n // Now populate the MeshEdges.\r\n // ###TODO edge chains?\r\n if (undefined === mesh.edges)\r\n mesh.edges = new MeshEdges();\r\n\r\n const maxPlanarDot = 0.999999;\r\n for (const edgeInfo of edgeMap.values()) {\r\n if (edgeInfo.visible) {\r\n mesh.edges.visible.push(edgeInfo.edge);\r\n } else if (undefined !== edgeInfo.faceIndex1) {\r\n const normal0 = triangleNormals[edgeInfo.faceIndex0];\r\n const normal1 = triangleNormals[edgeInfo.faceIndex1];\r\n if (Math.abs(normal0.dotProduct(normal1)) < maxPlanarDot) {\r\n mesh.edges.silhouette.push(edgeInfo.edge);\r\n mesh.edges.silhouetteNormals.push(new OctEncodedNormalPair(OctEncodedNormal.fromVector(normal0), OctEncodedNormal.fromVector(normal1)));\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MeshBuilder.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert, Dictionary } from \"@itwin/core-bentley\";\r\nimport { Angle, IndexedPolyface, Point2d, Point3d, Polyface, PolyfaceVisitor, Range3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { MeshEdge, MeshEdges, MeshPolyline, OctEncodedNormal, OctEncodedNormalPair, QPoint3dList, TextureMapping } from \"@itwin/core-common\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { Triangle, TriangleKey, TriangleSet } from \"../Primitives\";\r\nimport { StrokesPrimitivePointLists } from \"../Strokes\";\r\nimport { VertexKey, VertexKeyProps, VertexMap } from \"../VertexKey\";\r\nimport { Mesh } from \"./MeshPrimitives\";\r\n\r\n// Describes a vertex along with the index of the source vertex in the source PolyfaceVisitor.\r\ntype VertexKeyPropsWithIndex = VertexKeyProps & { sourceIndex: number };\r\n\r\n/** @internal */\r\nexport class MeshBuilder {\r\n public readonly vertexMap: VertexMap;\r\n private _triangleSet?: TriangleSet;\r\n private _currentPolyface?: MeshBuilderPolyface;\r\n public readonly mesh: Mesh;\r\n public readonly tolerance: number;\r\n public readonly areaTolerance: number;\r\n public readonly tileRange: Range3d;\r\n public get currentPolyface(): MeshBuilderPolyface | undefined { return this._currentPolyface; }\r\n public set displayParams(params: DisplayParams) { this.mesh.displayParams = params; }\r\n\r\n /** create reference for triangleSet on demand */\r\n public get triangleSet(): TriangleSet {\r\n if (undefined === this._triangleSet) this._triangleSet = new TriangleSet();\r\n return this._triangleSet;\r\n }\r\n\r\n private constructor(mesh: Mesh, tolerance: number, areaTolerance: number, tileRange: Range3d) {\r\n this.mesh = mesh;\r\n this.tolerance = tolerance;\r\n this.areaTolerance = areaTolerance;\r\n this.tileRange = tileRange;\r\n\r\n let vertexTolerance;\r\n if (mesh.points instanceof QPoint3dList) {\r\n const p0 = mesh.points.params.unquantize(0, 0, 0);\r\n const p1 = mesh.points.params.unquantize(1, 1, 1);\r\n vertexTolerance = p1.minus(p0, p0);\r\n } else {\r\n vertexTolerance = { x: tolerance, y: tolerance, z: tolerance };\r\n }\r\n\r\n this.vertexMap = new VertexMap(vertexTolerance);\r\n }\r\n\r\n /** create a new MeshBuilder */\r\n public static create(props: MeshBuilder.Props): MeshBuilder {\r\n const mesh = Mesh.create(props);\r\n const { tolerance, areaTolerance, range } = props;\r\n return new MeshBuilder(mesh, tolerance, areaTolerance, range);\r\n }\r\n\r\n /**\r\n * iterate through each point list of the strokes primitive and either load the point string or polyline into builder\r\n * @param strokes lists of stroke primitive point lists to iterate\r\n * @param isDisjoint if true add point string, else add polyline\r\n * @param fillColor\r\n */\r\n public addStrokePointLists(strokes: StrokesPrimitivePointLists, isDisjoint: boolean, fillColor: number): void {\r\n for (const strokePoints of strokes) {\r\n if (isDisjoint)\r\n this.addPointString(strokePoints.points, fillColor);\r\n else\r\n this.addPolyline(strokePoints.points, fillColor);\r\n }\r\n }\r\n\r\n /**\r\n * add data from polyface into mesh builder\r\n * @param polyface the indexed polyface to iterate the facets of to load each facet's triangles' vertices\r\n * @param props the properties required for this operation\r\n */\r\n public addFromPolyface(polyface: IndexedPolyface, props: MeshBuilder.PolyfaceOptions): void {\r\n this.beginPolyface(polyface, props.edgeOptions);\r\n const visitor = polyface.createVisitor();\r\n\r\n while (visitor.moveToNextFacet()) {\r\n this.addFromPolyfaceVisitor(visitor, props);\r\n }\r\n\r\n this.endPolyface();\r\n }\r\n\r\n /**\r\n * @param visitor the PolyfaceVisitor containing the face data to be added\r\n * @param props the properties required for this operation:\r\n */\r\n public addFromPolyfaceVisitor(visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceOptions): void {\r\n const { pointCount, normalCount, paramCount, requireNormals } = visitor;\r\n const { includeParams, mappedTexture } = options;\r\n\r\n const isDegenerate = requireNormals && normalCount < pointCount; // TFS#790263: Degenerate triangle - no normals.\r\n\r\n // a triangle must have at least 3 points\r\n if (pointCount < 3 || isDegenerate)\r\n return;\r\n\r\n const haveParam = includeParams && paramCount > 0;\r\n const triangleCount = pointCount - 2;\r\n\r\n assert(!includeParams || paramCount > 0);\r\n assert(!haveParam || undefined !== mappedTexture);\r\n\r\n // The face represented by this visitor should be convex (we request that in facet options) - so we do a simple fan triangulation.\r\n const polyfaceVisitorOptions = { ...options, triangleCount, haveParam };\r\n for (let triangleIndex = 0; triangleIndex < triangleCount; triangleIndex++) {\r\n const triangle = this.createTriangle(triangleIndex, visitor, polyfaceVisitorOptions);\r\n if (undefined !== triangle)\r\n this.addTriangle(triangle);\r\n }\r\n }\r\n\r\n public createTriangleVertices(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions): VertexKeyPropsWithIndex[] | undefined {\r\n const { point, requireNormals } = visitor;\r\n const { fillColor, haveParam } = options;\r\n\r\n // If we do not have UVParams stored on the IndexedPolyface, compute them now\r\n let params: Point2d[] | undefined;\r\n if (haveParam && options.mappedTexture) {\r\n assert(this.mesh.points.length === 0 || this.mesh.uvParams.length !== 0);\r\n const mappedTexture = options.mappedTexture;\r\n const transformToImodel = mappedTexture.params.textureMatrix.transform;\r\n if (transformToImodel)\r\n params = mappedTexture.computeUVParams(visitor, transformToImodel);\r\n assert(params !== undefined);\r\n }\r\n\r\n const vertices = [];\r\n for (let i = 0; i < 3; ++i) {\r\n const vertexIndex = 0 === i ? 0 : triangleIndex + i;\r\n const position = point.getPoint3dAtUncheckedPointIndex(vertexIndex);\r\n const normal = requireNormals ? OctEncodedNormal.fromVector(visitor.getNormal(vertexIndex)!) : undefined;\r\n const uvParam: Point2d | undefined = params ? params[vertexIndex] : undefined;\r\n vertices[i] = { position, fillColor, normal, uvParam, sourceIndex: vertexIndex };\r\n }\r\n\r\n // Previously we would add all 3 vertices to our map, then detect degenerate triangles in AddTriangle().\r\n // This led to unused vertex data, and caused mismatch in # of vertices when recreating the MeshBuilder from the data in the tile cache.\r\n // Detect beforehand instead.\r\n if (this.vertexMap.arePositionsAlmostEqual(vertices[0], vertices[1])\r\n || this.vertexMap.arePositionsAlmostEqual(vertices[0], vertices[2])\r\n || this.vertexMap.arePositionsAlmostEqual(vertices[1], vertices[2]))\r\n return undefined;\r\n\r\n return vertices;\r\n }\r\n\r\n public createTriangle(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions): Triangle | undefined {\r\n // generate vertex key properties for each of the three sides of the triangle\r\n const vertices = this.createTriangleVertices(triangleIndex, visitor, options);\r\n\r\n // avoid creating degenerate triangles\r\n if (undefined === vertices)\r\n return undefined;\r\n\r\n const { edgeVisible } = visitor;\r\n\r\n const triangle = new Triangle();\r\n\r\n triangle.setEdgeVisibility(\r\n 0 === triangleIndex ? edgeVisible[0] : false,\r\n edgeVisible[triangleIndex + 1],\r\n triangleIndex === options.triangleCount - 1 ? edgeVisible[triangleIndex + 2] : false,\r\n );\r\n\r\n // set each triangle index to the index associated with the vertex key location in the vertex map\r\n vertices.forEach((vertexProps, i: number) => {\r\n let vertexKeyIndex;\r\n if (visitor.auxData) {\r\n // No deduplication with auxData (for now...)\r\n vertexKeyIndex = this.mesh.addVertex(vertexProps);\r\n this.mesh.addAuxChannels(visitor.auxData.channels, vertexProps.sourceIndex);\r\n } else {\r\n vertexKeyIndex = this.addVertex(vertexProps);\r\n }\r\n\r\n triangle.indices[i] = vertexKeyIndex;\r\n\r\n // if the current polyface exists, map the vertex key index to the visitor's client point index\r\n if (this.currentPolyface !== undefined)\r\n this.currentPolyface.vertexIndexMap.set(vertexKeyIndex, visitor.clientPointIndex(vertexProps.sourceIndex));\r\n });\r\n\r\n return triangle;\r\n }\r\n\r\n /** removed Feature for now */\r\n public addPolyline(points: Point3d[], fillColor: number): void {\r\n const { mesh } = this;\r\n\r\n const poly = new MeshPolyline();\r\n for (const position of points)\r\n poly.addIndex(this.addVertex({ position, fillColor }));\r\n\r\n mesh.addPolyline(poly);\r\n }\r\n\r\n /** removed Feature for now */\r\n public addPointString(points: Point3d[], fillColor: number): void {\r\n const { mesh } = this;\r\n const poly = new MeshPolyline();\r\n\r\n for (const position of points)\r\n poly.addIndex(this.addVertex({ position, fillColor }));\r\n\r\n mesh.addPolyline(poly);\r\n }\r\n\r\n public beginPolyface(polyface: Polyface, options: MeshEdgeCreationOptions): void {\r\n if (!options.generateNoEdges) {\r\n const triangles = this.mesh.triangles;\r\n this._currentPolyface = new MeshBuilderPolyface(polyface, options, triangles === undefined ? 0 : triangles.length);\r\n }\r\n }\r\n\r\n public endPolyface(): void {\r\n const { currentPolyface, mesh } = this;\r\n if (undefined === currentPolyface)\r\n return;\r\n\r\n this._currentPolyface = undefined;\r\n buildMeshEdges(mesh, currentPolyface);\r\n }\r\n\r\n public addVertex(vertex: VertexKeyProps, addToMeshOnInsert = true): number {\r\n // if vertex key isn't duplicate, then also insert properties into mesh\r\n const onInsert = (vk: VertexKey) => this.mesh.addVertex(vk);\r\n return this.vertexMap.insertKey(vertex, addToMeshOnInsert ? onInsert : undefined);\r\n }\r\n\r\n public addTriangle(triangle: Triangle): void {\r\n // Prefer to avoid adding vertices originating from degenerate triangles before we get here...\r\n assert(!triangle.isDegenerate);\r\n\r\n const onInsert = (_vk: TriangleKey) => this.mesh.addTriangle(triangle);\r\n this.triangleSet.insertKey(triangle, onInsert);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshBuilder { // eslint-disable-line no-redeclare\r\n export interface Props extends Mesh.Props {\r\n tolerance: number;\r\n areaTolerance: number;\r\n }\r\n export interface PolyfaceOptions {\r\n includeParams: boolean;\r\n fillColor: number;\r\n mappedTexture?: TextureMapping;\r\n edgeOptions: MeshEdgeCreationOptions;\r\n }\r\n\r\n export interface PolyfaceVisitorOptions extends PolyfaceOptions {\r\n triangleCount: number;\r\n haveParam: boolean;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshEdgeCreationOptions {\r\n public readonly type: MeshEdgeCreationOptions.Type;\r\n public readonly minCreaseAngle = 20.0 * Angle.radiansPerDegree;\r\n public get generateAllEdges(): boolean { return this.type === MeshEdgeCreationOptions.Type.AllEdges; }\r\n public get generateNoEdges(): boolean { return this.type === MeshEdgeCreationOptions.Type.NoEdges; }\r\n public get generateCreaseEdges(): boolean { return 0 !== (this.type & MeshEdgeCreationOptions.Type.CreaseEdges); }\r\n /** Create edge chains for polyfaces that do not already have them. */\r\n public get createEdgeChains(): boolean { return 0 !== (this.type & MeshEdgeCreationOptions.Type.CreateChains); }\r\n constructor(type = MeshEdgeCreationOptions.Type.NoEdges) { this.type = type; }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshEdgeCreationOptions { // eslint-disable-line no-redeclare\r\n export enum Type {\r\n NoEdges = 0x0000,\r\n CreaseEdges = 0x0001 << 1,\r\n SmoothEdges = 0x0001 << 2,\r\n CreateChains = 0x0001 << 3,\r\n DefaultEdges = CreaseEdges,\r\n AllEdges = CreaseEdges | SmoothEdges,\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshBuilderPolyface {\r\n public readonly polyface: Polyface;\r\n public readonly edgeOptions: MeshEdgeCreationOptions;\r\n public readonly vertexIndexMap: Map<number, number> = new Map<number, number>();\r\n public readonly baseTriangleIndex: number;\r\n constructor(polyface: Polyface, edgeOptions: MeshEdgeCreationOptions, baseTriangleIndex: number) {\r\n this.polyface = polyface;\r\n this.edgeOptions = edgeOptions;\r\n this.baseTriangleIndex = baseTriangleIndex;\r\n }\r\n}\r\n\r\nclass EdgeInfo {\r\n public faceIndex1?: number;\r\n\r\n public constructor(\r\n public visible: boolean,\r\n public faceIndex0: number,\r\n public edge: MeshEdge,\r\n public point0: Point3d,\r\n public point1: Point3d) {\r\n }\r\n\r\n public addFace(visible: boolean, faceIndex: number) {\r\n if (undefined === this.faceIndex1) {\r\n this.visible ||= visible;\r\n this.faceIndex1 = faceIndex;\r\n }\r\n }\r\n}\r\n\r\nfunction buildMeshEdges(mesh: Mesh, polyface: MeshBuilderPolyface): void {\r\n if (!mesh.triangles)\r\n return;\r\n\r\n const edgeMap = new Dictionary<MeshEdge, EdgeInfo>((lhs, rhs) => lhs.compareTo(rhs));\r\n const triangleNormals: Vector3d[] = [];\r\n\r\n // We need to detect the edge pairs -- Can't do that from the Mesh indices as these are not shared - so we'll\r\n // assume that the polyface indices are properly shared, this should be true as a seperate index array is used\r\n // for Polyfaces.\r\n const triangle = new Triangle();\r\n const polyfacePoints = [new Point3d(), new Point3d(), new Point3d()];\r\n const polyfaceIndices = [0, 0, 0];\r\n\r\n for (let triangleIndex = polyface.baseTriangleIndex; triangleIndex < mesh.triangles.length; triangleIndex++) {\r\n let indexNotFound = false;\r\n mesh.triangles.getTriangle(triangleIndex, triangle);\r\n for (let j = 0; j < 3; j++) {\r\n const foundPolyfaceIndex = polyface.vertexIndexMap.get(triangle.indices[j]);\r\n assert(undefined !== foundPolyfaceIndex);\r\n if (undefined === foundPolyfaceIndex) {\r\n indexNotFound = true;\r\n continue;\r\n }\r\n\r\n polyfaceIndices[j] = foundPolyfaceIndex;\r\n polyface.polyface.data.getPoint(foundPolyfaceIndex, polyfacePoints[j]);\r\n }\r\n\r\n if (indexNotFound)\r\n continue;\r\n\r\n for (let j = 0; j < 3; j++) {\r\n const jNext = (j + 1) % 3;\r\n const triangleNormalIndex = triangleNormals.length;\r\n const meshEdge = new MeshEdge(triangle.indices[j], triangle.indices[jNext]);\r\n const polyfaceEdge = new MeshEdge(polyfaceIndices[j], polyfaceIndices[jNext]);\r\n const edgeInfo = new EdgeInfo(triangle.isEdgeVisible(j), triangleNormalIndex, meshEdge, polyfacePoints[j], polyfacePoints[jNext]);\r\n\r\n const findOrInsert = edgeMap.findOrInsert(polyfaceEdge, edgeInfo);\r\n if (!findOrInsert.inserted)\r\n findOrInsert.value.addFace(edgeInfo.visible, triangleNormalIndex);\r\n }\r\n\r\n const normal = Vector3d.createCrossProductToPoints(polyfacePoints[0], polyfacePoints[1], polyfacePoints[2]);\r\n normal.normalizeInPlace();\r\n triangleNormals.push(normal);\r\n }\r\n\r\n // If there is no visibility indication in the mesh, infer from the mesh geometry.\r\n if (!polyface.edgeOptions.generateAllEdges) {\r\n const minEdgeDot = Math.cos(polyface.edgeOptions.minCreaseAngle);\r\n for (const edgeInfo of edgeMap.values()) {\r\n if (undefined !== edgeInfo.faceIndex1) {\r\n const normal0 = triangleNormals[edgeInfo.faceIndex0];\r\n const normal1 = triangleNormals[edgeInfo.faceIndex1];\r\n if (Math.abs(normal0.dotProduct(normal1)) > minEdgeDot)\r\n edgeInfo.visible = false;\r\n }\r\n }\r\n }\r\n\r\n // Now populate the MeshEdges.\r\n // ###TODO edge chains?\r\n if (undefined === mesh.edges)\r\n mesh.edges = new MeshEdges();\r\n\r\n const maxPlanarDot = 0.999999;\r\n for (const edgeInfo of edgeMap.values()) {\r\n if (edgeInfo.visible) {\r\n mesh.edges.visible.push(edgeInfo.edge);\r\n } else if (undefined !== edgeInfo.faceIndex1) {\r\n const normal0 = triangleNormals[edgeInfo.faceIndex0];\r\n const normal1 = triangleNormals[edgeInfo.faceIndex1];\r\n if (Math.abs(normal0.dotProduct(normal1)) < maxPlanarDot) {\r\n mesh.edges.silhouette.push(edgeInfo.edge);\r\n mesh.edges.silhouetteNormals.push(new OctEncodedNormalPair(OctEncodedNormal.fromVector(normal0), OctEncodedNormal.fromVector(normal1)));\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshBuilderMap.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilderMap.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAmC,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,eAAe,EAAkB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,WAAW,EAA2B,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAElD,gBAAgB;AAChB,qBAAa,cAAe,SAAQ,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC;IAC7E,SAAgB,KAAK,EAAE,OAAO,CAAC;IAC/B,SAAgB,eAAe,EAAE,MAAM,CAAC;IACxC,SAAgB,kBAAkB,EAAE,MAAM,CAAC;IAC3C,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACzC,SAAgB,OAAO,EAAE,eAAe,CAAC;IACzC,OAAO,CAAC,SAAS,CAAK;gBAEV,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,MAAM;WAgBrF,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,cAAc;IAS9J,QAAQ,IAAI,QAAQ;IAQ3B;;;;OAIG;IACI,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAOzC;;;OAGG;IACI,yBAAyB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAQtD;;;OAGG;IACI,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAc7D;;;OAGG;IACI,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAQpD;;;OAGG;IACI,oBAAoB,CAAC,eAAe,EAAE,gBAAgB,GAAG,IAAI;IAQ7D,UAAU,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,WAAW;
|
|
1
|
+
{"version":3,"file":"MeshBuilderMap.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilderMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -100,7 +100,18 @@ class MeshBuilderMap extends core_bentley_1.Dictionary {
|
|
|
100
100
|
getBuilder(displayParams, type, hasNormals, isPlanar) {
|
|
101
101
|
const { facetAreaTolerance, tolerance, is2d, range } = this;
|
|
102
102
|
const key = this.getKey(displayParams, type, hasNormals, isPlanar);
|
|
103
|
-
|
|
103
|
+
const quantizePositions = false; // ###TODO should this be configurable?
|
|
104
|
+
return this.getBuilderFromKey(key, {
|
|
105
|
+
displayParams,
|
|
106
|
+
type,
|
|
107
|
+
range,
|
|
108
|
+
quantizePositions,
|
|
109
|
+
is2d,
|
|
110
|
+
isPlanar,
|
|
111
|
+
tolerance,
|
|
112
|
+
areaTolerance: facetAreaTolerance,
|
|
113
|
+
features: this.features,
|
|
114
|
+
});
|
|
104
115
|
}
|
|
105
116
|
getKey(displayParams, type, hasNormals, isPlanar) {
|
|
106
117
|
const key = new MeshBuilderMap.Key(displayParams, type, hasNormals, isPlanar);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshBuilderMap.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilderMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { compareBooleans, compareNumbers, Dictionary } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { Feature, FeatureTable } from \"@itwin/core-common\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { GeometryList } from \"../geometry/GeometryList\";\r\nimport { Geometry } from \"../geometry/GeometryPrimitives\";\r\nimport { PolyfacePrimitive } from \"../Polyface\";\r\nimport { GeometryOptions, ToleranceRatio } from \"../Primitives\";\r\nimport { StrokesPrimitive } from \"../Strokes\";\r\nimport { MeshBuilder, MeshEdgeCreationOptions } from \"./MeshBuilder\";\r\nimport { Mesh, MeshList } from \"./MeshPrimitives\";\r\n\r\n/** @internal */\r\nexport class MeshBuilderMap extends Dictionary<MeshBuilderMap.Key, MeshBuilder> {\r\n public readonly range: Range3d;\r\n public readonly vertexTolerance: number;\r\n public readonly facetAreaTolerance: number;\r\n public readonly tolerance: number;\r\n public readonly is2d: boolean;\r\n public readonly features?: Mesh.Features;\r\n public readonly options: GeometryOptions;\r\n private _keyOrder = 0;\r\n\r\n constructor(tolerance: number, range: Range3d, is2d: boolean, options: GeometryOptions, id?: string) {\r\n super((lhs: MeshBuilderMap.Key, rhs: MeshBuilderMap.Key) => lhs.compare(rhs));\r\n this.tolerance = tolerance;\r\n this.vertexTolerance = tolerance * ToleranceRatio.vertex;\r\n this.facetAreaTolerance = tolerance * ToleranceRatio.facetArea;\r\n this.range = range;\r\n this.is2d = is2d;\r\n this.options = options;\r\n\r\n if (undefined !== id) {\r\n const table = new FeatureTable(1);\r\n this.features = new Mesh.Features(table);\r\n this.features.add(new Feature(id), 0);\r\n }\r\n }\r\n\r\n public static createFromGeometries(geometries: GeometryList, tolerance: number, range: Range3d, is2d: boolean, options: GeometryOptions, id?: string): MeshBuilderMap {\r\n const map = new MeshBuilderMap(tolerance, range, is2d, options, id);\r\n\r\n for (const geom of geometries)\r\n map.loadGeometry(geom);\r\n\r\n return map;\r\n }\r\n\r\n public toMeshes(): MeshList {\r\n const meshes = new MeshList(undefined !== this.features ? this.features.table : undefined, this.range);\r\n for (const builder of this._values)\r\n meshes.push(builder.mesh);\r\n\r\n return meshes;\r\n }\r\n\r\n /**\r\n * extract polyfaces and strokes from geometry into MeshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract polyfaces and strokes from\r\n * @param wantSurfacesOnly if true prevent strokes from being loaded into builders\r\n */\r\n public loadGeometry(geom: Geometry): void {\r\n this.loadPolyfacePrimitiveList(geom);\r\n\r\n if (!this.options.wantSurfacesOnly)\r\n this.loadStrokePrimitiveList(geom);\r\n }\r\n\r\n /**\r\n * extract polyface primitives from geometry in meshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract polyfaces from\r\n */\r\n public loadPolyfacePrimitiveList(geom: Geometry): void {\r\n const polyfaces = geom.getPolyfaces(this.tolerance);\r\n\r\n if (polyfaces !== undefined)\r\n for (const polyface of polyfaces)\r\n this.loadIndexedPolyface(polyface);\r\n }\r\n\r\n /**\r\n * extract indexed polyfaces into meshBuilder stored in builderMap\r\n * @param polyface PolyfacePrimitive to extract indexed polyfaces from\r\n */\r\n public loadIndexedPolyface(polyface: PolyfacePrimitive): void {\r\n const { indexedPolyface, displayParams, isPlanar } = polyface;\r\n const { pointCount, normalCount } = indexedPolyface;\r\n const { fillColor, isTextured } = displayParams;\r\n const textureMapping = displayParams.textureMapping;\r\n\r\n if (pointCount === 0)\r\n return;\r\n\r\n const builder = this.getBuilder(displayParams, Mesh.PrimitiveType.Mesh, normalCount > 0, isPlanar);\r\n const edgeOptions = new MeshEdgeCreationOptions(polyface.displayEdges && this.options.edges ? MeshEdgeCreationOptions.Type.DefaultEdges : MeshEdgeCreationOptions.Type.NoEdges);\r\n builder.addFromPolyface(indexedPolyface, { edgeOptions, includeParams: isTextured, fillColor: fillColor.tbgr, mappedTexture: textureMapping });\r\n }\r\n\r\n /**\r\n * extract stroke primitives from geometry in meshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract strokes from\r\n */\r\n public loadStrokePrimitiveList(geom: Geometry): void {\r\n const strokes = geom.getStrokes(this.tolerance);\r\n\r\n if (undefined !== strokes)\r\n for (const stroke of strokes)\r\n this.loadStrokesPrimitive(stroke);\r\n }\r\n\r\n /**\r\n * extract strokes primitive into meshBuilder stored in builderMap\r\n * @param strokePrimitive StrokesPrimitive instance to extractfrom\r\n */\r\n public loadStrokesPrimitive(strokePrimitive: StrokesPrimitive): void {\r\n const { displayParams, isDisjoint, isPlanar, strokes } = strokePrimitive;\r\n\r\n const type = isDisjoint ? Mesh.PrimitiveType.Point : Mesh.PrimitiveType.Polyline;\r\n const builder = this.getBuilder(displayParams, type, false, isPlanar);\r\n builder.addStrokePointLists(strokes, isDisjoint, displayParams.fillColor.tbgr);\r\n }\r\n\r\n public getBuilder(displayParams: DisplayParams, type: Mesh.PrimitiveType, hasNormals: boolean, isPlanar: boolean): MeshBuilder {\r\n const { facetAreaTolerance, tolerance, is2d, range } = this;\r\n const key = this.getKey(displayParams, type, hasNormals, isPlanar);\r\n\r\n return this.getBuilderFromKey(key, { displayParams, type, range, is2d, isPlanar, tolerance, areaTolerance: facetAreaTolerance, features: this.features });\r\n }\r\n\r\n public getKey(displayParams: DisplayParams, type: Mesh.PrimitiveType, hasNormals: boolean, isPlanar: boolean): MeshBuilderMap.Key {\r\n const key = new MeshBuilderMap.Key(displayParams, type, hasNormals, isPlanar);\r\n\r\n if (this.options.preserveOrder)\r\n key.order = ++this._keyOrder;\r\n\r\n return key;\r\n }\r\n\r\n /**\r\n * gets builder associated with key if defined, otherwise creates a new builder and sets that with key\r\n * @param key MeshBuilderMap.Key to associate with builder\r\n * @param props MeshBuilder.Props required to create builder if it does not already exist\r\n * @returns builder reference, changes will update instance stored in builderMap\r\n */\r\n public getBuilderFromKey(key: MeshBuilderMap.Key, props: MeshBuilder.Props): MeshBuilder {\r\n let builder = this.get(key);\r\n if (undefined === builder) {\r\n builder = MeshBuilder.create(props);\r\n this.set(key, builder);\r\n }\r\n return builder;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshBuilderMap { // eslint-disable-line no-redeclare\r\n export class Key {\r\n public order: number = 0;\r\n public readonly params: DisplayParams;\r\n public readonly type: Mesh.PrimitiveType;\r\n public readonly hasNormals: boolean;\r\n public readonly isPlanar: boolean;\r\n\r\n constructor(params: DisplayParams, type: Mesh.PrimitiveType, hasNormals: boolean, isPlanar: boolean) {\r\n this.params = params;\r\n this.type = type;\r\n this.hasNormals = hasNormals;\r\n this.isPlanar = isPlanar;\r\n }\r\n\r\n public static createFromMesh(mesh: Mesh): Key {\r\n return new Key(mesh.displayParams, mesh.type, mesh.normals.length !== 0, mesh.isPlanar);\r\n }\r\n\r\n public compare(rhs: Key): number {\r\n let diff = compareNumbers(this.order, rhs.order);\r\n if (0 === diff) {\r\n diff = compareNumbers(this.type, rhs.type);\r\n if (0 === diff) {\r\n diff = compareBooleans(this.isPlanar, rhs.isPlanar);\r\n if (0 === diff) {\r\n diff = compareBooleans(this.hasNormals, rhs.hasNormals);\r\n if (0 === diff) {\r\n diff = this.params.compareForMerge(rhs.params);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n public equals(rhs: Key): boolean { return 0 === this.compare(rhs); }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MeshBuilderMap.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilderMap.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAkF;AAElF,oDAA2D;AAK3D,8CAAgE;AAEhE,+CAAqE;AACrE,qDAAkD;AAElD,gBAAgB;AAChB,MAAa,cAAe,SAAQ,yBAA2C;IAU7E,YAAY,SAAiB,EAAE,KAAc,EAAE,IAAa,EAAE,OAAwB,EAAE,EAAW;QACjG,KAAK,CAAC,CAAC,GAAuB,EAAE,GAAuB,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAHxE,cAAS,GAAG,CAAC,CAAC;QAIpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,SAAS,GAAG,2BAAc,CAAC,MAAM,CAAC;QACzD,IAAI,CAAC,kBAAkB,GAAG,SAAS,GAAG,2BAAc,CAAC,SAAS,CAAC;QAC/D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,SAAS,KAAK,EAAE,EAAE;YACpB,MAAM,KAAK,GAAG,IAAI,0BAAY,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,qBAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACvC;IACH,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,UAAwB,EAAE,SAAiB,EAAE,KAAc,EAAE,IAAa,EAAE,OAAwB,EAAE,EAAW;QAClJ,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAEpE,KAAK,MAAM,IAAI,IAAI,UAAU;YAC3B,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEzB,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,QAAQ;QACb,MAAM,MAAM,GAAG,IAAI,yBAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvG,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO;YAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE5B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,IAAc;QAChC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAChC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,yBAAyB,CAAC,IAAc;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpD,IAAI,SAAS,KAAK,SAAS;YACzB,KAAK,MAAM,QAAQ,IAAI,SAAS;gBAC9B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACI,mBAAmB,CAAC,QAA2B;QACpD,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC9D,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC;QACpD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC;QAChD,MAAM,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC;QAEpD,IAAI,UAAU,KAAK,CAAC;YAClB,OAAO;QAET,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,qBAAI,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnG,MAAM,WAAW,GAAG,IAAI,qCAAuB,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,qCAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,qCAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChL,OAAO,CAAC,eAAe,CAAC,eAAe,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC;IACjJ,CAAC;IAED;;;OAGG;IACI,uBAAuB,CAAC,IAAc;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,SAAS,KAAK,OAAO;YACvB,KAAK,MAAM,MAAM,IAAI,OAAO;gBAC1B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACI,oBAAoB,CAAC,eAAiC;QAC3D,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;QAEzE,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,qBAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;QACjF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtE,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IAEM,UAAU,CAAC,aAA4B,EAAE,IAAwB,EAAE,UAAmB,EAAE,QAAiB;QAC9G,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEnE,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,uCAAuC;QACxE,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE;YACjC,aAAa;YACb,IAAI;YACJ,KAAK;YACL,iBAAiB;YACjB,IAAI;YACJ,QAAQ;YACR,SAAS;YACT,aAAa,EAAE,kBAAkB;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,aAA4B,EAAE,IAAwB,EAAE,UAAmB,EAAE,QAAiB;QAC1G,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE9E,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa;YAC5B,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC;QAE/B,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACI,iBAAiB,CAAC,GAAuB,EAAE,KAAwB;QACxE,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,SAAS,KAAK,OAAO,EAAE;YACzB,OAAO,GAAG,yBAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACxB;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAtJD,wCAsJC;AAED,gBAAgB;AAChB,WAAiB,cAAc;IAC7B,MAAa,GAAG;QAOd,YAAY,MAAqB,EAAE,IAAwB,EAAE,UAAmB,EAAE,QAAiB;YAN5F,UAAK,GAAW,CAAC,CAAC;YAOvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;QAEM,MAAM,CAAC,cAAc,CAAC,IAAU;YACrC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1F,CAAC;QAEM,OAAO,CAAC,GAAQ;YACrB,IAAI,IAAI,GAAG,IAAA,6BAAc,EAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,IAAI,EAAE;gBACd,IAAI,GAAG,IAAA,6BAAc,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,KAAK,IAAI,EAAE;oBACd,IAAI,GAAG,IAAA,8BAAe,EAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACpD,IAAI,CAAC,KAAK,IAAI,EAAE;wBACd,IAAI,GAAG,IAAA,8BAAe,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;wBACxD,IAAI,CAAC,KAAK,IAAI,EAAE;4BACd,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;yBAChD;qBACF;iBACF;aACF;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAEM,MAAM,CAAC,GAAQ,IAAa,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACrE;IArCY,kBAAG,MAqCf,CAAA;AACH,CAAC,EAvCgB,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAuC9B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { compareBooleans, compareNumbers, Dictionary } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { Feature, FeatureTable } from \"@itwin/core-common\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { GeometryList } from \"../geometry/GeometryList\";\r\nimport { Geometry } from \"../geometry/GeometryPrimitives\";\r\nimport { PolyfacePrimitive } from \"../Polyface\";\r\nimport { GeometryOptions, ToleranceRatio } from \"../Primitives\";\r\nimport { StrokesPrimitive } from \"../Strokes\";\r\nimport { MeshBuilder, MeshEdgeCreationOptions } from \"./MeshBuilder\";\r\nimport { Mesh, MeshList } from \"./MeshPrimitives\";\r\n\r\n/** @internal */\r\nexport class MeshBuilderMap extends Dictionary<MeshBuilderMap.Key, MeshBuilder> {\r\n public readonly range: Range3d;\r\n public readonly vertexTolerance: number;\r\n public readonly facetAreaTolerance: number;\r\n public readonly tolerance: number;\r\n public readonly is2d: boolean;\r\n public readonly features?: Mesh.Features;\r\n public readonly options: GeometryOptions;\r\n private _keyOrder = 0;\r\n\r\n constructor(tolerance: number, range: Range3d, is2d: boolean, options: GeometryOptions, id?: string) {\r\n super((lhs: MeshBuilderMap.Key, rhs: MeshBuilderMap.Key) => lhs.compare(rhs));\r\n this.tolerance = tolerance;\r\n this.vertexTolerance = tolerance * ToleranceRatio.vertex;\r\n this.facetAreaTolerance = tolerance * ToleranceRatio.facetArea;\r\n this.range = range;\r\n this.is2d = is2d;\r\n this.options = options;\r\n\r\n if (undefined !== id) {\r\n const table = new FeatureTable(1);\r\n this.features = new Mesh.Features(table);\r\n this.features.add(new Feature(id), 0);\r\n }\r\n }\r\n\r\n public static createFromGeometries(geometries: GeometryList, tolerance: number, range: Range3d, is2d: boolean, options: GeometryOptions, id?: string): MeshBuilderMap {\r\n const map = new MeshBuilderMap(tolerance, range, is2d, options, id);\r\n\r\n for (const geom of geometries)\r\n map.loadGeometry(geom);\r\n\r\n return map;\r\n }\r\n\r\n public toMeshes(): MeshList {\r\n const meshes = new MeshList(undefined !== this.features ? this.features.table : undefined, this.range);\r\n for (const builder of this._values)\r\n meshes.push(builder.mesh);\r\n\r\n return meshes;\r\n }\r\n\r\n /**\r\n * extract polyfaces and strokes from geometry into MeshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract polyfaces and strokes from\r\n * @param wantSurfacesOnly if true prevent strokes from being loaded into builders\r\n */\r\n public loadGeometry(geom: Geometry): void {\r\n this.loadPolyfacePrimitiveList(geom);\r\n\r\n if (!this.options.wantSurfacesOnly)\r\n this.loadStrokePrimitiveList(geom);\r\n }\r\n\r\n /**\r\n * extract polyface primitives from geometry in meshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract polyfaces from\r\n */\r\n public loadPolyfacePrimitiveList(geom: Geometry): void {\r\n const polyfaces = geom.getPolyfaces(this.tolerance);\r\n\r\n if (polyfaces !== undefined)\r\n for (const polyface of polyfaces)\r\n this.loadIndexedPolyface(polyface);\r\n }\r\n\r\n /**\r\n * extract indexed polyfaces into meshBuilder stored in builderMap\r\n * @param polyface PolyfacePrimitive to extract indexed polyfaces from\r\n */\r\n public loadIndexedPolyface(polyface: PolyfacePrimitive): void {\r\n const { indexedPolyface, displayParams, isPlanar } = polyface;\r\n const { pointCount, normalCount } = indexedPolyface;\r\n const { fillColor, isTextured } = displayParams;\r\n const textureMapping = displayParams.textureMapping;\r\n\r\n if (pointCount === 0)\r\n return;\r\n\r\n const builder = this.getBuilder(displayParams, Mesh.PrimitiveType.Mesh, normalCount > 0, isPlanar);\r\n const edgeOptions = new MeshEdgeCreationOptions(polyface.displayEdges && this.options.edges ? MeshEdgeCreationOptions.Type.DefaultEdges : MeshEdgeCreationOptions.Type.NoEdges);\r\n builder.addFromPolyface(indexedPolyface, { edgeOptions, includeParams: isTextured, fillColor: fillColor.tbgr, mappedTexture: textureMapping });\r\n }\r\n\r\n /**\r\n * extract stroke primitives from geometry in meshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract strokes from\r\n */\r\n public loadStrokePrimitiveList(geom: Geometry): void {\r\n const strokes = geom.getStrokes(this.tolerance);\r\n\r\n if (undefined !== strokes)\r\n for (const stroke of strokes)\r\n this.loadStrokesPrimitive(stroke);\r\n }\r\n\r\n /**\r\n * extract strokes primitive into meshBuilder stored in builderMap\r\n * @param strokePrimitive StrokesPrimitive instance to extractfrom\r\n */\r\n public loadStrokesPrimitive(strokePrimitive: StrokesPrimitive): void {\r\n const { displayParams, isDisjoint, isPlanar, strokes } = strokePrimitive;\r\n\r\n const type = isDisjoint ? Mesh.PrimitiveType.Point : Mesh.PrimitiveType.Polyline;\r\n const builder = this.getBuilder(displayParams, type, false, isPlanar);\r\n builder.addStrokePointLists(strokes, isDisjoint, displayParams.fillColor.tbgr);\r\n }\r\n\r\n public getBuilder(displayParams: DisplayParams, type: Mesh.PrimitiveType, hasNormals: boolean, isPlanar: boolean): MeshBuilder {\r\n const { facetAreaTolerance, tolerance, is2d, range } = this;\r\n const key = this.getKey(displayParams, type, hasNormals, isPlanar);\r\n\r\n const quantizePositions = false; // ###TODO should this be configurable?\r\n return this.getBuilderFromKey(key, {\r\n displayParams,\r\n type,\r\n range,\r\n quantizePositions,\r\n is2d,\r\n isPlanar,\r\n tolerance,\r\n areaTolerance: facetAreaTolerance,\r\n features: this.features,\r\n });\r\n }\r\n\r\n public getKey(displayParams: DisplayParams, type: Mesh.PrimitiveType, hasNormals: boolean, isPlanar: boolean): MeshBuilderMap.Key {\r\n const key = new MeshBuilderMap.Key(displayParams, type, hasNormals, isPlanar);\r\n\r\n if (this.options.preserveOrder)\r\n key.order = ++this._keyOrder;\r\n\r\n return key;\r\n }\r\n\r\n /**\r\n * gets builder associated with key if defined, otherwise creates a new builder and sets that with key\r\n * @param key MeshBuilderMap.Key to associate with builder\r\n * @param props MeshBuilder.Props required to create builder if it does not already exist\r\n * @returns builder reference, changes will update instance stored in builderMap\r\n */\r\n public getBuilderFromKey(key: MeshBuilderMap.Key, props: MeshBuilder.Props): MeshBuilder {\r\n let builder = this.get(key);\r\n if (undefined === builder) {\r\n builder = MeshBuilder.create(props);\r\n this.set(key, builder);\r\n }\r\n return builder;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshBuilderMap { // eslint-disable-line no-redeclare\r\n export class Key {\r\n public order: number = 0;\r\n public readonly params: DisplayParams;\r\n public readonly type: Mesh.PrimitiveType;\r\n public readonly hasNormals: boolean;\r\n public readonly isPlanar: boolean;\r\n\r\n constructor(params: DisplayParams, type: Mesh.PrimitiveType, hasNormals: boolean, isPlanar: boolean) {\r\n this.params = params;\r\n this.type = type;\r\n this.hasNormals = hasNormals;\r\n this.isPlanar = isPlanar;\r\n }\r\n\r\n public static createFromMesh(mesh: Mesh): Key {\r\n return new Key(mesh.displayParams, mesh.type, mesh.normals.length !== 0, mesh.isPlanar);\r\n }\r\n\r\n public compare(rhs: Key): number {\r\n let diff = compareNumbers(this.order, rhs.order);\r\n if (0 === diff) {\r\n diff = compareNumbers(this.type, rhs.type);\r\n if (0 === diff) {\r\n diff = compareBooleans(this.isPlanar, rhs.isPlanar);\r\n if (0 === diff) {\r\n diff = compareBooleans(this.hasNormals, rhs.hasNormals);\r\n if (0 === diff) {\r\n diff = this.params.compareForMerge(rhs.params);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n public equals(rhs: Key): boolean { return 0 === this.compare(rhs); }\r\n }\r\n}\r\n"]}
|