diff --git a/src/mol-repr/structure/registry.ts b/src/mol-repr/structure/registry.ts index 058a9c178c54af862efb52353e2c372f57cb508b..f3775cc184e03b7a2791c05ae959abedf267c55f 100644 --- a/src/mol-repr/structure/registry.ts +++ b/src/mol-repr/structure/registry.ts @@ -10,6 +10,7 @@ import { CartoonRepresentationProvider } from './representation/cartoon'; import { BallAndStickRepresentationProvider } from './representation/ball-and-stick'; import { MolecularSurfaceRepresentationProvider } from './representation/molecular-surface'; import { CarbohydrateRepresentationProvider } from './representation/carbohydrate'; +import { SpacefillRepresentationProvider } from './representation/spacefill'; export class StructureRepresentationRegistry extends RepresentationRegistry<Structure> { constructor() { @@ -24,8 +25,9 @@ export class StructureRepresentationRegistry extends RepresentationRegistry<Stru export const BuiltInStructureRepresentations = { 'cartoon': CartoonRepresentationProvider, 'ball-and-stick': BallAndStickRepresentationProvider, - 'molecular-surface': MolecularSurfaceRepresentationProvider, 'carbohydrate': CarbohydrateRepresentationProvider, + 'molecular-surface': MolecularSurfaceRepresentationProvider, + 'spacefill': SpacefillRepresentationProvider, } export type BuiltInStructureRepresentationsName = keyof typeof BuiltInStructureRepresentations export const BuiltInStructureRepresentationsNames = Object.keys(BuiltInStructureRepresentations) diff --git a/src/mol-repr/structure/representation/spacefill.ts b/src/mol-repr/structure/representation/spacefill.ts index 42f35ae58b1ed7f670570809e92c1753d01cbb26..09e13505a55a1b7b524df3516e183f6b4cd769d7 100644 --- a/src/mol-repr/structure/representation/spacefill.ts +++ b/src/mol-repr/structure/representation/spacefill.ts @@ -1,29 +1,42 @@ -// /** -// * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. -// * -// * @author Alexander Rose <alexander.rose@weirdbyte.de> -// */ +/** + * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. + * + * @author Alexander Rose <alexander.rose@weirdbyte.de> + */ -// import { ElementSphereVisual, ElementSphereParams } from '../visual/element-sphere'; -// import { UnitsRepresentation } from '../units-representation'; -// import { ParamDefinition as PD } from 'mol-util/param-definition'; -// import { StructureRepresentation } from '../representation'; -// import { Representation } from 'mol-repr/representation'; -// import { ThemeRegistryContext } from 'mol-theme/theme'; -// import { Structure } from 'mol-model/structure'; +import { ElementSphereVisual, ElementSphereParams } from '../visual/element-sphere'; +import { UnitsRepresentation } from '../units-representation'; +import { ParamDefinition as PD } from 'mol-util/param-definition'; +import { StructureRepresentation, StructureRepresentationProvider } from '../representation'; +import { RepresentationParamsGetter, RepresentationContext, Representation } from 'mol-repr/representation'; +import { ThemeRegistryContext } from 'mol-theme/theme'; +import { Structure } from 'mol-model/structure'; +import { UnitKind, UnitKindOptions } from '../visual/util/common'; -// export const SpacefillParams = { -// ...ElementSphereParams, -// } -// export function getSpacefillParams(ctx: ThemeRegistryContext, structure: Structure) { -// return SpacefillParams // TODO return copy -// } -// export type SpacefillProps = PD.DefaultValues<typeof SpacefillParams> +const SpacefillVisuals = { + 'element-sphere': (ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, ElementSphereParams>) => UnitsRepresentation('Sphere mesh', ctx, getParams, ElementSphereVisual), +} -// export type SpacefillRepresentation = StructureRepresentation<SpacefillProps> +export const SpacefillParams = { + ...ElementSphereParams, + unitKinds: PD.MultiSelect<UnitKind>(['atomic', 'gaussians'], UnitKindOptions), +} +export type SpacefillParams = typeof SpacefillParams +export function getSpacefillParams(ctx: ThemeRegistryContext, structure: Structure) { + return PD.clone(SpacefillParams) +} -// export function SpacefillRepresentation(defaultProps: SpacefillProps): SpacefillRepresentation { -// return Representation.createMulti('Spacefill', defaultProps, [ -// UnitsRepresentation('Sphere mesh', defaultProps, ElementSphereVisual) -// ]) -// } \ No newline at end of file +export type SpacefillRepresentation = StructureRepresentation<SpacefillParams> +export function SpacefillRepresentation(ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, SpacefillParams>): SpacefillRepresentation { + return Representation.createMulti('Spacefill', ctx, getParams, SpacefillVisuals as unknown as Representation.Def<Structure, SpacefillParams>) +} + +export const SpacefillRepresentationProvider: StructureRepresentationProvider<typeof SpacefillParams> = { + label: 'Spacefill', + description: 'Displays atoms as spheres.', + factory: SpacefillRepresentation, + getParams: getSpacefillParams, + defaultValues: PD.getDefaultValues(SpacefillParams), + defaultColorTheme: 'element-symbol', + defaultSizeTheme: 'physical' +} \ No newline at end of file