/** * Copyright (c) 2018-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 { Structure, Unit } from '../../mol-model/structure.js'; import { RepresentationProps } from '../representation.js'; import { Visual, VisualContext } from '../visual.js'; import { Geometry, GeometryUtils } from '../../mol-geo/geometry/geometry.js'; import { LocationIterator } from '../../mol-geo/util/location-iterator.js'; import { Theme } from '../../mol-theme/theme.js'; import { StructureGroup } from './visual/util/common.js'; import { RenderObjectValues } from '../../mol-gl/render-object.js'; import { PickingId } from '../../mol-geo/geometry/picking.js'; import { Loci } from '../../mol-model/loci.js'; import { Interval } from '../../mol-data/int.js'; import { VisualUpdateState } from '../util.js'; import { Mesh } from '../../mol-geo/geometry/mesh/mesh.js'; import { Spheres } from '../../mol-geo/geometry/spheres/spheres.js'; import { Cylinders } from '../../mol-geo/geometry/cylinders/cylinders.js'; import { Points } from '../../mol-geo/geometry/points/points.js'; import { Lines } from '../../mol-geo/geometry/lines/lines.js'; import { Text } from '../../mol-geo/geometry/text/text.js'; import { DirectVolume } from '../../mol-geo/geometry/direct-volume/direct-volume.js'; import { TextureMesh } from '../../mol-geo/geometry/texture-mesh/texture-mesh.js'; import { Image } from '../../mol-geo/geometry/image/image.js'; import { StructureParams } from './params.js'; import { WebGLContext } from '../../mol-gl/webgl/context.js'; export interface UnitsVisual

extends Visual { } interface UnitsVisualBuilder

{ defaultProps: PD.Values

; createGeometry(ctx: VisualContext, unit: Unit, structure: Structure, theme: Theme, props: PD.Values

, geometry?: G): Promise | G; createLocationIterator(structureGroup: StructureGroup, props: PD.Values

): LocationIterator; getLoci(pickingId: PickingId, structureGroup: StructureGroup, id: number): Loci; eachLocation(loci: Loci, structureGroup: StructureGroup, apply: (interval: Interval) => boolean, isMarking: boolean): boolean; setUpdateState(state: VisualUpdateState, newProps: PD.Values

, currentProps: PD.Values

, newTheme: Theme, currentTheme: Theme, newStructureGroup: StructureGroup, currentStructureGroup: StructureGroup): void; initUpdateState?: (state: VisualUpdateState, newProps: PD.Values

, newTheme: Theme, newStructureGroup: StructureGroup) => void; mustRecreate?: (structureGroup: StructureGroup, props: PD.Values

) => boolean; processValues?: (values: RenderObjectValues, geometry: G, props: PD.Values

, theme: Theme, webgl?: WebGLContext) => void; dispose?: (geometry: G) => void; } interface UnitsVisualGeometryBuilder

extends UnitsVisualBuilder { geometryUtils: GeometryUtils; } export declare function UnitsVisual>(builder: UnitsVisualGeometryBuilder, materialId: number): UnitsVisual

; export declare const UnitsMeshParams: { unitKinds: PD.MultiSelect<"spheres" | "gaussians" | "atomic">; includeParent: 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; }; export type UnitsMeshParams = typeof UnitsMeshParams; export interface UnitsMeshVisualBuilder

extends UnitsVisualBuilder { } export declare function UnitsMeshVisual

(builder: UnitsMeshVisualBuilder

, materialId: number): UnitsVisual

; export declare const UnitsSpheresParams: { unitKinds: PD.MultiSelect<"spheres" | "gaussians" | "atomic">; includeParent: PD.BooleanParam; sizeFactor: PD.Numeric; doubleSided: PD.BooleanParam; ignoreLight: PD.BooleanParam; celShaded: PD.BooleanParam; xrayShaded: PD.Select; transparentBackfaces: PD.Select<"off" | "on" | "opaque">; solidInterior: PD.BooleanParam; clipPrimitive: PD.BooleanParam; approximate: PD.BooleanParam; alphaThickness: PD.Numeric; bumpFrequency: PD.Numeric; bumpAmplitude: PD.Numeric; interior: PD.Group; substanceStrength: number; }>>; lodLevels: PD.ObjectList>; 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 UnitsSpheresParams = typeof UnitsSpheresParams; export interface UnitsSpheresVisualBuilder

extends UnitsVisualBuilder { } export declare function UnitsSpheresVisual

(builder: UnitsSpheresVisualBuilder

, materialId: number): UnitsVisual

; export declare const UnitsCylindersParams: { unitKinds: PD.MultiSelect<"spheres" | "gaussians" | "atomic">; includeParent: PD.BooleanParam; sizeFactor: PD.Numeric; sizeAspectRatio: PD.Numeric; doubleSided: PD.BooleanParam; ignoreLight: PD.BooleanParam; celShaded: PD.BooleanParam; xrayShaded: PD.Select; transparentBackfaces: PD.Select<"off" | "on" | "opaque">; solidInterior: PD.BooleanParam; bumpFrequency: PD.Numeric; bumpAmplitude: PD.Numeric; interior: PD.Group; substanceStrength: number; }>>; colorMode: PD.Select<"default" | "interpolate">; 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 UnitsCylindersParams = typeof UnitsCylindersParams; export interface UnitsCylindersVisualBuilder

extends UnitsVisualBuilder { } export declare function UnitsCylindersVisual

(builder: UnitsCylindersVisualBuilder

, materialId: number): UnitsVisual

; export declare const UnitsPointsParams: { unitKinds: PD.MultiSelect<"spheres" | "gaussians" | "atomic">; includeParent: 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 UnitsPointsParams = typeof UnitsPointsParams; export interface UnitsPointVisualBuilder

extends UnitsVisualBuilder { } export declare function UnitsPointsVisual

(builder: UnitsPointVisualBuilder

, materialId: number): UnitsVisual

; export declare const UnitsLinesParams: { unitKinds: PD.MultiSelect<"spheres" | "gaussians" | "atomic">; includeParent: PD.BooleanParam; sizeFactor: PD.Numeric; lineSizeAttenuation: PD.BooleanParam; 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 UnitsLinesParams = typeof UnitsLinesParams; export interface UnitsLinesVisualBuilder

extends UnitsVisualBuilder { } export declare function UnitsLinesVisual

(builder: UnitsLinesVisualBuilder

, materialId: number): UnitsVisual

; export declare const UnitsTextParams: { unitKinds: PD.MultiSelect<"spheres" | "gaussians" | "atomic">; includeParent: PD.BooleanParam; sizeFactor: PD.Numeric; borderWidth: PD.Numeric; borderColor: PD.Color; offsetX: PD.Numeric; offsetY: PD.Numeric; offsetZ: PD.Numeric; background: PD.BooleanParam; backgroundMargin: PD.Numeric; backgroundColor: PD.Color; backgroundOpacity: PD.Numeric; tether: PD.BooleanParam; tetherLength: PD.Numeric; tetherBaseWidth: PD.Numeric; attachment: PD.Select<"bottom-left" | "bottom-center" | "bottom-right" | "middle-left" | "middle-center" | "middle-right" | "top-left" | "top-center" | "top-right">; fontFamily: PD.Select; fontQuality: PD.Select; fontStyle: PD.Select; fontVariant: PD.Select; fontWeight: PD.Select; 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 UnitsTextParams = typeof UnitsTextParams; export interface UnitsTextVisualBuilder

extends UnitsVisualBuilder { } export declare function UnitsTextVisual

(builder: UnitsTextVisualBuilder

, materialId: number): UnitsVisual

; export declare const UnitsDirectVolumeParams: { unitKinds: PD.MultiSelect<"spheres" | "gaussians" | "atomic">; includeParent: PD.BooleanParam; ignoreLight: PD.BooleanParam; celShaded: PD.BooleanParam; xrayShaded: PD.Select; controlPoints: PD.LineGraph; stepsPerCell: PD.Numeric; jumpLength: PD.Numeric; 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 UnitsDirectVolumeParams = typeof UnitsDirectVolumeParams; export interface UnitsDirectVolumeVisualBuilder

extends UnitsVisualBuilder { } export declare function UnitsDirectVolumeVisual

(builder: UnitsDirectVolumeVisualBuilder

, materialId: number): UnitsVisual

; export declare const UnitsTextureMeshParams: { unitKinds: PD.MultiSelect<"spheres" | "gaussians" | "atomic">; includeParent: 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; }; export type UnitsTextureMeshParams = typeof UnitsTextureMeshParams; export interface UnitsTextureMeshVisualBuilder

extends UnitsVisualBuilder { } export declare function UnitsTextureMeshVisual

(builder: UnitsTextureMeshVisualBuilder

, materialId: number): UnitsVisual

; export declare const UnitsImageParams: { unitKinds: PD.MultiSelect<"spheres" | "gaussians" | "atomic">; includeParent: PD.BooleanParam; interpolation: PD.Select<"nearest" | "catmulrom" | "mitchell" | "bspline">; 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 UnitsImageParams = typeof UnitsImageParams; export interface UnitsImageVisualBuilder

extends UnitsVisualBuilder { } export declare function UnitsImageVisual

(builder: UnitsImageVisualBuilder

, materialId: number): UnitsVisual

; export {};