diff --git a/src/mol-repr/structure/registry.ts b/src/mol-repr/structure/registry.ts index 5cadc109a7933a576c8e291c75c97d052765a476..a9f9d8c8681c4286120755ccfdb681c451c91d3c 100644 --- a/src/mol-repr/structure/registry.ts +++ b/src/mol-repr/structure/registry.ts @@ -8,8 +8,8 @@ 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'; -import { MolecularVolumeRepresentationProvider } from './representation/molecular-volume'; +import { GaussianSurfaceRepresentationProvider } from './representation/gaussian-surface'; +import { GaussianVolumeRepresentationProvider } from './representation/gaussian-volume'; import { CarbohydrateRepresentationProvider } from './representation/carbohydrate'; import { SpacefillRepresentationProvider } from './representation/spacefill'; import { DistanceRestraintRepresentationProvider } from './representation/distance-restraint'; @@ -32,8 +32,8 @@ export const BuiltInStructureRepresentations = { 'ball-and-stick': BallAndStickRepresentationProvider, 'carbohydrate': CarbohydrateRepresentationProvider, 'distance-restraint': DistanceRestraintRepresentationProvider, - 'molecular-surface': MolecularSurfaceRepresentationProvider, - 'molecular-volume': MolecularVolumeRepresentationProvider, + 'gaussian-surface': GaussianSurfaceRepresentationProvider, + 'gaussian-volume': GaussianVolumeRepresentationProvider, 'point': PointRepresentationProvider, 'putty': PuttyRepresentationProvider, 'spacefill': SpacefillRepresentationProvider, diff --git a/src/mol-repr/structure/representation/gaussian-surface.ts b/src/mol-repr/structure/representation/gaussian-surface.ts new file mode 100644 index 0000000000000000000000000000000000000000..1e1e748f9fb67134062c9ac9200f9000f7f77662 --- /dev/null +++ b/src/mol-repr/structure/representation/gaussian-surface.ts @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info. + * + * @author Alexander Rose <alexander.rose@weirdbyte.de> + */ + +import { GaussianSurfaceMeshVisual, GaussianSurfaceTextureMeshVisual, GaussianSurfaceMeshParams } 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 { StructureRepresentation, StructureRepresentationProvider, StructureRepresentationStateBuilder } from '../representation'; +import { Representation, RepresentationParamsGetter, RepresentationContext } from 'mol-repr/representation'; +import { ThemeRegistryContext } from 'mol-theme/theme'; +import { Structure } from 'mol-model/structure'; + +const GaussianSurfaceVisuals = { + 'gaussian-surface-mesh': (ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, GaussianSurfaceMeshParams>) => UnitsRepresentation('Gaussian surface', ctx, getParams, GaussianSurfaceMeshVisual), + 'gaussian-surface-texture-mesh': (ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, GaussianSurfaceMeshParams>) => UnitsRepresentation('Gaussian surface', ctx, getParams, GaussianSurfaceTextureMeshVisual), + 'gaussian-wireframe': (ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, GaussianWireframeParams>) => UnitsRepresentation('Gaussian wireframe', ctx, getParams, GaussianWireframeVisual), +} +type GaussianSurfaceVisualName = keyof typeof GaussianSurfaceVisuals +const GaussianSurfaceVisualOptions = Object.keys(GaussianSurfaceVisuals).map(name => [name, name] as [GaussianSurfaceVisualName, string]) + +export const GaussianSurfaceParams = { + ...GaussianSurfaceMeshParams, + ...GaussianWireframeParams, + visuals: PD.MultiSelect<GaussianSurfaceVisualName>(['gaussian-surface-mesh'], GaussianSurfaceVisualOptions), +} +export type GaussianSurfaceParams = typeof GaussianSurfaceParams +export function getGaussianSurfaceParams(ctx: ThemeRegistryContext, structure: Structure) { + return PD.clone(GaussianSurfaceParams) +} + +export type GaussianSurfaceRepresentation = StructureRepresentation<GaussianSurfaceParams> +export function GaussianSurfaceRepresentation(ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, GaussianSurfaceParams>): GaussianSurfaceRepresentation { + return Representation.createMulti('Gaussian Surface', ctx, getParams, StructureRepresentationStateBuilder, GaussianSurfaceVisuals as unknown as Representation.Def<Structure, GaussianSurfaceParams>) +} + +export const GaussianSurfaceRepresentationProvider: StructureRepresentationProvider<GaussianSurfaceParams> = { + label: 'Gaussian Surface', + description: 'Displays a gaussian molecular surface.', + factory: GaussianSurfaceRepresentation, + getParams: getGaussianSurfaceParams, + defaultValues: PD.getDefaultValues(GaussianSurfaceParams), + defaultColorTheme: 'polymer-id', + defaultSizeTheme: 'uniform' +} \ No newline at end of file diff --git a/src/mol-repr/structure/representation/molecular-volume.ts b/src/mol-repr/structure/representation/gaussian-volume.ts similarity index 52% rename from src/mol-repr/structure/representation/molecular-volume.ts rename to src/mol-repr/structure/representation/gaussian-volume.ts index 4bf0a0141629d5912bd6cf5de50e001a4ed3a0da..df1e99b19484849f29fd78ae690f0600f17ce96c 100644 --- a/src/mol-repr/structure/representation/molecular-volume.ts +++ b/src/mol-repr/structure/representation/gaussian-volume.ts @@ -11,29 +11,29 @@ import { Representation, RepresentationParamsGetter, RepresentationContext } fro import { ThemeRegistryContext } from 'mol-theme/theme'; import { Structure } from 'mol-model/structure'; -const MolecularVolumeVisuals = { +const GaussianVolumeVisuals = { 'gaussian-volume': (ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, GaussianDensityVolumeParams>) => ComplexRepresentation('Gaussian volume', ctx, getParams, GaussianDensityVolumeVisual) } -export const MolecularVolumeParams = { +export const GaussianVolumeParams = { ...GaussianDensityVolumeParams, } -export type MolecularVolumeParams = typeof MolecularVolumeParams -export function getMolecularVolumeParams(ctx: ThemeRegistryContext, structure: Structure) { - return PD.clone(MolecularVolumeParams) +export type GaussianVolumeParams = typeof GaussianVolumeParams +export function getGaussianVolumeParams(ctx: ThemeRegistryContext, structure: Structure) { + return PD.clone(GaussianVolumeParams) } -export type MolecularVolumeRepresentation = StructureRepresentation<MolecularVolumeParams> -export function MolecularVolumeRepresentation(ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, MolecularVolumeParams>): MolecularVolumeRepresentation { - return Representation.createMulti('Molecular Volume', ctx, getParams, StructureRepresentationStateBuilder, MolecularVolumeVisuals as unknown as Representation.Def<Structure, MolecularVolumeParams>) +export type GaussianVolumeRepresentation = StructureRepresentation<GaussianVolumeParams> +export function GaussianVolumeRepresentation(ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, GaussianVolumeParams>): GaussianVolumeRepresentation { + return Representation.createMulti('Gaussian Volume', ctx, getParams, StructureRepresentationStateBuilder, GaussianVolumeVisuals as unknown as Representation.Def<Structure, GaussianVolumeParams>) } -export const MolecularVolumeRepresentationProvider: StructureRepresentationProvider<MolecularVolumeParams> = { - label: 'Molecular Volume', +export const GaussianVolumeRepresentationProvider: StructureRepresentationProvider<GaussianVolumeParams> = { + label: 'Gaussian Volume', description: 'Displays a gaussian molecular density using direct volume rendering.', - factory: MolecularVolumeRepresentation, - getParams: getMolecularVolumeParams, - defaultValues: PD.getDefaultValues(MolecularVolumeParams), + factory: GaussianVolumeRepresentation, + getParams: getGaussianVolumeParams, + defaultValues: PD.getDefaultValues(GaussianVolumeParams), defaultColorTheme: 'polymer-id', defaultSizeTheme: 'uniform' } \ No newline at end of file diff --git a/src/mol-repr/structure/representation/molecular-surface.ts b/src/mol-repr/structure/representation/molecular-surface.ts deleted file mode 100644 index b3c5c7915df2ef01857af61ebef6b6a50e9bf2c4..0000000000000000000000000000000000000000 --- a/src/mol-repr/structure/representation/molecular-surface.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info. - * - * @author Alexander Rose <alexander.rose@weirdbyte.de> - */ - -import { GaussianSurfaceMeshVisual, GaussianSurfaceTextureMeshVisual, 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 { StructureRepresentation, StructureRepresentationProvider, StructureRepresentationStateBuilder } from '../representation'; -import { Representation, RepresentationParamsGetter, RepresentationContext } from 'mol-repr/representation'; -import { ThemeRegistryContext } from 'mol-theme/theme'; -import { Structure } from 'mol-model/structure'; - -const MolecularSurfaceVisuals = { - 'gaussian-surface-mesh': (ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, GaussianSurfaceParams>) => UnitsRepresentation('Gaussian surface', ctx, getParams, GaussianSurfaceMeshVisual), - 'gaussian-surface-texture-mesh': (ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, GaussianSurfaceParams>) => UnitsRepresentation('Gaussian surface', ctx, getParams, GaussianSurfaceTextureMeshVisual), - 'gaussian-wireframe': (ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, GaussianWireframeParams>) => UnitsRepresentation('Gaussian wireframe', ctx, getParams, GaussianWireframeVisual), -} -type MolecularSurfaceVisualName = keyof typeof MolecularSurfaceVisuals -const MolecularSurfaceVisualOptions = Object.keys(MolecularSurfaceVisuals).map(name => [name, name] as [MolecularSurfaceVisualName, string]) - -export const MolecularSurfaceParams = { - ...GaussianSurfaceParams, - ...GaussianWireframeParams, - visuals: PD.MultiSelect<MolecularSurfaceVisualName>(['gaussian-surface-mesh'], MolecularSurfaceVisualOptions), -} -export type MolecularSurfaceParams = typeof MolecularSurfaceParams -export function getMolecularSurfaceParams(ctx: ThemeRegistryContext, structure: Structure) { - return PD.clone(MolecularSurfaceParams) -} - -export type MolecularSurfaceRepresentation = StructureRepresentation<MolecularSurfaceParams> -export function MolecularSurfaceRepresentation(ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, MolecularSurfaceParams>): MolecularSurfaceRepresentation { - return Representation.createMulti('Molecular Surface', ctx, getParams, StructureRepresentationStateBuilder, 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), - defaultColorTheme: 'polymer-id', - defaultSizeTheme: 'uniform' -} \ No newline at end of file diff --git a/src/mol-repr/structure/visual/gaussian-surface-mesh.ts b/src/mol-repr/structure/visual/gaussian-surface-mesh.ts index 101dc091de369146e337b5543916f68aebce3bf2..a538309b830c33b9806f3b58d3a80ee94906330d 100644 --- a/src/mol-repr/structure/visual/gaussian-surface-mesh.ts +++ b/src/mol-repr/structure/visual/gaussian-surface-mesh.ts @@ -22,12 +22,12 @@ import { createHistogramPyramid } from 'mol-gl/compute/histogram-pyramid/reducti import { createIsosurfaceBuffers } from 'mol-gl/compute/marching-cubes/isosurface'; import { Sphere3D } from 'mol-math/geometry'; -export const GaussianSurfaceParams = { +export const GaussianSurfaceMeshParams = { ...UnitsMeshParams, ...UnitsTextureMeshParams, ...GaussianDensityParams, } -export type GaussianSurfaceParams = typeof GaussianSurfaceParams +export type GaussianSurfaceMeshParams = typeof GaussianSurfaceMeshParams export function getGaussianSurfaceVisual(webgl?: WebGLContext) { return webgl && webgl.extensions.drawBuffers ? GaussianSurfaceTextureMeshVisual : GaussianSurfaceMeshVisual @@ -53,14 +53,14 @@ async function createGaussianSurfaceMesh(ctx: VisualContext, unit: Unit, structu return surface } -export function GaussianSurfaceMeshVisual(materialId: number): UnitsVisual<GaussianSurfaceParams> { - return UnitsMeshVisual<GaussianSurfaceParams>({ - defaultProps: PD.getDefaultValues(GaussianSurfaceParams), +export function GaussianSurfaceMeshVisual(materialId: number): UnitsVisual<GaussianSurfaceMeshParams> { + return UnitsMeshVisual<GaussianSurfaceMeshParams>({ + defaultProps: PD.getDefaultValues(GaussianSurfaceMeshParams), createGeometry: createGaussianSurfaceMesh, createLocationIterator: StructureElementIterator.fromGroup, getLoci: getElementLoci, eachLocation: eachElement, - setUpdateState: (state: VisualUpdateState, newProps: PD.Values<GaussianSurfaceParams>, currentProps: PD.Values<GaussianSurfaceParams>) => { + setUpdateState: (state: VisualUpdateState, newProps: PD.Values<GaussianSurfaceMeshParams>, currentProps: PD.Values<GaussianSurfaceMeshParams>) => { if (newProps.resolution !== currentProps.resolution) state.createGeometry = true if (newProps.radiusOffset !== currentProps.radiusOffset) state.createGeometry = true if (newProps.smoothness !== currentProps.smoothness) state.createGeometry = true @@ -98,14 +98,14 @@ async function createGaussianSurfaceTextureMesh(ctx: VisualContext, unit: Unit, return surface } -export function GaussianSurfaceTextureMeshVisual(materialId: number): UnitsVisual<GaussianSurfaceParams> { - return UnitsTextureMeshVisual<GaussianSurfaceParams>({ - defaultProps: PD.getDefaultValues(GaussianSurfaceParams), +export function GaussianSurfaceTextureMeshVisual(materialId: number): UnitsVisual<GaussianSurfaceMeshParams> { + return UnitsTextureMeshVisual<GaussianSurfaceMeshParams>({ + defaultProps: PD.getDefaultValues(GaussianSurfaceMeshParams), createGeometry: createGaussianSurfaceTextureMesh, createLocationIterator: StructureElementIterator.fromGroup, getLoci: getElementLoci, eachLocation: eachElement, - setUpdateState: (state: VisualUpdateState, newProps: PD.Values<GaussianSurfaceParams>, currentProps: PD.Values<GaussianSurfaceParams>) => { + setUpdateState: (state: VisualUpdateState, newProps: PD.Values<GaussianSurfaceMeshParams>, currentProps: PD.Values<GaussianSurfaceMeshParams>) => { if (newProps.resolution !== currentProps.resolution) state.createGeometry = true if (newProps.radiusOffset !== currentProps.radiusOffset) state.createGeometry = true if (newProps.smoothness !== currentProps.smoothness) state.createGeometry = true