ligado tela Operacao Movimento e Pulverizador
This commit is contained in:
parent
f74e93f978
commit
6337847fce
|
|
@ -384,6 +384,9 @@
|
|||
<Compile Include="Forms\frmPinout.Designer.cs">
|
||||
<DependentUpon>frmPinout.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiAgitatorModeSelector.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiAttitudeIndicator.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
|
|
@ -396,6 +399,12 @@
|
|||
<Compile Include="Forms\IHM\Controls\HmiCameraSelector.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiCompactCheckRow.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiCompactNumericField.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiCompassControl.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
|
|
@ -408,6 +417,9 @@
|
|||
<Compile Include="Forms\IHM\Controls\HmiMetricTile.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiModeSelector.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiModuleBadge.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
|
|
@ -432,9 +444,15 @@
|
|||
<Compile Include="Forms\IHM\Controls\HmiNumericField.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiNumericParameterCard.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiOperationTabButton.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiParameterSliderRow.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Controls\HmiParameterToggleRow.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
|
|
@ -501,6 +519,30 @@
|
|||
<Compile Include="Forms\IHM\Operacao\HmiCompactMetricCard.Designer.cs">
|
||||
<DependentUpon>HmiCompactMetricCard.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Operacao\Parametros\ucParametrosAtuador.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Operacao\Parametros\ucParametrosAtuador.Designer.cs">
|
||||
<DependentUpon>ucParametrosAtuador.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Operacao\Parametros\ucParametrosDirecional.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Operacao\Parametros\ucParametrosDirecional.Designer.cs">
|
||||
<DependentUpon>ucParametrosDirecional.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Operacao\Parametros\ucParametrosMapa.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Operacao\Parametros\ucParametrosMapa.Designer.cs">
|
||||
<DependentUpon>ucParametrosMapa.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Operacao\Parametros\ucParametrosMovimento.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Operacao\Parametros\ucParametrosMovimento.Designer.cs">
|
||||
<DependentUpon>ucParametrosMovimento.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forms\IHM\Operacao\ucOperacaoMovimentacao.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,131 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao.Parametros.Controls
|
||||
{
|
||||
[DefaultEvent("SelectedModeChanged")]
|
||||
public class HmiAgitatorModeSelector : UserControl
|
||||
{
|
||||
private readonly Button _btnSemAgitacao;
|
||||
private readonly Button _btnContinuo;
|
||||
private readonly Button _btnIntermitente;
|
||||
|
||||
private string _selectedMode = "Continuo";
|
||||
|
||||
public event EventHandler SelectedModeChanged;
|
||||
|
||||
public HmiAgitatorModeSelector()
|
||||
{
|
||||
DoubleBuffered = true;
|
||||
BackColor = Color.Transparent;
|
||||
Margin = Padding.Empty;
|
||||
Padding = Padding.Empty;
|
||||
MinimumSize = new Size(260, 44);
|
||||
|
||||
TableLayoutPanel layout = new TableLayoutPanel
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.Transparent,
|
||||
ColumnCount = 3,
|
||||
RowCount = 1,
|
||||
Margin = Padding.Empty,
|
||||
Padding = Padding.Empty
|
||||
};
|
||||
|
||||
layout.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33F));
|
||||
layout.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33F));
|
||||
layout.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.34F));
|
||||
layout.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
|
||||
|
||||
_btnSemAgitacao = CriarBotao("Sem agitação");
|
||||
_btnContinuo = CriarBotao("Contínuo");
|
||||
_btnIntermitente = CriarBotao("Intermitente");
|
||||
|
||||
layout.Controls.Add(_btnSemAgitacao, 0, 0);
|
||||
layout.Controls.Add(_btnContinuo, 1, 0);
|
||||
layout.Controls.Add(_btnIntermitente, 2, 0);
|
||||
|
||||
Controls.Add(layout);
|
||||
|
||||
_btnSemAgitacao.Click += delegate { SelectedMode = "SemAgitacao"; };
|
||||
_btnContinuo.Click += delegate { SelectedMode = "Continuo"; };
|
||||
_btnIntermitente.Click += delegate { SelectedMode = "Intermitente"; };
|
||||
|
||||
AtualizarAparencia();
|
||||
}
|
||||
|
||||
private static Button CriarBotao(string texto)
|
||||
{
|
||||
Button button = new Button
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = HmiTheme.SurfaceRaised,
|
||||
ForeColor = HmiTheme.TextMuted,
|
||||
FlatStyle = FlatStyle.Flat,
|
||||
Font = new Font("Segoe UI", 7.6F, FontStyle.Bold),
|
||||
Text = texto,
|
||||
TextAlign = ContentAlignment.MiddleCenter,
|
||||
Cursor = Cursors.Hand,
|
||||
Margin = new Padding(2),
|
||||
UseVisualStyleBackColor = false
|
||||
};
|
||||
|
||||
button.FlatAppearance.BorderSize = 1;
|
||||
button.FlatAppearance.BorderColor = HmiTheme.Border;
|
||||
return button;
|
||||
}
|
||||
|
||||
private void AtualizarAparencia()
|
||||
{
|
||||
AplicarEstado(_btnSemAgitacao, _selectedMode == "SemAgitacao");
|
||||
AplicarEstado(_btnContinuo, _selectedMode == "Continuo");
|
||||
AplicarEstado(_btnIntermitente, _selectedMode == "Intermitente");
|
||||
}
|
||||
|
||||
private static void AplicarEstado(Button button, bool selecionado)
|
||||
{
|
||||
if (selecionado)
|
||||
{
|
||||
button.BackColor = Color.FromArgb(31, 91, 43);
|
||||
button.ForeColor = HmiTheme.Success;
|
||||
button.FlatAppearance.BorderColor = HmiTheme.Success;
|
||||
}
|
||||
else
|
||||
{
|
||||
button.BackColor = HmiTheme.SurfaceRaised;
|
||||
button.ForeColor = HmiTheme.TextMuted;
|
||||
button.FlatAppearance.BorderColor = HmiTheme.Border;
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
[DefaultValue("Continuo")]
|
||||
public string SelectedMode
|
||||
{
|
||||
get { return _selectedMode; }
|
||||
set
|
||||
{
|
||||
string novo;
|
||||
|
||||
if (string.Equals(value, "SemAgitacao", StringComparison.OrdinalIgnoreCase))
|
||||
novo = "SemAgitacao";
|
||||
else if (string.Equals(value, "Intermitente", StringComparison.OrdinalIgnoreCase))
|
||||
novo = "Intermitente";
|
||||
else
|
||||
novo = "Continuo";
|
||||
|
||||
if (_selectedMode == novo)
|
||||
return;
|
||||
|
||||
_selectedMode = novo;
|
||||
AtualizarAparencia();
|
||||
|
||||
if (SelectedModeChanged != null)
|
||||
SelectedModeChanged(this, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,201 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao.Parametros.Controls
|
||||
{
|
||||
[DefaultEvent("CheckedChanged")]
|
||||
public class HmiCompactCheckRow : UserControl
|
||||
{
|
||||
private readonly TableLayoutPanel _layout;
|
||||
private readonly Label _lblTitulo;
|
||||
private readonly CheckBox _check;
|
||||
|
||||
public event EventHandler CheckedChanged;
|
||||
|
||||
public HmiCompactCheckRow()
|
||||
{
|
||||
SetStyle(
|
||||
ControlStyles.AllPaintingInWmPaint |
|
||||
ControlStyles.OptimizedDoubleBuffer |
|
||||
ControlStyles.ResizeRedraw |
|
||||
ControlStyles.UserPaint,
|
||||
true
|
||||
);
|
||||
|
||||
DoubleBuffered = true;
|
||||
BackColor = HmiTheme.SurfaceRaised;
|
||||
Cursor = Cursors.Hand;
|
||||
Height = 54;
|
||||
MinimumSize = new Size(150, 44);
|
||||
Margin = new Padding(3);
|
||||
Padding = new Padding(9, 5, 7, 5);
|
||||
|
||||
_layout = new TableLayoutPanel
|
||||
{
|
||||
BackColor = Color.Transparent,
|
||||
ColumnCount = 2,
|
||||
RowCount = 1,
|
||||
Dock = DockStyle.Fill,
|
||||
Margin = Padding.Empty,
|
||||
Padding = Padding.Empty
|
||||
};
|
||||
|
||||
_layout.ColumnStyles.Add(
|
||||
new ColumnStyle(SizeType.Percent, 100F)
|
||||
);
|
||||
|
||||
_layout.ColumnStyles.Add(
|
||||
new ColumnStyle(SizeType.Absolute, 42F)
|
||||
);
|
||||
|
||||
_layout.RowStyles.Add(
|
||||
new RowStyle(SizeType.Percent, 100F)
|
||||
);
|
||||
|
||||
_lblTitulo = new Label
|
||||
{
|
||||
AutoEllipsis = true,
|
||||
AutoSize = false,
|
||||
BackColor = Color.Transparent,
|
||||
Cursor = Cursors.Hand,
|
||||
Dock = DockStyle.Fill,
|
||||
Font = new Font(
|
||||
"Segoe UI",
|
||||
8F,
|
||||
FontStyle.Bold
|
||||
),
|
||||
ForeColor = HmiTheme.Text,
|
||||
Margin = Padding.Empty,
|
||||
Padding = new Padding(2, 0, 4, 0),
|
||||
Text = "Parâmetro",
|
||||
TextAlign = ContentAlignment.MiddleLeft
|
||||
};
|
||||
|
||||
_check = CriarCheck();
|
||||
|
||||
_layout.Controls.Add(_lblTitulo, 0, 0);
|
||||
_layout.Controls.Add(_check, 1, 0);
|
||||
|
||||
Controls.Add(_layout);
|
||||
|
||||
_check.CheckedChanged += Check_CheckedChanged;
|
||||
|
||||
_lblTitulo.Click += AlternarPorClique;
|
||||
_layout.Click += AlternarPorClique;
|
||||
Click += AlternarPorClique;
|
||||
|
||||
AtualizarAparencia();
|
||||
}
|
||||
|
||||
private static CheckBox CriarCheck()
|
||||
{
|
||||
CheckBox check = new CheckBox
|
||||
{
|
||||
Anchor = AnchorStyles.None,
|
||||
Appearance = Appearance.Button,
|
||||
AutoSize = false,
|
||||
BackColor = Color.FromArgb(30, 90, 46),
|
||||
Checked = true,
|
||||
Cursor = Cursors.Hand,
|
||||
Dock = DockStyle.None,
|
||||
FlatStyle = FlatStyle.Flat,
|
||||
Font = new Font(
|
||||
"Segoe UI Symbol",
|
||||
9F,
|
||||
FontStyle.Bold
|
||||
),
|
||||
ForeColor = HmiTheme.Success,
|
||||
Height = 30,
|
||||
Margin = Padding.Empty,
|
||||
Padding = Padding.Empty,
|
||||
Text = "✓",
|
||||
TextAlign = ContentAlignment.MiddleCenter,
|
||||
UseVisualStyleBackColor = false,
|
||||
Width = 34
|
||||
};
|
||||
|
||||
check.FlatAppearance.BorderSize = 1;
|
||||
check.FlatAppearance.BorderColor = HmiTheme.Success;
|
||||
check.FlatAppearance.CheckedBackColor =
|
||||
Color.FromArgb(30, 90, 46);
|
||||
|
||||
check.FlatAppearance.MouseDownBackColor =
|
||||
Color.FromArgb(37, 108, 55);
|
||||
|
||||
check.FlatAppearance.MouseOverBackColor =
|
||||
Color.FromArgb(34, 100, 51);
|
||||
|
||||
return check;
|
||||
}
|
||||
|
||||
private void AlternarPorClique(object sender, EventArgs e)
|
||||
{
|
||||
_check.Checked = !_check.Checked;
|
||||
}
|
||||
|
||||
private void Check_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
AtualizarAparencia();
|
||||
|
||||
if (CheckedChanged != null)
|
||||
CheckedChanged(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
private void AtualizarAparencia()
|
||||
{
|
||||
if (_check.Checked)
|
||||
{
|
||||
_check.Text = "✓";
|
||||
_check.ForeColor = HmiTheme.Success;
|
||||
_check.BackColor = Color.FromArgb(30, 90, 46);
|
||||
_check.FlatAppearance.BorderColor = HmiTheme.Success;
|
||||
|
||||
_lblTitulo.ForeColor = HmiTheme.Text;
|
||||
}
|
||||
else
|
||||
{
|
||||
_check.Text = "×";
|
||||
_check.ForeColor = HmiTheme.Danger;
|
||||
_check.BackColor = HmiTheme.Surface;
|
||||
_check.FlatAppearance.BorderColor = HmiTheme.Danger;
|
||||
|
||||
_lblTitulo.ForeColor = HmiTheme.TextMuted;
|
||||
}
|
||||
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
[Category("Conteúdo")]
|
||||
public string Titulo
|
||||
{
|
||||
get { return _lblTitulo.Text; }
|
||||
set { _lblTitulo.Text = value ?? string.Empty; }
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
[DefaultValue(true)]
|
||||
public bool Checked
|
||||
{
|
||||
get { return _check.Checked; }
|
||||
set
|
||||
{
|
||||
if (_check.Checked == value)
|
||||
{
|
||||
AtualizarAparencia();
|
||||
return;
|
||||
}
|
||||
|
||||
_check.Checked = value;
|
||||
}
|
||||
}
|
||||
|
||||
[Browsable(false)]
|
||||
public CheckBox CheckBox
|
||||
{
|
||||
get { return _check; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,381 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Globalization;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao.Parametros.Controls
|
||||
{
|
||||
[DefaultEvent("ValueChanged")]
|
||||
public class HmiCompactNumericField : UserControl
|
||||
{
|
||||
private readonly TableLayoutPanel _root;
|
||||
private readonly Label _lblTitulo;
|
||||
private readonly TableLayoutPanel _valueLayout;
|
||||
private readonly Button _btnDiminuir;
|
||||
private readonly TextBox _txtValor;
|
||||
private readonly Button _btnAumentar;
|
||||
private readonly Label _lblUnidade;
|
||||
|
||||
private decimal _value;
|
||||
private decimal _minimum;
|
||||
private decimal _maximum = 100M;
|
||||
private decimal _increment = 1M;
|
||||
private int _decimalPlaces;
|
||||
|
||||
public event EventHandler ValueChanged;
|
||||
|
||||
public HmiCompactNumericField()
|
||||
{
|
||||
SetStyle(
|
||||
ControlStyles.AllPaintingInWmPaint |
|
||||
ControlStyles.OptimizedDoubleBuffer |
|
||||
ControlStyles.ResizeRedraw |
|
||||
ControlStyles.UserPaint,
|
||||
true);
|
||||
|
||||
DoubleBuffered = true;
|
||||
BackColor = HmiTheme.SurfaceRaised;
|
||||
Margin = new Padding(3);
|
||||
Padding = new Padding(7, 5, 7, 5);
|
||||
MinimumSize = new Size(105, 62);
|
||||
|
||||
_root = new TableLayoutPanel
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.Transparent,
|
||||
ColumnCount = 1,
|
||||
RowCount = 2,
|
||||
Margin = Padding.Empty,
|
||||
Padding = Padding.Empty
|
||||
};
|
||||
|
||||
_root.ColumnStyles.Add(
|
||||
new ColumnStyle(SizeType.Percent, 100F));
|
||||
|
||||
_root.RowStyles.Add(
|
||||
new RowStyle(SizeType.Absolute, 22F));
|
||||
|
||||
_root.RowStyles.Add(
|
||||
new RowStyle(SizeType.Percent, 100F));
|
||||
|
||||
_lblTitulo = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
AutoSize = false,
|
||||
AutoEllipsis = true,
|
||||
BackColor = Color.Transparent,
|
||||
ForeColor = HmiTheme.TextMuted,
|
||||
Font = new Font("Segoe UI", 6.8F, FontStyle.Bold),
|
||||
Text = "Parâmetro",
|
||||
TextAlign = ContentAlignment.MiddleLeft,
|
||||
Margin = Padding.Empty,
|
||||
Padding = Padding.Empty
|
||||
};
|
||||
|
||||
_valueLayout = new TableLayoutPanel
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.Transparent,
|
||||
ColumnCount = 4,
|
||||
RowCount = 1,
|
||||
Margin = Padding.Empty,
|
||||
Padding = Padding.Empty
|
||||
};
|
||||
|
||||
_valueLayout.ColumnStyles.Add(
|
||||
new ColumnStyle(SizeType.Absolute, 34F));
|
||||
|
||||
_valueLayout.ColumnStyles.Add(
|
||||
new ColumnStyle(SizeType.Percent, 100F));
|
||||
|
||||
_valueLayout.ColumnStyles.Add(
|
||||
new ColumnStyle(SizeType.Absolute, 34F));
|
||||
|
||||
_valueLayout.ColumnStyles.Add(
|
||||
new ColumnStyle(SizeType.Absolute, 34F));
|
||||
|
||||
_valueLayout.RowStyles.Add(
|
||||
new RowStyle(SizeType.Percent, 100F));
|
||||
|
||||
_btnDiminuir = CriarBotaoValor("−");
|
||||
_btnAumentar = CriarBotaoValor("+");
|
||||
|
||||
_txtValor = new TextBox
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = HmiTheme.Surface,
|
||||
ForeColor = HmiTheme.Text,
|
||||
BorderStyle = BorderStyle.FixedSingle,
|
||||
Font = new Font("Segoe UI", 9F, FontStyle.Bold),
|
||||
TextAlign = HorizontalAlignment.Center,
|
||||
ReadOnly = true,
|
||||
ShortcutsEnabled = false,
|
||||
TabStop = false,
|
||||
Margin = new Padding(3, 1, 3, 1)
|
||||
};
|
||||
|
||||
_lblUnidade = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
AutoSize = false,
|
||||
BackColor = Color.Transparent,
|
||||
ForeColor = HmiTheme.TextMuted,
|
||||
Font = new Font("Segoe UI", 7F, FontStyle.Bold),
|
||||
Text = "%",
|
||||
TextAlign = ContentAlignment.MiddleCenter,
|
||||
Margin = Padding.Empty,
|
||||
Padding = Padding.Empty
|
||||
};
|
||||
|
||||
_valueLayout.Controls.Add(_btnDiminuir, 0, 0);
|
||||
_valueLayout.Controls.Add(_txtValor, 1, 0);
|
||||
_valueLayout.Controls.Add(_btnAumentar, 2, 0);
|
||||
_valueLayout.Controls.Add(_lblUnidade, 3, 0);
|
||||
|
||||
_root.Controls.Add(_lblTitulo, 0, 0);
|
||||
_root.Controls.Add(_valueLayout, 0, 1);
|
||||
|
||||
Controls.Add(_root);
|
||||
|
||||
_btnDiminuir.Click += delegate
|
||||
{
|
||||
Value -= Increment;
|
||||
};
|
||||
|
||||
_btnAumentar.Click += delegate
|
||||
{
|
||||
Value += Increment;
|
||||
};
|
||||
|
||||
AtualizarTexto();
|
||||
AtualizarBotoes();
|
||||
}
|
||||
|
||||
private static Button CriarBotaoValor(string texto)
|
||||
{
|
||||
Button button = new Button
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = HmiTheme.Surface,
|
||||
ForeColor = HmiTheme.Info,
|
||||
FlatStyle = FlatStyle.Flat,
|
||||
Font = new Font("Segoe UI", 12F, FontStyle.Bold),
|
||||
Text = texto,
|
||||
TextAlign = ContentAlignment.MiddleCenter,
|
||||
Cursor = Cursors.Hand,
|
||||
Margin = new Padding(1),
|
||||
Padding = Padding.Empty,
|
||||
TabStop = false,
|
||||
UseVisualStyleBackColor = false
|
||||
};
|
||||
|
||||
button.FlatAppearance.BorderSize = 1;
|
||||
button.FlatAppearance.BorderColor = HmiTheme.Border;
|
||||
button.FlatAppearance.MouseOverBackColor =
|
||||
Color.FromArgb(35, 52, 61);
|
||||
|
||||
button.FlatAppearance.MouseDownBackColor =
|
||||
Color.FromArgb(42, 67, 78);
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
private void DefinirValor(decimal value)
|
||||
{
|
||||
decimal novo = Math.Max(
|
||||
Minimum,
|
||||
Math.Min(Maximum, value));
|
||||
|
||||
novo = decimal.Round(
|
||||
novo,
|
||||
DecimalPlaces,
|
||||
MidpointRounding.AwayFromZero);
|
||||
|
||||
if (_value == novo)
|
||||
{
|
||||
AtualizarTexto();
|
||||
AtualizarBotoes();
|
||||
return;
|
||||
}
|
||||
|
||||
_value = novo;
|
||||
|
||||
AtualizarTexto();
|
||||
AtualizarBotoes();
|
||||
|
||||
if (ValueChanged != null)
|
||||
ValueChanged(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
private void AtualizarTexto()
|
||||
{
|
||||
string formato = DecimalPlaces > 0
|
||||
? "F" + DecimalPlaces
|
||||
: "F0";
|
||||
|
||||
_txtValor.Text = _value.ToString(
|
||||
formato,
|
||||
CultureInfo.CurrentCulture);
|
||||
}
|
||||
|
||||
private void AtualizarBotoes()
|
||||
{
|
||||
bool podeDiminuir = _value > Minimum;
|
||||
bool podeAumentar = _value < Maximum;
|
||||
|
||||
AplicarEstadoBotao(
|
||||
_btnDiminuir,
|
||||
podeDiminuir);
|
||||
|
||||
AplicarEstadoBotao(
|
||||
_btnAumentar,
|
||||
podeAumentar);
|
||||
}
|
||||
|
||||
private static void AplicarEstadoBotao(
|
||||
Button button,
|
||||
bool habilitado)
|
||||
{
|
||||
button.Enabled = habilitado;
|
||||
|
||||
if (habilitado)
|
||||
{
|
||||
button.ForeColor = HmiTheme.Info;
|
||||
button.BackColor = HmiTheme.Surface;
|
||||
button.FlatAppearance.BorderColor =
|
||||
HmiTheme.Border;
|
||||
}
|
||||
else
|
||||
{
|
||||
button.ForeColor = HmiTheme.TextMuted;
|
||||
button.BackColor = HmiTheme.SurfaceRaised;
|
||||
button.FlatAppearance.BorderColor =
|
||||
HmiTheme.SurfaceRaised;
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Conteúdo")]
|
||||
public string Titulo
|
||||
{
|
||||
get { return _lblTitulo.Text; }
|
||||
set { _lblTitulo.Text = value ?? string.Empty; }
|
||||
}
|
||||
|
||||
[Category("Conteúdo")]
|
||||
public string Unidade
|
||||
{
|
||||
get { return _lblUnidade.Text; }
|
||||
set
|
||||
{
|
||||
_lblUnidade.Text = value ?? string.Empty;
|
||||
AtualizarLarguraUnidade();
|
||||
}
|
||||
}
|
||||
|
||||
private void AtualizarLarguraUnidade()
|
||||
{
|
||||
int largura;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(_lblUnidade.Text))
|
||||
largura = 4;
|
||||
else if (_lblUnidade.Text.Length <= 1)
|
||||
largura = 25;
|
||||
else
|
||||
largura = 35;
|
||||
|
||||
_valueLayout.ColumnStyles[3].SizeType =
|
||||
SizeType.Absolute;
|
||||
|
||||
_valueLayout.ColumnStyles[3].Width =
|
||||
largura;
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
[DefaultValue(typeof(decimal), "0")]
|
||||
public decimal Value
|
||||
{
|
||||
get { return _value; }
|
||||
set { DefinirValor(value); }
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
[DefaultValue(typeof(decimal), "0")]
|
||||
public decimal Minimum
|
||||
{
|
||||
get { return _minimum; }
|
||||
set
|
||||
{
|
||||
_minimum = value;
|
||||
|
||||
if (_maximum < _minimum)
|
||||
_maximum = _minimum;
|
||||
|
||||
DefinirValor(_value);
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
[DefaultValue(typeof(decimal), "100")]
|
||||
public decimal Maximum
|
||||
{
|
||||
get { return _maximum; }
|
||||
set
|
||||
{
|
||||
_maximum = value;
|
||||
|
||||
if (_maximum < _minimum)
|
||||
_minimum = _maximum;
|
||||
|
||||
DefinirValor(_value);
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
[DefaultValue(typeof(decimal), "1")]
|
||||
public decimal Increment
|
||||
{
|
||||
get { return _increment; }
|
||||
set
|
||||
{
|
||||
_increment = value > 0M
|
||||
? value
|
||||
: 1M;
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
[DefaultValue(0)]
|
||||
public int DecimalPlaces
|
||||
{
|
||||
get { return _decimalPlaces; }
|
||||
set
|
||||
{
|
||||
_decimalPlaces = Math.Max(
|
||||
0,
|
||||
Math.Min(4, value));
|
||||
|
||||
DefinirValor(_value);
|
||||
}
|
||||
}
|
||||
|
||||
[Browsable(false)]
|
||||
public Button BotaoDiminuir
|
||||
{
|
||||
get { return _btnDiminuir; }
|
||||
}
|
||||
|
||||
[Browsable(false)]
|
||||
public Button BotaoAumentar
|
||||
{
|
||||
get { return _btnAumentar; }
|
||||
}
|
||||
|
||||
[Browsable(false)]
|
||||
public TextBox CampoValor
|
||||
{
|
||||
get { return _txtValor; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao.Parametros.Controls
|
||||
{
|
||||
[DefaultEvent("SelectedModeChanged")]
|
||||
public class HmiModeSelector : UserControl
|
||||
{
|
||||
private readonly Button _btnMpc;
|
||||
private readonly Button _btnPid;
|
||||
private string _selectedMode = "MPC";
|
||||
|
||||
public event EventHandler SelectedModeChanged;
|
||||
|
||||
public HmiModeSelector()
|
||||
{
|
||||
DoubleBuffered = true;
|
||||
BackColor = HmiTheme.SurfaceRaised;
|
||||
Padding = new Padding(8);
|
||||
Margin = new Padding(3);
|
||||
MinimumSize = new Size(180, 88);
|
||||
|
||||
TableLayoutPanel root = new TableLayoutPanel
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
ColumnCount = 2,
|
||||
RowCount = 2,
|
||||
BackColor = Color.Transparent,
|
||||
Margin = Padding.Empty,
|
||||
Padding = Padding.Empty
|
||||
};
|
||||
|
||||
root.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
|
||||
root.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
|
||||
root.RowStyles.Add(new RowStyle(SizeType.Absolute, 26F));
|
||||
root.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
|
||||
|
||||
Label title = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
AutoSize = false,
|
||||
BackColor = Color.Transparent,
|
||||
ForeColor = HmiTheme.Text,
|
||||
Font = new Font("Segoe UI", 8.2F, FontStyle.Bold),
|
||||
Text = "Modo de controle",
|
||||
TextAlign = ContentAlignment.MiddleLeft,
|
||||
Margin = Padding.Empty
|
||||
};
|
||||
|
||||
_btnMpc = CriarBotao("MPC");
|
||||
_btnPid = CriarBotao("PID");
|
||||
|
||||
root.Controls.Add(title, 0, 0);
|
||||
root.SetColumnSpan(title, 2);
|
||||
root.Controls.Add(_btnMpc, 0, 1);
|
||||
root.Controls.Add(_btnPid, 1, 1);
|
||||
|
||||
Controls.Add(root);
|
||||
|
||||
_btnMpc.Click += delegate { SelectedMode = "MPC"; };
|
||||
_btnPid.Click += delegate { SelectedMode = "PID"; };
|
||||
|
||||
AtualizarAparencia();
|
||||
}
|
||||
|
||||
private static Button CriarBotao(string text)
|
||||
{
|
||||
Button button = new Button
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = HmiTheme.Surface,
|
||||
ForeColor = HmiTheme.TextMuted,
|
||||
FlatStyle = FlatStyle.Flat,
|
||||
Font = new Font("Segoe UI", 9F, FontStyle.Bold),
|
||||
Text = text,
|
||||
TextAlign = ContentAlignment.MiddleCenter,
|
||||
Cursor = Cursors.Hand,
|
||||
Margin = new Padding(2),
|
||||
UseVisualStyleBackColor = false
|
||||
};
|
||||
|
||||
button.FlatAppearance.BorderSize = 1;
|
||||
button.FlatAppearance.BorderColor = HmiTheme.Border;
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
private void AtualizarAparencia()
|
||||
{
|
||||
AplicarEstado(_btnMpc, _selectedMode == "MPC");
|
||||
AplicarEstado(_btnPid, _selectedMode == "PID");
|
||||
}
|
||||
|
||||
private static void AplicarEstado(Button button, bool selected)
|
||||
{
|
||||
if (selected)
|
||||
{
|
||||
button.BackColor = Color.FromArgb(31, 91, 43);
|
||||
button.ForeColor = HmiTheme.Success;
|
||||
button.FlatAppearance.BorderColor = HmiTheme.Success;
|
||||
}
|
||||
else
|
||||
{
|
||||
button.BackColor = HmiTheme.Surface;
|
||||
button.ForeColor = HmiTheme.TextMuted;
|
||||
button.FlatAppearance.BorderColor = HmiTheme.Border;
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
[DefaultValue("MPC")]
|
||||
public string SelectedMode
|
||||
{
|
||||
get { return _selectedMode; }
|
||||
set
|
||||
{
|
||||
string novo = string.Equals(value, "PID", StringComparison.OrdinalIgnoreCase)
|
||||
? "PID"
|
||||
: "MPC";
|
||||
|
||||
if (_selectedMode == novo)
|
||||
return;
|
||||
|
||||
_selectedMode = novo;
|
||||
AtualizarAparencia();
|
||||
|
||||
if (SelectedModeChanged != null)
|
||||
SelectedModeChanged(this, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,17 +3,10 @@ using System.ComponentModel;
|
|||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms;
|
||||
using static AgroBase.Models.Enums;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Controls.Operacao
|
||||
{
|
||||
public enum HmiNozzleState
|
||||
{
|
||||
Desconectado = 0,
|
||||
Conectado = 1,
|
||||
Falha = 2,
|
||||
Alerta = 3,
|
||||
Operante = 4
|
||||
}
|
||||
|
||||
[DefaultEvent("NozzleClick")]
|
||||
public class HmiNozzleCard : UserControl
|
||||
|
|
@ -27,7 +20,7 @@ namespace AgroBase.Forms.IHM.Controls.Operacao
|
|||
|
||||
private bool _commandOn;
|
||||
private bool _readOn;
|
||||
private HmiNozzleState _state = HmiNozzleState.Operante;
|
||||
private StatusModulo _state = StatusModulo.Desconectado;
|
||||
private bool _allowCommand = true;
|
||||
|
||||
public event EventHandler NozzleClick;
|
||||
|
|
@ -178,23 +171,23 @@ namespace AgroBase.Forms.IHM.Controls.Operacao
|
|||
}
|
||||
}
|
||||
|
||||
private static Color GetStateColor(HmiNozzleState state)
|
||||
private static Color GetStateColor(StatusModulo state)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case HmiNozzleState.Desconectado:
|
||||
case StatusModulo.Desconectado:
|
||||
return HmiTheme.TextMuted;
|
||||
|
||||
case HmiNozzleState.Conectado:
|
||||
case StatusModulo.Conectado:
|
||||
return HmiTheme.Info;
|
||||
|
||||
case HmiNozzleState.Falha:
|
||||
case StatusModulo.Falha:
|
||||
return HmiTheme.Danger;
|
||||
|
||||
case HmiNozzleState.Alerta:
|
||||
case StatusModulo.Alerta:
|
||||
return HmiTheme.Warning;
|
||||
|
||||
case HmiNozzleState.Operante:
|
||||
case StatusModulo.Operante:
|
||||
default:
|
||||
return HmiTheme.Success;
|
||||
}
|
||||
|
|
@ -208,7 +201,7 @@ namespace AgroBase.Forms.IHM.Controls.Operacao
|
|||
}
|
||||
|
||||
[Category("Estado")]
|
||||
public HmiNozzleState State
|
||||
public StatusModulo State
|
||||
{
|
||||
get { return _state; }
|
||||
set
|
||||
|
|
@ -292,8 +285,8 @@ namespace AgroBase.Forms.IHM.Controls.Operacao
|
|||
[Category("Conteúdo")]
|
||||
public string TempoLigado
|
||||
{
|
||||
get { return _lblTempo.Text.Replace("Tempo ", ""); }
|
||||
set { _lblTempo.Text = "Tempo " + (value ?? "00:00"); }
|
||||
get { return _lblTempo.Text; }
|
||||
set { _lblTempo.Text = (value ?? "00:00"); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,185 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao.Parametros.Controls
|
||||
{
|
||||
[DefaultEvent("ValueChanged")]
|
||||
public class HmiNumericParameterCard : UserControl
|
||||
{
|
||||
private readonly Label _lblTitulo;
|
||||
private readonly Label _lblDescricao;
|
||||
private readonly NumericUpDown _numeric;
|
||||
private readonly Label _lblUnidade;
|
||||
private readonly ToolTip _toolTip;
|
||||
|
||||
public event EventHandler ValueChanged;
|
||||
|
||||
public HmiNumericParameterCard()
|
||||
{
|
||||
DoubleBuffered = true;
|
||||
BackColor = HmiTheme.SurfaceRaised;
|
||||
Margin = new Padding(3);
|
||||
Padding = new Padding(10, 7, 10, 7);
|
||||
MinimumSize = new Size(180, 88);
|
||||
|
||||
TableLayoutPanel root = new TableLayoutPanel
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.Transparent,
|
||||
ColumnCount = 2,
|
||||
RowCount = 3,
|
||||
Margin = Padding.Empty,
|
||||
Padding = Padding.Empty
|
||||
};
|
||||
|
||||
root.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
|
||||
root.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 42F));
|
||||
|
||||
root.RowStyles.Add(new RowStyle(SizeType.Absolute, 28F));
|
||||
root.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
|
||||
|
||||
_lblTitulo = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
AutoSize = false,
|
||||
BackColor = Color.Transparent,
|
||||
ForeColor = HmiTheme.Text,
|
||||
Font = new Font("Segoe UI", 8.2F, FontStyle.Bold),
|
||||
Text = "Parâmetro",
|
||||
TextAlign = ContentAlignment.MiddleLeft,
|
||||
AutoEllipsis = true,
|
||||
Margin = Padding.Empty
|
||||
};
|
||||
|
||||
_lblDescricao = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
AutoSize = false,
|
||||
BackColor = Color.Transparent,
|
||||
ForeColor = HmiTheme.TextMuted,
|
||||
Font = new Font("Segoe UI", 6.5F),
|
||||
Text = "Descrição",
|
||||
TextAlign = ContentAlignment.TopLeft,
|
||||
AutoEllipsis = true,
|
||||
Margin = Padding.Empty
|
||||
};
|
||||
|
||||
_toolTip = new ToolTip();
|
||||
|
||||
_numeric = new NumericUpDown
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = HmiTheme.Surface,
|
||||
ForeColor = HmiTheme.Text,
|
||||
BorderStyle = BorderStyle.FixedSingle,
|
||||
Font = new Font("Segoe UI", 9.5F, FontStyle.Bold),
|
||||
TextAlign = HorizontalAlignment.Center,
|
||||
Minimum = 0,
|
||||
Maximum = 100,
|
||||
DecimalPlaces = 1,
|
||||
Increment = 0.5M,
|
||||
Margin = new Padding(0, 3, 5, 3)
|
||||
};
|
||||
|
||||
_lblUnidade = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
AutoSize = false,
|
||||
BackColor = Color.Transparent,
|
||||
ForeColor = HmiTheme.TextMuted,
|
||||
Font = new Font("Segoe UI", 8F, FontStyle.Bold),
|
||||
Text = "m",
|
||||
TextAlign = ContentAlignment.MiddleCenter,
|
||||
Margin = new Padding(0, 3, 0, 3)
|
||||
};
|
||||
|
||||
root.Controls.Add(_lblTitulo, 0, 0);
|
||||
root.SetColumnSpan(_lblTitulo, 2);
|
||||
root.Controls.Add(_numeric, 0, 1);
|
||||
root.Controls.Add(_lblUnidade, 1, 1);
|
||||
|
||||
Controls.Add(root);
|
||||
|
||||
_numeric.ValueChanged += delegate
|
||||
{
|
||||
if (ValueChanged != null)
|
||||
ValueChanged(this, EventArgs.Empty);
|
||||
};
|
||||
}
|
||||
|
||||
[Category("Conteúdo")]
|
||||
public string Titulo
|
||||
{
|
||||
get { return _lblTitulo.Text; }
|
||||
set { _lblTitulo.Text = value ?? string.Empty; }
|
||||
}
|
||||
|
||||
[Category("Conteúdo")]
|
||||
public string Descricao
|
||||
{
|
||||
get { return _lblDescricao.Text; }
|
||||
set
|
||||
{
|
||||
_lblDescricao.Text = value ?? string.Empty;
|
||||
_toolTip.SetToolTip(this, _lblDescricao.Text);
|
||||
_toolTip.SetToolTip(_lblTitulo, _lblDescricao.Text);
|
||||
_toolTip.SetToolTip(_numeric, _lblDescricao.Text);
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Conteúdo")]
|
||||
public string Unidade
|
||||
{
|
||||
get { return _lblUnidade.Text; }
|
||||
set { _lblUnidade.Text = value ?? string.Empty; }
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
public decimal Value
|
||||
{
|
||||
get { return _numeric.Value; }
|
||||
set
|
||||
{
|
||||
decimal novo = Math.Max(_numeric.Minimum, Math.Min(_numeric.Maximum, value));
|
||||
_numeric.Value = novo;
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
public decimal Minimum
|
||||
{
|
||||
get { return _numeric.Minimum; }
|
||||
set { _numeric.Minimum = value; }
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
public decimal Maximum
|
||||
{
|
||||
get { return _numeric.Maximum; }
|
||||
set { _numeric.Maximum = value; }
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
public decimal Increment
|
||||
{
|
||||
get { return _numeric.Increment; }
|
||||
set { _numeric.Increment = value; }
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
public int DecimalPlaces
|
||||
{
|
||||
get { return _numeric.DecimalPlaces; }
|
||||
set { _numeric.DecimalPlaces = Math.Max(0, value); }
|
||||
}
|
||||
|
||||
[Browsable(false)]
|
||||
public NumericUpDown Numeric
|
||||
{
|
||||
get { return _numeric; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,299 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using AgroBase.Forms.IHM.Controls.Operacao;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao.Parametros.Controls
|
||||
{
|
||||
public enum HmiSliderValueFormat
|
||||
{
|
||||
PercentAndSpeed = 0,
|
||||
PercentOnly = 1,
|
||||
Degrees = 2
|
||||
}
|
||||
|
||||
[DefaultEvent("ValueChanged")]
|
||||
public class HmiParameterSliderRow : UserControl
|
||||
{
|
||||
private readonly Label _lblTitulo;
|
||||
private readonly Label _lblValor;
|
||||
private readonly Label _lblLimiteMin;
|
||||
private readonly Label _lblLimiteMax;
|
||||
private readonly HmiSlider _slider;
|
||||
|
||||
private double _velocidadeMaximaKmh = 1.0D;
|
||||
private HmiSliderValueFormat _valueFormat = HmiSliderValueFormat.PercentAndSpeed;
|
||||
|
||||
private readonly TableLayoutPanel _root;
|
||||
private bool _compactMode;
|
||||
|
||||
public event EventHandler ValueChanged;
|
||||
|
||||
public HmiParameterSliderRow()
|
||||
{
|
||||
DoubleBuffered = true;
|
||||
BackColor = HmiTheme.SurfaceRaised;
|
||||
Margin = new Padding(3);
|
||||
Padding = new Padding(10, 6, 10, 5);
|
||||
MinimumSize = new Size(250, 86);
|
||||
|
||||
_root = new TableLayoutPanel
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
ColumnCount = 2,
|
||||
RowCount = 3,
|
||||
BackColor = Color.Transparent,
|
||||
Margin = Padding.Empty,
|
||||
Padding = Padding.Empty
|
||||
};
|
||||
|
||||
_root.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 58F));
|
||||
_root.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 42F));
|
||||
_root.RowStyles.Add(new RowStyle(SizeType.Absolute, 26F));
|
||||
_root.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
|
||||
_root.RowStyles.Add(new RowStyle(SizeType.Absolute, 18F));
|
||||
|
||||
_lblTitulo = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.Transparent,
|
||||
ForeColor = HmiTheme.Text,
|
||||
Font = new Font("Segoe UI", 8.5F, FontStyle.Bold),
|
||||
Text = "Valor",
|
||||
TextAlign = ContentAlignment.MiddleLeft,
|
||||
AutoEllipsis = true,
|
||||
Margin = Padding.Empty
|
||||
};
|
||||
|
||||
_lblValor = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.Transparent,
|
||||
ForeColor = HmiTheme.Success,
|
||||
Font = new Font("Segoe UI", 9.5F, FontStyle.Bold),
|
||||
Text = "50%",
|
||||
TextAlign = ContentAlignment.MiddleRight,
|
||||
AutoEllipsis = true,
|
||||
Margin = Padding.Empty
|
||||
};
|
||||
|
||||
_slider = new HmiSlider
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
Margin = new Padding(0, 3, 0, 2),
|
||||
Minimum = 0,
|
||||
Maximum = 100,
|
||||
Value = 50,
|
||||
AccentColor = HmiTheme.Success
|
||||
};
|
||||
|
||||
_lblLimiteMin = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.Transparent,
|
||||
ForeColor = HmiTheme.TextMuted,
|
||||
Font = new Font("Segoe UI", 6.5F),
|
||||
Text = "0%",
|
||||
TextAlign = ContentAlignment.MiddleLeft,
|
||||
Margin = Padding.Empty
|
||||
};
|
||||
|
||||
_lblLimiteMax = new Label
|
||||
{
|
||||
Dock = DockStyle.Fill,
|
||||
BackColor = Color.Transparent,
|
||||
ForeColor = HmiTheme.TextMuted,
|
||||
Font = new Font("Segoe UI", 6.5F),
|
||||
Text = "100%",
|
||||
TextAlign = ContentAlignment.MiddleRight,
|
||||
Margin = Padding.Empty
|
||||
};
|
||||
|
||||
_root.Controls.Add(_lblTitulo, 0, 0);
|
||||
_root.Controls.Add(_lblValor, 1, 0);
|
||||
_root.Controls.Add(_slider, 0, 1);
|
||||
_root.SetColumnSpan(_slider, 2);
|
||||
_root.Controls.Add(_lblLimiteMin, 0, 2);
|
||||
_root.Controls.Add(_lblLimiteMax, 1, 2);
|
||||
|
||||
Controls.Add(_root);
|
||||
|
||||
_slider.ValueChanged += Slider_ValueChanged;
|
||||
AtualizarTextoValor();
|
||||
}
|
||||
|
||||
private void Slider_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
AtualizarTextoValor();
|
||||
|
||||
if (ValueChanged != null)
|
||||
ValueChanged(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
private void AtualizarTextoValor()
|
||||
{
|
||||
if (_valueFormat == HmiSliderValueFormat.Degrees)
|
||||
{
|
||||
_lblValor.Text = _slider.Value + "°";
|
||||
_lblLimiteMin.Text = _slider.Minimum + "°";
|
||||
_lblLimiteMax.Text = _slider.Maximum + "°";
|
||||
return;
|
||||
}
|
||||
|
||||
if (_valueFormat == HmiSliderValueFormat.PercentOnly)
|
||||
{
|
||||
_lblValor.Text = _slider.Value + "%";
|
||||
_lblLimiteMin.Text = _slider.Minimum + "%";
|
||||
_lblLimiteMax.Text = _slider.Maximum + "%";
|
||||
return;
|
||||
}
|
||||
|
||||
double kmh = _velocidadeMaximaKmh * _slider.Value / 100D;
|
||||
_lblValor.Text = string.Format("{0}% · {1:0.0} km/h", _slider.Value, kmh);
|
||||
_lblLimiteMin.Text = _slider.Minimum + "%";
|
||||
_lblLimiteMax.Text = _slider.Maximum + "%";
|
||||
}
|
||||
|
||||
[Category("Conteúdo")]
|
||||
public string Titulo
|
||||
{
|
||||
get { return _lblTitulo.Text; }
|
||||
set { _lblTitulo.Text = value ?? string.Empty; }
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
public int Minimum
|
||||
{
|
||||
get { return _slider.Minimum; }
|
||||
set
|
||||
{
|
||||
_slider.Minimum = value;
|
||||
AtualizarTextoValor();
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
public int Maximum
|
||||
{
|
||||
get { return _slider.Maximum; }
|
||||
set
|
||||
{
|
||||
_slider.Maximum = value;
|
||||
AtualizarTextoValor();
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
public int Value
|
||||
{
|
||||
get { return _slider.Value; }
|
||||
set { _slider.Value = value; }
|
||||
}
|
||||
|
||||
[Category("Dados")]
|
||||
public double VelocidadeMaximaKmh
|
||||
{
|
||||
get { return _velocidadeMaximaKmh; }
|
||||
set
|
||||
{
|
||||
_velocidadeMaximaKmh = Math.Max(0D, value);
|
||||
AtualizarTextoValor();
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Aparência")]
|
||||
[DefaultValue(HmiSliderValueFormat.PercentAndSpeed)]
|
||||
public HmiSliderValueFormat ValueFormat
|
||||
{
|
||||
get { return _valueFormat; }
|
||||
set
|
||||
{
|
||||
_valueFormat = value;
|
||||
AtualizarTextoValor();
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Aparência")]
|
||||
public Color AccentColor
|
||||
{
|
||||
get { return _slider.AccentColor; }
|
||||
set
|
||||
{
|
||||
_slider.AccentColor = value;
|
||||
_lblValor.ForeColor = value;
|
||||
}
|
||||
}
|
||||
|
||||
[Category("Aparência")]
|
||||
[DefaultValue(false)]
|
||||
public bool CompactMode
|
||||
{
|
||||
get { return _compactMode; }
|
||||
set
|
||||
{
|
||||
if (_compactMode == value)
|
||||
return;
|
||||
|
||||
_compactMode = value;
|
||||
AtualizarModoCompacto();
|
||||
}
|
||||
}
|
||||
|
||||
[Browsable(false)]
|
||||
public HmiSlider Slider
|
||||
{
|
||||
get { return _slider; }
|
||||
}
|
||||
|
||||
private void AtualizarModoCompacto()
|
||||
{
|
||||
if (_compactMode)
|
||||
{
|
||||
MinimumSize = new Size(80, 44);
|
||||
Padding = new Padding(8, 3, 8, 3);
|
||||
|
||||
_root.RowStyles[0].Height = 20F;
|
||||
_root.RowStyles[1].SizeType = SizeType.Percent;
|
||||
_root.RowStyles[1].Height = 100F;
|
||||
_root.RowStyles[2].Height = 0F;
|
||||
|
||||
_lblLimiteMin.Visible = false;
|
||||
_lblLimiteMax.Visible = false;
|
||||
|
||||
_lblTitulo.Font = new Font("Segoe UI", 7.4F, FontStyle.Bold);
|
||||
|
||||
_lblValor.Font = new Font("Segoe UI", 7.8F, FontStyle.Bold);
|
||||
|
||||
_slider.Margin = new Padding(0);
|
||||
_slider.ThumbRadius = 6;
|
||||
_slider.TrackHeight = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
MinimumSize = new Size(250, 86);
|
||||
Padding = new Padding(10, 6, 10, 5);
|
||||
|
||||
_root.RowStyles[0].Height = 26F;
|
||||
_root.RowStyles[1].SizeType = SizeType.Percent;
|
||||
_root.RowStyles[1].Height = 100F;
|
||||
_root.RowStyles[2].Height = 18F;
|
||||
|
||||
_lblLimiteMin.Visible = true;
|
||||
_lblLimiteMax.Visible = true;
|
||||
|
||||
_lblTitulo.Font = new Font("Segoe UI", 8.5F, FontStyle.Bold);
|
||||
|
||||
_lblValor.Font = new Font("Segoe UI", 9.5F, FontStyle.Bold);
|
||||
|
||||
_slider.Margin = new Padding(0, 3, 0, 2);
|
||||
_slider.ThumbRadius = 8;
|
||||
_slider.TrackHeight = 5;
|
||||
}
|
||||
|
||||
PerformLayout();
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@ using System.ComponentModel;
|
|||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms;
|
||||
using static AgroBase.Models.Enums;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Controls.Operacao
|
||||
{
|
||||
|
|
@ -330,6 +331,28 @@ namespace AgroBase.Forms.IHM.Controls.Operacao
|
|||
return check;
|
||||
}
|
||||
|
||||
public void AtualizarDados(
|
||||
bool dir_em_uso,
|
||||
double dir_ang_sp,
|
||||
double dir_ang_at,
|
||||
Sentido dir_sentido,
|
||||
bool mov_em_uso,
|
||||
double mov_vel_sp,
|
||||
double mov_vel_at,
|
||||
bool mov_freio
|
||||
)
|
||||
{
|
||||
CheckDir.Checked = dir_em_uso;
|
||||
DirecionalSp = $"{dir_ang_sp}";
|
||||
DirecionalAtual = $"{dir_ang_at}";
|
||||
StatusDirecional = $"{dir_sentido}";
|
||||
|
||||
CheckMov.Checked = mov_em_uso;
|
||||
MovimentoSp = $"{mov_vel_sp}";
|
||||
MovimentoAtual = $"{mov_vel_at}";
|
||||
StatusMovimento = mov_freio ? "Freado" : "Livre";
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
base.OnPaint(e);
|
||||
|
|
|
|||
336
AgroBase/AgroBase/Forms/IHM/Operacao/Parametros/ucParametrosAtuador.Designer.cs
generated
Normal file
336
AgroBase/AgroBase/Forms/IHM/Operacao/Parametros/ucParametrosAtuador.Designer.cs
generated
Normal file
|
|
@ -0,0 +1,336 @@
|
|||
namespace AgroBase.Forms.IHM.Operacao.Parametros
|
||||
{
|
||||
partial class ucParametrosAtuador
|
||||
{
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && components != null) components.Dispose();
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.rootLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.pnlAgitador = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.agitadorLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblAgitadorTitulo = new System.Windows.Forms.Label();
|
||||
this.lblAgitadorDescricao = new System.Windows.Forms.Label();
|
||||
this.seletorModoAgitador = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiAgitatorModeSelector();
|
||||
this.pidLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.paramKp = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField();
|
||||
this.paramKi = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField();
|
||||
this.paramKd = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField();
|
||||
this.pnlPulverizacao = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.pulverizacaoLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblPulverizacaoTitulo = new System.Windows.Forms.Label();
|
||||
this.lblPulverizacaoDescricao = new System.Windows.Forms.Label();
|
||||
this.parametrosLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.paramBicosEmUso = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField();
|
||||
this.paramPressaoLinha = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField();
|
||||
this.paramInicioTela = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField();
|
||||
this.paramAlturaArea = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField();
|
||||
this.paramErvasOn = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField();
|
||||
this.paramErvasOff = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField();
|
||||
this.rootLayout.SuspendLayout();
|
||||
this.pnlAgitador.SuspendLayout();
|
||||
this.agitadorLayout.SuspendLayout();
|
||||
this.pidLayout.SuspendLayout();
|
||||
this.pnlPulverizacao.SuspendLayout();
|
||||
this.pulverizacaoLayout.SuspendLayout();
|
||||
this.parametrosLayout.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// rootLayout
|
||||
//
|
||||
this.rootLayout.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.Background;
|
||||
this.rootLayout.ColumnCount = 2;
|
||||
this.rootLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 40F));
|
||||
this.rootLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60F));
|
||||
this.rootLayout.Controls.Add(this.pnlAgitador, 0, 0);
|
||||
this.rootLayout.Controls.Add(this.pnlPulverizacao, 1, 0);
|
||||
this.rootLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.rootLayout.Location = new System.Drawing.Point(0, 0);
|
||||
this.rootLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.rootLayout.Name = "rootLayout";
|
||||
this.rootLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.rootLayout.RowCount = 1;
|
||||
this.rootLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.rootLayout.Size = new System.Drawing.Size(760, 286);
|
||||
this.rootLayout.TabIndex = 0;
|
||||
//
|
||||
// pnlAgitador
|
||||
//
|
||||
ConfigurePanel(this.pnlAgitador, this.agitadorLayout);
|
||||
this.pnlAgitador.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
||||
this.pnlAgitador.Name = "pnlAgitador";
|
||||
//
|
||||
// agitadorLayout
|
||||
//
|
||||
this.agitadorLayout.ColumnCount = 1;
|
||||
this.agitadorLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.agitadorLayout.Controls.Add(this.lblAgitadorTitulo, 0, 0);
|
||||
this.agitadorLayout.Controls.Add(this.lblAgitadorDescricao, 0, 1);
|
||||
this.agitadorLayout.Controls.Add(this.seletorModoAgitador, 0, 2);
|
||||
this.agitadorLayout.Controls.Add(this.pidLayout, 0, 3);
|
||||
this.agitadorLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.agitadorLayout.Location = new System.Drawing.Point(8, 8);
|
||||
this.agitadorLayout.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.agitadorLayout.Name = "agitadorLayout";
|
||||
this.agitadorLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.agitadorLayout.RowCount = 4;
|
||||
this.agitadorLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26F));
|
||||
this.agitadorLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 34F));
|
||||
this.agitadorLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
|
||||
this.agitadorLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.agitadorLayout.Size = new System.Drawing.Size(282, 270);
|
||||
this.agitadorLayout.TabIndex = 0;
|
||||
//
|
||||
// lblAgitadorTitulo
|
||||
//
|
||||
SetupSectionTitle(this.lblAgitadorTitulo, "AGITADOR DE CALDA");
|
||||
this.lblAgitadorTitulo.Name = "lblAgitadorTitulo";
|
||||
//
|
||||
// lblAgitadorDescricao
|
||||
//
|
||||
SetupSectionDescription(this.lblAgitadorDescricao, "Selecione o modo e ajuste os ganhos PID usados no controle do agitador.");
|
||||
this.lblAgitadorDescricao.Name = "lblAgitadorDescricao";
|
||||
//
|
||||
// seletorModoAgitador
|
||||
//
|
||||
this.seletorModoAgitador.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.seletorModoAgitador.Location = new System.Drawing.Point(0, 63);
|
||||
this.seletorModoAgitador.Margin = new System.Windows.Forms.Padding(0, 3, 0, 5);
|
||||
this.seletorModoAgitador.MinimumSize = new System.Drawing.Size(0, 40);
|
||||
this.seletorModoAgitador.Name = "seletorModoAgitador";
|
||||
this.seletorModoAgitador.SelectedMode = "Continuo";
|
||||
this.seletorModoAgitador.Size = new System.Drawing.Size(282, 42);
|
||||
this.seletorModoAgitador.TabIndex = 2;
|
||||
//
|
||||
// pidLayout
|
||||
//
|
||||
this.pidLayout.BackColor = System.Drawing.Color.Transparent;
|
||||
this.pidLayout.ColumnCount = 1;
|
||||
this.pidLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.pidLayout.Controls.Add(this.paramKp, 0, 0);
|
||||
this.pidLayout.Controls.Add(this.paramKi, 0, 1);
|
||||
this.pidLayout.Controls.Add(this.paramKd, 0, 2);
|
||||
this.pidLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pidLayout.Location = new System.Drawing.Point(0, 110);
|
||||
this.pidLayout.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.pidLayout.Name = "pidLayout";
|
||||
this.pidLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.pidLayout.RowCount = 3;
|
||||
this.pidLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||
this.pidLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||
this.pidLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.34F));
|
||||
this.pidLayout.Size = new System.Drawing.Size(282, 160);
|
||||
this.pidLayout.TabIndex = 3;
|
||||
//
|
||||
// paramKp
|
||||
//
|
||||
SetupNumeric(this.paramKp, "Kp", "", 1.10M, 0M, 20M, 0.05M, 2);
|
||||
this.paramKp.Margin = new System.Windows.Forms.Padding(0, 2, 0, 4);
|
||||
this.paramKp.Name = "paramKp";
|
||||
//
|
||||
// paramKi
|
||||
//
|
||||
SetupNumeric(this.paramKi, "Ki", "", 0.12M, 0M, 20M, 0.01M, 2);
|
||||
this.paramKi.Margin = new System.Windows.Forms.Padding(0, 2, 0, 4);
|
||||
this.paramKi.Name = "paramKi";
|
||||
//
|
||||
// paramKd
|
||||
//
|
||||
SetupNumeric(this.paramKd, "Kd", "", 0.03M, 0M, 20M, 0.01M, 2);
|
||||
this.paramKd.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
|
||||
this.paramKd.Name = "paramKd";
|
||||
//
|
||||
// pnlPulverizacao
|
||||
//
|
||||
ConfigurePanel(this.pnlPulverizacao, this.pulverizacaoLayout);
|
||||
this.pnlPulverizacao.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0);
|
||||
this.pnlPulverizacao.Name = "pnlPulverizacao";
|
||||
//
|
||||
// pulverizacaoLayout
|
||||
//
|
||||
this.pulverizacaoLayout.ColumnCount = 1;
|
||||
this.pulverizacaoLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.pulverizacaoLayout.Controls.Add(this.lblPulverizacaoTitulo, 0, 0);
|
||||
this.pulverizacaoLayout.Controls.Add(this.lblPulverizacaoDescricao, 0, 1);
|
||||
this.pulverizacaoLayout.Controls.Add(this.parametrosLayout, 0, 2);
|
||||
this.pulverizacaoLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pulverizacaoLayout.Location = new System.Drawing.Point(8, 8);
|
||||
this.pulverizacaoLayout.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.pulverizacaoLayout.Name = "pulverizacaoLayout";
|
||||
this.pulverizacaoLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.pulverizacaoLayout.RowCount = 3;
|
||||
this.pulverizacaoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26F));
|
||||
this.pulverizacaoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 34F));
|
||||
this.pulverizacaoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.pulverizacaoLayout.Size = new System.Drawing.Size(434, 270);
|
||||
this.pulverizacaoLayout.TabIndex = 0;
|
||||
//
|
||||
// lblPulverizacaoTitulo
|
||||
//
|
||||
SetupSectionTitle(this.lblPulverizacaoTitulo, "PULVERIZAÇÃO E WEED WORKER");
|
||||
this.lblPulverizacaoTitulo.Name = "lblPulverizacaoTitulo";
|
||||
//
|
||||
// lblPulverizacaoDescricao
|
||||
//
|
||||
SetupSectionDescription(this.lblPulverizacaoDescricao, "Defina os recursos da operação e os limites da região de atuação de cada bico.");
|
||||
this.lblPulverizacaoDescricao.Name = "lblPulverizacaoDescricao";
|
||||
//
|
||||
// parametrosLayout
|
||||
//
|
||||
this.parametrosLayout.BackColor = System.Drawing.Color.Transparent;
|
||||
this.parametrosLayout.ColumnCount = 2;
|
||||
this.parametrosLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.parametrosLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.parametrosLayout.Controls.Add(this.paramBicosEmUso, 0, 0);
|
||||
this.parametrosLayout.Controls.Add(this.paramPressaoLinha, 1, 0);
|
||||
this.parametrosLayout.Controls.Add(this.paramInicioTela, 0, 1);
|
||||
this.parametrosLayout.Controls.Add(this.paramAlturaArea, 1, 1);
|
||||
this.parametrosLayout.Controls.Add(this.paramErvasOn, 0, 2);
|
||||
this.parametrosLayout.Controls.Add(this.paramErvasOff, 1, 2);
|
||||
this.parametrosLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.parametrosLayout.Location = new System.Drawing.Point(0, 60);
|
||||
this.parametrosLayout.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.parametrosLayout.Name = "parametrosLayout";
|
||||
this.parametrosLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.parametrosLayout.RowCount = 3;
|
||||
this.parametrosLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||
this.parametrosLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||
this.parametrosLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.34F));
|
||||
this.parametrosLayout.Size = new System.Drawing.Size(434, 210);
|
||||
this.parametrosLayout.TabIndex = 2;
|
||||
//
|
||||
// paramBicosEmUso
|
||||
//
|
||||
SetupNumeric(this.paramBicosEmUso, "Bicos em uso", "", 7M, 1M, 12M, 1M, 0);
|
||||
this.paramBicosEmUso.Margin = new System.Windows.Forms.Padding(2, 2, 4, 4);
|
||||
this.paramBicosEmUso.Name = "paramBicosEmUso";
|
||||
//
|
||||
// paramPressaoLinha
|
||||
//
|
||||
SetupNumeric(this.paramPressaoLinha, "Pressão da linha", "psi", 18M, 0M, 120M, 1M, 0);
|
||||
this.paramPressaoLinha.Margin = new System.Windows.Forms.Padding(4, 2, 2, 4);
|
||||
this.paramPressaoLinha.Name = "paramPressaoLinha";
|
||||
//
|
||||
// paramInicioTela
|
||||
//
|
||||
SetupNumeric(this.paramInicioTela, "Início da atuação", "%", 85M, 0M, 100M, 1M, 0);
|
||||
this.paramInicioTela.Margin = new System.Windows.Forms.Padding(2, 2, 4, 4);
|
||||
this.paramInicioTela.Name = "paramInicioTela";
|
||||
//
|
||||
// paramAlturaArea
|
||||
//
|
||||
SetupNumeric(this.paramAlturaArea, "Altura da área", "%", 15M, 1M, 100M, 1M, 0);
|
||||
this.paramAlturaArea.Margin = new System.Windows.Forms.Padding(4, 2, 2, 4);
|
||||
this.paramAlturaArea.Name = "paramAlturaArea";
|
||||
//
|
||||
// paramErvasOn
|
||||
//
|
||||
SetupNumeric(this.paramErvasOn, "Ervas para ligar", "%", 25.0M, 0M, 100M, 0.5M, 1);
|
||||
this.paramErvasOn.Margin = new System.Windows.Forms.Padding(2, 2, 4, 0);
|
||||
this.paramErvasOn.Name = "paramErvasOn";
|
||||
//
|
||||
// paramErvasOff
|
||||
//
|
||||
SetupNumeric(this.paramErvasOff, "Ervas para desligar", "%", 15.0M, 0M, 100M, 0.5M, 1);
|
||||
this.paramErvasOff.Margin = new System.Windows.Forms.Padding(4, 2, 2, 0);
|
||||
this.paramErvasOff.Name = "paramErvasOff";
|
||||
//
|
||||
// ucParametrosAtuador
|
||||
//
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||
this.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.Background;
|
||||
this.Controls.Add(this.rootLayout);
|
||||
this.DoubleBuffered = true;
|
||||
this.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.Name = "ucParametrosAtuador";
|
||||
this.Size = new System.Drawing.Size(760, 286);
|
||||
this.rootLayout.ResumeLayout(false);
|
||||
this.pnlAgitador.ResumeLayout(false);
|
||||
this.agitadorLayout.ResumeLayout(false);
|
||||
this.pidLayout.ResumeLayout(false);
|
||||
this.pnlPulverizacao.ResumeLayout(false);
|
||||
this.pulverizacaoLayout.ResumeLayout(false);
|
||||
this.parametrosLayout.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
}
|
||||
|
||||
private static void ConfigurePanel(AgroBase.Forms.IHM.Controls.HmiRoundedPanel panel, System.Windows.Forms.Control child)
|
||||
{
|
||||
panel.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
panel.Controls.Add(child);
|
||||
panel.CornerRadius = 9;
|
||||
panel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
panel.FillColor = AgroBase.Forms.IHM.Controls.HmiTheme.Surface;
|
||||
panel.Padding = new System.Windows.Forms.Padding(8);
|
||||
}
|
||||
|
||||
private static void SetupSectionTitle(System.Windows.Forms.Label label, string text)
|
||||
{
|
||||
label.AutoEllipsis = true;
|
||||
label.BackColor = System.Drawing.Color.Transparent;
|
||||
label.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
label.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
label.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.Text;
|
||||
label.Margin = System.Windows.Forms.Padding.Empty;
|
||||
label.Text = text;
|
||||
label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
}
|
||||
|
||||
private static void SetupSectionDescription(System.Windows.Forms.Label label, string text)
|
||||
{
|
||||
label.AutoEllipsis = true;
|
||||
label.BackColor = System.Drawing.Color.Transparent;
|
||||
label.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
label.Font = new System.Drawing.Font("Segoe UI", 7F);
|
||||
label.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
label.Margin = System.Windows.Forms.Padding.Empty;
|
||||
label.Text = text;
|
||||
label.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||
}
|
||||
|
||||
private static void SetupNumeric(AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField field, string title, string unit, decimal value, decimal minimum, decimal maximum, decimal increment, int decimalPlaces)
|
||||
{
|
||||
field.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
field.MinimumSize = new System.Drawing.Size(0, 60);
|
||||
field.Titulo = title;
|
||||
field.Unidade = unit;
|
||||
field.Minimum = minimum;
|
||||
field.Maximum = maximum;
|
||||
field.Increment = increment;
|
||||
field.DecimalPlaces = decimalPlaces;
|
||||
field.Value = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel rootLayout;
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlAgitador;
|
||||
private System.Windows.Forms.TableLayoutPanel agitadorLayout;
|
||||
private System.Windows.Forms.Label lblAgitadorTitulo;
|
||||
private System.Windows.Forms.Label lblAgitadorDescricao;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiAgitatorModeSelector seletorModoAgitador;
|
||||
private System.Windows.Forms.TableLayoutPanel pidLayout;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField paramKp;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField paramKi;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField paramKd;
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlPulverizacao;
|
||||
private System.Windows.Forms.TableLayoutPanel pulverizacaoLayout;
|
||||
private System.Windows.Forms.Label lblPulverizacaoTitulo;
|
||||
private System.Windows.Forms.Label lblPulverizacaoDescricao;
|
||||
private System.Windows.Forms.TableLayoutPanel parametrosLayout;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField paramBicosEmUso;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField paramPressaoLinha;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField paramInicioTela;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField paramAlturaArea;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField paramErvasOn;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactNumericField paramErvasOff;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao.Parametros
|
||||
{
|
||||
public partial class ucParametrosAtuador : UserControl
|
||||
{
|
||||
public event EventHandler ParametrosAlterados;
|
||||
|
||||
public ucParametrosAtuador()
|
||||
{
|
||||
InitializeComponent();
|
||||
ConfigurarEstadoInicial();
|
||||
VincularEventos();
|
||||
}
|
||||
|
||||
private void ConfigurarEstadoInicial()
|
||||
{
|
||||
seletorModoAgitador.SelectedMode = "Continuo";
|
||||
|
||||
paramKp.Value = 1.00M;
|
||||
paramKi.Value = 0.10M;
|
||||
paramKd.Value = 0.00M;
|
||||
|
||||
paramBicosEmUso.Value = 7M;
|
||||
paramPressaoLinha.Value = 18M;
|
||||
|
||||
paramInicioTela.Value = 85M;
|
||||
paramAlturaArea.Value = 15M;
|
||||
paramErvasOn.Value = 25M;
|
||||
paramErvasOff.Value = 15M;
|
||||
}
|
||||
|
||||
private void VincularEventos()
|
||||
{
|
||||
seletorModoAgitador.SelectedModeChanged += Controle_Alterado;
|
||||
|
||||
paramKp.ValueChanged += Controle_Alterado;
|
||||
paramKi.ValueChanged += Controle_Alterado;
|
||||
paramKd.ValueChanged += Controle_Alterado;
|
||||
|
||||
paramBicosEmUso.ValueChanged += Controle_Alterado;
|
||||
paramPressaoLinha.ValueChanged += Controle_Alterado;
|
||||
paramInicioTela.ValueChanged += Controle_Alterado;
|
||||
paramAlturaArea.ValueChanged += Controle_Alterado;
|
||||
paramErvasOn.ValueChanged += Controle_Alterado;
|
||||
paramErvasOff.ValueChanged += Controle_Alterado;
|
||||
}
|
||||
|
||||
private void Controle_Alterado(object sender, EventArgs e)
|
||||
{
|
||||
if (ParametrosAlterados != null)
|
||||
ParametrosAlterados(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
public string ModoAgitador
|
||||
{
|
||||
get { return seletorModoAgitador.SelectedMode; }
|
||||
set { seletorModoAgitador.SelectedMode = value; }
|
||||
}
|
||||
|
||||
public decimal KpAgitador
|
||||
{
|
||||
get { return paramKp.Value; }
|
||||
set { paramKp.Value = value; }
|
||||
}
|
||||
|
||||
public decimal KiAgitador
|
||||
{
|
||||
get { return paramKi.Value; }
|
||||
set { paramKi.Value = value; }
|
||||
}
|
||||
|
||||
public decimal KdAgitador
|
||||
{
|
||||
get { return paramKd.Value; }
|
||||
set { paramKd.Value = value; }
|
||||
}
|
||||
|
||||
public int QuantidadeBicosEmUso
|
||||
{
|
||||
get { return Convert.ToInt32(paramBicosEmUso.Value); }
|
||||
set { paramBicosEmUso.Value = value; }
|
||||
}
|
||||
|
||||
public decimal PressaoLinhaPsi
|
||||
{
|
||||
get { return paramPressaoLinha.Value; }
|
||||
set { paramPressaoLinha.Value = value; }
|
||||
}
|
||||
|
||||
public int PercentualInicioTela
|
||||
{
|
||||
get { return Convert.ToInt32(paramInicioTela.Value); }
|
||||
set { paramInicioTela.Value = value; }
|
||||
}
|
||||
|
||||
public int PercentualAlturaArea
|
||||
{
|
||||
get { return Convert.ToInt32(paramAlturaArea.Value); }
|
||||
set { paramAlturaArea.Value = value; }
|
||||
}
|
||||
|
||||
public decimal PercentualErvasOn
|
||||
{
|
||||
get { return paramErvasOn.Value; }
|
||||
set { paramErvasOn.Value = value; }
|
||||
}
|
||||
|
||||
public decimal PercentualErvasOff
|
||||
{
|
||||
get { return paramErvasOff.Value; }
|
||||
set { paramErvasOff.Value = value; }
|
||||
}
|
||||
}
|
||||
}
|
||||
299
AgroBase/AgroBase/Forms/IHM/Operacao/Parametros/ucParametrosDirecional.Designer.cs
generated
Normal file
299
AgroBase/AgroBase/Forms/IHM/Operacao/Parametros/ucParametrosDirecional.Designer.cs
generated
Normal file
|
|
@ -0,0 +1,299 @@
|
|||
namespace AgroBase.Forms.IHM.Operacao.Parametros
|
||||
{
|
||||
partial class ucParametrosDirecional
|
||||
{
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && components != null)
|
||||
components.Dispose();
|
||||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.rootLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
|
||||
this.pnlAssistencias = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.assistenciasLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblAssistenciasTitulo = new System.Windows.Forms.Label();
|
||||
this.lblAssistenciasDescricao = new System.Windows.Forms.Label();
|
||||
this.checksLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.checkDirecionalAutomatico = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow();
|
||||
this.checkAssistidoSonar = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow();
|
||||
this.checkAssistidoImu = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow();
|
||||
this.checkImuPrefereArco = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow();
|
||||
|
||||
this.pnlControle = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.controleLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblControleTitulo = new System.Windows.Forms.Label();
|
||||
this.lblControleDescricao = new System.Windows.Forms.Label();
|
||||
this.sliderAnguloMaximo = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow();
|
||||
this.sliderVelocidadeDirecional = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow();
|
||||
|
||||
this.pnlNavegacao = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.navegacaoLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblNavegacaoTitulo = new System.Windows.Forms.Label();
|
||||
this.seletorModoControle = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiModeSelector();
|
||||
this.parametroHorizonte = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiNumericParameterCard();
|
||||
this.parametroDistanciaSaida = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiNumericParameterCard();
|
||||
|
||||
this.rootLayout.SuspendLayout();
|
||||
this.pnlAssistencias.SuspendLayout();
|
||||
this.assistenciasLayout.SuspendLayout();
|
||||
this.checksLayout.SuspendLayout();
|
||||
this.pnlControle.SuspendLayout();
|
||||
this.controleLayout.SuspendLayout();
|
||||
this.pnlNavegacao.SuspendLayout();
|
||||
this.navegacaoLayout.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
|
||||
// rootLayout
|
||||
this.rootLayout.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.Background;
|
||||
this.rootLayout.ColumnCount = 2;
|
||||
this.rootLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 42F));
|
||||
this.rootLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 58F));
|
||||
this.rootLayout.Controls.Add(this.pnlAssistencias, 0, 0);
|
||||
this.rootLayout.Controls.Add(this.pnlControle, 1, 0);
|
||||
this.rootLayout.Controls.Add(this.pnlNavegacao, 0, 1);
|
||||
this.rootLayout.SetColumnSpan(this.pnlNavegacao, 2);
|
||||
this.rootLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.rootLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.rootLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.rootLayout.RowCount = 2;
|
||||
this.rootLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 58F));
|
||||
this.rootLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 42F));
|
||||
|
||||
// Assistências
|
||||
ConfigurePanel(this.pnlAssistencias, this.assistenciasLayout);
|
||||
this.pnlAssistencias.Margin = new System.Windows.Forms.Padding(0, 0, 3, 3);
|
||||
this.pnlAssistencias.Padding = new System.Windows.Forms.Padding(8);
|
||||
|
||||
this.assistenciasLayout.ColumnCount = 1;
|
||||
this.assistenciasLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.assistenciasLayout.Controls.Add(this.lblAssistenciasTitulo, 0, 0);
|
||||
this.assistenciasLayout.Controls.Add(this.lblAssistenciasDescricao, 0, 1);
|
||||
this.assistenciasLayout.Controls.Add(this.checksLayout, 0, 2);
|
||||
this.assistenciasLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.assistenciasLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.assistenciasLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.assistenciasLayout.RowCount = 3;
|
||||
this.assistenciasLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24F));
|
||||
this.assistenciasLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));
|
||||
this.assistenciasLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
SetupSectionTitle(this.lblAssistenciasTitulo, "AUTOMAÇÃO E ASSISTÊNCIAS");
|
||||
SetupSectionDescription(this.lblAssistenciasDescricao, "Defina quais recursos podem interferir no controle direcional.");
|
||||
|
||||
this.checksLayout.BackColor = System.Drawing.Color.Transparent;
|
||||
this.checksLayout.ColumnCount = 2;
|
||||
this.checksLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.checksLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.checksLayout.Controls.Add(this.checkDirecionalAutomatico, 0, 0);
|
||||
this.checksLayout.Controls.Add(this.checkAssistidoSonar, 1, 0);
|
||||
this.checksLayout.Controls.Add(this.checkAssistidoImu, 0, 1);
|
||||
this.checksLayout.Controls.Add(this.checkImuPrefereArco, 1, 1);
|
||||
this.checksLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.checksLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.checksLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.checksLayout.RowCount = 2;
|
||||
this.checksLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.checksLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
|
||||
SetupCheck(this.checkDirecionalAutomatico, "Direcional automático");
|
||||
SetupCheck(this.checkAssistidoSonar, "Assistido por sonar");
|
||||
SetupCheck(this.checkAssistidoImu, "Assistido por IMU");
|
||||
SetupCheck(this.checkImuPrefereArco, "IMU prefere arco");
|
||||
|
||||
// Controle direcional
|
||||
ConfigurePanel(this.pnlControle, this.controleLayout);
|
||||
this.pnlControle.Margin = new System.Windows.Forms.Padding(3, 0, 0, 3);
|
||||
this.pnlControle.Padding = new System.Windows.Forms.Padding(8);
|
||||
|
||||
this.controleLayout.ColumnCount = 2;
|
||||
this.controleLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.controleLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.controleLayout.Controls.Add(this.lblControleTitulo, 0, 0);
|
||||
this.controleLayout.SetColumnSpan(this.lblControleTitulo, 2);
|
||||
this.controleLayout.Controls.Add(this.lblControleDescricao, 0, 1);
|
||||
this.controleLayout.SetColumnSpan(this.lblControleDescricao, 2);
|
||||
this.controleLayout.Controls.Add(this.sliderAnguloMaximo, 0, 2);
|
||||
this.controleLayout.Controls.Add(this.sliderVelocidadeDirecional, 1, 2);
|
||||
this.controleLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.controleLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.controleLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.controleLayout.RowCount = 3;
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 24F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
SetupSectionTitle(this.lblControleTitulo, "LIMITES DO DIRECIONAL");
|
||||
SetupSectionDescription(this.lblControleDescricao, "Ajuste o ângulo máximo e a velocidade usada pelos motores de passo.");
|
||||
|
||||
this.sliderAnguloMaximo.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.sliderAnguloMaximo.Margin = new System.Windows.Forms.Padding(0, 2, 3, 0);
|
||||
this.sliderAnguloMaximo.MinimumSize = System.Drawing.Size.Empty;
|
||||
this.sliderAnguloMaximo.Titulo = "Ângulo máximo";
|
||||
this.sliderAnguloMaximo.Minimum = 0;
|
||||
this.sliderAnguloMaximo.Maximum = 90;
|
||||
this.sliderAnguloMaximo.ValueFormat = AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiSliderValueFormat.Degrees;
|
||||
this.sliderAnguloMaximo.Value = 45;
|
||||
this.sliderAnguloMaximo.AccentColor = AgroBase.Forms.IHM.Controls.HmiTheme.Warning;
|
||||
|
||||
this.sliderVelocidadeDirecional.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.sliderVelocidadeDirecional.Margin = new System.Windows.Forms.Padding(3, 2, 0, 0);
|
||||
this.sliderVelocidadeDirecional.MinimumSize = System.Drawing.Size.Empty;
|
||||
this.sliderVelocidadeDirecional.Titulo = "Velocidade direcional";
|
||||
this.sliderVelocidadeDirecional.Minimum = 0;
|
||||
this.sliderVelocidadeDirecional.Maximum = 100;
|
||||
this.sliderVelocidadeDirecional.ValueFormat = AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiSliderValueFormat.PercentOnly;
|
||||
this.sliderVelocidadeDirecional.Value = 60;
|
||||
this.sliderVelocidadeDirecional.AccentColor = AgroBase.Forms.IHM.Controls.HmiTheme.Info;
|
||||
|
||||
// Controle e navegação
|
||||
ConfigurePanel(this.pnlNavegacao, this.navegacaoLayout);
|
||||
this.pnlNavegacao.Margin = new System.Windows.Forms.Padding(0, 3, 0, 0);
|
||||
this.pnlNavegacao.Padding = new System.Windows.Forms.Padding(8);
|
||||
|
||||
this.navegacaoLayout.ColumnCount = 3;
|
||||
this.navegacaoLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30F));
|
||||
this.navegacaoLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35F));
|
||||
this.navegacaoLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35F));
|
||||
this.navegacaoLayout.Controls.Add(this.lblNavegacaoTitulo, 0, 0);
|
||||
this.navegacaoLayout.SetColumnSpan(this.lblNavegacaoTitulo, 3);
|
||||
this.navegacaoLayout.Controls.Add(this.seletorModoControle, 0, 1);
|
||||
this.navegacaoLayout.Controls.Add(this.parametroHorizonte, 1, 1);
|
||||
this.navegacaoLayout.Controls.Add(this.parametroDistanciaSaida, 2, 1);
|
||||
this.navegacaoLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.navegacaoLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.navegacaoLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.navegacaoLayout.RowCount = 2;
|
||||
this.navegacaoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 22F));
|
||||
this.navegacaoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
SetupSectionTitle(this.lblNavegacaoTitulo, "CONTROLE E NAVEGAÇÃO");
|
||||
|
||||
this.seletorModoControle.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.seletorModoControle.Margin = new System.Windows.Forms.Padding(0, 1, 3, 0);
|
||||
this.seletorModoControle.MinimumSize = System.Drawing.Size.Empty;
|
||||
this.seletorModoControle.SelectedMode = "MPC";
|
||||
|
||||
this.parametroHorizonte.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.parametroHorizonte.Margin = new System.Windows.Forms.Padding(3, 1, 3, 0);
|
||||
this.parametroHorizonte.MinimumSize = System.Drawing.Size.Empty;
|
||||
this.parametroHorizonte.Titulo = "Horizonte de predição";
|
||||
this.parametroHorizonte.Descricao = "Distância analisada pelo controlador";
|
||||
this.parametroHorizonte.Unidade = "m";
|
||||
this.parametroHorizonte.Minimum = 1M;
|
||||
this.parametroHorizonte.Maximum = 30M;
|
||||
this.parametroHorizonte.Increment = 0.5M;
|
||||
this.parametroHorizonte.DecimalPlaces = 1;
|
||||
this.parametroHorizonte.Value = 4M;
|
||||
|
||||
this.parametroDistanciaSaida.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.parametroDistanciaSaida.Margin = new System.Windows.Forms.Padding(3, 1, 0, 0);
|
||||
this.parametroDistanciaSaida.MinimumSize = System.Drawing.Size.Empty;
|
||||
this.parametroDistanciaSaida.Titulo = "Distância saída para manobra";
|
||||
this.parametroDistanciaSaida.Descricao = "Distância para iniciar a manobra entre ruas";
|
||||
this.parametroDistanciaSaida.Unidade = "m";
|
||||
this.parametroDistanciaSaida.Minimum = 0M;
|
||||
this.parametroDistanciaSaida.Maximum = 20M;
|
||||
this.parametroDistanciaSaida.Increment = 0.5M;
|
||||
this.parametroDistanciaSaida.DecimalPlaces = 1;
|
||||
this.parametroDistanciaSaida.Value = 5M;
|
||||
|
||||
// ucParametrosDirecional
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||
this.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.Background;
|
||||
this.Controls.Add(this.rootLayout);
|
||||
this.DoubleBuffered = true;
|
||||
this.Name = "ucParametrosDirecional";
|
||||
this.Size = new System.Drawing.Size(760, 286);
|
||||
|
||||
this.rootLayout.ResumeLayout(false);
|
||||
this.pnlAssistencias.ResumeLayout(false);
|
||||
this.assistenciasLayout.ResumeLayout(false);
|
||||
this.checksLayout.ResumeLayout(false);
|
||||
this.pnlControle.ResumeLayout(false);
|
||||
this.controleLayout.ResumeLayout(false);
|
||||
this.pnlNavegacao.ResumeLayout(false);
|
||||
this.navegacaoLayout.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
}
|
||||
|
||||
private static void ConfigurePanel(AgroBase.Forms.IHM.Controls.HmiRoundedPanel panel, System.Windows.Forms.Control child)
|
||||
{
|
||||
panel.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
panel.Controls.Add(child);
|
||||
panel.CornerRadius = 9;
|
||||
panel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
panel.FillColor = AgroBase.Forms.IHM.Controls.HmiTheme.Surface;
|
||||
panel.Padding = new System.Windows.Forms.Padding(8);
|
||||
}
|
||||
|
||||
private static void SetupSectionTitle(System.Windows.Forms.Label label, string text)
|
||||
{
|
||||
label.AutoEllipsis = true;
|
||||
label.BackColor = System.Drawing.Color.Transparent;
|
||||
label.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
label.Font = new System.Drawing.Font("Segoe UI", 8.5F, System.Drawing.FontStyle.Bold);
|
||||
label.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.Text;
|
||||
label.Margin = System.Windows.Forms.Padding.Empty;
|
||||
label.Text = text;
|
||||
label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
}
|
||||
|
||||
private static void SetupSectionDescription(System.Windows.Forms.Label label, string text)
|
||||
{
|
||||
label.AutoEllipsis = true;
|
||||
label.BackColor = System.Drawing.Color.Transparent;
|
||||
label.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
label.Font = new System.Drawing.Font("Segoe UI", 6.7F);
|
||||
label.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
label.Margin = System.Windows.Forms.Padding.Empty;
|
||||
label.Text = text;
|
||||
label.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||
}
|
||||
|
||||
private static void SetupCheck(AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow check, string title)
|
||||
{
|
||||
check.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
check.Titulo = title;
|
||||
check.Checked = true;
|
||||
check.Margin = new System.Windows.Forms.Padding(3);
|
||||
check.MinimumSize = System.Drawing.Size.Empty;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel rootLayout;
|
||||
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlAssistencias;
|
||||
private System.Windows.Forms.TableLayoutPanel assistenciasLayout;
|
||||
private System.Windows.Forms.Label lblAssistenciasTitulo;
|
||||
private System.Windows.Forms.Label lblAssistenciasDescricao;
|
||||
private System.Windows.Forms.TableLayoutPanel checksLayout;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow checkDirecionalAutomatico;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow checkAssistidoSonar;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow checkAssistidoImu;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow checkImuPrefereArco;
|
||||
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlControle;
|
||||
private System.Windows.Forms.TableLayoutPanel controleLayout;
|
||||
private System.Windows.Forms.Label lblControleTitulo;
|
||||
private System.Windows.Forms.Label lblControleDescricao;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow sliderAnguloMaximo;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow sliderVelocidadeDirecional;
|
||||
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlNavegacao;
|
||||
private System.Windows.Forms.TableLayoutPanel navegacaoLayout;
|
||||
private System.Windows.Forms.Label lblNavegacaoTitulo;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiModeSelector seletorModoControle;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiNumericParameterCard parametroHorizonte;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiNumericParameterCard parametroDistanciaSaida;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao.Parametros
|
||||
{
|
||||
public partial class ucParametrosDirecional : UserControl
|
||||
{
|
||||
public event EventHandler ParametrosAlterados;
|
||||
|
||||
public ucParametrosDirecional()
|
||||
{
|
||||
InitializeComponent();
|
||||
ConfigurarEstadoInicial();
|
||||
VincularEventos();
|
||||
}
|
||||
|
||||
private void ConfigurarEstadoInicial()
|
||||
{
|
||||
checkDirecionalAutomatico.Checked = true;
|
||||
checkAssistidoSonar.Checked = true;
|
||||
checkAssistidoImu.Checked = true;
|
||||
checkImuPrefereArco.Checked = false;
|
||||
|
||||
sliderAnguloMaximo.Value = 45;
|
||||
sliderAnguloMaximo.VelocidadeMaximaKmh = 0D;
|
||||
|
||||
sliderVelocidadeDirecional.Value = 60;
|
||||
sliderVelocidadeDirecional.VelocidadeMaximaKmh = 0D;
|
||||
|
||||
seletorModoControle.SelectedMode = "MPC";
|
||||
|
||||
parametroHorizonte.Value = 4M;
|
||||
parametroDistanciaSaida.Value = 5M;
|
||||
}
|
||||
|
||||
private void VincularEventos()
|
||||
{
|
||||
checkDirecionalAutomatico.CheckedChanged += Controle_Alterado;
|
||||
checkAssistidoSonar.CheckedChanged += Controle_Alterado;
|
||||
checkAssistidoImu.CheckedChanged += Controle_Alterado;
|
||||
checkImuPrefereArco.CheckedChanged += Controle_Alterado;
|
||||
|
||||
sliderAnguloMaximo.ValueChanged += Controle_Alterado;
|
||||
sliderVelocidadeDirecional.ValueChanged += Controle_Alterado;
|
||||
|
||||
seletorModoControle.SelectedModeChanged += Controle_Alterado;
|
||||
parametroHorizonte.ValueChanged += Controle_Alterado;
|
||||
parametroDistanciaSaida.ValueChanged += Controle_Alterado;
|
||||
}
|
||||
|
||||
private void Controle_Alterado(object sender, EventArgs e)
|
||||
{
|
||||
if (ParametrosAlterados != null)
|
||||
ParametrosAlterados(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
public bool DirecionalAutomatico
|
||||
{
|
||||
get { return checkDirecionalAutomatico.Checked; }
|
||||
set { checkDirecionalAutomatico.Checked = value; }
|
||||
}
|
||||
|
||||
public bool AssistidoPorSonar
|
||||
{
|
||||
get { return checkAssistidoSonar.Checked; }
|
||||
set { checkAssistidoSonar.Checked = value; }
|
||||
}
|
||||
|
||||
public bool AssistidoPorImu
|
||||
{
|
||||
get { return checkAssistidoImu.Checked; }
|
||||
set { checkAssistidoImu.Checked = value; }
|
||||
}
|
||||
|
||||
public bool ImuPrefereArco
|
||||
{
|
||||
get { return checkImuPrefereArco.Checked; }
|
||||
set { checkImuPrefereArco.Checked = value; }
|
||||
}
|
||||
|
||||
public int AnguloMaximo
|
||||
{
|
||||
get { return sliderAnguloMaximo.Value; }
|
||||
set { sliderAnguloMaximo.Value = value; }
|
||||
}
|
||||
|
||||
public int VelocidadeDirecionalPercentual
|
||||
{
|
||||
get { return sliderVelocidadeDirecional.Value; }
|
||||
set { sliderVelocidadeDirecional.Value = value; }
|
||||
}
|
||||
|
||||
public string ModoControle
|
||||
{
|
||||
get { return seletorModoControle.SelectedMode; }
|
||||
set { seletorModoControle.SelectedMode = value; }
|
||||
}
|
||||
|
||||
public decimal HorizontePredicaoMetros
|
||||
{
|
||||
get { return parametroHorizonte.Value; }
|
||||
set { parametroHorizonte.Value = value; }
|
||||
}
|
||||
|
||||
public decimal DistanciaSaidaCorredorMetros
|
||||
{
|
||||
get { return parametroDistanciaSaida.Value; }
|
||||
set { parametroDistanciaSaida.Value = value; }
|
||||
}
|
||||
}
|
||||
}
|
||||
37
AgroBase/AgroBase/Forms/IHM/Operacao/Parametros/ucParametrosMapa.Designer.cs
generated
Normal file
37
AgroBase/AgroBase/Forms/IHM/Operacao/Parametros/ucParametrosMapa.Designer.cs
generated
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
namespace AgroBase.Forms.IHM.Operacao.Parametros
|
||||
{
|
||||
partial class ucParametrosMapa
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao.Parametros
|
||||
{
|
||||
public partial class ucParametrosMapa : UserControl
|
||||
{
|
||||
public ucParametrosMapa()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
217
AgroBase/AgroBase/Forms/IHM/Operacao/Parametros/ucParametrosMovimento.Designer.cs
generated
Normal file
217
AgroBase/AgroBase/Forms/IHM/Operacao/Parametros/ucParametrosMovimento.Designer.cs
generated
Normal file
|
|
@ -0,0 +1,217 @@
|
|||
namespace AgroBase.Forms.IHM.Operacao.Parametros
|
||||
{
|
||||
partial class ucParametrosMovimento
|
||||
{
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && components != null)
|
||||
components.Dispose();
|
||||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.rootLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.pnlAutomacao = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.automacaoLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblAutomacaoTitulo = new System.Windows.Forms.Label();
|
||||
this.lblAutomacaoDescricao = new System.Windows.Forms.Label();
|
||||
this.checksLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.checkMovimentoAutomatico = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow();
|
||||
this.checkAssistidoSonar = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow();
|
||||
this.checkParadaObstaculo = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow();
|
||||
this.checkAssistidoImu = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow();
|
||||
this.checkParadaInclinacao = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow();
|
||||
this.checkFrenagemParar = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow();
|
||||
this.pnlVelocidades = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.velocidadesLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblVelocidadesTitulo = new System.Windows.Forms.Label();
|
||||
this.lblVelocidadesDescricao = new System.Windows.Forms.Label();
|
||||
this.sliderSemErvas = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow();
|
||||
this.sliderComErvas = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow();
|
||||
|
||||
this.rootLayout.SuspendLayout();
|
||||
this.pnlAutomacao.SuspendLayout();
|
||||
this.automacaoLayout.SuspendLayout();
|
||||
this.checksLayout.SuspendLayout();
|
||||
this.pnlVelocidades.SuspendLayout();
|
||||
this.velocidadesLayout.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
|
||||
this.rootLayout.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.Background;
|
||||
this.rootLayout.ColumnCount = 2;
|
||||
this.rootLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 45F));
|
||||
this.rootLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 55F));
|
||||
this.rootLayout.Controls.Add(this.pnlAutomacao, 0, 0);
|
||||
this.rootLayout.Controls.Add(this.pnlVelocidades, 1, 0);
|
||||
this.rootLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.rootLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.rootLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.rootLayout.RowCount = 1;
|
||||
this.rootLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
ConfigurePanel(this.pnlAutomacao, this.automacaoLayout);
|
||||
this.pnlAutomacao.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
||||
|
||||
this.automacaoLayout.ColumnCount = 1;
|
||||
this.automacaoLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.automacaoLayout.Controls.Add(this.lblAutomacaoTitulo, 0, 0);
|
||||
this.automacaoLayout.Controls.Add(this.lblAutomacaoDescricao, 0, 1);
|
||||
this.automacaoLayout.Controls.Add(this.checksLayout, 0, 2);
|
||||
this.automacaoLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.automacaoLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.automacaoLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.automacaoLayout.RowCount = 3;
|
||||
this.automacaoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F));
|
||||
this.automacaoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F));
|
||||
this.automacaoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
SetupSectionTitle(this.lblAutomacaoTitulo, "AUTOMAÇÃO E ASSISTÊNCIAS");
|
||||
SetupSectionDescription(this.lblAutomacaoDescricao, "Ative somente os recursos que devem participar do controle de movimento.");
|
||||
|
||||
this.checksLayout.BackColor = System.Drawing.Color.Transparent;
|
||||
this.checksLayout.ColumnCount = 2;
|
||||
this.checksLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.checksLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.checksLayout.Controls.Add(this.checkMovimentoAutomatico, 0, 0);
|
||||
this.checksLayout.Controls.Add(this.checkAssistidoSonar, 1, 0);
|
||||
this.checksLayout.Controls.Add(this.checkParadaObstaculo, 0, 1);
|
||||
this.checksLayout.Controls.Add(this.checkAssistidoImu, 1, 1);
|
||||
this.checksLayout.Controls.Add(this.checkParadaInclinacao, 0, 2);
|
||||
this.checksLayout.Controls.Add(this.checkFrenagemParar, 1, 2);
|
||||
this.checksLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.checksLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.checksLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.checksLayout.RowCount = 3;
|
||||
this.checksLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||
this.checksLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||
this.checksLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.34F));
|
||||
|
||||
SetupCheck(this.checkMovimentoAutomatico, "Movimento automático");
|
||||
SetupCheck(this.checkAssistidoSonar, "Assistido por sonar");
|
||||
SetupCheck(this.checkParadaObstaculo, "Parada por obstáculo");
|
||||
SetupCheck(this.checkAssistidoImu, "Assistido por IMU");
|
||||
SetupCheck(this.checkParadaInclinacao, "Parada por inclinação");
|
||||
SetupCheck(this.checkFrenagemParar, "Frenagem ao parar");
|
||||
|
||||
ConfigurePanel(this.pnlVelocidades, this.velocidadesLayout);
|
||||
this.pnlVelocidades.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0);
|
||||
|
||||
this.velocidadesLayout.ColumnCount = 1;
|
||||
this.velocidadesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.velocidadesLayout.Controls.Add(this.lblVelocidadesTitulo, 0, 0);
|
||||
this.velocidadesLayout.Controls.Add(this.lblVelocidadesDescricao, 0, 1);
|
||||
this.velocidadesLayout.Controls.Add(this.sliderSemErvas, 0, 2);
|
||||
this.velocidadesLayout.Controls.Add(this.sliderComErvas, 0, 3);
|
||||
this.velocidadesLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.velocidadesLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.velocidadesLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.velocidadesLayout.RowCount = 4;
|
||||
this.velocidadesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F));
|
||||
this.velocidadesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 32F));
|
||||
this.velocidadesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.velocidadesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
|
||||
SetupSectionTitle(this.lblVelocidadesTitulo, "LIMITES DE VELOCIDADE");
|
||||
SetupSectionDescription(this.lblVelocidadesDescricao, "A velocidade em km/h é calculada pelo percentual da velocidade máxima do equipamento.");
|
||||
|
||||
this.sliderSemErvas.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.sliderSemErvas.Margin = new System.Windows.Forms.Padding(0, 2, 0, 3);
|
||||
this.sliderSemErvas.Titulo = "Sem ervas no radar";
|
||||
this.sliderSemErvas.Value = 68;
|
||||
this.sliderSemErvas.VelocidadeMaximaKmh = 5D;
|
||||
this.sliderSemErvas.AccentColor = AgroBase.Forms.IHM.Controls.HmiTheme.Success;
|
||||
|
||||
this.sliderComErvas.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.sliderComErvas.Margin = new System.Windows.Forms.Padding(0, 3, 0, 0);
|
||||
this.sliderComErvas.Titulo = "Com ervas no radar";
|
||||
this.sliderComErvas.Value = 45;
|
||||
this.sliderComErvas.VelocidadeMaximaKmh = 5D;
|
||||
this.sliderComErvas.AccentColor = AgroBase.Forms.IHM.Controls.HmiTheme.Info;
|
||||
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||
this.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.Background;
|
||||
this.Controls.Add(this.rootLayout);
|
||||
this.DoubleBuffered = true;
|
||||
this.Name = "ucParametrosMovimento";
|
||||
this.Size = new System.Drawing.Size(760, 286);
|
||||
|
||||
this.rootLayout.ResumeLayout(false);
|
||||
this.pnlAutomacao.ResumeLayout(false);
|
||||
this.automacaoLayout.ResumeLayout(false);
|
||||
this.checksLayout.ResumeLayout(false);
|
||||
this.pnlVelocidades.ResumeLayout(false);
|
||||
this.velocidadesLayout.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
}
|
||||
|
||||
private static void ConfigurePanel(AgroBase.Forms.IHM.Controls.HmiRoundedPanel panel, System.Windows.Forms.Control child)
|
||||
{
|
||||
panel.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
panel.Controls.Add(child);
|
||||
panel.CornerRadius = 9;
|
||||
panel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
panel.FillColor = AgroBase.Forms.IHM.Controls.HmiTheme.Surface;
|
||||
panel.Padding = new System.Windows.Forms.Padding(10);
|
||||
}
|
||||
|
||||
private static void SetupSectionTitle(System.Windows.Forms.Label label, string text)
|
||||
{
|
||||
label.AutoEllipsis = true;
|
||||
label.BackColor = System.Drawing.Color.Transparent;
|
||||
label.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
label.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
label.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.Text;
|
||||
label.Margin = System.Windows.Forms.Padding.Empty;
|
||||
label.Text = text;
|
||||
label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
}
|
||||
|
||||
private static void SetupSectionDescription(System.Windows.Forms.Label label, string text)
|
||||
{
|
||||
label.AutoEllipsis = true;
|
||||
label.BackColor = System.Drawing.Color.Transparent;
|
||||
label.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
label.Font = new System.Drawing.Font("Segoe UI", 7F);
|
||||
label.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
label.Margin = System.Windows.Forms.Padding.Empty;
|
||||
label.Text = text;
|
||||
label.TextAlign = System.Drawing.ContentAlignment.TopLeft;
|
||||
}
|
||||
|
||||
private static void SetupCheck(AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow check, string title)
|
||||
{
|
||||
check.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
check.Titulo = title;
|
||||
check.Checked = true;
|
||||
check.Margin = new System.Windows.Forms.Padding(3);
|
||||
check.MinimumSize = System.Drawing.Size.Empty;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel rootLayout;
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlAutomacao;
|
||||
private System.Windows.Forms.TableLayoutPanel automacaoLayout;
|
||||
private System.Windows.Forms.Label lblAutomacaoTitulo;
|
||||
private System.Windows.Forms.Label lblAutomacaoDescricao;
|
||||
private System.Windows.Forms.TableLayoutPanel checksLayout;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow checkMovimentoAutomatico;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow checkAssistidoSonar;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow checkParadaObstaculo;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow checkAssistidoImu;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow checkParadaInclinacao;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiCompactCheckRow checkFrenagemParar;
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlVelocidades;
|
||||
private System.Windows.Forms.TableLayoutPanel velocidadesLayout;
|
||||
private System.Windows.Forms.Label lblVelocidadesTitulo;
|
||||
private System.Windows.Forms.Label lblVelocidadesDescricao;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow sliderSemErvas;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow sliderComErvas;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
using AgroBase.Forms.IHM.Operacao.Parametros.Controls;
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao.Parametros
|
||||
{
|
||||
public partial class ucParametrosMovimento : UserControl
|
||||
{
|
||||
public event EventHandler ParametrosAlterados;
|
||||
|
||||
public ucParametrosMovimento()
|
||||
{
|
||||
InitializeComponent();
|
||||
ConfigurarEstadoInicial();
|
||||
VincularEventos();
|
||||
}
|
||||
|
||||
private void ConfigurarEstadoInicial()
|
||||
{
|
||||
checkMovimentoAutomatico.Checked = true;
|
||||
checkAssistidoSonar.Checked = true;
|
||||
checkParadaObstaculo.Checked = true;
|
||||
checkAssistidoImu.Checked = true;
|
||||
checkParadaInclinacao.Checked = true;
|
||||
checkFrenagemParar.Checked = true;
|
||||
|
||||
sliderSemErvas.Value = 68;
|
||||
sliderSemErvas.VelocidadeMaximaKmh = 5D;
|
||||
|
||||
sliderComErvas.Value = 45;
|
||||
sliderComErvas.VelocidadeMaximaKmh = 5D;
|
||||
}
|
||||
|
||||
private void VincularEventos()
|
||||
{
|
||||
checkMovimentoAutomatico.CheckedChanged += Controle_Alterado;
|
||||
checkAssistidoSonar.CheckedChanged += Controle_Alterado;
|
||||
checkParadaObstaculo.CheckedChanged += Controle_Alterado;
|
||||
checkAssistidoImu.CheckedChanged += Controle_Alterado;
|
||||
checkParadaInclinacao.CheckedChanged += Controle_Alterado;
|
||||
checkFrenagemParar.CheckedChanged += Controle_Alterado;
|
||||
|
||||
sliderSemErvas.ValueChanged += Controle_Alterado;
|
||||
sliderComErvas.ValueChanged += Controle_Alterado;
|
||||
}
|
||||
|
||||
private void Controle_Alterado(object sender, EventArgs e)
|
||||
{
|
||||
if (ParametrosAlterados != null)
|
||||
ParametrosAlterados(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
public bool MovimentoAutomatico
|
||||
{
|
||||
get { return checkMovimentoAutomatico.Checked; }
|
||||
set { checkMovimentoAutomatico.Checked = value; }
|
||||
}
|
||||
|
||||
public bool AssistidoPorSonar
|
||||
{
|
||||
get { return checkAssistidoSonar.Checked; }
|
||||
set { checkAssistidoSonar.Checked = value; }
|
||||
}
|
||||
|
||||
public bool ParadaPorObstaculo
|
||||
{
|
||||
get { return checkParadaObstaculo.Checked; }
|
||||
set { checkParadaObstaculo.Checked = value; }
|
||||
}
|
||||
|
||||
public bool AssistidoPorImu
|
||||
{
|
||||
get { return checkAssistidoImu.Checked; }
|
||||
set { checkAssistidoImu.Checked = value; }
|
||||
}
|
||||
|
||||
public bool ParadaPorInclinacao
|
||||
{
|
||||
get { return checkParadaInclinacao.Checked; }
|
||||
set { checkParadaInclinacao.Checked = value; }
|
||||
}
|
||||
|
||||
public bool FrenagemAoParar
|
||||
{
|
||||
get { return checkFrenagemParar.Checked; }
|
||||
set { checkFrenagemParar.Checked = value; }
|
||||
}
|
||||
|
||||
public int VelocidadeSemErvasPercentual
|
||||
{
|
||||
get { return sliderSemErvas.Value; }
|
||||
set { sliderSemErvas.Value = value; }
|
||||
}
|
||||
|
||||
public int VelocidadeComErvasPercentual
|
||||
{
|
||||
get { return sliderComErvas.Value; }
|
||||
set { sliderComErvas.Value = value; }
|
||||
}
|
||||
|
||||
public double VelocidadeMaximaEquipamentoKmh
|
||||
{
|
||||
get { return sliderSemErvas.VelocidadeMaximaKmh; }
|
||||
set
|
||||
{
|
||||
sliderSemErvas.VelocidadeMaximaKmh = value;
|
||||
sliderComErvas.VelocidadeMaximaKmh = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,12 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using AgroBase.Forms.IHM.Controls.Operacao;
|
||||
using AgroBase.Forms.IHM.Operacao.Parametros.Controls;
|
||||
using AgroBase.Models;
|
||||
using AgroBase.Models.Modules;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using static AgroBase.Models.Enums;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao
|
||||
{
|
||||
|
|
@ -11,6 +16,15 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
_controleDescartado = true;
|
||||
|
||||
if (picCamera != null)
|
||||
{
|
||||
System.Drawing.Image imagemAtual = picCamera.Image;
|
||||
picCamera.Image = null;
|
||||
imagemAtual?.Dispose();
|
||||
}
|
||||
|
||||
if (disposing && components != null)
|
||||
components.Dispose();
|
||||
|
||||
|
|
@ -29,15 +43,9 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
this.lblControleTitulo = new System.Windows.Forms.Label();
|
||||
this.lblJoystick = new System.Windows.Forms.Label();
|
||||
this.cmbJoystick = new System.Windows.Forms.ComboBox();
|
||||
this.lblVelocidadeMax = new System.Windows.Forms.Label();
|
||||
this.lblVelocidadeMaxValor = new System.Windows.Forms.Label();
|
||||
this.sliderVelocidadeMax = new AgroBase.Forms.IHM.Controls.Operacao.HmiSlider();
|
||||
this.lblAngulo = new System.Windows.Forms.Label();
|
||||
this.lblAnguloValor = new System.Windows.Forms.Label();
|
||||
this.sliderAngulo = new AgroBase.Forms.IHM.Controls.Operacao.HmiSlider();
|
||||
this.lblVelocidadeDir = new System.Windows.Forms.Label();
|
||||
this.lblVelocidadeDirValor = new System.Windows.Forms.Label();
|
||||
this.sliderVelocidadeDir = new AgroBase.Forms.IHM.Controls.Operacao.HmiSlider();
|
||||
this.sliderVelocidadeMax = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow();
|
||||
this.sliderAngulo = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow();
|
||||
this.sliderVelocidadeDir = new AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow();
|
||||
this.lblTipoMovimento = new System.Windows.Forms.Label();
|
||||
this.cmbTipoMovimento = new System.Windows.Forms.ComboBox();
|
||||
this.acoesLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
|
|
@ -135,25 +143,16 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
this.controleLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 36F));
|
||||
this.controleLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 34F));
|
||||
this.controleLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.controleLayout.RowCount = 11;
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 22F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 18F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 18F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 18F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 18F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 31F));
|
||||
this.controleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 46F));
|
||||
|
||||
// Joystick
|
||||
this.controleLayout.RowStyles[1] = new RowStyle(SizeType.Absolute, 27F);
|
||||
// Combo de tipo de movimento
|
||||
this.controleLayout.RowStyles[9] = new RowStyle(SizeType.Absolute, 28F);
|
||||
// Botões
|
||||
this.controleLayout.RowStyles[10] = new RowStyle(SizeType.Absolute, 40F);
|
||||
this.controleLayout.RowCount = 8;
|
||||
this.controleLayout.RowStyles.Clear();
|
||||
this.controleLayout.RowStyles.Add(new RowStyle(SizeType.Absolute, 22F)); // título
|
||||
this.controleLayout.RowStyles.Add(new RowStyle(SizeType.Absolute, 27F)); // joystick
|
||||
this.controleLayout.RowStyles.Add(new RowStyle(SizeType.Percent, 33.33F)); // vel máxima
|
||||
this.controleLayout.RowStyles.Add(new RowStyle(SizeType.Percent, 33.33F)); // ângulo
|
||||
this.controleLayout.RowStyles.Add(new RowStyle(SizeType.Percent, 33.34F)); // vel dir
|
||||
this.controleLayout.RowStyles.Add(new RowStyle(SizeType.Absolute, 17F)); // tipo
|
||||
this.controleLayout.RowStyles.Add(new RowStyle(SizeType.Absolute, 28F)); // combo
|
||||
this.controleLayout.RowStyles.Add(new RowStyle(SizeType.Absolute, 40F)); // ações
|
||||
|
||||
SetupTitle(this.lblControleTitulo, "CONTROLE DE MOVIMENTO");
|
||||
this.controleLayout.Controls.Add(this.lblControleTitulo, 0, 0);
|
||||
|
|
@ -168,51 +167,31 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
this.controleLayout.Controls.Add(this.cmbJoystick, 1, 1);
|
||||
this.controleLayout.SetColumnSpan(this.cmbJoystick, 2);
|
||||
|
||||
SetupCaption(this.lblVelocidadeMax, "Velocidade máx.");
|
||||
SetupValue(this.lblVelocidadeMaxValor, "68% · 3,4 km/h", AgroBase.Forms.IHM.Controls.HmiTheme.Success);
|
||||
this.controleLayout.Controls.Add(this.lblVelocidadeMax, 0, 2);
|
||||
this.controleLayout.SetColumnSpan(this.lblVelocidadeMax, 2);
|
||||
this.controleLayout.Controls.Add(this.lblVelocidadeMaxValor, 2, 2);
|
||||
SetupSlider(this.sliderVelocidadeMax, AgroBase.Forms.IHM.Controls.HmiTheme.Success, 0, 100, 68);
|
||||
this.controleLayout.Controls.Add(this.sliderVelocidadeMax, 0, 3);
|
||||
SetupParameterSlider(this.sliderVelocidadeMax, "Velocidade máxima", HmiTheme.Success, 0, 100, 30, HmiSliderValueFormat.PercentAndSpeed);
|
||||
this.sliderVelocidadeMax.VelocidadeMaximaKmh = FuncoesMatematicas.CalculaVelocidadeRPM(VariaveisEquipamento.RPM_Max_Roda);
|
||||
this.controleLayout.Controls.Add(this.sliderVelocidadeMax, 0, 2);
|
||||
this.controleLayout.SetColumnSpan(this.sliderVelocidadeMax, 3);
|
||||
|
||||
SetupCaption(this.lblAngulo, "Ângulo direcional");
|
||||
SetupValue(this.lblAnguloValor, "+12°", AgroBase.Forms.IHM.Controls.HmiTheme.Manual);
|
||||
this.controleLayout.Controls.Add(this.lblAngulo, 0, 4);
|
||||
this.controleLayout.SetColumnSpan(this.lblAngulo, 2);
|
||||
this.controleLayout.Controls.Add(this.lblAnguloValor, 2, 4);
|
||||
SetupSlider(this.sliderAngulo, AgroBase.Forms.IHM.Controls.HmiTheme.Manual, 0, 90, 12);
|
||||
this.controleLayout.Controls.Add(this.sliderAngulo, 0, 5);
|
||||
SetupParameterSlider(this.sliderAngulo, "Ângulo direcional", HmiTheme.Manual, 0, 90, 12, HmiSliderValueFormat.Degrees);
|
||||
this.controleLayout.Controls.Add(this.sliderAngulo, 0, 3);
|
||||
this.controleLayout.SetColumnSpan(this.sliderAngulo, 3);
|
||||
|
||||
SetupCaption(this.lblVelocidadeDir, "Velocidade direcional");
|
||||
SetupValue(this.lblVelocidadeDirValor, "55%", AgroBase.Forms.IHM.Controls.HmiTheme.Info);
|
||||
this.controleLayout.Controls.Add(this.lblVelocidadeDir, 0, 6);
|
||||
this.controleLayout.SetColumnSpan(this.lblVelocidadeDir, 2);
|
||||
this.controleLayout.Controls.Add(this.lblVelocidadeDirValor, 2, 6);
|
||||
SetupSlider(this.sliderVelocidadeDir, AgroBase.Forms.IHM.Controls.HmiTheme.Info, 0, 100, 55);
|
||||
this.controleLayout.Controls.Add(this.sliderVelocidadeDir, 0, 7);
|
||||
SetupParameterSlider(this.sliderVelocidadeDir, "Velocidade direcional", HmiTheme.Info, 0, 100, 55, HmiSliderValueFormat.PercentOnly);
|
||||
this.controleLayout.Controls.Add(this.sliderVelocidadeDir, 0, 4);
|
||||
this.controleLayout.SetColumnSpan(this.sliderVelocidadeDir, 3);
|
||||
|
||||
SetupCaption(this.lblTipoMovimento, "Tipo de movimento");
|
||||
this.controleLayout.Controls.Add(this.lblTipoMovimento, 0, 8);
|
||||
this.controleLayout.Controls.Add(this.lblTipoMovimento, 0, 5);
|
||||
this.controleLayout.SetColumnSpan(this.lblTipoMovimento, 3);
|
||||
|
||||
SetupCombo(this.cmbTipoMovimento);
|
||||
this.cmbTipoMovimento.Items.AddRange(new object[]
|
||||
{
|
||||
"Rodas dianteiras",
|
||||
"Rodas traseiras",
|
||||
"Rotacionar no eixo",
|
||||
"Movimento arco",
|
||||
"Movimento lateral",
|
||||
"Movimento diagonal",
|
||||
"Diagnóstico"
|
||||
});
|
||||
this.controleLayout.Controls.Add(this.cmbTipoMovimento, 0, 9);
|
||||
this.cmbTipoMovimento.Items.AddRange(Enum.GetNames(typeof(TipoMovimentoDirecional)));
|
||||
this.controleLayout.Controls.Add(this.cmbTipoMovimento, 0, 6);
|
||||
this.controleLayout.SetColumnSpan(this.cmbTipoMovimento, 3);
|
||||
|
||||
this.controleLayout.Controls.Add(this.acoesLayout, 0, 7);
|
||||
this.controleLayout.SetColumnSpan(this.acoesLayout, 3);
|
||||
|
||||
this.acoesLayout.ColumnCount = 3;
|
||||
this.acoesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 34F));
|
||||
this.acoesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F));
|
||||
|
|
@ -225,12 +204,9 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
this.acoesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.acoesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 1F));
|
||||
|
||||
SetupAction(this.btnControleManual, "MANUAL", AgroBase.Forms.IHM.Controls.HmiTheme.Success);
|
||||
SetupAction(this.btnReferenciar, "ZERAR", AgroBase.Forms.IHM.Controls.HmiTheme.Info);
|
||||
SetupAction(this.btnFreio, "FREIO", AgroBase.Forms.IHM.Controls.HmiTheme.Danger);
|
||||
|
||||
this.controleLayout.Controls.Add(this.acoesLayout, 0, 10);
|
||||
this.controleLayout.SetColumnSpan(this.acoesLayout, 3);
|
||||
SetupAction(this.btnControleManual, "MANUAL", AgroBase.Forms.IHM.Controls.HmiTheme.Info);
|
||||
SetupAction(this.btnReferenciar, "ZERAR", AgroBase.Forms.IHM.Controls.HmiTheme.Disabled);
|
||||
SetupAction(this.btnFreio, "FREIO", AgroBase.Forms.IHM.Controls.HmiTheme.Disabled);
|
||||
|
||||
// wheels
|
||||
this.rodasLayout.Dock = DockStyle.Fill;
|
||||
|
|
@ -448,9 +424,7 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
this.ResumeLayout(false);
|
||||
}
|
||||
|
||||
private static void ConfigurePanel(
|
||||
AgroBase.Forms.IHM.Controls.HmiRoundedPanel panel,
|
||||
System.Windows.Forms.Control child)
|
||||
private static void ConfigurePanel(AgroBase.Forms.IHM.Controls.HmiRoundedPanel panel, System.Windows.Forms.Control child)
|
||||
{
|
||||
panel.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
panel.Controls.Add(child);
|
||||
|
|
@ -461,9 +435,7 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
panel.Padding = new System.Windows.Forms.Padding(7);
|
||||
}
|
||||
|
||||
private static void SetupTitle(
|
||||
System.Windows.Forms.Label label,
|
||||
string text)
|
||||
private static void SetupTitle(System.Windows.Forms.Label label, string text)
|
||||
{
|
||||
label.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
label.BackColor = System.Drawing.Color.Transparent;
|
||||
|
|
@ -474,9 +446,7 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
label.AutoEllipsis = true;
|
||||
}
|
||||
|
||||
private static void SetupCaption(
|
||||
System.Windows.Forms.Label label,
|
||||
string text)
|
||||
private static void SetupCaption(System.Windows.Forms.Label label, string text)
|
||||
{
|
||||
label.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
label.BackColor = System.Drawing.Color.Transparent;
|
||||
|
|
@ -502,8 +472,7 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
label.Padding = Padding.Empty;
|
||||
}
|
||||
|
||||
private static void SetupCombo(
|
||||
System.Windows.Forms.ComboBox combo)
|
||||
private static void SetupCombo(System.Windows.Forms.ComboBox combo)
|
||||
{
|
||||
combo.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
|
|
@ -514,27 +483,25 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
combo.Margin = new System.Windows.Forms.Padding(0, 1, 0, 1);
|
||||
}
|
||||
|
||||
private static void SetupSlider(
|
||||
AgroBase.Forms.IHM.Controls.Operacao.HmiSlider slider,
|
||||
System.Drawing.Color accent,
|
||||
int min,
|
||||
int max,
|
||||
int value)
|
||||
private static void SetupParameterSlider(HmiParameterSliderRow slider, string titulo, Color accent, int minimum, int maximum, int value, HmiSliderValueFormat format)
|
||||
{
|
||||
slider.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
slider.Minimum = min;
|
||||
slider.Maximum = max;
|
||||
slider.Value = value;
|
||||
slider.CompactMode = true;
|
||||
|
||||
slider.Dock = DockStyle.Fill;
|
||||
slider.Margin = Padding.Empty;
|
||||
slider.Padding = Padding.Empty;
|
||||
slider.MinimumSize = Size.Empty;
|
||||
slider.BackColor = Color.Transparent;
|
||||
|
||||
slider.Titulo = titulo;
|
||||
slider.Minimum = minimum;
|
||||
slider.Maximum = maximum;
|
||||
slider.ValueFormat = format;
|
||||
slider.AccentColor = accent;
|
||||
slider.TrackColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
slider.ThumbColor = AgroBase.Forms.IHM.Controls.HmiTheme.Text;
|
||||
slider.Margin = System.Windows.Forms.Padding.Empty;
|
||||
slider.Value = value;
|
||||
}
|
||||
|
||||
private static void SetupAction(
|
||||
HmiSidebarButton button,
|
||||
string text,
|
||||
Color accent)
|
||||
private static void SetupAction(HmiSidebarButton button, string text, Color accent)
|
||||
{
|
||||
button.Dock = DockStyle.Fill;
|
||||
|
||||
|
|
@ -550,14 +517,13 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
button.MaximumSize = Size.Empty;
|
||||
}
|
||||
|
||||
private static void SetupWheel(
|
||||
HmiWheelStatusCard card,
|
||||
string titulo)
|
||||
private static void SetupWheel(HmiWheelStatusCard card, string titulo)
|
||||
{
|
||||
card.Dock = DockStyle.Fill;
|
||||
card.Margin = new Padding(2, 0, 2, 0);
|
||||
card.MinimumSize = Size.Empty;
|
||||
|
||||
card.Tag = titulo;
|
||||
card.Titulo = titulo;
|
||||
|
||||
card.DirecionalSp = "+0,0°";
|
||||
|
|
@ -568,7 +534,9 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
card.MovimentoAtual = "0 rpm";
|
||||
card.StatusMovimento = "Sem freio";
|
||||
|
||||
card.CheckDir.Tag = titulo;
|
||||
card.CheckDir.Checked = true;
|
||||
card.CheckMov.Tag = titulo;
|
||||
card.CheckMov.Checked = true;
|
||||
|
||||
card.CorStatusDirecional = HmiTheme.Success;
|
||||
|
|
@ -577,11 +545,7 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
card.BringToFront();
|
||||
}
|
||||
|
||||
private static void SetupCompactCard(
|
||||
HmiCompactMetricCard card,
|
||||
string titulo,
|
||||
string valor,
|
||||
Color cor)
|
||||
private static void SetupCompactCard(HmiCompactMetricCard card, string titulo, string valor, Color cor)
|
||||
{
|
||||
card.Dock = DockStyle.Fill;
|
||||
card.Titulo = titulo;
|
||||
|
|
@ -591,11 +555,7 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
card.MinimumSize = Size.Empty;
|
||||
}
|
||||
|
||||
private static void SetupTelemetry(
|
||||
AgroBase.Forms.IHM.Controls.Operacao.HmiTelemetryRow row,
|
||||
string icon,
|
||||
string title,
|
||||
string value)
|
||||
private static void SetupTelemetry(AgroBase.Forms.IHM.Controls.Operacao.HmiTelemetryRow row, string icon, string title, string value)
|
||||
{
|
||||
row.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
row.IconText = icon;
|
||||
|
|
@ -603,6 +563,7 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
row.Valor = value;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel rootLayout;
|
||||
|
|
@ -613,15 +574,9 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
private System.Windows.Forms.Label lblControleTitulo;
|
||||
private System.Windows.Forms.Label lblJoystick;
|
||||
private System.Windows.Forms.ComboBox cmbJoystick;
|
||||
private System.Windows.Forms.Label lblVelocidadeMax;
|
||||
private System.Windows.Forms.Label lblVelocidadeMaxValor;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiSlider sliderVelocidadeMax;
|
||||
private System.Windows.Forms.Label lblAngulo;
|
||||
private System.Windows.Forms.Label lblAnguloValor;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiSlider sliderAngulo;
|
||||
private System.Windows.Forms.Label lblVelocidadeDir;
|
||||
private System.Windows.Forms.Label lblVelocidadeDirValor;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiSlider sliderVelocidadeDir;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow sliderVelocidadeMax;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow sliderAngulo;
|
||||
private AgroBase.Forms.IHM.Operacao.Parametros.Controls.HmiParameterSliderRow sliderVelocidadeDir;
|
||||
private System.Windows.Forms.Label lblTipoMovimento;
|
||||
private System.Windows.Forms.ComboBox cmbTipoMovimento;
|
||||
private System.Windows.Forms.TableLayoutPanel acoesLayout;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,29 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using AgroBase.Forms.IHM.Controls.Operacao;
|
||||
using AgroBase.Models;
|
||||
using AgroBase.Models.Modules;
|
||||
using AgroBase.Models.Operacoes;
|
||||
using AgroBase.Models.Operadores;
|
||||
using AgroBase.Services.Operadores;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using static AgroBase.Models.Enums;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao
|
||||
{
|
||||
public partial class ucOperacaoMovimentacao : UserControl
|
||||
{
|
||||
private bool _modoManualAtivado = false;
|
||||
private bool _freioAtivado = false;
|
||||
private bool _atualizandoSlider = false;
|
||||
private bool _requisitandoCameraFrame;
|
||||
private bool _controleDescartado;
|
||||
OperacaoModel op => Variaveis.OperacaoEmAndamento;
|
||||
|
||||
public ucOperacaoMovimentacao()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
|
@ -21,8 +40,6 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
sliderAngulo.Value = 12;
|
||||
sliderVelocidadeDir.Value = 55;
|
||||
|
||||
AtualizarLabelsSliders();
|
||||
|
||||
telemetryVelocidade.CorValor = HmiTheme.Info;
|
||||
telemetryTensao.CorValor = HmiTheme.Success;
|
||||
telemetryCorrente.CorValor = HmiTheme.Warning;
|
||||
|
|
@ -55,39 +72,377 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
{
|
||||
sliderVelocidadeMax.ValueChanged += delegate
|
||||
{
|
||||
AtualizarLabelsSliders();
|
||||
if (!_modoManualAtivado)
|
||||
return;
|
||||
|
||||
if (op?.Controle == null)
|
||||
return;
|
||||
|
||||
op.Controle.PercentualVelocidadeSP = sliderVelocidadeMax.Value;
|
||||
};
|
||||
sliderVelocidadeMax.KeyDown += delegate { _atualizandoSlider = true; };
|
||||
sliderVelocidadeMax.KeyUp += delegate { _atualizandoSlider = false; };
|
||||
|
||||
sliderAngulo.ValueChanged += delegate
|
||||
{
|
||||
AtualizarLabelsSliders();
|
||||
if (!_modoManualAtivado)
|
||||
return;
|
||||
|
||||
if (op?.Controle == null)
|
||||
return;
|
||||
|
||||
op.Controle.Angulo = sliderAngulo.Value;
|
||||
};
|
||||
sliderAngulo.KeyDown += delegate { _atualizandoSlider = true; };
|
||||
sliderAngulo.KeyUp += delegate { _atualizandoSlider = false; };
|
||||
|
||||
sliderVelocidadeDir.ValueChanged += delegate
|
||||
{
|
||||
AtualizarLabelsSliders();
|
||||
if (!_modoManualAtivado)
|
||||
return;
|
||||
|
||||
if (op?.Parametros?.Controle == null)
|
||||
return;
|
||||
|
||||
op.Parametros.Controle.DirVelocidadeMovimento = sliderVelocidadeDir.Value;
|
||||
};
|
||||
sliderVelocidadeDir.KeyDown += delegate { _atualizandoSlider = true; };
|
||||
sliderVelocidadeDir.KeyUp += delegate { _atualizandoSlider = false; };
|
||||
|
||||
btnControleManual.Click += BtnControleManual_Click;
|
||||
btnReferenciar.Click += BtnReferenciar_Click;
|
||||
btnFreio.Click += BtnFreio_Click;
|
||||
|
||||
cmbTipoMovimento.SelectedIndexChanged += CmbTipoMovimento_SelectedIndexChanged;
|
||||
|
||||
cardET.CheckDir.CheckedChanged += CheckDir_CheckedChanged;
|
||||
cardET.CheckMov.CheckedChanged += CheckMov_CheckedChanged;
|
||||
cardDT.CheckDir.CheckedChanged += CheckDir_CheckedChanged;
|
||||
cardDT.CheckMov.CheckedChanged += CheckMov_CheckedChanged;
|
||||
cardEF.CheckDir.CheckedChanged += CheckDir_CheckedChanged;
|
||||
cardEF.CheckMov.CheckedChanged += CheckMov_CheckedChanged;
|
||||
cardDF.CheckDir.CheckedChanged += CheckDir_CheckedChanged;
|
||||
cardDF.CheckMov.CheckedChanged += CheckMov_CheckedChanged;
|
||||
}
|
||||
|
||||
private void AtualizarLabelsSliders()
|
||||
private void CheckMov_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
double velocidadeKmh =
|
||||
sliderVelocidadeMax.Value * 0.05;
|
||||
if (!_modoManualAtivado)
|
||||
return;
|
||||
|
||||
lblVelocidadeMaxValor.Text =
|
||||
sliderVelocidadeMax.Value +
|
||||
"% · " +
|
||||
velocidadeKmh.ToString("0.0") +
|
||||
" km/h";
|
||||
if (!(op?.DispMvd?.Dados?.Modulos?.Any() ?? false))
|
||||
return;
|
||||
|
||||
lblAnguloValor.Text =
|
||||
"+" +
|
||||
sliderAngulo.Value +
|
||||
"°";
|
||||
var chb = sender as CheckBox;
|
||||
|
||||
lblVelocidadeDirValor.Text =
|
||||
sliderVelocidadeDir.Value +
|
||||
"%";
|
||||
var mod = op?.DispMvd?.Dados?.Modulos?.FirstOrDefault(x => x.Modulo_ID == chb.Tag.ToString())?.MovMotor;
|
||||
if (mod == null)
|
||||
return;
|
||||
|
||||
mod.Comandar = chb.Checked;
|
||||
}
|
||||
|
||||
private void CheckDir_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (!_modoManualAtivado)
|
||||
return;
|
||||
|
||||
if (!(op?.DispMvd?.Dados?.Modulos?.Any() ?? false))
|
||||
return;
|
||||
|
||||
var chb = sender as CheckBox;
|
||||
|
||||
var mod = op?.DispMvd?.Dados?.Modulos?.FirstOrDefault(x => x.Modulo_ID == chb.Tag.ToString())?.DirMotor;
|
||||
if (mod == null)
|
||||
return;
|
||||
|
||||
mod.Comandar = chb.Checked;
|
||||
}
|
||||
|
||||
private void CmbTipoMovimento_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (!_modoManualAtivado)
|
||||
return;
|
||||
|
||||
if (op?.Controle == null)
|
||||
return;
|
||||
|
||||
var mods = op?.DispMvd?.Dados?.Modulos;
|
||||
|
||||
op.Controle.DefinirTipoMovimento((TipoMovimentoDirecional)cmbTipoMovimento.SelectedIndex, mods);
|
||||
|
||||
AtualizarDadosRodas(cardET, mods, forcar: true);
|
||||
AtualizarDadosRodas(cardDT, mods, forcar: true);
|
||||
AtualizarDadosRodas(cardEF, mods, forcar: true);
|
||||
AtualizarDadosRodas(cardDF, mods, forcar: true);
|
||||
}
|
||||
|
||||
private void BtnFreio_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!_modoManualAtivado)
|
||||
return;
|
||||
|
||||
if (op?.Controle == null)
|
||||
return;
|
||||
|
||||
_freioAtivado = !_freioAtivado;
|
||||
btnFreio.AccentColor = _freioAtivado ? HmiTheme.Danger : HmiTheme.Info;
|
||||
btnFreio.BorderColor = _freioAtivado ? HmiTheme.Danger : HmiTheme.Info;
|
||||
|
||||
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.Bolinha, !_freioAtivado, ForcarComando: true);
|
||||
}
|
||||
|
||||
private void BtnReferenciar_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!_modoManualAtivado)
|
||||
return;
|
||||
|
||||
if (op?.DispMvd == null)
|
||||
return;
|
||||
|
||||
GeneralJoystick.ProcessarDadosControle(BotoesJoystick.R3, false, ForcarComando: true);
|
||||
}
|
||||
|
||||
private void BtnControleManual_Click(object sender, EventArgs e)
|
||||
{
|
||||
_modoManualAtivado = !_modoManualAtivado;
|
||||
btnControleManual.AccentColor = _modoManualAtivado ? HmiTheme.Danger : HmiTheme.Info;
|
||||
btnControleManual.BorderColor = _modoManualAtivado ? HmiTheme.Danger : HmiTheme.Info;
|
||||
|
||||
btnReferenciar.AccentColor = _modoManualAtivado ? HmiTheme.Info : HmiTheme.Disabled;
|
||||
btnReferenciar.BackColor = _modoManualAtivado ? HmiTheme.Info : HmiTheme.Disabled;
|
||||
btnFreio.AccentColor = _modoManualAtivado ? HmiTheme.Info : HmiTheme.Disabled;
|
||||
btnFreio.BackColor = _modoManualAtivado ? HmiTheme.Info : HmiTheme.Disabled;
|
||||
|
||||
op.Parametros.Controle.ControleManualAcionado = _modoManualAtivado;
|
||||
}
|
||||
|
||||
public void AtualizarDadosTela()
|
||||
{
|
||||
var dados = op?.Sensoriamento;
|
||||
var mods = op?.DispMvd?.Dados?.Modulos;
|
||||
|
||||
AtualizarDadosControle(op?.Controle, op?.Parametros?.Controle);
|
||||
|
||||
AtualizarDadosRodas(cardET, mods);
|
||||
AtualizarDadosRodas(cardDT, mods);
|
||||
AtualizarDadosRodas(cardEF, mods);
|
||||
AtualizarDadosRodas(cardDF, mods);
|
||||
|
||||
AtualizarDadosCamera(dados?.Cameras?.FirstOrDefault(x => x.dispositivo == Enums.T_Code.Snr), dados?.OperadorSaude?.ModulosSaude?.FirstOrDefault(x => x.modulo == T_Code.Snr)?.saude ?? 0);
|
||||
|
||||
AtualizarDadosSonar(dados.OperadorVisual);
|
||||
|
||||
AtualizarDadosImu(dados.IMU);
|
||||
|
||||
AtualizarDadosTelemetria(dados);
|
||||
}
|
||||
|
||||
public void AtualizarDadosControle(OperacaoControleModel controle, OperacaoParametrosControleModel parametros)
|
||||
{
|
||||
AtualizarListaJoysticks();
|
||||
|
||||
if (_atualizandoSlider)
|
||||
return;
|
||||
|
||||
sliderVelocidadeMax.VelocidadeMaximaKmh = FuncoesMatematicas.CalculaVelocidadeRPM(VariaveisEquipamento.RPM_Max_Roda);
|
||||
sliderVelocidadeMax.Value = (int)Limitar(controle?.PercentualVelocidadeSP ?? 0, sliderVelocidadeMax.Minimum, sliderVelocidadeMax.Maximum);
|
||||
sliderAngulo.Value = (int)Limitar(controle?.Angulo ?? 0, sliderAngulo.Minimum, sliderAngulo.Maximum);
|
||||
sliderVelocidadeDir.Value = (int)Limitar(parametros?.DirVelocidadeMovimento ?? 0, sliderVelocidadeDir.Minimum, sliderVelocidadeDir.Maximum);
|
||||
}
|
||||
|
||||
private void AtualizarListaJoysticks()
|
||||
{
|
||||
string joystickSelecionado = cmbJoystick.SelectedItem as string;
|
||||
string[] itemsAntigos = cmbJoystick.Items.Cast<string>().ToArray();
|
||||
GeneralJoystick.AtualizaDispositivo();
|
||||
string[] itemsNovos = GeneralJoystick.JoysticksConectados.ToArray();
|
||||
|
||||
if (itemsAntigos.SequenceEqual(itemsNovos))
|
||||
return;
|
||||
|
||||
cmbJoystick.BeginUpdate();
|
||||
|
||||
try
|
||||
{
|
||||
cmbJoystick.Items.Clear();
|
||||
cmbJoystick.Items.AddRange(itemsNovos);
|
||||
|
||||
string joystickConectado = GeneralJoystick.JoystickConectado?.Information?.InstanceName;
|
||||
|
||||
int indice = -1;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(joystickConectado))
|
||||
indice = cmbJoystick.Items.IndexOf(joystickConectado);
|
||||
|
||||
if (indice < 0 && !string.IsNullOrWhiteSpace(joystickSelecionado))
|
||||
indice = cmbJoystick.Items.IndexOf(joystickSelecionado);
|
||||
|
||||
if (indice < 0 && cmbJoystick.Items.Count > 0)
|
||||
indice = 0;
|
||||
|
||||
cmbJoystick.SelectedIndex = indice;
|
||||
}
|
||||
finally
|
||||
{
|
||||
cmbJoystick.EndUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
private void AtualizarDadosRodas(HmiWheelStatusCard card, List<ModuloMvdModel> Mods, bool forcar = false)
|
||||
{
|
||||
if (_modoManualAtivado && !forcar)
|
||||
return;
|
||||
|
||||
var Dir = Mods.FirstOrDefault(x => x.Modulo_ID == card.Tag.ToString())?.DirMotor;
|
||||
var Mov = Mods.FirstOrDefault(x => x.Modulo_ID == card.Tag.ToString())?.MovMotor;
|
||||
|
||||
card.AtualizarDados(
|
||||
dir_em_uso: Dir?.Comandar ?? false,
|
||||
dir_ang_sp: Dir?.Angulo_SP ?? 0,
|
||||
dir_ang_at: Dir?.AnguloReal ?? 0,
|
||||
dir_sentido: Dir?.SentidoReal ?? Sentido.Parado,
|
||||
mov_em_uso: Mov?.Comandar ?? false,
|
||||
mov_vel_sp: Mov?.RPM_SP ?? 0,
|
||||
mov_vel_at: Mov?.RPM_Roda ?? 0,
|
||||
mov_freio: Mov?.UltimoFreioSP ?? false
|
||||
);
|
||||
}
|
||||
|
||||
public async void AtualizarDadosCamera(CameraWorkerItemModel dados, double saude)
|
||||
{
|
||||
lblCameraStatus.Text = $"FPS {dados?.fps ?? 0:F0} · {dados?.stream_kbps ?? 0:F1} MB/s · Saúde {saude:F0}%";
|
||||
|
||||
if (!_requisitandoCameraFrame)
|
||||
_ = RequisitarCameraFrameAsync();
|
||||
}
|
||||
|
||||
private async Task RequisitarCameraFrameAsync()
|
||||
{
|
||||
if (_requisitandoCameraFrame || _controleDescartado)
|
||||
return;
|
||||
|
||||
_requisitandoCameraFrame = true;
|
||||
|
||||
try
|
||||
{
|
||||
TipoFrameCamera tipoFrame = (TipoFrameCamera)cmbTipoFrame.SelectedIndex;
|
||||
|
||||
var frame = await VisualWorkerService.GetCameraFrame(tipoFrame);
|
||||
|
||||
if (_controleDescartado || frame == null)
|
||||
return;
|
||||
|
||||
Image imagemRecebida = frame.image();
|
||||
|
||||
if (imagemRecebida == null)
|
||||
return;
|
||||
|
||||
// Garante que o PictureBox receba uma imagem independente
|
||||
// de streams ou buffers internos do frame.
|
||||
Image imagemSegura;
|
||||
|
||||
using (imagemRecebida)
|
||||
{
|
||||
imagemSegura = new Bitmap(imagemRecebida);
|
||||
}
|
||||
|
||||
AtualizarImagemPainel(picCamera, imagemSegura);
|
||||
}
|
||||
catch (OutOfMemoryException ex)
|
||||
{
|
||||
// Em System.Drawing isso também pode significar
|
||||
// imagem ou stream inválido, não só falta real de RAM.
|
||||
Variaveis.MostrarLog("[IHM][Câmera] Frame inválido ou erro de memória: " + ex.Message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Variaveis.MostrarLog("[IHM][Câmera] Erro ao obter frame: " + ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_requisitandoCameraFrame = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void AtualizarImagemPainel(PictureBox pictureBox, Image novaImagem)
|
||||
{
|
||||
if (pictureBox == null)
|
||||
{
|
||||
novaImagem?.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
if (pictureBox.IsDisposed || pictureBox.Disposing || _controleDescartado)
|
||||
{
|
||||
novaImagem?.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
if (pictureBox.InvokeRequired)
|
||||
{
|
||||
try
|
||||
{
|
||||
pictureBox.BeginInvoke(new Action<PictureBox, Image>(AtualizarImagemPainel), pictureBox, novaImagem);
|
||||
}
|
||||
catch
|
||||
{
|
||||
novaImagem?.Dispose();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Image imagemAnterior = pictureBox.Image;
|
||||
pictureBox.Image = novaImagem;
|
||||
imagemAnterior?.Dispose();
|
||||
}
|
||||
|
||||
private void AtualizarDadosSonar(VisualWorkerModel dados)
|
||||
{
|
||||
cardSonarModo.Valor = dados?.Analises?.matriz_confianca?.block?.decision?.mode ?? "N/A";
|
||||
cardSonarFator.Valor = (dados?.Analises?.matriz_confianca?.block?.decision?.v_max_sugerida_mps ?? 0f).ToString("F2") + "%";
|
||||
cardSonarProximo.Valor = (dados?.Analises?.matriz_confianca?.block?.decision?.dist_necessaria ?? 0f).ToString("F2") + " m";
|
||||
cardSonarLivreEsq.Valor = "0,00 m";
|
||||
cardSonarLivreDir.Valor = "0,00 m";
|
||||
cardSonarCorredor.Valor = (dados?.Analises?.segmentacao?.status_corredor ?? StatusCarroMapa.Indefinido).ToString();
|
||||
}
|
||||
|
||||
private void AtualizarDadosImu(ModuloIMUModel dados)
|
||||
{
|
||||
cardImuModo.Valor = dados?.risk_level ?? "N/A";
|
||||
cardImuFator.Valor = (dados?.velocidade_factor ?? 0f).ToString("F2");
|
||||
cardImuMotivo.Valor = string.Join(", ", (dados?.motivos_risco ?? new System.Collections.Generic.List<string>()));
|
||||
|
||||
attitudeIndicator.FrontalDeg = dados.RollSeguro;
|
||||
attitudeIndicator.LateralDeg = dados.PitchSeguro;
|
||||
}
|
||||
|
||||
private void AtualizarDadosTelemetria(OperacaoSensoriamentoConjuntoModel dados)
|
||||
{
|
||||
double velocidadeKmh = FuncoesMatematicas.ConverteMsParaKmh(dados?.Movimentacao?.VelocidadeMediaMs ?? 0);
|
||||
TimeSpan tempoMovimento = dados?.Movimentacao?.TempoMovimento ?? TimeSpan.Zero;
|
||||
double autonomiaMinutos = dados?.Bateria?.TempoEstimadoRestanteMinutos ?? 0;
|
||||
TimeSpan tempoAutonomia = TimeSpan.FromMinutes(Math.Max(0, autonomiaMinutos));
|
||||
|
||||
telemetryVelocidade.Valor = $"{velocidadeKmh:F2} km/h";
|
||||
telemetryTensao.Valor = $"{dados?.Bateria?.TensaoInstantanea ?? 0:F2} V";
|
||||
telemetryCorrente.Valor = $"{dados?.Bateria?.CorrenteInstantanea ?? 0:F2} A";
|
||||
telemetryPotencia.Valor = $"{dados?.Bateria?.PotenciaInstantanea ?? 0:F2} W";
|
||||
telemetryRpm.Valor = $"{dados?.Movimentacao?.RPMRodaMedio ?? 0:F0} rpm";
|
||||
telemetryDistancia.Valor = $"{dados?.Movimentacao?.DistanciaPercorridaTotal ?? 0:F2} m";
|
||||
telemetryTempo.Valor = tempoMovimento.ToString(@"hh\:mm\:ss");
|
||||
telemetryVelMedia.Valor = $"{velocidadeKmh:F2} km/h";
|
||||
telemetryAutonomiaM.Valor = $"{dados?.Bateria?.DistanciaEstimadaRestanteMetros ?? 0:F0} m";
|
||||
telemetryAutonomiaTempo.Valor = tempoAutonomia.ToString(@"hh\:mm\:ss");
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static double Limitar(double valor, double minimo, double maximo)
|
||||
{
|
||||
return Math.Max(minimo, Math.Min(maximo, valor));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,11 +6,8 @@
|
|||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing &&
|
||||
components != null)
|
||||
{
|
||||
if (disposing && components != null)
|
||||
components.Dispose();
|
||||
}
|
||||
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
|
@ -20,514 +17,199 @@
|
|||
private void InitializeComponent()
|
||||
{
|
||||
this.rootLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.leftLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.tabsLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.btnAbaMovimento = new System.Windows.Forms.Button();
|
||||
this.btnAbaDirecional = new System.Windows.Forms.Button();
|
||||
this.btnAbaAtuador = new System.Windows.Forms.Button();
|
||||
this.btnAbaMapa = new System.Windows.Forms.Button();
|
||||
|
||||
this.pnlGeral = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.geralLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblGeralTitulo = new System.Windows.Forms.Label();
|
||||
this.lblModoOperacao = new System.Windows.Forms.Label();
|
||||
this.btnModoManual = new System.Windows.Forms.Button();
|
||||
this.btnModoMapaGps = new System.Windows.Forms.Button();
|
||||
this.toggleRegistrarDados = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.pnlDescricaoAba = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.lblDescricaoAba = new System.Windows.Forms.Label();
|
||||
|
||||
this.pnlMovimento = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.movimentoLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblMovimentoTitulo = new System.Windows.Forms.Label();
|
||||
this.movTogglesLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.toggleMovAutomatico = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.toggleMovSonar = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.toggleParadaObstaculo = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.toggleMovImu = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.toggleParadaInclinacao = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.toggleFrenagemParar = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.movValuesLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.paramVelSemErvas = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
this.paramVelComErvas = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
|
||||
this.pnlDirecional = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.direcionalLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblDirecionalTitulo = new System.Windows.Forms.Label();
|
||||
this.dirTogglesLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.toggleDirAutomatico = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.toggleDirSonar = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.toggleDirImu = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.toggleImuPrefereArco = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.dirValuesLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.paramAnguloMaximo = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
this.paramVelMovimentoDir = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
this.pnlTipoControle = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.tipoControleLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblTipoControle = new System.Windows.Forms.Label();
|
||||
this.btnControleMpc = new System.Windows.Forms.Button();
|
||||
this.btnControlePid = new System.Windows.Forms.Button();
|
||||
|
||||
this.pnlAtuador = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.atuadorLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblAtuadorTitulo = new System.Windows.Forms.Label();
|
||||
this.togglePulverizadorAutomatico = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow();
|
||||
this.cmbModoAgitador = new System.Windows.Forms.ComboBox();
|
||||
this.atuadorValuesLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.paramBicosEmUso = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
this.paramCapacidadeReservatorio = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
this.paramPressaoLinha = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
this.paramTelaIniciar = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
this.paramAlturaArea = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
this.paramErvasOn = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
this.paramErvasOff = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
|
||||
this.pnlMpc = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.mpcLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblMpcTitulo = new System.Windows.Forms.Label();
|
||||
this.paramHorizonte = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
this.paramAnteciparFim = new AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox();
|
||||
|
||||
this.rightLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.pnlMapa = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.mapLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.mapHeaderLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblMapaTitulo = new System.Windows.Forms.Label();
|
||||
this.btnMapaBonito = new System.Windows.Forms.Button();
|
||||
this.btnMapaDinamico = new System.Windows.Forms.Button();
|
||||
this.pnlMapaVisual = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.lblMapaPlaceholder = new System.Windows.Forms.Label();
|
||||
this.lblMapaAjuda = new System.Windows.Forms.Label();
|
||||
this.pnlConteudo = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
|
||||
this.footerPanel = new AgroBase.Forms.IHM.Controls.HmiRoundedPanel();
|
||||
this.footerLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.btnAplicarAtual = new AgroBase.Forms.IHM.Controls.HmiSidebarButton();
|
||||
this.btnSalvarParametros = new AgroBase.Forms.IHM.Controls.HmiSidebarButton();
|
||||
|
||||
this.lblModoOperacao = new System.Windows.Forms.Label();
|
||||
this.cmbModoOperacao = new System.Windows.Forms.ComboBox();
|
||||
|
||||
this.posProcessamentoLayout = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.lblPosProcessamento = new System.Windows.Forms.Label();
|
||||
this.checkPosProcessamento = new System.Windows.Forms.CheckBox();
|
||||
|
||||
this.btnRedefinir = new AgroBase.Forms.IHM.Controls.HmiSidebarButton();
|
||||
this.btnSalvar = new AgroBase.Forms.IHM.Controls.HmiSidebarButton();
|
||||
|
||||
this.rootLayout.SuspendLayout();
|
||||
this.leftLayout.SuspendLayout();
|
||||
this.pnlGeral.SuspendLayout();
|
||||
this.geralLayout.SuspendLayout();
|
||||
this.pnlMovimento.SuspendLayout();
|
||||
this.movimentoLayout.SuspendLayout();
|
||||
this.movTogglesLayout.SuspendLayout();
|
||||
this.movValuesLayout.SuspendLayout();
|
||||
this.pnlDirecional.SuspendLayout();
|
||||
this.direcionalLayout.SuspendLayout();
|
||||
this.dirTogglesLayout.SuspendLayout();
|
||||
this.dirValuesLayout.SuspendLayout();
|
||||
this.pnlTipoControle.SuspendLayout();
|
||||
this.tipoControleLayout.SuspendLayout();
|
||||
this.pnlAtuador.SuspendLayout();
|
||||
this.atuadorLayout.SuspendLayout();
|
||||
this.atuadorValuesLayout.SuspendLayout();
|
||||
this.pnlMpc.SuspendLayout();
|
||||
this.mpcLayout.SuspendLayout();
|
||||
this.rightLayout.SuspendLayout();
|
||||
this.pnlMapa.SuspendLayout();
|
||||
this.mapLayout.SuspendLayout();
|
||||
this.mapHeaderLayout.SuspendLayout();
|
||||
this.pnlMapaVisual.SuspendLayout();
|
||||
this.tabsLayout.SuspendLayout();
|
||||
this.pnlDescricaoAba.SuspendLayout();
|
||||
this.footerPanel.SuspendLayout();
|
||||
this.footerLayout.SuspendLayout();
|
||||
this.posProcessamentoLayout.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
|
||||
// root
|
||||
this.rootLayout.BackColor =
|
||||
AgroBase.Forms.IHM.Controls.HmiTheme.Background;
|
||||
// rootLayout
|
||||
this.rootLayout.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.Background;
|
||||
this.rootLayout.ColumnCount = 1;
|
||||
this.rootLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.rootLayout.Controls.Add(this.tabsLayout, 0, 0);
|
||||
this.rootLayout.Controls.Add(this.pnlDescricaoAba, 0, 1);
|
||||
this.rootLayout.Controls.Add(this.pnlConteudo, 0, 2);
|
||||
this.rootLayout.Controls.Add(this.footerPanel, 0, 3);
|
||||
this.rootLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.rootLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.rootLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.rootLayout.RowCount = 4;
|
||||
this.rootLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F));
|
||||
this.rootLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
|
||||
this.rootLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.rootLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 62F));
|
||||
|
||||
this.rootLayout.ColumnCount = 2;
|
||||
// tabsLayout
|
||||
this.tabsLayout.BackColor = System.Drawing.Color.Transparent;
|
||||
this.tabsLayout.ColumnCount = 4;
|
||||
this.tabsLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tabsLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tabsLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tabsLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tabsLayout.Controls.Add(this.btnAbaMovimento, 0, 0);
|
||||
this.tabsLayout.Controls.Add(this.btnAbaDirecional, 1, 0);
|
||||
this.tabsLayout.Controls.Add(this.btnAbaAtuador, 2, 0);
|
||||
this.tabsLayout.Controls.Add(this.btnAbaMapa, 3, 0);
|
||||
this.tabsLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tabsLayout.Margin = new System.Windows.Forms.Padding(0, 0, 0, 3);
|
||||
this.tabsLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.tabsLayout.RowCount = 1;
|
||||
this.tabsLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
this.rootLayout.ColumnStyles.Add(
|
||||
new System.Windows.Forms.ColumnStyle(
|
||||
System.Windows.Forms.SizeType.Percent,
|
||||
52F));
|
||||
SetupTabButton(this.btnAbaMovimento, "↔ Movimento");
|
||||
SetupTabButton(this.btnAbaDirecional, "◉ Direcional");
|
||||
SetupTabButton(this.btnAbaAtuador, "♨ Atuador");
|
||||
SetupTabButton(this.btnAbaMapa, "⌖ Mapa e Navegação");
|
||||
|
||||
this.rootLayout.ColumnStyles.Add(
|
||||
new System.Windows.Forms.ColumnStyle(
|
||||
System.Windows.Forms.SizeType.Percent,
|
||||
48F));
|
||||
// pnlDescricaoAba
|
||||
this.pnlDescricaoAba.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
this.pnlDescricaoAba.Controls.Add(this.lblDescricaoAba);
|
||||
this.pnlDescricaoAba.CornerRadius = 7;
|
||||
this.pnlDescricaoAba.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlDescricaoAba.FillColor = AgroBase.Forms.IHM.Controls.HmiTheme.SurfaceRaised;
|
||||
this.pnlDescricaoAba.Margin = new System.Windows.Forms.Padding(0, 0, 0, 3);
|
||||
this.pnlDescricaoAba.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0);
|
||||
|
||||
this.rootLayout.Controls.Add(
|
||||
this.leftLayout,
|
||||
0,
|
||||
0);
|
||||
// lblDescricaoAba
|
||||
this.lblDescricaoAba.AutoEllipsis = true;
|
||||
this.lblDescricaoAba.BackColor = System.Drawing.Color.Transparent;
|
||||
this.lblDescricaoAba.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lblDescricaoAba.Font = new System.Drawing.Font("Segoe UI", 7.2F);
|
||||
this.lblDescricaoAba.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
this.lblDescricaoAba.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.lblDescricaoAba.Text = "Automação, assistências e velocidades de deslocamento";
|
||||
this.lblDescricaoAba.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
|
||||
this.rootLayout.Controls.Add(
|
||||
this.rightLayout,
|
||||
1,
|
||||
0);
|
||||
// pnlConteudo
|
||||
this.pnlConteudo.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
this.pnlConteudo.CornerRadius = 9;
|
||||
this.pnlConteudo.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlConteudo.FillColor = AgroBase.Forms.IHM.Controls.HmiTheme.Surface;
|
||||
this.pnlConteudo.Margin = new System.Windows.Forms.Padding(0, 0, 0, 3);
|
||||
this.pnlConteudo.Padding = new System.Windows.Forms.Padding(6);
|
||||
|
||||
this.rootLayout.Dock =
|
||||
System.Windows.Forms.DockStyle.Fill;
|
||||
// footerPanel
|
||||
this.footerPanel.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
this.footerPanel.Controls.Add(this.footerLayout);
|
||||
this.footerPanel.CornerRadius = 9;
|
||||
this.footerPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.footerPanel.FillColor = AgroBase.Forms.IHM.Controls.HmiTheme.Surface;
|
||||
this.footerPanel.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.footerPanel.Padding = new System.Windows.Forms.Padding(8, 6, 8, 6);
|
||||
|
||||
this.rootLayout.Margin =
|
||||
new System.Windows.Forms.Padding(0);
|
||||
|
||||
this.rootLayout.Padding =
|
||||
new System.Windows.Forms.Padding(0);
|
||||
|
||||
// left
|
||||
this.leftLayout.BackColor =
|
||||
System.Drawing.Color.Transparent;
|
||||
|
||||
this.leftLayout.ColumnCount = 1;
|
||||
|
||||
this.leftLayout.ColumnStyles.Add(
|
||||
new System.Windows.Forms.ColumnStyle(
|
||||
System.Windows.Forms.SizeType.Percent,
|
||||
100F));
|
||||
|
||||
this.leftLayout.Controls.Add(
|
||||
this.pnlGeral,
|
||||
0,
|
||||
0);
|
||||
|
||||
this.leftLayout.Controls.Add(
|
||||
this.pnlMovimento,
|
||||
0,
|
||||
1);
|
||||
|
||||
this.leftLayout.Controls.Add(
|
||||
this.pnlDirecional,
|
||||
0,
|
||||
2);
|
||||
|
||||
this.leftLayout.Controls.Add(
|
||||
this.pnlAtuador,
|
||||
0,
|
||||
3);
|
||||
|
||||
this.leftLayout.Controls.Add(
|
||||
this.pnlMpc,
|
||||
0,
|
||||
4);
|
||||
|
||||
this.leftLayout.Dock =
|
||||
System.Windows.Forms.DockStyle.Fill;
|
||||
|
||||
this.leftLayout.Margin =
|
||||
new System.Windows.Forms.Padding(
|
||||
0,
|
||||
0,
|
||||
3,
|
||||
0);
|
||||
|
||||
this.leftLayout.RowCount = 5;
|
||||
|
||||
this.leftLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14F));
|
||||
this.leftLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.leftLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 22F));
|
||||
this.leftLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 27F));
|
||||
this.leftLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12F));
|
||||
|
||||
ConfigurePanel(this.pnlGeral, this.geralLayout);
|
||||
ConfigurePanel(this.pnlMovimento, this.movimentoLayout);
|
||||
ConfigurePanel(this.pnlDirecional, this.direcionalLayout);
|
||||
ConfigurePanel(this.pnlAtuador, this.atuadorLayout);
|
||||
ConfigurePanel(this.pnlMpc, this.mpcLayout);
|
||||
|
||||
// geral
|
||||
this.geralLayout.ColumnCount = 4;
|
||||
this.geralLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 23F));
|
||||
this.geralLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 19F));
|
||||
this.geralLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 19F));
|
||||
this.geralLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 39F));
|
||||
this.geralLayout.Controls.Add(this.lblGeralTitulo, 0, 0);
|
||||
this.geralLayout.Controls.Add(this.lblModoOperacao, 0, 1);
|
||||
this.geralLayout.Controls.Add(this.btnModoManual, 1, 1);
|
||||
this.geralLayout.Controls.Add(this.btnModoMapaGps, 2, 1);
|
||||
this.geralLayout.Controls.Add(this.toggleRegistrarDados, 3, 1);
|
||||
this.geralLayout.SetColumnSpan(this.lblGeralTitulo, 4);
|
||||
this.geralLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.geralLayout.RowCount = 2;
|
||||
this.geralLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));
|
||||
this.geralLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
SetupTitle(this.lblGeralTitulo, "1 GERAL DA OPERAÇÃO");
|
||||
|
||||
this.lblModoOperacao.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lblModoOperacao.Text = "Modo de operação";
|
||||
this.lblModoOperacao.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
this.lblModoOperacao.Font = new System.Drawing.Font("Segoe UI", 7F);
|
||||
this.lblModoOperacao.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
|
||||
SetupChoiceButton(this.btnModoManual, "Manual");
|
||||
SetupChoiceButton(this.btnModoMapaGps, "MapaGPS");
|
||||
|
||||
this.toggleRegistrarDados.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleRegistrarDados.Titulo = "Registrar dados para pós-processamento";
|
||||
|
||||
// movimento
|
||||
this.movimentoLayout.ColumnCount = 2;
|
||||
this.movimentoLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 58F));
|
||||
this.movimentoLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 42F));
|
||||
this.movimentoLayout.Controls.Add(this.lblMovimentoTitulo, 0, 0);
|
||||
this.movimentoLayout.Controls.Add(this.movTogglesLayout, 0, 1);
|
||||
this.movimentoLayout.Controls.Add(this.movValuesLayout, 1, 1);
|
||||
this.movimentoLayout.SetColumnSpan(this.lblMovimentoTitulo, 2);
|
||||
this.movimentoLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.movimentoLayout.RowCount = 2;
|
||||
this.movimentoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));
|
||||
this.movimentoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
SetupTitle(this.lblMovimentoTitulo, "2 MOVIMENTO");
|
||||
|
||||
this.movTogglesLayout.ColumnCount = 2;
|
||||
this.movTogglesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.movTogglesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.movTogglesLayout.Controls.Add(this.toggleMovAutomatico, 0, 0);
|
||||
this.movTogglesLayout.Controls.Add(this.toggleMovImu, 1, 0);
|
||||
this.movTogglesLayout.Controls.Add(this.toggleMovSonar, 0, 1);
|
||||
this.movTogglesLayout.Controls.Add(this.toggleParadaInclinacao, 1, 1);
|
||||
this.movTogglesLayout.Controls.Add(this.toggleParadaObstaculo, 0, 2);
|
||||
this.movTogglesLayout.Controls.Add(this.toggleFrenagemParar, 1, 2);
|
||||
this.movTogglesLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.movTogglesLayout.RowCount = 3;
|
||||
this.movTogglesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||
this.movTogglesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||
this.movTogglesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.34F));
|
||||
|
||||
this.toggleMovAutomatico.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleMovAutomatico.Titulo = "Movimento automático";
|
||||
this.toggleMovSonar.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleMovSonar.Titulo = "Assistido por sonar";
|
||||
this.toggleParadaObstaculo.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleParadaObstaculo.Titulo = "Parada por obstáculo";
|
||||
this.toggleMovImu.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleMovImu.Titulo = "Assistido por IMU";
|
||||
this.toggleParadaInclinacao.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleParadaInclinacao.Titulo = "Parada por inclinação";
|
||||
this.toggleFrenagemParar.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleFrenagemParar.Titulo = "Frenagem ao parar";
|
||||
|
||||
this.movValuesLayout.ColumnCount = 1;
|
||||
this.movValuesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.movValuesLayout.Controls.Add(this.paramVelSemErvas, 0, 0);
|
||||
this.movValuesLayout.Controls.Add(this.paramVelComErvas, 0, 1);
|
||||
this.movValuesLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.movValuesLayout.RowCount = 2;
|
||||
this.movValuesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.movValuesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
|
||||
SetupValueBox(this.paramVelSemErvas, "Vel. sem ervas", "%", 50, 0, 100, 0);
|
||||
SetupValueBox(this.paramVelComErvas, "Vel. com ervas", "%", 35, 0, 100, 0);
|
||||
|
||||
// direcional
|
||||
this.direcionalLayout.ColumnCount = 2;
|
||||
this.direcionalLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 45F));
|
||||
this.direcionalLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 55F));
|
||||
this.direcionalLayout.Controls.Add(this.lblDirecionalTitulo, 0, 0);
|
||||
this.direcionalLayout.Controls.Add(this.dirTogglesLayout, 0, 1);
|
||||
this.direcionalLayout.Controls.Add(this.dirValuesLayout, 1, 1);
|
||||
this.direcionalLayout.SetColumnSpan(this.lblDirecionalTitulo, 2);
|
||||
this.direcionalLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.direcionalLayout.RowCount = 2;
|
||||
this.direcionalLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));
|
||||
this.direcionalLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
SetupTitle(this.lblDirecionalTitulo, "3 DIRECIONAL");
|
||||
|
||||
this.dirTogglesLayout.ColumnCount = 1;
|
||||
this.dirTogglesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.dirTogglesLayout.Controls.Add(this.toggleDirAutomatico, 0, 0);
|
||||
this.dirTogglesLayout.Controls.Add(this.toggleDirSonar, 0, 1);
|
||||
this.dirTogglesLayout.Controls.Add(this.toggleDirImu, 0, 2);
|
||||
this.dirTogglesLayout.Controls.Add(this.toggleImuPrefereArco, 0, 3);
|
||||
this.dirTogglesLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.dirTogglesLayout.RowCount = 4;
|
||||
for (int i = 0; i < 4; i++)
|
||||
this.dirTogglesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
|
||||
this.toggleDirAutomatico.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleDirAutomatico.Titulo = "Direcional automático";
|
||||
this.toggleDirSonar.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleDirSonar.Titulo = "Assistido por sonar";
|
||||
this.toggleDirImu.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleDirImu.Titulo = "Assistido por IMU";
|
||||
this.toggleImuPrefereArco.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.toggleImuPrefereArco.Titulo = "IMU prefere arco";
|
||||
this.toggleImuPrefereArco.Checked = false;
|
||||
|
||||
this.dirValuesLayout.ColumnCount = 3;
|
||||
this.dirValuesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||
this.dirValuesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33F));
|
||||
this.dirValuesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.34F));
|
||||
this.dirValuesLayout.Controls.Add(this.paramAnguloMaximo, 0, 0);
|
||||
this.dirValuesLayout.Controls.Add(this.paramVelMovimentoDir, 1, 0);
|
||||
this.dirValuesLayout.Controls.Add(this.pnlTipoControle, 2, 0);
|
||||
this.dirValuesLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
|
||||
SetupValueBox(this.paramAnguloMaximo, "Ângulo máximo", "°", 45, 0, 90, 0);
|
||||
SetupValueBox(this.paramVelMovimentoDir, "Vel. movimento", "%", 60, 0, 100, 0);
|
||||
|
||||
this.pnlTipoControle.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
this.pnlTipoControle.Controls.Add(this.tipoControleLayout);
|
||||
this.pnlTipoControle.CornerRadius = 7;
|
||||
this.pnlTipoControle.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlTipoControle.FillColor = AgroBase.Forms.IHM.Controls.HmiTheme.SurfaceRaised;
|
||||
this.pnlTipoControle.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.pnlTipoControle.Padding = new System.Windows.Forms.Padding(5);
|
||||
|
||||
this.tipoControleLayout.ColumnCount = 2;
|
||||
this.tipoControleLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tipoControleLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tipoControleLayout.Controls.Add(this.lblTipoControle, 0, 0);
|
||||
this.tipoControleLayout.Controls.Add(this.btnControleMpc, 0, 1);
|
||||
this.tipoControleLayout.Controls.Add(this.btnControlePid, 1, 1);
|
||||
this.tipoControleLayout.SetColumnSpan(this.lblTipoControle, 2);
|
||||
this.tipoControleLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tipoControleLayout.RowCount = 2;
|
||||
this.tipoControleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));
|
||||
this.tipoControleLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
this.lblTipoControle.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lblTipoControle.Text = "Tipo de controle";
|
||||
this.lblTipoControle.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
this.lblTipoControle.Font = new System.Drawing.Font("Segoe UI", 7F);
|
||||
this.lblTipoControle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
|
||||
SetupChoiceButton(this.btnControleMpc, "MPC");
|
||||
SetupChoiceButton(this.btnControlePid, "PID");
|
||||
|
||||
// atuador
|
||||
this.atuadorLayout.ColumnCount = 2;
|
||||
this.atuadorLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 42F));
|
||||
this.atuadorLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 58F));
|
||||
this.atuadorLayout.Controls.Add(this.lblAtuadorTitulo, 0, 0);
|
||||
this.atuadorLayout.Controls.Add(this.togglePulverizadorAutomatico, 1, 0);
|
||||
this.atuadorLayout.Controls.Add(this.cmbModoAgitador, 0, 1);
|
||||
this.atuadorLayout.Controls.Add(this.atuadorValuesLayout, 0, 2);
|
||||
this.atuadorLayout.SetColumnSpan(this.atuadorValuesLayout, 2);
|
||||
this.atuadorLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.atuadorLayout.RowCount = 3;
|
||||
this.atuadorLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F));
|
||||
this.atuadorLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 34F));
|
||||
this.atuadorLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
SetupTitle(this.lblAtuadorTitulo, "4 ATUADOR");
|
||||
|
||||
this.togglePulverizadorAutomatico.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.togglePulverizadorAutomatico.Titulo = "Pulverizador automático";
|
||||
|
||||
this.cmbModoAgitador.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.cmbModoAgitador.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbModoAgitador.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.cmbModoAgitador.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.SurfaceRaised;
|
||||
this.cmbModoAgitador.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.Text;
|
||||
this.cmbModoAgitador.Items.AddRange(new object[] { "Sem agitação", "Contínuo", "Intermitente" });
|
||||
this.cmbModoAgitador.SelectedIndex = 1;
|
||||
this.atuadorLayout.SetColumnSpan(this.cmbModoAgitador, 2);
|
||||
|
||||
this.atuadorValuesLayout.ColumnCount = 4;
|
||||
this.atuadorValuesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.atuadorValuesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.atuadorValuesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.atuadorValuesLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.atuadorValuesLayout.Controls.Add(this.paramBicosEmUso, 0, 0);
|
||||
this.atuadorValuesLayout.Controls.Add(this.paramCapacidadeReservatorio, 1, 0);
|
||||
this.atuadorValuesLayout.Controls.Add(this.paramPressaoLinha, 2, 0);
|
||||
this.atuadorValuesLayout.Controls.Add(this.paramTelaIniciar, 3, 0);
|
||||
this.atuadorValuesLayout.Controls.Add(this.paramAlturaArea, 0, 1);
|
||||
this.atuadorValuesLayout.Controls.Add(this.paramErvasOn, 1, 1);
|
||||
this.atuadorValuesLayout.Controls.Add(this.paramErvasOff, 2, 1);
|
||||
this.atuadorValuesLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.atuadorValuesLayout.RowCount = 2;
|
||||
this.atuadorValuesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.atuadorValuesLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
|
||||
SetupValueBox(this.paramBicosEmUso, "Bicos em uso", "", 6, 1, 12, 0);
|
||||
SetupValueBox(this.paramCapacidadeReservatorio, "Capacidade reservatório", "L", 200, 50, 500, 0);
|
||||
SetupValueBox(this.paramPressaoLinha, "Pressão da linha", "psi", 45, 0, 120, 0);
|
||||
SetupValueBox(this.paramTelaIniciar, "% tela para iniciar", "%", 40, 0, 100, 0);
|
||||
SetupValueBox(this.paramAlturaArea, "Altura da área", "%", 60, 0, 100, 0);
|
||||
SetupValueBox(this.paramErvasOn, "% ervas ON", "%", 25, 0, 100, 0);
|
||||
SetupValueBox(this.paramErvasOff, "% ervas OFF", "%", 15, 0, 100, 0);
|
||||
|
||||
// MPC
|
||||
this.mpcLayout.ColumnCount = 3;
|
||||
this.mpcLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 30F));
|
||||
this.mpcLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35F));
|
||||
this.mpcLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 35F));
|
||||
this.mpcLayout.Controls.Add(this.lblMpcTitulo, 0, 0);
|
||||
this.mpcLayout.Controls.Add(this.paramHorizonte, 1, 0);
|
||||
this.mpcLayout.Controls.Add(this.paramAnteciparFim, 2, 0);
|
||||
this.mpcLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
|
||||
SetupTitle(this.lblMpcTitulo, "5 MPC E NAVEGAÇÃO");
|
||||
SetupValueBox(this.paramHorizonte, "Horizonte de predição", "m", 12, 0, 30, 1);
|
||||
SetupValueBox(this.paramAnteciparFim, "Antecipar fim corredor", "m", 5, 0, 15, 1);
|
||||
|
||||
// right
|
||||
this.rightLayout.BackColor = System.Drawing.Color.Transparent;
|
||||
this.rightLayout.ColumnCount = 1;
|
||||
this.rightLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.rightLayout.Controls.Add(this.pnlMapa, 0, 0);
|
||||
this.rightLayout.Controls.Add(this.footerLayout, 0, 1);
|
||||
this.rightLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.rightLayout.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0);
|
||||
this.rightLayout.RowCount = 2;
|
||||
this.rightLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 80F));
|
||||
this.rightLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
|
||||
|
||||
ConfigurePanel(this.pnlMapa, this.mapLayout);
|
||||
|
||||
this.mapLayout.ColumnCount = 1;
|
||||
this.mapLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.mapLayout.Controls.Add(this.mapHeaderLayout, 0, 0);
|
||||
this.mapLayout.Controls.Add(this.pnlMapaVisual, 0, 1);
|
||||
this.mapLayout.Controls.Add(this.lblMapaAjuda, 0, 2);
|
||||
this.mapLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.mapLayout.RowCount = 3;
|
||||
this.mapLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 31F));
|
||||
this.mapLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.mapLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
|
||||
|
||||
this.mapHeaderLayout.ColumnCount = 3;
|
||||
this.mapHeaderLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.mapHeaderLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 82F));
|
||||
this.mapHeaderLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 90F));
|
||||
this.mapHeaderLayout.Controls.Add(this.lblMapaTitulo, 0, 0);
|
||||
this.mapHeaderLayout.Controls.Add(this.btnMapaBonito, 1, 0);
|
||||
this.mapHeaderLayout.Controls.Add(this.btnMapaDinamico, 2, 0);
|
||||
this.mapHeaderLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
|
||||
SetupTitle(this.lblMapaTitulo, "6 MAPA DA OPERAÇÃO");
|
||||
SetupChoiceButton(this.btnMapaBonito, "Mapa bonito");
|
||||
SetupChoiceButton(this.btnMapaDinamico, "Mapa dinâmico");
|
||||
|
||||
this.pnlMapaVisual.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
this.pnlMapaVisual.Controls.Add(this.lblMapaPlaceholder);
|
||||
this.pnlMapaVisual.CornerRadius = 8;
|
||||
this.pnlMapaVisual.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlMapaVisual.FillColor = System.Drawing.Color.FromArgb(18, 29, 22);
|
||||
|
||||
this.lblMapaPlaceholder.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lblMapaPlaceholder.BackColor = System.Drawing.Color.Transparent;
|
||||
this.lblMapaPlaceholder.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.Success;
|
||||
this.lblMapaPlaceholder.Font = new System.Drawing.Font("Consolas", 8.5F, System.Drawing.FontStyle.Bold);
|
||||
this.lblMapaPlaceholder.Text =
|
||||
"MAPA DA OPERAÇÃO\n\n" +
|
||||
"01 02 03 04 05\n" +
|
||||
"│ │ │ │ │\n" +
|
||||
"│ │ │ │ │\n" +
|
||||
"│ │ [ROVER] │ │\n" +
|
||||
"│ │ │ │ │\n" +
|
||||
"09 10 11 12\n\n" +
|
||||
"8 ruas selecionadas";
|
||||
this.lblMapaPlaceholder.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
|
||||
this.lblMapaAjuda.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lblMapaAjuda.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.SurfaceRaised;
|
||||
this.lblMapaAjuda.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
this.lblMapaAjuda.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Italic);
|
||||
this.lblMapaAjuda.Text = "Toque nas ruas para selecionar ou desmarcar.";
|
||||
this.lblMapaAjuda.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
|
||||
// footer
|
||||
this.footerLayout.ColumnCount = 2;
|
||||
this.footerLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 48F));
|
||||
this.footerLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 52F));
|
||||
this.footerLayout.Controls.Add(this.btnAplicarAtual, 0, 0);
|
||||
this.footerLayout.Controls.Add(this.btnSalvarParametros, 1, 0);
|
||||
// footerLayout
|
||||
this.footerLayout.BackColor = System.Drawing.Color.Transparent;
|
||||
this.footerLayout.ColumnCount = 5;
|
||||
this.footerLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 55F));
|
||||
this.footerLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 128F));
|
||||
this.footerLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.footerLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 135F));
|
||||
this.footerLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 145F));
|
||||
this.footerLayout.Controls.Add(this.lblModoOperacao, 0, 0);
|
||||
this.footerLayout.Controls.Add(this.cmbModoOperacao, 1, 0);
|
||||
this.footerLayout.Controls.Add(this.posProcessamentoLayout, 2, 0);
|
||||
this.footerLayout.Controls.Add(this.btnRedefinir, 3, 0);
|
||||
this.footerLayout.Controls.Add(this.btnSalvar, 4, 0);
|
||||
this.footerLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.footerLayout.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.footerLayout.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.footerLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.footerLayout.RowCount = 1;
|
||||
this.footerLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
SetupAction(this.btnAplicarAtual, "APLICAR À OPERAÇÃO ATUAL", "▤", AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted);
|
||||
SetupAction(this.btnSalvarParametros, "SALVAR PARÂMETROS", "▣", AgroBase.Forms.IHM.Controls.HmiTheme.Success);
|
||||
// lblModoOperacao
|
||||
SetupFooterLabel(this.lblModoOperacao, "Modo");
|
||||
this.lblModoOperacao.Padding = new System.Windows.Forms.Padding(2, 0, 0, 0);
|
||||
|
||||
// user control
|
||||
// cmbModoOperacao
|
||||
this.cmbModoOperacao.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.cmbModoOperacao.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.SurfaceRaised;
|
||||
this.cmbModoOperacao.Dock = System.Windows.Forms.DockStyle.None;
|
||||
this.cmbModoOperacao.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cmbModoOperacao.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.cmbModoOperacao.Font = new System.Drawing.Font("Segoe UI", 8F, System.Drawing.FontStyle.Bold);
|
||||
this.cmbModoOperacao.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.Text;
|
||||
this.cmbModoOperacao.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.cmbModoOperacao.Size = new System.Drawing.Size(120, 25);
|
||||
|
||||
// posProcessamentoLayout
|
||||
this.posProcessamentoLayout.BackColor = System.Drawing.Color.Transparent;
|
||||
this.posProcessamentoLayout.ColumnCount = 2;
|
||||
this.posProcessamentoLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.posProcessamentoLayout.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 30F));
|
||||
this.posProcessamentoLayout.Controls.Add(this.lblPosProcessamento, 0, 0);
|
||||
this.posProcessamentoLayout.Controls.Add(this.checkPosProcessamento, 1, 0);
|
||||
this.posProcessamentoLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.posProcessamentoLayout.Margin = new System.Windows.Forms.Padding(6, 0, 8, 0);
|
||||
this.posProcessamentoLayout.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.posProcessamentoLayout.RowCount = 1;
|
||||
this.posProcessamentoLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
|
||||
// lblPosProcessamento
|
||||
this.lblPosProcessamento.AutoEllipsis = true;
|
||||
this.lblPosProcessamento.BackColor = System.Drawing.Color.Transparent;
|
||||
this.lblPosProcessamento.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lblPosProcessamento.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Bold);
|
||||
this.lblPosProcessamento.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
this.lblPosProcessamento.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
|
||||
this.lblPosProcessamento.Text = "Registrar pós-processamento";
|
||||
this.lblPosProcessamento.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
|
||||
// checkPosProcessamento
|
||||
this.checkPosProcessamento.Anchor = System.Windows.Forms.AnchorStyles.None;
|
||||
this.checkPosProcessamento.Appearance = System.Windows.Forms.Appearance.Button;
|
||||
this.checkPosProcessamento.AutoSize = false;
|
||||
this.checkPosProcessamento.BackColor = System.Drawing.Color.FromArgb(30, 90, 46);
|
||||
this.checkPosProcessamento.Checked = true;
|
||||
this.checkPosProcessamento.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.checkPosProcessamento.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.checkPosProcessamento.Dock = System.Windows.Forms.DockStyle.None;
|
||||
this.checkPosProcessamento.FlatAppearance.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Success;
|
||||
this.checkPosProcessamento.FlatAppearance.BorderSize = 1;
|
||||
this.checkPosProcessamento.FlatAppearance.CheckedBackColor = System.Drawing.Color.FromArgb(30, 90, 46);
|
||||
this.checkPosProcessamento.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
this.checkPosProcessamento.Font = new System.Drawing.Font("Segoe UI Symbol", 8F, System.Drawing.FontStyle.Bold);
|
||||
this.checkPosProcessamento.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.Success;
|
||||
this.checkPosProcessamento.Margin = System.Windows.Forms.Padding.Empty;
|
||||
this.checkPosProcessamento.Padding = System.Windows.Forms.Padding.Empty;
|
||||
this.checkPosProcessamento.Size = new System.Drawing.Size(22, 22);
|
||||
this.checkPosProcessamento.Text = "✓";
|
||||
this.checkPosProcessamento.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
this.checkPosProcessamento.UseVisualStyleBackColor = false;
|
||||
|
||||
// btnRedefinir
|
||||
SetupFooterAction(this.btnRedefinir, "REDEFINIR", "↻", AgroBase.Forms.IHM.Controls.HmiTheme.Warning);
|
||||
|
||||
// btnSalvar
|
||||
SetupFooterAction(this.btnSalvar, "SALVAR", "▣", AgroBase.Forms.IHM.Controls.HmiTheme.Success);
|
||||
|
||||
// ucOperacaoParametros
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||
this.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.Background;
|
||||
this.Controls.Add(this.rootLayout);
|
||||
|
|
@ -536,183 +218,81 @@
|
|||
this.Size = new System.Drawing.Size(784, 435);
|
||||
|
||||
this.rootLayout.ResumeLayout(false);
|
||||
this.leftLayout.ResumeLayout(false);
|
||||
this.pnlGeral.ResumeLayout(false);
|
||||
this.geralLayout.ResumeLayout(false);
|
||||
this.pnlMovimento.ResumeLayout(false);
|
||||
this.movimentoLayout.ResumeLayout(false);
|
||||
this.movTogglesLayout.ResumeLayout(false);
|
||||
this.movValuesLayout.ResumeLayout(false);
|
||||
this.pnlDirecional.ResumeLayout(false);
|
||||
this.direcionalLayout.ResumeLayout(false);
|
||||
this.dirTogglesLayout.ResumeLayout(false);
|
||||
this.dirValuesLayout.ResumeLayout(false);
|
||||
this.pnlTipoControle.ResumeLayout(false);
|
||||
this.tipoControleLayout.ResumeLayout(false);
|
||||
this.pnlAtuador.ResumeLayout(false);
|
||||
this.atuadorLayout.ResumeLayout(false);
|
||||
this.atuadorValuesLayout.ResumeLayout(false);
|
||||
this.pnlMpc.ResumeLayout(false);
|
||||
this.mpcLayout.ResumeLayout(false);
|
||||
this.rightLayout.ResumeLayout(false);
|
||||
this.pnlMapa.ResumeLayout(false);
|
||||
this.mapLayout.ResumeLayout(false);
|
||||
this.mapHeaderLayout.ResumeLayout(false);
|
||||
this.pnlMapaVisual.ResumeLayout(false);
|
||||
this.tabsLayout.ResumeLayout(false);
|
||||
this.pnlDescricaoAba.ResumeLayout(false);
|
||||
this.footerPanel.ResumeLayout(false);
|
||||
this.footerLayout.ResumeLayout(false);
|
||||
this.posProcessamentoLayout.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
}
|
||||
|
||||
private static void ConfigurePanel(
|
||||
AgroBase.Forms.IHM.Controls.HmiRoundedPanel panel,
|
||||
System.Windows.Forms.Control child)
|
||||
private static void SetupTabButton(System.Windows.Forms.Button button, string text)
|
||||
{
|
||||
panel.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
panel.Controls.Add(child);
|
||||
panel.CornerRadius = 9;
|
||||
panel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
panel.FillColor = AgroBase.Forms.IHM.Controls.HmiTheme.Surface;
|
||||
panel.Margin = new System.Windows.Forms.Padding(0, 0, 0, 3);
|
||||
panel.Padding = new System.Windows.Forms.Padding(7);
|
||||
button.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.Surface;
|
||||
button.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
button.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
button.FlatAppearance.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
button.FlatAppearance.BorderSize = 1;
|
||||
button.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
button.Font = new System.Drawing.Font("Segoe UI", 8.5F, System.Drawing.FontStyle.Bold);
|
||||
button.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
button.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
button.Text = text;
|
||||
button.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
button.UseVisualStyleBackColor = false;
|
||||
}
|
||||
|
||||
private static void SetupTitle(
|
||||
System.Windows.Forms.Label label,
|
||||
string text)
|
||||
private static void SetupFooterLabel(System.Windows.Forms.Label label, string text)
|
||||
{
|
||||
label.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
label.AutoEllipsis = true;
|
||||
label.BackColor = System.Drawing.Color.Transparent;
|
||||
label.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.Text;
|
||||
label.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold);
|
||||
label.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
label.Font = new System.Drawing.Font("Segoe UI", 7.2F, System.Drawing.FontStyle.Bold);
|
||||
label.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
label.Margin = System.Windows.Forms.Padding.Empty;
|
||||
label.Text = text;
|
||||
label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
label.AutoEllipsis = true;
|
||||
}
|
||||
|
||||
private static void SetupChoiceButton(
|
||||
System.Windows.Forms.Button button,
|
||||
string text)
|
||||
private static void SetupFooterAction(AgroBase.Forms.IHM.Controls.HmiSidebarButton button, string text, string icon, System.Drawing.Color accent)
|
||||
{
|
||||
button.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
button.Text = text;
|
||||
button.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||
button.FlatAppearance.BorderColor = AgroBase.Forms.IHM.Controls.HmiTheme.Border;
|
||||
button.BackColor = AgroBase.Forms.IHM.Controls.HmiTheme.SurfaceRaised;
|
||||
button.ForeColor = AgroBase.Forms.IHM.Controls.HmiTheme.TextMuted;
|
||||
button.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Bold);
|
||||
button.Margin = new System.Windows.Forms.Padding(2);
|
||||
}
|
||||
|
||||
private static void SetupValueBox(
|
||||
AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox control,
|
||||
string title,
|
||||
string unit,
|
||||
decimal value,
|
||||
decimal min,
|
||||
decimal max,
|
||||
int decimals)
|
||||
{
|
||||
control.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
control.Titulo = title;
|
||||
control.Unidade = unit;
|
||||
control.Minimo = min;
|
||||
control.Maximo = max;
|
||||
control.CasasDecimais = decimals;
|
||||
control.Valor = value;
|
||||
}
|
||||
|
||||
private static void SetupAction(
|
||||
AgroBase.Forms.IHM.Controls.HmiSidebarButton button,
|
||||
string text,
|
||||
string icon,
|
||||
System.Drawing.Color accent)
|
||||
{
|
||||
button.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
button.Text = text;
|
||||
button.IconText = icon;
|
||||
button.AccentColor = accent;
|
||||
button.BorderColor = accent;
|
||||
button.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
button.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
button.FillColor = AgroBase.Forms.IHM.Controls.HmiTheme.SurfaceRaised;
|
||||
button.Margin = new System.Windows.Forms.Padding(3);
|
||||
button.IconText = icon;
|
||||
button.Margin = new System.Windows.Forms.Padding(3, 0, 0, 0);
|
||||
button.MaximumSize = System.Drawing.Size.Empty;
|
||||
button.MinimumSize = System.Drawing.Size.Empty;
|
||||
button.Text = text;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel rootLayout;
|
||||
private System.Windows.Forms.TableLayoutPanel leftLayout;
|
||||
private System.Windows.Forms.TableLayoutPanel tabsLayout;
|
||||
private System.Windows.Forms.Button btnAbaMovimento;
|
||||
private System.Windows.Forms.Button btnAbaDirecional;
|
||||
private System.Windows.Forms.Button btnAbaAtuador;
|
||||
private System.Windows.Forms.Button btnAbaMapa;
|
||||
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlGeral;
|
||||
private System.Windows.Forms.TableLayoutPanel geralLayout;
|
||||
private System.Windows.Forms.Label lblGeralTitulo;
|
||||
private System.Windows.Forms.Label lblModoOperacao;
|
||||
private System.Windows.Forms.Button btnModoManual;
|
||||
private System.Windows.Forms.Button btnModoMapaGps;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleRegistrarDados;
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlDescricaoAba;
|
||||
private System.Windows.Forms.Label lblDescricaoAba;
|
||||
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlMovimento;
|
||||
private System.Windows.Forms.TableLayoutPanel movimentoLayout;
|
||||
private System.Windows.Forms.Label lblMovimentoTitulo;
|
||||
private System.Windows.Forms.TableLayoutPanel movTogglesLayout;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleMovAutomatico;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleMovSonar;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleParadaObstaculo;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleMovImu;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleParadaInclinacao;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleFrenagemParar;
|
||||
private System.Windows.Forms.TableLayoutPanel movValuesLayout;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramVelSemErvas;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramVelComErvas;
|
||||
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlDirecional;
|
||||
private System.Windows.Forms.TableLayoutPanel direcionalLayout;
|
||||
private System.Windows.Forms.Label lblDirecionalTitulo;
|
||||
private System.Windows.Forms.TableLayoutPanel dirTogglesLayout;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleDirAutomatico;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleDirSonar;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleDirImu;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow toggleImuPrefereArco;
|
||||
private System.Windows.Forms.TableLayoutPanel dirValuesLayout;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramAnguloMaximo;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramVelMovimentoDir;
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlTipoControle;
|
||||
private System.Windows.Forms.TableLayoutPanel tipoControleLayout;
|
||||
private System.Windows.Forms.Label lblTipoControle;
|
||||
private System.Windows.Forms.Button btnControleMpc;
|
||||
private System.Windows.Forms.Button btnControlePid;
|
||||
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlAtuador;
|
||||
private System.Windows.Forms.TableLayoutPanel atuadorLayout;
|
||||
private System.Windows.Forms.Label lblAtuadorTitulo;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterToggleRow togglePulverizadorAutomatico;
|
||||
private System.Windows.Forms.ComboBox cmbModoAgitador;
|
||||
private System.Windows.Forms.TableLayoutPanel atuadorValuesLayout;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramBicosEmUso;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramCapacidadeReservatorio;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramPressaoLinha;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramTelaIniciar;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramAlturaArea;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramErvasOn;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramErvasOff;
|
||||
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlMpc;
|
||||
private System.Windows.Forms.TableLayoutPanel mpcLayout;
|
||||
private System.Windows.Forms.Label lblMpcTitulo;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramHorizonte;
|
||||
private AgroBase.Forms.IHM.Controls.Operacao.HmiParameterValueBox paramAnteciparFim;
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel rightLayout;
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlMapa;
|
||||
private System.Windows.Forms.TableLayoutPanel mapLayout;
|
||||
private System.Windows.Forms.TableLayoutPanel mapHeaderLayout;
|
||||
private System.Windows.Forms.Label lblMapaTitulo;
|
||||
private System.Windows.Forms.Button btnMapaBonito;
|
||||
private System.Windows.Forms.Button btnMapaDinamico;
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlMapaVisual;
|
||||
private System.Windows.Forms.Label lblMapaPlaceholder;
|
||||
private System.Windows.Forms.Label lblMapaAjuda;
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel pnlConteudo;
|
||||
|
||||
private AgroBase.Forms.IHM.Controls.HmiRoundedPanel footerPanel;
|
||||
private System.Windows.Forms.TableLayoutPanel footerLayout;
|
||||
private AgroBase.Forms.IHM.Controls.HmiSidebarButton btnAplicarAtual;
|
||||
private AgroBase.Forms.IHM.Controls.HmiSidebarButton btnSalvarParametros;
|
||||
|
||||
private System.Windows.Forms.Label lblModoOperacao;
|
||||
private System.Windows.Forms.ComboBox cmbModoOperacao;
|
||||
|
||||
private System.Windows.Forms.TableLayoutPanel posProcessamentoLayout;
|
||||
private System.Windows.Forms.Label lblPosProcessamento;
|
||||
private System.Windows.Forms.CheckBox checkPosProcessamento;
|
||||
|
||||
private AgroBase.Forms.IHM.Controls.HmiSidebarButton btnRedefinir;
|
||||
private AgroBase.Forms.IHM.Controls.HmiSidebarButton btnSalvar;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,133 +1,236 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using AgroBase.Forms.IHM.Operacao.Parametros;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using static AgroBase.Models.Enums;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao
|
||||
{
|
||||
public partial class ucOperacaoParametros : UserControl
|
||||
{
|
||||
private readonly Dictionary<TipoAbaParametros, UserControl> _abas;
|
||||
private TipoAbaParametros _abaAtual;
|
||||
|
||||
private readonly ucParametrosMovimento _ucMovimento;
|
||||
private readonly ucParametrosDirecional _ucDirecional;
|
||||
private readonly ucParametrosAtuador _ucAtuador;
|
||||
private readonly ucParametrosMapa _ucMapa;
|
||||
|
||||
public event EventHandler RedefinirSolicitado;
|
||||
public event EventHandler SalvarSolicitado;
|
||||
public event EventHandler ModoOperacaoAlterado;
|
||||
public event EventHandler RegistrarPosProcessamentoAlterado;
|
||||
|
||||
public ucOperacaoParametros()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
_ucMovimento = new ucParametrosMovimento();
|
||||
_ucDirecional = new ucParametrosDirecional();
|
||||
_ucAtuador = new ucParametrosAtuador();
|
||||
_ucMapa = new ucParametrosMapa();
|
||||
|
||||
_abas = new Dictionary<TipoAbaParametros, UserControl>();
|
||||
_abas.Add(TipoAbaParametros.Movimento, _ucMovimento);
|
||||
_abas.Add(TipoAbaParametros.Direcional, _ucDirecional);
|
||||
_abas.Add(TipoAbaParametros.Atuador, _ucAtuador);
|
||||
_abas.Add(TipoAbaParametros.Mapa, _ucMapa);
|
||||
|
||||
ConfigurarSubControles();
|
||||
ConfigurarEstadoInicial();
|
||||
VincularEventos();
|
||||
}
|
||||
|
||||
private void ConfigurarSubControles()
|
||||
{
|
||||
foreach (KeyValuePair<TipoAbaParametros, UserControl> item in _abas)
|
||||
{
|
||||
item.Value.Dock = DockStyle.Fill;
|
||||
item.Value.Margin = Padding.Empty;
|
||||
item.Value.Visible = false;
|
||||
pnlConteudo.Controls.Add(item.Value);
|
||||
}
|
||||
}
|
||||
|
||||
private void ConfigurarEstadoInicial()
|
||||
{
|
||||
btnMapaBonito.BackColor =
|
||||
Color.FromArgb(31, 91, 43);
|
||||
cmbModoOperacao.Items.Clear();
|
||||
cmbModoOperacao.Items.AddRange(Enum.GetNames(typeof(ModoOperacao)));
|
||||
|
||||
btnMapaBonito.ForeColor =
|
||||
HmiTheme.Text;
|
||||
if (cmbModoOperacao.Items.Count > 1)
|
||||
cmbModoOperacao.SelectedIndex = 1;
|
||||
|
||||
btnMapaBonito.FlatAppearance.BorderColor =
|
||||
HmiTheme.Success;
|
||||
checkPosProcessamento.Checked = true;
|
||||
AtualizarAparenciaCheck(checkPosProcessamento);
|
||||
|
||||
btnModoMapaGps.BackColor =
|
||||
Color.FromArgb(31, 91, 43);
|
||||
|
||||
btnModoMapaGps.ForeColor =
|
||||
HmiTheme.Text;
|
||||
|
||||
btnModoMapaGps.FlatAppearance.BorderColor =
|
||||
HmiTheme.Success;
|
||||
|
||||
btnControleMpc.BackColor =
|
||||
Color.FromArgb(31, 91, 43);
|
||||
|
||||
btnControleMpc.ForeColor =
|
||||
HmiTheme.Text;
|
||||
|
||||
btnControleMpc.FlatAppearance.BorderColor =
|
||||
HmiTheme.Success;
|
||||
AbrirAba(TipoAbaParametros.Movimento);
|
||||
}
|
||||
|
||||
private void VincularEventos()
|
||||
{
|
||||
btnModoManual.Click += delegate
|
||||
btnAbaMovimento.Click += delegate { AbrirAba(TipoAbaParametros.Movimento); };
|
||||
btnAbaDirecional.Click += delegate { AbrirAba(TipoAbaParametros.Direcional); };
|
||||
btnAbaAtuador.Click += delegate { AbrirAba(TipoAbaParametros.Atuador); };
|
||||
btnAbaMapa.Click += delegate { AbrirAba(TipoAbaParametros.Mapa); };
|
||||
|
||||
btnRedefinir.Click += delegate
|
||||
{
|
||||
SelecionarBotaoDuplo(
|
||||
btnModoManual,
|
||||
btnModoMapaGps);
|
||||
if (RedefinirSolicitado != null)
|
||||
RedefinirSolicitado(this, EventArgs.Empty);
|
||||
};
|
||||
|
||||
btnModoMapaGps.Click += delegate
|
||||
btnSalvar.Click += delegate
|
||||
{
|
||||
SelecionarBotaoDuplo(
|
||||
btnModoMapaGps,
|
||||
btnModoManual);
|
||||
if (SalvarSolicitado != null)
|
||||
SalvarSolicitado(this, EventArgs.Empty);
|
||||
};
|
||||
|
||||
btnControleMpc.Click += delegate
|
||||
cmbModoOperacao.SelectedIndexChanged += delegate
|
||||
{
|
||||
SelecionarBotaoDuplo(
|
||||
btnControleMpc,
|
||||
btnControlePid);
|
||||
if (ModoOperacaoAlterado != null)
|
||||
ModoOperacaoAlterado(this, EventArgs.Empty);
|
||||
};
|
||||
|
||||
btnControlePid.Click += delegate
|
||||
checkPosProcessamento.CheckedChanged += delegate
|
||||
{
|
||||
SelecionarBotaoDuplo(
|
||||
btnControlePid,
|
||||
btnControleMpc);
|
||||
};
|
||||
AtualizarAparenciaCheck(checkPosProcessamento);
|
||||
|
||||
btnMapaBonito.Click += delegate
|
||||
{
|
||||
SelecionarBotaoDuplo(
|
||||
btnMapaBonito,
|
||||
btnMapaDinamico);
|
||||
};
|
||||
|
||||
btnMapaDinamico.Click += delegate
|
||||
{
|
||||
SelecionarBotaoDuplo(
|
||||
btnMapaDinamico,
|
||||
btnMapaBonito);
|
||||
if (RegistrarPosProcessamentoAlterado != null)
|
||||
RegistrarPosProcessamentoAlterado(this, EventArgs.Empty);
|
||||
};
|
||||
}
|
||||
|
||||
private static void SelecionarBotaoDuplo(
|
||||
Button selecionado,
|
||||
Button outro)
|
||||
private void AbrirAba(TipoAbaParametros aba)
|
||||
{
|
||||
AplicarEstadoBotao(
|
||||
selecionado,
|
||||
true);
|
||||
_abaAtual = aba;
|
||||
|
||||
AplicarEstadoBotao(
|
||||
outro,
|
||||
false);
|
||||
foreach (KeyValuePair<TipoAbaParametros, UserControl> item in _abas)
|
||||
item.Value.Visible = item.Key == aba;
|
||||
|
||||
UserControl controleAtual;
|
||||
if (_abas.TryGetValue(aba, out controleAtual))
|
||||
{
|
||||
controleAtual.BringToFront();
|
||||
controleAtual.Visible = true;
|
||||
}
|
||||
|
||||
private static void AplicarEstadoBotao(
|
||||
Button button,
|
||||
bool selecionado)
|
||||
AplicarEstadoBotaoAba(btnAbaMovimento, aba == TipoAbaParametros.Movimento);
|
||||
AplicarEstadoBotaoAba(btnAbaDirecional, aba == TipoAbaParametros.Direcional);
|
||||
AplicarEstadoBotaoAba(btnAbaAtuador, aba == TipoAbaParametros.Atuador);
|
||||
AplicarEstadoBotaoAba(btnAbaMapa, aba == TipoAbaParametros.Mapa);
|
||||
|
||||
AtualizarDescricaoAba(aba);
|
||||
}
|
||||
|
||||
private void AtualizarDescricaoAba(TipoAbaParametros aba)
|
||||
{
|
||||
switch (aba)
|
||||
{
|
||||
case TipoAbaParametros.Movimento:
|
||||
lblDescricaoAba.Text = "Automação, assistências e velocidades de deslocamento";
|
||||
break;
|
||||
case TipoAbaParametros.Direcional:
|
||||
lblDescricaoAba.Text = "Controle direcional, assistências, ângulo e velocidade";
|
||||
break;
|
||||
case TipoAbaParametros.Atuador:
|
||||
lblDescricaoAba.Text = "Pulverizador, agitador, reservatório e critérios de atuação";
|
||||
break;
|
||||
case TipoAbaParametros.Mapa:
|
||||
lblDescricaoAba.Text = "Mapa da operação, seleção de ruas e parâmetros de navegação";
|
||||
break;
|
||||
default:
|
||||
lblDescricaoAba.Text = string.Empty;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void AplicarEstadoBotaoAba(Button button, bool selecionado)
|
||||
{
|
||||
if (selecionado)
|
||||
{
|
||||
button.BackColor =
|
||||
Color.FromArgb(31, 91, 43);
|
||||
|
||||
button.ForeColor =
|
||||
HmiTheme.Text;
|
||||
|
||||
button.FlatAppearance.BorderColor =
|
||||
HmiTheme.Success;
|
||||
button.BackColor = Color.FromArgb(46, 31, 63);
|
||||
button.ForeColor = Color.FromArgb(190, 121, 255);
|
||||
button.FlatAppearance.BorderColor = Color.FromArgb(170, 90, 240);
|
||||
}
|
||||
else
|
||||
{
|
||||
button.BackColor =
|
||||
HmiTheme.SurfaceRaised;
|
||||
button.BackColor = HmiTheme.Surface;
|
||||
button.ForeColor = HmiTheme.TextMuted;
|
||||
button.FlatAppearance.BorderColor = HmiTheme.Border;
|
||||
}
|
||||
}
|
||||
|
||||
button.ForeColor =
|
||||
HmiTheme.TextMuted;
|
||||
private static void AtualizarAparenciaCheck(CheckBox check)
|
||||
{
|
||||
if (check.Checked)
|
||||
{
|
||||
check.Text = "✓";
|
||||
check.ForeColor = HmiTheme.Success;
|
||||
check.BackColor = Color.FromArgb(30, 90, 46);
|
||||
check.FlatAppearance.BorderColor = HmiTheme.Success;
|
||||
}
|
||||
else
|
||||
{
|
||||
check.Text = "×";
|
||||
check.ForeColor = HmiTheme.Danger;
|
||||
check.BackColor = HmiTheme.Surface;
|
||||
check.FlatAppearance.BorderColor = HmiTheme.Danger;
|
||||
}
|
||||
}
|
||||
|
||||
button.FlatAppearance.BorderColor =
|
||||
HmiTheme.Border;
|
||||
public string ModoOperacaoSelecionado
|
||||
{
|
||||
get { return Convert.ToString(cmbModoOperacao.SelectedItem); }
|
||||
set
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(value))
|
||||
return;
|
||||
|
||||
int index = cmbModoOperacao.FindStringExact(value);
|
||||
if (index >= 0)
|
||||
cmbModoOperacao.SelectedIndex = index;
|
||||
}
|
||||
}
|
||||
|
||||
public bool RegistrarPosProcessamento
|
||||
{
|
||||
get { return checkPosProcessamento.Checked; }
|
||||
set { checkPosProcessamento.Checked = value; }
|
||||
}
|
||||
|
||||
public TipoAbaParametros AbaAtual
|
||||
{
|
||||
get { return _abaAtual; }
|
||||
}
|
||||
|
||||
public ucParametrosMovimento Movimento
|
||||
{
|
||||
get { return _ucMovimento; }
|
||||
}
|
||||
|
||||
public ucParametrosDirecional Direcional
|
||||
{
|
||||
get { return _ucDirecional; }
|
||||
}
|
||||
|
||||
public ucParametrosAtuador Atuador
|
||||
{
|
||||
get { return _ucAtuador; }
|
||||
}
|
||||
|
||||
public ucParametrosMapa Mapa
|
||||
{
|
||||
get { return _ucMapa; }
|
||||
}
|
||||
}
|
||||
|
||||
public enum TipoAbaParametros
|
||||
{
|
||||
Movimento = 0,
|
||||
Direcional = 1,
|
||||
Atuador = 2,
|
||||
Mapa = 3
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -402,13 +402,7 @@
|
|||
button.MaximumSize = System.Drawing.Size.Empty;
|
||||
}
|
||||
|
||||
private static void SetupHealth(
|
||||
AgroBase.Forms.IHM.Controls.Operacao.HmiSprayerModuleHealthRow row,
|
||||
string icon,
|
||||
string title,
|
||||
string health,
|
||||
string status,
|
||||
System.Drawing.Color color)
|
||||
private static void SetupHealth(AgroBase.Forms.IHM.Controls.Operacao.HmiSprayerModuleHealthRow row, string icon, string title, string health, string status, System.Drawing.Color color)
|
||||
{
|
||||
row.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
row.IconText = icon;
|
||||
|
|
@ -430,9 +424,7 @@
|
|||
combo.Margin = new System.Windows.Forms.Padding(0, 1, 0, 1);
|
||||
}
|
||||
|
||||
private static void SetupNozzle(
|
||||
AgroBase.Forms.IHM.Controls.Operacao.HmiNozzleCard card,
|
||||
string code)
|
||||
private static void SetupNozzle(AgroBase.Forms.IHM.Controls.Operacao.HmiNozzleCard card, string code)
|
||||
{
|
||||
card.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
card.Codigo = code;
|
||||
|
|
|
|||
|
|
@ -1,16 +1,27 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using AgroBase.Forms.IHM.Controls.Operacao;
|
||||
using AgroBase.Models;
|
||||
using AgroBase.Models.Operadores;
|
||||
using AgroBase.Services.Operadores;
|
||||
using Assimp.Unmanaged;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using static AgroBase.Models.Enums;
|
||||
|
||||
namespace AgroBase.Forms.IHM.Operacao
|
||||
{
|
||||
public partial class ucOperacaoPulverizador : UserControl
|
||||
{
|
||||
private readonly List<HmiNozzleCard> _bicos =
|
||||
new List<HmiNozzleCard>();
|
||||
private bool _requisitandoCameraFrame;
|
||||
private bool _controleDescartado;
|
||||
|
||||
OperacaoModel op => Variaveis.OperacaoEmAndamento;
|
||||
|
||||
private readonly List<HmiNozzleCard> _bicos = new List<HmiNozzleCard>();
|
||||
|
||||
public ucOperacaoPulverizador()
|
||||
{
|
||||
|
|
@ -20,6 +31,205 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
VincularEventos();
|
||||
}
|
||||
|
||||
public void AtualizarDadosTela()
|
||||
{
|
||||
var dados = op?.Sensoriamento;
|
||||
|
||||
AtualizarDadosBomba();
|
||||
AtualizarDadosAgitador();
|
||||
AtualizarSaudeModulos();
|
||||
AtualizarDadosCamera(dados?.Cameras?.FirstOrDefault(x => x.dispositivo == Enums.T_Code.Cam), dados?.OperadorSaude?.ModulosSaude?.FirstOrDefault(x => x.modulo == T_Code.Cam)?.saude ?? 0);
|
||||
AtualizarDadosBicos(dados?.Atuador?.Bicos, dados?.OperadorSaude?.ModulosSaude?.FirstOrDefault(x => x.modulo == T_Code.Atu));
|
||||
AtualizarDadosTelemetria(dados?.Atuador);
|
||||
}
|
||||
|
||||
private void AtualizarDadosBomba()
|
||||
{
|
||||
double pressaoSP = op?.Parametros?.Controle?.AtuPressaoLinha ?? 0;
|
||||
bool bombaLigada = op?.Sensoriamento?.Atuador?.BombaLigada ?? false;
|
||||
|
||||
cardPressaoSp.Valor = pressaoSP.ToString("F1");
|
||||
cardStatusBomba.Valor = bombaLigada ? "Ligada" : "Desligada";
|
||||
cardStatusBomba.CorValor = bombaLigada ? HmiTheme.Success : HmiTheme.Danger;
|
||||
}
|
||||
|
||||
private void AtualizarDadosAgitador()
|
||||
{
|
||||
Enums.ModoAgitadorCalda modo = op?.Parametros?.Controle?.AtuAgitadorModo ?? Enums.ModoAgitadorCalda.SemAgitacao;
|
||||
bool agitadorLigado = (op?.Sensoriamento?.Atuador?.PotenciaAgitador ?? 0) > 0;
|
||||
|
||||
cardModoAgitador.Valor = modo.ToString();
|
||||
cardStatusAgitador.Valor = agitadorLigado ? "Ligado" : "Desligado";
|
||||
cardStatusAgitador.CorValor = agitadorLigado ? HmiTheme.Success : HmiTheme.Danger;
|
||||
}
|
||||
|
||||
private void AtualizarSaudeModulos()
|
||||
{
|
||||
var saude_m = op?.Sensoriamento?.OperadorSaude?.ModulosSaude;
|
||||
var saude_i = saude_m?.FirstOrDefault(x => x.modulo == Enums.T_Code.Atu)?.saude_individual;
|
||||
|
||||
var saudeBomba = saude_i?.FirstOrDefault(x => x.label == op?.DispAtu?.Dados?.BombaPressurizadora?.ID);
|
||||
var saudeAgitador = saude_i?.FirstOrDefault(x => x.label == op?.DispAtu?.Dados?.AgitadorDeCalda?.ID);
|
||||
var saudeSensores = saude_i?.Where(x => op?.DispAtu?.Dados?.Sensores?.Where(y => y.Aferir)?.Select(y => y.ID).Contains(x.label) ?? false)?.ToList();
|
||||
var saudeBicos = saude_i?.Where(x => op?.DispAtu?.Dados?.BicosPulverizadores?.Where(y => y.Comandar)?.Select(y => y.ID).Contains(x.label) ?? false)?.ToList();
|
||||
var saudeCamera = saude_m?.FirstOrDefault(x => x.modulo == Enums.T_Code.Cam);
|
||||
|
||||
var saudeSensoresMedia = saudeSensores?.Average(x => x.saude) ?? 0;
|
||||
Enums.StatusModulo saudeSensoresStatus =
|
||||
saudeSensoresMedia >= 80 ? Enums.StatusModulo.Operante :
|
||||
saudeSensoresMedia <= 0 ? Enums.StatusModulo.Falha :
|
||||
Enums.StatusModulo.Alerta;
|
||||
|
||||
var saudeBicosMedia = saudeBicos?.Average(x => x.saude) ?? 0;
|
||||
Enums.StatusModulo saudeBicosStatus =
|
||||
saudeBicosMedia >= 80 ? Enums.StatusModulo.Operante :
|
||||
saudeBicosMedia <= 0 ? Enums.StatusModulo.Falha :
|
||||
Enums.StatusModulo.Alerta;
|
||||
|
||||
void DefinirSaudeModulo(HmiSprayerModuleHealthRow card, double saude, Enums.StatusModulo status)
|
||||
{
|
||||
card.Saude = saude.ToString("F0") + "%";
|
||||
card.Status = status.ToString();
|
||||
card.StatusColor =
|
||||
status == Enums.StatusModulo.Operante ? HmiTheme.Success :
|
||||
status == Enums.StatusModulo.Alerta ? HmiTheme.Warning :
|
||||
status == Enums.StatusModulo.Falha ? HmiTheme.Danger :
|
||||
status == Enums.StatusModulo.Desconectado ? HmiTheme.Disabled :
|
||||
status == Enums.StatusModulo.Conectado ? HmiTheme.Info :
|
||||
HmiTheme.Disabled;
|
||||
}
|
||||
|
||||
DefinirSaudeModulo(healthBomba, saudeBomba?.saude ?? 0, saudeBomba?.status ?? Enums.StatusModulo.Desconectado);
|
||||
DefinirSaudeModulo(healthAgitador, saudeAgitador?.saude ?? 0, saudeAgitador?.status ?? Enums.StatusModulo.Desconectado);
|
||||
DefinirSaudeModulo(healthSensores, saudeSensoresMedia, saudeSensoresStatus);
|
||||
DefinirSaudeModulo(healthBicos, saudeBicosMedia, saudeBicosStatus);
|
||||
DefinirSaudeModulo(healthCamera, saudeCamera?.saude ?? 0, saudeCamera?.status ?? Enums.StatusModulo.Desconectado);
|
||||
}
|
||||
|
||||
public async void AtualizarDadosCamera(CameraWorkerItemModel dados, double saude)
|
||||
{
|
||||
lblVideoStatus.Text = $"FPS {dados?.fps ?? 0:F0} · {dados?.stream_kbps ?? 0:F1} MB/s · Saúde {saude:F0}%";
|
||||
|
||||
if (!_requisitandoCameraFrame)
|
||||
_ = RequisitarCameraFrameAsync();
|
||||
}
|
||||
|
||||
private async Task RequisitarCameraFrameAsync()
|
||||
{
|
||||
if (_requisitandoCameraFrame || _controleDescartado)
|
||||
return;
|
||||
|
||||
_requisitandoCameraFrame = true;
|
||||
|
||||
try
|
||||
{
|
||||
TipoFrameCamera tipoFrame = (TipoFrameCamera)cmbTipoFrame.SelectedIndex;
|
||||
|
||||
var frame = await WeedWorkerService.GetCameraFrame(tipoFrame);
|
||||
|
||||
if (_controleDescartado || frame == null)
|
||||
return;
|
||||
|
||||
Image imagemRecebida = frame.image();
|
||||
|
||||
if (imagemRecebida == null)
|
||||
return;
|
||||
|
||||
// Garante que o PictureBox receba uma imagem independente
|
||||
// de streams ou buffers internos do frame.
|
||||
Image imagemSegura;
|
||||
|
||||
using (imagemRecebida)
|
||||
{
|
||||
imagemSegura = new Bitmap(imagemRecebida);
|
||||
}
|
||||
|
||||
AtualizarImagemPainel(picVideo, imagemSegura);
|
||||
}
|
||||
catch (OutOfMemoryException ex)
|
||||
{
|
||||
// Em System.Drawing isso também pode significar
|
||||
// imagem ou stream inválido, não só falta real de RAM.
|
||||
Variaveis.MostrarLog("[IHM][Câmera] Frame inválido ou erro de memória: " + ex.Message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Variaveis.MostrarLog("[IHM][Câmera] Erro ao obter frame: " + ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_requisitandoCameraFrame = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void AtualizarImagemPainel(PictureBox pictureBox, Image novaImagem)
|
||||
{
|
||||
if (pictureBox == null)
|
||||
{
|
||||
novaImagem?.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
if (pictureBox.IsDisposed || pictureBox.Disposing || _controleDescartado)
|
||||
{
|
||||
novaImagem?.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
if (pictureBox.InvokeRequired)
|
||||
{
|
||||
try
|
||||
{
|
||||
pictureBox.BeginInvoke(new Action<PictureBox, Image>(AtualizarImagemPainel), pictureBox, novaImagem);
|
||||
}
|
||||
catch
|
||||
{
|
||||
novaImagem?.Dispose();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Image imagemAnterior = pictureBox.Image;
|
||||
pictureBox.Image = novaImagem;
|
||||
imagemAnterior?.Dispose();
|
||||
}
|
||||
|
||||
private void AtualizarDadosBicos(List<AtuadorBicoLogModel> dados, ManagerWorkerMessageResponseModulosPendentesModel saude)
|
||||
{
|
||||
foreach (var bico in dados)
|
||||
{
|
||||
var card = Bicos.FirstOrDefault(x => x.Codigo == bico.ID);
|
||||
card.Atuacoes = bico.Atuacoes;
|
||||
card.VazaoInstantanea = 0;
|
||||
card.VazaoMedia = bico.MediaNivelFluxo;
|
||||
card.TempoLigado = bico.TempoAtuado.ToString();
|
||||
|
||||
card.CommandOn = bico.Atuado;
|
||||
card.ReadOn = bico.StatusBico;
|
||||
card.State = saude?.saude_individual?.FirstOrDefault(x => x.label == bico.ID)?.status ?? StatusModulo.Desconectado;
|
||||
}
|
||||
}
|
||||
|
||||
private void AtualizarDadosTelemetria(AtuadorLogModel dados)
|
||||
{
|
||||
TimeSpan tempoAutonomia = TimeSpan.FromMinutes(Math.Max(0, dados?.TempoEstimadoRestanteMinutos ?? 0));
|
||||
TimeSpan tempoPulverizador = TimeSpan.FromSeconds(Math.Max(0, dados?.TempoPulverizadorAtuado ?? 0));
|
||||
|
||||
telemetryReservatorio.Valor = (dados?.VolumeReservatorio ?? 0).ToString("F1") + " L";
|
||||
telemetryVazaoInstantanea.Valor = (dados?.VazaoFluxoMLpSInstantaneaCorrigida ?? 0).ToString("F0") + " mL/s";
|
||||
telemetryVazaoMedia.Valor = (dados?.VazaoFluxoMLpSMedia ?? 0).ToString("F0") + " mL/s";
|
||||
telemetryPressaoSensor.Valor = (dados?.PressaoSensor ?? 0).ToString("F1") + " psi";
|
||||
telemetryPressaoBomba.Valor = (dados?.PressaoAtualBomba ?? 0).ToString("F1") + " psi";
|
||||
telemetryAutonomiaM.Valor = (dados?.DistanciaEstimadaRestanteMetros ?? 0).ToString("F1") + " m";
|
||||
telemetryAutonomiaTempo.Valor = FormatarTempo(tempoAutonomia);
|
||||
telemetryVolumeAplicado.Valor = (dados?.VolumeVazaoML ?? 0).ToString("F1") + " L";
|
||||
telemetryLitroMetro.Valor = (dados?.LPorMetro ?? 0).ToString("F1") + " L/m";
|
||||
telemetryInfestacao.Valor = (dados?.PercentualErvasTerreno ?? 0).ToString("F1") + "% · Baixa";
|
||||
telemetryTempoLigado.Valor = FormatarTempo(tempoPulverizador);
|
||||
}
|
||||
|
||||
|
||||
private void RegistrarBicos()
|
||||
{
|
||||
_bicos.Add(nozzleB01);
|
||||
|
|
@ -35,61 +245,6 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
{
|
||||
cmbTipoFrame.SelectedIndex = 0;
|
||||
|
||||
nozzleB01.State = HmiNozzleState.Operante;
|
||||
nozzleB02.State = HmiNozzleState.Conectado;
|
||||
nozzleB03.State = HmiNozzleState.Falha;
|
||||
nozzleB04.State = HmiNozzleState.Alerta;
|
||||
nozzleB05.State = HmiNozzleState.Operante;
|
||||
nozzleB06.State = HmiNozzleState.Desconectado;
|
||||
nozzleB07.State = HmiNozzleState.Operante;
|
||||
|
||||
nozzleB01.CommandOn = true;
|
||||
nozzleB01.ReadOn = true;
|
||||
nozzleB02.CommandOn = true;
|
||||
nozzleB02.ReadOn = true;
|
||||
nozzleB03.CommandOn = true;
|
||||
nozzleB03.ReadOn = false;
|
||||
nozzleB04.CommandOn = true;
|
||||
nozzleB04.ReadOn = true;
|
||||
nozzleB05.CommandOn = true;
|
||||
nozzleB05.ReadOn = true;
|
||||
nozzleB06.CommandOn = false;
|
||||
nozzleB06.ReadOn = false;
|
||||
nozzleB07.CommandOn = true;
|
||||
nozzleB07.ReadOn = true;
|
||||
|
||||
nozzleB01.Atuacoes = 1258;
|
||||
nozzleB02.Atuacoes = 1187;
|
||||
nozzleB03.Atuacoes = 892;
|
||||
nozzleB04.Atuacoes = 1023;
|
||||
nozzleB05.Atuacoes = 1290;
|
||||
nozzleB06.Atuacoes = 0;
|
||||
nozzleB07.Atuacoes = 1211;
|
||||
|
||||
nozzleB01.VazaoInstantanea = 980;
|
||||
nozzleB02.VazaoInstantanea = 1011;
|
||||
nozzleB03.VazaoInstantanea = 421;
|
||||
nozzleB04.VazaoInstantanea = 727;
|
||||
nozzleB05.VazaoInstantanea = 951;
|
||||
nozzleB06.VazaoInstantanea = 0;
|
||||
nozzleB07.VazaoInstantanea = 972;
|
||||
|
||||
nozzleB01.VazaoMedia = 960;
|
||||
nozzleB02.VazaoMedia = 990;
|
||||
nozzleB03.VazaoMedia = 631;
|
||||
nozzleB04.VazaoMedia = 701;
|
||||
nozzleB05.VazaoMedia = 940;
|
||||
nozzleB06.VazaoMedia = 0;
|
||||
nozzleB07.VazaoMedia = 959;
|
||||
|
||||
nozzleB01.TempoLigado = "12:34";
|
||||
nozzleB02.TempoLigado = "12:31";
|
||||
nozzleB03.TempoLigado = "08:47";
|
||||
nozzleB04.TempoLigado = "10:55";
|
||||
nozzleB05.TempoLigado = "12:39";
|
||||
nozzleB06.TempoLigado = "00:00";
|
||||
nozzleB07.TempoLigado = "12:17";
|
||||
|
||||
telemetryReservatorio.CorValor = HmiTheme.Info;
|
||||
telemetryVazaoInstantanea.CorValor = HmiTheme.Success;
|
||||
telemetryVazaoMedia.CorValor = HmiTheme.Success;
|
||||
|
|
@ -121,9 +276,7 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
card.CommandOn = !card.CommandOn;
|
||||
}
|
||||
|
||||
private static void AplicarEstadoPainel(
|
||||
HmiRoundedPanel panel,
|
||||
Color color)
|
||||
private static void AplicarEstadoPainel(HmiRoundedPanel panel, Color color)
|
||||
{
|
||||
panel.BorderColor = color;
|
||||
panel.Invalidate();
|
||||
|
|
@ -133,5 +286,23 @@ namespace AgroBase.Forms.IHM.Operacao
|
|||
{
|
||||
get { return _bicos.AsReadOnly(); }
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static string FormatarTempo(TimeSpan tempo)
|
||||
{
|
||||
if (tempo < TimeSpan.Zero)
|
||||
tempo = TimeSpan.Zero;
|
||||
|
||||
int horasTotais = (int)tempo.TotalHours;
|
||||
|
||||
return string.Format(
|
||||
"{0:00}:{1:00}:{2:00}",
|
||||
horasTotais,
|
||||
tempo.Minutes,
|
||||
tempo.Seconds
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@
|
|||
this.btnVoltar.Margin = new System.Windows.Forms.Padding(0, 2, 8, 2);
|
||||
this.btnVoltar.MinimumSize = new System.Drawing.Size(102, 36);
|
||||
this.btnVoltar.Name = "btnVoltar";
|
||||
this.btnVoltar.Size = new System.Drawing.Size(102, 36);
|
||||
this.btnVoltar.Size = new System.Drawing.Size(102, 42);
|
||||
this.btnVoltar.TabIndex = 0;
|
||||
this.btnVoltar.Text = "VOLTAR";
|
||||
//
|
||||
|
|
@ -180,7 +180,7 @@
|
|||
this.headerTextLayout.RowCount = 2;
|
||||
this.headerTextLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 60F));
|
||||
this.headerTextLayout.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F));
|
||||
this.headerTextLayout.Size = new System.Drawing.Size(500, 46);
|
||||
this.headerTextLayout.Size = new System.Drawing.Size(486, 46);
|
||||
this.headerTextLayout.TabIndex = 1;
|
||||
//
|
||||
// lblTitulo
|
||||
|
|
@ -192,7 +192,7 @@
|
|||
this.lblTitulo.Location = new System.Drawing.Point(0, 0);
|
||||
this.lblTitulo.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.lblTitulo.Name = "lblTitulo";
|
||||
this.lblTitulo.Size = new System.Drawing.Size(500, 27);
|
||||
this.lblTitulo.Size = new System.Drawing.Size(486, 27);
|
||||
this.lblTitulo.TabIndex = 0;
|
||||
this.lblTitulo.Text = "AJUSTES DO EQUIPAMENTO";
|
||||
this.lblTitulo.TextAlign = System.Drawing.ContentAlignment.BottomLeft;
|
||||
|
|
@ -206,7 +206,7 @@
|
|||
this.lblSubtitulo.Location = new System.Drawing.Point(0, 27);
|
||||
this.lblSubtitulo.Margin = new System.Windows.Forms.Padding(0);
|
||||
this.lblSubtitulo.Name = "lblSubtitulo";
|
||||
this.lblSubtitulo.Size = new System.Drawing.Size(500, 19);
|
||||
this.lblSubtitulo.Size = new System.Drawing.Size(486, 19);
|
||||
this.lblSubtitulo.TabIndex = 1;
|
||||
this.lblSubtitulo.Text = "Configurações físicas, câmeras e comunicação do rover";
|
||||
//
|
||||
|
|
@ -219,12 +219,12 @@
|
|||
this.pnlRover.CornerRadius = 9;
|
||||
this.pnlRover.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlRover.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(58)))), ((int)(((byte)(46)))));
|
||||
this.pnlRover.Location = new System.Drawing.Point(607, 0);
|
||||
this.pnlRover.Location = new System.Drawing.Point(593, 0);
|
||||
this.pnlRover.Margin = new System.Windows.Forms.Padding(5, 0, 0, 0);
|
||||
this.pnlRover.MinimumSize = new System.Drawing.Size(30, 30);
|
||||
this.pnlRover.Name = "pnlRover";
|
||||
this.pnlRover.Padding = new System.Windows.Forms.Padding(8);
|
||||
this.pnlRover.Size = new System.Drawing.Size(157, 46);
|
||||
this.pnlRover.Size = new System.Drawing.Size(171, 46);
|
||||
this.pnlRover.TabIndex = 2;
|
||||
//
|
||||
// lblRover
|
||||
|
|
@ -235,7 +235,7 @@
|
|||
this.lblRover.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(210)))), ((int)(((byte)(122)))));
|
||||
this.lblRover.Location = new System.Drawing.Point(8, 8);
|
||||
this.lblRover.Name = "lblRover";
|
||||
this.lblRover.Size = new System.Drawing.Size(141, 30);
|
||||
this.lblRover.Size = new System.Drawing.Size(155, 30);
|
||||
this.lblRover.TabIndex = 0;
|
||||
this.lblRover.Text = "ROVER 01\r\nConfiguração local";
|
||||
this.lblRover.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
|
|
@ -577,6 +577,7 @@
|
|||
this.btnRestaurar.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(53)))), ((int)(((byte)(63)))), ((int)(((byte)(69)))));
|
||||
this.btnRestaurar.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnRestaurar.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(36)))), ((int)(((byte)(41)))));
|
||||
this.btnRestaurar.IconText = "●";
|
||||
this.btnRestaurar.Location = new System.Drawing.Point(334, 2);
|
||||
this.btnRestaurar.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2);
|
||||
this.btnRestaurar.MinimumSize = new System.Drawing.Size(130, 36);
|
||||
|
|
@ -592,6 +593,7 @@
|
|||
this.btnSalvar.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(53)))), ((int)(((byte)(63)))), ((int)(((byte)(69)))));
|
||||
this.btnSalvar.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnSalvar.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(36)))), ((int)(((byte)(41)))));
|
||||
this.btnSalvar.IconText = "●";
|
||||
this.btnSalvar.Location = new System.Drawing.Point(464, 2);
|
||||
this.btnSalvar.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2);
|
||||
this.btnSalvar.MinimumSize = new System.Drawing.Size(130, 36);
|
||||
|
|
@ -607,6 +609,7 @@
|
|||
this.btnTestarComunicacao.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(53)))), ((int)(((byte)(63)))), ((int)(((byte)(69)))));
|
||||
this.btnTestarComunicacao.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnTestarComunicacao.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(36)))), ((int)(((byte)(41)))));
|
||||
this.btnTestarComunicacao.IconText = "●";
|
||||
this.btnTestarComunicacao.Location = new System.Drawing.Point(609, 2);
|
||||
this.btnTestarComunicacao.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2);
|
||||
this.btnTestarComunicacao.MinimumSize = new System.Drawing.Size(130, 36);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ namespace AgroBase.Forms.IHM
|
|||
{
|
||||
public partial class frmAjustes : Form, ITelaNavegavel
|
||||
{
|
||||
public event EventHandler VoltarSolicitado;
|
||||
|
||||
private List<OAKCameraModel> ListaCameras = new List<OAKCameraModel>();
|
||||
private OAKCameraModel CameraCaminho = new OAKCameraModel();
|
||||
private List<OAKCameraModel> CamerasSolo = new List<OAKCameraModel>();
|
||||
|
|
@ -22,8 +24,6 @@ namespace AgroBase.Forms.IHM
|
|||
private bool _carregando;
|
||||
private bool _alteracoesPendentes;
|
||||
|
||||
public event EventHandler VoltarSolicitado;
|
||||
|
||||
public frmAjustes()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
|
@ -56,6 +56,11 @@ namespace AgroBase.Forms.IHM
|
|||
}
|
||||
}
|
||||
|
||||
public void AtualizarDadosTela()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void ConfigurarAparencia()
|
||||
{
|
||||
|
|
@ -1330,5 +1335,7 @@ namespace AgroBase.Forms.IHM
|
|||
{ ("OK", null), delegate { } }
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -219,7 +219,7 @@
|
|||
this.btnVoltar.Margin = new System.Windows.Forms.Padding(0, 3, 8, 3);
|
||||
this.btnVoltar.MinimumSize = new System.Drawing.Size(102, 36);
|
||||
this.btnVoltar.Name = "btnVoltar";
|
||||
this.btnVoltar.Size = new System.Drawing.Size(102, 36);
|
||||
this.btnVoltar.Size = new System.Drawing.Size(102, 40);
|
||||
this.btnVoltar.TabIndex = 0;
|
||||
this.btnVoltar.Text = "VOLTAR";
|
||||
//
|
||||
|
|
@ -231,7 +231,7 @@
|
|||
this.headerTextLayout.Controls.Add(this.lblTitulo, 0, 0);
|
||||
this.headerTextLayout.Controls.Add(this.lblSubtitulo, 0, 1);
|
||||
this.headerTextLayout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.headerTextLayout.Location = new System.Drawing.Point(111, 0);
|
||||
this.headerTextLayout.Location = new System.Drawing.Point(109, 0);
|
||||
this.headerTextLayout.Margin = new System.Windows.Forms.Padding(7, 0, 5, 0);
|
||||
this.headerTextLayout.Name = "headerTextLayout";
|
||||
this.headerTextLayout.RowCount = 2;
|
||||
|
|
@ -278,12 +278,12 @@
|
|||
this.pnlHeaderImpedimento.CornerRadius = 8;
|
||||
this.pnlHeaderImpedimento.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pnlHeaderImpedimento.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(35)))), ((int)(((byte)(14)))));
|
||||
this.pnlHeaderImpedimento.Location = new System.Drawing.Point(471, 3);
|
||||
this.pnlHeaderImpedimento.Location = new System.Drawing.Point(469, 3);
|
||||
this.pnlHeaderImpedimento.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||
this.pnlHeaderImpedimento.MinimumSize = new System.Drawing.Size(30, 30);
|
||||
this.pnlHeaderImpedimento.Name = "pnlHeaderImpedimento";
|
||||
this.pnlHeaderImpedimento.Padding = new System.Windows.Forms.Padding(7);
|
||||
this.pnlHeaderImpedimento.Size = new System.Drawing.Size(177, 40);
|
||||
this.pnlHeaderImpedimento.Size = new System.Drawing.Size(179, 40);
|
||||
this.pnlHeaderImpedimento.TabIndex = 2;
|
||||
//
|
||||
// lblImpedimentoGeral
|
||||
|
|
@ -295,7 +295,7 @@
|
|||
this.lblImpedimentoGeral.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(181)))), ((int)(((byte)(68)))));
|
||||
this.lblImpedimentoGeral.Location = new System.Drawing.Point(7, 7);
|
||||
this.lblImpedimentoGeral.Name = "lblImpedimentoGeral";
|
||||
this.lblImpedimentoGeral.Size = new System.Drawing.Size(163, 26);
|
||||
this.lblImpedimentoGeral.Size = new System.Drawing.Size(165, 26);
|
||||
this.lblImpedimentoGeral.TabIndex = 0;
|
||||
this.lblImpedimentoGeral.Text = "⚠ Impedimento: IMU instável";
|
||||
this.lblImpedimentoGeral.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
|
|
@ -1114,6 +1114,7 @@
|
|||
this.btnSalvarModulo.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(53)))), ((int)(((byte)(63)))), ((int)(((byte)(69)))));
|
||||
this.btnSalvarModulo.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnSalvarModulo.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(36)))), ((int)(((byte)(41)))));
|
||||
this.btnSalvarModulo.IconText = "●";
|
||||
this.btnSalvarModulo.Location = new System.Drawing.Point(178, 2);
|
||||
this.btnSalvarModulo.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2);
|
||||
this.btnSalvarModulo.MinimumSize = new System.Drawing.Size(130, 36);
|
||||
|
|
@ -1129,6 +1130,7 @@
|
|||
this.actionsLayout.SetColumnSpan(this.btnIgnorarFalha, 3);
|
||||
this.btnIgnorarFalha.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnIgnorarFalha.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(36)))), ((int)(((byte)(41)))));
|
||||
this.btnIgnorarFalha.IconText = "●";
|
||||
this.btnIgnorarFalha.Location = new System.Drawing.Point(0, 38);
|
||||
this.btnIgnorarFalha.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2);
|
||||
this.btnIgnorarFalha.MinimumSize = new System.Drawing.Size(130, 36);
|
||||
|
|
@ -1472,6 +1474,7 @@
|
|||
this.btnAcao1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(53)))), ((int)(((byte)(63)))), ((int)(((byte)(69)))));
|
||||
this.btnAcao1.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnAcao1.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(36)))), ((int)(((byte)(41)))));
|
||||
this.btnAcao1.IconText = "●";
|
||||
this.btnAcao1.Location = new System.Drawing.Point(0, 2);
|
||||
this.btnAcao1.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2);
|
||||
this.btnAcao1.MinimumSize = new System.Drawing.Size(130, 36);
|
||||
|
|
@ -1486,6 +1489,7 @@
|
|||
this.btnAcao2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(53)))), ((int)(((byte)(63)))), ((int)(((byte)(69)))));
|
||||
this.btnAcao2.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnAcao2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(36)))), ((int)(((byte)(41)))));
|
||||
this.btnAcao2.IconText = "●";
|
||||
this.btnAcao2.Location = new System.Drawing.Point(114, 2);
|
||||
this.btnAcao2.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2);
|
||||
this.btnAcao2.MinimumSize = new System.Drawing.Size(130, 36);
|
||||
|
|
@ -1500,6 +1504,7 @@
|
|||
this.btnAcao3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(53)))), ((int)(((byte)(63)))), ((int)(((byte)(69)))));
|
||||
this.btnAcao3.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.btnAcao3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(36)))), ((int)(((byte)(41)))));
|
||||
this.btnAcao3.IconText = "●";
|
||||
this.btnAcao3.Location = new System.Drawing.Point(228, 2);
|
||||
this.btnAcao3.Margin = new System.Windows.Forms.Padding(0, 2, 0, 2);
|
||||
this.btnAcao3.MinimumSize = new System.Drawing.Size(130, 36);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using AgroBase.Forms.IHM.Controls;
|
||||
using AgroBase.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
|
|
@ -8,10 +9,11 @@ namespace AgroBase.Forms.IHM
|
|||
{
|
||||
public partial class frmDiagnosticos : Form, ITelaNavegavel
|
||||
{
|
||||
public event EventHandler VoltarSolicitado;
|
||||
|
||||
private readonly List<HmiModuleBadge> _badges = new List<HmiModuleBadge>();
|
||||
private readonly Dictionary<HmiModuleBadge, HmiModuleState> _estadoOriginalBadges = new Dictionary<HmiModuleBadge, HmiModuleState>();
|
||||
|
||||
public event EventHandler VoltarSolicitado;
|
||||
|
||||
public frmDiagnosticos()
|
||||
{
|
||||
|
|
@ -23,6 +25,11 @@ namespace AgroBase.Forms.IHM
|
|||
VincularEventos();
|
||||
}
|
||||
|
||||
public void AtualizarDadosTela()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void OrganizarCamadasMapa()
|
||||
{
|
||||
picRover.SendToBack();
|
||||
|
|
|
|||
|
|
@ -239,8 +239,7 @@ namespace AgroBase.Forms.IHM
|
|||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(
|
||||
"Erro no tmrDispositivos_Tick: " + ex.Message);
|
||||
Variaveis.MostrarLog("Erro no tmrDispositivos_Tick: " + ex.Message);
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
|
|
@ -259,239 +258,84 @@ namespace AgroBase.Forms.IHM
|
|||
// =========================================================
|
||||
// BATERIA
|
||||
// =========================================================
|
||||
|
||||
double bateria =
|
||||
operacao?
|
||||
.Sensoriamento?
|
||||
.Bateria?
|
||||
.PercentualBateria ?? 0;
|
||||
|
||||
double bateriaSaude =
|
||||
ObterSaudeModulo(
|
||||
saudeModulos,
|
||||
Enums.T_Code.Bat
|
||||
);
|
||||
|
||||
Color corBateria =
|
||||
CorPorValorESaude(
|
||||
bateria,
|
||||
bateriaSaude
|
||||
);
|
||||
|
||||
AtualizarBateria(
|
||||
$"{Limitar(bateria, 0, 100):0}%",
|
||||
corBateria
|
||||
);
|
||||
double bateria = operacao?.Sensoriamento?.Bateria?.PercentualBateria ?? 0;
|
||||
double bateriaSaude = ObterSaudeModulo(saudeModulos, Enums.T_Code.Bat);
|
||||
Color corBateria = CorPorValorESaude(bateria, bateriaSaude);
|
||||
AtualizarBateria($"{Limitar(bateria, 0, 100):0}%", corBateria);
|
||||
|
||||
// =========================================================
|
||||
// RESERVATÓRIO
|
||||
// =========================================================
|
||||
|
||||
double reservatorio =
|
||||
operacao?
|
||||
.Sensoriamento?
|
||||
.Atuador?
|
||||
.VolumeReservatorio ?? 0;
|
||||
|
||||
double atuadorSaude =
|
||||
ObterSaudeModulo(
|
||||
saudeModulos,
|
||||
Enums.T_Code.Atu
|
||||
);
|
||||
|
||||
/*
|
||||
* Estou considerando VolumeReservatorio como percentual.
|
||||
*
|
||||
* Se ele estiver em litros, converta antes:
|
||||
*
|
||||
* reservatorio =
|
||||
* capacidadeLitros > 0
|
||||
* ? volumeAtualLitros / capacidadeLitros * 100
|
||||
* : 0;
|
||||
*/
|
||||
|
||||
Color corReservatorio =
|
||||
CorPorValorESaude(
|
||||
reservatorio,
|
||||
atuadorSaude
|
||||
);
|
||||
|
||||
AtualizarReservatorio(
|
||||
$"{Limitar(reservatorio, 0, 100):0}%",
|
||||
corReservatorio
|
||||
);
|
||||
double reservatorio = operacao?.Sensoriamento?.Atuador?.PercentualReservatorio ?? 0;
|
||||
double atuadorSaude = ObterSaudeModulo(saudeModulos, Enums.T_Code.Atu);
|
||||
Color corReservatorio = CorPorValorESaude(reservatorio, atuadorSaude);
|
||||
AtualizarReservatorio($"{Limitar(reservatorio, 0, 100):0}%", corReservatorio);
|
||||
|
||||
// =========================================================
|
||||
// TEMPERATURA
|
||||
// =========================================================
|
||||
|
||||
double temperatura =
|
||||
operacao?
|
||||
.Sensoriamento?
|
||||
.CoolerControl?
|
||||
.Temperatura ?? 0;
|
||||
|
||||
double temperaturaSaude =
|
||||
ObterSaudeModulo(
|
||||
saudeModulos,
|
||||
Enums.T_Code.Npc
|
||||
);
|
||||
|
||||
Color corTemperatura =
|
||||
CorTemperatura(
|
||||
temperatura,
|
||||
temperaturaSaude
|
||||
);
|
||||
|
||||
AtualizarTemperatura(
|
||||
$"{temperatura:0.#} °C",
|
||||
corTemperatura
|
||||
);
|
||||
double temperatura = operacao?.Sensoriamento?.CoolerControl?.Temperatura ?? 0;
|
||||
double temperaturaSaude = ObterSaudeModulo(saudeModulos, Enums.T_Code.Npc);
|
||||
Color corTemperatura = CorTemperatura(temperatura, temperaturaSaude);
|
||||
AtualizarTemperatura($"{temperatura:0.#} °C", corTemperatura);
|
||||
|
||||
// =========================================================
|
||||
// REDE / IPB
|
||||
// =========================================================
|
||||
|
||||
double redeSaude =
|
||||
ObterSaudeModulo(
|
||||
saudeModulos,
|
||||
Enums.T_Code.Ipb
|
||||
);
|
||||
|
||||
Color corRede =
|
||||
CorPorPercentual(redeSaude);
|
||||
|
||||
AtualizarRede(
|
||||
$"{Limitar(redeSaude, 0, 100):0}%",
|
||||
corRede
|
||||
);
|
||||
double redeSaude = ObterSaudeModulo(saudeModulos, Enums.T_Code.Ipb);
|
||||
Color corRede = CorPorPercentual(redeSaude);
|
||||
AtualizarRede($"{Limitar(redeSaude, 0, 100):0}%", corRede);
|
||||
|
||||
// =========================================================
|
||||
// GNSS
|
||||
// =========================================================
|
||||
|
||||
var gnss =
|
||||
operacao?
|
||||
.Sensoriamento?
|
||||
.Gps;
|
||||
|
||||
double gnssSaude =
|
||||
ObterSaudeModulo(
|
||||
saudeModulos,
|
||||
Enums.T_Code.Gps
|
||||
);
|
||||
|
||||
bool gnssConectado =
|
||||
gnss != null &&
|
||||
gnssSaude > 0;
|
||||
|
||||
var gnss = operacao?.Sensoriamento?.Gps;
|
||||
double gnssSaude = ObterSaudeModulo(saudeModulos, Enums.T_Code.Gps);
|
||||
bool gnssConectado = gnss != null && gnssSaude > 0;
|
||||
if (!gnssConectado)
|
||||
{
|
||||
AtualizarGnss(
|
||||
"Desconectado",
|
||||
HmiTheme.Danger
|
||||
);
|
||||
AtualizarGnss("Desconectado", HmiTheme.Danger);
|
||||
}
|
||||
else
|
||||
{
|
||||
Enums.TiposCorrecaoGPS qualidadeFix =
|
||||
gnss.QualidadeFix;
|
||||
|
||||
double precisaoCm =
|
||||
Math.Max(
|
||||
0,
|
||||
gnss.PrecisaoCm
|
||||
);
|
||||
|
||||
double notaGnss =
|
||||
CalcularNotaGnss(
|
||||
qualidadeFix,
|
||||
precisaoCm,
|
||||
gnssSaude
|
||||
);
|
||||
|
||||
Color corGnss =
|
||||
CorPorPercentual(notaGnss);
|
||||
|
||||
string textoGnss =
|
||||
$"{FormatarQualidadeGnss(qualidadeFix)} " +
|
||||
$"{precisaoCm:0.##} cm";
|
||||
|
||||
AtualizarGnss(
|
||||
textoGnss,
|
||||
corGnss
|
||||
);
|
||||
Enums.TiposCorrecaoGPS qualidadeFix = gnss.QualidadeFix;
|
||||
double precisaoCm = Math.Max(0, gnss.PrecisaoCm);
|
||||
double notaGnss = CalcularNotaGnss(qualidadeFix, precisaoCm, gnssSaude);
|
||||
Color corGnss = CorPorPercentual(notaGnss);
|
||||
string textoGnss = $"{FormatarQualidadeGnss(qualidadeFix)} " + $"{precisaoCm:0.##} cm";
|
||||
AtualizarGnss(textoGnss, corGnss);
|
||||
}
|
||||
|
||||
// =========================================================
|
||||
// BASE
|
||||
// =========================================================
|
||||
|
||||
bool baseConectada =
|
||||
VariaveisOperacao
|
||||
.PosicaoBase
|
||||
.Inicializado;
|
||||
|
||||
bool baseConectada = VariaveisOperacao.PosicaoBase?.Inicializado ?? false;
|
||||
if (!baseConectada || gnss == null)
|
||||
{
|
||||
AtualizarDistanciaBase(
|
||||
"Desconectada",
|
||||
HmiTheme.Danger
|
||||
);
|
||||
AtualizarDistanciaBase("Desconectada", HmiTheme.Danger);
|
||||
}
|
||||
else
|
||||
{
|
||||
double distanciaBase =
|
||||
GPSUtils.DistanciaEntrePontos(
|
||||
gnss,
|
||||
VariaveisOperacao.PosicaoBase
|
||||
);
|
||||
|
||||
Color corBase =
|
||||
CorDistanciaBase(
|
||||
distanciaBase,
|
||||
1000
|
||||
);
|
||||
|
||||
string distanciaTexto =
|
||||
FormatarDistancia(distanciaBase);
|
||||
|
||||
AtualizarDistanciaBase(
|
||||
distanciaTexto,
|
||||
corBase
|
||||
);
|
||||
double distanciaBase = GPSUtils.DistanciaEntrePontos(gnss, VariaveisOperacao.PosicaoBase);
|
||||
Color corBase = CorDistanciaBase(distanciaBase, 1000);
|
||||
string distanciaTexto = FormatarDistancia(distanciaBase);
|
||||
AtualizarDistanciaBase(distanciaTexto, corBase);
|
||||
}
|
||||
|
||||
// =========================================================
|
||||
// BOTÕES DA OPERAÇÃO
|
||||
// =========================================================
|
||||
|
||||
bool operacaoPausada =
|
||||
dadosOperacao?.Pausa ?? false;
|
||||
|
||||
bool operacaoEmergencia =
|
||||
dadosOperacao?.Emergencia ?? false;
|
||||
|
||||
bool operacaoIniciada =
|
||||
dadosOperacao?.OperacaoIniciada ?? false;
|
||||
|
||||
AtualizarAcoesOperacao(
|
||||
statusOperacao,
|
||||
operacaoIniciada,
|
||||
operacaoPausada,
|
||||
operacaoEmergencia
|
||||
);
|
||||
bool operacaoPausada = dadosOperacao?.Pausa ?? false;
|
||||
bool operacaoEmergencia = dadosOperacao?.Emergencia ?? false;
|
||||
bool operacaoIniciada = dadosOperacao?.OperacaoIniciada ?? false;
|
||||
AtualizarAcoesOperacao(statusOperacao, operacaoIniciada, operacaoPausada, operacaoEmergencia);
|
||||
|
||||
// =========================================================
|
||||
// FORMULÁRIO FILHO ATIVO
|
||||
// =========================================================
|
||||
|
||||
if (
|
||||
_telaAtual != null &&
|
||||
!_telaAtual.IsDisposed &&
|
||||
_telaAtual.Name == frmMenu.Name)
|
||||
if (_telaAtual != null && !_telaAtual.IsDisposed)
|
||||
{
|
||||
frmMenu.AtualizarControlesUI();
|
||||
(_telaAtual as ITelaNavegavel).AtualizarDadosTela();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1040,6 +884,7 @@ namespace AgroBase.Forms.IHM
|
|||
public interface ITelaNavegavel
|
||||
{
|
||||
event EventHandler VoltarSolicitado;
|
||||
void AtualizarDadosTela();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ using static AgroBase.Models.Enums;
|
|||
|
||||
namespace AgroBase.Forms.IHM
|
||||
{
|
||||
public partial class frmMenu : Form
|
||||
public partial class frmMenu : Form, ITelaNavegavel
|
||||
{
|
||||
private bool _sincronizando;
|
||||
|
||||
|
|
@ -24,6 +24,7 @@ namespace AgroBase.Forms.IHM
|
|||
public event EventHandler AjustarLeverArmSolicitado;
|
||||
|
||||
public event EventHandler<TelaSolicitadaEventArgs> TelaSolicitada;
|
||||
public event EventHandler VoltarSolicitado;
|
||||
|
||||
public frmMenu()
|
||||
{
|
||||
|
|
@ -72,6 +73,11 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
}
|
||||
|
||||
public void AtualizarDadosTela()
|
||||
{
|
||||
AtualizarControlesUI();
|
||||
}
|
||||
|
||||
public void AtualizarControlesUI()
|
||||
{
|
||||
bool mqttConectado = Variaveis.MqttServiceLocal != null && Variaveis.MqttServiceLocal.StatusConexao();
|
||||
|
|
@ -383,6 +389,7 @@ namespace AgroBase.Forms.IHM
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
using AgroBase.Forms.IHM.Operacao;
|
||||
using AgroBase.Models;
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
|
|
@ -25,16 +26,18 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
public partial class frmOperacao : Form, ITelaNavegavel
|
||||
{
|
||||
private AbaOperacaoIHM _abaAtual;
|
||||
|
||||
public event EventHandler VoltarSolicitado;
|
||||
public event EventHandler<AbaOperacaoAlteradaEventArgs> AbaAlterada;
|
||||
|
||||
private AbaOperacaoIHM _abaAtual;
|
||||
public event EventHandler<AbaOperacaoAlteradaEventArgs> AbaAlterada;
|
||||
private readonly ucOperacaoMovimentacao _ucMovimentacao = new ucOperacaoMovimentacao { Dock = DockStyle.Fill };
|
||||
private readonly ucOperacaoPulverizador _ucPulverizador = new ucOperacaoPulverizador { Dock = DockStyle.Fill };
|
||||
private readonly ucOperacaoNavegacao _ucNavegacao = new ucOperacaoNavegacao { Dock = DockStyle.Fill };
|
||||
private readonly ucOperacaoParametros _ucParametros = new ucOperacaoParametros { Dock = DockStyle.Fill };
|
||||
|
||||
public Panel PainelConteudo { get { return pnlConteudoAba; } }
|
||||
public AbaOperacaoIHM AbaAtual { get { return _abaAtual; } }
|
||||
|
||||
public frmOperacao()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
|
@ -42,8 +45,25 @@ namespace AgroBase.Forms.IHM
|
|||
SelecionarAba(AbaOperacaoIHM.Movimentacao, false);
|
||||
}
|
||||
|
||||
public Panel PainelConteudo { get { return pnlConteudoAba; } }
|
||||
public AbaOperacaoIHM AbaAtual { get { return _abaAtual; } }
|
||||
public void AtualizarDadosTela()
|
||||
{
|
||||
switch (_abaAtual)
|
||||
{
|
||||
case AbaOperacaoIHM.Movimentacao:
|
||||
_ucMovimentacao.AtualizarDadosTela();
|
||||
break;
|
||||
case AbaOperacaoIHM.Pulverizador:
|
||||
_ucPulverizador.AtualizarDadosTela();
|
||||
break;
|
||||
case AbaOperacaoIHM.Navegacao:
|
||||
break;
|
||||
case AbaOperacaoIHM.Parametros:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void VincularEventos()
|
||||
{
|
||||
|
|
@ -59,6 +79,7 @@ namespace AgroBase.Forms.IHM
|
|||
tabParametros.Click += delegate { SelecionarAba(AbaOperacaoIHM.Parametros, true); };
|
||||
}
|
||||
|
||||
|
||||
public void SelecionarAba(AbaOperacaoIHM aba)
|
||||
{
|
||||
SelecionarAba(aba, true);
|
||||
|
|
|
|||
|
|
@ -256,6 +256,9 @@ namespace AgroBase
|
|||
private void btnJoyAtt_Click(object sender, EventArgs e)
|
||||
{
|
||||
GeneralJoystick.AtualizaDispositivo();
|
||||
cmbJoysticks.Items.Clear();
|
||||
cmbJoysticks.Items.AddRange(GeneralJoystick.JoysticksConectados.ToArray());
|
||||
cmbJoysticks.SelectedIndex = GeneralJoystick.JoysticksConectados.IndexOf(GeneralJoystick.JoystickConectado.Information.InstanceName);
|
||||
}
|
||||
|
||||
private void btnJoyEdt_Click(object sender, EventArgs e)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ namespace AgroBase
|
|||
{
|
||||
public class GeneralJoystick
|
||||
{
|
||||
public static List<string> JoysticksConectados = new List<string>();
|
||||
public static Joystick JoystickConectado = null;
|
||||
public static int MargemAnalogico = 100;
|
||||
public static int MaximoAnalogico = 65534;
|
||||
|
|
@ -66,17 +67,18 @@ namespace AgroBase
|
|||
{
|
||||
DispCon = Variaveis.DispositivosConectados.Where(x => x.Dados.ConexaoAtiva).ToList();
|
||||
frmInstancial.frmJoystick.lblDispositivo.Text = "Dispositivos: " + (DispCon.Count == 0 ? "N/A" : string.Join(", ", DispCon.Select(x => x._Descricao + " (" + Enum.GetName(typeof(T_Code), x.Dispositivo) + ")").ToArray()));
|
||||
frmInstancial.frmPrincipal.cmbJoysticks.Items.Clear();
|
||||
|
||||
InicializarJoysticksConectados();
|
||||
|
||||
return true;
|
||||
});
|
||||
FuncoesGlobais.ExecutarMetodoComVerificacaoCrossThread(frmInstancial.frmPrincipal.cmbJoysticks, funcAtt);
|
||||
FuncoesGlobais.ExecutarMetodoComVerificacaoCrossThread(frmInstancial.frmJoystick.lblDispositivo, funcAtt);
|
||||
}
|
||||
|
||||
public static void InicializarJoysticksConectados()
|
||||
{
|
||||
JoysticksConectados = new List<string>();
|
||||
|
||||
var directInput = new DirectInput();
|
||||
|
||||
// Find a Joystick Guid
|
||||
|
|
@ -85,7 +87,7 @@ namespace AgroBase
|
|||
foreach (var deviceInstance in directInput.GetDevices(DeviceType.Gamepad, DeviceEnumerationFlags.AllDevices))
|
||||
{
|
||||
joystickGuid = deviceInstance.InstanceGuid;
|
||||
frmInstancial.frmPrincipal.cmbJoysticks.Items.Add(deviceInstance.InstanceName);
|
||||
JoysticksConectados.Add(deviceInstance.InstanceName);
|
||||
}
|
||||
|
||||
// If Gamepad not found, look for a Joystick
|
||||
|
|
@ -94,7 +96,7 @@ namespace AgroBase
|
|||
foreach (var deviceInstance in directInput.GetDevices(DeviceType.Joystick, DeviceEnumerationFlags.AllDevices))
|
||||
{
|
||||
joystickGuid = deviceInstance.InstanceGuid;
|
||||
frmInstancial.frmPrincipal.cmbJoysticks.Items.Add(deviceInstance.InstanceName);
|
||||
JoysticksConectados.Add(deviceInstance.InstanceName);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -127,7 +129,6 @@ namespace AgroBase
|
|||
if (JoystickConectado != null)
|
||||
{
|
||||
tmrJoystick.Start();
|
||||
frmInstancial.frmPrincipal.cmbJoysticks.SelectedIndex = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -553,13 +554,16 @@ namespace AgroBase
|
|||
(op.Parametros.Controle.MovimentoAutomatico && Comando.Dispositivo == T_Code.Mov) ||
|
||||
(op.Parametros.Controle.DirecionalAutomatico && Comando.Dispositivo == T_Code.Dir);
|
||||
|
||||
bool bloqueioCalibragem =
|
||||
op.Sensoriamento.Operacao.Calibrando;
|
||||
|
||||
bool bloqueioOperacional =
|
||||
op.Sensoriamento.Operacao.Calibrando ||
|
||||
!op.Sensoriamento.Operacao.OperacaoLiberada ||
|
||||
!op.Sensoriamento.Operacao.OperacaoIniciada;
|
||||
|
||||
bool deveInterromper =
|
||||
bloqueioAutomatico ||
|
||||
bloqueioCalibragem ||
|
||||
!VerificaComandoValidoSonar(Comando.key) ||
|
||||
(!ForcarComando && bloqueioOperacional);
|
||||
|
||||
|
|
|
|||
|
|
@ -4938,6 +4938,14 @@ namespace AgroBase.Models
|
|||
public List<OperacaoSensoriamentoLogErrosModel> Logs { get; set; } = new List<OperacaoSensoriamentoLogErrosModel>();
|
||||
// CoolerControl
|
||||
public CoolerControlDataModel CoolerControl { get; set; } = new CoolerControlDataModel();
|
||||
// Cameras
|
||||
public List<CameraWorkerItemModel> Cameras { get; set; } = new List<CameraWorkerItemModel>();
|
||||
public void AtualizarCameras()
|
||||
{
|
||||
Cameras = CameraWorkerService.ListaCameras != null
|
||||
? new List<CameraWorkerItemModel>(CameraWorkerService.ListaCameras)
|
||||
: new List<CameraWorkerItemModel>();
|
||||
}
|
||||
|
||||
public DateTime UltimoRegistroLog { get; set; } = DateTime.MinValue;
|
||||
|
||||
|
|
@ -4988,6 +4996,7 @@ namespace AgroBase.Models
|
|||
AtualizarTrajetoria(agora);
|
||||
AtualizarGps(agora);
|
||||
AtualizarLivox(agora);
|
||||
AtualizarCameras();
|
||||
DadosPerformance.AtualizarDadosPerformance();
|
||||
|
||||
|
||||
|
|
@ -5031,6 +5040,7 @@ namespace AgroBase.Models
|
|||
var dadosHealthWorker = OperadorSaude?.Clone();
|
||||
var dadosLivox = LivoxLidar?.Clone();
|
||||
var dadosCooler = _Cooler?.GetResumo(agora);
|
||||
var dadosCameras = new List<CameraWorkerItemModel>(Cameras ?? new List<CameraWorkerItemModel>());
|
||||
op.Controle.Momento = agora;
|
||||
|
||||
OperacaoSensoriamentoConjuntoModel dadosAtualizados = new OperacaoSensoriamentoConjuntoModel(op)
|
||||
|
|
@ -5051,6 +5061,7 @@ namespace AgroBase.Models
|
|||
DadosPerformance = dadosPerformance,
|
||||
LivoxLidar = dadosLivox,
|
||||
CoolerControl = dadosCooler,
|
||||
Cameras = dadosCameras,
|
||||
Logs = op.ListarEventosPendentes(),
|
||||
UltimoRegistroLog = UltimoRegistroLog,
|
||||
};
|
||||
|
|
@ -5078,6 +5089,7 @@ namespace AgroBase.Models
|
|||
IMU = IMU?.Clone(),
|
||||
LivoxLidar = LivoxLidar?.Clone(),
|
||||
CoolerControl = CoolerControl?.Clone(),
|
||||
Cameras = new List<CameraWorkerItemModel>(Cameras ?? new List<CameraWorkerItemModel>()),
|
||||
Logs = new List<OperacaoSensoriamentoLogErrosModel>(Logs ?? new List<OperacaoSensoriamentoLogErrosModel>()),
|
||||
UltimoRegistroLog = UltimoRegistroLog,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -176,6 +176,36 @@ namespace AgroBase.Models.Operacoes
|
|||
|
||||
public class OperacaoParametrosControleModel : INotifyPropertyChanged
|
||||
{
|
||||
private bool _controleManualAcionado;
|
||||
public bool ControleManualAcionado
|
||||
{
|
||||
get => _controleManualAcionado;
|
||||
set
|
||||
{
|
||||
if (_controleManualAcionado != value)
|
||||
{
|
||||
_controleManualAcionado = value;
|
||||
OnPropertyChanged(nameof(ControleManualAcionado));
|
||||
|
||||
if (_controleManualAcionado)
|
||||
{
|
||||
_movimentoAutomaticoAnterior = _movimentoAutomatico;
|
||||
_direcionalAutomaticoAnterior = _direcionalAutomatico;
|
||||
_movimentoAutomatico = false;
|
||||
_direcionalAutomatico = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_movimentoAutomatico != _movimentoAutomaticoAnterior)
|
||||
_movimentoAutomatico = _movimentoAutomaticoAnterior;
|
||||
if (_direcionalAutomatico != _direcionalAutomaticoAnterior)
|
||||
_direcionalAutomatico = _direcionalAutomaticoAnterior;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool _movimentoAutomaticoAnterior;
|
||||
private bool _movimentoAutomatico;
|
||||
public bool MovimentoAutomatico
|
||||
{
|
||||
|
|
@ -190,6 +220,7 @@ namespace AgroBase.Models.Operacoes
|
|||
}
|
||||
}
|
||||
|
||||
private bool _direcionalAutomaticoAnterior;
|
||||
private bool _direcionalAutomatico;
|
||||
public bool DirecionalAutomatico
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue