public void Salvar(string nomeArq) { StreamWriter arq = new StreamWriter(nomeArq); var atual = objetos.primeiro; while (atual != null) { if (atual.info.GetType().Equals(typeof(Circulo))) { Circulo circ = atual.info as Circulo; arq.WriteLine(circ.ToString()); } else if (atual.info.GetType().Equals(typeof(Retangulo))) { Retangulo ret = atual.info as Retangulo; arq.WriteLine(ret.ToString()); } else if (atual.info.GetType().Equals(typeof(Linha))) { Linha lin = atual.info as Linha; arq.WriteLine(lin.ToString()); } else if (atual.info.GetType().Equals(typeof(Elipse))) { Elipse el = atual.info as Elipse; arq.WriteLine(el.ToString()); } atual = atual.prox; } arq.Close(); }
private void abrirToolStripMenuItem_Click(object sender, EventArgs e) { if (dlgAbrir.ShowDialog() == DialogResult.OK) // abertura do arquivo, sua leitura e armazenamento de figuras na lista ligada { StreamReader arq = new StreamReader(dlgAbrir.FileName); drawArea.Objetos = new ListaSimples <Figura>(); Color c = new Color(); Ponto pi; // ponto inicial/origem/centro string linha = null; nomeArqAberto = dlgAbrir.FileName; while ((linha = arq.ReadLine()) != null) { string fig = linha.Substring(0, 5); fig = fig.Trim(); if (fig.Equals("p")) //assim como na documentação das instruções, foi feito o abrir { //verificando, sempre, a primeira letra para identificar a figura //a ser criada c = Color.FromArgb(Convert.ToInt16(linha.Substring(15, 5)), Convert.ToInt16(linha.Substring(20, 5)), Convert.ToInt16(linha.Substring(25, 5))); pi = new Ponto(Convert.ToInt16(linha.Substring(5, 5)), Convert.ToInt16(linha.Substring(10, 5)), c); drawArea.AdicionarObjeto(pi); } else if (fig.Equals("c")) { c = Color.FromArgb(Convert.ToInt16(linha.Substring(15, 5)), Convert.ToInt16(linha.Substring(20, 5)), Convert.ToInt16(linha.Substring(25, 5))); pi = new Ponto(Convert.ToInt16(linha.Substring(5, 5)), Convert.ToInt16(linha.Substring(10, 5))); Circulo circ = new Circulo(pi, Convert.ToInt16(linha.Substring(30, 5)), c); drawArea.AdicionarObjeto(circ); } else if (fig.Equals("l")) { c = Color.FromArgb(Convert.ToInt16(linha.Substring(15, 5)), Convert.ToInt16(linha.Substring(20, 5)), Convert.ToInt16(linha.Substring(25, 5))); pi = new Ponto(Convert.ToInt16(linha.Substring(5, 5)), Convert.ToInt16(linha.Substring(10, 5))); Ponto Pf = new Ponto(Convert.ToInt16(linha.Substring(30, 5)), Convert.ToInt16(linha.Substring(35, 5))); Linha l = new Linha(pi, Pf, c); drawArea.AdicionarObjeto(l); } else if (fig.Equals("e")) { pi = new Ponto(Convert.ToInt16(linha.Substring(5, 5)), Convert.ToInt16(linha.Substring(10, 5))); c = Color.FromArgb(Convert.ToInt16(linha.Substring(15, 5)), Convert.ToInt16(linha.Substring(20, 5)), Convert.ToInt16(linha.Substring(25, 5))); int raio1 = Convert.ToInt16(linha.Substring(30, 5)); int raio2 = Convert.ToInt16(linha.Substring(35, 5)); Elipse el = new Elipse(pi, raio1, raio2); el.CorContorno = c; drawArea.AdicionarObjeto(el); } } arq.Close(); Graphics.FromImage(salvo).Clear(BackColor); drawArea.Context = Graphics.FromImage(salvo); //O picturebox 'empresta' o contexto para o arquivo bitmap drawArea.Desenhar(); drawArea.Context = pbAreaDesenho.CreateGraphics(); pbAreaDesenho.Image = salvo; } }
private void pbAreaDesenho_MouseDown(object sender, MouseEventArgs e) { var posCursor = new Ponto(e.X, e.Y); switch (selTool) { case "circulo": if (pontos.estaVazia()) { drawArea.AdicionarObjeto(new Circulo(posCursor, posCursor, drawArea.CorAtual)); pontos.insereAposFim(new NoLista <Ponto>(posCursor, null)); } break; case "retangulo": if (pontos.estaVazia()) { var rect = new Retangulo(posCursor, 0, 0); rect.CorContorno = drawArea.CorAtual; drawArea.AdicionarObjeto(rect); pontos.insereAposFim(new NoLista <Ponto>(posCursor, null)); } break; case "linha": if (pontos.estaVazia()) { drawArea.AdicionarObjeto(new Linha(posCursor, posCursor, drawArea.CorAtual)); pontos.insereAposFim(new NoLista <Ponto>(posCursor, null)); } break; case "polilinha": if (pontos.estaVazia()) { var pol = new Polilinha(posCursor, posCursor); pol.CorContorno = drawArea.CorAtual; drawArea.AdicionarObjeto(pol); pontos.insereAposFim(new NoLista <Ponto>(posCursor, null)); } else { if (e.Button == System.Windows.Forms.MouseButtons.Right) { pontos = new ListaSimples <Ponto>(); drawArea.Objetos.ultimo.info.desenhar(Graphics.FromImage(salvo)); pbAreaDesenho.Image = salvo; } else { var pol = (Polilinha)drawArea.Objetos.ultimo.info; pol.Vertices.insereAposFim(new NoLista <Ponto>(posCursor, null)); pontos.insereAposFim(new NoLista <Ponto>(posCursor, null)); } } break; case "desenho livre": if (pontos.estaVazia()) { var pol = new Polilinha(posCursor, posCursor); pol.CorContorno = drawArea.CorAtual; drawArea.AdicionarObjeto(pol); pontos.insereAposFim(new NoLista <Ponto>(posCursor, null)); } break; case "ponto": drawArea.AdicionarObjeto(new Ponto(posCursor.X, posCursor.Y, drawArea.CorAtual)); drawArea.Objetos.ultimo.info.desenhar(Graphics.FromImage(salvo)); pbAreaDesenho.Image = salvo; break; case "elipse": if (pontos.estaVazia()) { var el = new Elipse(posCursor, 0, 0); el.CorContorno = drawArea.CorAtual; drawArea.AdicionarObjeto(el); pontos.insereAposFim(new NoLista <Ponto>(posCursor, null)); } break; case "selecao": if (pontos.estaVazia()) { pontos.insereAposFim(new NoLista <Ponto>(posCursor, null)); } break; case "deslocar": if (pontos.estaVazia()) { pontos.insereAposFim(new NoLista <Ponto>(posCursor, null)); } break; } }