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();
            }
        }
예제 #2
0
        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
            }
        }