private void ReexibePoligono() { pontos.Clear(); ClearTelaPoligono(); Poligono poli = Lpoli.Find(x => x.Rotulo == ((Poligono)CbPolignos.SelectedItem).Rotulo); foreach (Point p in poli.pontosAtuais) { dgvPontos.Rows.Add(p.X.ToString()); dgvPontos.Rows[dgvPontos.Rows.Count - 1].Cells[0].Value = p.X.ToString(); dgvPontos.Rows[dgvPontos.Rows.Count - 1].Cells[1].Value = p.Y.ToString(); pontos.Add(p); if (pontos.Count == 2) { Primitivas.DecliveDDA(pontos[0], pontos[1], pbxPoligonos); pontos[0] = pontos[1]; pontos.RemoveAt(1); } } if (poli.Fechado == true) //Se o poligono estiver completo, a ligação do Pi com Pf é feita { Primitivas.DecliveDDA(poli.pontosAtuais[0], poli.pontosAtuais[poli.pontosAtuais.Count - 1], pbxPoligonos); } }
//INTERFACE PRIMITIVAS GRÁFICAS private void PbxRetas_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { pontos.Add(new Point(e.X, e.Y)); if (pontos.Count == 2) { if (RbRetaReal.Checked) { Primitivas.EQgeral(pontos[0], pontos[1], pbxRetas); } else if (RbRetaDDA.Checked) { Primitivas.DecliveDDA(pontos[0], pontos[1], pbxRetas); } else if (RbRetaBresenhan.Checked) { Primitivas.Bresenhan(pontos[0], pontos[1], pbxRetas); } else if (RbCircReal.Checked) { double raio = Math.Sqrt(Math.Pow(pontos[1].X - pontos[0].X, 2) + Math.Pow(pontos[1].Y - pontos[0].Y, 2)); Primitivas.CircGeral(pontos[0], pbxRetas, raio); } else if (RbCircTrig.Checked) { double raio = Math.Sqrt(Math.Pow(pontos[1].X - pontos[0].X, 2) + Math.Pow(pontos[1].Y - pontos[0].Y, 2)); Primitivas.CircTrig(pontos[0], pbxRetas, raio); } else if (RbCircPtMedio.Checked) { double raio = Math.Sqrt(Math.Pow(pontos[1].X - pontos[0].X, 2) + Math.Pow(pontos[1].Y - pontos[0].Y, 2)); Primitivas.PontoMedio(pontos[0], pbxRetas, raio); } else if (RbElipMédio.Checked) { Primitivas.Elipse(pontos[0], pontos[1], pbxRetas); } pontos.Clear(); } } }
//INTERFACE POLIGONOS private void PbxPoligonos_MouseClick(object sender, MouseEventArgs e) { if (CbPolignos.SelectedIndex > -1 && ((Poligono)CbPolignos.SelectedItem).Fechado == false) { if (e.Button == MouseButtons.Left) { pontos.Add(e.Location); int pos = Lpoli.FindIndex(x => x.Rotulo == ((Poligono)CbPolignos.SelectedItem).Rotulo); //Busca a posição do poli selecionado na lista de polis Lpoli[pos].AddPonto(e.Location); //add o ponto dentro do obj poligono dgvPontos.Rows.Add(e.X.ToString()); dgvPontos.Rows[dgvPontos.Rows.Count - 1].Cells[0].Value = e.X.ToString(); dgvPontos.Rows[dgvPontos.Rows.Count - 1].Cells[1].Value = e.Y.ToString(); } else if (e.Button == MouseButtons.Right) { pontos.Add(e.Location); int pos = Lpoli.FindIndex(x => x.Rotulo == ((Poligono)CbPolignos.SelectedItem).Rotulo); //Busca a posição do poli selecionado na lista de polis Lpoli[pos].AddPonto(e.Location); //add o ponto dentro do obj poligono dgvPontos.Rows.Add(e.X.ToString()); dgvPontos.Rows[dgvPontos.Rows.Count - 1].Cells[0].Value = e.X.ToString(); dgvPontos.Rows[dgvPontos.Rows.Count - 1].Cells[1].Value = e.Y.ToString(); Primitivas.DecliveDDA(e.Location, Lpoli[pos].Pontos[0], pbxPoligonos); ((Poligono)CbPolignos.SelectedItem).Fechado = true; ((Poligono)CbPolignos.SelectedItem).pontosAtuais = ((Poligono)CbPolignos.SelectedItem).pontos; } if (pontos.Count == 2) { Primitivas.DecliveDDA(pontos[0], pontos[1], pbxPoligonos); pontos[0] = pontos[1]; //O ultimo ponto se transforma em um novo inicial pontos.RemoveAt(1); } } if (cbFloodFill.Checked && e.Button == MouseButtons.Left) { ((Poligono)CbPolignos.SelectedItem).floodFill(pbxPoligonos, e.X, e.Y); } }