private static void PreviewMesh(PropertiesViewModel propertiesViewModel, RedFileViewModel selectedItem, IGameFile selectedGameFile) { propertiesViewModel.AB_MeshPreviewVisible = true; var managerCacheDir = ISettingsManager.GetTemp_MeshPath(); _ = Directory.CreateDirectory(managerCacheDir); foreach (var f in Directory.GetFiles(managerCacheDir)) { try { File.Delete(f); } catch { // ignored } } using (var meshStream = new MemoryStream()) { selectedGameFile.Extract(meshStream); meshStream.Seek(0, SeekOrigin.Begin); string outPath = Path.Combine(ISettingsManager.GetTemp_OBJPath(), Path.GetFileName(selectedItem.Name) ?? throw new InvalidOperationException()); outPath = Path.ChangeExtension(outPath, ".glb"); if (Locator.Current.GetService <MeshTools>().ExportMeshPreviewer(meshStream, new FileInfo(outPath))) { propertiesViewModel.LoadModel(outPath); } meshStream.Dispose(); meshStream.Close(); } }
private async void PreviewTexture(PropertiesViewModel propertiesViewModel, RedFileViewModel selectedItem, IGameFile selectedGameFile) { propertiesViewModel.IsImagePreviewVisible = true; propertiesViewModel.SelectedIndex = 3; var man = Locator.Current.GetService <IModTools>(); // extract cr2w to stream await using var cr2wstream = new MemoryStream(); selectedGameFile.Extract(cr2wstream); // convert xbm to dds stream await using var ddsstream = new MemoryStream(); var expargs = new XbmExportArgs { Flip = false, UncookExtension = EUncookExtension.tga }; if (man != null) { man.ConvertXbmToDdsStream(cr2wstream, ddsstream, out _); } // try loading it in pfim try { var qa = await ImageDecoder.RenderToBitmapSourceDds(ddsstream); if (qa != null) { propertiesViewModel.LoadImage(qa); } } catch (Exception) { // ignored } }