import * as THREE from 'three' import { animation, init } from './meshAnimation' import grentMesh from './grentMesh' import config from './config' import { Marker } from 'maptalks' import { mapGoto } from './statusManagement' function addText(args) { var point = new Marker(args.point, { properties: { altitude: args.height + 5 }, visible: true, editable: true, cursor: 'pointer', shadowBlur: 0, shadowColor: 'black', draggable: false, dragShadow: false, // display a shadow during dragging drawOnAxis: null, // force dragging stick on a axis, can be: x, y symbol: { 'textFaceName': 'sans-serif', 'textName': args.name, 'textFill': '#646464', 'textHorizontalAlignment': 'center', 'textSize': 12 } } ); point.on('click', () => { mapGoto({ center: args.point, zoom: 19 }) }) return point } async function listener(event) { let geoJsonArray = event.data.geoJsonArray geoJsonArray.forEach(j => { let { maxHeight, animateBuffArrays, fids, verticesBuffArrays: verticesArray, normalsBuffArrays: normalsArray, type, texts } = j let geometry = new THREE.BufferGeometry() geometry.addAttribute('position', new THREE.BufferAttribute(verticesArray, 3)); geometry.addAttribute('normal', new THREE.BufferAttribute(normalsArray, 3)); var mesh = grentMesh(geometry, type); threeLayer.getScene().add(mesh) mesh.maxHeight = maxHeight mesh.fids = fids init(verticesArray, maxHeight) animation(mesh, verticesArray, animateBuffArrays, config.stepTotal) mesh.texts = texts.map(addText) vector.addGeometry(mesh.texts, { enableAltitude: true, // enable altitude altitudeProperty: 'altitude' }) console.log(mesh.texts[0], mesh.texts[0].getSize()) }) } export default listener