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();
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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;
            }
        }