UNPKG

molstar

Version:

A comprehensive macromolecular library.

156 lines 8.09 kB
"use strict"; /** * Copyright (c) 2020 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.StructureRepresentationBuilder = void 0; var tslib_1 = require("tslib"); var util_1 = require("../../../mol-data/util"); var mol_state_1 = require("../../../mol-state"); var mol_task_1 = require("../../../mol-task"); var debug_1 = require("../../../mol-util/debug"); var object_1 = require("../../../mol-util/object"); var param_definition_1 = require("../../../mol-util/param-definition"); var structure_representation_params_1 = require("../../helpers/structure-representation-params"); var representation_1 = require("../../transforms/representation"); var representation_preset_1 = require("./representation-preset"); var array_1 = require("../../../mol-util/array"); var config_1 = require("../../../mol-plugin/config"); var StructureRepresentationBuilder = /** @class */ (function () { function StructureRepresentationBuilder(plugin) { var _this = this; this.plugin = plugin; this._providers = []; this.providerMap = new Map(); this.defaultProvider = representation_preset_1.PresetStructureRepresentations.auto; (0, object_1.objectForEach)(representation_preset_1.PresetStructureRepresentations, function (r) { return _this.registerPreset(r); }); } Object.defineProperty(StructureRepresentationBuilder.prototype, "dataState", { get: function () { return this.plugin.state.data; }, enumerable: false, configurable: true }); StructureRepresentationBuilder.prototype.resolveProvider = function (ref) { var _a; return typeof ref === 'string' ? (_a = representation_preset_1.PresetStructureRepresentations[ref]) !== null && _a !== void 0 ? _a : (0, util_1.arrayFind)(this._providers, function (p) { return p.id === ref; }) : ref; }; StructureRepresentationBuilder.prototype.hasPreset = function (s) { for (var _i = 0, _a = this._providers; _i < _a.length; _i++) { var p = _a[_i]; if (!p.isApplicable || p.isApplicable(s, this.plugin)) return true; } return false; }; Object.defineProperty(StructureRepresentationBuilder.prototype, "providers", { get: function () { return this._providers; }, enumerable: false, configurable: true }); StructureRepresentationBuilder.prototype.getPresets = function (s) { if (!s) return this.providers; var ret = []; for (var _i = 0, _a = this._providers; _i < _a.length; _i++) { var p = _a[_i]; if (p.isApplicable && !p.isApplicable(s, this.plugin)) continue; ret.push(p); } return ret; }; StructureRepresentationBuilder.prototype.getPresetSelect = function (s) { var options = []; for (var _i = 0, _a = this._providers; _i < _a.length; _i++) { var p = _a[_i]; if (s && p.isApplicable && !p.isApplicable(s, this.plugin)) continue; options.push([p.id, p.display.name, p.display.group]); } return param_definition_1.ParamDefinition.Select('auto', options); }; StructureRepresentationBuilder.prototype.getPresetsWithOptions = function (s) { var options = []; var map = Object.create(null); for (var _i = 0, _a = this._providers; _i < _a.length; _i++) { var p = _a[_i]; if (p.isApplicable && !p.isApplicable(s, this.plugin)) continue; options.push([p.id, p.display.name]); map[p.id] = p.params ? param_definition_1.ParamDefinition.Group(p.params(s, this.plugin)) : param_definition_1.ParamDefinition.EmptyGroup(); } if (options.length === 0) return param_definition_1.ParamDefinition.MappedStatic('', { '': param_definition_1.ParamDefinition.EmptyGroup() }); return param_definition_1.ParamDefinition.MappedStatic(options[0][0], map, { options: options }); }; StructureRepresentationBuilder.prototype.registerPreset = function (provider) { if (this.providerMap.has(provider.id)) { throw new Error("Representation provider with id '" + provider.id + "' already registered."); } this._providers.push(provider); this.providerMap.set(provider.id, provider); }; StructureRepresentationBuilder.prototype.unregisterPreset = function (provider) { this.providerMap.delete(provider.id); (0, array_1.arrayRemoveInPlace)(this._providers, provider); }; StructureRepresentationBuilder.prototype.applyPreset = function (parent, providerRef, params) { var _this = this; var _a; var provider = this.resolveProvider(providerRef); if (!provider) return; var state = this.plugin.state.data; var cell = mol_state_1.StateObjectRef.resolveAndCheck(state, parent); if (!cell) { if (!debug_1.isProductionMode) console.warn("Applying structure repr. provider to bad cell."); return; } var pd = ((_a = provider.params) === null || _a === void 0 ? void 0 : _a.call(provider, cell.obj, this.plugin)) || {}; var prms = params || (provider.params ? param_definition_1.ParamDefinition.getDefaultValues(pd) : {}); var defaults = this.plugin.config.get(config_1.PluginConfig.Structure.DefaultRepresentationPresetParams); prms = param_definition_1.ParamDefinition.merge(pd, defaults, prms); var task = mol_task_1.Task.create("" + provider.display.name, function () { return provider.apply(cell, prms, _this.plugin); }); return this.plugin.runTask(task); }; StructureRepresentationBuilder.prototype.addRepresentation = function (structure, props, options) { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var repr, selector; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: repr = this.dataState.build(); selector = this.buildRepresentation(repr, structure, props, options); if (!selector) return [2 /*return*/]; return [4 /*yield*/, repr.commit()]; case 1: _a.sent(); return [2 /*return*/, selector]; } }); }); }; StructureRepresentationBuilder.prototype.buildRepresentation = function (builder, structure, props, options) { var _a, _b; if (!structure) return; var data = (_b = (_a = mol_state_1.StateObjectRef.resolveAndCheck(this.dataState, structure)) === null || _a === void 0 ? void 0 : _a.obj) === null || _b === void 0 ? void 0 : _b.data; if (!data) return; var params = (0, structure_representation_params_1.createStructureRepresentationParams)(this.plugin, data, props); return (options === null || options === void 0 ? void 0 : options.tag) ? builder.to(structure).applyOrUpdateTagged(options.tag, representation_1.StructureRepresentation3D, params, { state: options === null || options === void 0 ? void 0 : options.initialState }).selector : builder.to(structure).apply(representation_1.StructureRepresentation3D, params, { state: options === null || options === void 0 ? void 0 : options.initialState }).selector; }; return StructureRepresentationBuilder; }()); exports.StructureRepresentationBuilder = StructureRepresentationBuilder; //# sourceMappingURL=representation.js.map