From dee5f1c834f8c74510a08f466dab46a4e293777e Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Thu, 29 Jan 2026 21:44:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=A2=B0=E6=92=9E=E9=AB=98?= =?UTF-8?q?=E4=BA=AE=E7=AE=A1=E7=90=86=EF=BC=8C=E4=BD=BF=E7=94=A8=E7=B1=BB?= =?UTF-8?q?=E5=88=AB=E7=AE=A1=E7=90=86=E6=96=B9=E6=B3=95=E6=9B=BF=E4=BB=A3?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E9=AB=98=E4=BA=AE=EF=BC=8C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E9=A2=84=E8=AE=A1=E7=AE=97=E7=A2=B0=E6=92=9E=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=E4=B8=BA=E7=B4=AB=E8=89=B2=E4=BB=A5=E4=BE=BF=E5=8C=BA=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GenerateCollisionReportCommand.cs | 6 +- src/Core/Animation/PathAnimationManager.cs | 2 +- .../ViewModels/AnimationControlViewModel.cs | 2 +- .../ViewModels/CollisionReportViewModel.cs | 14 ++--- src/Utils/ModelHighlightHelper.cs | 59 +++---------------- 5 files changed, 23 insertions(+), 60 deletions(-) diff --git a/src/Commands/GenerateCollisionReportCommand.cs b/src/Commands/GenerateCollisionReportCommand.cs index 9d38e78..b52ebf7 100644 --- a/src/Commands/GenerateCollisionReportCommand.cs +++ b/src/Commands/GenerateCollisionReportCommand.cs @@ -199,7 +199,11 @@ namespace NavisworksTransport.Commands var highlightIntegration = ClashDetectiveIntegration.Instance; if (highlightIntegration != null) { - ModelHighlightHelper.HighlightCollisionResults(collisionData.AllCollisions, clearPrevious: false); + // 使用 ClashDetectiveResultsCategory(深红色),不是预计算高亮 + ModelHighlightHelper.ManageCollisionHighlightsByCategory( + ModelHighlightHelper.ClashDetectiveResultsCategory, + collisionData.AllCollisions, + clearOtherCategories: false); LogManager.Info($"碰撞报告生成前高亮 {collisionData.AllCollisions.Count} 个碰撞对象"); } } diff --git a/src/Core/Animation/PathAnimationManager.cs b/src/Core/Animation/PathAnimationManager.cs index 37cd4e4..cca4973 100644 --- a/src/Core/Animation/PathAnimationManager.cs +++ b/src/Core/Animation/PathAnimationManager.cs @@ -2691,7 +2691,7 @@ namespace NavisworksTransport.Core.Animation if (currentHasCollision) { // 有碰撞:高亮当前帧的碰撞对象(使用CollisionResultsCategory的默认颜色) - ModelHighlightHelper.HighlightCollisionResults(currentFrame.Collisions); + ModelHighlightHelper.ManageCollisionHighlightsByCategory(ModelHighlightHelper.PrecomputeCollisionResultsCategory, currentFrame.Collisions, clearOtherCategories: true); LogManager.Debug($"[高亮状态] 帧{_currentFrameIndex}: 高亮碰撞 ({currentFrame.Collisions.Count}个, 对象{currentCollisionObjects.Count}个)"); } else diff --git a/src/UI/WPF/ViewModels/AnimationControlViewModel.cs b/src/UI/WPF/ViewModels/AnimationControlViewModel.cs index 206cbdd..3055a6d 100644 --- a/src/UI/WPF/ViewModels/AnimationControlViewModel.cs +++ b/src/UI/WPF/ViewModels/AnimationControlViewModel.cs @@ -2003,7 +2003,7 @@ namespace NavisworksTransport.UI.WPF.ViewModels LogManager.Debug($"[预计算碰撞结果高亮] 碰撞{i+1}: {collision.DisplayName}, Item1={collision.Item1?.DisplayName}, Item2={collision.Item2?.DisplayName}"); } - ModelHighlightHelper.HighlightCollisionResults(deduplicatedResults, clearPrevious: false); + ModelHighlightHelper.ManageCollisionHighlightsByCategory(ModelHighlightHelper.PrecomputeCollisionResultsCategory, deduplicatedResults, clearOtherCategories: false); UpdateMainStatus($"已高亮 {deduplicatedResults.Count} 个去重预计算碰撞结果"); LogManager.Info($"[预计算碰撞结果高亮] 已高亮 {deduplicatedResults.Count} 个结果"); } diff --git a/src/UI/WPF/ViewModels/CollisionReportViewModel.cs b/src/UI/WPF/ViewModels/CollisionReportViewModel.cs index d6f0136..6bd43a3 100644 --- a/src/UI/WPF/ViewModels/CollisionReportViewModel.cs +++ b/src/UI/WPF/ViewModels/CollisionReportViewModel.cs @@ -954,13 +954,13 @@ namespace NavisworksTransport.UI.WPF.ViewModels if (item?.CollisionData == null) return; - var clashIntegration = ClashDetectiveIntegration.Instance; - if (clashIntegration != null) - { - var collisions = new List { item.CollisionData }; - ModelHighlightHelper.HighlightCollisionResults(collisions, clearPrevious: true); - LogManager.Info($"高亮碰撞对象: {item.Title}"); - } + // 使用 ClashDetectiveResultsCategory(深红色),不是预计算高亮 + var collisions = new List { item.CollisionData }; + ModelHighlightHelper.ManageCollisionHighlightsByCategory( + ModelHighlightHelper.ClashDetectiveResultsCategory, + collisions, + clearOtherCategories: true); + LogManager.Info($"高亮碰撞对象: {item.Title}"); } catch (Exception ex) { diff --git a/src/Utils/ModelHighlightHelper.cs b/src/Utils/ModelHighlightHelper.cs index 47e5d91..c6d70c3 100644 --- a/src/Utils/ModelHighlightHelper.cs +++ b/src/Utils/ModelHighlightHelper.cs @@ -43,7 +43,7 @@ namespace NavisworksTransport.Utils { "report", Color.Green }, { "preview", Color.Blue }, { ManualTargetsCategory, Color.FromByteRGB(255, 170, 0) }, - { PrecomputeCollisionResultsCategory, Color.FromByteRGB(244, 67, 54) }, // Material Red(预计算碰撞) + { PrecomputeCollisionResultsCategory, Color.FromByteRGB(156, 39, 176) }, // Material Purple #9C27B0(预计算碰撞,与红色/橙色明显区分) { ChannelPreviewCategory, Color.Green }, { ClashDetectiveResultsCategory, Color.Red }, { AnimatedObjectCategory, Color.FromByteRGB(76, 175, 80) } // Material Green(动画车辆) @@ -174,6 +174,14 @@ namespace NavisworksTransport.Utils if (_categoryColors.TryGetValue(category, out var color)) { + // 调试用:输出预计算高亮颜色值(转换为0-255整数) + if (category == PrecomputeCollisionResultsCategory) + { + int r = (int)(color.R * 255); + int g = (int)(color.G * 255); + int b = (int)(color.B * 255); + LogManager.Debug($"[GetCategoryColor] 预计算高亮颜色: R={r}, G={g}, B={b} (#{r:X2}{g:X2}{b:X2})"); + } return color; } @@ -241,55 +249,6 @@ namespace NavisworksTransport.Utils #region 碰撞结果高亮相关方法 /// - /// 高亮显示碰撞对象(使用类别默认颜色) - /// - /// 碰撞结果列表 - /// 是否清除之前的高亮 - public static void HighlightCollisionResults(List results, bool clearPrevious = true) - { - try - { - var validResults = results?.Where(r => r != null).ToList() ?? new List(); - - if (validResults.Count == 0) - { - if (clearPrevious) - { - ClearCategory(PrecomputeCollisionResultsCategory); - } - return; - } - - if (clearPrevious) - { - ClearCategory(PrecomputeCollisionResultsCategory); - } - - var highlightItems = new List(); - foreach (var collision in validResults) - { - var item1 = collision.Item1; - var item2 = collision.Item2; - - // 只高亮被撞物体(Item2),排除车辆对象(Item1) - // 车辆对象由 AnimatedObjectCategory 单独高亮为绿色 - if (item2 != null && !highlightItems.Contains(item2)) - { - highlightItems.Add(item2); - } - } - - HighlightItems(ClashDetectiveResultsCategory, highlightItems); - } - catch (Exception ex) - { - LogManager.Error($"高亮显示碰撞对象失败: {ex.Message}"); - } - } - - /// - /// 按类别管理碰撞结果高亮 - /// /// 类别名称 /// 碰撞结果列表 /// 是否清除其他类别