/** * Copyright (c) 2025-2026 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose * @author Gianluca Tomasello */ import { ParamDefinition as PD } from '../../mol-util/param-definition.js'; import { Volume } from '../../mol-model/volume.js'; import { VisualContext } from '../visual.js'; import { Theme, ThemeRegistryContext } from '../../mol-theme/theme.js'; import { Mesh } from '../../mol-geo/geometry/mesh/mesh.js'; import { VolumeRepresentation, VolumeRepresentationProvider } from './representation.js'; import { RepresentationContext, RepresentationParamsGetter } from '../representation.js'; import { WebGLContext } from '../../mol-gl/webgl/context.js'; import { Spheres } from '../../mol-geo/geometry/spheres/spheres.js'; import { Points } from '../../mol-geo/geometry/points/points.js'; import { VolumeVisual } from './visual.js'; export declare const VolumeDotParams: { isoValue: PD.Conditioned | Readonly<{ kind: "relative"; relativeValue: number; }>, PD.Base | Readonly<{ kind: "relative"; relativeValue: number; }>>, { absolute: PD.Converted, number>; relative: PD.Converted, number>; }>; perturbPositions: PD.BooleanParam; }; export type VolumeDotParams = typeof VolumeDotParams; export type VolumeDotProps = PD.Values; export declare const VolumeSphereParams: { tryUseImpostor: PD.BooleanParam; detail: PD.Numeric; isoValue: PD.Conditioned | Readonly<{ kind: "relative"; relativeValue: number; }>, PD.Base | Readonly<{ kind: "relative"; relativeValue: number; }>>, { absolute: PD.Converted, number>; relative: PD.Converted, number>; }>; perturbPositions: PD.BooleanParam; doubleSided: PD.BooleanParam; flipSided: PD.BooleanParam; flatShaded: PD.BooleanParam; ignoreLight: PD.BooleanParam; celShaded: PD.BooleanParam; xrayShaded: PD.Select; transparentBackfaces: PD.Select<"off" | "on" | "opaque">; bumpFrequency: PD.Numeric; bumpAmplitude: PD.Numeric; interior: PD.Group; substanceStrength: number; }>>; alpha: PD.Numeric; quality: PD.Select<"auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest">; material: PD.Group>; clip: PD.Group[]; }>>; emissive: PD.Numeric; density: PD.Numeric; instanceGranularity: PD.BooleanParam; lod: PD.Vec3; cellSize: PD.Numeric; batchSize: PD.Numeric; sizeFactor: PD.Numeric; solidInterior: PD.BooleanParam; clipPrimitive: PD.BooleanParam; approximate: PD.BooleanParam; alphaThickness: PD.Numeric; lodLevels: PD.ObjectList>; }; export type VolumeSphereParams = typeof VolumeSphereParams; export type VolumeSphereProps = PD.Values; export declare function VolumeSphereVisual(materialId: number, volume: Volume, key: number, props: PD.Values, webgl?: WebGLContext): VolumeVisual<{ tryUseImpostor: PD.BooleanParam; detail: PD.Numeric; isoValue: PD.Conditioned | Readonly<{ kind: "relative"; relativeValue: number; }>, PD.Base | Readonly<{ kind: "relative"; relativeValue: number; }>>, { absolute: PD.Converted, number>; relative: PD.Converted, number>; }>; perturbPositions: PD.BooleanParam; doubleSided: PD.BooleanParam; flipSided: PD.BooleanParam; flatShaded: PD.BooleanParam; ignoreLight: PD.BooleanParam; celShaded: PD.BooleanParam; xrayShaded: PD.Select; transparentBackfaces: PD.Select<"off" | "on" | "opaque">; bumpFrequency: PD.Numeric; bumpAmplitude: PD.Numeric; interior: PD.Group; substanceStrength: number; }>>; alpha: PD.Numeric; quality: PD.Select<"auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest">; material: PD.Group>; clip: PD.Group[]; }>>; emissive: PD.Numeric; density: PD.Numeric; instanceGranularity: PD.BooleanParam; lod: PD.Vec3; cellSize: PD.Numeric; batchSize: PD.Numeric; sizeFactor: PD.Numeric; solidInterior: PD.BooleanParam; clipPrimitive: PD.BooleanParam; approximate: PD.BooleanParam; alphaThickness: PD.Numeric; lodLevels: PD.ObjectList>; }>; export declare function VolumeSphereImpostorVisual(materialId: number): VolumeVisual; export declare function VolumeSphereMeshVisual(materialId: number): VolumeVisual; export declare function createVolumeSphereImpostor(ctx: VisualContext, volume: Volume, key: number, theme: Theme, props: VolumeSphereProps, spheres?: Spheres): Spheres; export declare function createVolumeSphereMesh(ctx: VisualContext, volume: Volume, key: number, theme: Theme, props: VolumeSphereProps, mesh?: Mesh): Mesh; export declare const VolumePointParams: { isoValue: PD.Conditioned | Readonly<{ kind: "relative"; relativeValue: number; }>, PD.Base | Readonly<{ kind: "relative"; relativeValue: number; }>>, { absolute: PD.Converted, number>; relative: PD.Converted, number>; }>; perturbPositions: PD.BooleanParam; sizeFactor: PD.Numeric; pointSizeAttenuation: PD.BooleanParam; pointStyle: PD.Select<"square" | "circle" | "fuzzy">; alpha: PD.Numeric; quality: PD.Select<"auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest">; material: PD.Group>; clip: PD.Group[]; }>>; emissive: PD.Numeric; density: PD.Numeric; instanceGranularity: PD.BooleanParam; lod: PD.Vec3; cellSize: PD.Numeric; batchSize: PD.Numeric; }; export type VolumePointParams = typeof VolumePointParams; export type VolumePointProps = PD.Values; export declare function VolumePointVisual(materialId: number): VolumeVisual; export declare function createVolumePoint(ctx: VisualContext, volume: Volume, key: number, theme: Theme, props: VolumePointProps, points?: Points): Points; export declare const DotParams: { visuals: PD.MultiSelect<"sphere" | "point">; bumpFrequency: PD.Numeric; isoValue: PD.Conditioned | Readonly<{ kind: "relative"; relativeValue: number; }>, PD.Base | Readonly<{ kind: "relative"; relativeValue: number; }>>, { absolute: PD.Converted, number>; relative: PD.Converted, number>; }>; perturbPositions: PD.BooleanParam; sizeFactor: PD.Numeric; pointSizeAttenuation: PD.BooleanParam; pointStyle: PD.Select<"square" | "circle" | "fuzzy">; alpha: PD.Numeric; quality: PD.Select<"auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest">; material: PD.Group>; clip: PD.Group[]; }>>; emissive: PD.Numeric; density: PD.Numeric; instanceGranularity: PD.BooleanParam; lod: PD.Vec3; cellSize: PD.Numeric; batchSize: PD.Numeric; tryUseImpostor: PD.BooleanParam; detail: PD.Numeric; doubleSided: PD.BooleanParam; flipSided: PD.BooleanParam; flatShaded: PD.BooleanParam; ignoreLight: PD.BooleanParam; celShaded: PD.BooleanParam; xrayShaded: PD.Select; transparentBackfaces: PD.Select<"off" | "on" | "opaque">; bumpAmplitude: PD.Numeric; interior: PD.Group; substanceStrength: number; }>>; solidInterior: PD.BooleanParam; clipPrimitive: PD.BooleanParam; approximate: PD.BooleanParam; alphaThickness: PD.Numeric; lodLevels: PD.ObjectList>; }; export type DotParams = typeof DotParams; export declare function getDotParams(ctx: ThemeRegistryContext, volume: Volume): { visuals: PD.MultiSelect<"sphere" | "point">; bumpFrequency: PD.Numeric; isoValue: PD.Conditioned | Readonly<{ kind: "relative"; relativeValue: number; }>, PD.Base | Readonly<{ kind: "relative"; relativeValue: number; }>>, { absolute: PD.Converted, number>; relative: PD.Converted, number>; }>; perturbPositions: PD.BooleanParam; sizeFactor: PD.Numeric; pointSizeAttenuation: PD.BooleanParam; pointStyle: PD.Select<"square" | "circle" | "fuzzy">; alpha: PD.Numeric; quality: PD.Select<"auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest">; material: PD.Group>; clip: PD.Group[]; }>>; emissive: PD.Numeric; density: PD.Numeric; instanceGranularity: PD.BooleanParam; lod: PD.Vec3; cellSize: PD.Numeric; batchSize: PD.Numeric; tryUseImpostor: PD.BooleanParam; detail: PD.Numeric; doubleSided: PD.BooleanParam; flipSided: PD.BooleanParam; flatShaded: PD.BooleanParam; ignoreLight: PD.BooleanParam; celShaded: PD.BooleanParam; xrayShaded: PD.Select; transparentBackfaces: PD.Select<"off" | "on" | "opaque">; bumpAmplitude: PD.Numeric; interior: PD.Group; substanceStrength: number; }>>; solidInterior: PD.BooleanParam; clipPrimitive: PD.BooleanParam; approximate: PD.BooleanParam; alphaThickness: PD.Numeric; lodLevels: PD.ObjectList>; }; export type DotRepresentation = VolumeRepresentation; export declare function DotRepresentation(ctx: RepresentationContext, getParams: RepresentationParamsGetter): DotRepresentation; export declare const DotRepresentationProvider: VolumeRepresentationProvider<{ visuals: PD.MultiSelect<"sphere" | "point">; bumpFrequency: PD.Numeric; isoValue: PD.Conditioned | Readonly<{ kind: "relative"; relativeValue: number; }>, PD.Base | Readonly<{ kind: "relative"; relativeValue: number; }>>, { absolute: PD.Converted, number>; relative: PD.Converted, number>; }>; perturbPositions: PD.BooleanParam; sizeFactor: PD.Numeric; pointSizeAttenuation: PD.BooleanParam; pointStyle: PD.Select<"square" | "circle" | "fuzzy">; alpha: PD.Numeric; quality: PD.Select<"auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest">; material: PD.Group>; clip: PD.Group[]; }>>; emissive: PD.Numeric; density: PD.Numeric; instanceGranularity: PD.BooleanParam; lod: PD.Vec3; cellSize: PD.Numeric; batchSize: PD.Numeric; tryUseImpostor: PD.BooleanParam; detail: PD.Numeric; doubleSided: PD.BooleanParam; flipSided: PD.BooleanParam; flatShaded: PD.BooleanParam; ignoreLight: PD.BooleanParam; celShaded: PD.BooleanParam; xrayShaded: PD.Select; transparentBackfaces: PD.Select<"off" | "on" | "opaque">; bumpAmplitude: PD.Numeric; interior: PD.Group; substanceStrength: number; }>>; solidInterior: PD.BooleanParam; clipPrimitive: PD.BooleanParam; approximate: PD.BooleanParam; alphaThickness: PD.Numeric; lodLevels: PD.ObjectList>; }, "dot">;