using AgroBase.Forms; using AgroBase.Models; using AgroBase.Services; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using static AgroBase.Models.Enums; namespace AgroMonitor.Forms { public partial class frmAjustesOperacao : Form { AsyncTaskTimerModel tmrDadosMapa; string path = Variaveis.CaminhoSistema + Variaveis.CaminhoOperacoes + "\\" + MapasVariaveisModel.NomeArquivoMapaInterativoSaida; UltrasonicA05Configuracoes ConfigUltrassom = UltrasonicA05Helper.CarregarConfiguracaoPadrao(ConfiguracaoSensorUltrassonico.NaoUtilizado); bool carregarOpPadrao = true; MapaDinamicoModel MapaDinamico; public frmAjustesOperacao() { InitializeComponent(); MapaDinamico = new MapaDinamicoModel(this, pnlZoomMapa); } private void frmAjustesOperacao_Load(object sender, EventArgs e) { cmbConfiguracaoUltrassom.Items.Clear(); cmbConfiguracaoUltrassom.Items.AddRange(Enum.GetNames(typeof(ConfiguracaoSensorUltrassonico))); cmbConfiguracaoUltrassom.SelectedIndex = 0; cmbModosOperacao.Items.Clear(); cmbModosOperacao.Items.AddRange(Enum.GetNames(typeof(ModoOperacao))); cmbModosOperacao.SelectedIndex = 0; cmbTipoMovimentoDirecional.Items.Clear(); cmbTipoMovimentoDirecional.Items.AddRange(Enum.GetNames(typeof(TiposControladorDirecional))); cmbModosOperacao.SelectedIndex = 1; } private void frmAjustesOperacao_FormClosing(object sender, FormClosingEventArgs e) { tmrDadosMapa?.Dispose(); } private void cmbModosOperacao_SelectedIndexChanged(object sender, EventArgs e) { AtualizarDadosOperacao(); } private void AtualizarDadosOperacao() { if (carregarOpPadrao) { OperacaoModel.CarregarParametrosOperacaoPadrao((ModoOperacao)cmbModosOperacao.SelectedIndex); } foreach (var chb in pnlModulos.Controls.OfType()) { string disp = chb.Name.Replace("chb", ""); T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), disp); chb.Checked = Variaveis.OperacaoEmAndamento.ModulosMandatorios.Any(x => x.Dispositivo == Dispositivo && x.Mandatorio); } double velMaxRoda = FuncoesMatematicas.CalculaVelocidadeRPM(VariaveisEquipamento.RPM_Max_Roda); double velocidadeMax = FuncoesMatematicas.CalculaVelocidadeRPM(Variaveis.OperacaoEmAndamento.Controle.RPM_Max); int percentMax = (int)FuncoesMatematicas.Map(velocidadeMax, 0.0, velMaxRoda, 0, 100.0); double velocidadeMin = FuncoesMatematicas.CalculaVelocidadeRPM(Variaveis.OperacaoEmAndamento.Controle.RPM_Min); int percentMin = (int)FuncoesMatematicas.Map(velocidadeMin, 0.0, velMaxRoda, 0, 100.0); txtDescricao.Text = Variaveis.OperacaoEmAndamento.Descricao; nudVelMax.Value = percentMax; nudVelMin.Value = percentMin; txtAnguloMaximo.Text = Variaveis.OperacaoEmAndamento.Controle.Angulo_Max.ToString("0"); txtVelocidadeDirecional.Text = Variaveis.OperacaoEmAndamento.Controle.VelocidadeMP.ToString("0"); txtPercentualAtuacao.Text = (Variaveis.OperacaoEmAndamento.Controle.PercentualInicioPulverizacao * 100).ToString("0"); txtCapacidadeReservatorio.Text = Variaveis.OperacaoEmAndamento.CapacidadeReservatorio.ToString("0"); txtPressaoLinha.Text = Variaveis.OperacaoEmAndamento.Controle.PressaoLinha.ToString("0"); txtDuracaoAtuacao.Text = Variaveis.OperacaoEmAndamento.Controle.TempoAtuacao.ToString("0"); if (Variaveis.OperacaoEmAndamento.DispSen != null) { ConfigUltrassom = Variaveis.OperacaoEmAndamento.DispSen.Dados.ConfiguracaoSensorUltrassom; cmbConfiguracaoUltrassom.SelectedIndex = (int)ConfigUltrassom.Configuracao; } chbSonarAtivado.Checked = Variaveis.OperacaoEmAndamento.Controle.SonarAtivado; string nomeOpPadrao = "OP_" + DateTime.Now.ToString("dd_MM_yyyy_mm_ss"); txtDescricao.Text = nomeOpPadrao; } private void btnProximo_Click(object sender, EventArgs e) { tabControl1.SelectedIndex = 1; } private void btnCarregarMapa_Click(object sender, EventArgs e) { List ruasSelecionadas = new List(); Variaveis.OperacaoEmAndamento.Mapa = new MapasModel(); Variaveis.OperacaoEmAndamento.Mapa.pnlMapa = pnlMapa; Variaveis.OperacaoEmAndamento.Mapa.lblMapa = lblMapaCarregado; tabControl1.SelectedIndex = 1; Variaveis.OperacaoEmAndamento.Mapa.btnCarregar_Click(sender, e); if (tmrDadosMapa == null || !tmrDadosMapa.IsRunning) { tmrDadosMapa = new AsyncTaskTimerModel("tmrDadosMapa", tmrDadosMapa_Tick, 500, this); tmrDadosMapa.Start(); } } private async Task tmrDadosMapa_Tick() { if (Variaveis.OperacaoEmAndamento.Mapa.mapaService.DadosMapa == null) { return; } //GPSService.AtualizarRuasSelecionadas(new List() { "183", "182", "181" }); Variaveis.OperacaoEmAndamento.Mapa.AtualizarRuasSelecionadas(); lblDistanciaTotal.Text = $"Distância total: {Variaveis.OperacaoEmAndamento.Mapa.mapaService.DadosMapa.features.Sum(x => x.properties.Length).ToString("0.00")} m"; lblDistanciaOperacao.Text = $"Distância da operação: {(Variaveis.OperacaoEmAndamento.Trajetoria?.DistanciaTotal ?? 0).ToString("0.00")} m"; double.TryParse(txtVelocidadeSemErvas.Text, out double velocidadeSemErvas); double.TryParse(txtVelocidadeComErvas.Text, out double velocidadeComErvas); Variaveis.OperacaoEmAndamento.Trajetoria?.AtualizarTempoEstimado(FuncoesMatematicas.ConverteKmhParaMs(velocidadeSemErvas), FuncoesMatematicas.ConverteKmhParaMs(velocidadeComErvas)); string tempo = Variaveis.OperacaoEmAndamento.Trajetoria?.TempoEstimadoOperacao; lblTempoEstimado.Text = $"Tempo estimado: {tempo}"; if (chbMapaDinamico.Checked) { var _Trajetoria = Variaveis.OperacaoEmAndamento.Trajetoria; GPSModel posicao = _Trajetoria.RuasPlantacao.Any() ? _Trajetoria.RuasPlantacao[0][_Trajetoria.ExtremoMaisProximoMapa == 0 ? 0 : _Trajetoria.RuasPlantacao[0].Count - 1] : GPSService.UltimaLeitura; MapaDinamico.AtualizarDados( null, (float)0, (float)0, posicao, _Trajetoria._TrajetoriaDinamica, _Trajetoria.CorredorAtual.Pontos, Variaveis.OperacaoEmAndamento.GPSTrajetoria, _Trajetoria.RuasPlantacao ); } } private void btnSalvar_Click(object sender, EventArgs e) { int.TryParse(txtQtdCameras.Text, out int qtdCameras); bool sucesso = Variaveis.OperacaoEmAndamento.SalvarParametrizacaoOperacao( txtDescricao.Text, txtCapacidadeReservatorio.Text, txtPressaoLinha.Text, txtDuracaoAtuacao.Text, txtPercentualAtuacao.Text, txtAnguloMaximo.Text, txtVelocidadeDirecional.Text, (int)nudVelMax.Value, (int)nudVelMin.Value, ConfigUltrassom, chbSonarAtivado.Checked, qtdCameras, (TiposControladorDirecional)cmbTipoMovimentoDirecional.SelectedIndex ); if (!sucesso) { txtDescricao.Focus(); } } private async void btnCarregar_Click(object sender, EventArgs e) { await CarregarOperacao(); } private async Task CarregarOperacao() { (bool carregado, List ruasSelecionadas) = Variaveis.OperacaoEmAndamento.CarregarParametrizacaoOperacao(pnlMapa, lblMapaCarregado); bool condicaoOperacaoCarregada() => Variaveis.OperacaoEmAndamento.Trajetoria?.CorredorAtual != null; bool resultado = await FuncoesGlobais.AguardarCondicaoAsync(condicaoOperacaoCarregada, 5000, 200); if (!resultado) { MessageBox.Show($"Erro ao carregar operação!{Environment.NewLine}Erro ao carregar a trajetória do mapa!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (carregado && resultado) { tabControl1.SelectedIndex = 1; carregarOpPadrao = false; cmbModosOperacao.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Modo; cmbTipoMovimentoDirecional.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Controle.TipoControleDirecional; cmbConfiguracaoUltrassom.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.DispSen.Dados.ConfiguracaoSensorUltrassom.Configuracao; MessageBox.Show("Operação carregada com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information); tmrDadosMapa?.Dispose(); tmrDadosMapa = new AsyncTaskTimerModel("tmrDadosMapa", tmrDadosMapa_Tick, 500, this); tmrDadosMapa?.Start(); await Task.Delay(2000); if (ruasSelecionadas.Any()) { await Task.Delay(1000); GPSService.AtualizarRuasSelecionadas(ruasSelecionadas); File.Delete(path); } carregarOpPadrao = true; } } private void chbModulo_CheckedChanged(object sender, EventArgs e) { CheckBox chb = (CheckBox)sender; string ModID = chb.Name.Replace("chb", ""); T_Code Dispositivo = (T_Code)Enum.Parse(typeof(T_Code), ModID); if (Variaveis.OperacaoEmAndamento.ModulosMandatorios.Any(x => x.Dispositivo == Dispositivo)) { Variaveis.OperacaoEmAndamento.ModulosMandatorios.First(x => x.Dispositivo == Dispositivo).Mandatorio = chb.Checked; } else { Variaveis.OperacaoEmAndamento.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = Dispositivo, Conectado = false, Mandatorio = chb.Checked, Utilizar = chb.Checked, }); } List dispositivosSensoriamento = new List() { T_Code.Snr, T_Code.A05 }; if (dispositivosSensoriamento.Contains(Dispositivo)) { bool sensoriamentoAtivado = false; foreach (var disp in dispositivosSensoriamento) { sensoriamentoAtivado |= (FuncoesGlobais.FindControlRecursive(pnlModulos, "chb" + disp.ToString())).Checked; } gpbSensoriamento.Enabled = sensoriamentoAtivado; } } private void btnConfigurar_Click(object sender, EventArgs e) { frmA05Config frm = new frmA05Config(ConfigUltrassom); frm.ShowDialog(); ConfigUltrassom = frm.ConfiguracaoSensores; } private void cmbConfiguracaoUltrassom_SelectedIndexChanged(object sender, EventArgs e) { ConfiguracaoSensorUltrassonico Config = (ConfiguracaoSensorUltrassonico)cmbConfiguracaoUltrassom.SelectedIndex; rtbDescricao.Text = UltrasonicA05Helper.DescricaoConfiguracoes[Config]; if (Config != ConfigUltrassom.Configuracao) { ConfigUltrassom = UltrasonicA05Helper.CarregarConfiguracaoPadrao(Config); } } private void nudVelMax_ValueChanged(object sender, EventArgs e) { int Percentual = (int)((NumericUpDown)sender).Value; double velocidadeMs = FuncoesMatematicas.CalculaVelocidadeMsPercentual(Percentual); double Velocidade = FuncoesMatematicas.ConverteMsParaKmh(velocidadeMs); txtVelocidadeSemErvas.Text = Velocidade.ToString("0.00"); } private void nudVelMin_ValueChanged(object sender, EventArgs e) { int Percentual = (int)((NumericUpDown)sender).Value; double velocidadeMs = FuncoesMatematicas.CalculaVelocidadeMsPercentual(Percentual); double Velocidade = FuncoesMatematicas.ConverteMsParaKmh(velocidadeMs); txtVelocidadeComErvas.Text = Velocidade.ToString("0.00"); } private void chbMapaDinamico_CheckedChanged(object sender, EventArgs e) { pnlZoomMapa.Visible = chbMapaDinamico.Checked; } } }