import { Vector3, Object3D, Euler, DepthTexture, OrthographicCamera, PerspectiveCamera, WebGLRenderer, Texture } from "three"; import { Pane } from "tweakpane"; import Volume from "./Volume.js"; import type { VolumeDisplayOptions, VolumeChannelDisplayOptions } from "./types.js"; import { RenderMode } from "./types.js"; import { Light } from "./Light.js"; import Channel from "./Channel.js"; import { Axis } from "./VolumeRenderSettings.js"; type ColorArray = [number, number, number]; type ColorObject = { r: number; g: number; b: number; }; export type WithObjectColors> = { [K in keyof T]: T[K] extends ColorArray | undefined ? ColorObject : T[K]; }; export declare const colorArrayToObject: ([r, g, b]: ColorArray) => ColorObject; export declare const colorObjectToArray: ({ r, g, b }: ColorObject) => ColorArray; export default class VolumeDrawable { volume: Volume; private settings; private onChannelDataReadyCallback?; private viewMode; private channelColors; private channelOptions; private fusion; sceneRoot: Object3D; private meshVolume; private volumeRendering; private renderMode; private renderUpdateListener?; constructor(volume: Volume, options: VolumeDisplayOptions); /** * Updates whether a channel's data must be loaded for rendering, * based on if its volume or isosurface is enabled, or whether it is needed for masking. * Calls `Volume.updateRequiredData` to update the list of required channels if necessary. */ private updateChannelDataRequired; setOptions(options: VolumeDisplayOptions): void; setChannelOptions(channelIndex: number, options: VolumeChannelDisplayOptions): void; setRayStepSizes(primary?: number, secondary?: number): void; updateScale(): void; setOrthoScale(value: number): void; setResolution(x: number, y: number): void; setAxisClip(axis: Axis, minval: number, maxval: number, isOrthoAxis?: boolean): void; private modeStringToAxis; /** * Sets the camera mode of the VolumeDrawable. * @param mode Mode can be "3D", or "XY" or "Z", or "YZ" or "X", or "XZ" or "Y". */ setViewMode(mode: string, volumeRenderModeHint: RenderMode.PATHTRACE | RenderMode.RAYMARCH): void; setIsOrtho(isOrtho: boolean): void; setInterpolationEnabled(active: boolean): void; setOrthoThickness(value: number): void; setGamma(gmin: number, glevel: number, gmax: number): void; setFlipAxes(flipX: -1 | 1, flipY: -1 | 1, flipZ: -1 | 1): void; setMaxProjectMode(isMaxProject: boolean): void; onAnimate(renderer: WebGLRenderer, camera: PerspectiveCamera | OrthographicCamera, depthTexture?: DepthTexture | Texture): void; getViewMode(): Axis; getIsovalue(channel: number): number | undefined; hasIsosurface(channel: number): boolean; fuse(): void; setRenderUpdateListener(callback?: (iteration: number) => void): void; updateShadingMethod(isbrdf: boolean): void; updateMaterial(): void; updateLuts(): void; setVoxelSize(values: Vector3): void; cleanup(): void; getChannel(channelIndex: number): Channel; onChannelLoaded(batch: number[]): void; onChannelAdded(newChannelIndex: number): void; saveChannelIsosurface(channelIndex: number, type: string): void; setVolumeChannelEnabled(channelIndex: number, enabled: boolean): void; isVolumeChannelEnabled(channelIndex: number): boolean; updateChannelColor(channelIndex: number, colorrgb: [number, number, number]): void; updateMeshColors(): void; getChannelColor(channelIndex: number): [number, number, number]; updateChannelMaterial(channelIndex: number, colorrgb: [number, number, number], specularrgb: [number, number, number], emissivergb: [number, number, number], glossiness: number): void; setDensity(density: number): void; /** * Get the global density of the volume data */ getDensity(): number; setBrightness(brightness: number): void; getBrightness(): number; setChannelAsMask(channelIndex: number): void; setMaskAlpha(maskAlpha: number): void; setShowBoundingBox(showBoundingBox: boolean): void; setBoundingBoxColor(color: [number, number, number]): void; getIntensity(c: number, x: number, y: number, z: number): number; onStartControls(): void; onChangeControls(): void; onEndControls(): void; onResetCamera(): void; onCameraChanged(fov: number, focalDistance: number, apertureSize: number): void; updateClipRegion(xmin: number, xmax: number, ymin: number, ymax: number, zmin: number, zmax: number): void; updateLights(state: Light[]): void; setPixelSamplingRate(value: number): void; setVolumeRendering(newRenderMode: RenderMode): void; setTranslation(xyz: Vector3): void; setRotation(eulerXYZ: Euler): void; setScale(xyz: Vector3): void; setupGui(pane: Pane): void; setZSlice(slice: number): boolean; get showBoundingBox(): boolean; } export {};