diff --git a/src/mol-plugin/state/actions/basic.ts b/src/mol-plugin/state/actions/basic.ts index b50889e6b87914b1300cd26bd7def51795c7e3ab..6768bbd6d8e3e068758d2b21e66fda8b4672cb23 100644 --- a/src/mol-plugin/state/actions/basic.ts +++ b/src/mol-plugin/state/actions/basic.ts @@ -17,6 +17,8 @@ import { StateTreeBuilder } from 'mol-state/tree/builder'; import { PolymerIdColorThemeParams } from 'mol-theme/color/polymer-id'; import { UniformSizeThemeParams } from 'mol-theme/size/uniform'; import { ElementSymbolColorThemeParams } from 'mol-theme/color/element-symbol'; +import { PhysicalSizeThemeParams } from 'mol-theme/size/physical'; +import { SpacefillParams } from 'mol-repr/structure/representation/spacefill'; // TODO: "structure parser provider" @@ -124,8 +126,12 @@ function complexRepresentation(root: StateTreeBuilder.To<PluginStateObject.Molec colorTheme: { name: 'element-symbol', params: PD.getDefaultValues(ElementSymbolColorThemeParams) }, sizeTheme: { name: 'uniform', params: PD.getDefaultValues(UniformSizeThemeParams) }, }) - root.apply(StateTransforms.Model.StructureComplexElement, { type: 'spheres' }); - // TODO: create spheres visual + root.apply(StateTransforms.Model.StructureComplexElement, { type: 'spheres' }) + .apply(StateTransforms.Representation.StructureRepresentation3D, { + type: { name: 'spacefill', params: { ...PD.getDefaultValues(SpacefillParams) } }, + colorTheme: { name: 'polymer-id', params: PD.getDefaultValues(PolymerIdColorThemeParams) }, + sizeTheme: { name: 'physical', params: PD.getDefaultValues(PhysicalSizeThemeParams) }, + }) } export const CreateComplexRepresentation = StateAction.build({ diff --git a/src/mol-repr/structure/registry.ts b/src/mol-repr/structure/registry.ts index f3775cc184e03b7a2791c05ae959abedf267c55f..ef73cfba1b5c5cb6dfbb6b4509dd2ebd38be5f0c 100644 --- a/src/mol-repr/structure/registry.ts +++ b/src/mol-repr/structure/registry.ts @@ -11,6 +11,7 @@ import { BallAndStickRepresentationProvider } from './representation/ball-and-st import { MolecularSurfaceRepresentationProvider } from './representation/molecular-surface'; import { CarbohydrateRepresentationProvider } from './representation/carbohydrate'; import { SpacefillRepresentationProvider } from './representation/spacefill'; +import { DistanceRestraintRepresentationProvider } from './representation/distance-restraint'; export class StructureRepresentationRegistry extends RepresentationRegistry<Structure> { constructor() { @@ -26,6 +27,7 @@ export const BuiltInStructureRepresentations = { 'cartoon': CartoonRepresentationProvider, 'ball-and-stick': BallAndStickRepresentationProvider, 'carbohydrate': CarbohydrateRepresentationProvider, + 'distance-restraint': DistanceRestraintRepresentationProvider, 'molecular-surface': MolecularSurfaceRepresentationProvider, 'spacefill': SpacefillRepresentationProvider, } diff --git a/src/mol-repr/structure/representation/distance-restraint.ts b/src/mol-repr/structure/representation/distance-restraint.ts index 94edde13a8cb99ff0ec108ef8f90f4018a4e99c3..779f2e14b9a96025b85fd05a00022f8e495a0936 100644 --- a/src/mol-repr/structure/representation/distance-restraint.ts +++ b/src/mol-repr/structure/representation/distance-restraint.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 { CrossLinkRestraintVisual, CrossLinkRestraintParams } from '../visual/cross-link-restraint-cylinder'; -// import { ParamDefinition as PD } from 'mol-util/param-definition'; -// import { ComplexRepresentation } from '../complex-representation'; -// import { StructureRepresentation } from '../representation'; -// import { Representation } from 'mol-repr/representation'; -// import { ThemeRegistryContext } from 'mol-theme/theme'; -// import { Structure } from 'mol-model/structure'; +import { CrossLinkRestraintVisual, CrossLinkRestraintParams } from '../visual/cross-link-restraint-cylinder'; +import { ParamDefinition as PD } from 'mol-util/param-definition'; +import { ComplexRepresentation } from '../complex-representation'; +import { StructureRepresentation, StructureRepresentationProvider } from '../representation'; +import { Representation, RepresentationContext, RepresentationParamsGetter } 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 DistanceRestraintParams = { -// ...CrossLinkRestraintParams, -// } -// export function getDistanceRestraintParams(ctx: ThemeRegistryContext, structure: Structure) { -// return DistanceRestraintParams // TODO return copy -// } -// export type DistanceRestraintProps = PD.DefaultValues<typeof DistanceRestraintParams> +const DistanceRestraintVisuals = { + 'distance-restraint': (ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, CrossLinkRestraintParams>) => ComplexRepresentation('Cross-link restraint', ctx, getParams, CrossLinkRestraintVisual), +} -// export type DistanceRestraintRepresentation = StructureRepresentation<DistanceRestraintProps> +export const DistanceRestraintParams = { + ...CrossLinkRestraintParams, + unitKinds: PD.MultiSelect<UnitKind>(['atomic', 'spheres'], UnitKindOptions), +} +export type DistanceRestraintParams = typeof DistanceRestraintParams +export function getDistanceRestraintParams(ctx: ThemeRegistryContext, structure: Structure) { + return PD.clone(DistanceRestraintParams) +} -// export function DistanceRestraintRepresentation(defaultProps: DistanceRestraintProps): DistanceRestraintRepresentation { -// return Representation.createMulti('Distance restraint', defaultProps, [ -// ComplexRepresentation('Cross-link restraint', defaultProps, CrossLinkRestraintVisual) -// ]) -// } \ No newline at end of file +export type DistanceRestraintRepresentation = StructureRepresentation<DistanceRestraintParams> +export function DistanceRestraintRepresentation(ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, DistanceRestraintParams>): DistanceRestraintRepresentation { + return Representation.createMulti('DistanceRestraint', ctx, getParams, DistanceRestraintVisuals as unknown as Representation.Def<Structure, DistanceRestraintParams>) +} + +export const DistanceRestraintRepresentationProvider: StructureRepresentationProvider<typeof DistanceRestraintParams> = { + label: 'DistanceRestraint', + description: 'Displays cross-link distance restraints.', + factory: DistanceRestraintRepresentation, + getParams: getDistanceRestraintParams, + defaultValues: PD.getDefaultValues(DistanceRestraintParams), + defaultColorTheme: 'cross-link', + defaultSizeTheme: 'uniform' +} \ No newline at end of file diff --git a/src/mol-repr/structure/representation/spacefill.ts b/src/mol-repr/structure/representation/spacefill.ts index 09e13505a55a1b7b524df3516e183f6b4cd769d7..985f7ef36d29de4f07e5ce2f2057b43b7942d39b 100644 --- a/src/mol-repr/structure/representation/spacefill.ts +++ b/src/mol-repr/structure/representation/spacefill.ts @@ -19,7 +19,7 @@ const SpacefillVisuals = { export const SpacefillParams = { ...ElementSphereParams, - unitKinds: PD.MultiSelect<UnitKind>(['atomic', 'gaussians'], UnitKindOptions), + unitKinds: PD.MultiSelect<UnitKind>(['atomic', 'spheres'], UnitKindOptions), } export type SpacefillParams = typeof SpacefillParams export function getSpacefillParams(ctx: ThemeRegistryContext, structure: Structure) {