12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import Event from '../core/Event'
- import * as THREE from 'three'
- import {animation, init} from './meshAnimation'
- import grentMesh from './grentMesh'
- import FeaturesToAttribute from '../worker/featuresToAttribute.worker'
- import config from './config'
- let $event = new Event()
- let EVENT_ID = 0
- let worker = new FeaturesToAttribute()
- worker.addEventListener('message', listener)
- async function listener(event) {
- let incident = event.data.incident
- let geoJsonArray = event.data.geoJsonArray
- let meshs = geoJsonArray.map(j => {
- let {
- maxHeight,
- animateBuffArrays,
- verticesBuffArrays: verticesArray,
- normalsBuffArrays: normalsArray,
- type
- } = 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
- init(verticesArray, maxHeight)
- animation(mesh, verticesArray, animateBuffArrays, config.stepTotal)
- return mesh
- })
- $event.emit(incident, meshs)
- }
- async function addArchitecture(features) {
- let incident = 'grentAttribute' + EVENT_ID++
- let map = threeLayer.getMap()
- let setting = {
- center: map.getCenter(),
- maxNativeZoom: map.getMaxNativeZoom()
- }
- let promise = new Promise(resolve => {
- $event.once(incident, mesh => {
- resolve(mesh)
- })
- })
- worker.postMessage({
- thing: 'initialAttribute',
- features: JSON.stringify(features),
- map: JSON.stringify(setting),
- incident
- })
- return promise
- }
- export default addArchitecture
|