From 9d87ae427c51e1139183aafeba319df5eb1b8b20 Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Wed, 14 Nov 2018 15:48:02 -0800 Subject: [PATCH] iso value simplification --- src/apps/structure-info/volume.ts | 2 +- .../geometry/direct-volume/direct-volume.ts | 7 +++---- .../structure/visual/gaussian-density-volume.ts | 2 +- src/mol-repr/volume/isosurface-mesh.ts | 9 ++++----- src/mol-repr/volume/representation.ts | 15 ++------------- 5 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/apps/structure-info/volume.ts b/src/apps/structure-info/volume.ts index d9921d7a4..2faaf7086 100644 --- a/src/apps/structure-info/volume.ts +++ b/src/apps/structure-info/volume.ts @@ -38,7 +38,7 @@ function print(data: Volume) { } async function doMesh(data: Volume, filename: string) { - const mesh = await Task.create('', runtime => createVolumeIsosurface({ runtime }, data.volume, { isoValueAbsolute: VolumeIsoValue.calcAbsolute(data.volume.dataStats, 1.5) } )).run(); + const mesh = await Task.create('', runtime => createVolumeIsosurface({ runtime }, data.volume, { isoValue: VolumeIsoValue.calcAbsolute(data.volume.dataStats, 1.5) } )).run(); console.log({ vc: mesh.vertexCount, tc: mesh.triangleCount }); // Export the mesh in OBJ format. diff --git a/src/mol-geo/geometry/direct-volume/direct-volume.ts b/src/mol-geo/geometry/direct-volume/direct-volume.ts index 919699272..47527c3d2 100644 --- a/src/mol-geo/geometry/direct-volume/direct-volume.ts +++ b/src/mol-geo/geometry/direct-volume/direct-volume.ts @@ -70,8 +70,7 @@ export namespace DirectVolume { export const Params = { ...Geometry.Params, - isoValueAbsolute: PD.Range('Iso Value Absolute', '', 0.22, -1, 1, 0.01), - isoValueRelative: PD.Range('Iso Value Relative', '', 2, -10, 10, 0.1), + isoValue: PD.Range('Iso Value', '', 0.22, -1, 1, 0.01), renderMode: PD.Select('Render Mode', '', 'isosurface', RenderModeOptions), controlPoints: PD.Text('Control Points', '', '0.19:0.1, 0.2:0.5, 0.21:0.1, 0.4:0.3'), } @@ -109,7 +108,7 @@ export namespace DirectVolume { elements: ValueCell.create(VolumeBox.indices as Uint32Array), boundingSphere: ValueCell.create(boundingSphere), - uIsoValue: ValueCell.create(props.isoValueAbsolute), + uIsoValue: ValueCell.create(props.isoValue), uBboxMin: bboxMin, uBboxMax: bboxMax, uBboxSize: bboxSize, @@ -136,7 +135,7 @@ export namespace DirectVolume { ValueCell.update(values.boundingSphere, boundingSphere) } - ValueCell.updateIfChanged(values.uIsoValue, props.isoValueAbsolute) + ValueCell.updateIfChanged(values.uIsoValue, props.isoValue) ValueCell.updateIfChanged(values.uAlpha, props.alpha) ValueCell.updateIfChanged(values.dUseFog, props.useFog) ValueCell.updateIfChanged(values.dRenderMode, props.renderMode) diff --git a/src/mol-repr/structure/visual/gaussian-density-volume.ts b/src/mol-repr/structure/visual/gaussian-density-volume.ts index 5a9f0a681..6e94b12ee 100644 --- a/src/mol-repr/structure/visual/gaussian-density-volume.ts +++ b/src/mol-repr/structure/visual/gaussian-density-volume.ts @@ -45,7 +45,7 @@ export function GaussianDensityVolumeVisual(): UnitsVisual<GaussianDensityVolume if (newProps.radiusOffset !== currentProps.radiusOffset) state.createGeometry = true if (newProps.smoothness !== currentProps.smoothness) { state.createGeometry = true - newProps.isoValueAbsolute = Math.exp(-newProps.smoothness) + newProps.isoValue = Math.exp(-newProps.smoothness) } if (newProps.useGpu !== currentProps.useGpu) state.createGeometry = true if (newProps.ignoreCache !== currentProps.ignoreCache) state.createGeometry = true diff --git a/src/mol-repr/volume/isosurface-mesh.ts b/src/mol-repr/volume/isosurface-mesh.ts index f7d77406d..c7d6e015f 100644 --- a/src/mol-repr/volume/isosurface-mesh.ts +++ b/src/mol-repr/volume/isosurface-mesh.ts @@ -20,14 +20,14 @@ import { VisualContext } from 'mol-repr/representation'; import { Theme, ThemeRegistryContext } from 'mol-theme/theme'; interface VolumeIsosurfaceProps { - isoValueAbsolute: number + isoValue: number } export async function createVolumeIsosurface(ctx: VisualContext, volume: VolumeData, props: VolumeIsosurfaceProps, mesh?: Mesh) { ctx.runtime.update({ message: 'Marching cubes...' }); const surface = await computeMarchingCubesMesh({ - isoLevel: props.isoValueAbsolute, + isoLevel: props.isoValue, scalarField: volume.data }, mesh).runAsChild(ctx.runtime); @@ -41,8 +41,7 @@ export async function createVolumeIsosurface(ctx: VisualContext, volume: VolumeD export const IsosurfaceParams = { ...Mesh.Params, - isoValueAbsolute: PD.Range('Iso Value Absolute', '', 0.22, -1, 1, 0.01), - isoValueRelative: PD.Range('Iso Value Relative', '', 2, -10, 10, 0.1), + isoValue: PD.Range('Iso Value', '', 0.22, -1, 1, 0.01), } export type IsosurfaceParams = typeof IsosurfaceParams export function getIsosurfaceParams(ctx: ThemeRegistryContext, volume: VolumeData) { @@ -56,7 +55,7 @@ export function IsosurfaceVisual(): VolumeVisual<IsosurfaceParams> { getLoci: () => EmptyLoci, mark: () => false, setUpdateState: (state: VisualUpdateState, newProps: PD.Values<IsosurfaceParams>, currentProps: PD.Values<IsosurfaceParams>) => { - if (newProps.isoValueAbsolute !== currentProps.isoValueAbsolute) state.createGeometry = true + if (newProps.isoValue !== currentProps.isoValue) state.createGeometry = true }, createRenderObject: async (ctx: VisualContext, geometry: Mesh, locationIt: LocationIterator, theme: Theme, props: PD.Values<IsosurfaceParams>) => { const transform = createIdentityTransform() diff --git a/src/mol-repr/volume/representation.ts b/src/mol-repr/volume/representation.ts index d974b4e49..907d7cfbd 100644 --- a/src/mol-repr/volume/representation.ts +++ b/src/mol-repr/volume/representation.ts @@ -6,7 +6,7 @@ import { Task } from 'mol-task' import { Representation, Visual, RepresentationContext, VisualContext, RepresentationProvider, RepresentationParamsGetter } from '../representation'; -import { VolumeData, VolumeIsoValue } from 'mol-model/volume'; +import { VolumeData } from 'mol-model/volume'; import { Loci, EmptyLoci, isEveryLoci } from 'mol-model/loci'; import { Geometry, updateRenderableState } from 'mol-geo/geometry/geometry'; import { ParamDefinition as PD } from 'mol-util/param-definition'; @@ -52,11 +52,6 @@ export function VolumeVisual<P extends VolumeParams>(builder: VolumeVisualGeomet async function create(ctx: VisualContext, volume: VolumeData, theme: Theme, props: Partial<PD.Values<P>> = {}) { currentProps = Object.assign({}, defaultProps, props) - if (props.isoValueRelative) { - currentProps.isoValueAbsolute = VolumeIsoValue.calcAbsolute(currentVolume.dataStats, props.isoValueRelative) - // console.log('create props.isoValueRelative', props.isoValueRelative, currentProps.isoValueAbsolute, currentVolume.dataStats) - } - geometry = await createGeometry(ctx, volume, currentProps, geometry) locationIt = LocationIterator(1, 1, () => NullLocation) renderObject = await createRenderObject(ctx, geometry, locationIt, theme, currentProps) @@ -66,11 +61,6 @@ export function VolumeVisual<P extends VolumeParams>(builder: VolumeVisualGeomet if (!renderObject) return const newProps = Object.assign({}, currentProps, props) - if (props.isoValueRelative) { - newProps.isoValueAbsolute = VolumeIsoValue.calcAbsolute(currentVolume.dataStats, props.isoValueRelative) - // console.log('update props.isoValueRelative', props.isoValueRelative, newProps.isoValueAbsolute, currentVolume.dataStats) - } - VisualUpdateState.reset(updateState) setUpdateState(updateState, newProps, currentProps) @@ -145,8 +135,7 @@ export type VolumeRepresentationProvider<P extends VolumeParams> = Representatio export const VolumeParams = { ...Geometry.Params, - isoValueAbsolute: PD.Range('Iso Value Absolute', '', 0.22, -1, 1, 0.01), - isoValueRelative: PD.Range('Iso Value Relative', '', 2, -10, 10, 0.1), + isoValue: PD.Range('Iso Value', '', 0.22, -1, 1, 0.01), } export type VolumeParams = typeof VolumeParams -- GitLab