private void HandleNewModelToolStripMenuItemClick(object sender, EventArgs e) { var model = ModelConverterUtility.ConvertAssimpModel(); if (model != null) { var node = DataViewNodeFactory.Create("Model", model); ModelEditorTreeView.SetTopNode(node); LastOpenedFilePath = null; } }
protected override void InitializeCore() { base.InitializeCore(); RegisterExportHandler <ModelPack>((path) => { var modelPack = Data; // Check if a material's texture is missing if (modelPack.Materials != null) { foreach (var material in modelPack.Materials.Values) { var missingTextures = new List <string>(); foreach (var textureMap in material.TextureMaps) { if (textureMap == null) { continue; } if (!modelPack.Textures.ContainsTexture(textureMap.Name)) { missingTextures.Add(textureMap.Name); } } if (missingTextures.Count > 0) { MessageBox.Show($"Material \"{material.Name}\" references one or more textures that cannot be found:\n{string.Join( "\n", missingTextures.ToArray() )}" + $"\n\nThis will lead to an inevitable crash in-game.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } // Check if a mesh's material is missing foreach (var node in modelPack.Model.Nodes) { foreach (var mesh in node.Meshes) { if (modelPack.Materials == null || !modelPack.Materials.ContainsKey(mesh.MaterialName)) { MessageBox.Show($"Scene Geometry under \"{node.Name}\" references a Material that cannot be found:\n{mesh.MaterialName}", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } modelPack.Save(path); }); RegisterExportHandler <Assimp.Scene>(path => ModelPackExporter.ExportFile(Data, path)); RegisterReplaceHandler <ModelPack>(path => { var model = Resource.Load <ModelPack>(path); if (model != null) { Data.ReplaceWith(model); } return(Data); }); RegisterReplaceHandler <Assimp.Scene>(path => { var model = ModelConverterUtility.ConvertAssimpModel(path); if (model != null) { Data.ReplaceWith(model); } return(Data); }); RegisterModelUpdateHandler(() => { var model = new ModelPack(Version); if (Textures != null && Nodes.Contains(Textures)) { model.Textures = Textures.Data; } if (Materials != null && Nodes.Contains(Materials)) { model.Materials = Materials.Data; } if (Model != null && Nodes.Contains(Model)) { model.Model = Model.Data; } if (ChunkType000100F9 != null && Nodes.Contains(ChunkType000100F9)) { model.ChunkType000100F9 = ChunkType000100F9.Data; } if (ChunkType000100F8 != null && Nodes.Contains(ChunkType000100F8)) { model.ChunkType000100F8 = ChunkType000100F8.Data; } if (Animations != null && Nodes.Contains(Animations)) { model.AnimationPack = Animations.Data; } return(model); }); RegisterCustomHandler("Add/New", "Animation pack", () => { Data.AnimationPack = new AnimationPack(Data.Version); InitializeView(true); }); RegisterCustomHandler("Add/New", "Chunk Type 000100F9", () => { Data.ChunkType000100F9 = new ChunkType000100F9(Data.Version); InitializeView(true); }); RegisterCustomHandler("Add/New", "Chunk Type 000100F8", () => { Data.ChunkType000100F8 = new ChunkType000100F8(Data.Version); InitializeView(true); }); }
protected override void InitializeCore() { RegisterExportHandler <Model>((path) => Data.Save(path)); RegisterExportHandler <Assimp.Scene>(path => ModelExporter.ExportFile(Data, path)); RegisterReplaceHandler <Model>(path => { var model = Resource.Load <Model>(path); if (model != null) { Data.ReplaceWith(model); } return(Data); }); RegisterReplaceHandler <Assimp.Scene>(path => { var model = ModelConverterUtility.ConvertAssimpModel(path); if (model != null) { Data.ReplaceWith(model); } return(Data); }); RegisterModelUpdateHandler(() => { var model = new Model(Version); if (Textures != null && Nodes.Contains(Textures)) { model.Textures = Textures.Data; } if (Materials != null && Nodes.Contains(Materials)) { model.Materials = Materials.Data; } if (Scene != null && Nodes.Contains(Scene)) { model.Scene = Scene.Data; } if (ChunkType000100F9 != null && Nodes.Contains(ChunkType000100F9)) { model.ChunkType000100F9 = ChunkType000100F9.Data; } if (ChunkType000100F8 != null && Nodes.Contains(ChunkType000100F8)) { model.ChunkType000100F8 = ChunkType000100F8.Data; } if (AnimationPack != null && Nodes.Contains(AnimationPack)) { model.AnimationPack = AnimationPack.Data; } return(model); }); RegisterCustomHandler("Add New Animation Pack", () => { Data.AnimationPack = new AnimationPack(Data.Version); InitializeView(true); }); RegisterCustomHandler("Add New Chunk Type 000100F9", () => { Data.ChunkType000100F9 = new ChunkType000100F9(Data.Version); InitializeView(true); }); RegisterCustomHandler("Add New Chunk Type 000100F8", () => { Data.ChunkType000100F8 = new ChunkType000100F8(Data.Version); InitializeView(true); }); }