修复加载器bug。

This commit is contained in:
liteng 2018-08-23 12:29:41 +08:00
parent aaadfe0c01
commit 7e2ec19f3c
2 changed files with 28 additions and 231 deletions

View File

@ -1,5 +1,6 @@
import UI from '../../ui/UI';
import Ajax from '../../utils/Ajax';
import ModelLoader from '../../loader/ModelLoader';
import AddObjectCommand from '../../command/AddObjectCommand';
import UploadUtils from '../../utils/UploadUtils';
@ -183,6 +184,29 @@ ModelWindow.prototype.onClickImage = function (imgs, index, btn) {
this.onLoadModel(model);
};
/**
* 添加模型到场景
* @param {*} model
*/
ModelWindow.prototype.onLoadModel = function (model) {
var loader = new ModelLoader(this.app);
loader.load(this.app.options.server + model.Url).then(obj => {
if (!obj) {
return;
}
obj.name = model.Name;
obj.rotation.x = -Math.PI / 2;
Object.assign(obj.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(obj);
cmd.execute();
});
};
/**
* 删除模型
* @param {*} model
@ -204,232 +228,4 @@ ModelWindow.prototype.onDeleteModel = function (model) {
});
};
/**
* 添加模型到场景
* @param {*} model
*/
ModelWindow.prototype.onLoadModel = function (model) {
if (model.Type === 'amf') {
var loader = new THREE.AMFLoader();
loader.load(this.app.options.server + model.Url, (group) => {
group.name = model.Name;
group.rotation.x = -Math.PI / 2;
Object.assign(group.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(group);
cmd.execute();
});
} else if (model.Type === 'binary') {
var loader = new THREE.BinaryLoader();
loader.load(this.app.options.server + model.Url, (geometry, materials) => {
var mesh = new THREE.Mesh(geometry, materials);
mesh.name = model.Name;
mesh.rotation.x = -Math.PI / 2;
Object.assign(mesh.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(mesh);
cmd.execute();
});
} else if (model.Type === 'awd') {
var loader = new THREE.AWDLoader();
loader.load(this.app.options.server + model.Url, (obj3d) => {
obj3d.name = model.Name;
obj3d.rotation.x = -Math.PI / 2;
Object.assign(obj3d.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(obj3d);
cmd.execute();
});
} else if (model.Type === 'babylon') {
var loader = new THREE.BabylonLoader();
loader.load(this.app.options.server + model.Url, (scene) => {
var obj3d = new THREE.Object3D();
obj3d.name = model.Name;
obj3d.rotation.x = -Math.PI / 2;
Object.assign(obj3d.userData, model, {
Server: true
});
obj3d.children = scene.children;
var cmd = new AddObjectCommand(obj3d);
cmd.execute();
});
} else if (model.Type === 'ctm') {
var loader = new THREE.CTMLoader();
loader.load(this.app.options.server + model.Url, (geometry) => {
var material = new THREE.MeshStandardMaterial();
var mesh = new THREE.Mesh(geometry, material);
mesh.name = model.Name;
mesh.rotation.x = -Math.PI / 2;
Object.assign(mesh.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(mesh);
cmd.execute();
});
} else if (model.Type === 'dae') {
var loader = new THREE.ColladaLoader();
loader.load(this.app.options.server + model.Url, (collada) => {
var obj3d = collada.scene;
obj3d.name = model.Name;
obj3d.rotation.x = -Math.PI / 2;
Object.assign(obj3d.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(obj3d);
cmd.execute();
});
} else if (model.Type === 'fbx') {
var loader = new THREE.FBXLoader();
loader.load(this.app.options.server + model.Url, (obj3d) => {
obj3d.name = model.Name;
obj3d.rotation.x = -Math.PI / 2;
Object.assign(obj3d.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(obj3d);
cmd.execute();
});
} else if (model.Type === 'glb' || model.Type === 'gltf') {
var loader = new THREE.GLTFLoader();
loader.load(this.app.options.server + model.Url, (result) => {
var obj3d = result.scene;
obj3d.name = model.Name;
obj3d.rotation.x = -Math.PI / 2;
Object.assign(obj3d.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(obj3d);
cmd.execute();
});
} else if (model.Type === 'kmz') {
var loader = new THREE.KMZLoader();
loader.load(this.app.options.server + model.Url, (collada) => {
var obj3d = collada.scene;
obj3d.name = model.Name;
obj3d.rotation.x = -Math.PI / 2;
Object.assign(obj3d.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(obj3d);
cmd.execute();
});
} else if (model.Type === 'ply') {
var loader = new THREE.PLYLoader();
loader.load(this.app.options.server + model.Url, (geometry) => {
var material = new THREE.MeshStandardMaterial();
var mesh = new THREE.Mesh(geometry, material);
mesh.name = model.Name;
mesh.rotation.x = -Math.PI / 2;
Object.assign(mesh.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(mesh);
cmd.execute();
});
} else if (model.Type === 'obj') {
var loader = new THREE.OBJLoader();
loader.load(this.app.options.server + model.Url, (obj) => {
obj.name = model.Name;
obj.rotation.x = -Math.PI / 2;
Object.assign(obj.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(obj);
cmd.execute();
});
} else if (model.Type === 'md2') {
var loader = new THREE.MD2Loader();
loader.load(this.app.options.server + model.Url, (geometry) => {
var material = new THREE.MeshStandardMaterial({
morphTargets: true,
morphNormals: true
});
var mesh = new THREE.Mesh(geometry, material);
mesh.mixer = new THREE.AnimationMixer(mesh);
mesh.name = model.Name;
mesh.rotation.x = -Math.PI / 2;
Object.assign(mesh.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(mesh);
cmd.execute();
});
} else if (model.Type === 'stl') {
var loader = new THREE.STLLoader();
loader.load(this.app.options.server + model.Url, (geometry) => {
var material = new THREE.MeshStandardMaterial();
var mesh = new THREE.Mesh(geometry, material);
mesh.name = model.Name;
mesh.rotation.x = -Math.PI / 2;
Object.assign(mesh.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(mesh);
cmd.execute();
});
} else if (model.Type === 'vtk') {
var loader = new THREE.VTKLoader();
loader.load(this.app.options.server + model.Url, (geometry) => {
var material = new THREE.MeshStandardMaterial();
var mesh = new THREE.Mesh(geometry, material);
mesh.name = model.Name;
mesh.rotation.x = -Math.PI / 2;
Object.assign(mesh.userData, model, {
Server: true
});
var cmd = new AddObjectCommand(mesh);
cmd.execute();
});
} else {
console.warn(`ModelWindow: 未知模型类型${model.Type}`);
}
};
export default ModelWindow;

View File

@ -45,15 +45,16 @@ ModelLoader.prototype.constructor = ModelLoader;
ModelLoader.prototype.load = function (url, options) {
var paths = url.split('.');
var ext = paths[paths.length - 1];
var ext = paths[paths.length - 1].toLowerCase();
return new Promise(resolve => {
var loader = Loaders[paths];
var loader = Loaders[ext];
if (loader === undefined) {
console.warn(`ModelLoader: 不存在加载${ext}后缀模型的加载器。`);
resolve(null);
return;
}
loader.load(url, options).then(obj => {
(new loader(this.app)).load(url, options).then(obj => {
resolve(obj);
});
});