diff --git a/src/cli/structure-info/volume.ts b/src/cli/structure-info/volume.ts index 23bf618afea516c5b252966060b0a7082f04d646..c8ebd5aeee8c658099c0108dada139ab86df0f02 100644 --- a/src/cli/structure-info/volume.ts +++ b/src/cli/structure-info/volume.ts @@ -38,7 +38,7 @@ function print(volume: Volume) { } async function doMesh(volume: Volume, filename: string) { - const mesh = await Task.create('', runtime => createVolumeIsosurfaceMesh({ runtime }, volume, Theme.createEmpty(), { isoValue: Volume.IsoValue.absolute(1.5) })).run(); + const mesh = await Task.create('', runtime => createVolumeIsosurfaceMesh({ runtime }, volume, Theme.createEmpty(), { isoValue: Volume.IsoValue.absolute(1.5), pickingGranularity: 'voxels' })).run(); console.log({ vc: mesh.vertexCount, tc: mesh.triangleCount }); // Export the mesh in OBJ format. diff --git a/src/mol-repr/volume/isosurface.ts b/src/mol-repr/volume/isosurface.ts index d7b1f068e1cb1cb5f96cfd68726188f7a769fca0..9ad3da6efe26683bc7500a5678e99b5ab708a3bd 100644 --- a/src/mol-repr/volume/isosurface.ts +++ b/src/mol-repr/volume/isosurface.ts @@ -32,7 +32,8 @@ import { BaseGeometry } from '../../mol-geo/geometry/base'; import { ValueCell } from '../../mol-util/value-cell'; export const VolumeIsosurfaceParams = { - isoValue: Volume.IsoValueParam + isoValue: Volume.IsoValueParam, + pickingGranularity: PD.Select<'voxels' | 'surfaces'>('voxels', [['voxels', 'Voxels'], ['surfaces', 'Surfaces']]), }; export type VolumeIsosurfaceParams = typeof VolumeIsosurfaceParams export type VolumeIsosurfaceProps = PD.Values<VolumeIsosurfaceParams> @@ -67,7 +68,11 @@ function getLoci(volume: Volume, props: VolumeIsosurfaceProps) { function getIsosurfaceLoci(pickingId: PickingId, volume: Volume, props: VolumeIsosurfaceProps, id: number) { const { objectId, groupId } = pickingId; if (id === objectId) { - return Volume.Cell.Loci(volume, Interval.ofSingleton(groupId as Volume.CellIndex)); + if (props.pickingGranularity === 'surfaces') { + return Volume.Isosurface.Loci(volume, props.isoValue); + } else { + return Volume.Cell.Loci(volume, Interval.ofSingleton(groupId as Volume.CellIndex)); + } } return EmptyLoci; }