分离代码

pull/7/head
cx 7 years ago
parent 77f4e9bdd7
commit 242bac13b8

@ -5,13 +5,12 @@ import { CameraUtil } from "../GraphicsSystem/CameraUtil";
import { CreateUtil } from "../ApplicationServices/mesh/createObject";
import { Database } from '../DatabaseServices/Database';
import { Viewer } from '../GraphicsSystem/Viewer';
import { CameraControls } from "../GraphicsSystem/Camera";
import { Entity, Line, Solid3d } from '../DatabaseServices/Entity';
import { DebugDatUi } from "../Editor/DebugDatUi";
import { Editor } from '../Editor/Editor';
import { OBB } from '../Geometry/OBB/obb';
import { CoordinateSystem } from '../Geometry/CoordinateSystem';
import { CameraControls } from '../Editor/CameraControls';
export var app: ApplicationService
export var ed: Editor
export var db: Database

@ -0,0 +1,206 @@
//相机控制
import * as THREE from "three";
import { Viewer } from '../GraphicsSystem/Viewer';
import { ed, MouseMove } from '../ApplicationServices/Application';
import { PlaneExt } from '../Geometry/Plane';
import { Line3 } from 'three';
//控制类型
enum CameraControlsEnabled
{
Rotate = 1,
Zoom = 2,
Pan = 4,
}
//控制状态
enum State
{
Null = 0, Pan = 1, Rotate = 2, Scale = 3
}
enum ButtonKey
{
Left = 0,
Middle = 1,
Right = 2,
}
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_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();
}
RegisterEvent()
{
if (this.m_domElement)
{
this.m_domElement.addEventListener("mousedown", this.onMouseDown, false)
this.m_domElement.addEventListener("mousemove", this.onMouseMove, false)
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);
}
}
//鼠标
onMouseDown = (event: MouseEvent) =>
{
event.preventDefault();
let key: ButtonKey = event.button;
this.m_StartChickPoint.set(event.offsetX, event.offsetY, 0);
switch (key)
{
case ButtonKey.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()
// let subVec = new THREE.Vector3(event.clientX - event.offsetX, event.clientY - event.offsetY, 0)
// let startPt = new THREE.Vector3(Math.min(ed.m_SelectCss.start.x, ed.m_SelectCss.end.x),
// Math.max(ed.m_SelectCss.start.y, ed.m_SelectCss.end.y),
// 0
// )
// let endPt = new THREE.Vector3(Math.max(ed.m_SelectCss.start.x, ed.m_SelectCss.end.x),
// Math.min(ed.m_SelectCss.start.y, ed.m_SelectCss.end.y),
// 0
// )
// startPt.sub(subVec)
// endPt.sub(subVec)
// this.m_Viewer.ScreenToWorld(startPt)
// this.m_Viewer.ScreenToWorld(endPt)
// ed.SelectWindow(startPt, endPt)
// let line = new Line(startPt, endPt)
// db.appendEntity(line)
}
this.m_SelectIng = !this.m_SelectIng;
break;
}
case ButtonKey.Middle:
{
if (this["Shift"])
{
this.m_State = State.Rotate;
}
else
{
this.m_State = State.Pan;
}
break;
}
case ButtonKey.Right:
{
break;
}
}
}
onMouseUp = (event: MouseEvent) =>
{
event.preventDefault();
this.m_State = State.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);
MouseMove(this.m_EndChickPoint)
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)
{
this.m_Viewer.Rotate(changeVec);
}
switch (this.m_State)
{
case State.Pan:
{
this.m_Viewer.Pan(changeVec);
break;
}
case State.Rotate:
{
break;
}
case State.Scale:
{
break;
}
}
}
onMouseWheel = (event: WheelEvent) =>
{
event.preventDefault();
event.stopPropagation();
let pt = new THREE.Vector3();
pt.set(event.offsetX, event.offsetY, 0);
this.m_Viewer.ScreenToWorld(pt);
if (event.deltaY < 0)
{
this.m_Viewer.Zoom(0.6, pt);
} else if (event.deltaY > 0)
{
this.m_Viewer.Zoom(1.4, pt);
}
}
//按键
onKeyDown = (event: KeyboardEvent) =>
{
this[event.key] = true;
}
onKeyUp = (event: KeyboardEvent) =>
{
this[event.key] = false;
}
}

