UNPKG

@deck.gl/core

Version:

deck.gl core library

229 lines 7.89 kB
import type { Device } from '@luma.gl/core'; import PickLayersPass, { PickingColorDecoder } from "../passes/pick-layers-pass.js"; import { PickingInfo } from "./picking/pick-info.js"; import type { Framebuffer } from '@luma.gl/core'; import type { FilterContext, Rect } from "../passes/layers-pass.js"; import type Layer from "./layer.js"; import type { Effect } from "./effect.js"; import type View from "../views/view.js"; import type Viewport from "../viewports/viewport.js"; export type PickByPointOptions = { x: number; y: number; radius?: number; depth?: number; mode?: string; unproject3D?: boolean; }; export type PickByRectOptions = { x: number; y: number; width?: number; height?: number; mode?: string; maxObjects?: number | null; }; type PickOperationContext = { layers: Layer[]; views: Record<string, View>; viewports: Viewport[]; onViewportActive: (viewport: Viewport) => void; effects: Effect[]; }; /** Manages picking in a Deck context */ export default class DeckPicker { device: Device; pickingFBO?: Framebuffer; depthFBO?: Framebuffer; pickLayersPass: PickLayersPass; layerFilter?: (context: FilterContext) => boolean; /** Identifiers of the previously picked object, for callback tracking and auto highlight */ lastPickedInfo: { index: number; layerId: string | null; info: PickingInfo | null; }; _pickable: boolean; constructor(device: Device); setProps(props: any): void; finalize(): void; /** * Pick the closest info at given coordinate * @returns Promise that resolves with picking info */ pickObjectAsync(opts: PickByPointOptions & PickOperationContext): Promise<{ result: PickingInfo[]; emptyInfo: PickingInfo; }>; /** * Picks a list of unique infos within a bounding box * @returns Promise that resolves to all unique infos within a bounding box */ pickObjectsAsync(opts: PickByRectOptions & PickOperationContext): Promise<PickingInfo[]>; /** * Pick the closest info at given coordinate * @returns picking info * @deprecated WebGL only - use pickObjectAsync instead */ pickObject(opts: PickByPointOptions & PickOperationContext): { result: PickingInfo[]; emptyInfo: PickingInfo; }; /** * Get all unique infos within a bounding box * @returns all unique infos within a bounding box * @deprecated WebGL only - use pickObjectAsync instead */ pickObjects(opts: PickByRectOptions & PickOperationContext): { color: Uint8Array | null; layer: Layer | null; sourceLayer?: Layer | null; viewport?: Viewport; index: number; picked: boolean; object?: any; x: number; y: number; pixel?: [number, number]; coordinate?: number[]; devicePixel?: [number, number]; pixelRatio: number; }[]; getLastPickedObject({ x, y, layers, viewports }: { x: any; y: any; layers: any; viewports: any; }, lastPickedInfo?: { color: Uint8Array | null; layer: Layer | null; sourceLayer?: Layer | null; viewport?: Viewport; index: number; picked: boolean; object?: any; x: number; y: number; pixel?: [number, number]; coordinate?: number[]; devicePixel?: [number, number]; pixelRatio: number; } | null): { x: any; y: any; viewport: any; coordinate: any; layer: any; color?: Uint8Array | null | undefined; sourceLayer?: Layer | null; index?: number | undefined; picked?: boolean | undefined; object?: any; pixel?: [number, number]; devicePixel?: [number, number]; pixelRatio?: number | undefined; }; /** Ensures that picking framebuffer exists and matches the canvas size */ _resizeBuffer(): void; /** Preliminary filtering of the layers list. Skid picking pass if no layer is pickable. */ _getPickable(layers: Layer[]): Layer[] | null; /** * Pick the closest object at the given coordinate */ _pickClosestObjectAsync({ layers, views, viewports, x, y, radius, depth, mode, unproject3D, onViewportActive, effects }: PickByPointOptions & PickOperationContext): Promise<{ result: PickingInfo[]; emptyInfo: PickingInfo; }>; /** * Pick the closest object at the given coordinate * @deprecated WebGL only */ _pickClosestObject({ layers, views, viewports, x, y, radius, depth, mode, unproject3D, onViewportActive, effects }: PickByPointOptions & PickOperationContext): { result: PickingInfo[]; emptyInfo: PickingInfo; }; /** * Pick all objects within the given bounding box */ _pickVisibleObjectsAsync({ layers, views, viewports, x, y, width, height, mode, maxObjects, onViewportActive, effects }: PickByRectOptions & PickOperationContext): Promise<PickingInfo[]>; /** * Pick all objects within the given bounding box * @deprecated WebGL only */ _pickVisibleObjects({ layers, views, viewports, x, y, width, height, mode, maxObjects, onViewportActive, effects }: PickByRectOptions & PickOperationContext): PickingInfo[]; /** Renders layers into the picking buffer with picking colors and read the pixels. */ _drawAndSampleAsync(params: { deviceRect: Rect; pass: string; layers: Layer[]; views: Record<string, View>; viewports: Viewport[]; onViewportActive: (viewport: Viewport) => void; cullRect?: Rect; effects: Effect[]; }): Promise<{ pickedColors: Uint8Array; decodePickingColor: PickingColorDecoder; }>; /** Renders layers into the picking buffer with encoded z values and read the pixels. */ _drawAndSampleAsync(params: { deviceRect: Rect; pass: string; layers: Layer[]; views: Record<string, View>; viewports: Viewport[]; onViewportActive: (viewport: Viewport) => void; cullRect?: Rect; effects: Effect[]; }, pickZ: true): Promise<{ pickedColors: Float32Array; decodePickingColor: null; }>; /** * Renders layers into the picking buffer with picking colors and read the pixels. * @deprecated WebGL only, use _drawAndSampleAsync instead */ _drawAndSample(params: { deviceRect: Rect; pass: string; layers: Layer[]; views: Record<string, View>; viewports: Viewport[]; onViewportActive: (viewport: Viewport) => void; cullRect?: Rect; effects: Effect[]; }): { pickedColors: Uint8Array; decodePickingColor: PickingColorDecoder; }; /** * Renders layers into the picking buffer with encoded z values and read the pixels. * @deprecated WebGL only, use _drawAndSampleAsync instead */ _drawAndSample(params: { deviceRect: Rect; pass: string; layers: Layer[]; views: Record<string, View>; viewports: Viewport[]; onViewportActive: (viewport: Viewport) => void; cullRect?: Rect; effects: Effect[]; }, pickZ: true): { pickedColors: Float32Array; decodePickingColor: null; }; /** * Calculate a picking rect centered on deviceX and deviceY and clipped to device * @returns null if pixel is outside of device */ _getPickingRect({ deviceX, deviceY, deviceRadius, deviceWidth, deviceHeight }: { deviceX: number; deviceY: number; deviceRadius: number; deviceWidth: number; deviceHeight: number; }): Rect | null; } export {}; //# sourceMappingURL=deck-picker.d.ts.map