Подскажите пожалуйста, как происходит заливка области - 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д