diff --git a/src/mol-repr/structure/registry.ts b/src/mol-repr/structure/registry.ts index 188c0d959249678a066241a5e1d864f88e31b45d..912e353e891d28f2753a6b135040b10454bf99a7 100644 --- a/src/mol-repr/structure/registry.ts +++ b/src/mol-repr/structure/registry.ts @@ -8,6 +8,7 @@ import { Structure } from 'mol-model/structure'; import { RepresentationProvider, RepresentationRegistry } from '../representation'; import { CartoonRepresentationProvider } from './representation/cartoon'; import { BallAndStickRepresentationProvider } from './representation/ball-and-stick'; +import { MolecularSurfaceRepresentationProvider } from './representation/molecular-surface'; export class StructureRepresentationRegistry extends RepresentationRegistry<Structure> { constructor() { @@ -22,6 +23,7 @@ export class StructureRepresentationRegistry extends RepresentationRegistry<Stru export const BuiltInStructureRepresentations = { 'cartoon': CartoonRepresentationProvider, 'ball-and-stick': BallAndStickRepresentationProvider, + 'molecular-surface': MolecularSurfaceRepresentationProvider, } export type BuiltInStructureRepresentationsName = keyof typeof BuiltInStructureRepresentations export const BuiltInStructureRepresentationsNames = Object.keys(BuiltInStructureRepresentations) diff --git a/src/mol-repr/structure/representation/molecular-surface.ts b/src/mol-repr/structure/representation/molecular-surface.ts index b55aa5faedede552c07c3d9aa8aa7e0a671fb2a7..cdf89b914e547ee033b46552881bc8d4383440ca 100644 --- a/src/mol-repr/structure/representation/molecular-surface.ts +++ b/src/mol-repr/structure/representation/molecular-surface.ts @@ -1,18 +1,55 @@ -// /** -// * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. -// * -// * @author Alexander Rose <alexander.rose@weirdbyte.de> -// */ - -// import { GaussianSurfaceVisual, GaussianSurfaceParams } from '../visual/gaussian-surface-mesh'; -// import { UnitsRepresentation } from '../units-representation'; -// import { GaussianWireframeVisual, GaussianWireframeParams } from '../visual/gaussian-surface-wireframe'; -// import { ParamDefinition as PD } from 'mol-util/param-definition'; -// import { GaussianDensityVolumeParams, GaussianDensityVolumeVisual } from '../visual/gaussian-density-volume'; -// import { StructureRepresentation } from '../representation'; -// import { Representation } from 'mol-repr/representation'; -// import { ThemeRegistryContext } from 'mol-theme/theme'; -// import { Structure } from 'mol-model/structure'; +/** + * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. + * + * @author Alexander Rose <alexander.rose@weirdbyte.de> + */ + +import { GaussianSurfaceVisual, GaussianSurfaceParams } from '../visual/gaussian-surface-mesh'; +import { UnitsRepresentation } from '../units-representation'; +import { GaussianWireframeVisual, GaussianWireframeParams } from '../visual/gaussian-surface-wireframe'; +import { ParamDefinition as PD } from 'mol-util/param-definition'; +import { GaussianDensityVolumeParams, GaussianDensityVolumeVisual } from '../visual/gaussian-density-volume'; +import { StructureRepresentation, StructureRepresentationProvider } from '../representation'; +import { Representation, RepresentationParamsGetter } from 'mol-repr/representation'; +import { ThemeRegistryContext } from 'mol-theme/theme'; +import { Structure } from 'mol-model/structure'; +import { BuiltInColorThemeOptions, getBuiltInColorThemeParams } from 'mol-theme/color'; + +const MolecularSurfaceVisuals = { + 'gaussian-surface': (getParams: RepresentationParamsGetter<Structure, GaussianSurfaceParams>) => UnitsRepresentation('Gaussian surface', getParams, GaussianSurfaceVisual), + 'gaussian-wireframe': (getParams: RepresentationParamsGetter<Structure, GaussianWireframeParams>) => UnitsRepresentation('Gaussian wireframe', getParams, GaussianWireframeVisual), + 'gaussian-volume': (getParams: RepresentationParamsGetter<Structure, GaussianDensityVolumeParams>) => UnitsRepresentation('Gaussian volume', getParams, GaussianDensityVolumeVisual) +} +type MolecularSurfaceVisualName = keyof typeof MolecularSurfaceVisuals +const MolecularSurfaceVisualOptions = Object.keys(MolecularSurfaceVisuals).map(name => [name, name] as [MolecularSurfaceVisualName, string]) + +export const MolecularSurfaceParams = { + ...GaussianSurfaceParams, + ...GaussianWireframeParams, + ...GaussianDensityVolumeParams, + colorTheme: PD.Mapped('polymer-index', BuiltInColorThemeOptions, getBuiltInColorThemeParams), + visuals: PD.MultiSelect<MolecularSurfaceVisualName>(['gaussian-surface'], MolecularSurfaceVisualOptions), +} +PD.getDefaultValues(MolecularSurfaceParams).colorTheme.name +export type MolecularSurfaceParams = typeof MolecularSurfaceParams +export function getMolecularSurfaceParams(ctx: ThemeRegistryContext, structure: Structure) { + return PD.clone(MolecularSurfaceParams) +} + +export type MolecularSurfaceRepresentation = StructureRepresentation<MolecularSurfaceParams> +export function MolecularSurfaceRepresentation(getParams: RepresentationParamsGetter<Structure, MolecularSurfaceParams>): MolecularSurfaceRepresentation { + return Representation.createMulti('Molecular Surface', getParams, MolecularSurfaceVisuals as unknown as Representation.Def<Structure, MolecularSurfaceParams>) +} + +export const MolecularSurfaceRepresentationProvider: StructureRepresentationProvider<MolecularSurfaceParams> = { + label: 'Molecular Surface', + description: 'Displays a gaussian molecular surface.', + factory: MolecularSurfaceRepresentation, + getParams: getMolecularSurfaceParams, + defaultValues: PD.getDefaultValues(MolecularSurfaceParams) +} + + // export const MolecularSurfaceParams = { // ...GaussianSurfaceParams,