|
@@ -227,12 +227,14 @@ export default class ConvertViews extends THREE.EventDispatcher{
|
|
|
this.sourceApp = sourceApp
|
|
|
this.targetApp = targetApp
|
|
|
let data = this.getCameraData(sourceApp)
|
|
|
-
|
|
|
+ let modelSize = new THREE.Vector3
|
|
|
bimViewer = this.bimViewer = targetApp.viewer
|
|
|
- bimViewer.setNavigationMode(targetApp.Glodon.Bimface.Viewer.NavigationMode3D.Walk)
|
|
|
- //bimViewer.setFlySpeedRate(3)
|
|
|
-
|
|
|
-
|
|
|
+ let modelBound = bimViewer.getViewer().modelManager.boundingBox
|
|
|
+ modelBound.getSize(modelSize)
|
|
|
+ bimViewer.setNavigationMode(targetApp.Glodon.Bimface.Viewer.NavigationMode3D.Walk)
|
|
|
+ bimViewer.setFlySpeedRate(THREE.MathUtils.clamp( modelSize.length() / 10, 1, 6)) //会被限制
|
|
|
+ //bimViewer.getViewer().setWalkSpeedRate(2)
|
|
|
+
|
|
|
let camera = bimViewer.getViewer().camera
|
|
|
if(camera.fov != data.fov){
|
|
|
camera.fov = data.fov
|
|
@@ -301,6 +303,23 @@ export default class ConvertViews extends THREE.EventDispatcher{
|
|
|
needBindEvent && this.bindCamEvent()
|
|
|
this.loaded = true
|
|
|
this.receive(data)
|
|
|
+ }else{
|
|
|
+
|
|
|
+ bimViewer.getViewer().animator.setDuration(60)//滚轮缩放时长,原先:1000
|
|
|
+
|
|
|
+ let baseSpeed = THREE.MathUtils.clamp( modelSize.length() / 10, 1, 10)
|
|
|
+
|
|
|
+ let dom = bimViewer.getDomElement();
|
|
|
+ dom.addEventListener('mousewheel', e => {
|
|
|
+ if(e.wheelDelta == 0)return //mac
|
|
|
+ let info = bimViewer.getCameraStatus()
|
|
|
+ let dis = modelBound.distanceToPoint(info.position)
|
|
|
+ let speed = baseSpeed + dis / 10
|
|
|
+ console.log('speed', speed)
|
|
|
+
|
|
|
+ this.bimFlyTo({forwardDis: e.wheelDelta > 0 ? speed : -speed})
|
|
|
+ })
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
@@ -312,7 +331,28 @@ export default class ConvertViews extends THREE.EventDispatcher{
|
|
|
leftCanChangePos(){
|
|
|
return this.sourceApp.sceneType == 'laser' && this.sourceApp.Potree.settings.displayMode != 'showPanos'
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+ bimFlyTo(data){
|
|
|
+ let info = bimViewer.getCameraStatus()
|
|
|
+ let dir = new THREE.Vector3().subVectors(info.target, info.position).normalize()
|
|
|
+ let position = data.position
|
|
|
+ if(!position){
|
|
|
+ position = new THREE.Vector3().addVectors(info.position, dir.clone().multiplyScalar(data.forwardDis))//forwardDis:前进距离
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ let target = new THREE.Vector3().addVectors(position, dir)
|
|
|
+ let msg = {
|
|
|
+ position,
|
|
|
+ target,
|
|
|
+ up: new THREE.Vector3(0,0,1),
|
|
|
+ //前三个缺一不可
|
|
|
+
|
|
|
+ }
|
|
|
+ bimViewer.setCameraStatus(msg)
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
bindCamEvent(){//传递到另一边的dom
|
|
|
this.lockCamera(true)
|