From 0e145caae06a2cbda17116ca2af756887058394a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Mal=C3=BD?= <michal.maly@ibt.cas.cz> Date: Tue, 2 Aug 2022 20:44:43 +0200 Subject: [PATCH] ReDNATCO plugin stage 14 --- src/apps/rednatco/viewer.ts | 49 ++----------------------------------- 1 file changed, 2 insertions(+), 47 deletions(-) diff --git a/src/apps/rednatco/viewer.ts b/src/apps/rednatco/viewer.ts index 01d5e8f06..b4f36c64d 100644 --- a/src/apps/rednatco/viewer.ts +++ b/src/apps/rednatco/viewer.ts @@ -12,7 +12,7 @@ import { OrderedSet } from '../../mol-data/int/ordered-set'; import { BoundaryHelper } from '../../mol-math/geometry/boundary-helper'; import { Vec3 } from '../../mol-math/linear-algebra/3d'; import { EmptyLoci, Loci } from '../../mol-model/loci'; -import { ElementIndex, Model, Structure, StructureElement, StructureProperties, StructureSelection, Trajectory } from '../../mol-model/structure'; +import { ElementIndex, Model, StructureElement, StructureProperties, StructureSelection, Trajectory } from '../../mol-model/structure'; import { structureUnion, structureSubtract } from '../../mol-model/structure/query/utils/structure-set'; import { Location } from '../../mol-model/structure/structure/element/location'; import { MmcifFormat } from '../../mol-model-formats/structure/mmcif'; @@ -21,22 +21,19 @@ import { PluginCommands } from '../../mol-plugin/commands'; import { PluginContext } from '../../mol-plugin/context'; import { PluginSpec } from '../../mol-plugin/spec'; import { LociLabel } from '../../mol-plugin-state/manager/loci-label'; -import { PluginStateObject as PSO } from '../../mol-plugin-state/objects'; import { StateTransforms } from '../../mol-plugin-state/transforms'; import { RawData } from '../../mol-plugin-state/transforms/data'; import { createPluginUI } from '../../mol-plugin-ui'; import { PluginUIContext } from '../../mol-plugin-ui/context'; import { DefaultPluginUISpec, PluginUISpec } from '../../mol-plugin-ui/spec'; import { Representation } from '../../mol-repr/representation'; -import { StateObjectCell, StateObject, StateSelection, StateTransformer } from '../../mol-state'; +import { StateObjectCell, StateObject, StateTransformer } from '../../mol-state'; import { StateBuilder } from '../../mol-state/state/builder'; -import { StateTreeSpine } from '../../mol-state/tree/spine'; import { lociLabel } from '../../mol-theme/label'; import { arrayMax } from '../../mol-util/array'; import { Binding } from '../../mol-util/binding'; import { Color } from '../../mol-util/color'; import { ButtonsType, ModifiersKeys } from '../../mol-util/input/input-observer'; -import { MarkerAction } from '../../mol-util/marker-action'; import { ParamDefinition as PD } from '../../mol-util/param-definition'; import { ObjectKeys } from '../../mol-util/type-helpers'; import './molstar.css'; @@ -187,25 +184,6 @@ const ReDNATCOLociSelectionProvider = PluginBehavior.create({ display: { name: 'Interactive step selection' }, params: () => ReDNATCOLociSelectionParams, ctor: class extends PluginBehavior.Handler<ReDNATCOLociSelectionProps> { - private spine: StateTreeSpine.Impl; - private lociMarkProvider = (reprLoci: Representation.Loci, action: MarkerAction) => { - if (!this.ctx.canvas3d) return; - this.ctx.canvas3d.mark({ loci: reprLoci.loci }, action); - }; - private applySelectMark(ref: string, clear?: boolean) { - const cell = this.ctx.state.data.cells.get(ref); - if (cell && PSO.isRepresentation3D(cell.obj)) { - this.spine.current = cell; - const so = this.spine.getRootOfType(PSO.Molecule.Structure); - if (so) { - if (clear) { - this.lociMarkProvider({ loci: Structure.Loci(so.data) }, MarkerAction.Deselect); - } - const loci = this.ctx.managers.structure.selection.getLoci(so.data); - this.lociMarkProvider({ loci }, MarkerAction.Select); - } - } - } private focusOnLoci(loci: Representation.Loci) { if (!this.ctx.canvas3d) return; @@ -237,7 +215,6 @@ const ReDNATCOLociSelectionProvider = PluginBehavior.create({ current => { this.ctx.managers.interactivity.lociSelects.deselectAll(); if (current.loci.kind === 'element-loci') { - this.ctx.managers.interactivity.lociSelects.select(current); this.params.onSelected(current); } }, @@ -264,33 +241,11 @@ const ReDNATCOLociSelectionProvider = PluginBehavior.create({ } } }); - - this.ctx.managers.interactivity.lociSelects.addProvider(this.lociMarkProvider); - - this.subscribeObservable(this.ctx.state.events.object.created, ({ ref }) => this.applySelectMark(ref)); - - // re-apply select-mark to all representation of an updated structure - this.subscribeObservable(this.ctx.state.events.object.updated, ({ ref, obj, oldObj, oldData, action }) => { - const cell = this.ctx.state.data.cells.get(ref); - if (cell && PSO.Molecule.Structure.is(cell.obj)) { - const structure: Structure = obj.data; - const oldStructure: Structure | undefined = action === 'recreate' ? oldObj?.data : - action === 'in-place' ? oldData : undefined; - if (oldStructure && - Structure.areEquivalent(structure, oldStructure) && - Structure.areHierarchiesEqual(structure, oldStructure)) return; - - const reprs = this.ctx.state.data.select(StateSelection.Generators.ofType(PSO.Molecule.Structure.Representation3D, ref)); - for (const repr of reprs) this.applySelectMark(repr.transform.ref, true); - } - }); - } unregister() { } constructor(ctx: PluginContext, params: ReDNATCOLociSelectionProps) { super(ctx, params); - this.spine = new StateTreeSpine.Impl(ctx.state.data.cells); } }, }); -- GitLab