@itwin/core-frontend 3.0.0-dev.180 → 3.0.0-dev.184
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 +89 -1
- package/lib/cjs/ApproximateTerrainHeights.d.ts.map +1 -1
- package/lib/cjs/ApproximateTerrainHeights.js +6 -2
- package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
- package/lib/cjs/BackgroundMapGeometry.d.ts +1 -1
- package/lib/cjs/BackgroundMapGeometry.d.ts.map +1 -1
- package/lib/cjs/BackgroundMapGeometry.js +2 -2
- package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
- package/lib/cjs/BingLocation.js +2 -2
- package/lib/cjs/BingLocation.js.map +1 -1
- package/lib/cjs/DisplayStyleState.d.ts +9 -3
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +66 -41
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/FrontendLoggerCategory.d.ts +2 -8
- package/lib/cjs/FrontendLoggerCategory.d.ts.map +1 -1
- package/lib/cjs/FrontendLoggerCategory.js +2 -8
- package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
- package/lib/cjs/NativeApp.d.ts +1 -1
- package/lib/cjs/NativeApp.d.ts.map +1 -1
- package/lib/cjs/NativeApp.js +3 -3
- package/lib/cjs/NativeApp.js.map +1 -1
- package/lib/cjs/NotificationManager.d.ts +3 -1
- package/lib/cjs/NotificationManager.d.ts.map +1 -1
- package/lib/cjs/NotificationManager.js +2 -0
- package/lib/cjs/NotificationManager.js.map +1 -1
- package/lib/cjs/RealityDataSource.js +11 -6
- package/lib/cjs/RealityDataSource.js.map +1 -1
- package/lib/cjs/ViewContext.js.map +1 -1
- package/lib/cjs/ViewCreator2d.js +1 -1
- package/lib/cjs/ViewCreator2d.js.map +1 -1
- package/lib/cjs/ViewCreator3d.d.ts +1 -1
- package/lib/cjs/ViewCreator3d.d.ts.map +1 -1
- package/lib/cjs/ViewCreator3d.js +2 -2
- package/lib/cjs/ViewCreator3d.js.map +1 -1
- package/lib/cjs/ViewingSpace.js +1 -1
- package/lib/cjs/ViewingSpace.js.map +1 -1
- package/lib/cjs/core-frontend.d.ts +4 -0
- package/lib/cjs/core-frontend.d.ts.map +1 -1
- package/lib/cjs/core-frontend.js +4 -0
- package/lib/cjs/core-frontend.js.map +1 -1
- package/lib/cjs/render/GraphicBuilder.d.ts +6 -0
- package/lib/cjs/render/GraphicBuilder.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBuilder.js.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts +2 -0
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +2 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryListBuilder.d.ts.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +1 -0
- package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +2 -2
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +3 -3
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchUniforms.js +8 -5
- package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +1 -1
- package/lib/cjs/request/Request.d.ts +167 -0
- package/lib/cjs/request/Request.d.ts.map +1 -0
- package/lib/cjs/request/Request.js +315 -0
- package/lib/cjs/request/Request.js.map +1 -0
- package/lib/cjs/tile/internal.d.ts +1 -0
- package/lib/cjs/tile/internal.d.ts.map +1 -1
- package/lib/cjs/tile/internal.js +1 -0
- package/lib/cjs/tile/internal.js.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGISTileMap.js +6 -2
- package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisTokenGenerator.js +3 -3
- package/lib/cjs/tile/map/ArcGisTokenGenerator.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +18 -10
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/cjs/tile/map/BingElevation.js +4 -4
- package/lib/cjs/tile/map/BingElevation.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +3 -3
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +4 -4
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +2 -2
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerAuthentication.d.ts +20 -0
- package/lib/cjs/tile/map/MapLayerAuthentication.d.ts.map +1 -0
- package/lib/cjs/tile/map/MapLayerAuthentication.js +18 -0
- package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -0
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +6 -3
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js +3 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +2 -2
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js +4 -2
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +5 -5
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts +3 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +5 -3
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js +2 -2
- package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +1 -1
- package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.d.ts +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.js +2 -2
- package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.d.ts +1 -1
- package/lib/cjs/tile/map/WmtsCapabilities.js +2 -2
- package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
- package/lib/esm/ApproximateTerrainHeights.d.ts.map +1 -1
- package/lib/esm/ApproximateTerrainHeights.js +6 -2
- package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
- package/lib/esm/BackgroundMapGeometry.d.ts +1 -1
- package/lib/esm/BackgroundMapGeometry.d.ts.map +1 -1
- package/lib/esm/BackgroundMapGeometry.js +2 -2
- package/lib/esm/BackgroundMapGeometry.js.map +1 -1
- package/lib/esm/BingLocation.js +1 -1
- package/lib/esm/BingLocation.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts +9 -3
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +66 -41
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/FrontendLoggerCategory.d.ts +2 -8
- package/lib/esm/FrontendLoggerCategory.d.ts.map +1 -1
- package/lib/esm/FrontendLoggerCategory.js +2 -8
- package/lib/esm/FrontendLoggerCategory.js.map +1 -1
- package/lib/esm/NativeApp.d.ts +1 -1
- package/lib/esm/NativeApp.d.ts.map +1 -1
- package/lib/esm/NativeApp.js +1 -1
- package/lib/esm/NativeApp.js.map +1 -1
- package/lib/esm/NotificationManager.d.ts +3 -1
- package/lib/esm/NotificationManager.d.ts.map +1 -1
- package/lib/esm/NotificationManager.js +2 -0
- package/lib/esm/NotificationManager.js.map +1 -1
- package/lib/esm/RealityDataSource.js +9 -4
- package/lib/esm/RealityDataSource.js.map +1 -1
- package/lib/esm/ViewContext.js.map +1 -1
- package/lib/esm/ViewCreator2d.js +1 -1
- package/lib/esm/ViewCreator2d.js.map +1 -1
- package/lib/esm/ViewCreator3d.d.ts +1 -1
- package/lib/esm/ViewCreator3d.d.ts.map +1 -1
- package/lib/esm/ViewCreator3d.js +2 -2
- package/lib/esm/ViewCreator3d.js.map +1 -1
- package/lib/esm/ViewingSpace.js +1 -1
- package/lib/esm/ViewingSpace.js.map +1 -1
- package/lib/esm/core-frontend.d.ts +4 -0
- package/lib/esm/core-frontend.d.ts.map +1 -1
- package/lib/esm/core-frontend.js +4 -0
- package/lib/esm/core-frontend.js.map +1 -1
- package/lib/esm/render/GraphicBuilder.d.ts +6 -0
- package/lib/esm/render/GraphicBuilder.d.ts.map +1 -1
- package/lib/esm/render/GraphicBuilder.js.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts +2 -0
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +2 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryListBuilder.d.ts.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +1 -0
- package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +2 -2
- package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js +3 -3
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchUniforms.js +8 -5
- package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +1 -1
- package/lib/esm/request/Request.d.ts +167 -0
- package/lib/esm/request/Request.d.ts.map +1 -0
- package/lib/esm/request/Request.js +289 -0
- package/lib/esm/request/Request.js.map +1 -0
- package/lib/esm/tile/internal.d.ts +1 -0
- package/lib/esm/tile/internal.d.ts.map +1 -1
- package/lib/esm/tile/internal.js +1 -0
- package/lib/esm/tile/internal.js.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGISTileMap.js +6 -2
- package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
- package/lib/esm/tile/map/ArcGisTokenGenerator.js +1 -1
- package/lib/esm/tile/map/ArcGisTokenGenerator.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.d.ts +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +14 -6
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/tile/map/BingElevation.js +1 -1
- package/lib/esm/tile/map/BingElevation.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerAuthentication.d.ts +20 -0
- package/lib/esm/tile/map/MapLayerAuthentication.d.ts.map +1 -0
- package/lib/esm/tile/map/MapLayerAuthentication.js +15 -0
- package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -0
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +6 -3
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js +3 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +2 -2
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js +5 -3
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -2
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts +3 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +4 -2
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapTileLoader.js +1 -1
- package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.d.ts +1 -1
- package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.d.ts +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.d.ts +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js +1 -1
- package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
- package/package.json +28 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphicBuilder.js","sourceRoot":"","sources":["../../../src/render/GraphicBuilder.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 { Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n AnyCurvePrimitive, Arc3d, Loop, Path, Point2d, Point3d, Polyface, Range3d, SolidPrimitive, Transform,\r\n} from \"@itwin/core-geometry\";\r\nimport { AnalysisStyle, ColorDef, Frustum, GraphicParams, LinePixels, Npc } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { RenderGraphic } from \"./RenderGraphic\";\r\nimport { GraphicPrimitive } from \"./GraphicPrimitive\";\r\n\r\n/**\r\n * Describes the type of a [[GraphicBuilder]], which defines the coordinate system in which the builder's geometry is defined and\r\n * controls the behavior of the [[RenderGraphic]] produced by the builder.\r\n * @note For those types for which depth-testing is disabled, the order in which the individual geometric primitives are drawn determines which geometry draws on top of other geometry.\r\n * - Within a [[GraphicList]], each [[RenderGraphic]] is rendered in the order in which it appears in the list; and\r\n * - Within a single [[RenderGraphic]], each geometric primitive is rendered in the ordered in which it was added to the GraphicBuilder.\r\n * @public\r\n */\r\nexport enum GraphicType {\r\n /**\r\n * Renders behind all other graphics. For example, the border of a [[SheetViewState]] is of this type.\r\n * Coordinates: [[CoordSystem.View]].\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]].\r\n * Lighting: none.\r\n * Depth-testing: disabled.\r\n * @see [[Decorations.viewBackground]]\r\n */\r\n ViewBackground,\r\n /** Used for the scene itself, dynamics, and 'normal' decorations. */\r\n /**\r\n * Renders as if it were part of the scene. All of the [[ViewFlags]] applied to the view's normal geometry also applies to these types of decorations.\r\n * Coordinates: [[CoordSystem.World]].\r\n * Lighting and [[RenderMode]]: from view.\r\n * Depth-testing: enabled.\r\n * @see [[Decorations.normal]].\r\n */\r\n Scene,\r\n /** Renders within the scene. Coordinates: world. RenderMode: smooth. Lighting: default. Z-testing: enabled */\r\n /** Renders within the scene, but ignores the view's [[ViewFlags]].\r\n * Coordinates: [[CoordSystem.World]].\r\n * Lighting: default.\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]].\r\n * Depth-testing: enabled.\r\n * @see [[Decorations.world]].\r\n */\r\n WorldDecoration,\r\n /**\r\n * Renders as an overlay on top of the scene. These decorations differ from [[GraphicType.WorldDecoration]] only in that depth-testing is disabled.\r\n * For example, the ACS triad and [[WindowAreaTool]] decorations are of this type.\r\n * Coordinates: [[CoordSystem.World]].\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]]\r\n * Lighting: default.\r\n * Depth-testing: disabled.\r\n * Renders atop the scene. Coordinates: world. RenderMode: smooth. Lighting: none. Z-testing: disabled\r\n * @note Overlay decorations typically employ some degree of transparency to ensure that they do not fully obscure the scene.\r\n * @see [[Decorations.worldOverlay]]\r\n */\r\n WorldOverlay,\r\n /**\r\n * Renders as an overlay on top of the scene. These decorations differ from [[GraphicType.WorldOverlay]] only in that their geometry is defined in view coordinates rather than world.\r\n * Coordinates: [[CoordSystem.View]].\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]]\r\n * Lighting: default.\r\n * Depth-testing: disabled.\r\n * @note For more flexibility in defining view overlay decorations, consider using a [[CanvasDecorationList]].\r\n * @see [[Decorations.viewOverlay]]\r\n */\r\n ViewOverlay,\r\n}\r\n\r\n/** Options used when constructing a `Batch` - that is, a [[RenderGraphic]] with an associated [FeatureTable]($common) describing individual [Feature]($common)s within the\r\n * graphic. Individual features can be resymbolized in a variety of ways including flashing and hiliting.\r\n * For example, to prevent graphics produced by [[readElementGraphics]] from being hilited when their corresponding element is in the [[SelectionSet]],\r\n * pass `{ noHilite: true }` to [[readElementGraphics]].\r\n * @public\r\n */\r\nexport interface BatchOptions {\r\n /** Identifies the [[Tile]] associated with the batch, chiefly for debugging purposes.\r\n * @beta\r\n */\r\n tileId?: string;\r\n /** If true, features within the batch will not be flashed on mouseover. */\r\n noFlash?: boolean;\r\n /** If true, features within the batch will not be hilited when their corresponding element is in the [[SelectionSet]]. */\r\n noHilite?: boolean;\r\n /** If true, features within the batch will not be emphasized when the corresponding [[Feature]] is emphasized using [FeatureOverrides]($common). */\r\n noEmphasis?: boolean;\r\n /** If true, the contents of the batch will only be drawn by [[Viewport.readPixels]], not [[Viewport.renderFrame]], causing them to be locatable but invisible. */\r\n locateOnly?: boolean;\r\n}\r\n\r\n/** Options used as part of [[GraphicBuilderOptions]] to describe a [pickable]($docs/learning/frontend/ViewDecorations#pickable-view-graphic-decorations) [[RenderGraphic]].\r\n * @public\r\n */\r\nexport interface PickableGraphicOptions extends BatchOptions {\r\n /** Unique identifier for the graphic.\r\n * @see [[IModelConnection.transientIds]] to obtain a unique Id in the context of an iModel.\r\n */\r\n id: Id64String;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] used by functions like [[DecorateContext.createGraphic]] and [[RenderSystem.createGraphic]].\r\n * @see [[ViewportGraphicBuilderOptions]] to create a graphic builder for a [[Viewport]].\r\n * @see [[CustomGraphicBuilderOptions]] to create a graphic builder unassociated with any [[Viewport]].\r\n * @public\r\n */\r\nexport interface GraphicBuilderOptions {\r\n /** The type of graphic to produce. */\r\n type: GraphicType;\r\n\r\n /** The local-to-world transform in which the builder's geometry is to be defined - by default, an identity transform. */\r\n placement?: Transform;\r\n\r\n /** If the graphic is to be pickable, specifies the pickable Id and other options. */\r\n pickable?: PickableGraphicOptions;\r\n\r\n /** If true, the order in which geometry is added to the builder is preserved.\r\n * This is useful for overlay and background graphics because they draw without using the depth buffer. For example, to draw an overlay containing a red shape with a white outline,\r\n * you would add the shape to the GraphicBuilder first, followed by the outline, to ensure the outline draws \"in front of\" the shape.\r\n * It defaults to true for overlays and background graphics, and false for other graphic types.\r\n * It is not useful for other types of graphics and imposes a performance penalty due to increased number of draw calls.\r\n * For overlay and background graphics that do not need to draw in any particular order, the performance penalty can be eliminated by setting this to `false`.\r\n */\r\n preserveOrder?: boolean;\r\n\r\n /** Controls whether normals are generated for surfaces. Normals allow 3d geometry to receive lighting; without them the geometry will be unaffected by lighting.\r\n * By default, normals are generated only for graphics of type [[GraphicType.Scene]]; or for any type of graphic if [[GraphicBuilder.wantEdges]] is true, because\r\n * normals are required to prevent z-fighting between surfaces and their edges. This default can be overridden by explicitly specifying `true` or `false`.\r\n * @see [[GraphicType]] for a description of whether and how different types of graphics are affected by lighting.\r\n */\r\n wantNormals?: boolean;\r\n\r\n /** Controls whether edges are generated for surfaces.\r\n * Edges are only displayed if [ViewFlags.renderMode]($common) is not [RenderMode.SmoothShade]($common) or [ViewFlags.visibleEdges]($common) is `true`.\r\n * Since all decoration graphics except [[GraphicType.Scene]] are drawn in smooth shaded mode with no visible edges, by default edges are only produced for scene graphics, and\r\n * - if a [[Viewport]] is supplied with the options - only if [ViewFlags.edgesRequired]($common) is true for the viewport.\r\n * That default can be overridden by explicitly specifying `true` or `false`. This can be useful for non-scene decorations contained in a [[GraphicBranch]] that applies [ViewFlagOverrides]($common)\r\n * that change the edge display settings; or for scene decorations that might be cached for reuse after the viewport's edge settings are changed.\r\n * @note Edges will tend to z-fight with their surfaces unless the graphic is [[pickable]].\r\n */\r\n generateEdges?: boolean;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] to produce a [[RenderGraphic]] to be displayed in a specific [[Viewport]].\r\n * The level of detail of the graphic will be computed from the position of its geometry within the viewport's [Frustum]($common).\r\n * Default values for [[GraphicBuilderOptions.wantNormals]] and [[GraphicBuilderOptions.generateEdges]] will be determined by the viewport's [ViewFlags]($common).\r\n * The [[GraphicBuilder.iModel]] will be set to the viewport's [[IModelConnection]].\r\n * @public\r\n */\r\nexport interface ViewportGraphicBuilderOptions extends GraphicBuilderOptions {\r\n /** The viewport in which the resultant [[RenderGraphic]] is to be drawn. */\r\n viewport: Viewport;\r\n\r\n /** If true, [[ViewState.getAspectRatioSkew]] will be taken into account when computing the level of detail for the produced graphics. */\r\n applyAspectRatioSkew?: boolean;\r\n\r\n iModel?: never;\r\n computeChordTolerance?: never;\r\n}\r\n\r\n/** Arguments used to compute the chord tolerance (level of detail) of the [[RenderGraphic]]s produced by a [[GraphicBuilder]].\r\n * Generally, the chord tolerance should be roughly equivalent to the size in meters of one pixel on screen where the graphic is to be displayed.\r\n * For [[GraphicType.ViewOverlay]] and [[GraphicType.ViewBackground]], which already define their geometry in pixels, the chord tolerance should typically be 1.\r\n * @see [[CustomGraphicBuilderOptions.computeChordTolerance]].\r\n * @public\r\n */\r\nexport interface ComputeChordToleranceArgs {\r\n /** The graphic builder being used to produce the graphics. */\r\n readonly graphic: GraphicBuilder;\r\n /** A function that computes a range enclosing all of the geometry that was added to the builder. */\r\n readonly computeRange: () => Range3d;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] to produce a [[RenderGraphic]] that is not associated with any particular [[Viewport]] and may not be associated with\r\n * any particular [[IModelConnection]].\r\n * This is primarily useful when the same graphic is to be saved and reused for display in multiple viewports and for which a chord tolerance can be computed\r\n * independently of each viewport's [Frustum]($common).\r\n * @public\r\n */\r\nexport interface CustomGraphicBuilderOptions extends GraphicBuilderOptions {\r\n /** Optionally, the IModelConnection with which the graphic is associated. */\r\n iModel?: IModelConnection;\r\n /** A function that can compute the level of detail for the graphics produced by the builder. */\r\n computeChordTolerance: (args: ComputeChordToleranceArgs) => number;\r\n\r\n applyAspectRatioSkew?: never;\r\n viewport?: never;\r\n}\r\n\r\n/** Provides methods for constructing a [[RenderGraphic]] from geometric primitives.\r\n * GraphicBuilder is primarily used for creating [[Decorations]] to be displayed inside a [[Viewport]].\r\n *\r\n * The typical process for constructing a [[RenderGraphic]] proceeds as follows:\r\n * 1. Use [[DecorateContext.createGraphic]] or [[RenderSystem.createGraphic]] to obtain a builder.\r\n * 2. Set up the symbology using [[GraphicBuilder.activateGraphicParams]] or [[GraphicBuilder.setSymbology]].\r\n * 3. Add one or more geometric primitives using methods like [[GraphicBuilder.addShape]] and [[GraphicBuilder.addLineString]], possibly setting new symbology in between.\r\n * 4. Use [[GraphicBuilder.finish]] to produce the finished [[RenderGraphic]].\r\n *\r\n * @note Most of the methods which add geometry to the builder take ownership of their inputs rather than cloning them.\r\n * So, for example, if you pass an array of points to addLineString(), you should not subsequently modify that array.\r\n *\r\n * @public\r\n */\r\nexport abstract class GraphicBuilder {\r\n /** The local coordinate system transform applied to this builder's geometry.\r\n * @see [[GraphicBuilderOptions.placement]].\r\n */\r\n public readonly placement: Transform;\r\n\r\n /** The iModel associated with this builder, if any. */\r\n public readonly iModel?: IModelConnection;\r\n\r\n /** The type of graphic to be produced by this builder.\r\n * @see [[GraphicBuilderOptions.type]].\r\n */\r\n public readonly type: GraphicType;\r\n\r\n /** If the graphic is to be pickable, specifies the pickable Id and other options. */\r\n public readonly pickable?: Readonly<PickableGraphicOptions>;\r\n\r\n /** If true, the order in which geometry is added to the builder is preserved.\r\n * @see [[GraphicBuilderOptions.preserveOrder]] for more details.\r\n */\r\n public readonly preserveOrder: boolean;\r\n\r\n /** Controls whether normals are generated for surfaces.\r\n * @note Normals are required for proper edge display, so by default they are always produced if [[wantEdges]] is `true`.\r\n * @see [[GraphicBuilderOptions.wantNormals]] for more details.\r\n */\r\n public readonly wantNormals: boolean;\r\n\r\n /** Controls whether edges are generated for surfaces.\r\n * @see [[GraphicBuilderOptions.generateEdges]] for more details.\r\n */\r\n public readonly wantEdges: boolean;\r\n\r\n /** @alpha */\r\n public readonly analysisStyle?: AnalysisStyle;\r\n\r\n protected readonly _computeChordTolerance: (args: ComputeChordToleranceArgs) => number;\r\n protected readonly _options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions;\r\n\r\n /** @internal */\r\n protected constructor(options: ViewportGraphicBuilderOptions | CustomGraphicBuilderOptions) {\r\n // Stored for potential use later in creating a new GraphicBuilder from this one (see PrimitiveBuilder.finishGraphic).\r\n this._options = options;\r\n\r\n const vp = options.viewport;\r\n this.placement = options.placement ?? Transform.createIdentity();\r\n this.iModel = vp?.iModel ?? options.iModel;\r\n this.type = options.type;\r\n this.pickable = options.pickable;\r\n this.wantEdges = options.generateEdges ?? (this.type === GraphicType.Scene && (!vp || vp.viewFlags.edgesRequired()));\r\n this.wantNormals = options.wantNormals ?? (this.wantEdges || this.type === GraphicType.Scene);\r\n this.preserveOrder = options.preserveOrder ?? (this.isOverlay || this.isViewBackground);\r\n\r\n if (!options.viewport) {\r\n this._computeChordTolerance = options.computeChordTolerance;\r\n return;\r\n }\r\n\r\n this.analysisStyle = options.viewport.displayStyle.settings.analysisStyle;\r\n\r\n this._computeChordTolerance = (args: ComputeChordToleranceArgs) => {\r\n let pixelSize = 1;\r\n if (!this.isViewCoordinates) {\r\n // Compute the horizontal distance in meters between two adjacent pixels at the center of the geometry.\r\n pixelSize = options.viewport.getPixelSizeAtPoint(args.computeRange().center);\r\n pixelSize = options.viewport.target.adjustPixelSizeForLOD(pixelSize);\r\n\r\n // Aspect ratio skew > 1.0 stretches the view in Y. In that case use the smaller vertical pixel distance for our stroke tolerance.\r\n const skew = options.applyAspectRatioSkew ? options.viewport.view.getAspectRatioSkew() : 0;\r\n if (skew > 1)\r\n pixelSize /= skew;\r\n }\r\n\r\n return pixelSize * 0.25;\r\n };\r\n }\r\n\r\n /** The Id to be associated with the graphic for picking.\r\n * @see [[GraphicBuilderOptions.pickable]] for more options.\r\n */\r\n public get pickId(): Id64String | undefined {\r\n return this.pickable?.id;\r\n }\r\n\r\n /** Whether the builder's geometry is defined in [[CoordSystem.View]] coordinates.\r\n * @see [[isWorldCoordinates]].\r\n */\r\n public get isViewCoordinates(): boolean {\r\n return this.type === GraphicType.ViewBackground || this.type === GraphicType.ViewOverlay;\r\n }\r\n\r\n /** Whether the builder's geometry is defined in [[CoordSystem.World]] coordinates.\r\n * @see [[isViewCoordinates]].\r\n */\r\n public get isWorldCoordinates(): boolean {\r\n return !this.isViewCoordinates;\r\n }\r\n\r\n /** True if the builder produces a graphic of [[GraphicType.Scene]]. */\r\n public get isSceneGraphic(): boolean {\r\n return this.type === GraphicType.Scene;\r\n }\r\n\r\n /** True if the builder produces a graphic of [[GraphicType.ViewBackground]]. */\r\n public get isViewBackground(): boolean {\r\n return this.type === GraphicType.ViewBackground;\r\n }\r\n\r\n /** True if the builder produces a graphic of [[GraphicType.WorldOverlay]] or [[GraphicType.ViewOerlay]]. */\r\n public get isOverlay(): boolean {\r\n return this.type === GraphicType.ViewOverlay || this.type === GraphicType.WorldOverlay;\r\n }\r\n\r\n /**\r\n * Processes the accumulated symbology and geometry to produce a renderable graphic.\r\n * This function can only be called once; after the [[RenderGraphic]] has been extracted the [[GraphicBuilder]] should no longer be used.\r\n */\r\n public abstract finish(): RenderGraphic;\r\n\r\n /** Sets the current active symbology for this builder. Any new geometry subsequently added to the builder will be drawn using the specified symbology.\r\n * @param graphicParams The symbology to apply to subsequent geometry.\r\n * @see [[GraphicBuilder.setSymbology]] for a convenient way to set common symbology options.\r\n */\r\n public abstract activateGraphicParams(graphicParams: GraphicParams): void;\r\n\r\n /**\r\n * Appends a 3d line string to the builder.\r\n * @param points Array of vertices in the line string.\r\n */\r\n public abstract addLineString(points: Point3d[]): void;\r\n\r\n /**\r\n * Appends a 2d line string to the builder.\r\n * @param points Array of vertices in the line string.\r\n * @param zDepth Z value in local coordinates to use for each point.\r\n */\r\n public abstract addLineString2d(points: Point2d[], zDepth: number): void;\r\n\r\n /**\r\n * Appends a 3d point string to the builder. The points are drawn disconnected, with a diameter in pixels defined by the builder's active [[GraphicParams.rasterWidth]].\r\n * @param points Array of vertices in the point string.\r\n */\r\n public abstract addPointString(points: Point3d[]): void;\r\n\r\n /**\r\n * Appends a 2d point string to the builder. The points are drawn disconnected, with a diameter in pixels defined by the builder's active [[GraphicParams.rasterWidth]].\r\n * @param points Array of vertices in the point string.\r\n * @param zDepth Z value in local coordinates to use for each point.\r\n */\r\n public abstract addPointString2d(points: Point2d[], zDepth: number): void;\r\n\r\n /**\r\n * Appends a closed 3d planar region to the builder.\r\n * @param points Array of vertices of the shape.\r\n */\r\n public abstract addShape(points: Point3d[]): void;\r\n\r\n /**\r\n * Appends a closed 2d region to the builder.\r\n * @param points Array of vertices of the shape.\r\n * @param zDepth Z value in local coordinates to use for each point.\r\n */\r\n public abstract addShape2d(points: Point2d[], zDepth: number): void;\r\n\r\n /**\r\n * Appends a 3d open arc or closed ellipse to the builder.\r\n * @param arc Description of the arc or ellipse.\r\n * @param isEllipse If true, and if the arc defines a full sweep, then draw as a closed ellipse instead of an arc.\r\n * @param filled If true, and isEllipse is also true, then draw ellipse filled.\r\n */\r\n public abstract addArc(arc: Arc3d, isEllipse: boolean, filled: boolean): void;\r\n\r\n /**\r\n * Appends a 2d open arc or closed ellipse to the builder.\r\n * @param arc Description of the arc or ellipse.\r\n * @param isEllipse If true, and if the arc defines a full sweep, then draw as a closed ellipse instead of an arc.\r\n * @param filled If true, and isEllipse is also true, then draw ellipse filled.\r\n * @param zDepth Z value in local coordinates to use for each point in the arc or ellipse.\r\n */\r\n public abstract addArc2d(ellipse: Arc3d, isEllipse: boolean, filled: boolean, zDepth: number): void;\r\n\r\n /** Append a 3d open path to the builder. */\r\n public abstract addPath(path: Path): void;\r\n\r\n /** Append a 3d planar region to the builder. */\r\n public abstract addLoop(loop: Loop): void;\r\n\r\n /** Append a [CurvePrimitive]($core-geometry) to the builder. */\r\n public addCurvePrimitive(curve: AnyCurvePrimitive): void {\r\n switch (curve.curvePrimitiveType) {\r\n case \"lineString\":\r\n this.addLineString(curve.points);\r\n break;\r\n case \"lineSegment\":\r\n this.addLineString([curve.startPoint(), curve.endPoint()]);\r\n break;\r\n case \"arc\":\r\n this.addArc(curve, false, false);\r\n break;\r\n default:\r\n const path = new Path();\r\n if (path.tryAddChild(curve))\r\n this.addPath(path);\r\n\r\n break;\r\n }\r\n }\r\n\r\n /** Append a mesh to the builder.\r\n * @param meshData Describes the mesh\r\n * @param filled If the mesh describes a planar region, indicates whether its interior area should be drawn with fill in [[RenderMode.Wireframe]].\r\n */\r\n public abstract addPolyface(meshData: Polyface, filled: boolean): void;\r\n\r\n /** Append a solid primitive to the builder. */\r\n public abstract addSolidPrimitive(solidPrimitive: SolidPrimitive): void;\r\n\r\n /** Append any primitive to the builder.\r\n * @param primitive The graphic primitive to append.\r\n */\r\n public addPrimitive(primitive: GraphicPrimitive): void {\r\n switch (primitive.type) {\r\n case \"linestring\":\r\n this.addLineString(primitive.points);\r\n break;\r\n case \"linestring2d\":\r\n this.addLineString2d(primitive.points, primitive.zDepth);\r\n break;\r\n case \"pointstring\":\r\n this.addPointString(primitive.points);\r\n break;\r\n case \"pointstring2d\":\r\n this.addPointString2d(primitive.points, primitive.zDepth);\r\n break;\r\n case \"shape\":\r\n this.addShape(primitive.points);\r\n break;\r\n case \"shape2d\":\r\n this.addShape2d(primitive.points, primitive.zDepth);\r\n break;\r\n case \"arc\":\r\n this.addArc(primitive.arc, true === primitive.isEllipse, true === primitive.filled);\r\n break;\r\n case \"arc2d\":\r\n this.addArc2d(primitive.arc, true === primitive.isEllipse, true === primitive.filled, primitive.zDepth);\r\n break;\r\n case \"path\":\r\n this.addPath(primitive.path);\r\n break;\r\n case \"loop\":\r\n this.addLoop(primitive.loop);\r\n break;\r\n case \"polyface\":\r\n this.addPolyface(primitive.polyface, true === primitive.filled);\r\n break;\r\n case \"solidPrimitive\":\r\n this.addSolidPrimitive(primitive.solidPrimitive);\r\n break;\r\n }\r\n }\r\n\r\n /** Add Range3d edges. Useful for debugging. */\r\n public addRangeBox(range: Range3d) {\r\n this.addFrustum(Frustum.fromRange(range));\r\n }\r\n\r\n /** Add Frustum edges. Useful for debugging. */\r\n public addFrustum(frustum: Frustum) {\r\n this.addRangeBoxFromCorners(frustum.points);\r\n }\r\n\r\n /** Add range edges from corner points */\r\n public addRangeBoxFromCorners(p: Point3d[]) {\r\n this.addLineString([\r\n p[Npc.LeftBottomFront],\r\n p[Npc.LeftTopFront],\r\n p[Npc.RightTopFront],\r\n p[Npc.RightBottomFront],\r\n p[Npc.RightBottomRear],\r\n p[Npc.RightTopRear],\r\n p[Npc.LeftTopRear],\r\n p[Npc.LeftBottomRear],\r\n p[Npc.LeftBottomFront].clone(),\r\n p[Npc.RightBottomFront].clone(),\r\n ]);\r\n\r\n this.addLineString([p[Npc.LeftTopFront].clone(), p[Npc.LeftTopRear].clone()]);\r\n this.addLineString([p[Npc.RightTopFront].clone(), p[Npc.RightTopRear].clone()]);\r\n this.addLineString([p[Npc.LeftBottomRear].clone(), p[Npc.RightBottomRear].clone()]);\r\n }\r\n\r\n /** Sets the current active symbology for this builder. Any new geometry subsequently added will be drawn using the specified symbology.\r\n * @param lineColor The color in which to draw lines.\r\n * @param fillColor The color in which to draw filled regions.\r\n * @param lineWidth The width in pixels to draw lines. The renderer will clamp this value to an integer in the range [1, 32].\r\n * @param linePixels The pixel pattern in which to draw lines.\r\n * @see [[GraphicBuilder.activateGraphicParams]] for additional symbology options.\r\n */\r\n public setSymbology(lineColor: ColorDef, fillColor: ColorDef, lineWidth: number, linePixels = LinePixels.Solid) {\r\n this.activateGraphicParams(GraphicParams.fromSymbology(lineColor, fillColor, lineWidth, linePixels));\r\n }\r\n\r\n /** Set the current active symbology for this builder to be a blanking fill before adding a planar region.\r\n * A planar region drawn with blanking fill renders behind other geometry in the same graphic.\r\n * Blanking fill is not affected by the fill [[ViewFlags]] being disabled.\r\n * An example would be to add a line to a graphic containing a shape with blanking fill so that the line is always shown in front of the fill.\r\n * @param fillColor The color in which to draw filled regions.\r\n */\r\n public setBlankingFill(fillColor: ColorDef) { this.activateGraphicParams(GraphicParams.fromBlankingFill(fillColor)); }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"GraphicBuilder.js","sourceRoot":"","sources":["../../../src/render/GraphicBuilder.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 { Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n AnyCurvePrimitive, Arc3d, Loop, Path, Point2d, Point3d, Polyface, Range3d, SolidPrimitive, Transform,\r\n} from \"@itwin/core-geometry\";\r\nimport { AnalysisStyle, ColorDef, Frustum, GraphicParams, LinePixels, Npc } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { RenderGraphic } from \"./RenderGraphic\";\r\nimport { GraphicPrimitive } from \"./GraphicPrimitive\";\r\n\r\n/**\r\n * Describes the type of a [[GraphicBuilder]], which defines the coordinate system in which the builder's geometry is defined and\r\n * controls the behavior of the [[RenderGraphic]] produced by the builder.\r\n * @note For those types for which depth-testing is disabled, the order in which the individual geometric primitives are drawn determines which geometry draws on top of other geometry.\r\n * - Within a [[GraphicList]], each [[RenderGraphic]] is rendered in the order in which it appears in the list; and\r\n * - Within a single [[RenderGraphic]], each geometric primitive is rendered in the ordered in which it was added to the GraphicBuilder.\r\n * @public\r\n */\r\nexport enum GraphicType {\r\n /**\r\n * Renders behind all other graphics. For example, the border of a [[SheetViewState]] is of this type.\r\n * Coordinates: [[CoordSystem.View]].\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]].\r\n * Lighting: none.\r\n * Depth-testing: disabled.\r\n * @see [[Decorations.viewBackground]]\r\n */\r\n ViewBackground,\r\n /** Used for the scene itself, dynamics, and 'normal' decorations. */\r\n /**\r\n * Renders as if it were part of the scene. All of the [[ViewFlags]] applied to the view's normal geometry also applies to these types of decorations.\r\n * Coordinates: [[CoordSystem.World]].\r\n * Lighting and [[RenderMode]]: from view.\r\n * Depth-testing: enabled.\r\n * @see [[Decorations.normal]].\r\n */\r\n Scene,\r\n /** Renders within the scene. Coordinates: world. RenderMode: smooth. Lighting: default. Z-testing: enabled */\r\n /** Renders within the scene, but ignores the view's [[ViewFlags]].\r\n * Coordinates: [[CoordSystem.World]].\r\n * Lighting: default.\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]].\r\n * Depth-testing: enabled.\r\n * @see [[Decorations.world]].\r\n */\r\n WorldDecoration,\r\n /**\r\n * Renders as an overlay on top of the scene. These decorations differ from [[GraphicType.WorldDecoration]] only in that depth-testing is disabled.\r\n * For example, the ACS triad and [[WindowAreaTool]] decorations are of this type.\r\n * Coordinates: [[CoordSystem.World]].\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]]\r\n * Lighting: default.\r\n * Depth-testing: disabled.\r\n * Renders atop the scene. Coordinates: world. RenderMode: smooth. Lighting: none. Z-testing: disabled\r\n * @note Overlay decorations typically employ some degree of transparency to ensure that they do not fully obscure the scene.\r\n * @see [[Decorations.worldOverlay]]\r\n */\r\n WorldOverlay,\r\n /**\r\n * Renders as an overlay on top of the scene. These decorations differ from [[GraphicType.WorldOverlay]] only in that their geometry is defined in view coordinates rather than world.\r\n * Coordinates: [[CoordSystem.View]].\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]]\r\n * Lighting: default.\r\n * Depth-testing: disabled.\r\n * @note For more flexibility in defining view overlay decorations, consider using a [[CanvasDecorationList]].\r\n * @see [[Decorations.viewOverlay]]\r\n */\r\n ViewOverlay,\r\n}\r\n\r\n/** Options used when constructing a `Batch` - that is, a [[RenderGraphic]] with an associated [FeatureTable]($common) describing individual [Feature]($common)s within the\r\n * graphic. Individual features can be resymbolized in a variety of ways including flashing and hiliting.\r\n * For example, to prevent graphics produced by [[readElementGraphics]] from being hilited when their corresponding element is in the [[SelectionSet]],\r\n * pass `{ noHilite: true }` to [[readElementGraphics]].\r\n * @public\r\n */\r\nexport interface BatchOptions {\r\n /** Identifies the [[Tile]] associated with the batch, chiefly for debugging purposes.\r\n * @beta\r\n */\r\n tileId?: string;\r\n /** If true, features within the batch will not be flashed on mouseover. */\r\n noFlash?: boolean;\r\n /** If true, features within the batch will not be hilited when their corresponding element is in the [[SelectionSet]]. */\r\n noHilite?: boolean;\r\n /** If true, features within the batch will not be emphasized when the corresponding [[Feature]] is emphasized using [FeatureOverrides]($common). */\r\n noEmphasis?: boolean;\r\n /** If true, the contents of the batch will only be drawn by [[Viewport.readPixels]], not [[Viewport.renderFrame]], causing them to be locatable but invisible. */\r\n locateOnly?: boolean;\r\n}\r\n\r\n/** Options used as part of [[GraphicBuilderOptions]] to describe a [pickable]($docs/learning/frontend/ViewDecorations#pickable-view-graphic-decorations) [[RenderGraphic]].\r\n * @public\r\n */\r\nexport interface PickableGraphicOptions extends BatchOptions {\r\n /** Unique identifier for the graphic.\r\n * @see [[IModelConnection.transientIds]] to obtain a unique Id in the context of an iModel.\r\n */\r\n id: Id64String;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] used by functions like [[DecorateContext.createGraphic]] and [[RenderSystem.createGraphic]].\r\n * @see [[ViewportGraphicBuilderOptions]] to create a graphic builder for a [[Viewport]].\r\n * @see [[CustomGraphicBuilderOptions]] to create a graphic builder unassociated with any [[Viewport]].\r\n * @public\r\n */\r\nexport interface GraphicBuilderOptions {\r\n /** The type of graphic to produce. */\r\n type: GraphicType;\r\n\r\n /** The local-to-world transform in which the builder's geometry is to be defined - by default, an identity transform. */\r\n placement?: Transform;\r\n\r\n /** If the graphic is to be pickable, specifies the pickable Id and other options. */\r\n pickable?: PickableGraphicOptions;\r\n\r\n /** If true, the order in which geometry is added to the builder is preserved.\r\n * This is useful for overlay and background graphics because they draw without using the depth buffer. For example, to draw an overlay containing a red shape with a white outline,\r\n * you would add the shape to the GraphicBuilder first, followed by the outline, to ensure the outline draws \"in front of\" the shape.\r\n * It defaults to true for overlays and background graphics, and false for other graphic types.\r\n * It is not useful for other types of graphics and imposes a performance penalty due to increased number of draw calls.\r\n * For overlay and background graphics that do not need to draw in any particular order, the performance penalty can be eliminated by setting this to `false`.\r\n */\r\n preserveOrder?: boolean;\r\n\r\n /** Controls whether normals are generated for surfaces. Normals allow 3d geometry to receive lighting; without them the geometry will be unaffected by lighting.\r\n * By default, normals are generated only for graphics of type [[GraphicType.Scene]]; or for any type of graphic if [[GraphicBuilder.wantEdges]] is true, because\r\n * normals are required to prevent z-fighting between surfaces and their edges. This default can be overridden by explicitly specifying `true` or `false`.\r\n * @see [[GraphicType]] for a description of whether and how different types of graphics are affected by lighting.\r\n */\r\n wantNormals?: boolean;\r\n\r\n /** Controls whether edges are generated for surfaces.\r\n * Edges are only displayed if [ViewFlags.renderMode]($common) is not [RenderMode.SmoothShade]($common) or [ViewFlags.visibleEdges]($common) is `true`.\r\n * Since all decoration graphics except [[GraphicType.Scene]] are drawn in smooth shaded mode with no visible edges, by default edges are only produced for scene graphics, and\r\n * - if a [[Viewport]] is supplied with the options - only if [ViewFlags.edgesRequired]($common) is true for the viewport.\r\n * That default can be overridden by explicitly specifying `true` or `false`. This can be useful for non-scene decorations contained in a [[GraphicBranch]] that applies [ViewFlagOverrides]($common)\r\n * that change the edge display settings; or for scene decorations that might be cached for reuse after the viewport's edge settings are changed.\r\n * @note Edges will tend to z-fight with their surfaces unless the graphic is [[pickable]].\r\n */\r\n generateEdges?: boolean;\r\n\r\n /** If defined, specifies a point about which the graphic will rotate such that it always faces the viewer.\r\n * This can be particular useful for planar regions to create a billboarding effect - e.g., to implement [[Marker]]-like WebGL decorations.\r\n * The graphic's [[placement]] transform is not applied to the point.\r\n * @note This has no effect for graphics displayed in a 2d view.\r\n */\r\n viewIndependentOrigin?: Point3d;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] to produce a [[RenderGraphic]] to be displayed in a specific [[Viewport]].\r\n * The level of detail of the graphic will be computed from the position of its geometry within the viewport's [Frustum]($common).\r\n * Default values for [[GraphicBuilderOptions.wantNormals]] and [[GraphicBuilderOptions.generateEdges]] will be determined by the viewport's [ViewFlags]($common).\r\n * The [[GraphicBuilder.iModel]] will be set to the viewport's [[IModelConnection]].\r\n * @public\r\n */\r\nexport interface ViewportGraphicBuilderOptions extends GraphicBuilderOptions {\r\n /** The viewport in which the resultant [[RenderGraphic]] is to be drawn. */\r\n viewport: Viewport;\r\n\r\n /** If true, [[ViewState.getAspectRatioSkew]] will be taken into account when computing the level of detail for the produced graphics. */\r\n applyAspectRatioSkew?: boolean;\r\n\r\n iModel?: never;\r\n computeChordTolerance?: never;\r\n}\r\n\r\n/** Arguments used to compute the chord tolerance (level of detail) of the [[RenderGraphic]]s produced by a [[GraphicBuilder]].\r\n * Generally, the chord tolerance should be roughly equivalent to the size in meters of one pixel on screen where the graphic is to be displayed.\r\n * For [[GraphicType.ViewOverlay]] and [[GraphicType.ViewBackground]], which already define their geometry in pixels, the chord tolerance should typically be 1.\r\n * @see [[CustomGraphicBuilderOptions.computeChordTolerance]].\r\n * @public\r\n */\r\nexport interface ComputeChordToleranceArgs {\r\n /** The graphic builder being used to produce the graphics. */\r\n readonly graphic: GraphicBuilder;\r\n /** A function that computes a range enclosing all of the geometry that was added to the builder. */\r\n readonly computeRange: () => Range3d;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] to produce a [[RenderGraphic]] that is not associated with any particular [[Viewport]] and may not be associated with\r\n * any particular [[IModelConnection]].\r\n * This is primarily useful when the same graphic is to be saved and reused for display in multiple viewports and for which a chord tolerance can be computed\r\n * independently of each viewport's [Frustum]($common).\r\n * @public\r\n */\r\nexport interface CustomGraphicBuilderOptions extends GraphicBuilderOptions {\r\n /** Optionally, the IModelConnection with which the graphic is associated. */\r\n iModel?: IModelConnection;\r\n /** A function that can compute the level of detail for the graphics produced by the builder. */\r\n computeChordTolerance: (args: ComputeChordToleranceArgs) => number;\r\n\r\n applyAspectRatioSkew?: never;\r\n viewport?: never;\r\n}\r\n\r\n/** Provides methods for constructing a [[RenderGraphic]] from geometric primitives.\r\n * GraphicBuilder is primarily used for creating [[Decorations]] to be displayed inside a [[Viewport]].\r\n *\r\n * The typical process for constructing a [[RenderGraphic]] proceeds as follows:\r\n * 1. Use [[DecorateContext.createGraphic]] or [[RenderSystem.createGraphic]] to obtain a builder.\r\n * 2. Set up the symbology using [[GraphicBuilder.activateGraphicParams]] or [[GraphicBuilder.setSymbology]].\r\n * 3. Add one or more geometric primitives using methods like [[GraphicBuilder.addShape]] and [[GraphicBuilder.addLineString]], possibly setting new symbology in between.\r\n * 4. Use [[GraphicBuilder.finish]] to produce the finished [[RenderGraphic]].\r\n *\r\n * @note Most of the methods which add geometry to the builder take ownership of their inputs rather than cloning them.\r\n * So, for example, if you pass an array of points to addLineString(), you should not subsequently modify that array.\r\n *\r\n * @public\r\n */\r\nexport abstract class GraphicBuilder {\r\n /** The local coordinate system transform applied to this builder's geometry.\r\n * @see [[GraphicBuilderOptions.placement]].\r\n */\r\n public readonly placement: Transform;\r\n\r\n /** The iModel associated with this builder, if any. */\r\n public readonly iModel?: IModelConnection;\r\n\r\n /** The type of graphic to be produced by this builder.\r\n * @see [[GraphicBuilderOptions.type]].\r\n */\r\n public readonly type: GraphicType;\r\n\r\n /** If the graphic is to be pickable, specifies the pickable Id and other options. */\r\n public readonly pickable?: Readonly<PickableGraphicOptions>;\r\n\r\n /** If true, the order in which geometry is added to the builder is preserved.\r\n * @see [[GraphicBuilderOptions.preserveOrder]] for more details.\r\n */\r\n public readonly preserveOrder: boolean;\r\n\r\n /** Controls whether normals are generated for surfaces.\r\n * @note Normals are required for proper edge display, so by default they are always produced if [[wantEdges]] is `true`.\r\n * @see [[GraphicBuilderOptions.wantNormals]] for more details.\r\n */\r\n public readonly wantNormals: boolean;\r\n\r\n /** Controls whether edges are generated for surfaces.\r\n * @see [[GraphicBuilderOptions.generateEdges]] for more details.\r\n */\r\n public readonly wantEdges: boolean;\r\n\r\n /** @alpha */\r\n public readonly analysisStyle?: AnalysisStyle;\r\n\r\n protected readonly _computeChordTolerance: (args: ComputeChordToleranceArgs) => number;\r\n protected readonly _options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions;\r\n\r\n /** @internal */\r\n protected constructor(options: ViewportGraphicBuilderOptions | CustomGraphicBuilderOptions) {\r\n // Stored for potential use later in creating a new GraphicBuilder from this one (see PrimitiveBuilder.finishGraphic).\r\n this._options = options;\r\n\r\n const vp = options.viewport;\r\n this.placement = options.placement ?? Transform.createIdentity();\r\n this.iModel = vp?.iModel ?? options.iModel;\r\n this.type = options.type;\r\n this.pickable = options.pickable;\r\n this.wantEdges = options.generateEdges ?? (this.type === GraphicType.Scene && (!vp || vp.viewFlags.edgesRequired()));\r\n this.wantNormals = options.wantNormals ?? (this.wantEdges || this.type === GraphicType.Scene);\r\n this.preserveOrder = options.preserveOrder ?? (this.isOverlay || this.isViewBackground);\r\n\r\n if (!options.viewport) {\r\n this._computeChordTolerance = options.computeChordTolerance;\r\n return;\r\n }\r\n\r\n this.analysisStyle = options.viewport.displayStyle.settings.analysisStyle;\r\n\r\n this._computeChordTolerance = (args: ComputeChordToleranceArgs) => {\r\n let pixelSize = 1;\r\n if (!this.isViewCoordinates) {\r\n // Compute the horizontal distance in meters between two adjacent pixels at the center of the geometry.\r\n pixelSize = options.viewport.getPixelSizeAtPoint(args.computeRange().center);\r\n pixelSize = options.viewport.target.adjustPixelSizeForLOD(pixelSize);\r\n\r\n // Aspect ratio skew > 1.0 stretches the view in Y. In that case use the smaller vertical pixel distance for our stroke tolerance.\r\n const skew = options.applyAspectRatioSkew ? options.viewport.view.getAspectRatioSkew() : 0;\r\n if (skew > 1)\r\n pixelSize /= skew;\r\n }\r\n\r\n return pixelSize * 0.25;\r\n };\r\n }\r\n\r\n /** The Id to be associated with the graphic for picking.\r\n * @see [[GraphicBuilderOptions.pickable]] for more options.\r\n */\r\n public get pickId(): Id64String | undefined {\r\n return this.pickable?.id;\r\n }\r\n\r\n /** Whether the builder's geometry is defined in [[CoordSystem.View]] coordinates.\r\n * @see [[isWorldCoordinates]].\r\n */\r\n public get isViewCoordinates(): boolean {\r\n return this.type === GraphicType.ViewBackground || this.type === GraphicType.ViewOverlay;\r\n }\r\n\r\n /** Whether the builder's geometry is defined in [[CoordSystem.World]] coordinates.\r\n * @see [[isViewCoordinates]].\r\n */\r\n public get isWorldCoordinates(): boolean {\r\n return !this.isViewCoordinates;\r\n }\r\n\r\n /** True if the builder produces a graphic of [[GraphicType.Scene]]. */\r\n public get isSceneGraphic(): boolean {\r\n return this.type === GraphicType.Scene;\r\n }\r\n\r\n /** True if the builder produces a graphic of [[GraphicType.ViewBackground]]. */\r\n public get isViewBackground(): boolean {\r\n return this.type === GraphicType.ViewBackground;\r\n }\r\n\r\n /** True if the builder produces a graphic of [[GraphicType.WorldOverlay]] or [[GraphicType.ViewOerlay]]. */\r\n public get isOverlay(): boolean {\r\n return this.type === GraphicType.ViewOverlay || this.type === GraphicType.WorldOverlay;\r\n }\r\n\r\n /**\r\n * Processes the accumulated symbology and geometry to produce a renderable graphic.\r\n * This function can only be called once; after the [[RenderGraphic]] has been extracted the [[GraphicBuilder]] should no longer be used.\r\n */\r\n public abstract finish(): RenderGraphic;\r\n\r\n /** Sets the current active symbology for this builder. Any new geometry subsequently added to the builder will be drawn using the specified symbology.\r\n * @param graphicParams The symbology to apply to subsequent geometry.\r\n * @see [[GraphicBuilder.setSymbology]] for a convenient way to set common symbology options.\r\n */\r\n public abstract activateGraphicParams(graphicParams: GraphicParams): void;\r\n\r\n /**\r\n * Appends a 3d line string to the builder.\r\n * @param points Array of vertices in the line string.\r\n */\r\n public abstract addLineString(points: Point3d[]): void;\r\n\r\n /**\r\n * Appends a 2d line string to the builder.\r\n * @param points Array of vertices in the line string.\r\n * @param zDepth Z value in local coordinates to use for each point.\r\n */\r\n public abstract addLineString2d(points: Point2d[], zDepth: number): void;\r\n\r\n /**\r\n * Appends a 3d point string to the builder. The points are drawn disconnected, with a diameter in pixels defined by the builder's active [[GraphicParams.rasterWidth]].\r\n * @param points Array of vertices in the point string.\r\n */\r\n public abstract addPointString(points: Point3d[]): void;\r\n\r\n /**\r\n * Appends a 2d point string to the builder. The points are drawn disconnected, with a diameter in pixels defined by the builder's active [[GraphicParams.rasterWidth]].\r\n * @param points Array of vertices in the point string.\r\n * @param zDepth Z value in local coordinates to use for each point.\r\n */\r\n public abstract addPointString2d(points: Point2d[], zDepth: number): void;\r\n\r\n /**\r\n * Appends a closed 3d planar region to the builder.\r\n * @param points Array of vertices of the shape.\r\n */\r\n public abstract addShape(points: Point3d[]): void;\r\n\r\n /**\r\n * Appends a closed 2d region to the builder.\r\n * @param points Array of vertices of the shape.\r\n * @param zDepth Z value in local coordinates to use for each point.\r\n */\r\n public abstract addShape2d(points: Point2d[], zDepth: number): void;\r\n\r\n /**\r\n * Appends a 3d open arc or closed ellipse to the builder.\r\n * @param arc Description of the arc or ellipse.\r\n * @param isEllipse If true, and if the arc defines a full sweep, then draw as a closed ellipse instead of an arc.\r\n * @param filled If true, and isEllipse is also true, then draw ellipse filled.\r\n */\r\n public abstract addArc(arc: Arc3d, isEllipse: boolean, filled: boolean): void;\r\n\r\n /**\r\n * Appends a 2d open arc or closed ellipse to the builder.\r\n * @param arc Description of the arc or ellipse.\r\n * @param isEllipse If true, and if the arc defines a full sweep, then draw as a closed ellipse instead of an arc.\r\n * @param filled If true, and isEllipse is also true, then draw ellipse filled.\r\n * @param zDepth Z value in local coordinates to use for each point in the arc or ellipse.\r\n */\r\n public abstract addArc2d(ellipse: Arc3d, isEllipse: boolean, filled: boolean, zDepth: number): void;\r\n\r\n /** Append a 3d open path to the builder. */\r\n public abstract addPath(path: Path): void;\r\n\r\n /** Append a 3d planar region to the builder. */\r\n public abstract addLoop(loop: Loop): void;\r\n\r\n /** Append a [CurvePrimitive]($core-geometry) to the builder. */\r\n public addCurvePrimitive(curve: AnyCurvePrimitive): void {\r\n switch (curve.curvePrimitiveType) {\r\n case \"lineString\":\r\n this.addLineString(curve.points);\r\n break;\r\n case \"lineSegment\":\r\n this.addLineString([curve.startPoint(), curve.endPoint()]);\r\n break;\r\n case \"arc\":\r\n this.addArc(curve, false, false);\r\n break;\r\n default:\r\n const path = new Path();\r\n if (path.tryAddChild(curve))\r\n this.addPath(path);\r\n\r\n break;\r\n }\r\n }\r\n\r\n /** Append a mesh to the builder.\r\n * @param meshData Describes the mesh\r\n * @param filled If the mesh describes a planar region, indicates whether its interior area should be drawn with fill in [[RenderMode.Wireframe]].\r\n */\r\n public abstract addPolyface(meshData: Polyface, filled: boolean): void;\r\n\r\n /** Append a solid primitive to the builder. */\r\n public abstract addSolidPrimitive(solidPrimitive: SolidPrimitive): void;\r\n\r\n /** Append any primitive to the builder.\r\n * @param primitive The graphic primitive to append.\r\n */\r\n public addPrimitive(primitive: GraphicPrimitive): void {\r\n switch (primitive.type) {\r\n case \"linestring\":\r\n this.addLineString(primitive.points);\r\n break;\r\n case \"linestring2d\":\r\n this.addLineString2d(primitive.points, primitive.zDepth);\r\n break;\r\n case \"pointstring\":\r\n this.addPointString(primitive.points);\r\n break;\r\n case \"pointstring2d\":\r\n this.addPointString2d(primitive.points, primitive.zDepth);\r\n break;\r\n case \"shape\":\r\n this.addShape(primitive.points);\r\n break;\r\n case \"shape2d\":\r\n this.addShape2d(primitive.points, primitive.zDepth);\r\n break;\r\n case \"arc\":\r\n this.addArc(primitive.arc, true === primitive.isEllipse, true === primitive.filled);\r\n break;\r\n case \"arc2d\":\r\n this.addArc2d(primitive.arc, true === primitive.isEllipse, true === primitive.filled, primitive.zDepth);\r\n break;\r\n case \"path\":\r\n this.addPath(primitive.path);\r\n break;\r\n case \"loop\":\r\n this.addLoop(primitive.loop);\r\n break;\r\n case \"polyface\":\r\n this.addPolyface(primitive.polyface, true === primitive.filled);\r\n break;\r\n case \"solidPrimitive\":\r\n this.addSolidPrimitive(primitive.solidPrimitive);\r\n break;\r\n }\r\n }\r\n\r\n /** Add Range3d edges. Useful for debugging. */\r\n public addRangeBox(range: Range3d) {\r\n this.addFrustum(Frustum.fromRange(range));\r\n }\r\n\r\n /** Add Frustum edges. Useful for debugging. */\r\n public addFrustum(frustum: Frustum) {\r\n this.addRangeBoxFromCorners(frustum.points);\r\n }\r\n\r\n /** Add range edges from corner points */\r\n public addRangeBoxFromCorners(p: Point3d[]) {\r\n this.addLineString([\r\n p[Npc.LeftBottomFront],\r\n p[Npc.LeftTopFront],\r\n p[Npc.RightTopFront],\r\n p[Npc.RightBottomFront],\r\n p[Npc.RightBottomRear],\r\n p[Npc.RightTopRear],\r\n p[Npc.LeftTopRear],\r\n p[Npc.LeftBottomRear],\r\n p[Npc.LeftBottomFront].clone(),\r\n p[Npc.RightBottomFront].clone(),\r\n ]);\r\n\r\n this.addLineString([p[Npc.LeftTopFront].clone(), p[Npc.LeftTopRear].clone()]);\r\n this.addLineString([p[Npc.RightTopFront].clone(), p[Npc.RightTopRear].clone()]);\r\n this.addLineString([p[Npc.LeftBottomRear].clone(), p[Npc.RightBottomRear].clone()]);\r\n }\r\n\r\n /** Sets the current active symbology for this builder. Any new geometry subsequently added will be drawn using the specified symbology.\r\n * @param lineColor The color in which to draw lines.\r\n * @param fillColor The color in which to draw filled regions.\r\n * @param lineWidth The width in pixels to draw lines. The renderer will clamp this value to an integer in the range [1, 32].\r\n * @param linePixels The pixel pattern in which to draw lines.\r\n * @see [[GraphicBuilder.activateGraphicParams]] for additional symbology options.\r\n */\r\n public setSymbology(lineColor: ColorDef, fillColor: ColorDef, lineWidth: number, linePixels = LinePixels.Solid) {\r\n this.activateGraphicParams(GraphicParams.fromSymbology(lineColor, fillColor, lineWidth, linePixels));\r\n }\r\n\r\n /** Set the current active symbology for this builder to be a blanking fill before adding a planar region.\r\n * A planar region drawn with blanking fill renders behind other geometry in the same graphic.\r\n * Blanking fill is not affected by the fill [[ViewFlags]] being disabled.\r\n * An example would be to add a line to a graphic containing a shape with blanking fill so that the line is always shown in front of the fill.\r\n * @param fillColor The color in which to draw filled regions.\r\n */\r\n public setBlankingFill(fillColor: ColorDef) { this.activateGraphicParams(GraphicParams.fromBlankingFill(fillColor)); }\r\n}\r\n"]}
|
|
@@ -16,6 +16,7 @@ export declare class GeometryAccumulator {
|
|
|
16
16
|
private _transform;
|
|
17
17
|
private _surfacesOnly;
|
|
18
18
|
private readonly _analysisDisplacement?;
|
|
19
|
+
private readonly _viewIndependentOrigin?;
|
|
19
20
|
readonly tileRange: Range3d;
|
|
20
21
|
readonly geometries: GeometryList;
|
|
21
22
|
readonly system: RenderSystem;
|
|
@@ -29,6 +30,7 @@ export declare class GeometryAccumulator {
|
|
|
29
30
|
transform?: Transform;
|
|
30
31
|
tileRange?: Range3d;
|
|
31
32
|
analysisStyleDisplacement?: AnalysisStyleDisplacement;
|
|
33
|
+
viewIndependentOrigin?: Point3d;
|
|
32
34
|
});
|
|
33
35
|
private getPrimitiveRange;
|
|
34
36
|
private calculateTransform;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeometryAccumulator.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAChH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAmB,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAyB,MAAM,sBAAsB,CAAC;AAGvE,gBAAgB;AAChB,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAA4B;
|
|
1
|
+
{"version":3,"file":"GeometryAccumulator.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@ class GeometryAccumulator {
|
|
|
26
26
|
this._surfacesOnly = true === (options === null || options === void 0 ? void 0 : options.surfacesOnly);
|
|
27
27
|
this._transform = (_c = options === null || options === void 0 ? void 0 : options.transform) !== null && _c !== void 0 ? _c : core_geometry_1.Transform.createIdentity();
|
|
28
28
|
this._analysisDisplacement = options === null || options === void 0 ? void 0 : options.analysisStyleDisplacement;
|
|
29
|
+
this._viewIndependentOrigin = options === null || options === void 0 ? void 0 : options.viewIndependentOrigin;
|
|
29
30
|
}
|
|
30
31
|
get surfacesOnly() { return this._surfacesOnly; }
|
|
31
32
|
get transform() { return this._transform; }
|
|
@@ -146,7 +147,7 @@ class GeometryAccumulator {
|
|
|
146
147
|
(0, core_bentley_1.assert)(verts.params.origin.isAlmostEqual(qorigin));
|
|
147
148
|
}
|
|
148
149
|
verts.params.origin.setZero();
|
|
149
|
-
const graphic = mesh.getGraphics(args, this.system);
|
|
150
|
+
const graphic = mesh.getGraphics(args, this.system, this._viewIndependentOrigin);
|
|
150
151
|
if (undefined !== graphic)
|
|
151
152
|
branch.add(graphic);
|
|
152
153
|
}
|
|
@@ -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\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 }) {\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 }\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);\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 } 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeometryListBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryListBuilder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,KAAK,EAAgE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAW,cAAc,EAAE,SAAS,EAChJ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA0B,aAAa,EAAqC,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAClH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAUhD,gBAAgB;AAChB,8BAAsB,mBAAoB,SAAQ,cAAc;IACvD,KAAK,EAAE,mBAAmB,CAAC;IAClC,SAAgB,aAAa,EAAE,aAAa,CAAuB;aAEnD,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,aAAa;gBAErD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,6BAA6B,GAAG,2BAA2B,EAAE,oBAAoB,YAAqB;
|
|
1
|
+
{"version":3,"file":"GeometryListBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryListBuilder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,KAAK,EAAgE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAW,cAAc,EAAE,SAAS,EAChJ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA0B,aAAa,EAAqC,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAClH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAUhD,gBAAgB;AAChB,8BAAsB,mBAAoB,SAAQ,cAAc;IACvD,KAAK,EAAE,mBAAmB,CAAC;IAClC,SAAgB,aAAa,EAAE,aAAa,CAAuB;aAEnD,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,aAAa;gBAErD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,6BAA6B,GAAG,2BAA2B,EAAE,oBAAoB,YAAqB;IAUjJ,MAAM,IAAI,aAAa;IAMvB,qBAAqB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAIzD,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAUnF,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAoBxE,8EAA8E;IACvE,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAOtC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/D,+EAA+E;IACxE,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAIvC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKzD,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAKjC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKnD,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC,iBAAiB,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAIlD,gBAAgB,IAAI,aAAa;IAEjC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,aAAa;IACzD,oBAAoB,IAAI,aAAa;IACrC,sBAAsB,IAAI,aAAa;IAC9C,IAAW,iBAAiB,IAAI,aAAa,CAA4D;IAEzG,IAAW,MAAM,IAAI,YAAY,CAA8B;IAExD,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAEhC,OAAO,CAAC,eAAe;CAGxB;AAKD,gBAAgB;AAChB,qBAAa,gBAAiB,SAAQ,mBAAmB;IAChD,UAAU,EAAE,aAAa,EAAE,CAAM;IAEjC,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,aAAa;IAmCxD,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM;CAM5D"}
|
|
@@ -30,6 +30,7 @@ class GeometryListBuilder extends GraphicBuilder_1.GraphicBuilder {
|
|
|
30
30
|
system,
|
|
31
31
|
transform: accumulatorTransform,
|
|
32
32
|
analysisStyleDisplacement: (_a = this.analysisStyle) === null || _a === void 0 ? void 0 : _a.displacement,
|
|
33
|
+
viewIndependentOrigin: options.viewIndependentOrigin,
|
|
33
34
|
});
|
|
34
35
|
}
|
|
35
36
|
finish() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeometryListBuilder.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryListBuilder.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 {\r\n Arc3d, CurvePrimitive, IndexedPolyface, LineSegment3d, LineString3d, Loop, Path, Point2d, Point3d, Polyface, Range3d, SolidPrimitive, Transform,\r\n} from \"@itwin/core-geometry\";\r\nimport { FeatureTable, Gradient, GraphicParams, PackedFeatureTable, RenderTexture } from \"@itwin/core-common\";\r\nimport { CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from \"../../GraphicBuilder\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { GeometryOptions } from \"../Primitives\";\r\nimport { GeometryAccumulator } from \"./GeometryAccumulator\";\r\nimport { Geometry } from \"./GeometryPrimitives\";\r\nimport { MeshList } from \"../mesh/MeshPrimitives\";\r\n\r\nfunction copy2dTo3d(pts2d: Point2d[], depth: number): Point3d[] {\r\n const pts3d: Point3d[] = [];\r\n for (const point of pts2d)\r\n pts3d.push(Point3d.create(point.x, point.y, depth));\r\n return pts3d;\r\n}\r\n\r\n/** @internal */\r\nexport abstract class GeometryListBuilder extends GraphicBuilder {\r\n public accum: GeometryAccumulator;\r\n public readonly graphicParams: GraphicParams = new GraphicParams();\r\n\r\n public abstract finishGraphic(accum: GeometryAccumulator): RenderGraphic; // Invoked by Finish() to obtain the finished RenderGraphic.\r\n\r\n public constructor(system: RenderSystem, options: ViewportGraphicBuilderOptions | CustomGraphicBuilderOptions, accumulatorTransform = Transform.identity) {\r\n super(options);\r\n this.accum = new GeometryAccumulator({\r\n system,\r\n transform: accumulatorTransform,\r\n analysisStyleDisplacement: this.analysisStyle?.displacement,\r\n });\r\n }\r\n\r\n public finish(): RenderGraphic {\r\n const graphic = this.finishGraphic(this.accum);\r\n this.accum.clear();\r\n return graphic;\r\n }\r\n\r\n public activateGraphicParams(graphicParams: GraphicParams): void {\r\n graphicParams.clone(this.graphicParams);\r\n }\r\n\r\n public addArc2d(ellipse: Arc3d, isEllipse: boolean, filled: boolean, zDepth: number): void {\r\n if (0.0 === zDepth) {\r\n this.addArc(ellipse, isEllipse, filled);\r\n } else {\r\n const ell: Arc3d = ellipse;\r\n ell.center.z = zDepth;\r\n this.addArc(ell, isEllipse, filled);\r\n }\r\n }\r\n\r\n public addArc(ellipse: Arc3d, isEllipse: boolean, filled: boolean): void {\r\n let curve;\r\n if (isEllipse || filled) {\r\n curve = Loop.create(ellipse);\r\n } else {\r\n curve = Path.create(ellipse);\r\n }\r\n\r\n if (filled && !isEllipse && !ellipse.sweep.isFullCircle) {\r\n const gapSegment: CurvePrimitive = LineSegment3d.create(ellipse.startPoint(), ellipse.endPoint());\r\n (gapSegment as any).markerBits = 0x00010000; // Set the CURVE_PRIMITIVE_BIT_GapCurve marker bit\r\n curve.children.push(gapSegment);\r\n }\r\n const displayParams = curve.isAnyRegionType ? this.getMeshDisplayParams() : this.getLinearDisplayParams();\r\n if (curve instanceof Loop)\r\n this.accum.addLoop(curve, displayParams, this.placement, false);\r\n else\r\n this.accum.addPath(curve, displayParams, this.placement, false);\r\n }\r\n\r\n /** take ownership of input points and add as a line string to this builder */\r\n public addLineString(points: Point3d[]): void {\r\n if (2 === points.length && points[0].isAlmostEqual(points[1]))\r\n this.accum.addPointString(points, this.getLinearDisplayParams(), this.placement);\r\n else\r\n this.accum.addLineString(points, this.getLinearDisplayParams(), this.placement);\r\n }\r\n\r\n public addLineString2d(points: Point2d[], zDepth: number): void {\r\n const pts3d = copy2dTo3d(points, zDepth);\r\n this.addLineString(pts3d);\r\n }\r\n\r\n /** take ownership of input points and add as a point string to this builder */\r\n public addPointString(points: Point3d[]): void {\r\n this.accum.addPointString(points, this.getLinearDisplayParams(), this.placement);\r\n }\r\n\r\n public addPointString2d(points: Point2d[], zDepth: number): void {\r\n const pts3d = copy2dTo3d(points, zDepth);\r\n this.addPointString(pts3d);\r\n }\r\n\r\n public addShape(points: Point3d[]): void {\r\n const loop = Loop.create(LineString3d.create(points));\r\n this.accum.addLoop(loop, this.getMeshDisplayParams(), this.placement, false);\r\n }\r\n\r\n public addShape2d(points: Point2d[], zDepth: number): void {\r\n const pts3d = copy2dTo3d(points, zDepth);\r\n this.addShape(pts3d);\r\n }\r\n\r\n public addPath(path: Path): void {\r\n this.accum.addPath(path, this.getLinearDisplayParams(), this.placement, false);\r\n }\r\n\r\n public addLoop(loop: Loop): void {\r\n this.accum.addLoop(loop, this.getMeshDisplayParams(), this.placement, false);\r\n }\r\n\r\n public addPolyface(meshData: Polyface): void {\r\n this.accum.addPolyface(meshData as IndexedPolyface, this.getMeshDisplayParams(), this.placement);\r\n }\r\n\r\n public addSolidPrimitive(primitive: SolidPrimitive): void {\r\n this.accum.addSolidPrimitive(primitive, this.getMeshDisplayParams(), this.placement);\r\n }\r\n\r\n public getGraphicParams(): GraphicParams { return this.graphicParams; }\r\n\r\n public getDisplayParams(type: DisplayParams.Type): DisplayParams { return DisplayParams.createForType(type, this.graphicParams); }\r\n public getMeshDisplayParams(): DisplayParams { return DisplayParams.createForMesh(this.graphicParams, !this.wantNormals, (grad) => this.resolveGradient(grad)); }\r\n public getLinearDisplayParams(): DisplayParams { return DisplayParams.createForLinear(this.graphicParams); }\r\n public get textDisplayParams(): DisplayParams { return DisplayParams.createForText(this.graphicParams); }\r\n\r\n public get system(): RenderSystem { return this.accum.system; }\r\n\r\n public add(geom: Geometry): void { this.accum.addGeometry(geom); }\r\n\r\n private resolveGradient(gradient: Gradient.Symb): RenderTexture | undefined {\r\n return this.system.getGradientTexture(gradient, this.iModel);\r\n }\r\n}\r\n\r\n// Set to true to add a range box to every graphic produced by PrimitiveBuilder.\r\nlet addDebugRangeBox = false;\r\n\r\n/** @internal */\r\nexport class PrimitiveBuilder extends GeometryListBuilder {\r\n public primitives: RenderGraphic[] = [];\r\n\r\n public finishGraphic(accum: GeometryAccumulator): RenderGraphic {\r\n let meshes: MeshList | undefined;\r\n let range: Range3d | undefined;\r\n let featureTable: FeatureTable | undefined;\r\n if (!accum.isEmpty) {\r\n // Overlay decorations don't test Z. Tools like to layer multiple primitives on top of one another; they rely on the primitives rendering\r\n // in that same order to produce correct results (e.g., a thin line rendered atop a thick line of another color).\r\n // No point generating edges for graphics that are always rendered in smooth shade mode.\r\n const options = GeometryOptions.createForGraphicBuilder(this);\r\n const tolerance = this.computeTolerance(accum);\r\n meshes = accum.saveToGraphicList(this.primitives, options, tolerance, this.pickId);\r\n if (undefined !== meshes) {\r\n featureTable = meshes.features;\r\n range = meshes.range;\r\n }\r\n }\r\n\r\n let graphic = (this.primitives.length !== 1) ? this.accum.system.createGraphicList(this.primitives) : this.primitives.pop() as RenderGraphic;\r\n if (undefined !== featureTable) {\r\n const batchRange = range ?? new Range3d();\r\n const batchOptions = this._options.pickable;\r\n graphic = this.accum.system.createBatch(graphic, PackedFeatureTable.pack(featureTable), batchRange, batchOptions);\r\n }\r\n\r\n if (addDebugRangeBox && range) {\r\n addDebugRangeBox = false;\r\n const builder = this.accum.system.createGraphic({ ...this._options });\r\n builder.addRangeBox(range);\r\n graphic = this.accum.system.createGraphicList([graphic, builder.finish()]);\r\n addDebugRangeBox = true;\r\n }\r\n\r\n return graphic;\r\n }\r\n\r\n public computeTolerance(accum: GeometryAccumulator): number {\r\n return this._computeChordTolerance({\r\n graphic: this,\r\n computeRange: () => accum.geometries.computeRange(),\r\n });\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"GeometryListBuilder.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryListBuilder.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 {\r\n Arc3d, CurvePrimitive, IndexedPolyface, LineSegment3d, LineString3d, Loop, Path, Point2d, Point3d, Polyface, Range3d, SolidPrimitive, Transform,\r\n} from \"@itwin/core-geometry\";\r\nimport { FeatureTable, Gradient, GraphicParams, PackedFeatureTable, RenderTexture } from \"@itwin/core-common\";\r\nimport { CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from \"../../GraphicBuilder\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { GeometryOptions } from \"../Primitives\";\r\nimport { GeometryAccumulator } from \"./GeometryAccumulator\";\r\nimport { Geometry } from \"./GeometryPrimitives\";\r\nimport { MeshList } from \"../mesh/MeshPrimitives\";\r\n\r\nfunction copy2dTo3d(pts2d: Point2d[], depth: number): Point3d[] {\r\n const pts3d: Point3d[] = [];\r\n for (const point of pts2d)\r\n pts3d.push(Point3d.create(point.x, point.y, depth));\r\n return pts3d;\r\n}\r\n\r\n/** @internal */\r\nexport abstract class GeometryListBuilder extends GraphicBuilder {\r\n public accum: GeometryAccumulator;\r\n public readonly graphicParams: GraphicParams = new GraphicParams();\r\n\r\n public abstract finishGraphic(accum: GeometryAccumulator): RenderGraphic; // Invoked by Finish() to obtain the finished RenderGraphic.\r\n\r\n public constructor(system: RenderSystem, options: ViewportGraphicBuilderOptions | CustomGraphicBuilderOptions, accumulatorTransform = Transform.identity) {\r\n super(options);\r\n this.accum = new GeometryAccumulator({\r\n system,\r\n transform: accumulatorTransform,\r\n analysisStyleDisplacement: this.analysisStyle?.displacement,\r\n viewIndependentOrigin: options.viewIndependentOrigin,\r\n });\r\n }\r\n\r\n public finish(): RenderGraphic {\r\n const graphic = this.finishGraphic(this.accum);\r\n this.accum.clear();\r\n return graphic;\r\n }\r\n\r\n public activateGraphicParams(graphicParams: GraphicParams): void {\r\n graphicParams.clone(this.graphicParams);\r\n }\r\n\r\n public addArc2d(ellipse: Arc3d, isEllipse: boolean, filled: boolean, zDepth: number): void {\r\n if (0.0 === zDepth) {\r\n this.addArc(ellipse, isEllipse, filled);\r\n } else {\r\n const ell: Arc3d = ellipse;\r\n ell.center.z = zDepth;\r\n this.addArc(ell, isEllipse, filled);\r\n }\r\n }\r\n\r\n public addArc(ellipse: Arc3d, isEllipse: boolean, filled: boolean): void {\r\n let curve;\r\n if (isEllipse || filled) {\r\n curve = Loop.create(ellipse);\r\n } else {\r\n curve = Path.create(ellipse);\r\n }\r\n\r\n if (filled && !isEllipse && !ellipse.sweep.isFullCircle) {\r\n const gapSegment: CurvePrimitive = LineSegment3d.create(ellipse.startPoint(), ellipse.endPoint());\r\n (gapSegment as any).markerBits = 0x00010000; // Set the CURVE_PRIMITIVE_BIT_GapCurve marker bit\r\n curve.children.push(gapSegment);\r\n }\r\n const displayParams = curve.isAnyRegionType ? this.getMeshDisplayParams() : this.getLinearDisplayParams();\r\n if (curve instanceof Loop)\r\n this.accum.addLoop(curve, displayParams, this.placement, false);\r\n else\r\n this.accum.addPath(curve, displayParams, this.placement, false);\r\n }\r\n\r\n /** take ownership of input points and add as a line string to this builder */\r\n public addLineString(points: Point3d[]): void {\r\n if (2 === points.length && points[0].isAlmostEqual(points[1]))\r\n this.accum.addPointString(points, this.getLinearDisplayParams(), this.placement);\r\n else\r\n this.accum.addLineString(points, this.getLinearDisplayParams(), this.placement);\r\n }\r\n\r\n public addLineString2d(points: Point2d[], zDepth: number): void {\r\n const pts3d = copy2dTo3d(points, zDepth);\r\n this.addLineString(pts3d);\r\n }\r\n\r\n /** take ownership of input points and add as a point string to this builder */\r\n public addPointString(points: Point3d[]): void {\r\n this.accum.addPointString(points, this.getLinearDisplayParams(), this.placement);\r\n }\r\n\r\n public addPointString2d(points: Point2d[], zDepth: number): void {\r\n const pts3d = copy2dTo3d(points, zDepth);\r\n this.addPointString(pts3d);\r\n }\r\n\r\n public addShape(points: Point3d[]): void {\r\n const loop = Loop.create(LineString3d.create(points));\r\n this.accum.addLoop(loop, this.getMeshDisplayParams(), this.placement, false);\r\n }\r\n\r\n public addShape2d(points: Point2d[], zDepth: number): void {\r\n const pts3d = copy2dTo3d(points, zDepth);\r\n this.addShape(pts3d);\r\n }\r\n\r\n public addPath(path: Path): void {\r\n this.accum.addPath(path, this.getLinearDisplayParams(), this.placement, false);\r\n }\r\n\r\n public addLoop(loop: Loop): void {\r\n this.accum.addLoop(loop, this.getMeshDisplayParams(), this.placement, false);\r\n }\r\n\r\n public addPolyface(meshData: Polyface): void {\r\n this.accum.addPolyface(meshData as IndexedPolyface, this.getMeshDisplayParams(), this.placement);\r\n }\r\n\r\n public addSolidPrimitive(primitive: SolidPrimitive): void {\r\n this.accum.addSolidPrimitive(primitive, this.getMeshDisplayParams(), this.placement);\r\n }\r\n\r\n public getGraphicParams(): GraphicParams { return this.graphicParams; }\r\n\r\n public getDisplayParams(type: DisplayParams.Type): DisplayParams { return DisplayParams.createForType(type, this.graphicParams); }\r\n public getMeshDisplayParams(): DisplayParams { return DisplayParams.createForMesh(this.graphicParams, !this.wantNormals, (grad) => this.resolveGradient(grad)); }\r\n public getLinearDisplayParams(): DisplayParams { return DisplayParams.createForLinear(this.graphicParams); }\r\n public get textDisplayParams(): DisplayParams { return DisplayParams.createForText(this.graphicParams); }\r\n\r\n public get system(): RenderSystem { return this.accum.system; }\r\n\r\n public add(geom: Geometry): void { this.accum.addGeometry(geom); }\r\n\r\n private resolveGradient(gradient: Gradient.Symb): RenderTexture | undefined {\r\n return this.system.getGradientTexture(gradient, this.iModel);\r\n }\r\n}\r\n\r\n// Set to true to add a range box to every graphic produced by PrimitiveBuilder.\r\nlet addDebugRangeBox = false;\r\n\r\n/** @internal */\r\nexport class PrimitiveBuilder extends GeometryListBuilder {\r\n public primitives: RenderGraphic[] = [];\r\n\r\n public finishGraphic(accum: GeometryAccumulator): RenderGraphic {\r\n let meshes: MeshList | undefined;\r\n let range: Range3d | undefined;\r\n let featureTable: FeatureTable | undefined;\r\n if (!accum.isEmpty) {\r\n // Overlay decorations don't test Z. Tools like to layer multiple primitives on top of one another; they rely on the primitives rendering\r\n // in that same order to produce correct results (e.g., a thin line rendered atop a thick line of another color).\r\n // No point generating edges for graphics that are always rendered in smooth shade mode.\r\n const options = GeometryOptions.createForGraphicBuilder(this);\r\n const tolerance = this.computeTolerance(accum);\r\n meshes = accum.saveToGraphicList(this.primitives, options, tolerance, this.pickId);\r\n if (undefined !== meshes) {\r\n featureTable = meshes.features;\r\n range = meshes.range;\r\n }\r\n }\r\n\r\n let graphic = (this.primitives.length !== 1) ? this.accum.system.createGraphicList(this.primitives) : this.primitives.pop() as RenderGraphic;\r\n if (undefined !== featureTable) {\r\n const batchRange = range ?? new Range3d();\r\n const batchOptions = this._options.pickable;\r\n graphic = this.accum.system.createBatch(graphic, PackedFeatureTable.pack(featureTable), batchRange, batchOptions);\r\n }\r\n\r\n if (addDebugRangeBox && range) {\r\n addDebugRangeBox = false;\r\n const builder = this.accum.system.createGraphic({ ...this._options });\r\n builder.addRangeBox(range);\r\n graphic = this.accum.system.createGraphicList([graphic, builder.finish()]);\r\n addDebugRangeBox = true;\r\n }\r\n\r\n return graphic;\r\n }\r\n\r\n public computeTolerance(accum: GeometryAccumulator): number {\r\n return this._computeChordTolerance({\r\n graphic: this,\r\n computeRange: () => accum.geometries.computeRange(),\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module Rendering
|
|
3
3
|
*/
|
|
4
|
-
import { AuxChannel, Point2d, Range3d } from "@itwin/core-geometry";
|
|
4
|
+
import { AuxChannel, Point2d, Point3d, Range3d } from "@itwin/core-geometry";
|
|
5
5
|
import { ColorIndex, EdgeArgs, Feature, FeatureIndex, FeatureTable, FillFlags, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList, OctEncodedNormal, PolylineData, PolylineEdgeArgs, PolylineFlags, QParams3d, QPoint3dList, RenderMaterial, RenderTexture, SilhouetteEdgeArgs } from "@itwin/core-common";
|
|
6
6
|
import { InstancedGraphicParams } from "../../InstancedGraphicParams";
|
|
7
7
|
import { RenderGraphic } from "../../RenderGraphic";
|
|
@@ -86,7 +86,7 @@ export declare class Mesh {
|
|
|
86
86
|
get auxChannels(): ReadonlyArray<AuxChannel> | undefined;
|
|
87
87
|
addAuxChannels(channels: ReadonlyArray<AuxChannel>, srcIndex: number): void;
|
|
88
88
|
toFeatureIndex(index: FeatureIndex): void;
|
|
89
|
-
getGraphics(args: MeshGraphicArgs, system: RenderSystem,
|
|
89
|
+
getGraphics(args: MeshGraphicArgs, system: RenderSystem, instancesOrViewIndependentOrigin?: InstancedGraphicParams | Point3d): RenderGraphic | undefined;
|
|
90
90
|
addPolyline(poly: MeshPolyline): void;
|
|
91
91
|
addTriangle(triangle: Triangle): void;
|
|
92
92
|
addVertex(props: VertexKeyProps): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshPrimitives.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshPrimitives.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAkB,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"MeshPrimitives.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshPrimitives.ts"],"names":[],"mappings":"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"}
|
|
@@ -237,13 +237,13 @@ class Mesh {
|
|
|
237
237
|
if (undefined !== this.features)
|
|
238
238
|
this.features.toFeatureIndex(index);
|
|
239
239
|
}
|
|
240
|
-
getGraphics(args, system,
|
|
240
|
+
getGraphics(args, system, instancesOrViewIndependentOrigin) {
|
|
241
241
|
if (undefined !== this.triangles && this.triangles.length !== 0) {
|
|
242
242
|
if (args.meshArgs.init(this))
|
|
243
|
-
return system.createTriMesh(args.meshArgs,
|
|
243
|
+
return system.createTriMesh(args.meshArgs, instancesOrViewIndependentOrigin);
|
|
244
244
|
}
|
|
245
245
|
else if (undefined !== this.polylines && this.polylines.length !== 0 && args.polylineArgs.init(this)) {
|
|
246
|
-
return system.createIndexedPolylines(args.polylineArgs,
|
|
246
|
+
return system.createIndexedPolylines(args.polylineArgs, instancesOrViewIndependentOrigin);
|
|
247
247
|
}
|
|
248
248
|
return undefined;
|
|
249
249
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshPrimitives.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshPrimitives.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 { AuxChannel, AuxChannelData, Point2d, Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorIndex, EdgeArgs, Feature, FeatureIndex, FeatureIndexType, FeatureTable, FillFlags, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList,\r\n OctEncodedNormal, PolylineData, PolylineEdgeArgs, PolylineFlags, QParams3d, QPoint3dList, RenderMaterial, RenderTexture, SilhouetteEdgeArgs,\r\n} from \"@itwin/core-common\";\r\nimport { InstancedGraphicParams } from \"../../InstancedGraphicParams\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { ColorMap } from \"../ColorMap\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { Triangle, TriangleList } from \"../Primitives\";\r\nimport { VertexKeyProps } from \"../VertexKey\";\r\n\r\n/* Information needed to draw a set of indexed polylines using a shared vertex buffer.\r\n * @internal\r\n */\r\nexport class PolylineArgs {\r\n public colors = new ColorIndex();\r\n public features = new FeatureIndex();\r\n public width = 0;\r\n public linePixels = LinePixels.Solid;\r\n public flags: PolylineFlags;\r\n public points: QPoint3dList;\r\n public polylines: PolylineData[];\r\n public pointParams: QParams3d;\r\n\r\n public constructor(points: QPoint3dList = new QPoint3dList(QParams3d.fromRange(Range3d.createNull())),\r\n polylines: PolylineData[] = [], pointParams?: QParams3d, is2d = false, isPlanar = false) {\r\n this.points = points;\r\n this.polylines = polylines;\r\n if (undefined === pointParams) {\r\n this.pointParams = QParams3d.fromRange(Range3d.createNull());\r\n } else {\r\n this.pointParams = pointParams;\r\n }\r\n this.flags = new PolylineFlags(is2d, isPlanar);\r\n }\r\n\r\n public get isValid(): boolean { return this.polylines.length !== 0; }\r\n public reset(): void {\r\n this.flags.initDefaults();\r\n this.points = new QPoint3dList(QParams3d.fromRange(Range3d.createNull()));\r\n this.polylines = [];\r\n this.colors.reset();\r\n this.features.reset();\r\n }\r\n public init(mesh: Mesh) {\r\n this.reset();\r\n if (undefined === mesh.polylines)\r\n return;\r\n\r\n this.width = mesh.displayParams.width;\r\n this.linePixels = mesh.displayParams.linePixels;\r\n this.flags.is2d = mesh.is2d;\r\n this.flags.isPlanar = mesh.isPlanar;\r\n this.flags.isDisjoint = Mesh.PrimitiveType.Point === mesh.type;\r\n if (DisplayParams.RegionEdgeType.Outline === mesh.displayParams.regionEdgeType) {\r\n // This polyline is behaving as the edges of a region surface.\r\n if (undefined === mesh.displayParams.gradient || mesh.displayParams.gradient.isOutlined)\r\n this.flags.setIsNormalEdge();\r\n else\r\n this.flags.setIsOutlineEdge(); // edges only displayed if fill undisplayed...\r\n }\r\n\r\n mesh.polylines.forEach((polyline) => {\r\n const indexedPolyline = new PolylineData();\r\n if (indexedPolyline.init(polyline)) { this.polylines.push(indexedPolyline); }\r\n });\r\n if (!this.isValid) { return false; }\r\n this.finishInit(mesh);\r\n return true;\r\n }\r\n public finishInit(mesh: Mesh) {\r\n this.pointParams = mesh.points.params;\r\n this.points = mesh.points;\r\n mesh.colorMap.toColorIndex(this.colors, mesh.colors);\r\n mesh.toFeatureIndex(this.features);\r\n }\r\n}\r\n\r\n/** The vertices of the edges are shared with those of the surface\r\n * @internal\r\n */\r\nexport class MeshArgsEdges {\r\n public edges = new EdgeArgs();\r\n public silhouettes = new SilhouetteEdgeArgs();\r\n public polylines = new PolylineEdgeArgs();\r\n public width = 0;\r\n public linePixels = LinePixels.Solid;\r\n\r\n public clear(): void {\r\n this.edges.clear();\r\n this.silhouettes.clear();\r\n this.polylines.clear();\r\n this.width = 0;\r\n this.linePixels = LinePixels.Solid;\r\n }\r\n public get isValid(): boolean { return this.edges.isValid || this.silhouettes.isValid || this.polylines.isValid; }\r\n}\r\n\r\n/* A carrier of information needed to describe a triangle mesh and its edges.\r\n * @internal\r\n */\r\nexport class MeshArgs {\r\n public edges = new MeshArgsEdges();\r\n public vertIndices?: number[];\r\n public points?: QPoint3dList;\r\n public normals?: OctEncodedNormal[];\r\n public textureUv?: Point2d[];\r\n public texture?: RenderTexture;\r\n public colors = new ColorIndex();\r\n public features = new FeatureIndex();\r\n public material?: RenderMaterial;\r\n public fillFlags = FillFlags.None;\r\n public isPlanar = false;\r\n public is2d = false;\r\n public hasBakedLighting = false;\r\n public isVolumeClassifier = false;\r\n public hasFixedNormals = false;\r\n public auxChannels?: ReadonlyArray<AuxChannel>;\r\n\r\n public clear() {\r\n this.edges.clear();\r\n this.vertIndices = undefined;\r\n this.points = undefined;\r\n this.normals = undefined;\r\n this.textureUv = undefined;\r\n this.texture = undefined;\r\n this.colors.reset();\r\n this.features.reset();\r\n this.material = undefined;\r\n this.fillFlags = FillFlags.None;\r\n this.isPlanar = this.is2d = this.hasBakedLighting = this.isVolumeClassifier = this.hasFixedNormals = false;\r\n this.auxChannels = undefined;\r\n }\r\n\r\n public init(mesh: Mesh): boolean {\r\n this.clear();\r\n if (undefined === mesh.triangles || mesh.triangles.isEmpty)\r\n return false;\r\n\r\n assert(0 < mesh.points.length);\r\n\r\n this.vertIndices = mesh.triangles.indices;\r\n this.points = mesh.points;\r\n\r\n if (!mesh.displayParams.ignoreLighting && 0 < mesh.normals.length)\r\n this.normals = mesh.normals;\r\n\r\n if (0 < mesh.uvParams.length)\r\n this.textureUv = mesh.uvParams;\r\n\r\n mesh.colorMap.toColorIndex(this.colors, mesh.colors);\r\n mesh.toFeatureIndex(this.features);\r\n\r\n this.material = mesh.displayParams.material;\r\n if (undefined !== mesh.displayParams.textureMapping)\r\n this.texture = mesh.displayParams.textureMapping.texture;\r\n\r\n this.fillFlags = mesh.displayParams.fillFlags;\r\n this.isPlanar = mesh.isPlanar;\r\n this.is2d = mesh.is2d;\r\n this.hasBakedLighting = (true === mesh.hasBakedLighting);\r\n this.isVolumeClassifier = (true === mesh.isVolumeClassifier);\r\n\r\n this.edges.width = mesh.displayParams.width;\r\n this.edges.linePixels = mesh.displayParams.linePixels;\r\n this.auxChannels = mesh.auxChannels;\r\n\r\n const meshEdges = mesh.edges;\r\n if (undefined === meshEdges)\r\n return true;\r\n\r\n this.edges.edges.init(mesh.edges);\r\n this.edges.silhouettes.init(mesh.edges);\r\n\r\n const polylines: PolylineData[] = [];\r\n meshEdges.polylines.forEach((meshPolyline: MeshPolyline) => {\r\n const polyline = new PolylineData();\r\n if (polyline.init(meshPolyline)) { polylines.push(polyline); }\r\n });\r\n\r\n this.edges.polylines.init(polylines);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshGraphicArgs {\r\n public polylineArgs = new PolylineArgs();\r\n public meshArgs: MeshArgs = new MeshArgs();\r\n}\r\n\r\n/** @internal */\r\nexport class Mesh {\r\n private readonly _data: TriangleList | MeshPolylineList;\r\n public readonly points: QPoint3dList;\r\n public readonly normals: OctEncodedNormal[] = [];\r\n public readonly uvParams: Point2d[] = [];\r\n public readonly colorMap: ColorMap = new ColorMap(); // used to be called ColorTable\r\n public colors: number[] = [];\r\n public edges?: MeshEdges;\r\n public readonly features?: Mesh.Features;\r\n public readonly type: Mesh.PrimitiveType;\r\n public readonly is2d: boolean;\r\n public readonly isPlanar: boolean;\r\n public readonly hasBakedLighting: boolean;\r\n public readonly isVolumeClassifier: boolean;\r\n public displayParams: DisplayParams;\r\n private _auxChannels?: AuxChannel[];\r\n\r\n private constructor(props: Mesh.Props) {\r\n const { displayParams, features, type, range, is2d, isPlanar } = props;\r\n this._data = Mesh.PrimitiveType.Mesh === type ? new TriangleList() : new MeshPolylineList();\r\n this.displayParams = displayParams;\r\n this.features = features;\r\n this.type = type;\r\n this.is2d = is2d;\r\n this.isPlanar = isPlanar;\r\n this.hasBakedLighting = (true === props.hasBakedLighting);\r\n this.isVolumeClassifier = (true === props.isVolumeClassifier);\r\n this.points = new QPoint3dList(QParams3d.fromRange(range));\r\n }\r\n\r\n public static create(props: Mesh.Props): Mesh { return new Mesh(props); }\r\n\r\n public get triangles(): TriangleList | undefined {\r\n return Mesh.PrimitiveType.Mesh === this.type ? this._data as TriangleList : undefined;\r\n }\r\n\r\n public get polylines(): MeshPolylineList | undefined {\r\n return Mesh.PrimitiveType.Mesh !== this.type ? this._data as MeshPolylineList : undefined;\r\n }\r\n\r\n public get auxChannels(): ReadonlyArray<AuxChannel> | undefined {\r\n return this._auxChannels;\r\n }\r\n\r\n public addAuxChannels(channels: ReadonlyArray<AuxChannel>, srcIndex: number): void {\r\n // The native version of this function appears to assume that all polyfaces added to the Mesh will have\r\n // the same number + type of aux channels.\r\n // ###TODO We should really produce a separate Mesh for each unique combination. For now just bail on mismatch.\r\n if (this._auxChannels) {\r\n if (this._auxChannels.length !== channels.length)\r\n return;\r\n\r\n for (let i = 0; i < channels.length; i++) {\r\n const src = channels[i];\r\n const dst = this._auxChannels[i];\r\n if (src.dataType !== dst.dataType || src.name !== dst.name || src.inputName !== dst.inputName)\r\n return;\r\n }\r\n }\r\n\r\n if (!this._auxChannels) {\r\n // Copy the channels, leaving each AuxData's values array empty.\r\n this._auxChannels = channels.map((x) => new AuxChannel(x.data.map((y) => new AuxChannelData(y.input, [])), x.dataType, x.name, x.inputName));\r\n }\r\n\r\n // Append the value at srcIndex from each source channel's data to our channels.\r\n for (let channelIndex = 0; channelIndex < channels.length; channelIndex++) {\r\n const srcChannel = channels[channelIndex];\r\n const dstChannel = this._auxChannels[channelIndex];\r\n const dstIndex = dstChannel.valueCount;\r\n for (let dataIndex = 0; dataIndex < srcChannel.data.length; dataIndex++) {\r\n const dstData = dstChannel.data[dataIndex];\r\n dstData.copyValues(srcChannel.data[dataIndex], dstIndex, srcIndex, dstChannel.entriesPerValue);\r\n }\r\n }\r\n }\r\n\r\n public toFeatureIndex(index: FeatureIndex): void {\r\n if (undefined !== this.features)\r\n this.features.toFeatureIndex(index);\r\n }\r\n\r\n public getGraphics(args: MeshGraphicArgs, system: RenderSystem, instances?: InstancedGraphicParams): RenderGraphic | undefined {\r\n if (undefined !== this.triangles && this.triangles.length !== 0) {\r\n if (args.meshArgs.init(this))\r\n return system.createTriMesh(args.meshArgs, instances);\r\n } else if (undefined !== this.polylines && this.polylines.length !== 0 && args.polylineArgs.init(this)) {\r\n return system.createIndexedPolylines(args.polylineArgs, instances);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public addPolyline(poly: MeshPolyline): void {\r\n const { type, polylines } = this;\r\n\r\n assert(Mesh.PrimitiveType.Polyline === type || Mesh.PrimitiveType.Point === type);\r\n assert(undefined !== polylines);\r\n\r\n if (Mesh.PrimitiveType.Polyline === type && poly.indices.length < 2)\r\n return;\r\n\r\n if (undefined !== polylines)\r\n polylines.push(poly);\r\n }\r\n\r\n public addTriangle(triangle: Triangle): void {\r\n const { triangles, type } = this;\r\n\r\n assert(Mesh.PrimitiveType.Mesh === type);\r\n assert(undefined !== triangles);\r\n\r\n if (undefined !== triangles)\r\n triangles.addTriangle(triangle);\r\n }\r\n\r\n public addVertex(props: VertexKeyProps): number {\r\n const { position, normal, uvParam, fillColor } = props;\r\n\r\n this.points.push(position);\r\n\r\n if (undefined !== normal)\r\n this.normals.push(normal);\r\n\r\n if (undefined !== uvParam)\r\n this.uvParams.push(uvParam);\r\n\r\n // Don't allocate color indices until we have non-uniform colors\r\n if (0 === this.colorMap.length) {\r\n this.colorMap.insert(fillColor);\r\n assert(this.colorMap.isUniform);\r\n assert(0 === this.colorMap.indexOf(fillColor));\r\n } else if (!this.colorMap.isUniform || !this.colorMap.hasColor(fillColor)) {\r\n // Back-fill uniform value (index=0) for existing vertices if previously uniform\r\n if (0 === this.colors.length)\r\n this.colors.length = this.points.length - 1;\r\n\r\n this.colors.push(this.colorMap.insert(fillColor));\r\n assert(!this.colorMap.isUniform);\r\n }\r\n\r\n return this.points.length - 1;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace Mesh { // eslint-disable-line no-redeclare\r\n export enum PrimitiveType {\r\n Mesh, // eslint-disable-line @typescript-eslint/no-shadow\r\n Polyline,\r\n Point,\r\n }\r\n\r\n export class Features {\r\n public readonly table: FeatureTable;\r\n public indices: number[] = [];\r\n public uniform = 0;\r\n public initialized = false;\r\n\r\n public constructor(table: FeatureTable) { this.table = table; }\r\n\r\n public add(feat: Feature, numVerts: number): void {\r\n const index = this.table.insert(feat);\r\n if (!this.initialized) {\r\n // First feature - uniform.\r\n this.uniform = index;\r\n this.initialized = true;\r\n } else if (0 < this.indices.length) {\r\n // Already non-uniform\r\n this.indices.push(index);\r\n } else {\r\n // Second feature - back-fill uniform for existing verts\r\n while (this.indices.length < numVerts - 1)\r\n this.indices.push(this.uniform);\r\n\r\n this.indices.push(index);\r\n }\r\n }\r\n\r\n public setIndices(indices: number[]) {\r\n this.indices.length = 0;\r\n this.uniform = 0;\r\n this.initialized = 0 < indices.length;\r\n\r\n assert(0 < indices.length);\r\n if (1 === indices.length)\r\n this.uniform = indices[0];\r\n else if (1 < indices.length)\r\n this.indices = indices;\r\n }\r\n\r\n public toFeatureIndex(index: FeatureIndex): void {\r\n if (!this.initialized) {\r\n index.type = FeatureIndexType.Empty;\r\n } else if (this.indices.length === 0) {\r\n index.type = FeatureIndexType.Uniform;\r\n index.featureID = this.uniform;\r\n } else {\r\n index.type = FeatureIndexType.NonUniform;\r\n index.featureIDs = new Uint32Array(this.indices);\r\n }\r\n }\r\n }\r\n\r\n export interface Props {\r\n displayParams: DisplayParams;\r\n features?: Mesh.Features;\r\n type: Mesh.PrimitiveType;\r\n range: Range3d;\r\n is2d: boolean;\r\n isPlanar: boolean;\r\n hasBakedLighting?: boolean;\r\n isVolumeClassifier?: boolean;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshList extends Array<Mesh> {\r\n public readonly features?: FeatureTable;\r\n public readonly range?: Range3d;\r\n constructor(features?: FeatureTable, range?: Range3d) {\r\n super();\r\n this.features = features;\r\n this.range = range;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MeshPrimitives.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshPrimitives.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 { AuxChannel, AuxChannelData, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorIndex, EdgeArgs, Feature, FeatureIndex, FeatureIndexType, FeatureTable, FillFlags, LinePixels, MeshEdges, MeshPolyline, MeshPolylineList,\r\n OctEncodedNormal, PolylineData, PolylineEdgeArgs, PolylineFlags, QParams3d, QPoint3dList, RenderMaterial, RenderTexture, SilhouetteEdgeArgs,\r\n} from \"@itwin/core-common\";\r\nimport { InstancedGraphicParams } from \"../../InstancedGraphicParams\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { ColorMap } from \"../ColorMap\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { Triangle, TriangleList } from \"../Primitives\";\r\nimport { VertexKeyProps } from \"../VertexKey\";\r\n\r\n/* Information needed to draw a set of indexed polylines using a shared vertex buffer.\r\n * @internal\r\n */\r\nexport class PolylineArgs {\r\n public colors = new ColorIndex();\r\n public features = new FeatureIndex();\r\n public width = 0;\r\n public linePixels = LinePixels.Solid;\r\n public flags: PolylineFlags;\r\n public points: QPoint3dList;\r\n public polylines: PolylineData[];\r\n public pointParams: QParams3d;\r\n\r\n public constructor(points: QPoint3dList = new QPoint3dList(QParams3d.fromRange(Range3d.createNull())),\r\n polylines: PolylineData[] = [], pointParams?: QParams3d, is2d = false, isPlanar = false) {\r\n this.points = points;\r\n this.polylines = polylines;\r\n if (undefined === pointParams) {\r\n this.pointParams = QParams3d.fromRange(Range3d.createNull());\r\n } else {\r\n this.pointParams = pointParams;\r\n }\r\n this.flags = new PolylineFlags(is2d, isPlanar);\r\n }\r\n\r\n public get isValid(): boolean { return this.polylines.length !== 0; }\r\n public reset(): void {\r\n this.flags.initDefaults();\r\n this.points = new QPoint3dList(QParams3d.fromRange(Range3d.createNull()));\r\n this.polylines = [];\r\n this.colors.reset();\r\n this.features.reset();\r\n }\r\n public init(mesh: Mesh) {\r\n this.reset();\r\n if (undefined === mesh.polylines)\r\n return;\r\n\r\n this.width = mesh.displayParams.width;\r\n this.linePixels = mesh.displayParams.linePixels;\r\n this.flags.is2d = mesh.is2d;\r\n this.flags.isPlanar = mesh.isPlanar;\r\n this.flags.isDisjoint = Mesh.PrimitiveType.Point === mesh.type;\r\n if (DisplayParams.RegionEdgeType.Outline === mesh.displayParams.regionEdgeType) {\r\n // This polyline is behaving as the edges of a region surface.\r\n if (undefined === mesh.displayParams.gradient || mesh.displayParams.gradient.isOutlined)\r\n this.flags.setIsNormalEdge();\r\n else\r\n this.flags.setIsOutlineEdge(); // edges only displayed if fill undisplayed...\r\n }\r\n\r\n mesh.polylines.forEach((polyline) => {\r\n const indexedPolyline = new PolylineData();\r\n if (indexedPolyline.init(polyline)) { this.polylines.push(indexedPolyline); }\r\n });\r\n if (!this.isValid) { return false; }\r\n this.finishInit(mesh);\r\n return true;\r\n }\r\n public finishInit(mesh: Mesh) {\r\n this.pointParams = mesh.points.params;\r\n this.points = mesh.points;\r\n mesh.colorMap.toColorIndex(this.colors, mesh.colors);\r\n mesh.toFeatureIndex(this.features);\r\n }\r\n}\r\n\r\n/** The vertices of the edges are shared with those of the surface\r\n * @internal\r\n */\r\nexport class MeshArgsEdges {\r\n public edges = new EdgeArgs();\r\n public silhouettes = new SilhouetteEdgeArgs();\r\n public polylines = new PolylineEdgeArgs();\r\n public width = 0;\r\n public linePixels = LinePixels.Solid;\r\n\r\n public clear(): void {\r\n this.edges.clear();\r\n this.silhouettes.clear();\r\n this.polylines.clear();\r\n this.width = 0;\r\n this.linePixels = LinePixels.Solid;\r\n }\r\n public get isValid(): boolean { return this.edges.isValid || this.silhouettes.isValid || this.polylines.isValid; }\r\n}\r\n\r\n/* A carrier of information needed to describe a triangle mesh and its edges.\r\n * @internal\r\n */\r\nexport class MeshArgs {\r\n public edges = new MeshArgsEdges();\r\n public vertIndices?: number[];\r\n public points?: QPoint3dList;\r\n public normals?: OctEncodedNormal[];\r\n public textureUv?: Point2d[];\r\n public texture?: RenderTexture;\r\n public colors = new ColorIndex();\r\n public features = new FeatureIndex();\r\n public material?: RenderMaterial;\r\n public fillFlags = FillFlags.None;\r\n public isPlanar = false;\r\n public is2d = false;\r\n public hasBakedLighting = false;\r\n public isVolumeClassifier = false;\r\n public hasFixedNormals = false;\r\n public auxChannels?: ReadonlyArray<AuxChannel>;\r\n\r\n public clear() {\r\n this.edges.clear();\r\n this.vertIndices = undefined;\r\n this.points = undefined;\r\n this.normals = undefined;\r\n this.textureUv = undefined;\r\n this.texture = undefined;\r\n this.colors.reset();\r\n this.features.reset();\r\n this.material = undefined;\r\n this.fillFlags = FillFlags.None;\r\n this.isPlanar = this.is2d = this.hasBakedLighting = this.isVolumeClassifier = this.hasFixedNormals = false;\r\n this.auxChannels = undefined;\r\n }\r\n\r\n public init(mesh: Mesh): boolean {\r\n this.clear();\r\n if (undefined === mesh.triangles || mesh.triangles.isEmpty)\r\n return false;\r\n\r\n assert(0 < mesh.points.length);\r\n\r\n this.vertIndices = mesh.triangles.indices;\r\n this.points = mesh.points;\r\n\r\n if (!mesh.displayParams.ignoreLighting && 0 < mesh.normals.length)\r\n this.normals = mesh.normals;\r\n\r\n if (0 < mesh.uvParams.length)\r\n this.textureUv = mesh.uvParams;\r\n\r\n mesh.colorMap.toColorIndex(this.colors, mesh.colors);\r\n mesh.toFeatureIndex(this.features);\r\n\r\n this.material = mesh.displayParams.material;\r\n if (undefined !== mesh.displayParams.textureMapping)\r\n this.texture = mesh.displayParams.textureMapping.texture;\r\n\r\n this.fillFlags = mesh.displayParams.fillFlags;\r\n this.isPlanar = mesh.isPlanar;\r\n this.is2d = mesh.is2d;\r\n this.hasBakedLighting = (true === mesh.hasBakedLighting);\r\n this.isVolumeClassifier = (true === mesh.isVolumeClassifier);\r\n\r\n this.edges.width = mesh.displayParams.width;\r\n this.edges.linePixels = mesh.displayParams.linePixels;\r\n this.auxChannels = mesh.auxChannels;\r\n\r\n const meshEdges = mesh.edges;\r\n if (undefined === meshEdges)\r\n return true;\r\n\r\n this.edges.edges.init(mesh.edges);\r\n this.edges.silhouettes.init(mesh.edges);\r\n\r\n const polylines: PolylineData[] = [];\r\n meshEdges.polylines.forEach((meshPolyline: MeshPolyline) => {\r\n const polyline = new PolylineData();\r\n if (polyline.init(meshPolyline)) { polylines.push(polyline); }\r\n });\r\n\r\n this.edges.polylines.init(polylines);\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshGraphicArgs {\r\n public polylineArgs = new PolylineArgs();\r\n public meshArgs: MeshArgs = new MeshArgs();\r\n}\r\n\r\n/** @internal */\r\nexport class Mesh {\r\n private readonly _data: TriangleList | MeshPolylineList;\r\n public readonly points: QPoint3dList;\r\n public readonly normals: OctEncodedNormal[] = [];\r\n public readonly uvParams: Point2d[] = [];\r\n public readonly colorMap: ColorMap = new ColorMap(); // used to be called ColorTable\r\n public colors: number[] = [];\r\n public edges?: MeshEdges;\r\n public readonly features?: Mesh.Features;\r\n public readonly type: Mesh.PrimitiveType;\r\n public readonly is2d: boolean;\r\n public readonly isPlanar: boolean;\r\n public readonly hasBakedLighting: boolean;\r\n public readonly isVolumeClassifier: boolean;\r\n public displayParams: DisplayParams;\r\n private _auxChannels?: AuxChannel[];\r\n\r\n private constructor(props: Mesh.Props) {\r\n const { displayParams, features, type, range, is2d, isPlanar } = props;\r\n this._data = Mesh.PrimitiveType.Mesh === type ? new TriangleList() : new MeshPolylineList();\r\n this.displayParams = displayParams;\r\n this.features = features;\r\n this.type = type;\r\n this.is2d = is2d;\r\n this.isPlanar = isPlanar;\r\n this.hasBakedLighting = (true === props.hasBakedLighting);\r\n this.isVolumeClassifier = (true === props.isVolumeClassifier);\r\n this.points = new QPoint3dList(QParams3d.fromRange(range));\r\n }\r\n\r\n public static create(props: Mesh.Props): Mesh { return new Mesh(props); }\r\n\r\n public get triangles(): TriangleList | undefined {\r\n return Mesh.PrimitiveType.Mesh === this.type ? this._data as TriangleList : undefined;\r\n }\r\n\r\n public get polylines(): MeshPolylineList | undefined {\r\n return Mesh.PrimitiveType.Mesh !== this.type ? this._data as MeshPolylineList : undefined;\r\n }\r\n\r\n public get auxChannels(): ReadonlyArray<AuxChannel> | undefined {\r\n return this._auxChannels;\r\n }\r\n\r\n public addAuxChannels(channels: ReadonlyArray<AuxChannel>, srcIndex: number): void {\r\n // The native version of this function appears to assume that all polyfaces added to the Mesh will have\r\n // the same number + type of aux channels.\r\n // ###TODO We should really produce a separate Mesh for each unique combination. For now just bail on mismatch.\r\n if (this._auxChannels) {\r\n if (this._auxChannels.length !== channels.length)\r\n return;\r\n\r\n for (let i = 0; i < channels.length; i++) {\r\n const src = channels[i];\r\n const dst = this._auxChannels[i];\r\n if (src.dataType !== dst.dataType || src.name !== dst.name || src.inputName !== dst.inputName)\r\n return;\r\n }\r\n }\r\n\r\n if (!this._auxChannels) {\r\n // Copy the channels, leaving each AuxData's values array empty.\r\n this._auxChannels = channels.map((x) => new AuxChannel(x.data.map((y) => new AuxChannelData(y.input, [])), x.dataType, x.name, x.inputName));\r\n }\r\n\r\n // Append the value at srcIndex from each source channel's data to our channels.\r\n for (let channelIndex = 0; channelIndex < channels.length; channelIndex++) {\r\n const srcChannel = channels[channelIndex];\r\n const dstChannel = this._auxChannels[channelIndex];\r\n const dstIndex = dstChannel.valueCount;\r\n for (let dataIndex = 0; dataIndex < srcChannel.data.length; dataIndex++) {\r\n const dstData = dstChannel.data[dataIndex];\r\n dstData.copyValues(srcChannel.data[dataIndex], dstIndex, srcIndex, dstChannel.entriesPerValue);\r\n }\r\n }\r\n }\r\n\r\n public toFeatureIndex(index: FeatureIndex): void {\r\n if (undefined !== this.features)\r\n this.features.toFeatureIndex(index);\r\n }\r\n\r\n public getGraphics(args: MeshGraphicArgs, system: RenderSystem, instancesOrViewIndependentOrigin?: InstancedGraphicParams | Point3d): RenderGraphic | undefined {\r\n if (undefined !== this.triangles && this.triangles.length !== 0) {\r\n if (args.meshArgs.init(this))\r\n return system.createTriMesh(args.meshArgs, instancesOrViewIndependentOrigin);\r\n } else if (undefined !== this.polylines && this.polylines.length !== 0 && args.polylineArgs.init(this)) {\r\n return system.createIndexedPolylines(args.polylineArgs, instancesOrViewIndependentOrigin);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n public addPolyline(poly: MeshPolyline): void {\r\n const { type, polylines } = this;\r\n\r\n assert(Mesh.PrimitiveType.Polyline === type || Mesh.PrimitiveType.Point === type);\r\n assert(undefined !== polylines);\r\n\r\n if (Mesh.PrimitiveType.Polyline === type && poly.indices.length < 2)\r\n return;\r\n\r\n if (undefined !== polylines)\r\n polylines.push(poly);\r\n }\r\n\r\n public addTriangle(triangle: Triangle): void {\r\n const { triangles, type } = this;\r\n\r\n assert(Mesh.PrimitiveType.Mesh === type);\r\n assert(undefined !== triangles);\r\n\r\n if (undefined !== triangles)\r\n triangles.addTriangle(triangle);\r\n }\r\n\r\n public addVertex(props: VertexKeyProps): number {\r\n const { position, normal, uvParam, fillColor } = props;\r\n\r\n this.points.push(position);\r\n\r\n if (undefined !== normal)\r\n this.normals.push(normal);\r\n\r\n if (undefined !== uvParam)\r\n this.uvParams.push(uvParam);\r\n\r\n // Don't allocate color indices until we have non-uniform colors\r\n if (0 === this.colorMap.length) {\r\n this.colorMap.insert(fillColor);\r\n assert(this.colorMap.isUniform);\r\n assert(0 === this.colorMap.indexOf(fillColor));\r\n } else if (!this.colorMap.isUniform || !this.colorMap.hasColor(fillColor)) {\r\n // Back-fill uniform value (index=0) for existing vertices if previously uniform\r\n if (0 === this.colors.length)\r\n this.colors.length = this.points.length - 1;\r\n\r\n this.colors.push(this.colorMap.insert(fillColor));\r\n assert(!this.colorMap.isUniform);\r\n }\r\n\r\n return this.points.length - 1;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace Mesh { // eslint-disable-line no-redeclare\r\n export enum PrimitiveType {\r\n Mesh, // eslint-disable-line @typescript-eslint/no-shadow\r\n Polyline,\r\n Point,\r\n }\r\n\r\n export class Features {\r\n public readonly table: FeatureTable;\r\n public indices: number[] = [];\r\n public uniform = 0;\r\n public initialized = false;\r\n\r\n public constructor(table: FeatureTable) { this.table = table; }\r\n\r\n public add(feat: Feature, numVerts: number): void {\r\n const index = this.table.insert(feat);\r\n if (!this.initialized) {\r\n // First feature - uniform.\r\n this.uniform = index;\r\n this.initialized = true;\r\n } else if (0 < this.indices.length) {\r\n // Already non-uniform\r\n this.indices.push(index);\r\n } else {\r\n // Second feature - back-fill uniform for existing verts\r\n while (this.indices.length < numVerts - 1)\r\n this.indices.push(this.uniform);\r\n\r\n this.indices.push(index);\r\n }\r\n }\r\n\r\n public setIndices(indices: number[]) {\r\n this.indices.length = 0;\r\n this.uniform = 0;\r\n this.initialized = 0 < indices.length;\r\n\r\n assert(0 < indices.length);\r\n if (1 === indices.length)\r\n this.uniform = indices[0];\r\n else if (1 < indices.length)\r\n this.indices = indices;\r\n }\r\n\r\n public toFeatureIndex(index: FeatureIndex): void {\r\n if (!this.initialized) {\r\n index.type = FeatureIndexType.Empty;\r\n } else if (this.indices.length === 0) {\r\n index.type = FeatureIndexType.Uniform;\r\n index.featureID = this.uniform;\r\n } else {\r\n index.type = FeatureIndexType.NonUniform;\r\n index.featureIDs = new Uint32Array(this.indices);\r\n }\r\n }\r\n }\r\n\r\n export interface Props {\r\n displayParams: DisplayParams;\r\n features?: Mesh.Features;\r\n type: Mesh.PrimitiveType;\r\n range: Range3d;\r\n is2d: boolean;\r\n isPlanar: boolean;\r\n hasBakedLighting?: boolean;\r\n isVolumeClassifier?: boolean;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshList extends Array<Mesh> {\r\n public readonly features?: FeatureTable;\r\n public readonly range?: Range3d;\r\n constructor(features?: FeatureTable, range?: Range3d) {\r\n super();\r\n this.features = features;\r\n this.range = range;\r\n }\r\n}\r\n"]}
|