コード例 #1
0
        private void FloodFill(Point p, Color c)
        {
            Stack <Point> stack = new Stack <Point>();

            stack.Push(p);
            while (stack.Count > 0)
            {
                p = stack.Pop();
                image.SetPixel(p.X, p.Y, c);
                if (p.X - 1 > 0 && image.GetPixel(p.X - 1, p.Y).Equals(white))
                {
                    stack.Push(new Point(p.X - 1, p.Y));
                }

                if (p.Y - 1 > 0 && image.GetPixel(p.X, p.Y - 1).Equals(white))
                {
                    stack.Push(new Point(p.X, p.Y - 1));
                }

                if (p.X + 1 < image.Width && image.GetPixel(p.X + 1, p.Y).Equals(white))
                {
                    stack.Push(new Point(p.X + 1, p.Y));
                }

                if (p.Y + 1 < image.Height && image.GetPixel(p.X, p.Y + 1).Equals(white))
                {
                    stack.Push(new Point(p.X, p.Y + 1));
                }
            }
        }
コード例 #2
0
        private void pictureBoxSearch_MouseClick(object sender, MouseEventArgs e)
        {
            if (!pintar)
            {
                if (pa == null)
                {
                    pa = new Poligono();
                }
                if (x == -1)
                {
                    x = e.X;
                    y = e.Y;
                }

                Aplicacoes.BresenhamReta(x, y, e.X, e.Y, bm);
                pictureBoxSearch.Image = bm;

                pa.MOXY[pa.linha, 0] = pa.MAXY[pa.linha, 0] = e.X;
                pa.MOXY[pa.linha, 1] = pa.MAXY[pa.linha, 1] = e.Y;
                pa.linha++;

                x = e.X;
                y = e.Y;
            }
            else
            {
                Aplicacoes.FloodFill(e.X, e.Y, r, g, b, bm);

                pictureBoxSearch.Image = bm;

                pintar = false;
            }
        }
コード例 #3
0
ファイル: Aplicacoes.cs プロジェクト: vezetiv01/agoravai2
        private static void criaET(Poligono p)
        {
            ET caixa;

            et = new ET[buscaMaxY(p)];

            for (int i = 0; i < p.linha - 2; i++)
            {
                caixa      = new ET();
                caixa.xmin = p.MAXY[i, 0];
                caixa.ymax = p.MAXY[i + 1, 1];
                try
                {
                    caixa.incx = (p.MAXY[i + 1, 0] - p.MAXY[i, 0]) / (p.MAXY[i + 1, 1] - p.MAXY[i, 1]);
                }
                catch (Exception ex)
                {
                    caixa.incx = 0;
                }
                caixa.prox       = et[p.MAXY[i, 1]];
                et[p.MAXY[i, 1]] = caixa;
            }
            caixa      = new ET();
            caixa.xmin = p.MAXY[p.linha - 1, 0];
            caixa.ymax = p.MAXY[0, 1];
            caixa.incx = (p.MAXY[0, 0] - p.MAXY[p.linha - 1, 0]) / (p.MAXY[0, 1] - p.MAXY[p.linha - 1, 1]);
            caixa.prox = et[p.MAXY[p.linha - 1, 1] - 1];
            et[p.MAXY[p.linha - 1, 1]] = caixa;
        }
コード例 #4
0
 public Form1()
 {
     InitializeComponent();
     x      = -1;
     pa     = ps = null;
     pintar = false;
     r      = g = b = 255;
 }
コード例 #5
0
 private void pictureBoxSearch_MouseDoubleClick(object sender, MouseEventArgs e)
 {
     LBPoligono.Items.Add(pa);
     LBPoligono.ValueMember = pa.linha.ToString();
     Aplicacoes.BresenhamReta(e.X, e.Y, pa.MAXY[0, 0], pa.MAXY[0, 1], bm);
     pictureBoxSearch.Image = bm;
     pa = null;
     x  = -1;
 }
コード例 #6
0
 public Poligono(Poligono p)
 {
     foreach (Point po in p.PontosAtuais)
     {
         pontosAtuais.Add(new Point(po.X, po.Y));
         pontosOriginais.Add(new Point(po.X, po.Y));
     }
     Identidade();
 }
コード例 #7
0
 private void BtQuad_Click(object sender, EventArgs e)
 {
     lbDescricao.Visible = false;
     p    = new Poligono();
     flag = ((Button)sender).Name.Replace("bt", "");
     if (flag.Equals("Bal"))
     {
         cdCor.ShowDialog();
     }
 }
コード例 #8
0
ファイル: Aplicacoes.cs プロジェクト: vezetiv01/agoravai2
        private static int buscaMaxY(Poligono p)
        {
            int max = 0;

            for (int i = 0; i < p.linha; i++)
            {
                if (p.MAXY[i, 1] > max)
                {
                    max = p.MAXY[i, 1];
                }
            }
            return(max);
        }
