Exemple #1
0
        private void DesenhaSeta(Forca f, int dExtra = 0)
        {
            Pen vetor = new Pen(Color.Black, 5);

            Point ptoAux          = new Point();
            int   rotacao         = 0;
            int   comprimentoSeta = 65;
            Point ptoAux2         = new Point(new Size(pontos[f.ponto]));
            int   tamanhoSeta     = 30;
            Font  fonte           = new Font(lblTeste.Font.FontFamily, 10);

            if (f.emX == 0)
            {
                if (f.emY < 0)
                {
                    ptoAux.X = pontos[f.ponto].X;
                    ptoAux.Y = pontos[f.ponto].Y - comprimentoSeta;
                    ptoAux2.Offset(0, -(tamanhoSeta - 5));
                    rotacao = 1;
                }
                else
                {
                    ptoAux.X = pontos[f.ponto].X;
                    ptoAux.Y = pontos[f.ponto].Y + comprimentoSeta;
                    ptoAux2.Offset(0, (tamanhoSeta - 5));
                    rotacao = 3;
                }

                g.DrawString(Math.Abs(Math.Round(f.emY, 2)).ToString() + " N", fonte, Brushes.Black, new Point(ptoAux.X + 5, ptoAux.Y - dExtra - (int)(Font.Size / 2)));
            }
            else
            {
                if (f.emX < 0)
                {
                    ptoAux.X = pontos[f.ponto].X + comprimentoSeta;
                    ptoAux.Y = pontos[f.ponto].Y;
                    ptoAux2.Offset((tamanhoSeta - 5), 0);
                    rotacao = 2;
                }
                else
                {
                    ptoAux.X = pontos[f.ponto].X - comprimentoSeta;
                    ptoAux.Y = pontos[f.ponto].Y;
                    ptoAux2.Offset(-(tamanhoSeta - 5), 0);
                    rotacao = 4;
                }

                g.DrawString(Math.Abs(Math.Round(f.emX, 2)).ToString() + " N", fonte, Brushes.Black, new Point(ptoAux.X - 15, ptoAux.Y - 15 - dExtra - (int)(Font.Size / 2)));
            }
            g.DrawLine(vetor, ptoAux2, ptoAux);
            g.FillPie(Brushes.Black, new Rectangle(pontos[f.ponto].X - tamanhoSeta,
                                                   pontos[f.ponto].Y - tamanhoSeta, 2 * tamanhoSeta, 2 * tamanhoSeta),
                      90 * rotacao - 15 - 180, 30);
        }
Exemple #2
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (ptoSelecionado != "" && forcaAplica != -1)
            {
                int onde = quadranteMouse(pontos[ptoSelecionado]);

                possivelNovaForca = new Forca(ptoSelecionado);
                switch (onde)
                {
                case 1:
                    possivelNovaForca.emX = forcaAplica;
                    break;

                case 2:
                    possivelNovaForca.emY = -forcaAplica;
                    break;

                case 3:
                    possivelNovaForca.emX = -forcaAplica;
                    break;

                case 4:
                    possivelNovaForca.emY = forcaAplica;
                    break;
                }
            }

            if (rbRemov.Checked)
            {
                bool selecionou = false;

                for (int i = 0; i < barras.Count; i += 2)
                {
                    if (MouseNaBarra(pontos[barras[i][0]], pontos[barras[i][1]]))
                    {
                        barraSelec[0] = barras[i][0];
                        barraSelec[1] = barras[i][1];
                        selecionou    = true;
                        break;
                    }
                }

                if (!selecionou)
                {
                    barraSelec[0] = "";
                    barraSelec[1] = "";
                }
            }

            pbTela.Image = UpdateDesenho();
        }
