UNPKG

@giro3d/giro3d

Version:

A JS/WebGL framework for 3D geospatial data visualization

66 lines (51 loc) 1.75 kB
/* * Copyright (c) 2015-2018, IGN France. * Copyright (c) 2018-2026, Giro3D team. * SPDX-License-Identifier: MIT */ 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 { public map: Map; public segments = 32; /** * @param map - The map. * @param parentGui - Parent GUI * @param instance - The instance */ public 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, 'stitching') .name('Stitching') .onChange(() => this.notify(map)); } public updateSegments(v: number): void { 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;