|
|
|
@ -14,8 +14,8 @@ enum CameraControlsEnabled
|
|
|
|
|
Pan = 4,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//控制状态
|
|
|
|
|
enum State
|
|
|
|
|
//相机控制状态
|
|
|
|
|
enum CameraControlState
|
|
|
|
|
{
|
|
|
|
|
Null = 0, Pan = 1, Rotate = 2, Scale = 3
|
|
|
|
|
}
|
|
|
|
@ -26,25 +26,18 @@ export class CameraControls
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
m_domElement: HTMLElement;//HTMLDocument
|
|
|
|
|
m_window: Window;
|
|
|
|
|
|
|
|
|
|
//起始点击.
|
|
|
|
|
//起始点击
|
|
|
|
|
m_StartChickPoint: THREE.Vector3 = new THREE.Vector3();
|
|
|
|
|
m_EndChickPoint: THREE.Vector3 = new THREE.Vector3();
|
|
|
|
|
m_bKeyCtrlIsDown: boolean;
|
|
|
|
|
//状态
|
|
|
|
|
m_State: State = State.Null;
|
|
|
|
|
m_SelectIng: boolean = false;
|
|
|
|
|
m_State: CameraControlState = CameraControlState.Null;
|
|
|
|
|
m_Viewer: Viewer;
|
|
|
|
|
|
|
|
|
|
constructor(viewer: Viewer, domElement?: HTMLElement, docWindow?: Window)
|
|
|
|
|
{
|
|
|
|
|
this.m_Viewer = viewer;
|
|
|
|
|
this.m_domElement = domElement;
|
|
|
|
|
if (docWindow)
|
|
|
|
|
{
|
|
|
|
|
this.m_window = docWindow;
|
|
|
|
|
}
|
|
|
|
|
this.RegisterEvent();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -57,7 +50,6 @@ export class CameraControls
|
|
|
|
|
this.m_domElement.addEventListener("mouseup", this.onMouseUp, false)
|
|
|
|
|
window.addEventListener("keydown", this.onKeyDown, false);
|
|
|
|
|
window.addEventListener("keyup", this.onKeyUp, false);
|
|
|
|
|
|
|
|
|
|
this.m_domElement.addEventListener('wheel', this.onMouseWheel, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -72,28 +64,17 @@ export class CameraControls
|
|
|
|
|
{
|
|
|
|
|
case MouseKey.Left:
|
|
|
|
|
{
|
|
|
|
|
if (!this.m_SelectIng)
|
|
|
|
|
{
|
|
|
|
|
ed.m_SelectCss.SetStart(event.clientX, event.clientY)
|
|
|
|
|
ed.m_SelectCss.SetEnd(event.clientX, event.clientY)
|
|
|
|
|
ed.m_SelectCss.Show()
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ed.m_SelectCss.Hide()
|
|
|
|
|
}
|
|
|
|
|
this.m_SelectIng = !this.m_SelectIng;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case MouseKey.Middle:
|
|
|
|
|
{
|
|
|
|
|
if (this["Shift"])
|
|
|
|
|
{
|
|
|
|
|
this.m_State = State.Rotate;
|
|
|
|
|
this.m_State = CameraControlState.Rotate;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.m_State = State.Pan;
|
|
|
|
|
this.m_State = CameraControlState.Pan;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
@ -106,46 +87,33 @@ export class CameraControls
|
|
|
|
|
onMouseUp = (event: MouseEvent) =>
|
|
|
|
|
{
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
this.m_State = State.Null;
|
|
|
|
|
this.m_State = CameraControlState.Null;
|
|
|
|
|
}
|
|
|
|
|
onMouseMove = (event: MouseEvent) =>
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
event.preventDefault();
|
|
|
|
|
this.m_EndChickPoint.set(event.offsetX, event.offsetY, 0);
|
|
|
|
|
|
|
|
|
|
let wpt = this.m_EndChickPoint.clone();
|
|
|
|
|
this.m_Viewer.ScreenToWorld(wpt);
|
|
|
|
|
let plan = new PlaneExt(new THREE.Vector3(0, 0, 1));
|
|
|
|
|
let rs = new THREE.Vector3();
|
|
|
|
|
plan.intersectLine(new Line3(wpt, wpt.clone().sub(this.m_Viewer.m_Direction)), rs, true);
|
|
|
|
|
//Send
|
|
|
|
|
// UiManage.setMouseCoord(wpt);
|
|
|
|
|
if (this.m_SelectIng)
|
|
|
|
|
{
|
|
|
|
|
ed.m_SelectCss.SetEnd(event.clientX, event.clientY)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let changeVec: THREE.Vector3 = new THREE.Vector3();
|
|
|
|
|
changeVec.subVectors(this.m_EndChickPoint, this.m_StartChickPoint);
|
|
|
|
|
this.m_StartChickPoint.copy(this.m_EndChickPoint);
|
|
|
|
|
|
|
|
|
|
if (this["Shift"] && this.m_State == State.Rotate)
|
|
|
|
|
if (this["Shift"] && this.m_State == CameraControlState.Rotate)
|
|
|
|
|
{
|
|
|
|
|
this.m_Viewer.Rotate(changeVec);
|
|
|
|
|
}
|
|
|
|
|
switch (this.m_State)
|
|
|
|
|
{
|
|
|
|
|
case State.Pan:
|
|
|
|
|
case CameraControlState.Pan:
|
|
|
|
|
{
|
|
|
|
|
this.m_Viewer.Pan(changeVec);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case State.Rotate:
|
|
|
|
|
case CameraControlState.Rotate:
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case State.Scale:
|
|
|
|
|
case CameraControlState.Scale:
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|