正确显示区域框线,没收到温度数据时也显示
This commit is contained in:
@@ -117,22 +117,22 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
// 只有当值发生变化时才进行同步
|
// 只有当值发生变化时才进行同步
|
||||||
if (_projectPath != value)
|
if (_projectPath != value)
|
||||||
{
|
|
||||||
_projectPath = value;
|
|
||||||
// 如果DeviceManager已经初始化,则同步更新其ProjectPath属性
|
|
||||||
if (_deviceManager != null)
|
|
||||||
{
|
{
|
||||||
_deviceManager.ProjectPath = _projectPath;
|
_projectPath = value;
|
||||||
|
// 如果DeviceManager已经初始化,则同步更新其ProjectPath属性
|
||||||
|
if (_deviceManager != null)
|
||||||
|
{
|
||||||
|
_deviceManager.ProjectPath = _projectPath;
|
||||||
|
}
|
||||||
|
// 只有当自动配置开启时,才加载配置文件
|
||||||
|
if (_autoConfig && !_isConfigLoaded)
|
||||||
|
{
|
||||||
|
LoadAllConfigs();
|
||||||
|
// 设置配置已加载标志
|
||||||
|
_isConfigLoaded = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 只有当自动配置开启时,才加载配置文件
|
|
||||||
if (_autoConfig && !_isConfigLoaded)
|
|
||||||
{
|
|
||||||
LoadAllConfigs();
|
|
||||||
// 设置配置已加载标志
|
|
||||||
_isConfigLoaded = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -601,7 +601,7 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
// 延迟启动相机,避免界面卡顿
|
// 延迟启动相机,避免界面卡顿
|
||||||
ThreadPool.QueueUserWorkItem(delegate
|
ThreadPool.QueueUserWorkItem(delegate
|
||||||
{
|
{
|
||||||
while(!IsDevicePingable)
|
while (!IsDevicePingable)
|
||||||
Thread.Sleep(3000); // 延迟3秒后启动
|
Thread.Sleep(3000); // 延迟3秒后启动
|
||||||
_isFirst = false;
|
_isFirst = false;
|
||||||
this.Invoke(new Action(() =>
|
this.Invoke(new Action(() =>
|
||||||
@@ -643,7 +643,7 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
|
|
||||||
// 设置静态属性
|
// 设置静态属性
|
||||||
DeviceManager.MaxReconnectAttempts = 5;
|
DeviceManager.MaxReconnectAttempts = 5;
|
||||||
|
|
||||||
// 异步加载配置文件,避免阻塞主线程
|
// 异步加载配置文件,避免阻塞主线程
|
||||||
if (!_isConfigLoaded)
|
if (!_isConfigLoaded)
|
||||||
{
|
{
|
||||||
@@ -2582,7 +2582,7 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
ApplyMenuState(menuStates, "avgTemperature", avgTemperatureToolStripMenuItem);
|
ApplyMenuState(menuStates, "avgTemperature", avgTemperatureToolStripMenuItem);
|
||||||
if (minTemperatureToolStripMenuItem != null)
|
if (minTemperatureToolStripMenuItem != null)
|
||||||
ApplyMenuState(menuStates, "minTemperature", minTemperatureToolStripMenuItem);
|
ApplyMenuState(menuStates, "minTemperature", minTemperatureToolStripMenuItem);
|
||||||
|
|
||||||
// 同步菜单状态到对应的私有字段,确保与显示逻辑一致
|
// 同步菜单状态到对应的私有字段,确保与显示逻辑一致
|
||||||
if (globalTemperatureToolStripMenuItem != null)
|
if (globalTemperatureToolStripMenuItem != null)
|
||||||
_showGlobalTemperature = globalTemperatureToolStripMenuItem.Checked;
|
_showGlobalTemperature = globalTemperatureToolStripMenuItem.Checked;
|
||||||
@@ -2936,23 +2936,7 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
|
|
||||||
if (_deviceManager.CurrentImageMode == ImageMode.Infrared)
|
if (_deviceManager.CurrentImageMode == ImageMode.Infrared)
|
||||||
{
|
{
|
||||||
// 2. 如果没有温度数据或温度数据的时间3秒之前,返回
|
// 1. 先绘制区域框线,不受温度数据影响,只受显示设置影响
|
||||||
TemperatureData temperatureData = _deviceManager.LastTemperature;
|
|
||||||
if (temperatureData == null || temperatureData.Timestamp == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeSpan timeDiff = DateTime.Now - temperatureData.Timestamp;
|
|
||||||
if (timeDiff.TotalSeconds > 3)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// 3. 温度显示菜单下如果未勾选区域温度和全局温度,则不显示任何温度信息
|
|
||||||
if (!_showGlobalTemperature && !_showAreaTemperature)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// 4. 如果勾选了全局温度且未勾选区域温度,则显示全局温度(居中显示),否则显示区域温度(居中显示)
|
|
||||||
bool isGlobalTemperatureMode = _showGlobalTemperature && !_showAreaTemperature;
|
|
||||||
|
|
||||||
// 5. 如果勾选了区域温度,则显示区域框和编号,否则不显示区域框
|
|
||||||
if (_showAreaTemperature)
|
if (_showAreaTemperature)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -2986,94 +2970,109 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. 根据温度模式显示温度数据
|
// 2. 温度数据绘制逻辑,仍受温度数据有效性影响
|
||||||
if (isGlobalTemperatureMode)
|
TemperatureData temperatureData = _deviceManager.LastTemperature;
|
||||||
|
if (temperatureData != null && temperatureData.Timestamp != null)
|
||||||
{
|
{
|
||||||
// 准备温度文本
|
TimeSpan timeDiff = DateTime.Now - temperatureData.Timestamp;
|
||||||
List<string> temperatureTexts = new List<string>();
|
if (timeDiff.TotalSeconds <= 3)
|
||||||
if (_showAverageTemperature)
|
|
||||||
{
|
{
|
||||||
temperatureTexts.Add($"平均: {temperatureData.AverageTemperature:F2} °C");
|
// 3. 温度显示菜单下如果未勾选区域温度和全局温度,则不显示任何温度信息
|
||||||
}
|
if (!_showGlobalTemperature && !_showAreaTemperature)
|
||||||
if (_showMinTemperature)
|
return;
|
||||||
{
|
|
||||||
temperatureTexts.Add($"最低: {temperatureData.MinTemperature:F2} °C");
|
|
||||||
}
|
|
||||||
if (_showMaxTemperature)
|
|
||||||
{
|
|
||||||
temperatureTexts.Add($"最高: {temperatureData.MaxTemperature:F2} °C");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 记录温度数据日志
|
// 4. 如果勾选了全局温度且未勾选区域温度,则显示全局温度(居中显示),否则显示区域温度(居中显示)
|
||||||
if (temperatureTexts.Count > 0)
|
bool isGlobalTemperatureMode = _showGlobalTemperature && !_showAreaTemperature;
|
||||||
{
|
|
||||||
WriteLog($"全局温度数据 - 平均: {temperatureData.AverageTemperature:F2} °C, 最低: {temperatureData.MinTemperature:F2} °C, 最高: {temperatureData.MaxTemperature:F2} °C");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果没有要显示的温度文本,直接返回
|
// 5. 根据温度模式显示温度数据
|
||||||
if (temperatureTexts.Count == 0)
|
if (isGlobalTemperatureMode)
|
||||||
return;
|
|
||||||
|
|
||||||
// 将List<string>转换为string[],以便传递给DrawTextInAreaCentered方法
|
|
||||||
string[] textsArray = temperatureTexts.ToArray();
|
|
||||||
|
|
||||||
// 调用DrawTextInAreaCentered方法绘制温度文本
|
|
||||||
DrawTextInAreaCentered(g, textsArray);
|
|
||||||
}
|
|
||||||
else if (_showAreaTemperature)
|
|
||||||
{
|
|
||||||
// 区域温度模式:为每个区域计算并显示温度数据
|
|
||||||
using (Font font = new Font("微软雅黑", 10, FontStyle.Bold))
|
|
||||||
{
|
|
||||||
// 遍历已加载的测温区列表,为每个区域显示温度数据
|
|
||||||
foreach (TemperatureZone zone in _loadedTemperatureZones)
|
|
||||||
{
|
{
|
||||||
// 准备温度文本
|
// 准备温度文本
|
||||||
List<string> areaTemperatureTexts = new List<string>();
|
List<string> temperatureTexts = new List<string>();
|
||||||
|
if (_showAverageTemperature)
|
||||||
// 直接从ZoneTemperatures字典获取已计算好的区域温度数据
|
|
||||||
if (temperatureData.ZoneTemperatures.TryGetValue(zone.Index, out var zoneTempData))
|
|
||||||
{
|
{
|
||||||
if (_showMaxTemperature)
|
temperatureTexts.Add($"平均: {temperatureData.AverageTemperature:F2} °C");
|
||||||
{
|
}
|
||||||
areaTemperatureTexts.Add($"最高: {zoneTempData.MaxTemperature:F2} °C");
|
if (_showMinTemperature)
|
||||||
}
|
{
|
||||||
if (_showMinTemperature)
|
temperatureTexts.Add($"最低: {temperatureData.MinTemperature:F2} °C");
|
||||||
{
|
}
|
||||||
areaTemperatureTexts.Add($"最低: {zoneTempData.MinTemperature:F2} °C");
|
if (_showMaxTemperature)
|
||||||
}
|
{
|
||||||
if (_showAverageTemperature)
|
temperatureTexts.Add($"最高: {temperatureData.MaxTemperature:F2} °C");
|
||||||
{
|
|
||||||
areaTemperatureTexts.Add($"平均: {zoneTempData.AverageTemperature:F2} °C");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建画刷,使用区域的颜色作为文字颜色
|
// 记录温度数据日志
|
||||||
using (Brush brush = new SolidBrush(zone.Color))
|
if (temperatureTexts.Count > 0)
|
||||||
{
|
{
|
||||||
// 绘制温度文本,从区域左上角开始,向下排列
|
WriteLog($"全局温度数据 - 平均: {temperatureData.AverageTemperature:F2} °C, 最低: {temperatureData.MinTemperature:F2} °C, 最高: {temperatureData.MaxTemperature:F2} °C");
|
||||||
float currentY = zone.Y + 20; // 从区域编号下方开始
|
}
|
||||||
foreach (string text in areaTemperatureTexts)
|
|
||||||
|
// 如果没有要显示的温度文本,直接返回
|
||||||
|
if (temperatureTexts.Count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// 将List<string>转换为string[],以便传递给DrawTextInAreaCentered方法
|
||||||
|
string[] textsArray = temperatureTexts.ToArray();
|
||||||
|
|
||||||
|
// 调用DrawTextInAreaCentered方法绘制温度文本
|
||||||
|
DrawTextInAreaCentered(g, textsArray);
|
||||||
|
}
|
||||||
|
else if (_showAreaTemperature)
|
||||||
|
{
|
||||||
|
// 区域温度模式:为每个区域计算并显示温度数据
|
||||||
|
using (Font font = new Font("微软雅黑", 10, FontStyle.Bold))
|
||||||
|
{
|
||||||
|
// 遍历已加载的测温区列表,为每个区域显示温度数据
|
||||||
|
foreach (TemperatureZone zone in _loadedTemperatureZones)
|
||||||
{
|
{
|
||||||
PointF textPosition = new PointF(zone.X + 5, currentY);
|
// 准备温度文本
|
||||||
g.DrawString(text, font, brush, textPosition);
|
List<string> areaTemperatureTexts = new List<string>();
|
||||||
currentY += 20; // 每行间隔20像素
|
|
||||||
|
// 直接从ZoneTemperatures字典获取已计算好的区域温度数据
|
||||||
|
if (temperatureData.ZoneTemperatures.TryGetValue(zone.Index, out var zoneTempData))
|
||||||
|
{
|
||||||
|
if (_showMaxTemperature)
|
||||||
|
{
|
||||||
|
areaTemperatureTexts.Add($"最高: {zoneTempData.MaxTemperature:F2} °C");
|
||||||
|
}
|
||||||
|
if (_showMinTemperature)
|
||||||
|
{
|
||||||
|
areaTemperatureTexts.Add($"最低: {zoneTempData.MinTemperature:F2} °C");
|
||||||
|
}
|
||||||
|
if (_showAverageTemperature)
|
||||||
|
{
|
||||||
|
areaTemperatureTexts.Add($"平均: {zoneTempData.AverageTemperature:F2} °C");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建画刷,使用区域的颜色作为文字颜色
|
||||||
|
using (Brush brush = new SolidBrush(zone.Color))
|
||||||
|
{
|
||||||
|
// 绘制温度文本,从区域左上角开始,向下排列
|
||||||
|
float currentY = zone.Y + 20; // 从区域编号下方开始
|
||||||
|
foreach (string text in areaTemperatureTexts)
|
||||||
|
{
|
||||||
|
PointF textPosition = new PointF(zone.X + 5, currentY);
|
||||||
|
g.DrawString(text, font, brush, textPosition);
|
||||||
|
currentY += 20; // 每行间隔20像素
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 设置显示状态标志
|
||||||
|
_isDisplayingInfo = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 标记信息正在显示
|
||||||
|
_isDisplayingInfo = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置显示状态标志
|
|
||||||
_isDisplayingInfo = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 标记信息正在显示
|
|
||||||
_isDisplayingInfo = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveTemperatureToolStripMenuItem_Click(object sender, EventArgs e)
|
private void SaveTemperatureToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -3189,24 +3188,24 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// imageBox双击事件处理方法
|
/// imageBox双击事件处理方法
|
||||||
/// 双击后弹出检测配置窗口
|
/// 双击后弹出检测配置窗口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void ImageBox_DoubleClick(object sender, EventArgs e)
|
private void ImageBox_DoubleClick(object sender, EventArgs e)
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
// 显示配置窗口,使用完整命名空间引用Setting类
|
try
|
||||||
JoyD.Windows.CS.Setting.Form.AutoConfig = this.AutoConfig;
|
{
|
||||||
JoyD.Windows.CS.Setting.Form.ProjectPath = this.ProjectPath;
|
// 显示配置窗口,使用完整命名空间引用Setting类
|
||||||
JoyD.Windows.CS.Setting.Form.ShowDialog();
|
JoyD.Windows.CS.Setting.Form.AutoConfig = this.AutoConfig;
|
||||||
}
|
JoyD.Windows.CS.Setting.Form.ProjectPath = this.ProjectPath;
|
||||||
catch (Exception ex)
|
JoyD.Windows.CS.Setting.Form.ShowDialog();
|
||||||
{
|
}
|
||||||
Console.WriteLine($"打开配置窗口时出错: {ex.Message}");
|
catch (Exception ex)
|
||||||
MessageBox.Show($"打开配置窗口时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
{
|
||||||
|
Console.WriteLine($"打开配置窗口时出错: {ex.Message}");
|
||||||
|
MessageBox.Show($"打开配置窗口时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user