import * as THREE from "../../libs/three.js/build/three.module.js"; import math from './math' import Viewport from '../viewer/Viewport' let texLoader = new THREE.TextureLoader() let circleGeo = new THREE.CircleGeometry(1.45,100); const magDistance_ = 2;//相机离目标位置的距离的分界线,当离得远时要缩小fov以使看到的视野固定(望远镜效果) const radius_ = 0.2; //当相机离目标位置的距离>magDistance_时,希望看到的视野的半径 const maxFov = THREE.Math.radToDeg(Math.atan(radius_ / magDistance_ )) * 2//提前计算出当相机离目标位置的距离{ // 平移、滚轮时更新 if(e.viewport == viewer.mainViewport) this.update() }) this.mesh.layers.set(Potree.config.renderLayers.magnifier); this.overlayMesh.layers.set(Potree.config.renderLayers.magnifier); //this.layers.set(Potree.config.renderLayers.magnifier);//这句在外层写没用 this.dontRender = false viewer.addEventListener('global_drag', (e)=>{//拖拽时不渲染。主要是右键平移时渲染延迟了,会闪烁。 this.dontRender = true }) viewer.addEventListener('global_drop', (e)=>{ this.dontRender = false }) viewer.addEventListener('global_mousemove', (e)=>{ if(e.hoverViewport == viewer.mainViewport){ viewer.updateVisible(this,"atViewport", true) this.update(e.intersectPoint && e.intersectPoint.location) }else{ viewer.updateVisible(this,"atViewport", false) //小地图不显示 } }) /* viewer.addEventListener("beginSplitView",()=>{ this.updateVisible("splitView", false) }) viewer.addEventListener("finishSplitView",()=>{ this.updateVisible("splitView", true) }) */ this.addEventListener("setEnable",(e)=>{ viewer.updateVisible(this, "enable", e.value) //界面开关 }) if(Potree.settings.isOfficial){ viewer.updateVisible(this, "enable", false) }else{ viewer.updateVisible(this, "measure", false) viewer.addEventListener("measureMovePoint",()=>{//测量开始 viewer.updateVisible(this, "measure", true) }) viewer.addEventListener("endMeasureMove",()=>{ viewer.updateVisible(this, "measure", false) }) } } /* updateVisible(reason, ifShow){//当所有加入的条件都不为false时才显示 if(ifShow){ var index = this.unvisibleReasons.indexOf(reason) index > -1 && this.unvisibleReasons.splice(index, 1) if(this.unvisibleReasons.length == 0)this.visible = true }else{ if(!this.unvisibleReasons.includes(reason)) this.unvisibleReasons.push(reason) this.visible = false } } */ update(aimPos){ aimPos = aimPos instanceof THREE.Vector3 ? aimPos : this.aimPos if(!aimPos || !this.visible)return //console.log(aimPos) //相机位置 var playerCamera = viewer.scene.getActiveCamera() var playerPos = playerCamera.position;//viewer.scene.view.getPivot() var dis = playerPos.distanceTo(aimPos); /* var vec = playerPos.clone().sub(aimPos).normalize().multiplyScalar(dis > magDistance_ ? magDistance_ : magDistance_/2) this.camera.position.copy(aimPos.clone().add(vec)) this.camera.lookAt(aimPos) */ if(dis