diff --git a/src/mol-model/structure/structure/element/group.ts b/src/mol-model/structure/structure/element/group.ts index ec7544470f6cf9c29a19ad606a83f904adf61934..0dcb551536ab54acacbecdccf9f2fbaed3d5ee26 100644 --- a/src/mol-model/structure/structure/element/group.ts +++ b/src/mol-model/structure/structure/element/group.ts @@ -5,7 +5,7 @@ */ import { OrderedSet } from 'mol-data/int' -import { Lookup3D, GridLookup3D } from 'mol-math/geometry'; +import { Lookup3D } from 'mol-math/geometry' import Unit from '../unit' interface ElementGroup { @@ -64,17 +64,6 @@ namespace ElementGroup { return createNew(set); } - export function getLookup3d(unit: Unit, group: ElementGroup) { - if (group.__lookup3d__) return group.__lookup3d__; - if (Unit.isAtomic(unit)) { - const { x, y, z } = unit.model.conformation; - group.__lookup3d__ = GridLookup3D({ x, y, z, indices: group.elements }); - return group.__lookup3d__; - } - - throw 'not implemented'; - } - let _id = 0; function nextKey() { const ret = _id; diff --git a/src/mol-model/structure/structure/unit.ts b/src/mol-model/structure/structure/unit.ts index 76accfeaf0fd69c0f787362deb99388daf9c1d4d..4489f88a8b8043848a6ec74c4bb8dac7dca51c10 100644 --- a/src/mol-model/structure/structure/unit.ts +++ b/src/mol-model/structure/structure/unit.ts @@ -7,6 +7,7 @@ import { SymmetryOperator } from 'mol-math/geometry/symmetry-operator' import ElementGroup from './element/group' import { Model } from '../model' +import { GridLookup3D } from 'mol-math/geometry' // A building block of a structure that corresponds to an atomic or a coarse grained representation // 'conveniently grouped together'. @@ -83,6 +84,17 @@ namespace Unit { case Kind.Coarse: return createCoarse(unit.model, SymmetryOperator.compose(unit.operator, operator), unit.fullGroup); } } + + export function getLookup3d(unit: Unit, group: ElementGroup) { + if (group.__lookup3d__) return group.__lookup3d__; + if (Unit.isAtomic(unit)) { + const { x, y, z } = unit.model.conformation; + group.__lookup3d__ = GridLookup3D({ x, y, z, indices: group.elements }); + return group.__lookup3d__; + } + + throw 'not implemented'; + } } export default Unit; \ No newline at end of file diff --git a/src/mol-model/structure/structure/util/lookup3d.ts b/src/mol-model/structure/structure/util/lookup3d.ts index 7434852bcb15496839eb74017aa6212041dbd12d..cd15fa37297207e6bfbd0fcf38069256ba69e812 100644 --- a/src/mol-model/structure/structure/util/lookup3d.ts +++ b/src/mol-model/structure/structure/util/lookup3d.ts @@ -7,7 +7,7 @@ import Structure from '../structure' import Element from '../element' import { Lookup3D, GridLookup3D, Result, Box3D, Sphere3D } from 'mol-math/geometry'; -import { ElementGroup, ElementSet } from '../../structure'; +import { ElementSet, Unit } from '../../structure'; import { Vec3 } from 'mol-math/linear-algebra'; import { OrderedSet } from 'mol-data/int'; import { computeStructureBoundary } from './boundary'; @@ -35,7 +35,7 @@ namespace StructureLookup3D { if (!unit.operator.isIdentity) { Vec3.transformMat4(this.pivot, this.pivot, unit.operator.inverse); } - const groupLookup = ElementGroup.getLookup3d(unit, group); + const groupLookup = Unit.getLookup3d(unit, group); const groupResult = groupLookup.find(this.pivot[0], this.pivot[1], this.pivot[2], radius); for (let j = 0, _j = groupResult.count; j < _j; j++) { Result.add(this.result, Element.create(unitId, groupResult.indices[j]), groupResult.squaredDistances[j]); @@ -59,7 +59,7 @@ namespace StructureLookup3D { if (!unit.operator.isIdentity) { Vec3.transformMat4(this.pivot, this.pivot, unit.operator.inverse); } - const groupLookup = ElementGroup.getLookup3d(unit, group); + const groupLookup = Unit.getLookup3d(unit, group); if (groupLookup.check(this.pivot[0], this.pivot[1], this.pivot[2], radius)) return true; } @@ -80,7 +80,7 @@ namespace StructureLookup3D { for (let i = 0; i < unitCount; i++) { const group = ElementSet.unitGetByIndex(elements, i); const unit = units[ElementSet.unitGetId(elements, i)]; - const lookup = ElementGroup.getLookup3d(unit, group); + const lookup = Unit.getLookup3d(unit, group); const s = lookup.boundary.sphere; Vec3.transformMat4(center, s.center, unit.operator.matrix);