molstar
Version:
A comprehensive macromolecular library.
156 lines • 8.09 kB
JavaScript
"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