Skip to content
Snippets Groups Projects
Commit e7defe52 authored by Alexander Rose's avatar Alexander Rose
Browse files

fixed isoValue equality checking

parent 00978862
Branches
Tags
No related merge requests found
......@@ -6,7 +6,6 @@
import { SpacegroupCell, Box3D } from 'mol-math/geometry'
import { Tensor, Mat4, Vec3 } from 'mol-math/linear-algebra'
import { shallowEqual } from 'mol-util/object';
/** The basic unit cell that contains the data. */
interface VolumeData {
......@@ -48,9 +47,8 @@ namespace VolumeIsoValue {
export type Relative = Readonly<{ kind: 'relative', relativeValue: number }>
export type Absolute = Readonly<{ kind: 'absolute', absoluteValue: number }>
export function areSame(a: VolumeIsoValue, b: VolumeIsoValue) {
// TODO: this should compare values converted to absolute value
return shallowEqual(a, b);
export function areSame(a: VolumeIsoValue, b: VolumeIsoValue, stats: VolumeData['dataStats']) {
return toAbsolute(a, stats).absoluteValue === toAbsolute(b, stats).absoluteValue
}
export function absolute(value: number): Absolute { return { kind: 'absolute', absoluteValue: value }; }
......
......@@ -96,9 +96,8 @@ export function IsosurfaceMeshVisual(): VolumeVisual<IsosurfaceMeshParams> {
createLocationIterator: (volume: VolumeData) => LocationIterator(1, 1, () => NullLocation),
getLoci: () => EmptyLoci,
eachLocation: () => false,
setUpdateState: (state: VisualUpdateState, newProps: PD.Values<IsosurfaceMeshParams>, currentProps: PD.Values<IsosurfaceMeshParams>) => {
// TODO: should convert to same type of isoValue 1st
if (!VolumeIsoValue.areSame(newProps.isoValue, currentProps.isoValue)) state.createGeometry = true
setUpdateState: (state: VisualUpdateState, volume: VolumeData, newProps: PD.Values<IsosurfaceMeshParams>, currentProps: PD.Values<IsosurfaceMeshParams>) => {
if (!VolumeIsoValue.areSame(newProps.isoValue, currentProps.isoValue, volume.dataStats)) state.createGeometry = true
},
geometryUtils: Mesh.Utils
})
......@@ -133,9 +132,8 @@ export function IsosurfaceWireframeVisual(): VolumeVisual<IsosurfaceWireframePar
createLocationIterator: (volume: VolumeData) => LocationIterator(1, 1, () => NullLocation),
getLoci: () => EmptyLoci,
eachLocation: () => false,
setUpdateState: (state: VisualUpdateState, newProps: PD.Values<IsosurfaceWireframeParams>, currentProps: PD.Values<IsosurfaceWireframeParams>) => {
// TODO: should convert to same type of isoValue 1st
if (!VolumeIsoValue.areSame(newProps.isoValue, currentProps.isoValue)) state.createGeometry = true
setUpdateState: (state: VisualUpdateState, volume: VolumeData, newProps: PD.Values<IsosurfaceWireframeParams>, currentProps: PD.Values<IsosurfaceWireframeParams>) => {
if (!VolumeIsoValue.areSame(newProps.isoValue, currentProps.isoValue, volume.dataStats)) state.createGeometry = true
},
geometryUtils: Lines.Utils
})
......
......@@ -44,7 +44,7 @@ interface VolumeVisualBuilder<P extends VolumeParams, G extends Geometry> {
createLocationIterator(volume: VolumeData): LocationIterator
getLoci(pickingId: PickingId, id: number): Loci
eachLocation(loci: Loci, apply: (interval: Interval) => boolean): boolean
setUpdateState(state: VisualUpdateState, newProps: PD.Values<P>, currentProps: PD.Values<P>, newTheme: Theme, currentTheme: Theme): void
setUpdateState(state: VisualUpdateState, volume: VolumeData, newProps: PD.Values<P>, currentProps: PD.Values<P>, newTheme: Theme, currentTheme: Theme): void
}
interface VolumeVisualGeometryBuilder<P extends VolumeParams, G extends Geometry> extends VolumeVisualBuilder<P, G> {
......@@ -91,7 +91,7 @@ export function VolumeVisual<G extends Geometry, P extends VolumeParams & Geomet
return
}
setUpdateState(updateState, newProps, currentProps, newTheme, currentTheme)
setUpdateState(updateState, volume, newProps, currentProps, newTheme, currentTheme)
if (!ColorTheme.areEqual(theme.color, currentTheme.color)) updateState.updateColor = true
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment