修改config
This commit is contained in:
@ -21,16 +21,198 @@ namespace DHSoftware.Views
|
||||
public partial class DetectControl : UserControl
|
||||
{
|
||||
Window window;
|
||||
// DetectionConfig detectionConfig;
|
||||
private DetectionConfig _config;
|
||||
List<RelatedCamera> relatedCameras = new List<RelatedCamera>();
|
||||
|
||||
AntList<PreTreatParam> PreTreatList;
|
||||
AntList<PreTreatParam> PreOutTreatList;
|
||||
AntList<DetectionLable> DetectionLableList;
|
||||
AntList<SizeTreatParam> SizeLableList;
|
||||
PreTreatParam curPreTreat;
|
||||
PreTreatParam curPreOutTreat;
|
||||
DetectionLable curDetectionLable;
|
||||
SizeTreatParam SizeParamLable;
|
||||
public DetectionConfig detectionConfig
|
||||
{
|
||||
get => _config;
|
||||
set
|
||||
{
|
||||
if (_config != null)
|
||||
{
|
||||
_config.PropertyChanged -= Config_PropertyChanged; // 解绑旧的
|
||||
}
|
||||
|
||||
_config = value;
|
||||
|
||||
if (_config != null)
|
||||
{
|
||||
_config.PropertyChanged += Config_PropertyChanged; // 绑定新的
|
||||
UpdateUI(); // 初始化 UI
|
||||
}
|
||||
}
|
||||
}
|
||||
private void Config_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
// 监听所有属性变化
|
||||
switch (e.PropertyName)
|
||||
{
|
||||
case nameof(DetectionConfig.IsAddStation):
|
||||
swIsAddStation.Checked = _config.IsAddStation;
|
||||
break;
|
||||
case nameof(DetectionConfig.IsEnabled):
|
||||
swIsEnabled.Checked = _config.IsEnabled;
|
||||
break;
|
||||
case nameof(DetectionConfig.ModelType):
|
||||
stDetectType.SelectedIndex = (int)_config.ModelType-1;
|
||||
break;
|
||||
case nameof(DetectionConfig.ModelconfThreshold):
|
||||
if (iptScore.InvokeRequired)
|
||||
{
|
||||
iptScore.Invoke(() => iptScore.Text = _config.ModelconfThreshold.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
iptScore.Text = _config.ModelconfThreshold.ToString();
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case nameof(DetectionConfig.PreTreatCollects):
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void UpdateUI()
|
||||
{
|
||||
if (_config == null) return;
|
||||
|
||||
swIsAddStation.Checked = _config.IsAddStation;
|
||||
swIsEnabled.Checked = _config.IsEnabled;
|
||||
stDetectType.SelectedIndex = (int)_config.ModelType - 1;
|
||||
iptScore.Text = _config.ModelconfThreshold.ToString();
|
||||
iptModelPath.Text = _config.ModelPath;
|
||||
swtPre.Checked = _config.IsPreEnabled;
|
||||
iptPrePath.Text = _config.HalconAlgorithemPath_Pre;
|
||||
// textBoxName.Text = _config.Name;
|
||||
// checkBoxEnableGPU.Checked = _config.IsEnableGPU;
|
||||
}
|
||||
public DetectControl(Window _window)
|
||||
{
|
||||
window = _window;
|
||||
InitializeComponent();
|
||||
//this.detectionConfig = detectionConfig;
|
||||
//初始化表格列头
|
||||
InitTableColumns();
|
||||
InitData();
|
||||
BindEventHandler();
|
||||
}
|
||||
foreach (var item in MLModelTypes)
|
||||
{
|
||||
stDetectType.Items.Add(item.Key);
|
||||
}
|
||||
|
||||
BindEventHandler();
|
||||
// 如果你的控件是通过设计器生成的,确保事件已经在设计器文件中绑定。
|
||||
swtPre.CheckedChanged += swtPre_CheckedChanged; // 确保控件的事件处理器被注册
|
||||
swIsAddStation.CheckedChanged += swIsAddStation_CheckedChanged; // 确保控件的事件处理器被注册
|
||||
swIsEnabled.CheckedChanged += swIsEnabled_CheckedChanged; // 确保控件的事件处理器被注册
|
||||
stDetectType.SelectedIndexChanged += stDetectType_SelectedIndexChanged; // 确保控件的事件处理器被注册
|
||||
iptScore.TextChanged += IptScore_TextChanged;
|
||||
iptModelPath.TextChanged += IptModelPath_TextChanged;
|
||||
}
|
||||
private void IptScore_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (_config != null && !string.IsNullOrEmpty(iptScore.Text))
|
||||
{
|
||||
if (float.TryParse(iptScore.Text, out float score) && _config.ModelconfThreshold != score)
|
||||
{
|
||||
_config.ModelconfThreshold = score;
|
||||
}
|
||||
else
|
||||
{
|
||||
iptScore.Text = _config.ModelconfThreshold.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
private void IptModelPath_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (_config != null && !string.IsNullOrEmpty(iptModelPath.Text))
|
||||
{
|
||||
if ( _config.ModelPath != iptModelPath.Text)
|
||||
{
|
||||
_config.ModelPath = iptModelPath.Text;
|
||||
}
|
||||
else
|
||||
{
|
||||
iptModelPath.Text = _config.ModelPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
private void stDetectType_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
// 下拉选项变更事件处理
|
||||
|
||||
if (_config != null && stDetectType.SelectedIndex != -1)
|
||||
{
|
||||
// 防止循环更新
|
||||
if ((int)_config.ModelType != stDetectType.SelectedIndex + 1)
|
||||
{
|
||||
_config.ModelType = (MLModelType)(stDetectType.SelectedIndex + 1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
private void swtPre_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
// 当用户改变控件的值时,更新数据模型的属性
|
||||
if (_config != null)
|
||||
{
|
||||
_config.IsPreEnabled = swtPre.Checked;
|
||||
}
|
||||
}
|
||||
private void swIsAddStation_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
// 当用户改变控件的值时,更新数据模型的属性
|
||||
if (_config != null)
|
||||
{
|
||||
_config.IsAddStation = swIsAddStation.Checked;
|
||||
}
|
||||
}
|
||||
private void swIsEnabled_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
// 当用户改变控件的值时,更新数据模型的属性
|
||||
if (_config != null)
|
||||
{
|
||||
_config.IsEnabled = swIsEnabled.Checked;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 更新尺寸测量表格
|
||||
/// </summary>
|
||||
private void UpdatePreTreatCollectsFromSizeTable()
|
||||
{
|
||||
// 假设 SizeLableList 是 SizeTable 的数据源
|
||||
List<SizeTreatParam> updatedPreTreatCollects = new List<SizeTreatParam>();
|
||||
|
||||
foreach (var sizeTreat in SizeLableList)
|
||||
{
|
||||
var preTreatCollect = new SizeTreatParam
|
||||
{
|
||||
IsEnable = sizeTreat.IsEnable,
|
||||
PreName = sizeTreat.PreName,
|
||||
PrePix = sizeTreat.PrePix,
|
||||
PreType = sizeTreat.PreType,
|
||||
ResultShow = sizeTreat.ResultShow,
|
||||
OutResultShow = sizeTreat.OutResultShow
|
||||
};
|
||||
|
||||
updatedPreTreatCollects.Add(preTreatCollect);
|
||||
}
|
||||
|
||||
// 将更新后的数据设置到 PreTreatCollects
|
||||
detectionConfig.PreTreatCollects = updatedPreTreatCollects;
|
||||
}
|
||||
private void BindEventHandler()
|
||||
{
|
||||
//预处理
|
||||
@ -46,6 +228,9 @@ namespace DHSoftware.Views
|
||||
//中处理
|
||||
btnPath2.Click += BtnPath2_Click;
|
||||
btnCorrelatedCamera.Click += BtnCorrelatedCamera_Click;
|
||||
|
||||
|
||||
|
||||
btnPic.Click += BtnPic_Click;
|
||||
btnLableAdd.Click += BtnLableAdd_Click;
|
||||
btnLableDelete.Click += BtnLableDelete_Click;
|
||||
@ -113,6 +298,8 @@ namespace DHSoftware.Views
|
||||
OnClose = () =>
|
||||
{
|
||||
AntdUI.Message.info(window, "结束编辑", autoClose: 1);
|
||||
|
||||
UpdatePreTreatCollectsFromSizeTable();
|
||||
}
|
||||
});
|
||||
break;
|
||||
@ -120,6 +307,7 @@ namespace DHSoftware.Views
|
||||
var result = Modal.open(window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
|
||||
if (result == DialogResult.OK)
|
||||
SizeLableList.Remove(sizeTreat);
|
||||
UpdatePreTreatCollectsFromSizeTable();
|
||||
break;
|
||||
case "进行测量":
|
||||
var sizeType = ((int)SizeParamLable.PreType).ToString();
|
||||
@ -150,7 +338,7 @@ namespace DHSoftware.Views
|
||||
MessageBox.Show("未定义的测量类型!");
|
||||
break;
|
||||
}
|
||||
|
||||
UpdatePreTreatCollectsFromSizeTable();
|
||||
//使用clone可以防止table中的image被修改
|
||||
//Preview.open(new Preview.Config(window, (Image)SizeParamLable.CellImages[0].Image.Clone()));
|
||||
break;
|
||||
@ -237,7 +425,7 @@ namespace DHSoftware.Views
|
||||
//CellBadge = new CellBadge(SizeEnum.Circle.GetEnumDescription()),
|
||||
CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
|
||||
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
new CellButton(Guid.NewGuid().ToString(),"进行测量",TTypeMini.Primary)
|
||||
}
|
||||
@ -260,7 +448,7 @@ namespace DHSoftware.Views
|
||||
|
||||
}
|
||||
|
||||
List<RelatedCamera> relatedCameras = new List<RelatedCamera>();
|
||||
|
||||
private void BtnCorrelatedCamera_Click(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
@ -274,37 +462,8 @@ namespace DHSoftware.Views
|
||||
if (form.submit)
|
||||
{
|
||||
flowPanel1.Controls.Clear();
|
||||
if (relatedCameras.Count > 0)
|
||||
{
|
||||
foreach (var item in relatedCameras)
|
||||
{
|
||||
var control = new AntdUI.Tag()
|
||||
{
|
||||
Font = new System.Drawing.Font("Microsoft YaHei UI", 9F),
|
||||
Size = new Size(90, 42),
|
||||
Text = item.CameraSourceId,
|
||||
CloseIcon = true
|
||||
};
|
||||
control.CloseChanged += (sender, e) =>
|
||||
{
|
||||
var tag = sender as Tag;
|
||||
foreach (var item in relatedCameras)
|
||||
{
|
||||
if (item.CameraSourceId.Equals(tag.Text))
|
||||
{
|
||||
relatedCameras.Remove(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
};
|
||||
// 通过主窗口设置DPI控制添加控件保持缩放比例
|
||||
window.AutoDpi(control);
|
||||
flowPanel1.Controls.Add(control);
|
||||
control.BringToFront();
|
||||
}
|
||||
}
|
||||
InitRelatedCamera();
|
||||
detectionConfig.CameraCollects=relatedCameras;
|
||||
}
|
||||
}
|
||||
|
||||
@ -329,8 +488,8 @@ namespace DHSoftware.Views
|
||||
{
|
||||
string filePath = openFileDialog.FileName;
|
||||
|
||||
iptPath2.Text = filePath;
|
||||
|
||||
iptModelPath.Text = filePath;
|
||||
_config.ModelPath = filePath;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -398,7 +557,7 @@ namespace DHSoftware.Views
|
||||
{
|
||||
PreTreatParam preParam = new PreTreatParam()
|
||||
{
|
||||
|
||||
|
||||
CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
@ -500,37 +659,112 @@ namespace DHSoftware.Views
|
||||
}
|
||||
}
|
||||
|
||||
AntList<PreTreatParam> PreTreatList;
|
||||
AntList<PreTreatParam> PreOutTreatList;
|
||||
AntList<DetectionLable> DetectionLableList;
|
||||
AntList<SizeTreatParam> SizeLableList;
|
||||
PreTreatParam curPreTreat;
|
||||
PreTreatParam curPreOutTreat;
|
||||
DetectionLable curDetectionLable;
|
||||
SizeTreatParam SizeParamLable;
|
||||
|
||||
//加载相机
|
||||
private void InitRelatedCamera()
|
||||
{
|
||||
if (relatedCameras.Count > 0)
|
||||
{
|
||||
foreach (var item in relatedCameras)
|
||||
{
|
||||
var control = new AntdUI.Tag()
|
||||
{
|
||||
Font = new System.Drawing.Font("Microsoft YaHei UI", 9F),
|
||||
Size = new Size(90, 42),
|
||||
Text = item.CameraSourceId,
|
||||
CloseIcon = true
|
||||
};
|
||||
control.CloseChanged += (sender, e) =>
|
||||
{
|
||||
var tag = sender as Tag;
|
||||
foreach (var item in relatedCameras)
|
||||
{
|
||||
if (item.CameraSourceId.Equals(tag.Text))
|
||||
{
|
||||
relatedCameras.Remove(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
detectionConfig.CameraCollects = relatedCameras;
|
||||
return true;
|
||||
|
||||
};
|
||||
// 通过主窗口设置DPI控制添加控件保持缩放比例
|
||||
window.AutoDpi(control);
|
||||
flowPanel1.Controls.Add(control);
|
||||
control.BringToFront();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
PreTreatList = new AntList<PreTreatParam>();
|
||||
relatedCameras = detectionConfig.CameraCollects;
|
||||
InitRelatedCamera();
|
||||
|
||||
// swIsAddStation. = detectionConfig.IsAddStation;
|
||||
PreTreatList = new AntList<PreTreatParam>();
|
||||
foreach (var item in detectionConfig.PreTreatParams)
|
||||
{
|
||||
PreTreatParam lable = item;
|
||||
lable.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
};
|
||||
PreTreatList.Add(lable);
|
||||
}
|
||||
preTable.Binding(PreTreatList);
|
||||
|
||||
PreOutTreatList = new AntList<PreTreatParam>();
|
||||
foreach (var item in detectionConfig.OUTPreTreatParams)
|
||||
{
|
||||
PreTreatParam lable = item;
|
||||
lable.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
};
|
||||
PreOutTreatList.Add(lable);
|
||||
}
|
||||
|
||||
PreOutTable.Binding(PreOutTreatList);
|
||||
|
||||
|
||||
foreach (var item in MLModelTypes)
|
||||
|
||||
|
||||
DetectionLableList = new AntList<DetectionLable>();
|
||||
foreach (var item in detectionConfig.DetectionLableList)
|
||||
{
|
||||
stDetectType.Items.Add(item.Key);
|
||||
DetectionLable lable = item;
|
||||
lable.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
};
|
||||
DetectionLableList.Add(lable);
|
||||
}
|
||||
|
||||
|
||||
DetectionLableList = new AntList<DetectionLable>();
|
||||
|
||||
lableTable.Binding(DetectionLableList);
|
||||
|
||||
SizeLableList = new AntList<SizeTreatParam>();
|
||||
// SizeLableList = new AntList<SizeTreatParam>(_config.PreTreatCollects);
|
||||
foreach (var item in _config.PreTreatCollects)
|
||||
{
|
||||
|
||||
|
||||
item.CellLinks = new CellLink[] {
|
||||
new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
|
||||
new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
|
||||
new CellButton(Guid.NewGuid().ToString(),"进行测量",TTypeMini.Primary)
|
||||
};
|
||||
// SizeLableList.Add(item);
|
||||
}
|
||||
// 将 List<PreTreatCollect> 转换为 AntList<PreTreatCollect>
|
||||
SizeLableList = new AntList<SizeTreatParam>(_config.PreTreatCollects);
|
||||
|
||||
// 绑定转换后的数据到 SizeTable
|
||||
SizeTable.Binding(SizeLableList);
|
||||
//SizeTable.Binding(_config.PreTreatCollects);
|
||||
|
||||
}
|
||||
|
||||
@ -564,14 +798,16 @@ namespace DHSoftware.Views
|
||||
|
||||
SizeTable.Columns = new ColumnCollection() {
|
||||
new ColumnCheck("Selected"){Fixed = true},
|
||||
new ColumnSwitch("IsEnable", "是否启用", ColumnAlign.Center),
|
||||
new Column("PreName", "测量名称",ColumnAlign.Center),
|
||||
new Column("PreType", "测量类型", ColumnAlign.Center),
|
||||
new Column("PrePix", "阈值", ColumnAlign.Center),
|
||||
new Column("ResultShow", "输入参数", ColumnAlign.Center),
|
||||
new Column("OutResultShow", "输出参数", ColumnAlign.Center),
|
||||
new Column("CellLinks", "操作", ColumnAlign.Center)
|
||||
new ColumnSwitch("IsEnable", "是否启用") {Width = "10%" },
|
||||
new Column("PreName", "测量名称") { Width = "15%" },
|
||||
new Column("PreType", "测量类型") { Width = "10%" },
|
||||
new Column("PrePix", "阈值") { Width = "5%" },
|
||||
new Column("ResultShow", "输入参数") { Width = "15%" },
|
||||
new Column("OutResultShow", "输出参数") { Width = "15%" },
|
||||
new Column("CellLinks", "操作") { Width = "30%" }
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void btnPath_Click(object? sender, EventArgs e)
|
||||
@ -590,7 +826,7 @@ namespace DHSoftware.Views
|
||||
{
|
||||
string filePath = openFileDialog.FileName;
|
||||
|
||||
iptPath.Text = filePath;
|
||||
iptPrePath.Text = filePath;
|
||||
|
||||
}
|
||||
}
|
||||
@ -608,6 +844,12 @@ namespace DHSoftware.Views
|
||||
|
||||
}
|
||||
|
||||
private void DetectControl_Load(object sender, EventArgs e)
|
||||
{
|
||||
InitData();
|
||||
|
||||
}
|
||||
|
||||
public static List<KeyValuePair<string, int>> GetFilteredEnumDescriptionsAndValues<T>() where T : Enum
|
||||
{
|
||||
return Enum.GetValues(typeof(T))
|
||||
|
Reference in New Issue
Block a user