diff --git a/src/apps/structure-info/volume.ts b/src/apps/structure-info/volume.ts index d9921d7a4003693e1827c0db22399a3e6d2c73dd..2faaf7086b40f47dd7e77753997805e0d8cbbb81 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 9196992727d879ac5cb66b068762c3892a7102c2..47527c3d250e794a0c47382472f0b4de8eacbdf0 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 5a9f0a681f94d5e0eba5256173afa50a9637396d..6e94b12ee8b734d4271ee1db078b56d91b26346d 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 f7d77406db34a471304bce59a473e1b5100d10ab..c7d6e015fef774d04cecc1707360351cca2fc87f 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 d974b4e49bb964d45ffae23b7e639a7c4bc2fd9d..907d7cfbd8320a523248e7b604139f7843e9dd45 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