private void Menu_Export_Model_Click(object sender, RoutedEventArgs e) { if (_viewModel.TheModelViewModel.VifModel == null) { MessageBox.Show(this, "No model currently loaded.", "Error", MessageBoxButton.OK); return; } if (_viewModel.TheModelViewModel.Texture == null) { MessageBox.Show(this, "Model does not have a texture.", "Error", MessageBoxButton.OK); return; } var dialog = new SaveFileDialog(); dialog.Filter = "OBJ File|*.obj"; var result = dialog.ShowDialog(this); if (result.GetValueOrDefault(false)) { DataExporters.VifExporter exporter = new VifExporter(); exporter.WriteObj(dialog.FileName, _viewModel.TheModelViewModel.VifModel, _viewModel.TheModelViewModel.Texture, 1); } }
void SaveParsedDataClicked(object sender, RoutedEventArgs e) { if (_menu.DataContext == null) return; if (_menu.DataContext is LmpEntryTreeViewModel) { var lmpEntry = (LmpEntryTreeViewModel)_menu.DataContext; var lmpFile = lmpEntry.LmpFileProperty; var entry = lmpFile.Directory[lmpEntry.Text]; var texEntry = lmpFile.Directory[Path.GetFileNameWithoutExtension(lmpEntry.Text)+".tex"]; var tex = TexDecoder.Decode(lmpFile.FileData, texEntry.StartOffset, texEntry.Length); if ((Path.GetExtension(lmpEntry.Text) ?? "").ToLower() != ".vif") { MessageBox.Show("Not a .vif file!", "Error"); return; } var dialog = new SaveFileDialog(); dialog.FileName = lmpEntry.Text+".txt"; bool? result = dialog.ShowDialog(); if (result.GetValueOrDefault(false)) { var exporter = new VifExporter(); var logger = new StringLogger(); var chunks = VifDecoder.DecodeChunks( logger, lmpFile.FileData, entry.StartOffset, entry.Length, tex.PixelWidth, tex.PixelHeight); exporter.WriteChunks(dialog.FileName, chunks); } } else if (_menu.DataContext is WorldElementTreeViewModel) { var worldElement = (WorldElementTreeViewModel)_menu.DataContext; var lmpEntry = (LmpTreeViewModel)worldElement.Parent; var lmpFile = lmpEntry.LmpFileProperty; var dialog = new SaveFileDialog(); dialog.FileName = worldElement.Text + ".txt"; bool? result = dialog.ShowDialog(); if (result.GetValueOrDefault(false)) { var exporter = new VifExporter(); var logger = new StringLogger(); var chunks = VifDecoder.ReadVerts( logger, lmpFile.FileData, worldElement.WorldElement.VifDataOffset, worldElement.WorldElement.VifDataOffset + worldElement.WorldElement.VifDataLength); exporter.WriteChunks(dialog.FileName, chunks); } } }