molstar
Version:
A comprehensive macromolecular library.
672 lines (671 loc) • 26.4 kB
TypeScript
/**
* Copyright (c) 2018-2025 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @author David Sehnal <david.sehnal@gmail.com>
* @author Gianluca Tomasello <giagitom@gmail.com>
* @author Herman Bergwerf <post@hbergwerf.nl>
*/
import { BehaviorSubject, Subject } from 'rxjs';
import { now } from '../mol-util/now';
import { Vec3, Vec2 } from '../mol-math/linear-algebra';
import { InputObserver, ModifiersKeys, ButtonsType } from '../mol-util/input/input-observer';
import { RendererStats } from '../mol-gl/renderer';
import { GraphicsRenderObject } from '../mol-gl/render-object';
import { WebGLContext } from '../mol-gl/webgl/context';
import { Representation } from '../mol-repr/representation';
import { PickingId } from '../mol-geo/geometry/picking';
import { MarkerAction } from '../mol-util/marker-action';
import { Camera } from './camera';
import { ParamDefinition as PD } from '../mol-util/param-definition';
import { Canvas3dInteractionHelper } from './helper/interaction-events';
import { PickData } from './passes/pick';
import { ImagePass, ImageProps } from './passes/image';
import { Sphere3D } from '../mol-math/geometry';
import { Passes } from './passes/passes';
import { AssetManager } from '../mol-util/assets';
export declare const Canvas3DParams: {
camera: PD.Group<PD.Normalize<{
mode: "perspective" | "orthographic";
helper: PD.Normalize<{
axes: /*elided*/ any;
}>;
stereo: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
eyeSeparation: /*elided*/ any;
focus: /*elided*/ any;
}>, "on">;
fov: number;
manualReset: boolean;
}>>;
cameraFog: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
intensity: number;
}>, "on">>;
cameraClipping: PD.Group<PD.Normalize<{
radius: number;
far: boolean;
minNear: number;
}>>;
viewport: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "canvas"> | PD.NamedParams<PD.Normalize<{
x: number;
y: number;
width: number;
height: number;
}>, "static-frame"> | PD.NamedParams<PD.Normalize<{
x: number;
y: number;
width: number;
height: number;
}>, "relative-frame">>;
cameraResetDurationMs: PD.Numeric;
sceneRadiusFactor: PD.Numeric;
transparentBackground: PD.BooleanParam;
dpoitIterations: PD.Numeric;
pickPadding: PD.Numeric;
userInteractionReleaseMs: PD.Numeric;
multiSample: PD.Group<PD.Normalize<{
mode: string;
sampleLevel: number;
reduceFlicker: boolean;
reuseOcclusion: boolean;
}>>;
postprocessing: PD.Group<PD.Normalize<{
occlusion: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
samples: /*elided*/ any;
multiScale: /*elided*/ any;
radius: /*elided*/ any;
bias: /*elided*/ any;
blurKernelSize: /*elided*/ any;
blurDepthBias: /*elided*/ any;
resolutionScale: /*elided*/ any;
color: /*elided*/ any;
transparentThreshold: /*elided*/ any;
}>, "on">;
shadow: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
steps: /*elided*/ any;
maxDistance: /*elided*/ any;
tolerance: /*elided*/ any;
}>, "on">;
outline: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
scale: /*elided*/ any;
threshold: /*elided*/ any;
color: /*elided*/ any;
includeTransparent: /*elided*/ any;
}>, "on">;
dof: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
blurSize: /*elided*/ any;
blurSpread: /*elided*/ any;
inFocus: /*elided*/ any;
PPM: /*elided*/ any;
center: /*elided*/ any;
mode: /*elided*/ any;
}>, "on">;
antialiasing: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
edgeThreshold: /*elided*/ any;
maxSearchSteps: /*elided*/ any;
}>, "smaa"> | PD.NamedParams<PD.Normalize<{
edgeThresholdMin: /*elided*/ any;
edgeThresholdMax: /*elided*/ any;
iterations: /*elided*/ any;
subpixelQuality: /*elided*/ any;
}>, "fxaa">;
sharpening: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
sharpness: /*elided*/ any;
denoise: /*elided*/ any;
}>, "on">;
background: PD.Normalize<{
variant: /*elided*/ any;
}>;
bloom: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
strength: /*elided*/ any;
radius: /*elided*/ any;
threshold: /*elided*/ any;
mode: /*elided*/ any;
}>, "on">;
}>>;
marking: PD.Group<PD.Normalize<{
enabled: boolean;
highlightEdgeColor: import("../mol-util/color").Color;
selectEdgeColor: import("../mol-util/color").Color;
edgeScale: number;
highlightEdgeStrength: number;
selectEdgeStrength: number;
ghostEdgeStrength: number;
innerEdgeFactor: number;
}>>;
illumination: PD.Group<PD.Normalize<{
rendersPerFrame: [number, number];
targetFps: number;
steps: number;
firstStepSize: number;
refineSteps: number;
rayDistance: number;
thicknessMode: "auto" | "fixed";
minThickness: number;
thicknessFactor: number;
thickness: number;
bounces: number;
glow: boolean;
shadowEnable: boolean;
shadowSoftness: number;
shadowThickness: number;
enabled: boolean;
maxIterations: number;
denoise: boolean;
denoiseThreshold: [number, number];
ignoreOutline: boolean;
}>>;
hiZ: PD.Group<PD.Normalize<{
enabled: boolean;
maxFrameLag: number;
minLevel: number;
}>>;
renderer: PD.Group<PD.Normalize<{
backgroundColor: import("../mol-util/color").Color;
pickingAlphaThreshold: number;
interiorDarkening: number;
interiorColorFlag: boolean;
interiorColor: import("../mol-util/color").Color;
colorMarker: boolean;
highlightColor: import("../mol-util/color").Color;
selectColor: import("../mol-util/color").Color;
dimColor: import("../mol-util/color").Color;
highlightStrength: number;
selectStrength: number;
dimStrength: number;
markerPriority: number;
xrayEdgeFalloff: number;
celSteps: number;
exposure: number;
light: PD.Normalize<{
inclination: number;
azimuth: number;
color: import("../mol-util/color").Color;
intensity: number;
}>[];
ambientColor: import("../mol-util/color").Color;
ambientIntensity: number;
}>>;
trackball: PD.Group<PD.Normalize<{
noScroll: boolean;
rotateSpeed: number;
zoomSpeed: number;
panSpeed: number;
moveSpeed: number;
boostMoveFactor: number;
flyMode: boolean;
animate: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
speed: /*elided*/ any;
}>, "spin"> | PD.NamedParams<PD.Normalize<{
speed: /*elided*/ any;
angle: /*elided*/ any;
}>, "rock">;
staticMoving: boolean;
dynamicDampingFactor: number;
minDistance: number;
maxDistance: number;
gestureScaleFactor: number;
maxWheelDelta: number;
bindings: {
dragRotate: import("../mol-util/binding").Binding;
dragRotateZ: import("../mol-util/binding").Binding;
dragPan: import("../mol-util/binding").Binding;
dragZoom: import("../mol-util/binding").Binding;
dragFocus: import("../mol-util/binding").Binding;
dragFocusZoom: import("../mol-util/binding").Binding;
scrollZoom: import("../mol-util/binding").Binding;
scrollFocus: import("../mol-util/binding").Binding;
scrollFocusZoom: import("../mol-util/binding").Binding;
keyMoveForward: import("../mol-util/binding").Binding;
keyMoveBack: import("../mol-util/binding").Binding;
keyMoveLeft: import("../mol-util/binding").Binding;
keyMoveRight: import("../mol-util/binding").Binding;
keyMoveUp: import("../mol-util/binding").Binding;
keyMoveDown: import("../mol-util/binding").Binding;
keyRollLeft: import("../mol-util/binding").Binding;
keyRollRight: import("../mol-util/binding").Binding;
keyPitchUp: import("../mol-util/binding").Binding;
keyPitchDown: import("../mol-util/binding").Binding;
keyYawLeft: import("../mol-util/binding").Binding;
keyYawRight: import("../mol-util/binding").Binding;
boostMove: import("../mol-util/binding").Binding;
enablePointerLock: import("../mol-util/binding").Binding;
};
autoAdjustMinMaxDistance: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
minDistanceFactor: /*elided*/ any;
minDistancePadding: /*elided*/ any;
maxDistanceFactor: /*elided*/ any;
maxDistanceMin: /*elided*/ any;
}>, "on">;
}>>;
interaction: PD.Group<PD.Normalize<{
maxFps: number;
preferAtomPixelPadding: number;
}>>;
debug: PD.Group<PD.Normalize<{
sceneBoundingSpheres: boolean;
visibleSceneBoundingSpheres: boolean;
objectBoundingSpheres: boolean;
instanceBoundingSpheres: boolean;
}>>;
handle: PD.Group<PD.Normalize<{
handle: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
alpha: /*elided*/ any;
ignoreLight: /*elided*/ any;
colorX: /*elided*/ any;
colorY: /*elided*/ any;
colorZ: /*elided*/ any;
scale: /*elided*/ any;
doubleSided: /*elided*/ any;
flipSided: /*elided*/ any;
flatShaded: /*elided*/ any;
celShaded: /*elided*/ any;
xrayShaded: /*elided*/ any;
transparentBackfaces: /*elided*/ any;
bumpFrequency: /*elided*/ any;
bumpAmplitude: /*elided*/ any;
quality: /*elided*/ any;
material: /*elided*/ any;
clip: /*elided*/ any;
emissive: /*elided*/ any;
density: /*elided*/ any;
instanceGranularity: /*elided*/ any;
lod: /*elided*/ any;
cellSize: /*elided*/ any;
batchSize: /*elided*/ any;
}>, "on">;
}>>;
};
export declare const DefaultCanvas3DParams: PD.Values<{
camera: PD.Group<PD.Normalize<{
mode: "perspective" | "orthographic";
helper: PD.Normalize<{
axes: /*elided*/ any;
}>;
stereo: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
eyeSeparation: /*elided*/ any;
focus: /*elided*/ any;
}>, "on">;
fov: number;
manualReset: boolean;
}>>;
cameraFog: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
intensity: number;
}>, "on">>;
cameraClipping: PD.Group<PD.Normalize<{
radius: number;
far: boolean;
minNear: number;
}>>;
viewport: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "canvas"> | PD.NamedParams<PD.Normalize<{
x: number;
y: number;
width: number;
height: number;
}>, "static-frame"> | PD.NamedParams<PD.Normalize<{
x: number;
y: number;
width: number;
height: number;
}>, "relative-frame">>;
cameraResetDurationMs: PD.Numeric;
sceneRadiusFactor: PD.Numeric;
transparentBackground: PD.BooleanParam;
dpoitIterations: PD.Numeric;
pickPadding: PD.Numeric;
userInteractionReleaseMs: PD.Numeric;
multiSample: PD.Group<PD.Normalize<{
mode: string;
sampleLevel: number;
reduceFlicker: boolean;
reuseOcclusion: boolean;
}>>;
postprocessing: PD.Group<PD.Normalize<{
occlusion: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
samples: /*elided*/ any;
multiScale: /*elided*/ any;
radius: /*elided*/ any;
bias: /*elided*/ any;
blurKernelSize: /*elided*/ any;
blurDepthBias: /*elided*/ any;
resolutionScale: /*elided*/ any;
color: /*elided*/ any;
transparentThreshold: /*elided*/ any;
}>, "on">;
shadow: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
steps: /*elided*/ any;
maxDistance: /*elided*/ any;
tolerance: /*elided*/ any;
}>, "on">;
outline: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
scale: /*elided*/ any;
threshold: /*elided*/ any;
color: /*elided*/ any;
includeTransparent: /*elided*/ any;
}>, "on">;
dof: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
blurSize: /*elided*/ any;
blurSpread: /*elided*/ any;
inFocus: /*elided*/ any;
PPM: /*elided*/ any;
center: /*elided*/ any;
mode: /*elided*/ any;
}>, "on">;
antialiasing: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
edgeThreshold: /*elided*/ any;
maxSearchSteps: /*elided*/ any;
}>, "smaa"> | PD.NamedParams<PD.Normalize<{
edgeThresholdMin: /*elided*/ any;
edgeThresholdMax: /*elided*/ any;
iterations: /*elided*/ any;
subpixelQuality: /*elided*/ any;
}>, "fxaa">;
sharpening: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
sharpness: /*elided*/ any;
denoise: /*elided*/ any;
}>, "on">;
background: PD.Normalize<{
variant: /*elided*/ any;
}>;
bloom: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
strength: /*elided*/ any;
radius: /*elided*/ any;
threshold: /*elided*/ any;
mode: /*elided*/ any;
}>, "on">;
}>>;
marking: PD.Group<PD.Normalize<{
enabled: boolean;
highlightEdgeColor: import("../mol-util/color").Color;
selectEdgeColor: import("../mol-util/color").Color;
edgeScale: number;
highlightEdgeStrength: number;
selectEdgeStrength: number;
ghostEdgeStrength: number;
innerEdgeFactor: number;
}>>;
illumination: PD.Group<PD.Normalize<{
rendersPerFrame: [number, number];
targetFps: number;
steps: number;
firstStepSize: number;
refineSteps: number;
rayDistance: number;
thicknessMode: "auto" | "fixed";
minThickness: number;
thicknessFactor: number;
thickness: number;
bounces: number;
glow: boolean;
shadowEnable: boolean;
shadowSoftness: number;
shadowThickness: number;
enabled: boolean;
maxIterations: number;
denoise: boolean;
denoiseThreshold: [number, number];
ignoreOutline: boolean;
}>>;
hiZ: PD.Group<PD.Normalize<{
enabled: boolean;
maxFrameLag: number;
minLevel: number;
}>>;
renderer: PD.Group<PD.Normalize<{
backgroundColor: import("../mol-util/color").Color;
pickingAlphaThreshold: number;
interiorDarkening: number;
interiorColorFlag: boolean;
interiorColor: import("../mol-util/color").Color;
colorMarker: boolean;
highlightColor: import("../mol-util/color").Color;
selectColor: import("../mol-util/color").Color;
dimColor: import("../mol-util/color").Color;
highlightStrength: number;
selectStrength: number;
dimStrength: number;
markerPriority: number;
xrayEdgeFalloff: number;
celSteps: number;
exposure: number;
light: PD.Normalize<{
inclination: number;
azimuth: number;
color: import("../mol-util/color").Color;
intensity: number;
}>[];
ambientColor: import("../mol-util/color").Color;
ambientIntensity: number;
}>>;
trackball: PD.Group<PD.Normalize<{
noScroll: boolean;
rotateSpeed: number;
zoomSpeed: number;
panSpeed: number;
moveSpeed: number;
boostMoveFactor: number;
flyMode: boolean;
animate: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
speed: /*elided*/ any;
}>, "spin"> | PD.NamedParams<PD.Normalize<{
speed: /*elided*/ any;
angle: /*elided*/ any;
}>, "rock">;
staticMoving: boolean;
dynamicDampingFactor: number;
minDistance: number;
maxDistance: number;
gestureScaleFactor: number;
maxWheelDelta: number;
bindings: {
dragRotate: import("../mol-util/binding").Binding;
dragRotateZ: import("../mol-util/binding").Binding;
dragPan: import("../mol-util/binding").Binding;
dragZoom: import("../mol-util/binding").Binding;
dragFocus: import("../mol-util/binding").Binding;
dragFocusZoom: import("../mol-util/binding").Binding;
scrollZoom: import("../mol-util/binding").Binding;
scrollFocus: import("../mol-util/binding").Binding;
scrollFocusZoom: import("../mol-util/binding").Binding;
keyMoveForward: import("../mol-util/binding").Binding;
keyMoveBack: import("../mol-util/binding").Binding;
keyMoveLeft: import("../mol-util/binding").Binding;
keyMoveRight: import("../mol-util/binding").Binding;
keyMoveUp: import("../mol-util/binding").Binding;
keyMoveDown: import("../mol-util/binding").Binding;
keyRollLeft: import("../mol-util/binding").Binding;
keyRollRight: import("../mol-util/binding").Binding;
keyPitchUp: import("../mol-util/binding").Binding;
keyPitchDown: import("../mol-util/binding").Binding;
keyYawLeft: import("../mol-util/binding").Binding;
keyYawRight: import("../mol-util/binding").Binding;
boostMove: import("../mol-util/binding").Binding;
enablePointerLock: import("../mol-util/binding").Binding;
};
autoAdjustMinMaxDistance: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
minDistanceFactor: /*elided*/ any;
minDistancePadding: /*elided*/ any;
maxDistanceFactor: /*elided*/ any;
maxDistanceMin: /*elided*/ any;
}>, "on">;
}>>;
interaction: PD.Group<PD.Normalize<{
maxFps: number;
preferAtomPixelPadding: number;
}>>;
debug: PD.Group<PD.Normalize<{
sceneBoundingSpheres: boolean;
visibleSceneBoundingSpheres: boolean;
objectBoundingSpheres: boolean;
instanceBoundingSpheres: boolean;
}>>;
handle: PD.Group<PD.Normalize<{
handle: PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
alpha: /*elided*/ any;
ignoreLight: /*elided*/ any;
colorX: /*elided*/ any;
colorY: /*elided*/ any;
colorZ: /*elided*/ any;
scale: /*elided*/ any;
doubleSided: /*elided*/ any;
flipSided: /*elided*/ any;
flatShaded: /*elided*/ any;
celShaded: /*elided*/ any;
xrayShaded: /*elided*/ any;
transparentBackfaces: /*elided*/ any;
bumpFrequency: /*elided*/ any;
bumpAmplitude: /*elided*/ any;
quality: /*elided*/ any;
material: /*elided*/ any;
clip: /*elided*/ any;
emissive: /*elided*/ any;
density: /*elided*/ any;
instanceGranularity: /*elided*/ any;
lod: /*elided*/ any;
cellSize: /*elided*/ any;
batchSize: /*elided*/ any;
}>, "on">;
}>>;
}>;
export type Canvas3DProps = PD.Values<typeof Canvas3DParams>;
export type PartialCanvas3DProps = {
[K in keyof Canvas3DProps]?: Canvas3DProps[K] extends {
name: string;
params: any;
} ? Canvas3DProps[K] : Partial<Canvas3DProps[K]>;
};
export { Canvas3DContext };
/** Can be used to create multiple Canvas3D objects */
interface Canvas3DContext {
readonly canvas?: HTMLCanvasElement;
readonly webgl: WebGLContext;
readonly input: InputObserver;
readonly passes: Passes;
readonly attribs: Readonly<Canvas3DContext.Attribs>;
readonly props: Readonly<Canvas3DContext.Props>;
readonly contextLost?: Subject<now.Timestamp>;
readonly contextRestored?: Subject<now.Timestamp>;
readonly assetManager: AssetManager;
readonly changed?: BehaviorSubject<undefined>;
readonly pixelScale: number;
syncPixelScale(): void;
setProps: (props?: Partial<Canvas3DContext.Props>) => void;
dispose: (options?: Partial<{
doNotForceWebGLContextLoss: boolean;
}>) => void;
}
declare namespace Canvas3DContext {
const DefaultAttribs: {
powerPreference: WebGLContextAttributes["powerPreference"];
failIfMajorPerformanceCaveat: boolean;
/** true by default to avoid issues with Safari (Jan 2021) */
antialias: boolean;
/** true to support multiple Canvas3D objects with a single context */
preserveDrawingBuffer: boolean;
preferWebGl1: boolean;
handleResize: () => void;
};
type Attribs = typeof DefaultAttribs;
const Params: {
resolutionMode: PD.Select<"auto" | "scaled" | "native">;
pixelScale: PD.Numeric;
pickScale: PD.Numeric;
transparency: PD.Select<"blended" | "wboit" | "dpoit">;
};
const DefaultProps: PD.Values<{
resolutionMode: PD.Select<"auto" | "scaled" | "native">;
pixelScale: PD.Numeric;
pickScale: PD.Numeric;
transparency: PD.Select<"blended" | "wboit" | "dpoit">;
}>;
type Props = PD.Values<typeof Params>;
function fromCanvas(canvas: HTMLCanvasElement, assetManager: AssetManager, attribs?: Partial<Attribs>, props?: Partial<Props>): Canvas3DContext;
}
export { Canvas3D };
interface Canvas3D {
readonly webgl: WebGLContext;
add(repr: Representation.Any): void;
remove(repr: Representation.Any): void;
/**
* This function must be called if animate() is not set up so that add/remove actions take place.
*/
commit(isSynchronous?: boolean): void;
/**
* Function for external "animation" control
* Calls commit.
*/
tick(t: now.Timestamp, options?: {
isSynchronous?: boolean;
manualDraw?: boolean;
updateControls?: boolean;
}): void;
update(repr?: Representation.Any, keepBoundingSphere?: boolean): void;
clear(): void;
syncVisibility(): void;
requestDraw(): void;
/** Reset the timers, used by "animate" */
resetTime(t: number): void;
animate(): void;
/**
* Pause animation loop and optionally any rendering
* @param noDraw pause any rendering (drawPaused = true)
*/
pause(noDraw?: boolean): void;
/** Sets drawPaused = false without starting the built in animation loop */
resume(): void;
identify(x: number, y: number): PickData | undefined;
mark(loci: Representation.Loci, action: MarkerAction): void;
getLoci(pickingId: PickingId | undefined): Representation.Loci;
notifyDidDraw: boolean;
readonly didDraw: BehaviorSubject<now.Timestamp>;
readonly commited: BehaviorSubject<now.Timestamp>;
readonly commitQueueSize: BehaviorSubject<number>;
readonly reprCount: BehaviorSubject<number>;
readonly resized: BehaviorSubject<any>;
handleResize(): void;
/** performs handleResize on the next animation frame */
requestResize(): void;
/** Focuses camera on scene's bounding sphere, centered and zoomed. */
requestCameraReset(options?: {
durationMs?: number;
snapshot?: Camera.SnapshotProvider;
}): void;
readonly camera: Camera;
readonly boundingSphere: Readonly<Sphere3D>;
readonly boundingSphereVisible: Readonly<Sphere3D>;
setProps(props: PartialCanvas3DProps | ((old: Canvas3DProps) => Partial<Canvas3DProps> | void), doNotRequestDraw?: boolean): void;
getImagePass(props: Partial<ImageProps>): ImagePass;
getRenderObjects(): GraphicsRenderObject[];
/** Returns a copy of the current Canvas3D instance props */
readonly props: Readonly<Canvas3DProps>;
readonly input: InputObserver;
readonly stats: RendererStats;
readonly interaction: Canvas3dInteractionHelper['events'];
dispose(): void;
}
declare namespace Canvas3D {
interface HoverEvent {
current: Representation.Loci;
buttons: ButtonsType;
button: ButtonsType.Flag;
modifiers: ModifiersKeys;
page?: Vec2;
position?: Vec3;
}
interface DragEvent {
current: Representation.Loci;
buttons: ButtonsType;
button: ButtonsType.Flag;
modifiers: ModifiersKeys;
pageStart: Vec2;
pageEnd: Vec2;
}
interface ClickEvent {
current: Representation.Loci;
buttons: ButtonsType;
button: ButtonsType.Flag;
modifiers: ModifiersKeys;
page?: Vec2;
position?: Vec3;
}
function create(ctx: Canvas3DContext, props?: Partial<Canvas3DProps>): Canvas3D;
}