UNPKG

molstar

Version:

A comprehensive macromolecular library.

115 lines 5.93 kB
"use strict"; /** * 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