Browse Source

add model-unitcell repr for unit-/supercell assemblies

Alexander Rose 5 years ago
parent
commit
42364371de
2 changed files with 14 additions and 1 deletions
  1. 1 0
      src/structure-viewer/helpers.ts
  2. 13 1
      src/structure-viewer/ui/structure.tsx

+ 1 - 0
src/structure-viewer/helpers.ts

@@ -27,6 +27,7 @@ export enum StateElements {
     Trajectory = 'trajectory',
     Model = 'model',
     ModelProps = 'model-props',
+    ModelUnitcell = 'model-unitcell',
     Assembly = 'assembly',
 
     VolumeStreaming = 'volume-streaming',

+ 13 - 1
src/structure-viewer/ui/structure.tsx

@@ -10,7 +10,7 @@ import { StateElements, StructureViewerState } from '../helpers';
 import { ParameterControls } from 'molstar/lib/mol-plugin/ui/controls/parameters';
 import { ParamDefinition as PD } from 'molstar/lib/mol-util/param-definition';
 import { PluginCommands } from 'molstar/lib/mol-plugin/command';
-import { StateObject, StateBuilder, StateTree, StateSelection } from 'molstar/lib/mol-state';
+import { StateObject, StateBuilder, StateTree, StateSelection, State } from 'molstar/lib/mol-state';
 import { PluginStateObject as PSO } from 'molstar/lib/mol-plugin/state/objects';
 import { StateTransforms } from 'molstar/lib/mol-plugin/state/transforms';
 import { Vec3 } from 'molstar/lib/mol-math/linear-algebra';
@@ -36,6 +36,15 @@ export class StructureControlsHelper {
         Scheduler.setImmediate(() => PluginCommands.Camera.Reset.dispatch(this.plugin, { }))
     }
 
+    private ensureModelUnitcell(tree: StateBuilder.Root, state: State) {
+        if (!state.tree.transforms.has(StateElements.ModelUnitcell)) {
+            tree.to(StateElements.Model).apply(
+                StateTransforms.Representation.ModelUnitcell3D,
+                undefined, { ref: StateElements.ModelUnitcell }
+            )
+        }
+    }
+
     async setAssembly(id: string) {
         const state = this.plugin.state.dataState;
         const tree = state.build();
@@ -46,6 +55,7 @@ export class StructureControlsHelper {
                     StateTransforms.Model.StructureSymmetryFromModel,
                     props, { ref: StateElements.Assembly, tags: [ 'unitcell' ] }
                 )
+            this.ensureModelUnitcell(tree, state)
         } else if (id === 'supercell') {
             const props = { ijkMin: Vec3.create(-1, -1, -1), ijkMax: Vec3.create(1, 1, 1) }
             tree.delete(StateElements.Assembly)
@@ -53,7 +63,9 @@ export class StructureControlsHelper {
                     StateTransforms.Model.StructureSymmetryFromModel,
                     props, { ref: StateElements.Assembly, tags: [ 'supercell' ] }
                 )
+            this.ensureModelUnitcell(tree, state)
         } else {
+            tree.delete(StateElements.ModelUnitcell)
             tree.delete(StateElements.Assembly)
                 .to(StateElements.Model).apply(
                     StateTransforms.Model.StructureAssemblyFromModel,