UNPKG

molstar

Version:

A comprehensive macromolecular library.

83 lines (82 loc) 3.38 kB
/** * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ import { StructureElement, Structure } from '../../structure'; import { StructureSelection } from '../selection'; import { HashSet } from '../../../../mol-data/generic'; import { structureUnion } from './structure-set'; var UniqueStructuresBuilder = /** @class */ (function () { function UniqueStructuresBuilder(source) { this.source = source; this.set = HashSet(Structure.hashCode, Structure.areUnitIdsAndIndicesEqual); this.structures = []; this.allSingletons = true; } UniqueStructuresBuilder.prototype.add = function (s) { if (!s.elementCount) return; if (s.elementCount !== 1) this.allSingletons = false; if (this.set.add(s)) { this.structures[this.structures.length] = s; } }; UniqueStructuresBuilder.prototype.getSelection = function () { if (this.allSingletons) return StructureSelection.Singletons(this.source, structureUnion(this.source, this.structures)); return StructureSelection.Sequence(this.source, this.structures); }; return UniqueStructuresBuilder; }()); export { UniqueStructuresBuilder }; var LinearGroupingBuilder = /** @class */ (function () { function LinearGroupingBuilder(source) { this.source = source; this.builders = []; this.builderMap = new Map(); } LinearGroupingBuilder.prototype.add = function (key, unit, element) { var b = this.builderMap.get(key); if (!b) { b = this.source.subsetBuilder(true); this.builders[this.builders.length] = b; this.builderMap.set(key, b); } b.addToUnit(unit, element); }; LinearGroupingBuilder.prototype.allSingletons = function () { for (var i = 0, _i = this.builders.length; i < _i; i++) { if (this.builders[i].elementCount > 1) return false; } return true; }; LinearGroupingBuilder.prototype.singletonSelection = function () { var builder = this.source.subsetBuilder(true); var loc = StructureElement.Location.create(this.source); for (var i = 0, _i = this.builders.length; i < _i; i++) { this.builders[i].setSingletonLocation(loc); builder.addToUnit(loc.unit.id, loc.element); } return StructureSelection.Singletons(this.source, builder.getStructure()); }; LinearGroupingBuilder.prototype.fullSelection = function () { var structures = new Array(this.builders.length); for (var i = 0, _i = this.builders.length; i < _i; i++) { structures[i] = this.builders[i].getStructure(); } return StructureSelection.Sequence(this.source, structures); }; LinearGroupingBuilder.prototype.getSelection = function () { var len = this.builders.length; if (len === 0) return StructureSelection.Empty(this.source); if (this.allSingletons()) return this.singletonSelection(); return this.fullSelection(); }; return LinearGroupingBuilder; }()); export { LinearGroupingBuilder };