UNPKG

molstar

Version:

A comprehensive macromolecular library.

140 lines 6.09 kB
"use strict"; /** * Copyright (c) 2019-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Transparency = void 0; var loci_1 = require("../mol-model/loci"); var structure_1 = require("../mol-model/structure"); var script_1 = require("../mol-script/script"); function Transparency(kind, layers) { return { kind: kind, layers: layers }; } exports.Transparency = Transparency; (function (Transparency) { Transparency.Empty = { kind: 'empty-loci', layers: [] }; function areEqual(tA, tB) { if (tA.layers.length === 0 && tB.layers.length === 0) return true; if (tA.layers.length !== tB.layers.length) return false; for (var i = 0, il = tA.layers.length; i < il; ++i) { if (tA.layers[i].value !== tB.layers[i].value) return false; if (!loci_1.Loci.areEqual(tA.layers[i].loci, tB.layers[i].loci)) return false; } return true; } Transparency.areEqual = areEqual; function isEmpty(transparency) { return transparency.layers.length === 0; } Transparency.isEmpty = isEmpty; function remap(transparency, structure) { if (transparency.kind === 'element-loci') { var layers = []; for (var _i = 0, _a = transparency.layers; _i < _a.length; _i++) { var layer = _a[_i]; var loci = structure_1.StructureElement.Loci.remap(layer.loci, structure); if (!structure_1.StructureElement.Loci.isEmpty(loci)) { layers.push({ loci: loci, value: layer.value }); } } return { kind: 'element-loci', layers: layers }; } else { return transparency; } } Transparency.remap = remap; function merge(transparency) { if (isEmpty(transparency)) return transparency; if (transparency.kind === 'element-loci') { var structure = transparency.layers[0].loci.structure; var map = new Map(); var shadowed = structure_1.StructureElement.Loci.none(structure); for (var i = 0, il = transparency.layers.length; i < il; ++i) { var _a = transparency.layers[il - i - 1], loci = _a.loci, value = _a.value; // process from end loci = structure_1.StructureElement.Loci.subtract(loci, shadowed); shadowed = structure_1.StructureElement.Loci.union(loci, shadowed); if (!structure_1.StructureElement.Loci.isEmpty(loci)) { if (map.has(value)) { loci = structure_1.StructureElement.Loci.union(loci, map.get(value)); } map.set(value, loci); } } var layers_1 = []; map.forEach(function (loci, value) { layers_1.push({ loci: loci, value: value }); }); return { kind: 'element-loci', layers: layers_1 }; } else { return transparency; } } Transparency.merge = merge; function filter(transparency, filter) { if (isEmpty(transparency)) return transparency; if (transparency.kind === 'element-loci') { var structure = transparency.layers[0].loci.structure; var layers = []; for (var _i = 0, _a = transparency.layers; _i < _a.length; _i++) { var layer = _a[_i]; var loci = layer.loci, value = layer.value; // filter by first map to the `filter` structure and // then map back to the original structure of the transparency loci var filtered = structure_1.StructureElement.Loci.remap(loci, filter); loci = structure_1.StructureElement.Loci.remap(filtered, structure); if (!structure_1.StructureElement.Loci.isEmpty(loci)) { layers.push({ loci: loci, value: value }); } } return { kind: 'element-loci', layers: layers }; } else { return transparency; } } Transparency.filter = filter; function ofScript(scriptLayers, structure) { var layers = []; for (var i = 0, il = scriptLayers.length; i < il; ++i) { var _a = scriptLayers[i], script = _a.script, value = _a.value; var loci = script_1.Script.toLoci(script, structure); if (!structure_1.StructureElement.Loci.isEmpty(loci)) { layers.push({ loci: loci, value: value }); } } return { kind: 'element-loci', layers: layers }; } Transparency.ofScript = ofScript; function ofBundle(bundleLayers, structure) { var layers = []; for (var i = 0, il = bundleLayers.length; i < il; ++i) { var _a = bundleLayers[i], bundle = _a.bundle, value = _a.value; var loci = structure_1.StructureElement.Bundle.toLoci(bundle, structure.root); layers.push({ loci: loci, value: value }); } return { kind: 'element-loci', layers: layers }; } Transparency.ofBundle = ofBundle; function toBundle(transparency) { var layers = []; for (var i = 0, il = transparency.layers.length; i < il; ++i) { var _a = transparency.layers[i], loci = _a.loci, value = _a.value; var bundle = structure_1.StructureElement.Bundle.fromLoci(loci); layers.push({ bundle: bundle, value: value }); } return { kind: 'element-loci', layers: layers }; } Transparency.toBundle = toBundle; })(Transparency || (Transparency = {})); exports.Transparency = Transparency; //# sourceMappingURL=transparency.js.map