UNPKG

@itwin/core-frontend

Version:
89 lines 5.18 kB
/** @packageDocumentation * @module Rendering */ import { GraphicAssembler } from "./GraphicAssembler"; import { Point3d, Range3d, Transform } from "@itwin/core-geometry"; import { GraphicType } from "./GraphicType"; import { PickableGraphicOptions } from "./BatchOptions"; import { _implementationProhibited } from "../internal/Symbols"; import { WorkerGraphicDescriptionContext } from "./GraphicDescriptionContext"; /** An opaque representation of a [[RenderGraphic]] created by a [[GraphicDescriptionBuilder]]. * Unlike `RenderGraphic`, a `GraphicDescription` does not allocate any WebGL resources like textures, vertex buffers, etc, so * it can be created on and/or passed to and from a [Worker](https://developer.mozilla.org/en-US/docs/Web/API/Worker). * @see [[RenderSystem.createGraphicFromDescription]] to convert it to a [[RenderGraphic]]. * @beta */ export interface GraphicDescription { /** @internal */ readonly [_implementationProhibited]: unknown; } /** @beta */ export declare namespace GraphicDescription { /** Adds to `transferables` all of the [Transferable objects](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Transferable_objects) like * `ArrayBuffer`s that are included in `description`. This makes copying a [[GraphicDescription]] to and from a [Worker](https://developer.mozilla.org/en-US/docs/Web/API/Worker) * much more efficient. */ function collectTransferables(transferables: Set<Transferable>, description: GraphicDescription): void; } /** Arguments supplied to [[GraphicDescriptionBuilderOptions.computeChordTolerance]] to help compute an appropriate level of detail for the [[GraphicDescription]]. * @beta */ export interface ComputeGraphicDescriptionChordToleranceArgs { /** The builder that is constructing the [[GraphicDescription]]. */ builder: GraphicDescriptionBuilder; /** A function that computes a bounding box enclosing all of the geometry in the [[builder]]. */ computeRange: () => Range3d; } /** Options supplied to [[GraphicDescriptionBuilder.create]]. * @beta */ export type GraphicDescriptionBuilderOptions = { /** The type of graphic to create. This influences the default values of some other options like [[generateEdges]] and * properties like [[GraphicDescriptionBuilder.wantNormals]]. */ type: GraphicType; /** The local-to-world transform in which the builder's geoemtry is to be defined. * Default: an identity transform. */ placement?: Transform; /** If the graphic is to contain one or more [Feature]($common)s, specifies the initial pickable Id and other options. */ pickable?: PickableGraphicOptions; /** Specifies whether edges are generated for surfaces. * By default, edges are only produced if [[type]] is [[GraphicType.Scene]]. */ generateEdges?: boolean; /** Computes the level of detail in meters for the graphics produced by the builder. */ computeChordTolerance: (args: ComputeGraphicDescriptionChordToleranceArgs) => number; /** Context in which the graphic description will be created, obtained from the [[RenderSystem]] on the main thread. */ context: WorkerGraphicDescriptionContext; } & ({ /** If defined, specifies a point about which the graphic will rotate such that it always faces the viewer. * This can be particular useful for planar regions to create a billboarding effect - e.g., to implement [[Marker]]-like WebGL decorations. * The graphic's [[placement]] transform is not applied to the point. * @note This has no effect for graphics displayed in a 2d view. */ viewIndependentOrigin?: Point3d; /** @internal */ instances?: never; }); /** An equivalent of a [[GraphicBuilder]] that is designed for use on a [Worker](https://developer.mozilla.org/en-US/docs/Web/API/Worker). * Unlike [[GraphicBuilder.finish]], which produces a [[RenderGraphic]], [[GraphicDescriptionBuilder.finish]] produces a [[GraphicDescription]]. * The `GraphicDescription` can be returned from the Worker to the main thread, where [[RenderSystem.createGraphicFromDescription]] can be used * to quickly convert it to a `RenderGraphic`. * Produce graphics using `GraphicDescriptionBuilder` on a Worker instead of using `GraphicBuilder` when you have graphics that may take a non-trivial * amount of time to create, to avoid blocking the main JavaScript event loop. * @see [[GraphicDescriptionBuilder.create]] to instantiate this type. * @beta */ export interface GraphicDescriptionBuilder extends GraphicAssembler { /** Processes the accumulated symbology and geometry to produce a description of a renderable graphic. * This function should only be called once; after the [[GraphicDescription]] has been extracted, the [[GraphicDescriptionBuilder]] should no longer be used. */ finish(): GraphicDescription; } /** @beta */ export declare namespace GraphicDescriptionBuilder { /** Create a [[GraphicDescriptionBuilder]] using the specified `options`. */ function create(options: GraphicDescriptionBuilderOptions): GraphicDescriptionBuilder; } //# sourceMappingURL=GraphicDescriptionBuilder.d.ts.map