@giro3d/giro3d
Version:
A JS/WebGL framework for 3D geospatial data visualization
61 lines (48 loc) • 1.76 kB
text/typescript
import type GUI from 'lil-gui';
import { MathUtils } from 'three';
import type Instance from '../core/Instance';
import type Map from '../entities/Map';
import Panel from './Panel';
class MapTerrainPanel extends Panel {
map: Map;
segments = 32;
/**
* @param map - The map.
* @param parentGui - Parent GUI
* @param instance - The instance
*/
constructor(map: Map, parentGui: GUI, instance: Instance) {
super(parentGui, instance, 'Terrain');
this.map = map;
this.segments = map.segments;
this.addController(this.map.terrain, 'enabled')
.name('Deformation')
.onChange(() => this.notify(map));
this.addController(this.map, 'wireframe')
.name('Wireframe')
.onChange(() => this.notify());
this.addController(this, 'segments')
.name('Tile subdivisions')
.min(2)
.max(128)
.onChange(v => this.updateSegments(v));
this.addController(this.map, 'showColliderMeshes')
.name('Show collider meshes')
.onChange(() => this.notify());
this.addController(this.map.terrain, 'enableCPUTerrain').name('CPU terrain');
this.addController(this.map.terrain, 'stitching')
.name('Stitching')
.onChange(() => this.notify(map));
this.addController(this.map.geometryPool, 'size').name('Geometry pool');
}
updateSegments(v: number) {
const val = MathUtils.floorPowerOfTwo(v);
this.map.segments = val;
this.segments = val;
if (this.map.segments !== val) {
this.map.segments = val;
this.notify(this.map);
}
}
}
export default MapTerrainPanel;