diff --git a/src/mol-plugin/index.ts b/src/mol-plugin/index.ts index ba07c78ce7fa16e0dfb516fed52ddc39cef2d549..54e7e1590e56e0970754f3e5083f11a53a6f8bb6 100644 --- a/src/mol-plugin/index.ts +++ b/src/mol-plugin/index.ts @@ -31,6 +31,7 @@ export const DefaultPluginSpec: PluginSpec = { PluginSpec.Action(StateTransforms.Data.ParseCif), PluginSpec.Action(StateTransforms.Data.ParseCcp4), PluginSpec.Action(StateTransforms.Model.StructureAssemblyFromModel), + PluginSpec.Action(StateTransforms.Model.StructureSymmetryFromModel), PluginSpec.Action(StateTransforms.Model.StructureFromModel), PluginSpec.Action(StateTransforms.Model.ModelFromTrajectory), PluginSpec.Action(StateTransforms.Model.VolumeFromCcp4), diff --git a/src/mol-plugin/state/actions/basic.ts b/src/mol-plugin/state/actions/basic.ts index d54a87b9aef0e984040fca191052c81dd30c1270..68bef84e34dfa245565b30aa2d25e2c4ff484a9f 100644 --- a/src/mol-plugin/state/actions/basic.ts +++ b/src/mol-plugin/state/actions/basic.ts @@ -14,7 +14,7 @@ import { ParamDefinition as PD } from 'mol-util/param-definition'; import { PluginStateObject } from '../objects'; import { StateTransforms } from '../transforms'; import { Download } from '../transforms/data'; -import { StructureRepresentation3DHelpers, VolumeRepresentation3DHelpers } from '../transforms/representation'; +import { StructureRepresentation3DHelpers } from '../transforms/representation'; import { getFileInfo, FileInput } from 'mol-util/file-info'; import { Task } from 'mol-task'; diff --git a/src/mol-plugin/state/transforms/model.ts b/src/mol-plugin/state/transforms/model.ts index 958e2ef901a3ccd26981fc2eab4d7c4d61c426d8..66e8fff9116f5d79f83cc675d1adf09749959d85 100644 --- a/src/mol-plugin/state/transforms/model.ts +++ b/src/mol-plugin/state/transforms/model.ts @@ -134,6 +134,32 @@ const StructureAssemblyFromModel = PluginStateTransform.BuiltIn({ } }); +export { StructureSymmetryFromModel } +type StructureSymmetryFromModel = typeof StructureSymmetryFromModel +const StructureSymmetryFromModel = PluginStateTransform.BuiltIn({ + name: 'structure-symmetry-from-model', + display: { name: 'Structure Symmetry', description: 'Create a molecular structure symmetry.' }, + from: SO.Molecule.Model, + to: SO.Molecule.Structure, + params(a) { + return { + ijkMin: PD.Vec3(Vec3.create(-1, -1, -1), { label: 'Min IJK', fieldLabels: { x: 'I', y: 'J', z: 'K' } }), + ijkMax: PD.Vec3(Vec3.create(1, 1, 1), { label: 'Max IJK', fieldLabels: { x: 'I', y: 'J', z: 'K' } }) + } + } +})({ + apply({ a, params }, plugin: PluginContext) { + return Task.create('Build Symmetry', async ctx => { + const { ijkMin, ijkMax } = params + const model = a.data; + const base = Structure.ofModel(model); + const s = await StructureSymmetry.buildSymmetryRange(base, ijkMin, ijkMax).runInContext(ctx); + const props = { label: `Symmetry [${ijkMin}] to [${ijkMax}]`, description: structureDesc(s) }; + return new SO.Molecule.Structure(s, props); + }) + } +}); + export { StructureSelection } type StructureSelection = typeof StructureSelection const StructureSelection = PluginStateTransform.BuiltIn({