示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
                }
            }
        }