Exemple #3
0
        private void btnForca_Click(object sender, EventArgs e)
        {
            if (btnForca.Text == "Cancelar")
            {
                possivelNovaForca = null;
                forcaAplica       = -1;
                btnForca.Text     = "Adicionar Força";
                return;
            }



            try
            {
                if (txtForca.Text[0] == '-')
                {
                    MessageBox.Show("Digite apenas valores positivos", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                forcaAplica     = Convert.ToDouble(txtForca.Text.Replace('.', ','));
                rbMover.Checked = true;
                btnForca.Text   = "Cancelar";

                if (ptoSelecionado == "")
                {
                    MessageBox.Show("Selecione um ponto", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    rbMover.Checked = true;
                    return;
                }
            }
            catch
            {
                MessageBox.Show("Valor inválido", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
Exemple #4
0
        private void pbTela_MouseClick(object sender, MouseEventArgs e)
        {
            Point mouse = e.Location;

            mouse.X = Convert.ToInt32(Math.Round(mouse.X / zoom));
            mouse.Y = Convert.ToInt32(Math.Round(mouse.Y / zoom));
            string ptoProximo = ProximoAUmPonto(new Point(mouse.X, mouse.Y), mouse);

            if (possivelNovaForca != null)
            {
                bool achou = false;
                for (int i = 0; i < forcas.Count; i++)
                {
                    if (forcas[i].ponto == possivelNovaForca.ponto &&
                        ((forcas[i].emX == 0 && possivelNovaForca.emX == 0) ||
                         (forcas[i].emY == 0 && possivelNovaForca.emY == 0)))
                    {
                        achou          = true;
                        forcas[i].emX += possivelNovaForca.emX;
                        forcas[i].emY += possivelNovaForca.emY;
                        if (forcas[i].emY == 0 && forcas[i].emX == 0)
                        {
                            forcas.RemoveAt(i);
                        }
                        break;
                    }
                }
                if (!achou)
                {
                    forcas.Add(possivelNovaForca);
                }
                possivelNovaForca = null;
                forcaAplica       = -1;
                btnForca.Text     = "Adicionar Força";
                return;
            }

            if (rbAdicionar.Checked)
            {
                if (ptoLigando == "")
                {
                    if (ptoProximo != "")
                    {
                        ptoLigando    = ptoProximo;
                        ligandoEhNovo = false;
                    }
                    else
                    {
                        string novoPonto = AcharProximoNomePto();

                        pontos.Add(novoPonto, new Point(mouse.X, mouse.Y));

                        ptoLigando    = novoPonto;
                        ligandoEhNovo = true;
                    }
                }
                else
                {
                    if (ptoProximo != "")
                    {
                        LigarPontos(ptoProximo, ptoLigando);
                    }
                    else if (!ligandoEhNovo || pontos.Count < 2)
                    {
                        string novoPonto = AcharProximoNomePto();

                        pontos.Add(novoPonto, new Point(mouse.X, mouse.Y));

                        LigarPontos(novoPonto, ptoLigando);
                    }
                    else
                    {
                        pontos.Remove(ptoLigando);
                    }

                    ptoLigando = "";
                }
            }
            else if (rbMover.Checked)
            {
                if (ptoProximo != "")
                {
                    ptoSelecionado = ptoProximo;
                    AtualizaPtosTxt();
                }
            }
            else if (rbRemov.Checked)
            {
                if (barraSelec[0] != "")
                {
                    for (int i = 0; i < barras.Count; i += 2)
                    {
                        if (barras[i][0] == barraSelec[0] && barras[i][1] == barraSelec[1])
                        {
                            barras.RemoveAt(i);
                            barras.RemoveAt(i);
                            break;
                        }
                    }

                    foreach (var pto in pontos)
                    {
                        bool temUso = false;

                        for (int i = 0; i < barras.Count; i++)
                        {
                            if (barras[i][0] == pto.Key)
                            {
                                temUso = true;
                                break;
                            }
                        }

                        if (!temUso)
                        {
                            for (int i = 0; i < forcas.Count; i++)
                            {
                                if (forcas[i].ponto == pto.Key)
                                {
                                    forcas.RemoveAt(i);
                                    i--;
                                }
                            }

                            if (apoioMovel == pto.Key)
                            {
                                apoioMovel = "";
                            }

                            if (apoioFixo == pto.Key)
                            {
                                apoioFixo = "";
                            }

                            pontos.Remove(pto.Key);
                            if (pontos.Count == 1 || barras.Count == 0)
                            {
                                pontos         = new Dictionary <string, Point>();
                                ptoSelecionado = "";
                                apoioFixo      = "";
                                apoioMovel     = "";
                                forcas         = new List <Forca>();
                            }
                            break;
                        }
                    }
                }
            }
        }