76 lines
2.0 KiB
JavaScript

import BaseEvent from './BaseEvent';
import OrthographicCameraControls from '../controls/OrthographicCameraControls';
/**
* 视图事件
* @author tengge / https://github.com/tengge1
*/
function ViewEvent() {
BaseEvent.call(this);
this.changeView = this.changeView.bind(this);
}
ViewEvent.prototype = Object.create(BaseEvent.prototype);
ViewEvent.prototype.constructor = ViewEvent;
ViewEvent.prototype.start = function () {
app.on(`changeView.${this.id}`, this.changeView);
};
ViewEvent.prototype.stop = function () {
app.on(`changeView.${this.id}`, null);
};
ViewEvent.prototype.changeView = function (view) {
if (view === app.editor.view) {
return;
}
app.editor.view = view;
if (this.controls === undefined) {
this.controls = new OrthographicCameraControls(app.editor.orthCamera, app.editor.renderer.domElement);
}
if (view === 'perspective') {
app.editor.controls.enabled = true;
app.editor.showViewHelper = true;
this.controls.disable();
app.call(`viewChanged`, this, view);
return;
}
let camera = app.editor.orthCamera;
// 使用透视相机离原点最远距离设置正交相机
let distance = Math.max(
app.editor.camera.position.x,
app.editor.camera.position.y,
app.editor.camera.position.z
);
switch (view) {
case 'front':
camera.position.set(distance, 0, 0);
camera.lookAt(new THREE.Vector3());
break;
case 'side':
camera.position.set(0, 0, distance);
camera.lookAt(new THREE.Vector3());
break;
case 'top':
camera.position.set(0, distance, 0);
camera.lookAt(new THREE.Vector3());
break;
}
app.editor.select(null);
app.editor.controls.enabled = false;
app.editor.showViewHelper = false;
this.controls.enable();
app.call(`viewChanged`, this, view);
};
export default ViewEvent;