private void dgvCaminhos_SelectionChanged(object sender, EventArgs e) { Graphics g = pbMapa.CreateGraphics(); Pen p = new Pen(Color.Red, 2); int codCidade, codProx; Cidade cidade, prox; double fatorDeReducaoX = pbMapa.Width / 4096.0; double fatorDeReducaoY = pbMapa.Height / 2048.0; g.Clear(Color.Transparent); //limpa o pbMapa g.DrawImage(pbMapa.Image, 0, 0, pbMapa.Width, pbMapa.Height); //redesenha o mapa arvore.DesenharCidades(fatorDeReducaoX, fatorDeReducaoY, g, arvore.Raiz); //redesenha as cidades //pra cada o valor de cada celula na linha selecionada for (int i = 0; i < dgvCaminhos.ColumnCount - 1; i++) { try//verifica se tem valor na celula { codCidade = (int)dgvCaminhos.CurrentRow.Cells[i].Value; codProx = (int)dgvCaminhos.CurrentRow.Cells[i + 1].Value; } catch (Exception ex) //se ocorrer erro, é porque não há nenhum valor em alguma das celulas { break; //sai da for, já que não haverá mais nenhum valor a partir daqui } //pega as cidades referentes aos codigos retornados cidade = arvore.EnconctrarCidade(codCidade, arvore.Raiz); prox = arvore.EnconctrarCidade(codProx, arvore.Raiz); //desenha uma linha entre as cidades retornadas g.DrawLine(p, (float)(cidade.CoordX * fatorDeReducaoX), (float)(cidade.CoordY * fatorDeReducaoY), (float)(prox.CoordX * fatorDeReducaoX), (float)(prox.CoordY * fatorDeReducaoY)); } }
private void pbMapa_Paint(object sender, PaintEventArgs e) { if (arvore != null) { Graphics g = e.Graphics; double fatorDeReducaoX = pbMapa.Width / 4096.0; double fatorDeReducaoY = pbMapa.Height / 2048.0; arvore.DesenharCidades(fatorDeReducaoX, fatorDeReducaoY, g, arvore.Raiz); } }