@giro3d/giro3d
Version:
A JS/WebGL framework for 3D geospatial data visualization
76 lines (59 loc) • 1.97 kB
text/typescript
/*
* Copyright (c) 2015-2018, IGN France.
* Copyright (c) 2018-2026, Giro3D team.
* SPDX-License-Identifier: MIT
*/
import type GUI from 'lil-gui';
import type Instance from '../core/Instance';
import ColorMap from '../core/ColorMap';
import Panel from './Panel';
type Mode = 'Elevation' | 'Slope' | 'Aspect';
const modes: Mode[] = ['Elevation', 'Slope', 'Aspect'];
const DEFAULT_COLORMAP = new ColorMap({ colors: [], min: 0, max: 1 });
/**
* Inspector for a {@link ColorMap}.
*/
class ColorMapInspector extends Panel {
private readonly _colorMapFn: () => ColorMap | null;
public get colorMap(): ColorMap {
return this._colorMapFn() ?? DEFAULT_COLORMAP;
}
public get mode(): Mode {
return modes[this.colorMap.mode - 1];
}
public set mode(v: Mode) {
this.colorMap.mode = modes.indexOf(v) + 1;
}
/**
* @param gui - The GUI.
* @param instance - The Giro3D instance.
* @param colorMapFn - The color map to inspect.
*/
public constructor(
gui: GUI,
instance: Instance,
colorMapFn: () => ColorMap | null,
notify: () => void,
) {
super(gui, instance, 'Color map');
this._colorMapFn = colorMapFn;
this.addController(this.colorMap, 'active').name('Enabled').onChange(notify);
this.addController(this, 'mode', modes).name('Mode').onChange(notify);
this.addController(this.colorMap, 'min')
.name('Lower bound')
.min(-8000)
.max(8000)
.onChange(notify);
this.addController(this.colorMap, 'max')
.name('Upper bound')
.min(-8000)
.max(8000)
.onChange(notify);
}
public override updateControllers(): void {
const disabled = this._colorMapFn() == null;
this._controllers.forEach(c => c.disable(disabled));
super.updateControllers();
}
}
export default ColorMapInspector;