Skip to content
Snippets Groups Projects
Commit 153f30a3 authored by David Sehnal's avatar David Sehnal
Browse files

mol-plugin: set initial repr state when modifer is removed

parent e769bf45
No related branches found
No related tags found
No related merge requests found
......@@ -72,6 +72,13 @@ export function SyncStructureRepresentation3DState(ctx: PluginContext) {
ctx.canvas3d.update(data.source.data.repr);
ctx.canvas3d.requestDraw(true);
});
events.object.removed.subscribe(e => {
if (!SO.Molecule.Structure.Representation3DState.is(e.obj)) return;
const data = e.obj.data as SO.Molecule.Structure.Representation3DStateData;
data.source.data.repr.setState(data.initialState);
ctx.canvas3d.update(data.source.data.repr);
ctx.canvas3d.requestDraw(true);
});
}
......
......@@ -84,7 +84,14 @@ export namespace PluginStateObject {
export namespace Structure {
export class Representation3D extends CreateRepresentation3D<StructureRepresentation<any> | ShapeRepresentation<any, any, any>, Structure>({ name: 'Structure 3D' }) { }
export interface Representation3DStateData { source: Representation3D, state: Partial<StructureRepresentationState>, info?: unknown }
export interface Representation3DStateData {
source: Representation3D,
/** used to restore state when the obj is removed */
initialState: Partial<StructureRepresentationState>,
state: Partial<StructureRepresentationState>,
info?: unknown
}
export class Representation3DState extends Create<Representation3DStateData>({ name: 'Structure 3D State', typeClass: 'Object' }) { }
}
}
......
......@@ -247,7 +247,12 @@ const UnwindStructureAssemblyRepresentation3D = PluginStateTransform.BuiltIn({
const structure = a.data.source.data;
const unitTransforms = new StructureUnitTransforms(structure);
unwindStructureAssembly(structure, unitTransforms, params.t);
return new SO.Molecule.Structure.Representation3DState({ state: { unitTransforms }, info: structure, source: a }, { label: `Unwind T = ${params.t.toFixed(2)}` });
return new SO.Molecule.Structure.Representation3DState({
state: { unitTransforms },
initialState: { unitTransforms: new StructureUnitTransforms(structure) },
info: structure,
source: a
}, { label: `Unwind T = ${params.t.toFixed(2)}` });
},
update({ a, b, newParams, oldParams }) {
const structure = b.data.info as Structure;
......@@ -274,15 +279,20 @@ const ExplodeStructureRepresentation3D = PluginStateTransform.BuiltIn({
return true;
},
apply({ a, params, spine }) {
const srcStructure = spine.getRootOfType(SO.Molecule.Structure)!.data;
const unitTransforms = new StructureUnitTransforms(srcStructure);
explodeStructure(srcStructure, unitTransforms, params.t);
return new SO.Molecule.Structure.Representation3DState({ state: { unitTransforms }, info: srcStructure, source: a }, { label: `Explode T = ${params.t.toFixed(2)}` });
const rootStructure = spine.getRootOfType(SO.Molecule.Structure)!.data;
const unitTransforms = new StructureUnitTransforms(rootStructure);
explodeStructure(rootStructure, unitTransforms, params.t);
return new SO.Molecule.Structure.Representation3DState({
state: { unitTransforms },
initialState: { unitTransforms: new StructureUnitTransforms(rootStructure) },
info: rootStructure,
source: a
}, { label: `Explode T = ${params.t.toFixed(2)}` });
},
update({ a, b, newParams, oldParams, spine }) {
const srcStructure = spine.getRootOfType(SO.Molecule.Structure)!.data;
const rootStructure = spine.getRootOfType(SO.Molecule.Structure)!.data;
const structure = b.data.info as Structure;
if (srcStructure !== structure) return StateTransformer.UpdateResult.Recreate;
if (rootStructure !== structure) return StateTransformer.UpdateResult.Recreate;
if (oldParams.t === newParams.t) return StateTransformer.UpdateResult.Unchanged;
const unitTransforms = b.data.state.unitTransforms!;
explodeStructure(structure, unitTransforms, newParams.t);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment