Подскажите пожалуйста, как происходит заливка области - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Помогите пожалуйста разобраться в программе. В принципе все понял, удалил все не нужные функции, но не могу понять вот что: как и в какой части кода происходит собственно заливка области соответствующей формуле? И её анализ. Программу прикрепляю к сообщению. Заранее огромное человеческое спасибо.

Решение задачи: «Подскажите пожалуйста, как происходит заливка области»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
 
namespace Venn
{
  
    public partial class Window1 : Window
    {
        private GeometryVennParser vp;
 
        public Window1()
        {
            InitializeComponent();
            textBox1.Focus();
 
            vp = new Geometries.GeometryC();
            ShowOutlinesAndLabels();
 
            Application.Current.MainWindow = this;
 
        }
 
        private void ShowOutlinesAndLabels()
        {
            // remove all labels
            canvas1.Children.RemoveRange(3, canvas1.Children.Count - 3);
 
            // create all labels as appropriate
            GeometryGroup gg = new GeometryGroup();
 
            for (char s = 'A'; s <= vp.MaxSet; s++)
            {
                gg.Children.Add(vp.Set(s));
                TextBlock lbl = new TextBlock();
                lbl.Text = s.ToString();
 
                lbl.Margin = new Thickness(vp.LabelLocation(s).X, vp.LabelLocation(s).Y, 0, 0);
 
                canvas1.Children.Add(lbl);
            }
            OutlinePath.Data = gg;
        }
 
        private string ToLogic(string toParse)
        {
            VennParser<string> vp = new VennParser<string>();
            vp.Complement = (x =>
            {
                return "~" + x; // don't need parens because both other ops have them
            });
            vp.Intersect = ((x, y) =>
            {
                return "(" + x + " ^ " + y + ")";
            });
            vp.Union = ((x, y) =>
            {
                return "(" + x + " v " + y + ")";
            });
            vp.EmptySet = (() =>
            {
                return "false";
            });
            vp.Universe = (() =>
            {
                return "true";
            });
 
            vp.Set = (x => { return x.ToString(); });
            vp.MaxSet = 'Z';
 
            string result = Codehaus.Parsec.Parsers.RunParser(toParse, vp.Parser, "Truth Statement");
            return result;
        }
 
        
 
 
        private void truthTable_SizeChanged(object sender, SizeChangedEventArgs e)
        {
           
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
           
            string toParse = textBox1.Text;
            toParse = toParse.Replace('∩', '&');
            toParse = toParse.Replace('в€Є', '|');
            toParse = toParse.Replace('в€…', '0');
 
            try
            {
                if (String.IsNullOrEmpty(toParse))
                    throw new Exception("");
 
                Geometry result = Codehaus.Parsec.Parsers.RunParser(toParse, vp.Parser, "Неверный ввод");
               
               
                FillPath.Data = result;
                lblError.Text = "";
            }
            catch (Exception ex)
            {
                FillPath.Data = null;
                               
                lblError.Text = ex.Message;
            }
            textBox1.Focus();
        }
 
        private void Canvas_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            double widScale = rBorder.ActualWidth / 201.0;
            double heiScale = rBorder.ActualHeight / 191.0;
 
            double scale = Math.Min(widScale, heiScale);
 
            double mleft = (rBorder.ActualWidth - scale * 201.0) / 2.0;
            double mtop = (rBorder.ActualHeight - scale * 191.0) / 2.0;
 
            canvas1.RenderTransform = new ScaleTransform(scale, scale);
            canvas1.Margin = new Thickness(Math.Max(0, mleft), Math.Max(0, mtop), 0, 0);
 
        }
 
        private void Sets_Click(object sender, RoutedEventArgs e)
        {
 
            textBox1.Focus();
 
            if (sender == SetsA)
                vp = new Geometries.GeometryA();
            if (sender == SetsB)
                vp = new Geometries.GeometryB();
            if (sender == SetsC)
                vp = new Geometries.GeometryC();
            if (sender == SetsD)
                vp = new Geometries.GeometryD();
 
            ShowOutlinesAndLabels();
 
            button1_Click(sender, e);
        }
 
        private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
        {
            int cp = textBox1.SelectionStart;
            int cl = textBox1.SelectionLength;
 
            string nt = textBox1.Text;
 
          
            nt = nt.Replace('^', '∩');
            nt = nt.Replace('6', '∩');
            nt = nt.Replace('&', '∩');
            nt = nt.Replace('7', '∩');
            nt = nt.Replace('*', '∩');
            nt = nt.Replace('8', '∩');
            nt = nt.Replace('i', '∩');
            nt = nt.Replace('I', '∩');
 
            nt = nt.Replace('|', 'в€Є');
            nt = nt.Replace('v', 'в€Є');
            nt = nt.Replace('+', 'в€Є');
            nt = nt.Replace('u', 'в€Є');
          
            nt = nt.Replace('~', '\'');
 
            nt = nt.Replace('0', 'в€…');
 
            nt = nt.Replace('1', 'U');
 
            nt = nt.ToUpper();
 
            if (nt != textBox1.Text)
            {
                textBox1.Text = nt;
                textBox1.SelectionStart = cp;
                textBox1.SelectionLength = cl;
            }
        }
 
        private void btnCancel_Click(object sender, RoutedEventArgs e)
        {
            FillPath.Data = null;
          
            lblError.Text = "";
            
            textBox1.Clear();
            textBox1.Focus();
        }
 
        private void btnSwap_Click(object sender, RoutedEventArgs e)
        {
           
        }
 
        private void canvas1_MouseClick(object sender, MouseButtonEventArgs e)
        {
            System.Windows.Point i = e.GetPosition(canvas1);
            textBox1.Text = VisualizeVenn(i);
            button1_Click(null, null);
        }
 
        
        private void canvas1_MouseMove(object sender, MouseEventArgs e)
        {
      
        }
        
 
        private String VisualizeVenn(Point i)
        {
            String oldStatement = textBox1.Text;
            String newStatement = "";
            Geometry fillgeo = vp.EmptySet();
            if (FillPath.Data != null)
                fillgeo = FillPath.Data;
            bool isfilled = fillgeo.FillContains(i);
            List<Geometry> geometries = new List<Geometry>();
            for (char s = 'A'; s <= vp.MaxSet; s++)
                geometries.Add(vp.Set(s));
            List<char> hits = new List<char>();
            char m = 'A';
            foreach (Geometry n in geometries)
            {
                if (n.FillContains(i))
                    hits.Add(m);
                m++;
            }
            if (!isfilled)
            {
                if (oldStatement != "")
                    oldStatement += "в€Є";
            }
            else
                oldStatement += "∩";
            newStatement += "(";
            for (char s = 'A'; s <= vp.MaxSet; s++)
            {
                if (hits.Contains(s))
                    if (newStatement == "(")
                        newStatement += s.ToString();
                    else
                        newStatement += ('∩' + s.ToString());
                else
                    if (newStatement == "(")
                        newStatement += (s.ToString() + "'");
                    else
                        newStatement += ('∩' + s.ToString() + "'");
            }
            newStatement += ")";
            if (isfilled)
                newStatement += "'";
            return oldStatement + newStatement;
        }
 
        private void Hyperlink_Click(object sender, RoutedEventArgs e)
        {
          
          
 
        }
 
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            Application.Current.Shutdown();
        }
 
 
   
 
        private void GenerateImage(Action<BitmapSource> WhatToDoWithIt)
        {
            
        }
 
        private void btnCopy_Click(object sender, RoutedEventArgs e)
        {
 
            GenerateImage(bmp =>
            {
                Clipboard.SetImage(bmp);
            });
 
 
        }
 
        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            GenerateImage(bmp =>
            {
                Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
 
                sfd.DefaultExt = ".png"; 
                sfd.Filter = "PNG Image (.png)|*.png"; 
 
                bool? save = sfd.ShowDialog();
 
                if (save == true) 
                {
 
                    PngBitmapEncoder png = new PngBitmapEncoder();
                    png.Frames.Add(BitmapFrame.Create(bmp));
                    using (System.IO.Stream str = sfd.OpenFile())
                    {
                        png.Save(str);
                    }
 
                }
            });
        }
 
       
        private void btnKey_Click(object sender, RoutedEventArgs e)
        {
            Button b = sender as Button;
            int cidx = textBox1.CaretIndex;
            textBox1.Text = textBox1.Text.Insert(cidx, b.Content.ToString());
            textBox1.CaretIndex = cidx + 1;
            textBox1.Focus();
 
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы