none
Program pro stavbu nemovitostí RRS feed

Odpovědi

  • To jsem dělal ještě za svých mladých let na SŠ:

    Nahlédni ;)

    private Bitmap _map;
            private void Form1_Load(object sender, EventArgs e)
            {
            }
            private void button1_Click(object sender, EventArgs e)
            {
                _points.Clear();
                var dialog = openFileDialog1.ShowDialog();
                if (dialog == DialogResult.OK)
                {
                    var image = Image.FromFile(openFileDialog1.FileName);
                    _map = new Bitmap(image);
                    pictureBox1.Image = _map;
                }
            }
            private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
            {
                if (pictureBox1.Image != null)
                {
                    try
                    {
                        var color = _map.GetPixel(e.X, e.Y);
                        label1.Text = color.R.ToString();
                        label2.Text = color.G.ToString();
                        label3.Text = color.B.ToString();
                    }
                    catch (Exception)
                    {
                        Console.WriteLine(@"Lul, to se nemělo stát");
                        throw;
                    }
                }
            }
            List<Point> _points = new List<Point>();
            private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
            {
                var g = Graphics.FromImage(_map);

                if (_setScale)
                {
                    g.FillEllipse(Brushes.YellowGreen, e.X, e.Y, 5, 5);
                }
                else
                {
                    g.FillEllipse(Brushes.Magenta, e.X, e.Y, 5, 5);
                }
                _points.Add(new Point(e.X, e.Y));
                pictureBox1.Image = _map;
            }
            private void button4_Click(object sender, EventArgs e)
            {
                //OBVOD
                if (_points.Count >= 3)
                {
                    var g = Graphics.FromImage(_map);
                    g.DrawLines(Pens.Black, _points.ToArray());
                    g.DrawLine(Pens.Black, _points[0].X, _points[0].Y, _points[_points.Count - 1].X, _points[_points.Count - 1].Y);
                    pictureBox1.Image = _map;
                    double obvod = 0;
                    for (int i = 0; i < _points.Count; i++)
                    {
                        if (i == _points.Count - 1)
                        {
                            obvod += Math.Sqrt(Math.Pow(_points[i].X - _points[0].X, 2) + Math.Pow(_points[i].Y - _points[0].Y, 2));
                            continue;
                        }
                        obvod += Math.Sqrt(Math.Pow(_points[i].X - _points[i + 1].X, 2) + Math.Pow(_points[i].Y - _points[i + 1].Y, 2));
                    }
                    obvod = obvod*_scale;
                    MessageBox.Show(obvod.ToString());
                }
            }
            private double _scale = 1;
            private bool _setScale = false;
            private void button2_Click(object sender, EventArgs e)
            {
                //meritko
                if (_points.Count >= 2)
                {
                    double s = Math.Sqrt(Math.Pow(_points[0].X - _points[1].X - 2, 2) +
                                          Math.Pow(_points[0].Y - _points[1].Y, 2));
                    var g = Graphics.FromImage(_map);
                    g.DrawLine(Pens.Red, _points[0].X, _points[0].Y, _points[1].X, _points[1].Y);
                    _scale = (int)numericUpDown1.Value / s;
                    pictureBox1.Image = _map;
                    _points.Clear();
                    _setScale = true;
                }
            }
            private void button3_Click(object sender, EventArgs e)
            {
                //OBSAH
                List<Point> temp = new List<Point>(_points);
                var area = Math.Abs(_points.Take(temp.Count - 1)
                                        .Select((p, i) => (temp[i + 1].X * (float)_scale - p.X * (float)_scale) * (temp[i + 1].Y * (float)_scale + p.Y * (float)_scale))
                                        .Sum() / 2);
                var g = Graphics.FromImage(_map);
                g.FillPolygon(Brushes.Aqua, _points.ToArray());
                pictureBox1.Image = _map;
                MessageBox.Show(area.ToString());
            }
        }

    úterý 8. května 2018 16:40