From 3b9dd2ca983fb4beea5f71174873f2e75a9ea4a2 Mon Sep 17 00:00:00 2001 From: zqm Date: Wed, 7 Jan 2026 16:37:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E6=98=BE=E7=A4=BA=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E6=A1=86=E7=BA=BF=EF=BC=8C=E6=B2=A1=E6=94=B6=E5=88=B0?= =?UTF-8?q?=E6=B8=A9=E5=BA=A6=E6=95=B0=E6=8D=AE=E6=97=B6=E4=B9=9F=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CS/Framework4.0/Toprie/Toprie/Camera.cs | 237 +++++++++--------- 1 file changed, 118 insertions(+), 119 deletions(-) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs index 6d41a02..374f359 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs @@ -117,22 +117,22 @@ namespace JoyD.Windows.CS.Toprie set { // 只有当值发生变化时才进行同步 - if (_projectPath != value) - { - _projectPath = value; - // 如果DeviceManager已经初始化,则同步更新其ProjectPath属性 - if (_deviceManager != null) + if (_projectPath != value) { - _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 { - while(!IsDevicePingable) + while (!IsDevicePingable) Thread.Sleep(3000); // 延迟3秒后启动 _isFirst = false; this.Invoke(new Action(() => @@ -643,7 +643,7 @@ namespace JoyD.Windows.CS.Toprie // 设置静态属性 DeviceManager.MaxReconnectAttempts = 5; - + // 异步加载配置文件,避免阻塞主线程 if (!_isConfigLoaded) { @@ -2582,7 +2582,7 @@ namespace JoyD.Windows.CS.Toprie ApplyMenuState(menuStates, "avgTemperature", avgTemperatureToolStripMenuItem); if (minTemperatureToolStripMenuItem != null) ApplyMenuState(menuStates, "minTemperature", minTemperatureToolStripMenuItem); - + // 同步菜单状态到对应的私有字段,确保与显示逻辑一致 if (globalTemperatureToolStripMenuItem != null) _showGlobalTemperature = globalTemperatureToolStripMenuItem.Checked; @@ -2936,23 +2936,7 @@ namespace JoyD.Windows.CS.Toprie if (_deviceManager.CurrentImageMode == ImageMode.Infrared) { - // 2. 如果没有温度数据或温度数据的时间3秒之前,返回 - 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. 如果勾选了区域温度,则显示区域框和编号,否则不显示区域框 + // 1. 先绘制区域框线,不受温度数据影响,只受显示设置影响 if (_showAreaTemperature) { try @@ -2986,94 +2970,109 @@ namespace JoyD.Windows.CS.Toprie } } - // 6. 根据温度模式显示温度数据 - if (isGlobalTemperatureMode) + // 2. 温度数据绘制逻辑,仍受温度数据有效性影响 + TemperatureData temperatureData = _deviceManager.LastTemperature; + if (temperatureData != null && temperatureData.Timestamp != null) { - // 准备温度文本 - List temperatureTexts = new List(); - if (_showAverageTemperature) + TimeSpan timeDiff = DateTime.Now - temperatureData.Timestamp; + if (timeDiff.TotalSeconds <= 3) { - temperatureTexts.Add($"平均: {temperatureData.AverageTemperature:F2} °C"); - } - if (_showMinTemperature) - { - temperatureTexts.Add($"最低: {temperatureData.MinTemperature:F2} °C"); - } - if (_showMaxTemperature) - { - temperatureTexts.Add($"最高: {temperatureData.MaxTemperature:F2} °C"); - } + // 3. 温度显示菜单下如果未勾选区域温度和全局温度,则不显示任何温度信息 + if (!_showGlobalTemperature && !_showAreaTemperature) + return; - // 记录温度数据日志 - if (temperatureTexts.Count > 0) - { - WriteLog($"全局温度数据 - 平均: {temperatureData.AverageTemperature:F2} °C, 最低: {temperatureData.MinTemperature:F2} °C, 最高: {temperatureData.MaxTemperature:F2} °C"); - } + // 4. 如果勾选了全局温度且未勾选区域温度,则显示全局温度(居中显示),否则显示区域温度(居中显示) + bool isGlobalTemperatureMode = _showGlobalTemperature && !_showAreaTemperature; - // 如果没有要显示的温度文本,直接返回 - if (temperatureTexts.Count == 0) - return; - - // 将List转换为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) + // 5. 根据温度模式显示温度数据 + if (isGlobalTemperatureMode) { // 准备温度文本 - List areaTemperatureTexts = new List(); - - // 直接从ZoneTemperatures字典获取已计算好的区域温度数据 - if (temperatureData.ZoneTemperatures.TryGetValue(zone.Index, out var zoneTempData)) + List temperatureTexts = new List(); + if (_showAverageTemperature) { - if (_showMaxTemperature) - { - areaTemperatureTexts.Add($"最高: {zoneTempData.MaxTemperature:F2} °C"); - } - if (_showMinTemperature) - { - areaTemperatureTexts.Add($"最低: {zoneTempData.MinTemperature:F2} °C"); - } - if (_showAverageTemperature) - { - areaTemperatureTexts.Add($"平均: {zoneTempData.AverageTemperature:F2} °C"); - } + temperatureTexts.Add($"平均: {temperatureData.AverageTemperature:F2} °C"); + } + if (_showMinTemperature) + { + temperatureTexts.Add($"最低: {temperatureData.MinTemperature:F2} °C"); + } + if (_showMaxTemperature) + { + temperatureTexts.Add($"最高: {temperatureData.MaxTemperature:F2} °C"); } - // 创建画刷,使用区域的颜色作为文字颜色 - using (Brush brush = new SolidBrush(zone.Color)) + // 记录温度数据日志 + if (temperatureTexts.Count > 0) { - // 绘制温度文本,从区域左上角开始,向下排列 - float currentY = zone.Y + 20; // 从区域编号下方开始 - foreach (string text in areaTemperatureTexts) + WriteLog($"全局温度数据 - 平均: {temperatureData.AverageTemperature:F2} °C, 最低: {temperatureData.MinTemperature:F2} °C, 最高: {temperatureData.MaxTemperature:F2} °C"); + } + + // 如果没有要显示的温度文本,直接返回 + if (temperatureTexts.Count == 0) + return; + + // 将List转换为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); - currentY += 20; // 每行间隔20像素 + // 准备温度文本 + List areaTemperatureTexts = new List(); + + // 直接从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) { try @@ -3189,24 +3188,24 @@ namespace JoyD.Windows.CS.Toprie } } - /// - /// imageBox双击事件处理方法 - /// 双击后弹出检测配置窗口 - /// - private void ImageBox_DoubleClick(object sender, EventArgs e) - { - try + /// + /// imageBox双击事件处理方法 + /// 双击后弹出检测配置窗口 + /// + private void ImageBox_DoubleClick(object sender, EventArgs e) { - // 显示配置窗口,使用完整命名空间引用Setting类 - JoyD.Windows.CS.Setting.Form.AutoConfig = this.AutoConfig; - JoyD.Windows.CS.Setting.Form.ProjectPath = this.ProjectPath; - JoyD.Windows.CS.Setting.Form.ShowDialog(); - } - catch (Exception ex) - { - Console.WriteLine($"打开配置窗口时出错: {ex.Message}"); - MessageBox.Show($"打开配置窗口时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + try + { + // 显示配置窗口,使用完整命名空间引用Setting类 + JoyD.Windows.CS.Setting.Form.AutoConfig = this.AutoConfig; + JoyD.Windows.CS.Setting.Form.ProjectPath = this.ProjectPath; + JoyD.Windows.CS.Setting.Form.ShowDialog(); + } + catch (Exception ex) + { + Console.WriteLine($"打开配置窗口时出错: {ex.Message}"); + MessageBox.Show($"打开配置窗口时出错: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } } } -} } \ No newline at end of file