コード例 #9
0
        private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            List <Point> l = new List <Point>();

            if (down.X != -1)
            {
                if (flag.Equals("Ret"))
                {
                    p.Draw(white, image);
                    l.Add(new Point(Math.Min(e.X, down.X), Math.Min(e.Y, down.Y)));
                    l.Add(new Point(Math.Abs(down.X - e.X) + Math.Min(e.X, down.X), Math.Min(e.Y, down.Y)));
                    l.Add(new Point(Math.Max(e.X, down.X), Math.Max(e.Y, down.Y)));
                    l.Add(new Point(Math.Min(e.X, down.X), Math.Abs(down.Y - e.Y) + Math.Min(e.Y, down.Y)));
                    p = new Poligono(l, 'R');
                    p.Draw(color, image);
                }
                else if (flag.Equals("Circ"))
                {
                    Primitivas.ponto_medio_circunf(down.X, down.Y, old.X, old.Y, white, image);
                    Primitivas.ponto_medio_circunf(down.X, down.Y, e.X, e.Y, color, image);
                }
                else if (flag.Equals("Elip"))
                {
                    Primitivas.ponto_medio_elipse(down.X, down.Y, old.X, old.Y, white, image);
                    Primitivas.ponto_medio_elipse(down.X, down.Y, e.X, e.Y, color, image);
                }
                else if (flag.Equals("Reta"))
                {
                    Primitivas.bresenham(down.X, down.Y, old.X, old.Y, white, image);
                    Primitivas.bresenham(down.X, down.Y, e.X, e.Y, color, image);
                }
                else if (flag.Equals("Livre"))
                {
                    Primitivas.bresenham(liv.X, liv.Y, e.X, e.Y, color, image);
                    liv = e.Location;
                }
                else if (flag.Equals("Pol"))
                {
                    Primitivas.bresenham(down.X, down.Y, old.X, old.Y, white, image);
                    Primitivas.bresenham(down.X, down.Y, e.X, e.Y, color, image);
                }

                old          = e.Location;
                pbMain.Image = image;
            }

            lbX.Text = e.X + "";
            lbY.Text = e.Y + "";
        }
コード例 #10
0
ファイル: ViewPort.cs プロジェクト: riccihenrique/Objetos2D
        public void SetPoligono(Object o)
        {
            this.p               = (Poligono)o;
            pictureBox1.Width    = Width - 15;
            pictureBox1.Height   = Height - 45;
            pictureBox1.Location = new Point(Location.X, Location.Y);
            image = new Bitmap(pictureBox1.Width, pictureBox1.Height);

            Point centro = p.Centro();
            Point min = p.MinPoint(), max = p.MaxPoint();

            p.Escala(((double)Width - 15) / (max.X - min.X), ((double)Height - 45) / (max.Y - min.Y));
            p.Translacao(-min.X, -min.Y);

            p.Draw(Color.Black, image);
            pictureBox1.Image = image;
        }
コード例 #11
0
ファイル: Aplicacoes.cs プロジェクト: vezetiv01/agoravai2
        public static void cisalhamento(int x, int y, Poligono p)
        {
            double[,] maT = new double[3, 3];

            maT[0, 0] = 1;
            maT[0, 1] = 0;
            maT[0, 2] = 0;
            maT[1, 0] = x;
            maT[1, 1] = 1;
            maT[1, 2] = 0;
            maT[2, 0] = 0;
            maT[2, 1] = 0;
            maT[2, 2] = 1;

            p.MA = multiplicaMatriz(maT, p.MA);

            for (int i = 0; i < p.linha; i++)
            {
                p.MAXY[i, 0] = (int)Math.Round(p.MA[0, 0] * p.MOXY[i, 0] + p.MA[0, 1] * p.MOXY[i, 1] + p.MA[0, 2]);
                p.MAXY[i, 1] = (int)Math.Round(p.MA[1, 0] * p.MOXY[i, 0] + p.MA[1, 1] * p.MOXY[i, 1] + p.MA[1, 2]);
            }

            maT[0, 0] = 1;
            maT[0, 1] = y;
            maT[0, 2] = 0;
            maT[1, 0] = 0;
            maT[1, 1] = 1;
            maT[1, 2] = 0;
            maT[2, 0] = 0;
            maT[2, 1] = 0;
            maT[2, 2] = 1;

            p.MA = multiplicaMatriz(maT, p.MA);

            for (int i = 0; i < p.linha; i++)
            {
                p.MAXY[i, 0] = (int)Math.Round(p.MA[0, 0] * p.MOXY[i, 0] + p.MA[0, 1] * p.MOXY[i, 1] + p.MA[0, 2]);
                p.MAXY[i, 1] = (int)Math.Round(p.MA[1, 0] * p.MOXY[i, 0] + p.MA[1, 1] * p.MOXY[i, 1] + p.MA[1, 2]);
            }
        }
