diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/16001a95-3764-467e-bcae-16432eb55d60.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/16001a95-3764-467e-bcae-16432eb55d60.vsidx
deleted file mode 100644
index 527904ed5..000000000
Binary files a/AgroBase/.vs/AgroBase/FileContentIndex/16001a95-3764-467e-bcae-16432eb55d60.vsidx and /dev/null differ
diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/3a537cb1-509e-47fc-8e54-a3a3c7dc1b0b.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/3a537cb1-509e-47fc-8e54-a3a3c7dc1b0b.vsidx
new file mode 100644
index 000000000..1c7f28abd
Binary files /dev/null and b/AgroBase/.vs/AgroBase/FileContentIndex/3a537cb1-509e-47fc-8e54-a3a3c7dc1b0b.vsidx differ
diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/4fbf661d-289a-4e8c-8236-0182c0383d82.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/4fbf661d-289a-4e8c-8236-0182c0383d82.vsidx
new file mode 100644
index 000000000..01e1670f9
Binary files /dev/null and b/AgroBase/.vs/AgroBase/FileContentIndex/4fbf661d-289a-4e8c-8236-0182c0383d82.vsidx differ
diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/dddcec6b-464d-41cd-a1e7-5861e7f86e5b.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/dddcec6b-464d-41cd-a1e7-5861e7f86e5b.vsidx
new file mode 100644
index 000000000..70aef67a0
Binary files /dev/null and b/AgroBase/.vs/AgroBase/FileContentIndex/dddcec6b-464d-41cd-a1e7-5861e7f86e5b.vsidx differ
diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/eeb2bafd-84a0-4baf-8d05-16892ba935cc.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/eeb2bafd-84a0-4baf-8d05-16892ba935cc.vsidx
deleted file mode 100644
index 66d432627..000000000
Binary files a/AgroBase/.vs/AgroBase/FileContentIndex/eeb2bafd-84a0-4baf-8d05-16892ba935cc.vsidx and /dev/null differ
diff --git a/AgroBase/.vs/AgroBase/FileContentIndex/fb5cbd4d-84a7-46e0-a883-910e20a0a6bc.vsidx b/AgroBase/.vs/AgroBase/FileContentIndex/fb5cbd4d-84a7-46e0-a883-910e20a0a6bc.vsidx
deleted file mode 100644
index bcb2df67a..000000000
Binary files a/AgroBase/.vs/AgroBase/FileContentIndex/fb5cbd4d-84a7-46e0-a883-910e20a0a6bc.vsidx and /dev/null differ
diff --git a/AgroBase/.vs/AgroBase/v17/.suo b/AgroBase/.vs/AgroBase/v17/.suo
index d731876dd..7fd0dcc79 100644
Binary files a/AgroBase/.vs/AgroBase/v17/.suo and b/AgroBase/.vs/AgroBase/v17/.suo differ
diff --git a/AgroBase/AgroBase/AgroBase.csproj b/AgroBase/AgroBase/AgroBase.csproj
index 42a82ece9..50e21863d 100644
--- a/AgroBase/AgroBase/AgroBase.csproj
+++ b/AgroBase/AgroBase/AgroBase.csproj
@@ -315,6 +315,8 @@
+
+
Always
@@ -351,78 +353,6 @@
Always
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
- PreserveNewest
-
frmAtuConfig.cs
@@ -557,9 +487,6 @@
Always
-
- PreserveNewest
-
diff --git a/AgroBase/AgroBase/Forms/Operacoes/frmOperacaoSeguidorLinha.Designer.cs b/AgroBase/AgroBase/Forms/Operacoes/frmOperacaoSeguidorLinha.Designer.cs
index 9139edd50..2ea88fd2e 100644
--- a/AgroBase/AgroBase/Forms/Operacoes/frmOperacaoSeguidorLinha.Designer.cs
+++ b/AgroBase/AgroBase/Forms/Operacoes/frmOperacaoSeguidorLinha.Designer.cs
@@ -29,9 +29,9 @@ namespace AgroBase.Forms.Operacoes
///
private void InitializeComponent()
{
- System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
- System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
- System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+ System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+ System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
this.pnlCameraSolo = new System.Windows.Forms.Panel();
this.pnlCameraSoloD = new System.Windows.Forms.Panel();
this.pnlCameraSoloE = new System.Windows.Forms.Panel();
@@ -42,10 +42,13 @@ namespace AgroBase.Forms.Operacoes
this.pnlGraficos = new System.Windows.Forms.Panel();
this.chartGraficos = new System.Windows.Forms.DataVisualization.Charting.Chart();
this.pnlNiveis = new System.Windows.Forms.Panel();
- this.lblPorcentagemProgresso = new System.Windows.Forms.Label();
- this.pgbProgresso = new System.Windows.Forms.ProgressBar();
+ this.lblProgressoT = new System.Windows.Forms.Label();
this.lblPorcentagemBateria = new System.Windows.Forms.Label();
+ this.lblBateriaT = new System.Windows.Forms.Label();
+ this.lblReservatorioT = new System.Windows.Forms.Label();
+ this.lblPorcentagemProgresso = new System.Windows.Forms.Label();
this.pgbBateria = new System.Windows.Forms.ProgressBar();
+ this.pgbProgresso = new System.Windows.Forms.ProgressBar();
this.lblPorcentagemReservatorio = new System.Windows.Forms.Label();
this.pgbReservatorio = new System.Windows.Forms.ProgressBar();
this.gpbOpcoes = new System.Windows.Forms.GroupBox();
@@ -78,6 +81,11 @@ namespace AgroBase.Forms.Operacoes
this.lblUltimaLeituraSolo = new System.Windows.Forms.Label();
this.pnlMapa = new System.Windows.Forms.Panel();
this.pnlOrientacao = new System.Windows.Forms.Panel();
+ this.lblStatus = new System.Windows.Forms.Label();
+ this.lblDirecao = new System.Windows.Forms.Label();
+ this.lblDistancia = new System.Windows.Forms.Label();
+ this.btnSimular = new System.Windows.Forms.Button();
+ this.btnManobraConcluida = new System.Windows.Forms.Button();
this.pnlCameraSolo.SuspendLayout();
this.pnlAtuadores.SuspendLayout();
this.pnlGraficos.SuspendLayout();
@@ -166,18 +174,18 @@ namespace AgroBase.Forms.Operacoes
//
// chartGraficos
//
- chartArea2.Name = "ChartArea1";
- this.chartGraficos.ChartAreas.Add(chartArea2);
+ chartArea1.Name = "ChartArea1";
+ this.chartGraficos.ChartAreas.Add(chartArea1);
this.chartGraficos.Dock = System.Windows.Forms.DockStyle.Fill;
- legend2.Name = "Legend1";
- this.chartGraficos.Legends.Add(legend2);
+ legend1.Name = "Legend1";
+ this.chartGraficos.Legends.Add(legend1);
this.chartGraficos.Location = new System.Drawing.Point(0, 0);
this.chartGraficos.Margin = new System.Windows.Forms.Padding(2);
this.chartGraficos.Name = "chartGraficos";
- series2.ChartArea = "ChartArea1";
- series2.Legend = "Legend1";
- series2.Name = "Series1";
- this.chartGraficos.Series.Add(series2);
+ series1.ChartArea = "ChartArea1";
+ series1.Legend = "Legend1";
+ series1.Name = "Series1";
+ this.chartGraficos.Series.Add(series1);
this.chartGraficos.Size = new System.Drawing.Size(405, 254);
this.chartGraficos.TabIndex = 0;
this.chartGraficos.Text = "chart1";
@@ -185,10 +193,17 @@ namespace AgroBase.Forms.Operacoes
// pnlNiveis
//
this.pnlNiveis.BackColor = System.Drawing.SystemColors.Control;
- this.pnlNiveis.Controls.Add(this.lblPorcentagemProgresso);
- this.pnlNiveis.Controls.Add(this.pgbProgresso);
+ this.pnlNiveis.Controls.Add(this.btnManobraConcluida);
+ this.pnlNiveis.Controls.Add(this.btnSimular);
+ this.pnlNiveis.Controls.Add(this.lblDirecao);
+ this.pnlNiveis.Controls.Add(this.lblStatus);
+ this.pnlNiveis.Controls.Add(this.lblProgressoT);
this.pnlNiveis.Controls.Add(this.lblPorcentagemBateria);
+ this.pnlNiveis.Controls.Add(this.lblBateriaT);
+ this.pnlNiveis.Controls.Add(this.lblReservatorioT);
+ this.pnlNiveis.Controls.Add(this.lblPorcentagemProgresso);
this.pnlNiveis.Controls.Add(this.pgbBateria);
+ this.pnlNiveis.Controls.Add(this.pgbProgresso);
this.pnlNiveis.Controls.Add(this.lblPorcentagemReservatorio);
this.pnlNiveis.Controls.Add(this.pgbReservatorio);
this.pnlNiveis.Font = new System.Drawing.Font("Mongolian Baiti", 9F, System.Drawing.FontStyle.Bold);
@@ -198,58 +213,89 @@ namespace AgroBase.Forms.Operacoes
this.pnlNiveis.Size = new System.Drawing.Size(592, 69);
this.pnlNiveis.TabIndex = 6;
//
- // lblPorcentagemProgresso
+ // lblProgressoT
//
- this.lblPorcentagemProgresso.AutoSize = true;
- this.lblPorcentagemProgresso.Location = new System.Drawing.Point(392, 11);
- this.lblPorcentagemProgresso.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
- this.lblPorcentagemProgresso.Name = "lblPorcentagemProgresso";
- this.lblPorcentagemProgresso.Size = new System.Drawing.Size(108, 13);
- this.lblPorcentagemProgresso.TabIndex = 5;
- this.lblPorcentagemProgresso.Text = "Progresso: 0,00%";
- //
- // pgbProgresso
- //
- this.pgbProgresso.Location = new System.Drawing.Point(394, 27);
- this.pgbProgresso.Margin = new System.Windows.Forms.Padding(2);
- this.pgbProgresso.Name = "pgbProgresso";
- this.pgbProgresso.Size = new System.Drawing.Size(191, 40);
- this.pgbProgresso.TabIndex = 4;
+ this.lblProgressoT.AutoSize = true;
+ this.lblProgressoT.Location = new System.Drawing.Point(322, 13);
+ this.lblProgressoT.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.lblProgressoT.Name = "lblProgressoT";
+ this.lblProgressoT.Size = new System.Drawing.Size(64, 13);
+ this.lblProgressoT.TabIndex = 8;
+ this.lblProgressoT.Text = "Progresso";
//
// lblPorcentagemBateria
//
this.lblPorcentagemBateria.AutoSize = true;
- this.lblPorcentagemBateria.Location = new System.Drawing.Point(198, 11);
+ this.lblPorcentagemBateria.Location = new System.Drawing.Point(167, 43);
this.lblPorcentagemBateria.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblPorcentagemBateria.Name = "lblPorcentagemBateria";
- this.lblPorcentagemBateria.Size = new System.Drawing.Size(91, 13);
+ this.lblPorcentagemBateria.Size = new System.Drawing.Size(50, 13);
this.lblPorcentagemBateria.TabIndex = 3;
- this.lblPorcentagemBateria.Text = "Bateria: 0,00%";
+ this.lblPorcentagemBateria.Text = "00,00%";
+ //
+ // lblBateriaT
+ //
+ this.lblBateriaT.AutoSize = true;
+ this.lblBateriaT.Location = new System.Drawing.Point(2, 44);
+ this.lblBateriaT.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.lblBateriaT.Name = "lblBateriaT";
+ this.lblBateriaT.Size = new System.Drawing.Size(47, 13);
+ this.lblBateriaT.TabIndex = 7;
+ this.lblBateriaT.Text = "Bateria";
+ //
+ // lblReservatorioT
+ //
+ this.lblReservatorioT.AutoSize = true;
+ this.lblReservatorioT.Location = new System.Drawing.Point(2, 13);
+ this.lblReservatorioT.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.lblReservatorioT.Name = "lblReservatorioT";
+ this.lblReservatorioT.Size = new System.Drawing.Size(79, 13);
+ this.lblReservatorioT.TabIndex = 6;
+ this.lblReservatorioT.Text = "Reservatório";
+ //
+ // lblPorcentagemProgresso
+ //
+ this.lblPorcentagemProgresso.AutoSize = true;
+ this.lblPorcentagemProgresso.Location = new System.Drawing.Point(477, 12);
+ this.lblPorcentagemProgresso.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.lblPorcentagemProgresso.Name = "lblPorcentagemProgresso";
+ this.lblPorcentagemProgresso.Size = new System.Drawing.Size(50, 13);
+ this.lblPorcentagemProgresso.TabIndex = 5;
+ this.lblPorcentagemProgresso.Text = "00,00%";
//
// pgbBateria
//
- this.pgbBateria.Location = new System.Drawing.Point(198, 27);
+ this.pgbBateria.Location = new System.Drawing.Point(98, 36);
this.pgbBateria.Margin = new System.Windows.Forms.Padding(2);
this.pgbBateria.Name = "pgbBateria";
- this.pgbBateria.Size = new System.Drawing.Size(191, 40);
+ this.pgbBateria.Size = new System.Drawing.Size(175, 27);
this.pgbBateria.TabIndex = 2;
//
+ // pgbProgresso
+ //
+ this.pgbProgresso.Location = new System.Drawing.Point(408, 5);
+ this.pgbProgresso.Margin = new System.Windows.Forms.Padding(2);
+ this.pgbProgresso.Name = "pgbProgresso";
+ this.pgbProgresso.Size = new System.Drawing.Size(175, 27);
+ this.pgbProgresso.TabIndex = 4;
+ //
// lblPorcentagemReservatorio
//
this.lblPorcentagemReservatorio.AutoSize = true;
- this.lblPorcentagemReservatorio.Location = new System.Drawing.Point(2, 11);
+ this.lblPorcentagemReservatorio.BackColor = System.Drawing.Color.Transparent;
+ this.lblPorcentagemReservatorio.Location = new System.Drawing.Point(167, 12);
this.lblPorcentagemReservatorio.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblPorcentagemReservatorio.Name = "lblPorcentagemReservatorio";
- this.lblPorcentagemReservatorio.Size = new System.Drawing.Size(123, 13);
+ this.lblPorcentagemReservatorio.Size = new System.Drawing.Size(50, 13);
this.lblPorcentagemReservatorio.TabIndex = 1;
- this.lblPorcentagemReservatorio.Text = "Reservatório: 0,00%";
+ this.lblPorcentagemReservatorio.Text = "00,00%";
//
// pgbReservatorio
//
- this.pgbReservatorio.Location = new System.Drawing.Point(2, 27);
+ this.pgbReservatorio.Location = new System.Drawing.Point(98, 5);
this.pgbReservatorio.Margin = new System.Windows.Forms.Padding(2);
this.pgbReservatorio.Name = "pgbReservatorio";
- this.pgbReservatorio.Size = new System.Drawing.Size(191, 40);
+ this.pgbReservatorio.Size = new System.Drawing.Size(175, 27);
this.pgbReservatorio.TabIndex = 0;
//
// gpbOpcoes
@@ -449,6 +495,8 @@ namespace AgroBase.Forms.Operacoes
// pnlInclinacao
//
this.pnlInclinacao.BackColor = System.Drawing.Color.White;
+ this.pnlInclinacao.BackgroundImage = global::AgroBase.Properties.Resources.transferidor;
+ this.pnlInclinacao.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.pnlInclinacao.Location = new System.Drawing.Point(625, 6);
this.pnlInclinacao.Margin = new System.Windows.Forms.Padding(2);
this.pnlInclinacao.Name = "pnlInclinacao";
@@ -480,6 +528,7 @@ namespace AgroBase.Forms.Operacoes
//
// pnlInferior
//
+ this.pnlInferior.Controls.Add(this.lblDistancia);
this.pnlInferior.Controls.Add(this.lblMapaCarregado);
this.pnlInferior.Controls.Add(this.chbGPSativo);
this.pnlInferior.Controls.Add(this.chbATUativo);
@@ -498,7 +547,7 @@ namespace AgroBase.Forms.Operacoes
//
this.lblMapaCarregado.AutoSize = true;
this.lblMapaCarregado.Font = new System.Drawing.Font("Mongolian Baiti", 9F, System.Drawing.FontStyle.Bold);
- this.lblMapaCarregado.Location = new System.Drawing.Point(227, 24);
+ this.lblMapaCarregado.Location = new System.Drawing.Point(227, 4);
this.lblMapaCarregado.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblMapaCarregado.Name = "lblMapaCarregado";
this.lblMapaCarregado.Size = new System.Drawing.Size(129, 13);
@@ -575,6 +624,8 @@ namespace AgroBase.Forms.Operacoes
// pnlOrientacao
//
this.pnlOrientacao.BackColor = System.Drawing.Color.White;
+ this.pnlOrientacao.BackgroundImage = global::AgroBase.Properties.Resources.rosa_dos_ventos;
+ this.pnlOrientacao.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.pnlOrientacao.Location = new System.Drawing.Point(936, 6);
this.pnlOrientacao.Margin = new System.Windows.Forms.Padding(2);
this.pnlOrientacao.Name = "pnlOrientacao";
@@ -582,6 +633,61 @@ namespace AgroBase.Forms.Operacoes
this.pnlOrientacao.TabIndex = 11;
this.pnlOrientacao.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlOrientacao_Paint);
//
+ // lblStatus
+ //
+ this.lblStatus.AutoSize = true;
+ this.lblStatus.Font = new System.Drawing.Font("Mongolian Baiti", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.lblStatus.Location = new System.Drawing.Point(406, 37);
+ this.lblStatus.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.lblStatus.Name = "lblStatus";
+ this.lblStatus.Size = new System.Drawing.Size(114, 11);
+ this.lblStatus.TabIndex = 10;
+ this.lblStatus.Text = "Status: Aguardando";
+ //
+ // lblDirecao
+ //
+ this.lblDirecao.AutoSize = true;
+ this.lblDirecao.Font = new System.Drawing.Font("Mongolian Baiti", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.lblDirecao.Location = new System.Drawing.Point(406, 51);
+ this.lblDirecao.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.lblDirecao.Name = "lblDirecao";
+ this.lblDirecao.Size = new System.Drawing.Size(94, 11);
+ this.lblDirecao.TabIndex = 11;
+ this.lblDirecao.Text = "Direção: Parado";
+ //
+ // lblDistancia
+ //
+ this.lblDistancia.AutoSize = true;
+ this.lblDistancia.Font = new System.Drawing.Font("Mongolian Baiti", 9F, System.Drawing.FontStyle.Bold);
+ this.lblDistancia.Location = new System.Drawing.Point(227, 24);
+ this.lblDistancia.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.lblDistancia.Name = "lblDistancia";
+ this.lblDistancia.Size = new System.Drawing.Size(171, 13);
+ this.lblDistancia.TabIndex = 10;
+ this.lblDistancia.Text = "Distância Operação: 00,00 m";
+ //
+ // btnSimular
+ //
+ this.btnSimular.Location = new System.Drawing.Point(325, 38);
+ this.btnSimular.Margin = new System.Windows.Forms.Padding(2);
+ this.btnSimular.Name = "btnSimular";
+ this.btnSimular.Size = new System.Drawing.Size(61, 21);
+ this.btnSimular.TabIndex = 12;
+ this.btnSimular.Text = "Simular";
+ this.btnSimular.UseVisualStyleBackColor = true;
+ this.btnSimular.Click += new System.EventHandler(this.btnSimular_Click);
+ //
+ // btnManobraConcluida
+ //
+ this.btnManobraConcluida.Location = new System.Drawing.Point(544, 43);
+ this.btnManobraConcluida.Margin = new System.Windows.Forms.Padding(2);
+ this.btnManobraConcluida.Name = "btnManobraConcluida";
+ this.btnManobraConcluida.Size = new System.Drawing.Size(39, 21);
+ this.btnManobraConcluida.TabIndex = 13;
+ this.btnManobraConcluida.Text = "MC";
+ this.btnManobraConcluida.UseVisualStyleBackColor = true;
+ this.btnManobraConcluida.Click += new System.EventHandler(this.btnManobraConcluida_Click);
+ //
// frmOperacaoSeguidorLinha
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -674,5 +780,13 @@ namespace AgroBase.Forms.Operacoes
private System.Windows.Forms.Label lblPressao;
private System.Windows.Forms.Label lblMapaCarregado;
private System.Windows.Forms.Panel pnlOrientacao;
+ private System.Windows.Forms.Label lblBateriaT;
+ private System.Windows.Forms.Label lblReservatorioT;
+ private System.Windows.Forms.Label lblProgressoT;
+ private System.Windows.Forms.Label lblDirecao;
+ private System.Windows.Forms.Label lblStatus;
+ private System.Windows.Forms.Label lblDistancia;
+ private System.Windows.Forms.Button btnSimular;
+ private System.Windows.Forms.Button btnManobraConcluida;
}
}
\ No newline at end of file
diff --git a/AgroBase/AgroBase/Forms/Operacoes/frmOperacaoSeguidorLinha.cs b/AgroBase/AgroBase/Forms/Operacoes/frmOperacaoSeguidorLinha.cs
index 8fa5802d1..e25495318 100644
--- a/AgroBase/AgroBase/Forms/Operacoes/frmOperacaoSeguidorLinha.cs
+++ b/AgroBase/AgroBase/Forms/Operacoes/frmOperacaoSeguidorLinha.cs
@@ -17,6 +17,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
+using static AgroBase.Models.Enuns;
namespace AgroBase.Forms.Operacoes
{
@@ -31,6 +32,7 @@ namespace AgroBase.Forms.Operacoes
DispositivosService Movimentacao;
DispositivosService Direcional;
DispositivosService Atuador;
+ DispositivosService Sensoriamento;
public frmOperacaoSeguidorLinha()
@@ -52,6 +54,9 @@ namespace AgroBase.Forms.Operacoes
private void frmOperacaoSeguidorLinha_Load(object sender, EventArgs e)
{
+ tmrLeituras.Tick += TmrLeituras_Tick;
+ tmrLeituras.Start();
+
AtualizarDispositivos();
AtualizaListaCameras();
@@ -75,6 +80,7 @@ namespace AgroBase.Forms.Operacoes
Movimentacao = (DispositivosService)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Enuns.T_Code.Mov);
Direcional = (DispositivosService)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Enuns.T_Code.Dir);
Atuador = (DispositivosService)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Enuns.T_Code.Atu);
+ Sensoriamento = (DispositivosService)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == Enuns.T_Code.Sen);
chbMOVativo.Checked = Movimentacao != null && Movimentacao._Porta.IsOpen;
chbDIRativo.Checked = Direcional != null && Direcional._Porta.IsOpen;
@@ -331,7 +337,7 @@ namespace AgroBase.Forms.Operacoes
private void btnIniciarOperacao_Click(object sender, EventArgs e)
{
- if (tmrLeituras.Enabled == true)
+ if (Variaveis.OperacaoEmAndamento.Iniciado)
{
btnIniciarOperacao.Text = "Iniciar Operação";
cmbCameraSoloE.Enabled = true;
@@ -339,9 +345,6 @@ namespace AgroBase.Forms.Operacoes
cmbCameraCaminho.Enabled = true;
Variaveis.OperacaoEmAndamento.FinalizarOperacao();
-
- tmrLeituras.Tick -= TmrLeituras_Tick;
- tmrLeituras.Stop();
}
else
{
@@ -351,23 +354,25 @@ namespace AgroBase.Forms.Operacoes
cmbCameraCaminho.Enabled = false;
Variaveis.OperacaoEmAndamento.IniciarOperacao(null, false);
-
- tmrLeituras.Tick += TmrLeituras_Tick;
- tmrLeituras.Start();
}
}
private void TmrLeituras_Tick(object sender, EventArgs e)
{
- CamerasSolo.ForEach(CameraSolo =>
- {
- AtualizaLeituraCameraSolo(CameraSolo);
- });
-
- AtualizaLeituraCameraCaminho();
+ Variaveis.OperacaoEmAndamento.Tempo = TimeSpan.FromTicks(Variaveis.OperacaoEmAndamento.Iniciado ? ((Variaveis.OperacaoEmAndamento.TimestampFim > 0 ? Variaveis.OperacaoEmAndamento.TimestampFim : DateTime.Now.Ticks) - Variaveis.OperacaoEmAndamento.TimestampInicio) : 0);
- AtualizarGrafico();
+ if (Variaveis.OperacaoEmAndamento.Iniciado)
+ {
+ CamerasSolo.ForEach(CameraSolo =>
+ {
+ AtualizaLeituraCameraSolo(CameraSolo);
+ });
+
+ AtualizaLeituraCameraCaminho();
+
+ AtualizarGrafico();
+ }
AtualizarInformacoesGerais();
}
@@ -468,6 +473,8 @@ namespace AgroBase.Forms.Operacoes
pnlInclinacao.Invalidate();
+ lblUltimaLeituraRua.Text = "Ultima Leitura Rua: " + FuncoesGlobais.TimestampToDate(cameraCaminho.Leituras.FirstOrDefault().timestamp);
+
AtualizaInformacoesControleOperacao();
}
catch
@@ -498,6 +505,8 @@ namespace AgroBase.Forms.Operacoes
}
else
{
+ Variaveis.OperacaoEmAndamento.CalculaDadosMovimentacaoAutonoma();
+
Variaveis.OperacaoEmAndamento.Controle.BicosAtuados =
!chbATUativo.Checked ? BicosNaoAtuados
: Atuador.Dados.BicosPulverizadores;
@@ -649,13 +658,24 @@ namespace AgroBase.Forms.Operacoes
private void AtualizarInformacoesGerais()
{
+ if (Variaveis.OperacaoEmAndamento.ReferencialRuaGPS.StatusAtual == Enuns.StatusOperacao.Aguardando)
+ {
+ this.Text = "Operação Seguidor de Linha - Iniciando em " + (Variaveis.OperacaoEmAndamento.TempoIniciarOperacao - Variaveis.OperacaoEmAndamento.Tempo.Seconds) + " segundos...";
+ }
+ else if (Variaveis.OperacaoEmAndamento.ReferencialRuaGPS.StatusAtual == Enuns.StatusOperacao.Parametrizando)
+ {
+ this.Text = "Operação Seguidor de Linha - Parametrização";
+ }
+ else if (Variaveis.OperacaoEmAndamento.Iniciado)
+ {
+ this.Text = "Operação Seguidor de Linha - Iniciado";
+ }
+
lblDistanciaEsquerda.Text = "Distancia da Esquerda: " + Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaEsquerda.ToString("0.00") + " cm";
lblDistanciaDireita.Text = "Distancia da Direita: " + Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaDireita.ToString("0.00") + " cm";
- lblUltimaLeituraRua.Text = "Ultima Leitura Rua: " + FuncoesGlobais.TimestampToDate(cameraCaminho.Leituras.FirstOrDefault().timestamp);
lblDistanciaPercorrida.Text = "Distancia Percorrida: " + Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaPercorrida.ToString("0.00") + " m";
- TimeSpan tempo = TimeSpan.FromTicks((Variaveis.OperacaoEmAndamento.TimestampFim > 0 ? Variaveis.OperacaoEmAndamento.TimestampFim : DateTime.Now.Ticks) - Variaveis.OperacaoEmAndamento.TimestampInicio);
- lblTempoOperacao.Text = "Tempo de Operação: " + tempo.Hours.ToString("00") + ":" + tempo.Minutes.ToString("00") + ":" + tempo.Seconds.ToString("00");
+ lblTempoOperacao.Text = "Tempo de Operação: " + Variaveis.OperacaoEmAndamento.Tempo.Hours.ToString("00") + ":" + Variaveis.OperacaoEmAndamento.Tempo.Minutes.ToString("00") + ":" + Variaveis.OperacaoEmAndamento.Tempo.Seconds.ToString("00");
lblVelocidadeMedia.Text = "Velocidade Média: " + Variaveis.OperacaoEmAndamento.Sensoriamento.VelocidadeMedia.ToString("0.00") + " km/h";
lblErvasIdentificadas.Text = "Ervas Identificadas: " + Variaveis.OperacaoEmAndamento.Sensoriamento.ErvasIdentificadas.ToString("000");
lblHerbicidaAplicado.Text = "Herbicida Aplicado: " + Variaveis.OperacaoEmAndamento.Sensoriamento.HerbicidaConsumido.ToString("0.000") + " L";
@@ -665,37 +685,42 @@ namespace AgroBase.Forms.Operacoes
lblPressao.Text = "P: " + Atuador.Dados.PressaoLinha.ToString("0.00") + " psi";
pgbReservatorio.Value = Convert.ToInt32(Atuador.Dados.PercentualReservatorio);
- lblPorcentagemReservatorio.Text = "Reservatório: " + Atuador.Dados.PercentualReservatorio.ToString("0.00") + "%";
+ lblPorcentagemReservatorio.Text = Atuador.Dados.PercentualReservatorio.ToString("00.00") + "%";
+
+ pgbBateria.Value = Convert.ToInt32(Variaveis.OperacaoEmAndamento.Sensoriamento.PorcentagemBateria);
+ lblPorcentagemReservatorio.Text = Variaveis.OperacaoEmAndamento.Sensoriamento.PorcentagemBateria.ToString("00.00") + "%";
pgbProgresso.Value = Convert.ToInt32(Variaveis.OperacaoEmAndamento.Sensoriamento.ProgressoPercurso);
- lblPorcentagemProgresso.Text = "Progresso: " + Variaveis.OperacaoEmAndamento.Sensoriamento.ProgressoPercurso.ToString("0.00") + "%";
+ lblPorcentagemProgresso.Text = Variaveis.OperacaoEmAndamento.Sensoriamento.ProgressoPercurso.ToString("00.00") + "%";
+ lblDistancia.Text = "Distância Operação: " + (Variaveis.OperacaoEmAndamento.Mapa == null ? 0 : Variaveis.OperacaoEmAndamento.Mapa.DistanciaTotal).ToString("00.00") + " m";
}
private void pnlInclinacao_Paint(object sender, PaintEventArgs e)
{
try
{
- DesenharInclinacao((Panel)sender, e, (float)cameraCaminho.Angulo);
+ //DesenharInclinacao((Panel)sender, e, (float)cameraCaminho.Angulo);
+ DesenharInclinacao((Panel)sender, e, (float)(Variaveis.OperacaoEmAndamento.ReferencialRuaGPS.AnguloCarro - Variaveis.OperacaoEmAndamento.ReferencialRuaGPS.AnguloRua), 90);
}
catch { }
}
- private void DesenharInclinacao(Panel pnlBussola, PaintEventArgs e, float anguloInclinacao)
+ private void DesenharInclinacao(Panel pnlBussola, PaintEventArgs e, float anguloInclinacao, float anguloSub)
{
Graphics g = e.Graphics;
// Desenha o cÃrculo da bússola
int diameter = Math.Min(pnlBussola.Width - 1, pnlBussola.Height - 1);
Point centro = new Point((pnlBussola.Width - 1) / 2, (pnlBussola.Height - 1) / 2);
- g.DrawEllipse(Pens.Black, centro.X - diameter / 2, centro.Y - diameter / 2, diameter, diameter);
+ //g.DrawEllipse(Pens.Black, centro.X - diameter / 2, centro.Y - diameter / 2, diameter, diameter);
// Escreve o ângulo no centro do cÃrculo
- string anguloTexto = $"{anguloInclinacao.ToString("0.00")}°";
- Font fonteAngulo = new Font("Arial", 10); // Ajuste o tamanho da fonte conforme necessário
+ string anguloTexto = $"{anguloInclinacao.ToString("0")}°";
+ Font fonteAngulo = new Font("Arial", 7); // Ajuste o tamanho da fonte conforme necessário
SizeF textSize = e.Graphics.MeasureString(anguloTexto, fonteAngulo);
// Calcula a posição para o texto ser centralizado no cÃrculo
- float textX = centro.X - (textSize.Width / 2);
- float textY = centro.Y - (textSize.Height / 2) + (centro.Y / 2);
+ float textX = 0;
+ float textY = 0;
// Define a cor do texto
Brush textBrush = Brushes.Black;
@@ -706,10 +731,11 @@ namespace AgroBase.Forms.Operacoes
// A linha será desenhada do centro do cÃrculo
PointF pontoCentral = new PointF(centro.X, centro.Y);
// O comprimento da linha será metade do diâmetro do cÃrculo (raio)
- float comprimentoLinha = diameter / 2;
+ float comprimentoLinha = diameter / 3;
// Ajustar o ângulo para que 0 graus esteja para cima e aumente no sentido horário
- float anguloRadianos = (anguloInclinacao - 90) * (float)(Math.PI / 180.0);
+ //float anguloRadianos = (anguloInclinacao - 90) * (float)(Math.PI / 180.0);
+ float anguloRadianos = (anguloInclinacao - anguloSub) * (float)(Math.PI / 180.0);
// Calcular o ponto final da linha baseado no ângulo de inclinação
PointF pontoFinal = new PointF(
@@ -815,10 +841,36 @@ namespace AgroBase.Forms.Operacoes
{
try
{
- DesenharInclinacao((Panel)sender, e, (float)GPSService.UltimaLeitura.Orientacao);
+ //DesenharInclinacao((Panel)sender, e, (float)GPSService.UltimaLeitura.Orientacao);
+ DesenharInclinacao((Panel)sender, e, (float)Variaveis.OperacaoEmAndamento.ReferencialRuaGPS.AnguloCarro, -90);
}
catch { }
}
+ private void btnSimular_Click(object sender, EventArgs e)
+ {
+ GPSService.SimularGPS();
+ Timer tmr = new Timer() { Interval = 500 };
+ tmr.Tick += Tmr_Tick;
+ tmr.Start();
+ }
+
+ private void Tmr_Tick(object sender, EventArgs e)
+ {
+ if (!GPSService.Iniciado)
+ {
+ ((Timer)sender).Stop();
+ }
+ lblStatus.Text = "Status: " + Enum.GetName(typeof(StatusOperacao), Variaveis.OperacaoEmAndamento.ReferencialRuaGPS.StatusAtual);
+ lblDirecao.Text = "Direção: " + Enum.GetName(typeof(DirecaoCarroRua), Variaveis.OperacaoEmAndamento.ReferencialRuaGPS.Direcao);
+ }
+
+ private void btnManobraConcluida_Click(object sender, EventArgs e)
+ {
+ if (Variaveis.OperacaoEmAndamento.ReferencialRuaGPS.StatusAtual == StatusOperacao.Manobrando)
+ {
+ Variaveis.OperacaoEmAndamento.ReferencialRuaGPS.ManobraConcluida = true;
+ }
+ }
}
}
diff --git a/AgroBase/AgroBase/Forms/frmMapa.cs b/AgroBase/AgroBase/Forms/frmMapa.cs
index 0ffe99956..e2947b40d 100644
--- a/AgroBase/AgroBase/Forms/frmMapa.cs
+++ b/AgroBase/AgroBase/Forms/frmMapa.cs
@@ -13,6 +13,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+using static AgroBase.Models.Enuns;
namespace AgroBase.Forms
{
@@ -39,6 +40,5 @@ namespace AgroBase.Forms
Mapa.btnCarregar_Click(sender, e);
}
-
}
}
diff --git a/AgroBase/AgroBase/Forms/frmPrincipal.cs b/AgroBase/AgroBase/Forms/frmPrincipal.cs
index 8aa48cd4a..f20f3b958 100644
--- a/AgroBase/AgroBase/Forms/frmPrincipal.cs
+++ b/AgroBase/AgroBase/Forms/frmPrincipal.cs
@@ -38,6 +38,7 @@ namespace AgroBase
private void frmPrincipal_FormClosing(object sender, FormClosingEventArgs e)
{
+ APIService.Parar();
foreach (var Disp in Variaveis.DispositivosConectados)
{
Disp.SalvarParametros(Disp.Dados);
diff --git a/AgroBase/AgroBase/Imagens/rosa_dos_ventos.png b/AgroBase/AgroBase/Imagens/rosa_dos_ventos.png
new file mode 100644
index 000000000..66114fb9f
Binary files /dev/null and b/AgroBase/AgroBase/Imagens/rosa_dos_ventos.png differ
diff --git a/AgroBase/AgroBase/Imagens/transferidor.png b/AgroBase/AgroBase/Imagens/transferidor.png
new file mode 100644
index 000000000..577a1e09a
Binary files /dev/null and b/AgroBase/AgroBase/Imagens/transferidor.png differ
diff --git a/AgroBase/AgroBase/Models/Enuns.cs b/AgroBase/AgroBase/Models/Enuns.cs
index 42db957ae..58bb2d4c1 100644
--- a/AgroBase/AgroBase/Models/Enuns.cs
+++ b/AgroBase/AgroBase/Models/Enuns.cs
@@ -116,5 +116,23 @@ namespace AgroBase.Models
Remoto
}
+ public enum StatusOperacao
+ {
+ Parametrizando,
+ Aguardando,
+ EntrandoRua,
+ CaminhandoRua,
+ SaindoRua,
+ Manobrando,
+ Retornando
+ }
+
+ public enum DirecaoCarroRua
+ {
+ Parado,
+ Ida,
+ Volta
+ }
+
}
}
diff --git a/AgroBase/AgroBase/Models/GPSModel.cs b/AgroBase/AgroBase/Models/GPSModel.cs
index 296a83ea7..1451bfab3 100644
--- a/AgroBase/AgroBase/Models/GPSModel.cs
+++ b/AgroBase/AgroBase/Models/GPSModel.cs
@@ -1,4 +1,5 @@
-using System;
+using AgroBase.Services;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -15,6 +16,12 @@ namespace AgroBase.Models
public double Velocidade { get; set; }
public int NumeroSatelites { get; set; }
public double PrecisaoHorizontal { get; set; }
- public double Orientacao { get;set; }
+ public double Orientacao
+ {
+ get
+ {
+ return GPSService.CalcularOrientacao(GPSService.UltimaLeitura, GPSService.PenultimaLeitura);
+ }
+ }
}
}
diff --git a/AgroBase/AgroBase/Models/MapasModel.cs b/AgroBase/AgroBase/Models/MapasModel.cs
index 6e6710d5f..b7d11ae1f 100644
--- a/AgroBase/AgroBase/Models/MapasModel.cs
+++ b/AgroBase/AgroBase/Models/MapasModel.cs
@@ -17,6 +17,10 @@ namespace AgroBase.Models
private PictureBox picLoading { get; set; } = new PictureBox();
public Label lblMapa { get; set; } = new Label();
public MapasService mapaService { get; set; } = new MapasService();
+ public List> Trajetoria { get; set; } = new List>();
+ public List RuasPercorrer { get; set; } = new List();
+ public int IdxRuaAtual { get; set; } = 0;
+ public double DistanciaTotal { get; set; } = 0;
public void btnCarregar_Click(object sender, EventArgs e)
{
@@ -54,12 +58,41 @@ namespace AgroBase.Models
{
mapaService.CarregarDadosMapa();
lblMapa.Text = "Mapa carregado: " + mapaService.NomeArquivos;
+
+ PopularTrajetoria();
}
IniciarProcessamento();
}
}
+ public void PopularTrajetoria()
+ {
+ if (mapaService.DadosMapa != null)
+ {
+ DistanciaTotal = 0;
+ var IDs = RuasPercorrer.Any() ? RuasPercorrer : mapaService.DadosMapa.features.Select(x => x.geometry.id).ToList();
+ Trajetoria = new List>();
+ foreach (var rua in mapaService.DadosMapa.features.Where(x => IDs.Contains(x.geometry.id)))
+ {
+ Trajetoria.Add(new List());
+ foreach (var ponto in rua.geometry.coordinates)
+ {
+ GPSModel item = new GPSModel()
+ {
+ Longitude = ponto[0],
+ Latitude = ponto[1],
+ };
+ Trajetoria[Trajetoria.Count - 1].Add(item);
+ if (Trajetoria[Trajetoria.Count - 1].Count > 1)
+ {
+ DistanciaTotal += GPSService.DistanciaEntrePontos(Trajetoria[Trajetoria.Count - 1][Trajetoria[Trajetoria.Count - 1].Count - 2], item);
+ }
+ }
+ }
+ }
+ }
+
private void IniciarProcessamento()
{
APIService.Inicializar();
@@ -101,6 +134,7 @@ namespace AgroBase.Models
public class MapaFeatureGeometryModel
{
+ public string id { get; set; }
public string type { get; set; }
public List> coordinates { get; set; }
}
diff --git a/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs b/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs
index 2671fd6a7..5da3b9f5d 100644
--- a/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs
+++ b/AgroBase/AgroBase/Models/Modules/SensoriamentoModel.cs
@@ -390,7 +390,7 @@ namespace AgroBase.Models.Modules
vShunt,
};
- if (Sensor.Descricao.Contains("Bateria"))
+ if (Sensor.Descricao.ToLower().Contains("bateria"))
{
frmInstancial.frmAcompanhamento.AtualizarSensores("Corrente atual: " + corrente.ToString("0.00") + "A - MÃn: " + Sensor.ValorMinimo.ToString("0.00") + "A - Máx: " + Sensor.ValorMaximo.ToString("0.00") + "A");
}
@@ -412,9 +412,10 @@ namespace AgroBase.Models.Modules
vPinV,
};
- if (Sensor.Descricao.Contains("Bateria"))
+ if (Sensor.Descricao.ToLower().Contains("bateria"))
{
frmInstancial.frmAcompanhamento.AtualizarSensores("Tensão atual: " + tensao.ToString("0.00") + "V - MÃn: " + Sensor.ValorMinimo.ToString("0.00") + "V - Máx: " + Sensor.ValorMaximo.ToString("0.00") + "V");
+ Variaveis.OperacaoEmAndamento.Sensoriamento.PorcentagemBateria = (tensao / Sensor.LimiteMaximo) * 100;
}
AtualizaGrafico = true;
@@ -425,7 +426,7 @@ namespace AgroBase.Models.Modules
double.TryParse(Dados[2].Replace(".", ","), out temp);
Sensor.Leituras = new List() { temp };
- if (Sensor.Descricao.Contains("Bateria"))
+ if (Sensor.Descricao.ToLower().Contains("bateria"))
{
frmInstancial.frmAcompanhamento.AtualizarSensores("Temp atual: " + temp.ToString("0.00") + "ºC - MÃn: " + Sensor.ValorMinimo.ToString("0.00") + "ºC - Máx: " + Sensor.ValorMaximo.ToString("0.00") + "ºC");
}
@@ -549,11 +550,11 @@ namespace AgroBase.Models.Modules
switch (Sensor.Componente)
{
case S_Code.sTMP:
- frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[9].Value = Motor.Temperatura.ToString();
+ frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[9].Value = Motor.Temperatura.ToString("0.00");
break;
case S_Code.sCOR:
- frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[10].Value = Motor.Temperatura.ToString();
- frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[11].Value = Motor.Temperatura.ToString();
+ frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[10].Value = Motor.Corrente.ToString("0.00");
+ frmInstancial.frmPrincipal.gridSenMotores.Rows[Motor.Canal].Cells[11].Value = Motor.Tensao.ToString("0.00");
break;
}
diff --git a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs
index b30bf3492..f6209b1b0 100644
--- a/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs
+++ b/AgroBase/AgroBase/Models/Operacoes/OperacaoModel.cs
@@ -18,6 +18,11 @@ namespace AgroBase.Models
{
public OperacaoModel(ModoOperacao Modo, DispositivosService Mov = null, DispositivosService Dir = null, DispositivosService Atu = null)
{
+ if (APIService.pythonProcess == null)
+ {
+ APIService.Inicializar();
+ }
+
this.Modo = Modo;
this.Controle = new OperacaoControleModel()
{
@@ -60,28 +65,39 @@ namespace AgroBase.Models
this.Sensoriamento.AtuacoesPorBico.Add(0);
}
}
+ this.tmrLogs.Tick -= TmrLogs_Tick;
+ this.tmrLogs.Tick += TmrLogs_Tick;
+ this.tmrParametrizacao.Tick -= TmrParametrizacao_Tick;
+ this.tmrParametrizacao.Tick += TmrParametrizacao_Tick;
+
+ this.tmrParametrizacao.Start();
}
+
+
public ModoOperacao Modo { get; set; }
public DispositivosService DispMov { get; set; }
public DispositivosService DispDir { get; set; }
public DispositivosService DispAtu { get; set; }
- public MapasModel Mapa { get;set; }
+ public MapasModel Mapa { get; set; } = new MapasModel();
public Form frmOperacao { get; set; }
public string frmOperacaoNome { get; set; }
public bool Iniciado { get; set; }
public long TimestampInicio { get; set; }
public long TimestampFim { get; set; }
+ public TimeSpan Tempo { get; set; }
public OperacaoControleModel Controle { get; set; }
public OperacaoControleModel ControleAnterior { get; set; }
public List ModulosMandatorios { get; set; }
public OperacaoSensoriamentoModel Sensoriamento { get; set; } = new OperacaoSensoriamentoModel();
public List Logs { get; set; } = new List();
public List GPSTrajetoria { get; set; } = new List();
+ public OperacaoRefRuaGPS ReferencialRuaGPS { get; set; } = new OperacaoRefRuaGPS();
public int TempoIniciarOperacao { get; set; } = 10;
public string PastaSaida { get; set; } = "Operacoes/";
public string ID { get; set; }
public Timer tmrLogs = new Timer() { Interval = 5000 };
+ public Timer tmrParametrizacao = new Timer() { Interval = 1000 };
public static OperacaoModel CarregarParametrosOperacaoPadrao(ModoOperacao Modo)
@@ -286,9 +302,10 @@ namespace AgroBase.Models
Directory.CreateDirectory(PastaSaida + ID + "/");
- APIService.Inicializar();
GPSService.IniciarRecepcaoDados();
+ Controle = new OperacaoControleModel();
+ ControleAnterior = new OperacaoControleModel();
if (controle != null)
{
Controle = controle;
@@ -298,16 +315,10 @@ namespace AgroBase.Models
frmOperacao.Show();
}
- tmrLogs.Tick -= TmrLogs_Tick;
- tmrLogs.Tick += TmrLogs_Tick;
tmrLogs.Start();
+ tmrParametrizacao.Stop();
}
-
- private void TmrLogs_Tick(object sender, EventArgs e)
- {
- SalvarLog();
- }
-
+
public void FinalizarOperacao()
{
Controle.Angulo = 0;
@@ -318,17 +329,17 @@ namespace AgroBase.Models
TimestampFim = DateTime.Now.Ticks;
tmrLogs.Stop();
+ tmrParametrizacao.Start();
GPSService.PararRecepcaoDados();
- APIService.Parar();
}
public void AtualizarDadosControle()
{
DateTime Agora = DateTime.Now;
- OperacaoControleTipoModel ControleMov = Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov);
- OperacaoControleTipoModel ControleDir = Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Dir);
- OperacaoControleTipoModel ControleAtu = Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Atu);
+ OperacaoControleTipoModel ControleMov = Controle.TiposControle != null ? Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Mov) : null;
+ OperacaoControleTipoModel ControleDir = Controle.TiposControle != null ? Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Dir) : null;
+ OperacaoControleTipoModel ControleAtu = Controle.TiposControle != null ? Controle.TiposControle.FirstOrDefault(x => x.Tipo == T_Code.Atu) : null;
if (ControleMov != null && Controle.RPM != ControleAnterior.RPM && (Agora - ControleMov.UltimoComando).Milliseconds > ControleMov.DelayEnvioComando)
{
@@ -366,7 +377,8 @@ namespace AgroBase.Models
return;
}
Sensoriamento.VelocidadeMedia = DispMov.Dados.Motores.Average(x => x.VelocidadeInstantanea);
- Sensoriamento.DistanciaPercorrida = DispMov.Dados.DistanciaPercorridaOperacao;
+ //Sensoriamento.DistanciaPercorrida = DispMov.Dados.DistanciaPercorridaOperacao;
+ Sensoriamento.ProgressoPercurso = Mapa == null ? 0 : Sensoriamento.DistanciaPercorrida / Mapa.DistanciaTotal * 100;
}
public List EnviarProtocoloComando(IDispositivosService Dispositivo)
@@ -455,9 +467,41 @@ namespace AgroBase.Models
Longitude = GPSService.UltimaLeitura.Longitude,
PrecisaoHorizontal = GPSService.UltimaLeitura.PrecisaoHorizontal
});
+ if (GPSTrajetoria.Count > 1)
+ {
+ Sensoriamento.DistanciaPercorrida += GPSService.DistanciaEntrePontos(GPSTrajetoria[GPSTrajetoria.Count - 1], GPSTrajetoria[GPSTrajetoria.Count - 2]);
+ }
File.WriteAllText(PastaSaida + ID + "/trajetoria.json", JsonConvert.SerializeObject(GPSTrajetoria, Formatting.None));
}
+
+ public void AtualizarEtapa()
+ {
+
+ }
+
+
+
+ public void CalculaDadosMovimentacaoAutonoma()
+ {
+
+ }
+
+
+
+ private void TmrLogs_Tick(object sender, EventArgs e)
+ {
+ SalvarLog();
+ }
+
+ private void TmrParametrizacao_Tick(object sender, EventArgs e)
+ {
+ if (Mapa != null)
+ {
+ APIService.AtualizarRuasSelecionadas();
+ }
+ }
+
}
public class OperacaoControleModel
@@ -484,12 +528,6 @@ namespace AgroBase.Models
public List Comandos { get; set; }
}
- public class OperacaoGraficoModel
- {
- public double Velocidade { get; set; }
- public double Temperatura { get; set; }
- }
-
public class OperacaoModulosMandatoriosModel
{
public T_Code Dispositivo { get; set; }
@@ -505,6 +543,7 @@ namespace AgroBase.Models
public double VelocidadeMedia { get; set; } = 0;
public double HerbicidaConsumido { get; set; } = 0;
public double HerbicidaPorErva { get; set; } = 0;
+ public double PorcentagemBateria { get; set; } = 0;
public double BateriaConsumida { get; set; } = 0;
public int ErvasIdentificadas { get; set; } = 0;
public List AtuacoesPorBico { get; set; } = new List();
@@ -514,5 +553,244 @@ namespace AgroBase.Models
public double DistanciaDireita { get; set; } = 0;
}
+ public class OperacaoRefRuaGPS
+ {
+ public bool ManobraConcluida { get; set; } = false;
+ private StatusOperacao _EtapaAtual;
+ public StatusOperacao StatusAtual
+ {
+ get
+ {
+ StatusOperacao etapaAtual = StatusOperacao.Aguardando;
+ if (!Variaveis.OperacaoEmAndamento.Iniciado)
+ {
+ etapaAtual = StatusOperacao.Parametrizando;
+ }
+ else if (Variaveis.OperacaoEmAndamento.Tempo.Minutes == 0 && Variaveis.OperacaoEmAndamento.Tempo.Seconds < Variaveis.OperacaoEmAndamento.TempoIniciarOperacao)
+ {
+ etapaAtual = StatusOperacao.Aguardando;
+ }
+ else if (_EtapaAtual == StatusOperacao.Manobrando)
+ {
+ if (Direcao == DirecaoCarroRua.Parado)
+ {
+ if (Variaveis.OperacaoEmAndamento.Mapa.Trajetoria.Count - 1 > Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual)
+ {
+ Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual++;
+ }
+ else
+ {
+ Variaveis.OperacaoEmAndamento.FinalizarOperacao();
+ }
+ ManobraConcluida = false;
+ }
+ else
+ {
+ return _EtapaAtual;
+ }
+ }
+ else if (!DentroDaRua)
+ {
+ if (PontoMaisProximo == 0 && (Direcao == DirecaoCarroRua.Ida || Direcao == DirecaoCarroRua.Parado))
+ {
+ etapaAtual = StatusOperacao.EntrandoRua;
+ }
+ else if (PontoMaisProximo == 1 && (Direcao == DirecaoCarroRua.Volta || Direcao == DirecaoCarroRua.Parado))
+ {
+ etapaAtual = StatusOperacao.EntrandoRua;
+ }
+ else
+ {
+ if (_EtapaAtual == StatusOperacao.CaminhandoRua)
+ {
+ etapaAtual = StatusOperacao.SaindoRua;
+ }
+ else
+ {
+ etapaAtual = StatusOperacao.Manobrando;
+ }
+ }
+ }
+ else if (DentroDaRua)
+ {
+ etapaAtual = StatusOperacao.CaminhandoRua;
+ }
+
+ _EtapaAtual = etapaAtual;
+
+ return etapaAtual;
+ }
+ set
+ {
+ _EtapaAtual = value;
+ }
+ }
+ public int PontosConsiderarAngulo { get; set; } = 2;
+ public double Distancia { get; set; } = 0;
+ public double AnguloCarro
+ {
+ get
+ {
+ try
+ {
+ double somaAngulo = 0;
+ var Pontos = Variaveis.OperacaoEmAndamento.GPSTrajetoria.Count > PontosConsiderarAngulo ?
+ Variaveis.OperacaoEmAndamento.GPSTrajetoria.OrderByDescending(x => x.DataHora).Take(PontosConsiderarAngulo).ToList() :
+ Variaveis.OperacaoEmAndamento.GPSTrajetoria.OrderByDescending(x => x.DataHora).ToList();
+ Pontos = Pontos.OrderBy(x => x.DataHora).ToList();
+ for (int i = 0; i < Pontos.Count - 1; i++)
+ {
+ somaAngulo += GPSService.CalcularOrientacao(Pontos[i + 1], Pontos[i]);
+ }
+ double mediaAngulo = somaAngulo / (Pontos.Count - 1);
+
+ return mediaAngulo;
+ }
+ catch
+ {
+ return 0;
+ }
+ }
+ }
+ public double AnguloRua
+ {
+ get
+ {
+ try
+ {
+ double somaAnguloRua = 0;
+ var Rua = Variaveis.OperacaoEmAndamento.Mapa.Trajetoria.Skip(Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual).First();
+ var PontosRua = Rua.Count > PontosConsiderarAngulo ?
+ Rua.OrderByDescending(x => x.DataHora).Take(PontosConsiderarAngulo).ToList() :
+ Rua.OrderByDescending(x => x.DataHora).ToList();
+ PontosRua = PontosRua.OrderBy(x => x.DataHora).ToList();
+ for (int i = 0; i < PontosRua.Count - 1; i++)
+ {
+ somaAnguloRua += GPSService.CalcularOrientacao(PontosRua[i + 1], PontosRua[i]);
+ }
+ double mediaAnguloRua = somaAnguloRua / (PontosRua.Count - 1);
+
+ return mediaAnguloRua;
+ }
+ catch
+ {
+ return 0;
+ }
+ }
+ }
+ public DirecaoCarroRua Direcao
+ {
+ get
+ {
+ double MargemErroAngulo = 5;
+
+ double mediaAngulo = AnguloCarro;
+ double anguloOposto = (mediaAngulo + 180) % 360;
+ double mediaAnguloRua = AnguloRua;
+
+ if ((mediaAngulo + MargemErroAngulo) >= mediaAnguloRua && (mediaAngulo - MargemErroAngulo) <= mediaAnguloRua)
+ {
+ return DirecaoCarroRua.Ida;
+ }
+ else if ((anguloOposto + MargemErroAngulo) >= mediaAnguloRua && (anguloOposto - MargemErroAngulo) <= mediaAnguloRua)
+ {
+ return DirecaoCarroRua.Volta;
+ }
+ else
+ {
+ return DirecaoCarroRua.Parado;
+ }
+ }
+ }
+ public GPSModel PrimeiroPontoRua
+ {
+ get
+ {
+ var primeiroPontoRua = Variaveis.OperacaoEmAndamento.Mapa.Trajetoria.Skip(Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual).First().First();
+ return primeiroPontoRua;
+ }
+ }
+ public GPSModel UltimoPontoRua
+ {
+ get
+ {
+ var ultimoPontoRua = Variaveis.OperacaoEmAndamento.Mapa.Trajetoria.Skip(Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual).First().Last();
+ return ultimoPontoRua;
+ }
+ }
+ public bool DentroDaRua
+ {
+ get
+ {
+ double MargemErroAngulo = 15;
+ double ToleranciaDistanciaRua = 1;
+
+ // Calcula a distância até o ponto de inÃcio e fim
+ double angRua = AnguloRua;
+
+ double distPP = GPSService.DistanciaEntrePontos(GPSService.UltimaLeitura, PrimeiroPontoRua);
+ double angPP = GPSService.CalcularOrientacao(GPSService.UltimaLeitura, PrimeiroPontoRua);
+ double angPPO = (angPP + 180) % 360;
+ /*if ((angPP + MargemErroAngulo) >= angRua && (angPP - MargemErroAngulo) <= angRua)
+ {
+ distPP = distPP * -1;
+ }
+ else */if ((angPPO + MargemErroAngulo) >= angRua && (angPPO - MargemErroAngulo) <= angRua)
+ {
+ distPP = distPP * -1;
+ }
+
+ double distUP = GPSService.DistanciaEntrePontos(GPSService.UltimaLeitura, UltimoPontoRua);
+ double angUP = GPSService.CalcularOrientacao(GPSService.UltimaLeitura, UltimoPontoRua);
+ double angUPO = (angUP + 180) % 360;
+ if ((angUP + MargemErroAngulo) >= angRua && (angUP - MargemErroAngulo) <= angRua)
+ {
+ distUP = distUP * -1;
+ }
+
+
+ var Rua = Variaveis.OperacaoEmAndamento.Mapa.mapaService.DadosMapa.features.Skip(Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual).First();
+ // Calcula a diferença entre a soma das distâncias e a distância real entre os pontos
+ double diferencaDistancia = (distPP + distUP) - Rua.properties.Length;
+
+
+ bool dentro = false;
+ if (distPP > Rua.properties.Length || distUP > Rua.properties.Length)
+ {
+ dentro = false;
+ }
+ else
+ {
+ dentro = true;
+ }
+
+ // Verifica se a diferença é menor ou igual à tolerância
+ /*dentro = diferencaDistancia <= ToleranciaDistanciaRua;
+ if (dentro)
+ {
+ if (distPP > Rua.properties.Length || distUP > Rua.properties.Length)
+ {
+ dentro = false;
+ }
+ else
+ {
+
+ }
+ }*/
+ return dentro;
+ }
+ }
+ public int PontoMaisProximo {
+ get
+ {
+ double distPP = GPSService.DistanciaEntrePontos(GPSService.UltimaLeitura, PrimeiroPontoRua);
+ double distUP = GPSService.DistanciaEntrePontos(GPSService.UltimaLeitura, UltimoPontoRua);
+
+ // 0 para mais próximo do primeiro ponto da rua (ENTRANDO)
+ // 1 para mais próximo do último ponto da rua (SAINDO)
+ return (distPP < distUP) ? 0 : 1;
+ }
+ }
+ }
}
diff --git a/AgroBase/AgroBase/Properties/Resources.Designer.cs b/AgroBase/AgroBase/Properties/Resources.Designer.cs
index 9daac6c37..cfd2bd360 100644
--- a/AgroBase/AgroBase/Properties/Resources.Designer.cs
+++ b/AgroBase/AgroBase/Properties/Resources.Designer.cs
@@ -89,5 +89,25 @@ namespace AgroBase.Properties {
return ((System.Drawing.Bitmap)(obj));
}
}
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap rosa_dos_ventos {
+ get {
+ object obj = ResourceManager.GetObject("rosa_dos_ventos", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap transferidor {
+ get {
+ object obj = ResourceManager.GetObject("transferidor", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
}
}
diff --git a/AgroBase/AgroBase/Properties/Resources.resx b/AgroBase/AgroBase/Properties/Resources.resx
index bd3fc844b..cd04ec8b8 100644
--- a/AgroBase/AgroBase/Properties/Resources.resx
+++ b/AgroBase/AgroBase/Properties/Resources.resx
@@ -127,4 +127,10 @@
..\Imagens\loading.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Imagens\rosa_dos_ventos.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Imagens\transferidor.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/AgroBase/AgroBase/Python/Scripts/api.py b/AgroBase/AgroBase/Python/Scripts/api.py
index 08e38ebee..1bf91b056 100644
--- a/AgroBase/AgroBase/Python/Scripts/api.py
+++ b/AgroBase/AgroBase/Python/Scripts/api.py
@@ -5,11 +5,14 @@ import sys
apiPort = sys.argv[1]
getCordenadasEndpoint = sys.argv[2]
setCordenadasEndpoint = sys.argv[3]
+getRuasSelecionadasEndpoint = sys.argv[4]
+setRuasSelecionadasEndpoint = sys.argv[5]
app = Flask(__name__)
CORS(app) # Isso habilita o CORS para todas as rotas e origens
coordenadas = {}
+ruas_selecionadas = []
@app.route(setCordenadasEndpoint, methods=['POST'])
def receber_coordenadas():
@@ -28,6 +31,19 @@ def servir_coordenadas(id):
return jsonify(coordenadas[id])
else:
return jsonify({'error': 'Coordenadas não encontradas!'}), 404
+
+@app.route(setRuasSelecionadasEndpoint, methods=['POST'])
+def receber_ruas_selecionadas():
+ dados = request.json
+ ids = dados.get('ids')
+ global ruas_selecionadas
+ ruas_selecionadas = ids
+
+ return jsonify({'status': 'Ruas selecionadas recebidas com sucesso!'})
+
+@app.route(getRuasSelecionadasEndpoint, methods=['GET'])
+def servir_ruas_selecionadas():
+ return jsonify(ruas_selecionadas)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=apiPort, debug=True)
\ No newline at end of file
diff --git a/AgroBase/AgroBase/Python/Scripts/map-load.py b/AgroBase/AgroBase/Python/Scripts/map-load.py
index 6f234b079..d254fe65b 100644
--- a/AgroBase/AgroBase/Python/Scripts/map-load.py
+++ b/AgroBase/AgroBase/Python/Scripts/map-load.py
@@ -20,7 +20,8 @@ pathFiles = sys.argv[1]
fileName = sys.argv[2]
outputName = sys.argv[3]
outputMapName = sys.argv[4]
-apiEndpoit = sys.argv[5]
+marcadorEndpoit = sys.argv[5]
+ruasEndpoit = sys.argv[6]
pastaSaida = 'Python/Output/'
# Carregar o arquivo shapefile contendo a geometria
@@ -41,6 +42,9 @@ else:
geojson_data = data_geometry.to_json()
folium.GeoJson(geojson_data).add_to(m)
+# Salvar GEOJson
+data_geometry.to_file(pastaSaida + outputName, driver='GeoJSON')
+
# Salvar o mapa interativo em um arquivo HTML
m.save(pastaSaida + outputMapName)
@@ -63,8 +67,8 @@ with open(caminho_completo_html, 'r+') as arquivo_html:
else:
raise ValueError("Não foi possÃvel encontrar o ID do mapa no arquivo HTML.")
- # Script JavaScript para adicionar ao HTML, com o ID do mapa substituÃdo
- script_atualizacao_marcador = f"""
+ # Script para desenhar o trajo percorrido no mapa
+ script_desenha_trajeotria = f"""
-
+ """
+
+ # Script JavaScript para adicionar ao HTML, com o ID do mapa substituÃdo
+ script_atualizacao_marcador = f"""
"""
+
+ # Primeiro, vamos definir o novo trecho de JavaScript que você quer adicionar
+ funcao_define_ruas_selecionadas = f"""
+ var trajetosSelecionados = {{}};
+ var RuasSelecionadas = [];
+ function enviarSelecaoParaServidor() {{
+ fetch('{ruasEndpoit}', {{
+ method: 'POST',
+ headers: {{
+ 'Content-Type': 'application/json',
+ }},
+ body: JSON.stringify({{ids: RuasSelecionadas}}),
+ }})
+ .then(response => response.json())
+ .then(data => console.log('Sucesso:', data))
+ .catch((error) => console.error('Erro:', error));
+ }}
+ """
+
+ # Código para inserir dentro do layer.on({})
+ codigo_layer_on = """
+ click: function(e) {
+ // Verificar se o trajeto já está selecionado
+ if (trajetosSelecionados[feature.id]) {
+ // Se já está selecionado, reverta para a cor original e remova da seleção
+ e.target.setStyle({
+ color: '#3388ff' // Cor original
+ });
+ delete trajetosSelecionados[feature.id];
+ RuasSelecionadas.splice(RuasSelecionadas.indexOf(feature.id), 1);
+ } else {
+ // Se não está selecionado, mude a cor para indicar seleção e adicione ao objeto de seleção
+ e.target.setStyle({
+ color: 'blue' // Cor de seleção
+ });
+ trajetosSelecionados[feature.id] = true;
+ RuasSelecionadas.push(feature.id);
+ }
+ enviarSelecaoParaServidor();
+ }
+ """
# Inserir o script no conteúdo HTML
-conteudo_atualizado = conteudo_html.replace('