From 01195434b7374db8bd93134eb580e4286686d784 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Tue, 9 Jun 2026 01:58:09 +0800 Subject: [PATCH] fix: use ancestor chain check for pick item matching terminal object - PickItemFromPoint returns leaf geometry, not the parent container - Check if pickItem is terminalObject or its descendant via AncestorsAndSelf --- src/UI/WPF/ViewModels/PathEditingViewModel.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/UI/WPF/ViewModels/PathEditingViewModel.cs b/src/UI/WPF/ViewModels/PathEditingViewModel.cs index ca64002..c3ed508 100644 --- a/src/UI/WPF/ViewModels/PathEditingViewModel.cs +++ b/src/UI/WPF/ViewModels/PathEditingViewModel.cs @@ -2527,10 +2527,23 @@ namespace NavisworksTransport.UI.WPF.ViewModels // 恢复选择工具 try { NavisApplication.MainDocument.Tool.Value = Tool.Select; } catch { } - if (!result.IsValid || result.ModelItem != _assemblyTerminalObject) + if (!result.IsValid) + { + CleanupAssemblyEndFaceSelection(clearVisuals: false); + UpdateMainStatus("取面失败: 未命中有效面。"); + return; + } + + // PickItemFromPoint 返回的是底层几何节点,需要沿父链检查是否属于终点箱体 + var pickItem = result.ModelItem; + var matched = pickItem != null && ( + pickItem == _assemblyTerminalObject || + pickItem.AncestorsAndSelf.Any(a => a == _assemblyTerminalObject)); + if (!matched) { CleanupAssemblyEndFaceSelection(clearVisuals: false); UpdateMainStatus("取面失败: 请确认点击的是终点箱体的端面。"); + LogManager.Debug($"[直线装配] 取面命中 {ModelItemAnalysisHelper.GetSafeDisplayName(pickItem)}, 非终点箱体"); return; }