using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace m13 { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (openFileDialog.ShowDialog() == DialogResult.OK) { textBox1.Text = openFileDialog.FileName; } } private void run_Click(object sender, EventArgs e) { if (!File.Exists(textBox1.Text)) { MessageBox.Show("Soubor neexistuje!", "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } //try { commands = ParseCommands(textBox1.Text); Bitmap bmp = new Bitmap(700, 700); Graphics g = Graphics.FromImage(bmp); g.Clear(Color.White); foreach (ZLine ln in commands) g.DrawLine(Pens.Black, 350 + ln.p1.X, 350 - ln.p1.Y, 350 + ln.p2.X, 350 - ln.p2.Y); g.Flush(); render.Image = bmp; } /*catch { MessageBox.Show("Neznámá chyba!", "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error); }/*/ } private struct ZLine { public Point p1; public Point p2; } private List commands = new List(); private List ParseCommands(string filename) { List ret = new List(); int angle = 90; int posx = 0; int posy = 0; int pen = 0; string func = ""; string numb = ""; bool justNumbers = false; StreamReader sr = new StreamReader(filename); try { while (!sr.EndOfStream) { char c = (char)(sr.Read()); if (justNumbers) { if (c == ')') { justNumbers = false; int n = int.Parse(numb); switch (func) { case "left": angle += n; if (angle >= 360) angle -= 360; break; case "right": angle -= n; if (angle < 0) angle += 360; break; case "pen": pen = n; break; case "forward": int nposx = posx; int nposy = posy; switch (angle) { case 0: nposx += n; break; case 180: nposx -= n; break; case 90: nposy += n; break; case 270: nposy -= n; break; } if (pen > 0) { ZLine ln = new ZLine(); ln.p1 = new Point(posx, posy); ln.p2 = new Point(nposx, nposy); ret.Add(ln); } posx = nposx; posy = nposy; break; } func = ""; numb = ""; } else if (((c >= '0') && (c <= '9')) || (c == '-')) numb += c; } else { if ((c >= 'a') && (c <= 'z')) func += c; else if (c == '(') justNumbers = true; } } } finally { sr.Close(); } return ret; } } }