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); }
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(); }
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); } }
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; } } } } }