From 6e5c20f442af01a85aff27e2bad956280532630d Mon Sep 17 00:00:00 2001 From: Alexander Rose <alexander.rose@weirdbyte.de> Date: Sat, 19 Mar 2022 12:21:55 -0700 Subject: [PATCH] improve surface bounding-sphere - use exact max radius to expand structure/unit sphere --- CHANGELOG.md | 2 ++ src/mol-math/geometry/common.ts | 5 ++-- src/mol-math/geometry/gaussian-density.ts | 4 ++-- src/mol-math/geometry/gaussian-density/cpu.ts | 4 ++-- src/mol-math/geometry/gaussian-density/gpu.ts | 15 ++++++------ src/mol-math/geometry/molecular-surface.ts | 4 ++-- .../visual/gaussian-density-volume.ts | 5 ++-- .../structure/visual/gaussian-surface-mesh.ts | 16 ++++++------- .../visual/gaussian-surface-wireframe.ts | 7 +++--- .../visual/molecular-surface-mesh.ts | 6 ++--- .../visual/molecular-surface-wireframe.ts | 8 +++---- src/mol-repr/structure/visual/util/common.ts | 24 +------------------ 12 files changed, 40 insertions(+), 60 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb3b9cfd4..1d991f9b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Note that since we don't clearly distinguish between a public and private interf ## [Unreleased] +- Fix issues with bounding-sphere & color-smoothing (mostly for small geometries) + ## [v3.4.0] - 2022-03-13 - Fix handling of mmcif with empty ``label_*`` fields diff --git a/src/mol-math/geometry/common.ts b/src/mol-math/geometry/common.ts index 01b0e804a..0651bc448 100644 --- a/src/mol-math/geometry/common.ts +++ b/src/mol-math/geometry/common.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> * @author Alexander Rose <alexander.rose@weirdbyte.de> @@ -26,7 +26,8 @@ export type DensityData = { transform: Mat4, field: Tensor, idField: Tensor, - resolution: number + resolution: number, + maxRadius: number, } export type DensityTextureData = { diff --git a/src/mol-math/geometry/gaussian-density.ts b/src/mol-math/geometry/gaussian-density.ts index 44d36fa44..05ad13cd1 100644 --- a/src/mol-math/geometry/gaussian-density.ts +++ b/src/mol-math/geometry/gaussian-density.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ @@ -21,12 +21,12 @@ export type GaussianDensityProps = typeof DefaultGaussianDensityProps export type GaussianDensityData = { radiusFactor: number - resolution: number } & DensityData export type GaussianDensityTextureData = { radiusFactor: number resolution: number + maxRadius: number } & DensityTextureData export function computeGaussianDensity(position: PositionData, box: Box3D, radius: (index: number) => number, props: GaussianDensityProps) { diff --git a/src/mol-math/geometry/gaussian-density/cpu.ts b/src/mol-math/geometry/gaussian-density/cpu.ts index 50a33fbeb..faa293f84 100644 --- a/src/mol-math/geometry/gaussian-density/cpu.ts +++ b/src/mol-math/geometry/gaussian-density/cpu.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ @@ -129,5 +129,5 @@ export async function GaussianDensityCPU(ctx: RuntimeContext, position: Position Mat4.fromScaling(transform, Vec3.create(resolution, resolution, resolution)); Mat4.setTranslation(transform, expandedBox.min); - return { field, idField, transform, radiusFactor: 1, resolution }; + return { field, idField, transform, radiusFactor: 1, resolution, maxRadius }; } \ No newline at end of file diff --git a/src/mol-math/geometry/gaussian-density/gpu.ts b/src/mol-math/geometry/gaussian-density/gpu.ts index d53c1f658..5d3214248 100644 --- a/src/mol-math/geometry/gaussian-density/gpu.ts +++ b/src/mol-math/geometry/gaussian-density/gpu.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2017-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2017-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> * @author Michael Krone <michael.krone@uni-tuebingen.de> @@ -70,12 +70,12 @@ export function GaussianDensityGPU(position: PositionData, box: Box3D, radius: ( // it's faster than texture3d // console.time('GaussianDensityTexture2d') const tmpTexture = getTexture('tmp', webgl, 'image-uint8', 'rgba', 'ubyte', 'linear'); - const { scale, bbox, texture, gridDim, gridTexDim, radiusFactor, resolution } = calcGaussianDensityTexture2d(webgl, position, box, radius, false, props, tmpTexture); + const { scale, bbox, texture, gridDim, gridTexDim, radiusFactor, resolution, maxRadius } = calcGaussianDensityTexture2d(webgl, position, box, radius, false, props, tmpTexture); // webgl.waitForGpuCommandsCompleteSync() // console.timeEnd('GaussianDensityTexture2d') const { field, idField } = fieldFromTexture2d(webgl, texture, gridDim, gridTexDim); - return { field, idField, transform: getTransform(scale, bbox), radiusFactor, resolution }; + return { field, idField, transform: getTransform(scale, bbox), radiusFactor, resolution, maxRadius }; } export function GaussianDensityTexture(webgl: WebGLContext, position: PositionData, box: Box3D, radius: (index: number) => number, props: GaussianDensityProps, oldTexture?: Texture): GaussianDensityTextureData { @@ -92,8 +92,8 @@ export function GaussianDensityTexture3d(webgl: WebGLContext, position: Position return finalizeGaussianDensityTexture(calcGaussianDensityTexture3d(webgl, position, box, radius, props, oldTexture)); } -function finalizeGaussianDensityTexture({ texture, scale, bbox, gridDim, gridTexDim, gridTexScale, radiusFactor, resolution }: _GaussianDensityTextureData): GaussianDensityTextureData { - return { transform: getTransform(scale, bbox), texture, bbox, gridDim, gridTexDim, gridTexScale, radiusFactor, resolution }; +function finalizeGaussianDensityTexture({ texture, scale, bbox, gridDim, gridTexDim, gridTexScale, radiusFactor, resolution, maxRadius }: _GaussianDensityTextureData): GaussianDensityTextureData { + return { transform: getTransform(scale, bbox), texture, bbox, gridDim, gridTexDim, gridTexScale, radiusFactor, resolution, maxRadius }; } function getTransform(scale: Vec3, bbox: Box3D) { @@ -114,6 +114,7 @@ type _GaussianDensityTextureData = { gridTexScale: Vec2 radiusFactor: number resolution: number + maxRadius: number } function calcGaussianDensityTexture2d(webgl: WebGLContext, position: PositionData, box: Box3D, radius: (index: number) => number, powerOfTwo: boolean, props: GaussianDensityProps, texture?: Texture): _GaussianDensityTextureData { @@ -198,7 +199,7 @@ function calcGaussianDensityTexture2d(webgl: WebGLContext, position: PositionDat // printTexture(webgl, minDistTex, 0.75); - return { texture, scale, bbox: expandedBox, gridDim: dim, gridTexDim, gridTexScale, radiusFactor, resolution }; + return { texture, scale, bbox: expandedBox, gridDim: dim, gridTexDim, gridTexScale, radiusFactor, resolution, maxRadius }; } function calcGaussianDensityTexture3d(webgl: WebGLContext, position: PositionData, box: Box3D, radius: (index: number) => number, props: GaussianDensityProps, texture?: Texture): _GaussianDensityTextureData { @@ -254,7 +255,7 @@ function calcGaussianDensityTexture3d(webgl: WebGLContext, position: PositionDat setupGroupIdRendering(webgl, renderable); render(texture, false); - return { texture, scale, bbox: expandedBox, gridDim: dim, gridTexDim: dim, gridTexScale, radiusFactor, resolution }; + return { texture, scale, bbox: expandedBox, gridDim: dim, gridTexDim: dim, gridTexScale, radiusFactor, resolution, maxRadius }; } // diff --git a/src/mol-math/geometry/molecular-surface.ts b/src/mol-math/geometry/molecular-surface.ts index b361c100b..3b43a5c18 100644 --- a/src/mol-math/geometry/molecular-surface.ts +++ b/src/mol-math/geometry/molecular-surface.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2019-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Fred Ludlow <fred.ludlow@gmail.com> * @author Alexander Rose <alexander.rose@weirdbyte.de> @@ -370,5 +370,5 @@ export async function calcMolecularSurface(ctx: RuntimeContext, position: Requir Mat4.fromScaling(transform, Vec3.create(resolution, resolution, resolution)); Mat4.setTranslation(transform, expandedBox.min); // console.log({ field, idField, transform, updateChunk }) - return { field, idField, transform, resolution }; + return { field, idField, transform, resolution, maxRadius }; } \ No newline at end of file diff --git a/src/mol-repr/structure/visual/gaussian-density-volume.ts b/src/mol-repr/structure/visual/gaussian-density-volume.ts index e29b13d76..21deb9c37 100644 --- a/src/mol-repr/structure/visual/gaussian-density-volume.ts +++ b/src/mol-repr/structure/visual/gaussian-density-volume.ts @@ -16,7 +16,6 @@ import { Mat4, Vec3 } from '../../../mol-math/linear-algebra'; import { eachElement, eachSerialElement, ElementIterator, getElementLoci, getSerialElementLoci } from './util/element'; import { Sphere3D } from '../../../mol-math/geometry'; import { UnitsDirectVolumeParams, UnitsVisual, UnitsDirectVolumeVisual } from '../units-visual'; -import { getStructureExtraRadius, getUnitExtraRadius } from './util/common'; async function createGaussianDensityVolume(ctx: VisualContext, structure: Structure, theme: Theme, props: GaussianDensityProps, directVolume?: DirectVolume): Promise<DirectVolume> { const { runtime, webgl } = ctx; @@ -34,7 +33,7 @@ async function createGaussianDensityVolume(ctx: VisualContext, structure: Struct const axisOrder = Vec3.create(0, 1, 2); const vol = DirectVolume.create(bbox, gridDim, transform, unitToCartn, cellDim, texture, stats, true, axisOrder, directVolume); - const sphere = Sphere3D.expand(Sphere3D(), structure.boundary.sphere, props.radiusOffset + getStructureExtraRadius(structure)); + const sphere = Sphere3D.expand(Sphere3D(), structure.boundary.sphere, densityTextureData.maxRadius); vol.setBoundingSphere(sphere); return vol; @@ -90,7 +89,7 @@ async function createUnitsGaussianDensityVolume(ctx: VisualContext, unit: Unit, const axisOrder = Vec3.create(0, 1, 2); const vol = DirectVolume.create(bbox, gridDim, transform, unitToCartn, cellDim, texture, stats, true, axisOrder, directVolume); - const sphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, props.radiusOffset + getUnitExtraRadius(unit)); + const sphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, densityTextureData.maxRadius); vol.setBoundingSphere(sphere); return vol; diff --git a/src/mol-repr/structure/visual/gaussian-surface-mesh.ts b/src/mol-repr/structure/visual/gaussian-surface-mesh.ts index a9ca1e085..f5116e435 100644 --- a/src/mol-repr/structure/visual/gaussian-surface-mesh.ts +++ b/src/mol-repr/structure/visual/gaussian-surface-mesh.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ @@ -18,7 +18,7 @@ import { TextureMesh } from '../../../mol-geo/geometry/texture-mesh/texture-mesh import { extractIsosurface } from '../../../mol-gl/compute/marching-cubes/isosurface'; import { Sphere3D } from '../../../mol-math/geometry'; import { ComplexVisual, ComplexMeshParams, ComplexMeshVisual, ComplexTextureMeshVisual, ComplexTextureMeshParams } from '../complex-visual'; -import { getUnitExtraRadius, getStructureExtraRadius, getVolumeSliceInfo, StructureGroup } from './util/common'; +import { getVolumeSliceInfo, StructureGroup } from './util/common'; import { WebGLContext } from '../../../mol-gl/webgl/context'; import { MeshValues } from '../../../mol-gl/renderable/mesh'; import { TextureMeshValues } from '../../../mol-gl/renderable/texture-mesh'; @@ -89,7 +89,7 @@ type GaussianSurfaceMeta = { async function createGaussianSurfaceMesh(ctx: VisualContext, unit: Unit, structure: Structure, theme: Theme, props: GaussianDensityProps, mesh?: Mesh): Promise<Mesh> { const { smoothness } = props; - const { transform, field, idField, radiusFactor, resolution } = await computeUnitGaussianDensity(structure, unit, theme.size, props).runInContext(ctx.runtime); + const { transform, field, idField, radiusFactor, resolution, maxRadius } = await computeUnitGaussianDensity(structure, unit, theme.size, props).runInContext(ctx.runtime); const params = { isoLevel: Math.exp(-smoothness) / radiusFactor, @@ -102,7 +102,7 @@ async function createGaussianSurfaceMesh(ctx: VisualContext, unit: Unit, structu Mesh.transform(surface, transform); if (ctx.webgl && !ctx.webgl.isWebGL2) Mesh.uniformTriangleGroup(surface); - const sphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, props.radiusOffset + getUnitExtraRadius(unit)); + const sphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, maxRadius); surface.setBoundingSphere(sphere); return surface; @@ -150,7 +150,7 @@ export function GaussianSurfaceMeshVisual(materialId: number): UnitsVisual<Gauss async function createStructureGaussianSurfaceMesh(ctx: VisualContext, structure: Structure, theme: Theme, props: GaussianDensityProps, mesh?: Mesh): Promise<Mesh> { const { smoothness } = props; - const { transform, field, idField, radiusFactor, resolution } = await computeStructureGaussianDensity(structure, theme.size, props).runInContext(ctx.runtime); + const { transform, field, idField, radiusFactor, resolution, maxRadius } = await computeStructureGaussianDensity(structure, theme.size, props).runInContext(ctx.runtime); const params = { isoLevel: Math.exp(-smoothness) / radiusFactor, @@ -163,7 +163,7 @@ async function createStructureGaussianSurfaceMesh(ctx: VisualContext, structure: Mesh.transform(surface, transform); if (ctx.webgl && !ctx.webgl.isWebGL2) Mesh.uniformTriangleGroup(surface); - const sphere = Sphere3D.expand(Sphere3D(), structure.boundary.sphere, props.radiusOffset + getStructureExtraRadius(structure)); + const sphere = Sphere3D.expand(Sphere3D(), structure.boundary.sphere, maxRadius); surface.setBoundingSphere(sphere); return surface; @@ -235,7 +235,7 @@ async function createGaussianSurfaceTextureMesh(ctx: VisualContext, unit: Unit, const buffer = textureMesh?.doubleBuffer.get(); const gv = extractIsosurface(ctx.webgl, densityTextureData.texture, densityTextureData.gridDim, densityTextureData.gridTexDim, densityTextureData.gridTexScale, densityTextureData.transform, isoLevel, false, true, axisOrder, buffer?.vertex, buffer?.group, buffer?.normal); - const boundingSphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, props.radiusOffset + getStructureExtraRadius(structure)); + const boundingSphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, densityTextureData.maxRadius); const surface = TextureMesh.create(gv.vertexCount, 1, gv.vertexTexture, gv.groupTexture, gv.normalTexture, boundingSphere, textureMesh); (surface.meta as GaussianSurfaceMeta).resolution = densityTextureData.resolution; @@ -312,7 +312,7 @@ async function createStructureGaussianSurfaceTextureMesh(ctx: VisualContext, str const buffer = textureMesh?.doubleBuffer.get(); const gv = extractIsosurface(ctx.webgl, densityTextureData.texture, densityTextureData.gridDim, densityTextureData.gridTexDim, densityTextureData.gridTexScale, densityTextureData.transform, isoLevel, false, true, axisOrder, buffer?.vertex, buffer?.group, buffer?.normal); - const boundingSphere = Sphere3D.expand(Sphere3D(), structure.boundary.sphere, props.radiusOffset + getStructureExtraRadius(structure)); + const boundingSphere = Sphere3D.expand(Sphere3D(), structure.boundary.sphere, densityTextureData.maxRadius); const surface = TextureMesh.create(gv.vertexCount, 1, gv.vertexTexture, gv.groupTexture, gv.normalTexture, boundingSphere, textureMesh); (surface.meta as GaussianSurfaceMeta).resolution = densityTextureData.resolution; diff --git a/src/mol-repr/structure/visual/gaussian-surface-wireframe.ts b/src/mol-repr/structure/visual/gaussian-surface-wireframe.ts index d62f849ba..aa5cddb98 100644 --- a/src/mol-repr/structure/visual/gaussian-surface-wireframe.ts +++ b/src/mol-repr/structure/visual/gaussian-surface-wireframe.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ @@ -15,11 +15,10 @@ import { UnitsLinesParams, UnitsVisual, UnitsLinesVisual } from '../units-visual import { ElementIterator, getElementLoci, eachElement } from './util/element'; import { VisualUpdateState } from '../../util'; import { Sphere3D } from '../../../mol-math/geometry'; -import { getUnitExtraRadius } from './util/common'; async function createGaussianWireframe(ctx: VisualContext, unit: Unit, structure: Structure, theme: Theme, props: GaussianDensityProps, lines?: Lines): Promise<Lines> { const { smoothness } = props; - const { transform, field, idField } = await computeUnitGaussianDensity(structure, unit, theme.size, props).runInContext(ctx.runtime); + const { transform, field, idField, maxRadius } = await computeUnitGaussianDensity(structure, unit, theme.size, props).runInContext(ctx.runtime); const params = { isoLevel: Math.exp(-smoothness), @@ -30,7 +29,7 @@ async function createGaussianWireframe(ctx: VisualContext, unit: Unit, structure Lines.transform(wireframe, transform); - const sphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, props.radiusOffset + getUnitExtraRadius(unit)); + const sphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, maxRadius); wireframe.setBoundingSphere(sphere); return wireframe; diff --git a/src/mol-repr/structure/visual/molecular-surface-mesh.ts b/src/mol-repr/structure/visual/molecular-surface-mesh.ts index 306bccb0c..173a5181c 100644 --- a/src/mol-repr/structure/visual/molecular-surface-mesh.ts +++ b/src/mol-repr/structure/visual/molecular-surface-mesh.ts @@ -15,7 +15,7 @@ import { computeUnitMolecularSurface } from './util/molecular-surface'; import { computeMarchingCubesMesh } from '../../../mol-geo/util/marching-cubes/algorithm'; import { ElementIterator, getElementLoci, eachElement } from './util/element'; import { VisualUpdateState } from '../../util'; -import { CommonSurfaceParams, getUnitExtraRadius } from './util/common'; +import { CommonSurfaceParams } from './util/common'; import { Sphere3D } from '../../../mol-math/geometry'; import { MeshValues } from '../../../mol-gl/renderable/mesh'; import { Texture } from '../../../mol-gl/webgl/texture'; @@ -40,7 +40,7 @@ type MolecularSurfaceMeta = { // async function createMolecularSurfaceMesh(ctx: VisualContext, unit: Unit, structure: Structure, theme: Theme, props: MolecularSurfaceMeshProps, mesh?: Mesh): Promise<Mesh> { - const { transform, field, idField, resolution } = await computeUnitMolecularSurface(structure, unit, theme.size, props).runInContext(ctx.runtime); + const { transform, field, idField, resolution, maxRadius } = await computeUnitMolecularSurface(structure, unit, theme.size, props).runInContext(ctx.runtime); const params = { isoLevel: props.probeRadius, @@ -57,7 +57,7 @@ async function createMolecularSurfaceMesh(ctx: VisualContext, unit: Unit, struct Mesh.transform(surface, transform); if (ctx.webgl && !ctx.webgl.isWebGL2) Mesh.uniformTriangleGroup(surface); - const sphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, getUnitExtraRadius(unit)); + const sphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, maxRadius); surface.setBoundingSphere(sphere); (surface.meta as MolecularSurfaceMeta).resolution = resolution; diff --git a/src/mol-repr/structure/visual/molecular-surface-wireframe.ts b/src/mol-repr/structure/visual/molecular-surface-wireframe.ts index 516d62fb7..f3a2c0778 100644 --- a/src/mol-repr/structure/visual/molecular-surface-wireframe.ts +++ b/src/mol-repr/structure/visual/molecular-surface-wireframe.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2019-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ @@ -15,7 +15,7 @@ import { computeUnitMolecularSurface, MolecularSurfaceProps } from './util/molec import { computeMarchingCubesLines } from '../../../mol-geo/util/marching-cubes/algorithm'; import { ElementIterator, getElementLoci, eachElement } from './util/element'; import { VisualUpdateState } from '../../util'; -import { CommonSurfaceParams, getUnitExtraRadius } from './util/common'; +import { CommonSurfaceParams } from './util/common'; import { Sphere3D } from '../../../mol-math/geometry'; export const MolecularSurfaceWireframeParams = { @@ -29,7 +29,7 @@ export type MolecularSurfaceWireframeParams = typeof MolecularSurfaceWireframePa // async function createMolecularSurfaceWireframe(ctx: VisualContext, unit: Unit, structure: Structure, theme: Theme, props: MolecularSurfaceProps, lines?: Lines): Promise<Lines> { - const { transform, field, idField } = await computeUnitMolecularSurface(structure, unit, theme.size, props).runInContext(ctx.runtime); + const { transform, field, idField, maxRadius } = await computeUnitMolecularSurface(structure, unit, theme.size, props).runInContext(ctx.runtime); const params = { isoLevel: props.probeRadius, scalarField: field, @@ -39,7 +39,7 @@ async function createMolecularSurfaceWireframe(ctx: VisualContext, unit: Unit, s Lines.transform(wireframe, transform); - const sphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, props.probeRadius + getUnitExtraRadius(unit)); + const sphere = Sphere3D.expand(Sphere3D(), unit.boundary.sphere, maxRadius); wireframe.setBoundingSphere(sphere); return wireframe; diff --git a/src/mol-repr/structure/visual/util/common.ts b/src/mol-repr/structure/visual/util/common.ts index cb2655645..c0eaf6269 100644 --- a/src/mol-repr/structure/visual/util/common.ts +++ b/src/mol-repr/structure/visual/util/common.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ @@ -298,25 +298,3 @@ export function isTrace(unit: Unit, element: ElementIndex) { if (atomId === 'CA' || atomId === 'BB' || atomId === 'P') return true; return false; } - -export function getUnitExtraRadius(unit: Unit) { - if (Unit.isAtomic(unit)) return 4; - - let max = 0; - const { elements } = unit; - const { r } = unit.conformation; - for (let i = 0, _i = elements.length; i < _i; i++) { - const _r = r(elements[i]); - if (_r > max) max = _r; - } - return max + 1; -} - -export function getStructureExtraRadius(structure: Structure) { - let max = 0; - for (const ug of structure.unitSymmetryGroups) { - const r = getUnitExtraRadius(ug.units[0]); - if (r > max) max = r; - } - return max; -} \ No newline at end of file -- GitLab