@ -72,217 +72,4 @@ export class Camera
}
//控制状态
enum State
{
Null = 0, Pan = 1, Rotate = 2, Scale = 3
}
//控制类型
enum CameraControlsEnabled
{
Rotate = 1,
Zoom = 2,
Pan = 4,
}
//
enum ButtonKey
{
Left = 0,
Middle = 1,
Right = 2,
}
//相机控制
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_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();
}
RegisterEvent()
{
if (this.m_domElement)
{
this.m_domElement.addEventListener("mousedown", this.onMouseDown, false)
this.m_domElement.addEventListener("mousemove", this.onMouseMove, false)
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);
}
}
//鼠标
onMouseDown = (event: MouseEvent) =>
{
event.preventDefault();
let key: ButtonKey = event.button;
this.m_StartChickPoint.set(event.offsetX, event.offsetY, 0);
switch (key)
{
case ButtonKey.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()
// let subVec = new THREE.Vector3(event.clientX - event.offsetX, event.clientY - event.offsetY, 0)
// let startPt = new THREE.Vector3(Math.min(ed.m_SelectCss.start.x, ed.m_SelectCss.end.x),
// Math.max(ed.m_SelectCss.start.y, ed.m_SelectCss.end.y),
// 0
// )
// let endPt = new THREE.Vector3(Math.max(ed.m_SelectCss.start.x, ed.m_SelectCss.end.x),
// Math.min(ed.m_SelectCss.start.y, ed.m_SelectCss.end.y),
// 0
// )
// startPt.sub(subVec)
// endPt.sub(subVec)
// this.m_Viewer.ScreenToWorld(startPt)
// this.m_Viewer.ScreenToWorld(endPt)
// ed.SelectWindow(startPt, endPt)
// let line = new Line(startPt, endPt)
// db.appendEntity(line)
}
this.m_SelectIng = !this.m_SelectIng;
break;
}
case ButtonKey.Middle:
{
if (this["Shift"])
{
this.m_State = State.Rotate;
}
else
{
this.m_State = State.Pan;
}
break;
}
case ButtonKey.Right:
{
break;
}
}
}
onMouseUp = (event: MouseEvent) =>
{
event.preventDefault();
this.m_State = State.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);
MouseMove(this.m_EndChickPoint)
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)
{
this.m_Viewer.Rotate(changeVec);
}
switch (this.m_State)
{
case State.Pan:
{
this.m_Viewer.Pan(changeVec);
break;
}
case State.Rotate:
{
break;
}
case State.Scale:
{
break;
}
}
}
onMouseWheel = (event: WheelEvent) =>
{
event.preventDefault();
event.stopPropagation();
let pt = new THREE.Vector3();
pt.set(event.offsetX, event.offsetY, 0);
this.m_Viewer.ScreenToWorld(pt);
if (event.deltaY < 0)
{
this.m_Viewer.Zoom(0.6, pt);
} else if (event.deltaY > 0)
{
this.m_Viewer.Zoom(1.4, pt);
}
}
//按键
onKeyDown = (event: KeyboardEvent) =>
{
this[event.key] = true;
// switch (event.key)
// {
// case "Ctrl":
// {
// this[event.key] = true;
// break;
// }
// }
}
onKeyUp = (event: KeyboardEvent) =>
{
this[event.key] = false;
// switch (event.key)
// {
// case "Ctrl":
// {
// break;
// }
// }
}
}
Loading…
Cancel
Save