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); }
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; }
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(); } }