コード例 #12
0
ファイル: Aplicacoes.cs プロジェクト: vezetiv01/agoravai2
        public static void Scanline(Poligono p, int cx, int cy, int r, int g, int b, Bitmap imageBitmapSrc)
        {
            int y;

            criaET(p);
            aet = null;

            for (y = 0; et[y] != null; y++)
            {
            }
            //aet = et[y];

            do
            {
                insereAET(y);
                excluiAET(y);
                ordenaAET();
                desenhaLinha(cx, cy, y, r, g, b, imageBitmapSrc);
                atualizaXmin();
                y++;
            }while (aet != null);
        }
コード例 #13
0
ファイル: Aplicacoes.cs プロジェクト: vezetiv01/agoravai2
        public static void rotacionar(int ang, Poligono p)
        {
            double[,] maT = new double[3, 3];

            maT[0, 0] = Math.Cos(ang);
            maT[0, 1] = -Math.Sin(ang);
            maT[0, 2] = 0;
            maT[1, 0] = Math.Sin(ang);
            maT[1, 1] = Math.Cos(ang);
            maT[1, 2] = 0;
            maT[2, 0] = 0;
            maT[2, 1] = 0;
            maT[2, 2] = 1;

            p.MA = multiplicaMatriz(maT, p.MA);

            for (int i = 0; i < p.linha; i++)
            {
                p.MAXY[i, 0] = (int)Math.Round(p.MA[0, 0] * p.MOXY[i, 0] + p.MA[0, 1] * p.MOXY[i, 1] + p.MA[0, 2]);
                p.MAXY[i, 1] = (int)Math.Round(p.MA[1, 0] * p.MOXY[i, 0] + p.MA[1, 1] * p.MOXY[i, 1] + p.MA[1, 2]);
            }
        }
コード例 #14
0
        private void PictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            if (down.X != -1 && !flag.Equals(""))
            {
                if (flag.Equals("Livre") || flag.Equals("Reta") || flag.Equals("Circ") || flag.Equals("Elip"))
                {
                    old.X  = 0;
                    down.X = -1;
                }
                else
                if (!flag.Equals("Pol"))
                {
                    p.Pol1 = "Poligono " + (lvPolig.Items.Count + 1);
                    lvPolig.Items.Add(p);
                    p = new Poligono();

                    old.X  = 0;
                    down.X = -1;
                }
                else
                if (p.PontosAtuais.Count > 2 && e.Button == MouseButtons.Right)
                {
                    Primitivas.bresenham(down.X, down.Y, p.PontosOriginais[0].X, p.PontosOriginais[0].Y, Color.Black, image);
                    p.Pol1 = "Poligono " + (lvPolig.Items.Count + 1);
                    lvPolig.Items.Add(p);
                    p = new Poligono();

                    old.X  = 0;
                    down.X = -1;
                }
                else
                {
                    down = e.Location;
                }
            }
            pbMain.Image = image;
        }
コード例 #15
0
        private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvPolig.SelectedIndex > -1)
            {
                p = (Poligono)lvPolig.Items[lvPolig.SelectedIndex];
                p.Draw(Color.Red, image);

                DataTable dt = new DataTable();
                dt.Columns.Add("X");
                dt.Columns.Add("Y");

                foreach (Point pts in p.PontosAtuais)
                {
                    DataRow dr = dt.NewRow();
                    dr["X"] = pts.X;
                    dr["Y"] = pts.Y;

                    dt.Rows.Add(dr);
                }
                gbTrans.Enabled          = true;
                dataGridView1.DataSource = dt;
                pbMain.Image             = image;
            }
        }
コード例 #16
0
        private void PictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (!flag.Equals(""))
            {
                if (flag.Equals("Bal"))
                {
                    FloodFill(e.Location, cdCor.Color);
                    pbMain.Image = image;
                }
                else
                {
                    if (down.X == -1)
                    {
                        p = new Poligono();
                    }

                    down = liv = e.Location;
                    if (flag.Equals("Pol") && down.X != -1)
                    {
                        p.AddPonto(down);
                    }
                }
            }
        }
コード例 #17
0
ファイル: fInfos.cs プロジェクト: riccihenrique/Objetos2D
 public void SetPoligono(Object p)
 {
     this.p = new Poligono((Poligono)p);
 }
コード例 #18
0
ファイル: Aplicacoes.cs プロジェクト: vezetiv01/agoravai2
 public static void flipVH(Poligono p)
 {
     flipV(p);
     flipH(p);
 }