|
@@ -20,21 +20,21 @@ import { NullLocation } from 'mol-model/location';
|
|
|
import { Lines } from 'mol-geo/geometry/lines/lines';
|
|
|
|
|
|
const IsoValueParam = PD.Conditioned(
|
|
|
- VolumeIsoValue.relative(VolumeData.Empty.dataStats, 2),
|
|
|
+ VolumeIsoValue.relative(2),
|
|
|
{
|
|
|
'absolute': PD.Converted(
|
|
|
- (v: VolumeIsoValue) => VolumeIsoValue.toAbsolute(v).absoluteValue,
|
|
|
- (v: number) => VolumeIsoValue.absolute(VolumeData.Empty.dataStats, v),
|
|
|
+ (v: VolumeIsoValue) => VolumeIsoValue.toAbsolute(v, VolumeData.Empty.dataStats).absoluteValue,
|
|
|
+ (v: number) => VolumeIsoValue.absolute(v),
|
|
|
PD.Numeric(0.5, { min: -1, max: 1, step: 0.01 })
|
|
|
),
|
|
|
'relative': PD.Converted(
|
|
|
- (v: VolumeIsoValue) => VolumeIsoValue.toRelative(v).relativeValue,
|
|
|
- (v: number) => VolumeIsoValue.relative(VolumeData.Empty.dataStats, v),
|
|
|
+ (v: VolumeIsoValue) => VolumeIsoValue.toRelative(v, VolumeData.Empty.dataStats).relativeValue,
|
|
|
+ (v: number) => VolumeIsoValue.relative(v),
|
|
|
PD.Numeric(2, { min: -10, max: 10, step: 0.01 })
|
|
|
)
|
|
|
},
|
|
|
(v: VolumeIsoValue) => v.kind === 'absolute' ? 'absolute' : 'relative',
|
|
|
- (v: VolumeIsoValue, c: 'absolute' | 'relative') => c === 'absolute' ? VolumeIsoValue.toAbsolute(v) : VolumeIsoValue.toRelative(v)
|
|
|
+ (v: VolumeIsoValue, c: 'absolute' | 'relative') => c === 'absolute' ? VolumeIsoValue.toAbsolute(v, VolumeData.Empty.dataStats) : VolumeIsoValue.toRelative(v, VolumeData.Empty.dataStats)
|
|
|
)
|
|
|
type IsoValueParam = typeof IsoValueParam
|
|
|
|
|
@@ -50,7 +50,7 @@ export async function createVolumeIsosurfaceMesh(ctx: VisualContext, volume: Vol
|
|
|
ctx.runtime.update({ message: 'Marching cubes...' });
|
|
|
|
|
|
const surface = await computeMarchingCubesMesh({
|
|
|
- isoLevel: VolumeIsoValue.toAbsolute(props.isoValue).absoluteValue,
|
|
|
+ isoLevel: VolumeIsoValue.toAbsolute(props.isoValue, volume.dataStats).absoluteValue,
|
|
|
scalarField: volume.data
|
|
|
}, mesh).runAsChild(ctx.runtime);
|
|
|
|
|
@@ -88,7 +88,7 @@ export async function createVolumeIsosurfaceWireframe(ctx: VisualContext, volume
|
|
|
ctx.runtime.update({ message: 'Marching cubes...' });
|
|
|
|
|
|
const wireframe = await computeMarchingCubesLines({
|
|
|
- isoLevel: VolumeIsoValue.toAbsolute(props.isoValue).absoluteValue,
|
|
|
+ isoLevel: VolumeIsoValue.toAbsolute(props.isoValue, volume.dataStats).absoluteValue,
|
|
|
scalarField: volume.data
|
|
|
}, lines).runAsChild(ctx.runtime)
|
|
|
|
|
@@ -135,23 +135,24 @@ export const IsosurfaceParams = {
|
|
|
export type IsosurfaceParams = typeof IsosurfaceParams
|
|
|
export function getIsosurfaceParams(ctx: ThemeRegistryContext, volume: VolumeData) {
|
|
|
const p = PD.clone(IsosurfaceParams)
|
|
|
- const { min, max, mean, sigma } = volume.dataStats
|
|
|
+ const stats = volume.dataStats
|
|
|
+ const { min, max, mean, sigma } = stats
|
|
|
p.isoValue = PD.Conditioned(
|
|
|
- VolumeIsoValue.relative(volume.dataStats, 2),
|
|
|
+ VolumeIsoValue.relative(2),
|
|
|
{
|
|
|
'absolute': PD.Converted(
|
|
|
- (v: VolumeIsoValue) => VolumeIsoValue.toAbsolute(v).absoluteValue,
|
|
|
- (v: number) => VolumeIsoValue.absolute(volume.dataStats, v),
|
|
|
+ (v: VolumeIsoValue) => VolumeIsoValue.toAbsolute(v, stats).absoluteValue,
|
|
|
+ (v: number) => VolumeIsoValue.absolute(v),
|
|
|
PD.Numeric(mean, { min, max, step: sigma / 100 })
|
|
|
),
|
|
|
'relative': PD.Converted(
|
|
|
- (v: VolumeIsoValue) => VolumeIsoValue.toRelative(v).relativeValue,
|
|
|
- (v: number) => VolumeIsoValue.relative(volume.dataStats, v),
|
|
|
+ (v: VolumeIsoValue) => VolumeIsoValue.toRelative(v, stats).relativeValue,
|
|
|
+ (v: number) => VolumeIsoValue.relative(v),
|
|
|
PD.Numeric(2, { min: -10, max: 10, step: 0.001 })
|
|
|
)
|
|
|
},
|
|
|
(v: VolumeIsoValue) => v.kind === 'absolute' ? 'absolute' : 'relative',
|
|
|
- (v: VolumeIsoValue, c: 'absolute' | 'relative') => c === 'absolute' ? VolumeIsoValue.toAbsolute(v) : VolumeIsoValue.toRelative(v)
|
|
|
+ (v: VolumeIsoValue, c: 'absolute' | 'relative') => c === 'absolute' ? VolumeIsoValue.toAbsolute(v, stats) : VolumeIsoValue.toRelative(v, stats)
|
|
|
)
|
|
|
return p
|
|
|
}
|