|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
//相机控制
|
|
|
|
|
import * as THREE from "three";
|
|
|
|
|
import * as THREE from 'three';
|
|
|
|
|
import { Viewer } from '../GraphicsSystem/Viewer';
|
|
|
|
|
import { PlaneExt } from '../Geometry/Plane';
|
|
|
|
|
import { Line3 } from 'three';
|
|
|
|
@ -32,6 +32,7 @@ export class CameraControls
|
|
|
|
|
m_DollyEnd: THREE.Vector2 = new THREE.Vector2();
|
|
|
|
|
|
|
|
|
|
m_KeyDown = new Map<string, boolean>();
|
|
|
|
|
m_MouseDown = new Map<MouseKey, boolean>();
|
|
|
|
|
|
|
|
|
|
m_bKeyCtrlIsDown: boolean;
|
|
|
|
|
//状态
|
|
|
|
@ -60,14 +61,21 @@ export class CameraControls
|
|
|
|
|
this.m_domElement.addEventListener('touchend', this.onTouchEnd, false);
|
|
|
|
|
this.m_domElement.addEventListener('touchmove', this.onTouchMove, false);
|
|
|
|
|
|
|
|
|
|
window.addEventListener("blur", () =>
|
|
|
|
|
{
|
|
|
|
|
this.m_KeyDown.clear();
|
|
|
|
|
})
|
|
|
|
|
window.addEventListener("blur", this.onBlur, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 窗体失去焦点时.
|
|
|
|
|
*
|
|
|
|
|
* @memberof CameraControls
|
|
|
|
|
*/
|
|
|
|
|
onBlur = () =>
|
|
|
|
|
{
|
|
|
|
|
this.m_KeyDown.clear();
|
|
|
|
|
this.m_MouseDown.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//触屏
|
|
|
|
|
//触屏开始事件
|
|
|
|
|
onTouchStart = (event: TouchEvent) =>
|
|
|
|
|
{
|
|
|
|
|
this.m_StartChickPoint.set(event.touches[0].pageX, event.touches[0].pageY, 0);
|
|
|
|
@ -136,35 +144,14 @@ export class CameraControls
|
|
|
|
|
{
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
let key: MouseKey = event.button;
|
|
|
|
|
this.m_MouseDown.set(key, true);
|
|
|
|
|
this.m_StartChickPoint.set(event.offsetX, event.offsetY, 0);
|
|
|
|
|
switch (key)
|
|
|
|
|
{
|
|
|
|
|
case MouseKey.Left:
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case MouseKey.Middle:
|
|
|
|
|
{
|
|
|
|
|
if (this.m_KeyDown.get("Alt"))
|
|
|
|
|
{
|
|
|
|
|
this.m_State = CameraControlState.Rotate;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.m_State = CameraControlState.Pan;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case MouseKey.Right:
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
onMouseUp = (event: MouseEvent) =>
|
|
|
|
|
{
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
this.m_State = CameraControlState.Null;
|
|
|
|
|
this.m_MouseDown.set(event.button, false);
|
|
|
|
|
}
|
|
|
|
|
onMouseMove = (event: MouseEvent) =>
|
|
|
|
|
{
|
|
|
|
@ -175,27 +162,23 @@ export class CameraControls
|
|
|
|
|
changeVec.subVectors(this.m_EndChickPoint, this.m_StartChickPoint);
|
|
|
|
|
this.m_StartChickPoint.copy(this.m_EndChickPoint);
|
|
|
|
|
|
|
|
|
|
if (this.m_KeyDown.get("Alt") && this.m_State == CameraControlState.Rotate)
|
|
|
|
|
if (this.m_MouseDown.get(MouseKey.Middle))
|
|
|
|
|
{
|
|
|
|
|
this.m_Viewer.Rotate(changeVec);
|
|
|
|
|
}
|
|
|
|
|
switch (this.m_State)
|
|
|
|
|
{
|
|
|
|
|
case CameraControlState.Pan:
|
|
|
|
|
{
|
|
|
|
|
this.m_Viewer.Pan(changeVec);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case CameraControlState.Rotate:
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case CameraControlState.Scale:
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (this.m_KeyDown.get("Alt"))
|
|
|
|
|
{
|
|
|
|
|
this.m_Viewer.Rotate(changeVec);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.m_Viewer.Pan(changeVec);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 鼠标滚轮事件
|
|
|
|
|
*
|
|
|
|
|
* @memberof CameraControls
|
|
|
|
|
*/
|
|
|
|
|
onMouseWheel = (event: WheelEvent) =>
|
|
|
|
|
{
|
|
|
|
|
event.preventDefault();
|
|
|
|
@ -207,7 +190,8 @@ export class CameraControls
|
|
|
|
|
if (event.deltaY < 0)
|
|
|
|
|
{
|
|
|
|
|
this.m_Viewer.Zoom(0.6, pt);
|
|
|
|
|
} else if (event.deltaY > 0)
|
|
|
|
|
}
|
|
|
|
|
else if (event.deltaY > 0)
|
|
|
|
|
{
|
|
|
|
|
this.m_Viewer.Zoom(1.4, pt);
|
|
|
|
|
}
|
|
|
|
|