移除物体、添加几何体、设置几何体名称事件。

This commit is contained in:
liteng 2018-06-17 09:42:20 +08:00
parent b43df85df0
commit dbcfed5e38
6 changed files with 116 additions and 26 deletions

View File

@ -65,36 +65,16 @@ Editor.prototype = {
this.app.call('nameObject', this, object, name);
},
removeObject: function (object) {
if (object.parent === null) return; // avoid deleting the camera or scene
var scope = this;
object.traverse(function (child) {
scope.removeHelper(child);
});
object.parent.remove(object);
this.signals.objectRemoved.dispatch(object);
this.signals.sceneGraphChanged.dispatch();
removeObject: function (object) { // 移除物体
this.app.call('removeObject', this, object);
},
addGeometry: function (geometry) {
this.geometries[geometry.uuid] = geometry;
addGeometry: function (geometry) { // 添加几何体
this.app.call('addGeometry', this, geometry);
},
setGeometryName: function (geometry, name) {
geometry.name = name;
this.signals.sceneGraphChanged.dispatch();
setGeometryName: function (geometry, name) { // 设置几何体名称
this.app.call('setGeometryName', this, geometry, name);
},
addMaterial: function (material) {

View File

@ -16,6 +16,9 @@ import SetSceneEvent from './editor/SetSceneEvent';
import AddObjectEvent from './editor/AddObjectEvent';
import MoveObjectEvent from './editor/MoveObjectEvent';
import NameObjectEvent from './editor/NameObjectEvent';
import RemoveObjectEvent from './editor/RemoveObjectEvent';
import AddGeometryEvent from './editor/AddGeometryEvent';
import SetGeometryNameEvent from './editor/SetGeometryNameEvent';
/**
* 事件执行器
@ -42,6 +45,9 @@ function EventDispatcher(app) {
new AddObjectEvent(this.app),
new MoveObjectEvent(this.app),
new NameObjectEvent(this.app),
new RemoveObjectEvent(this.app),
new AddGeometryEvent(this.app),
new SetGeometryNameEvent(this.app),
];
}

View File

@ -22,6 +22,9 @@ var EventList = [
'addObject', // 添加物体
'moveObject', // 移动物体
'nameObject', // 重命名物体
'removeObject', // 删除物体
'addGeometry', // 添加几何体事件
'setGeometryName', // 设置几何体名称事件
];
export default EventList;

View File

@ -0,0 +1,30 @@
import BaseEvent from '../BaseEvent';
/**
* 添加几何体事件
* @param {*} app
*/
function AddGeometryEvent(app) {
BaseEvent.call(this, app);
}
AddGeometryEvent.prototype = Object.create(BaseEvent.prototype);
AddGeometryEvent.prototype.constructor = AddGeometryEvent;
AddGeometryEvent.prototype.start = function () {
var _this = this;
this.app.on('addGeometry.' + this.id, function (geometry) {
_this.onAddGeometry(geometry);
});
};
AddGeometryEvent.prototype.stop = function () {
this.app.on('addGeometry.' + this.id, null);
};
AddGeometryEvent.prototype.onAddGeometry = function (geometry) {
var editor = this.app.editor;
editor.geometries[geometry.uuid] = geometry;
};
export default AddGeometryEvent;

View File

@ -0,0 +1,40 @@
import BaseEvent from '../BaseEvent';
/**
* 删除物体事件
* @param {*} app
*/
function RemoveObjectEvent(app) {
BaseEvent.call(this, app);
}
RemoveObjectEvent.prototype = Object.create(BaseEvent.prototype);
RemoveObjectEvent.prototype.constructor = RemoveObjectEvent;
RemoveObjectEvent.prototype.start = function () {
var _this = this;
this.app.on('removeObject.' + this.id, function (object) {
_this.onRemoveObject(object);
});
};
RemoveObjectEvent.prototype.stop = function () {
this.app.on('removeObject.' + this.id, null);
};
RemoveObjectEvent.prototype.onRemoveObject = function (object) {
var editor = this.app.editor;
if (object.parent === null) return; // 避免删除相机或场景
object.traverse(function (child) {
editor.removeHelper(child);
});
object.parent.remove(object);
editor.signals.objectRemoved.dispatch(object);
editor.signals.sceneGraphChanged.dispatch();
};
export default RemoveObjectEvent;

View File

@ -0,0 +1,31 @@
import BaseEvent from '../BaseEvent';
/**
* 设置几何体名称事件
* @param {*} app
*/
function SetGeometryNameEvent(app) {
BaseEvent.call(this, app);
}
SetGeometryNameEvent.prototype = Object.create(BaseEvent.prototype);
SetGeometryNameEvent.prototype.constructor = SetGeometryNameEvent;
SetGeometryNameEvent.prototype.start = function () {
var _this = this;
this.app.on('setGeometryName.' + this.id, function (geometry, name) {
_this.onSetGeometryName(geometry, name);
});
};
SetGeometryNameEvent.prototype.stop = function () {
this.app.on('setGeometryName.' + this.id, null);
};
SetGeometryNameEvent.prototype.onSetGeometryName = function (geometry, name) {
var editor = this.app.editor;
geometry.name = name;
editor.signals.sceneGraphChanged.dispatch();
};
export default SetGeometryNameEvent;