From 7e2ec19f3ceba20ccc84ec4e13d7544f3353366d Mon Sep 17 00:00:00 2001 From: liteng <930372551@qq.com> Date: Thu, 23 Aug 2018 12:29:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8A=A0=E8=BD=BD=E5=99=A8bu?= =?UTF-8?q?g=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/editor/window/ModelWindow.js | 252 ++---------------- ShadowEditor.Web/src/loader/ModelLoader.js | 7 +- 2 files changed, 28 insertions(+), 231 deletions(-) diff --git a/ShadowEditor.Web/src/editor/window/ModelWindow.js b/ShadowEditor.Web/src/editor/window/ModelWindow.js index 5e72fff8..661c63e7 100644 --- a/ShadowEditor.Web/src/editor/window/ModelWindow.js +++ b/ShadowEditor.Web/src/editor/window/ModelWindow.js @@ -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; \ No newline at end of file diff --git a/ShadowEditor.Web/src/loader/ModelLoader.js b/ShadowEditor.Web/src/loader/ModelLoader.js index 542aba7d..26bc0956 100644 --- a/ShadowEditor.Web/src/loader/ModelLoader.js +++ b/ShadowEditor.Web/src/loader/ModelLoader.js @@ -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); }); });