/// <summary>
        /// Regenerate stereogram using the same options (but with a dialog to allow you to change them, or there'd really be no point)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void CmdRegenerateStereogramExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            Stereogram src = e.Parameter as Stereogram;

            if (src == null || src.HasOptions == false)
            {
                throw new ArgumentException("Cannot regenerate stereogram");
            }

            Options saveOptions = new Options(src.options);

            DialogGenerateStereogram dialog = new DialogGenerateStereogram(saveOptions, theViewModel.GetDepthmaps(), theViewModel.GetTextures(), false);
            bool?ok = dialog.ShowDialog();

            if (ok != true)
            {
                return;
            }

            bool bSave = dialog.SaveStereogram;

            // Adopt the options from the dialog if they were accepted
            this.DataContext = null;
            Options          = saveOptions;
            this.DataContext = theViewModel;

            theViewModel.GenerateStereogram(saveOptions, stereogram => StereogramGeneratedCallback(stereogram, bSave));
        }
        /// <summary>
        /// Callback for generated stereograms
        /// </summary>
        /// <param name="?"></param>
        private void StereogramGeneratedCallback(Stereogram stereogram, bool bSave)
        {
            if (stereogram == null || stereogram.Bitmap == null)
            {
                MessageBox.Show("Error generating stereogram", "Error generating stereogram", MessageBoxButton.OK);
                return;
            }

            // Highlight it
            theViewModel.PreviewItem = stereogram;

            if (bSave)
            {
                try
                {
                    theViewModel.SaveStereogram(stereogram);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error saving file", MessageBoxButton.OK);
                }
            }

            MessageBox.Show(String.Format("Generated Stereogram in {0}ms", stereogram.Milliseconds.ToString()));
        }
示例#3
0
 /// <summary>
 /// Restore settings from a stereogram
 /// </summary>
 /// <param name="stereogram"></param>
 public void RestoreStereogramSettings(Stereogram stereogram)
 {
     if (stereogram != null && stereogram.options != null)
     {
         DepthmapPalette.SelectItem(stereogram.options.depthmap);
         TexturePalette.SelectItem(stereogram.options.texture);
         Options     = new Options(stereogram.options);
         PreviewItem = stereogram;
     }
 }
        // Restore settings from a previously generated stereogram
        public void CmdRestoreStereogramSettingsExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            Stereogram stereogram = (e.Parameter as Stereogram) ?? theViewModel.SelectedStereogram;

            if (stereogram.options != null)
            {
                this.DataContext = null;
                theViewModel.RestoreStereogramSettings(stereogram);
                this.DataContext = theViewModel;        // Rebind controls
            }
        }
示例#5
0
        private void OnStereogramGenerated(Stereogram stereogram, StereogramGenerated callback)
        {
            if (stereogram != null)
            {
                myStereograms.AddItem(stereogram);
                SelectedPalette = StereogramPalette;
            }

            if (callback != null)
            {
                callback(stereogram);
            }

            EndMonitoring();
        }
        /// <summary>
        /// Save an already generated stereogram to a file... should really pop up the options box
        /// to confirm settings and allow tweaking.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void CmdSaveStereogramExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            Stereogram stereogram = (e.Parameter as Stereogram) ?? theViewModel.SelectedStereogram;

            if (null == stereogram || false == stereogram.HasOptions)
            {
                return;
            }

            try
            {
                theViewModel.SaveStereogram(stereogram);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error saving file", MessageBoxButton.OK);
            }
        }
        /// <summary>
        /// Generate a preview stereogram using the currently specified options
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void CmdPreviewStereogramExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            Options previewOptions = new Options(Options);

            if (e.Parameter is Stereogram && ((Stereogram)e.Parameter).HasOptions)
            {
                Stereogram src = (Stereogram)e.Parameter;
                previewOptions.texture  = src.options.texture ?? theViewModel.SelectedTexture;
                previewOptions.depthmap = src.options.depthmap ?? theViewModel.SelectedDepthmap;
            }
            else
            {
                previewOptions.texture  = (e.Parameter as Texture) ?? theViewModel.SelectedTexture;
                previewOptions.depthmap = (e.Parameter as Depthmap) ?? theViewModel.SelectedDepthmap;
            }
            previewOptions.resolutionX = (int)PreviewPane.ActualWidth;
            previewOptions.resolutionY = (int)PreviewPane.ActualHeight;
            theViewModel.RequestPreview(previewOptions);
        }
