UNPKG

@vuemap/vue-amap-extra

Version:

@vuemap/vue-amap扩展库,包含threejs相关图层

69 lines (66 loc) 2.07 kB
import { Vector3 } from 'three'; import { CircleSweepPass } from './CircleSweepPass.mjs'; var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; class ThreePassCircle { constructor(layer, options) { __publicField(this, "object"); // Light __publicField(this, "layer"); // threejs的图层对象 __publicField(this, "shaderMaterial"); __publicField(this, "frame", -1); __publicField(this, "maxRadius"); this.maxRadius = options.maxRadius; this.layer = layer; const center = this.layer.convertLngLat(options.position); const vp = new Vector3(center[0], center[1], 0); const shaderPass = new CircleSweepPass(this.layer.getRender(), this.layer.getScene(), this.layer.getCamera(), { center: vp, innerRadius: 0, outerRadius: 10 }); this.object = shaderPass; this.layer.addPass(shaderPass); this.start(); } start() { if (this.object.depthMaterial.uniforms.innerRadius.value > 100) { this.object.depthMaterial.uniforms.innerRadius.value = 0; this.object.depthMaterial.uniforms.outerRadius.value = 10; } this.object.depthMaterial.uniforms.innerRadius.value += 0.4; this.object.depthMaterial.uniforms.outerRadius.value += 0.4; this.refresh(); this.frame = requestAnimationFrame(() => { this.start(); }); } stop() { cancelAnimationFrame(this.frame); } refresh() { this.layer.update(); } remove() { if (this.object) { this.layer.removePass(this.object); } } destroy() { this.stop(); if (this.object) { if (this.object.dispose) { this.object.dispose(); } this.object = null; this.layer = null; } } } export { ThreePassCircle as default }; //# sourceMappingURL=ThreePassCircle.mjs.map