molstar
Version:
A comprehensive macromolecular library.
115 lines • 5.93 kB
JavaScript
/**
* Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.AnimateAssemblyUnwind = void 0;
var tslib_1 = require("tslib");
var model_1 = require("../model");
var objects_1 = require("../../objects");
var transforms_1 = require("../../transforms");
var mol_state_1 = require("../../../mol-state");
var commands_1 = require("../../../mol-plugin/commands");
var param_definition_1 = require("../../../mol-util/param-definition");
exports.AnimateAssemblyUnwind = model_1.PluginStateAnimation.create({
name: 'built-in.animate-assembly-unwind',
display: { name: 'Unwind Assembly' },
isExportable: true,
params: function (plugin) {
var targets = [['all', 'All']];
var structures = plugin.state.data.select(mol_state_1.StateSelection.Generators.rootsOfType(objects_1.PluginStateObject.Molecule.Structure));
for (var _i = 0, structures_1 = structures; _i < structures_1.length; _i++) {
var s = structures_1[_i];
targets.push([s.transform.ref, s.obj.data.models[0].label]);
}
return {
durationInMs: param_definition_1.ParamDefinition.Numeric(3000, { min: 100, max: 10000, step: 100 }),
playOnce: param_definition_1.ParamDefinition.Boolean(false),
target: param_definition_1.ParamDefinition.Select(targets[0][0], targets)
};
},
canApply: function (plugin) {
var state = plugin.state.data;
var root = mol_state_1.StateTransform.RootRef;
var reprs = state.select(mol_state_1.StateSelection.Generators.ofType(objects_1.PluginStateObject.Molecule.Structure.Representation3D, root));
return { canApply: reprs.length > 0 };
},
getDuration: function (params) {
return {
kind: 'fixed',
durationMs: params.durationInMs
};
},
initialState: function () { return ({ t: 0 }); },
setup: function (params, _, plugin) {
var state = plugin.state.data;
var root = !params.target || params.target === 'all' ? mol_state_1.StateTransform.RootRef : params.target;
var reprs = state.select(mol_state_1.StateSelection.Generators.ofType(objects_1.PluginStateObject.Molecule.Structure.Representation3D, root));
var update = state.build();
var changed = false;
for (var _i = 0, reprs_1 = reprs; _i < reprs_1.length; _i++) {
var r = reprs_1[_i];
var unwinds = state.select(mol_state_1.StateSelection.Generators.ofTransformer(transforms_1.StateTransforms.Representation.UnwindStructureAssemblyRepresentation3D, r.transform.ref));
if (unwinds.length > 0)
continue;
changed = true;
update.to(r)
.apply(transforms_1.StateTransforms.Representation.UnwindStructureAssemblyRepresentation3D, { t: 0 }, { tags: 'animate-assembly-unwind' });
}
if (!changed)
return;
return update.commit({ doNotUpdateCurrent: true });
},
teardown: function (_, __, plugin) {
var state = plugin.state.data;
var reprs = state.select(mol_state_1.StateSelection.Generators.ofType(objects_1.PluginStateObject.Molecule.Structure.Representation3DState)
.withTag('animate-assembly-unwind'));
if (reprs.length === 0)
return;
var update = state.build();
for (var _i = 0, reprs_2 = reprs; _i < reprs_2.length; _i++) {
var r = reprs_2[_i];
update.delete(r.transform.ref);
}
return update.commit();
},
apply: function (animState, t, ctx) {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var state, root, anims, update, d, newTime, finished, _i, anims_1, m;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
state = ctx.plugin.state.data;
root = !ctx.params.target || ctx.params.target === 'all' ? mol_state_1.StateTransform.RootRef : ctx.params.target;
anims = state.select(mol_state_1.StateSelection.Generators.ofTransformer(transforms_1.StateTransforms.Representation.UnwindStructureAssemblyRepresentation3D, root));
if (anims.length === 0) {
return [2 /*return*/, { kind: 'finished' }];
}
update = state.build();
d = (t.current - t.lastApplied) / ctx.params.durationInMs;
newTime = (animState.t + d), finished = false;
if (ctx.params.playOnce && newTime >= 1) {
finished = true;
newTime = 1;
}
else {
newTime = newTime % 1;
}
for (_i = 0, anims_1 = anims; _i < anims_1.length; _i++) {
m = anims_1[_i];
update.to(m).update({ t: newTime });
}
return [4 /*yield*/, commands_1.PluginCommands.State.Update(ctx.plugin, { state: state, tree: update, options: { doNotLogTiming: true } })];
case 1:
_a.sent();
if (finished)
return [2 /*return*/, { kind: 'finished' }];
return [2 /*return*/, { kind: 'next', state: { t: newTime } }];
}
});
});
}
});
//# sourceMappingURL=assembly-unwind.js.map
;