示例#8
0
        /// <summary>
        /// Constructor for the view model - binds to the model
        /// </summary>
        /// <param name="model"></param>
        public StereogrammerViewModel()
        {
            Options = new Options();

            DepthmapPalette   = AddPalette(myDepthmaps, Commands.CmdPreviewStereogram);
            TexturePalette    = AddPalette(myTextures, Commands.CmdPreviewStereogram);
            StereogramPalette = AddPalette(myStereograms, Commands.CmdPreviewStereogram);

            previewer = new StereogramGeneratorAsync(new Action <Stereogram>(stereogram =>
            {
                if (stereogram != null)
                {
                    this.PreviewStereogram = stereogram;
                }
                else
                {
                    ErrorMessage("Preview failed!");
                }
                EndMonitoring();
            }));
        }
        public void CmdRestoreStereogramSettingsCanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            Stereogram stereogram = (e.Parameter as Stereogram) ?? theViewModel.SelectedStereogram;

            e.CanExecute = (stereogram != null && stereogram.options != null);
        }
        public void CmdSaveStereogramCanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            Stereogram stereogram = (e.Parameter as Stereogram) ?? theViewModel.SelectedStereogram;

            e.CanExecute = (stereogram != null);
        }
示例#11
0
        // ReSharper disable once UnusedMember.Local
        private int OnExecute(CommandLineApplication app)
        {
            _defaultColor = Console.ForegroundColor;

            WriteLine("**************************************************************");
            WriteLine("********** Welcome to Sistem - Stereogram Generator **********");
            WriteLine("**************************************************************");

            var result = 0;

            var depthMapFile = FindFile(DepthMap);

            if (string.IsNullOrEmpty(depthMapFile))
            {
                WriteError($"Depthmap file could not be found");
                result = 2;
            }

            var patternFile = string.Empty;

            if (!string.IsNullOrEmpty(Pattern))
            {
                patternFile = FindFile(Pattern);
                if (string.IsNullOrEmpty(patternFile))
                {
                    WriteError($"Pattern file could not be found");
                    result = 2;
                }
            }

            if (result == 0)
            {
                using (var stereogram = new Stereogram())
                {
                    var success = true;

                    // Load image files
                    success &= stereogram.LoadDepthMap(depthMapFile);

                    if (!string.IsNullOrWhiteSpace(patternFile))
                    {
                        success &= stereogram.LoadPattern(patternFile);
                    }

                    if (success)
                    {
                        // Set parameters
                        if (MinSeparation.HasValue)
                        {
                            stereogram.MinSeparation = MinSeparation.Value;
                        }

                        if (MaxSeparation.HasValue)
                        {
                            stereogram.MaxSeparation = MaxSeparation.Value;
                        }

                        if (PatternWidth.HasValue)
                        {
                            stereogram.PatternWidth = PatternWidth.Value;
                        }

                        if (Origin.HasValue)
                        {
                            stereogram.Origin = Origin.Value;
                        }

                        if (YShift.HasValue)
                        {
                            stereogram.YShift = YShift.Value;
                        }

                        if (GapFilling.HasValue)
                        {
                            stereogram.GapFilling = GapFilling.Value;
                        }

                        if (NoiseReductionRadius.HasValue)
                        {
                            stereogram.NoiseReductionRadius = NoiseReductionRadius.Value;
                        }

                        if (NoiseReductionThreshold.HasValue)
                        {
                            stereogram.NoiseReductionThreshold = NoiseReductionThreshold.Value;
                        }

                        if (Oversampling.HasValue)
                        {
                            stereogram.Oversampling = Oversampling.Value;
                        }

                        if (CrossView.HasValue)
                        {
                            stereogram.CrossView = true;
                        }

                        if (ColoredNoise.HasValue)
                        {
                            stereogram.ColoredNoise = true;
                        }

                        if (NoiseDensity.HasValue)
                        {
                            stereogram.NoiseDensity = NoiseDensity.Value;
                        }

                        if (DisablePostProcessingOverSampling.HasValue)
                        {
                            stereogram.PostProcessingOversampling = false;
                        }

                        if (NoParallelProcessing.HasValue)
                        {
                            stereogram.ParallelProcessing = false;
                        }

                        // Generate the stereogram
                        success = stereogram.Generate();
                    }

                    if (!success)
                    {
                        foreach (var message in stereogram.ValidationErrors)
                        {
                            WriteError(message);
                        }

                        result = 3;
                    }

                    // Always write warnings
                    foreach (var message in stereogram.ValidationWarnings)
                    {
                        WriteWarning(message);
                    }

                    if (success)
                    {
                        WriteSuccess("The stereogram was successfully generated. Saving...");

                        var fileName = stereogram.SaveResult(ResultFile);

                        WriteSuccess("The stereogram was saved as '{0}'", fileName);
                    }
                }
            }

            if (result > 0)
            {
                app.ShowHelp();
            }

            return(result);
        }
示例#12
0
 /// <summary>
 /// Save a stereogram
 /// </summary>
 /// <param name="stereogram"></param>
 public void SaveStereogram(Stereogram stereogram)
 {
     Debug.Assert(stereogram != null);
     SaveBitmapToFile(stereogram, "Save Stereogram", StereogramPalette.sDefaultDirectory);
 }