private void poligono2ToolStripMenuItem_Click(object sender, EventArgs e)
 {
     pictureBox.Cursor      = Cursors.Cross;
     poligono               = new Poligono(cor);
     isDesenhaPoligonoMouse = true;
     contMouseDown          = 0;
     opcao = 10;
 }
        private void btRemPoligono_Click(object sender, EventArgs e)
        {
            Poligono p = getPoligonoSelecionado();

            if (p != null)
            {
                DataRow dr = dsPoligonos.Tables["tbPoligonos"].Rows.Find(p.getPosicaoInicial());
                dsPoligonos.Tables["tbPoligonos"].Rows.Remove(dr);
                poligonos.Remove(p);
                desenhaPoligonos();
            }
        }
        private void btAddPoligono_Click(object sender, EventArgs e)
        {
            FRMPoligonos frm = new FRMPoligonos();

            frm.ShowDialog();
            if (frm.getDesenha() && frm.getPontos().Count > 3)
            {
                Poligono p = new Poligono(frm.getPontos(), cor);
                novoPoligono(p);
            }
            frm.Dispose();
        }
 private void novoPoligono(Poligono p)
 {
     if (p.getPontos().Count > 2)
     {
         p.desenha(imagemBmp);
         poligonos.Add(p);
         pictureBox.Image = imagemBmp;
         DataRow dr = dsPoligonos.Tables["tbPoligonos"].NewRow();
         dr["Poligono"]       = p;
         dr["PosicaoInicial"] = p.getPosicaoInicial();
         dsPoligonos.Tables["tbPoligonos"].Rows.Add(dr);
     }
 }
        private void espelho(bool vertical)
        {
            Poligono p = getPoligonoSelecionado();

            if (p != null)
            {
                Point pt = p.getCentroAtual();
                p.traslacao(-pt.X, -pt.Y);
                p.espelhamento(vertical);
                p.traslacao(pt.X, pt.Y);
                desenhaPoligonos();
            }
        }
        private void desenhaPoligonos()
        {
            pictureBox.Image = imagemBmp = new Bitmap(W, H);
            Util.preencher((Bitmap)pictureBox.Image, fundo);

            for (int i = 0; i < poligonos.Count; i++)
            {
                Poligono p = poligonos[i];
                p.desenha(imagemBmp);
                Point centro = p.getCentroAtual();
            }

            pictureBox.Image = imagemBmp;
        }
        private void moverPoligonoClick(MouseEventArgs e)
        {
            if (moverPoligono)
            {
                Poligono p = getPoligonoSelecionado();

                Point pontos = p.getCentroAtual();

                double dy = (double)e.Y - pontos.Y;
                double dx = (double)e.X - pontos.X;

                p.traslacao(dx, dy);
                desenhaPoligonos();
            }
        }
        private void Principal_Load(object sender, EventArgs e)
        {
            cor = Color.Black;
            W   = 1920;
            H   = 1080;
            pictureBox.Image = imagemBmp = new Bitmap(W, H);
            Util.preencher((Bitmap)pictureBox.Image, Color.White);
            xi                     = yi = xf = yf = 0;
            opcao                  = -1;
            tsLBpos.Text           = "";
            mouseDown              = false;
            moverPoligono          = false;
            poligonos              = new List <Poligono>();
            isDesenhaPoligonoMouse = false;
            // contMouseDown = 0;
            coord = new int[2];

            dsPoligonos             = Util.criaTablePoligonos();
            dgvPoligonos.DataSource = dsPoligonos;
            dgvPoligonos.DataMember = "tbPoligonos";

            rbOrigem.Checked     = true;
            rbTranslacao.Checked = true;
            fundo = Color.White;
            //---------------------------
            Poligono p = new Poligono(cor);

            p.add(new Point(490, 50));
            p.add(new Point(490, 280));
            p.add(new Point(700, 280));
            novoPoligono(p);

            p = new Poligono(cor);
            p.add(new Point(170, 320));
            p.add(new Point(420, 440));
            p.add(new Point(420, 430));
            p.add(new Point(170, 440));
            novoPoligono(p);

            p = new Poligono(cor);
            p.add(new Point(240, 40));
            p.add(new Point(95, 130));
            p.add(new Point(150, 280));
            p.add(new Point(330, 280));
            p.add(new Point(380, 130));
            novoPoligono(p);
        }
 private void dgvPoligonos_RowEnter(object sender, DataGridViewCellEventArgs e)
 {
     if (poligonos.Count > e.RowIndex)
     {
         DataSet dsPts = Util.criaTablePontos();
         dgvPontos.DataSource = dsPts;
         dgvPontos.DataMember = "tbPontos";
         Poligono p = poligonos[e.RowIndex];
         if (p != null)
         {
             List <Point> pts = p.getPontos();
             foreach (Point pt in pts)
             {
                 DataRow dr = dsPts.Tables["tbPontos"].NewRow();
                 dr["Ponto"] = new Point(pt.X, pt.Y);
                 dsPts.Tables["tbPontos"].Rows.Add(dr);
             }
         }
     }
 }
        public static unsafe void scanLine(int xclick, int yclick, Bitmap img, Color c, Poligono poligono)
        {
            int        H       = img.Height;
            int        W       = img.Width;
            BitmapData bmpData = img.LockBits(new Rectangle(0, 0, W, H), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            int        padding = bmpData.Stride - (W * 3);
            byte *     ptrIni  = (byte *)bmpData.Scan0.ToPointer();

            List <List <Aresta> > ET  = new List <List <Aresta> >();
            List <Aresta>         AET = new List <Aresta>();

            for (int i = 0; i < Principal.getHTela(); i++)
            {
                ET.Add(new List <Aresta>());
            }

            List <Point> polPoint = poligono.getPontos();

            for (int i = 0; i < polPoint.Count; i++)
            {
                Aresta aresta = new Aresta(polPoint[i % polPoint.Count], polPoint[(i + 1) % polPoint.Count]);
                ET[aresta.getYmin()].Add(aresta);
            }
            int y = 0, x;

            while (ET[y].Count == 0)
            {
                y++;
            }

            //primeiro Y
            foreach (Aresta a in ET[y])
            {
                AET.Add(a);
            }

            while (AET.Count > 0)
            {
                for (int i = 0; i < AET.Count; i++)
                {
                    if (AET[i].getYmax() == y)
                    {
                        AET.Remove(AET[i--]);
                    }
                }
                //AET.Sort();
                heap(AET);
                for (int i = 0; i < AET.Count; i += 2)
                {
                    Aresta a = AET[i];
                    Aresta b = AET[i + 1];
                    for (x = (int)Math.Floor(a.getXmin()); x < Math.Ceiling(b.getXmin()); x++)
                    {
                        Util.setPixel(ptrIni, x, y, W, padding, c);
                    }
                    a.setXmin(a.getXmin() + a.getIncX());
                    b.setXmin(b.getXmin() + b.getIncX());
                }
                y++;
                foreach (Aresta a in ET[y])
                {
                    AET.Add(a);
                }
            }
            img.UnlockBits(bmpData);
        }
Ejemplo n.º 11
0
        private void desenha(Bitmap bmp, int x, int y)
        {
            xf = x;
            yf = y;

            if (xi < 0 || yi < 0 || xf < 0 || yf < 0 || xi > bmp.Width || xf > bmp.Width || yi > bmp.Height || yf > bmp.Height)
            {
                return;
            }

            switch (opcao)
            {
            case 1:
                Reta.equacaoGeral(xi, yi, xf, yf, bmp, cor);
                break;

            case 2:
                Reta.DDA(xi, yi, xf, yf, bmp, cor);
                break;

            case 3:
                Reta.pontoMedio(xi, yi, xf, yf, bmp, cor);
                break;

            case 4:
                Circunferencia.equacaoGeral(xi, yi, xf, yf, bmp, cor);
                break;

            case 5:
                Circunferencia.trigonometrica(xi, yi, xf, yf, bmp, cor);
                break;

            case 6:
                Circunferencia.pontoMedio(xi, yi, xf, yf, bmp, cor);
                break;

            case 7:
                Elipse.pontoMedio(xi, yi, xf, yf, bmp, cor);
                break;

            case 8:
                Preenchimento.floodFill(xf, yf, bmp, cor);
                break;

            case 9:
                if (poligonos.Count > 0)
                {
                    Poligono click = poligonos[0];
                    foreach (Poligono p in poligonos)
                    {
                        if (p.getDistanciaClick(xf, yf) < click.getDistanciaClick(xf, yf))
                        {
                            click = p;
                        }
                    }
                    Preenchimento.scanLine(xf, yf, bmp, cor, click);
                }
                break;

            case 10:
                Reta.pontoMedio(xi, yi, xf, yf, bmp, cor);
                break;
            }

            pictureBox.Image = bmp;
        }
Ejemplo n.º 12
0
        private void btAplicar_Click(object sender, EventArgs e)
        {
            Poligono p = getPoligonoSelecionado();

            if (p != null)
            {
                double tx     = 0;
                double ty     = 0;
                double angulo = 0;

                double.TryParse(tbTranslacaoX.Text, out tx);
                double.TryParse(tbTranslacaoY.Text, out ty);
                double.TryParse(tbRotacao.Text, out angulo);

                if (rbOrigem.Checked)
                {
                    if (rbTranslacao.Checked)
                    {
                        p.traslacao(tx, ty);
                    }
                    if (rbEscala.Checked)
                    {
                        p.escala(tx, ty);
                    }
                    if (rbRotacao.Checked)
                    {
                        p.rotacao(angulo);
                    }
                    if (rbCisalhamento.Checked)
                    {
                        p.cisalhamento(tx, ty);
                    }
                    if (rbHorizontal.Checked)
                    {
                        p.espelhamento(false);
                    }
                    if (rbVertical.Checked)
                    {
                        p.espelhamento(true);
                    }
                }
                else
                {
                    if (rbCentro.Checked)
                    {
                        Point pt = p.getCentroAtual();
                        p.traslacao(-pt.X, -pt.Y);
                        if (rbTranslacao.Checked)
                        {
                            p.traslacao(tx, ty);
                        }
                        if (rbEscala.Checked)
                        {
                            p.escala(tx, ty);
                        }
                        if (rbRotacao.Checked)
                        {
                            p.rotacao(angulo);
                        }
                        if (rbCisalhamento.Checked)
                        {
                            p.cisalhamento(tx, ty);
                        }
                        if (rbHorizontal.Checked)
                        {
                            p.espelhamento(false);
                        }
                        if (rbVertical.Checked)
                        {
                            p.espelhamento(true);
                        }
                        p.traslacao(pt.X, pt.Y);
                    }
                }
                desenhaPoligonos();
            }
        }