private void FrmCaminhos_Load(object sender, EventArgs e) { arvoreCidades = new ArvoreDeBusca <Cidades>(); // leitura do arquivo de cidades e armazenamento na arvoreCidades dlgAbrir.Title = "Escolha o arquivo das Cidades de Marte"; if (dlgAbrir.ShowDialog() == DialogResult.OK) // abre explorador de arquivos p/ usuario escolher arquivo { StreamReader arq = new StreamReader(dlgAbrir.FileName); while (!arq.EndOfStream) // enquanto não estiver no fim do arquivo { string linha = arq.ReadLine(); // le uma linha por vez Cidades cidade = new Cidades(int.Parse(linha.Substring(0, 3)), linha.Substring(3, 15), int.Parse(linha.Substring(18, 5)), int.Parse(linha.Substring(24))); arvoreCidades.Incluir(cidade); // add na arvore } arq.Close(); } // leitura do arquivo de cidades e armazenamento na arvoreCidades dlgAbrir.Title = "Escolha o arquivo dos Caminhos entre as Cidades de Marte"; if (dlgAbrir.ShowDialog() == DialogResult.OK) // abre explorador de arquivos p/ usuario escolher arquivo { grafoCidades = new GrafoBacktracking(dlgAbrir.FileName); } // exibe as cidades e seus ids nos listBoxes arvoreCidades.ExibirLsb(lsbDestino); arvoreCidades.ExibirLsb(lsbOrigem); // cria grafico para desenhar sobre o picture box com o mapa g = Graphics.FromImage(pbMapa.Image); arvoreCidades.DesenharMapa(arvoreCidades.Raiz, g); // coloca os pontos de cada cidade }
private void DesenharCaminho(PilhaLista <CaminhoEntreCidades> caminho) { // cria um novo gráfico sobre o pictureBox g = pbMapa.CreateGraphics(); //redesenha as cidades nas coordenadas corretas arvoreCidades.DesenharMapa(arvoreCidades.Raiz, g); // atualiza pbMapa.Refresh(); while (!caminho.EstaVazia) // percorre o caminho { var atual = caminho.OTopo(); // resgata e instancia as cidades de origem e destino de cada passo Cidades origem = arvoreCidades.GetDado(new Cidades(atual.IdCidadeOrigem)); Cidades destino = arvoreCidades.GetDado(new Cidades(atual.IdCidadeDestino)); // instancia-se caneta para desenhar as linhas Pen pen = new Pen(Color.DarkRed, 2); // cor: vermelho escuro - espessura = 2px pen.StartCap = LineCap.RoundAnchor; // bolinha no início da seta (origem) pen.EndCap = LineCap.ArrowAnchor; // seta no fim da reta (destino) //pontos de coordenadas da origem e do destino PointF pOrigem = new PointF(origem.CoordenadaX / 4 + 5, origem.CoordenadaY / 4 + 5); PointF pDestino = new PointF(destino.CoordenadaX / 4 + 5, destino.CoordenadaY / 4 + 5); g.DrawLine(pen, pOrigem, pDestino); // desenha a linha caminho.Desempilhar(); } // atualiza graphic g.Dispose(); }