public override void Execute() { var pipe = models.Pipelines[models.GetFirstEnabledPipeline()]; // not yet computed var tex = pipe.Image; if (tex == null) { return; } float multiplier = 1.0f; // ReSharper disable once CompareOfFloatsByEqualityOperator if (models.Display.Multiplier != 1.0f) { if (models.Window.ShowYesNoDialog( $"Color multiplier is currently set to {models.Display.MultiplierString}. Do you want to include the multiplier in the export?", "Keep Color Multiplier?")) { multiplier = models.Display.Multiplier; } } // set proposed filename var firstImageId = GetFirstImageId(pipe); var filename = models.Images.Images[firstImageId].Filename; var format = models.Images.Images[firstImageId].OriginalFormat; var ext = Path.GetExtension(filename); if (ext == null) { return; } // remove . from extension if (ext.StartsWith(".")) { ext = ext.Substring(1); } var path = Path.ChangeExtension(filename, null); var desc = new ExportDescription(tex, path, ext) { Multiplier = multiplier, }; desc.TrySetFormat(format); models.Export.ExportAsync(desc); }
public override void Execute() { // make sure only one image is visible if (models.NumEnabled != 1) { models.Window.ShowErrorDialog("Exactly one image equation should be visible when exporting."); return; } // get active final image var id = models.GetFirstEnabledPipeline(); var tex = models.Pipelines[id].Image; if (tex == null) { return; // not yet computed? } float multiplier = 1.0f; // ReSharper disable once CompareOfFloatsByEqualityOperator if (models.Display.Multiplier != 1.0f) { if (models.Window.ShowYesNoDialog( $"Color multiplier is currently set to {models.Display.MultiplierString}. Do you want to include the multiplier in the export?", "Keep Color Multiplier?")) { multiplier = models.Display.Multiplier; } } // set proposed filename var firstImageId = models.Pipelines[id].Color.FirstImageId; var firstImage = models.Images.Images[firstImageId].Filename; var proposedFilename = System.IO.Path.GetFileNameWithoutExtension(firstImage); // set or keep export directory var exportDirectory = GetExportDirectory(firstImage); if (exportExtension == null) { exportExtension = System.IO.Path.GetExtension(firstImage); if (exportExtension != null && exportExtension.StartsWith(".")) { exportExtension = exportExtension.Substring(1); } } if (exportFormat == null) { exportFormat = models.Images.Images[firstImageId].OriginalFormat; } // open save file dialog Debug.Assert(exportDirectory != null); Debug.Assert(proposedFilename != null); var sfd = new SaveFileDialog { Filter = GetFilter(exportExtension, tex.Is3D), InitialDirectory = exportDirectory, FileName = proposedFilename }; if (sfd.ShowDialog(models.Window.TopmostWindow) != true) { return; } exportExtension = System.IO.Path.GetExtension(sfd.FileName).Substring(1); var exportFilename = System.IO.Path.GetFileNameWithoutExtension(sfd.FileName); exportDirectory = System.IO.Path.GetDirectoryName(sfd.FileName); SetExportDirectory(exportDirectory); models.Export.Mipmap = models.Display.ActiveMipmap; models.Export.Layer = models.Display.ActiveLayer; var viewModel = new ExportViewModel(models, exportExtension, exportFormat.Value, sfd.FileName, tex.Is3D, models.Statistics[id].Stats); var dia = new ExportDialog(viewModel); if (models.Window.ShowDialog(dia) != true) { return; } var desc = new ExportDescription(exportDirectory + "/" + exportFilename, exportExtension, models.Export); desc.TrySetFormat(viewModel.SelectedFormatValue); desc.Multiplier = multiplier; exportFormat = desc.FileFormat; models.Export.ExportAsync(tex, desc); }
public override async void Execute() { // make sure only one image is visible if (models.NumEnabled != 1) { models.Window.ShowErrorDialog("Exactly one image equation should be visible when exporting."); return; } // get active final image var id = models.GetFirstEnabledPipeline(); var tex = models.Pipelines[id].Image; if (tex == null) { return; // not yet computed? } float multiplier = 1.0f; // ReSharper disable once CompareOfFloatsByEqualityOperator if (models.Display.Multiplier != 1.0f) { if (models.Window.ShowYesNoDialog( $"Color multiplier is currently set to {models.Display.MultiplierString}. Do you want to include the multiplier in the export?", "Keep Color Multiplier?")) { multiplier = models.Display.Multiplier; } } // set proposed filename var firstImageId = models.Pipelines[id].Color.FirstImageId; var firstImage = models.Images.Images[firstImageId].Filename; var proposedFilename = System.IO.Path.GetFileNameWithoutExtension(firstImage); // set or keep export directory var exportDirectory = GetExportDirectory(firstImage); if (exportExtension == null) { exportExtension = System.IO.Path.GetExtension(firstImage); if (exportExtension != null && exportExtension.StartsWith(".")) { exportExtension = exportExtension.Substring(1); } } if (exportFormat == null) { exportFormat = models.Images.Images[firstImageId].OriginalFormat; } // open save file dialog Debug.Assert(exportDirectory != null); Debug.Assert(proposedFilename != null); var sfd = new SaveFileDialog { Filter = GetFilter(exportExtension, tex.Is3D), InitialDirectory = exportDirectory, FileName = proposedFilename }; if (sfd.ShowDialog(models.Window.TopmostWindow) != true) { return; } exportExtension = System.IO.Path.GetExtension(sfd.FileName).Substring(1); var exportFilename = System.IO.Path.GetFileNameWithoutExtension(sfd.FileName); exportDirectory = System.IO.Path.GetDirectoryName(sfd.FileName); SetExportDirectory(exportDirectory); var viewModel = new ExportViewModel(models, exportExtension, exportFormat.Value, sfd.FileName, tex.Is3D, models.Statistics[id].Stats); var dia = new ExportDialog(viewModel); if (models.Window.ShowDialog(dia) != true) { return; } var desc = new ExportDescription(tex, exportDirectory + "/" + exportFilename, exportExtension) { Multiplier = multiplier, Mipmap = models.ExportConfig.Mipmap, Layer = models.ExportConfig.Layer, UseCropping = models.ExportConfig.UseCropping, CropStart = models.ExportConfig.CropStart, CropEnd = models.ExportConfig.CropEnd, Overlay = models.Overlay.Overlay }; desc.TrySetFormat(viewModel.SelectedFormatValue); exportFormat = desc.FileFormat; models.Export.ExportAsync(desc); // export additional zoom boxes? if (viewModel.HasZoomBox && viewModel.ExportZoomBox) { for (int i = 0; i < models.ZoomBox.Boxes.Count; ++i) { var box = models.ZoomBox.Boxes[i]; var zdesc = new ExportDescription(tex, $"{exportDirectory}/{exportFilename}_zoom{i}", exportExtension) { Multiplier = multiplier, Mipmap = models.ExportConfig.Mipmap, Layer = models.ExportConfig.Layer, UseCropping = true, CropStart = new Float3(box.Start, 0.0f), CropEnd = new Float3(box.End, 1.0f), Overlay = viewModel.ZoomBorders ? models.Overlay.Overlay : null, Scale = viewModel.ZoomBoxScale }; zdesc.TrySetFormat(viewModel.SelectedFormatValue); await models.Progress.WaitForTaskAsync(); models.Export.ExportAsync(zdesc); } } }