diff --git a/NavisworksTransportPlugin.csproj b/NavisworksTransportPlugin.csproj
index 54e4255..7b8a33f 100644
--- a/NavisworksTransportPlugin.csproj
+++ b/NavisworksTransportPlugin.csproj
@@ -242,6 +242,9 @@
EditCoordinatesWindow.xaml
+
+ ModelItemBoundsWindow.xaml
+
EditRotationWindow.xaml
@@ -317,6 +320,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
diff --git a/src/UI/WPF/Views/CollisionReportDialog.xaml b/src/UI/WPF/Views/CollisionReportDialog.xaml
index 0de8d52..d2aa542 100644
--- a/src/UI/WPF/Views/CollisionReportDialog.xaml
+++ b/src/UI/WPF/Views/CollisionReportDialog.xaml
@@ -17,7 +17,7 @@ NavisworksTransport 碰撞检测报告对话框 - 采用与主界面一致的Nav
xmlns:local="clr-namespace:NavisworksTransport.UI.WPF.Converters"
mc:Ignorable="d"
Title="碰撞检测报告"
- Height="1200"
+ Height="1080"
Width="900"
ResizeMode="CanResize"
WindowStartupLocation="CenterOwner"
diff --git a/src/UI/WPF/Views/ModelItemBoundsWindow.xaml b/src/UI/WPF/Views/ModelItemBoundsWindow.xaml
new file mode 100644
index 0000000..019a983
--- /dev/null
+++ b/src/UI/WPF/Views/ModelItemBoundsWindow.xaml
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/UI/WPF/Views/ModelItemBoundsWindow.xaml.cs b/src/UI/WPF/Views/ModelItemBoundsWindow.xaml.cs
new file mode 100644
index 0000000..1537859
--- /dev/null
+++ b/src/UI/WPF/Views/ModelItemBoundsWindow.xaml.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Windows;
+using Autodesk.Navisworks.Api;
+
+namespace NavisworksTransport.UI.WPF.Views
+{
+ ///
+ /// 显示选中模型元素包围盒信息的窗口
+ ///
+ public partial class ModelItemBoundsWindow : Window
+ {
+ #region 属性
+
+ /// 元素名称
+ public string ElementName { get; set; } = "未选择元素";
+
+ /// X方向尺寸
+ public double SizeX { get; set; }
+
+ /// Y方向尺寸
+ public double SizeY { get; set; }
+
+ /// Z方向尺寸
+ public double SizeZ { get; set; }
+
+ /// 中心点X坐标
+ public double CenterX { get; set; }
+
+ /// 中心点Y坐标
+ public double CenterY { get; set; }
+
+ /// 中心点Z坐标
+ public double CenterZ { get; set; }
+
+ /// 顶面中心点X坐标
+ public double TopCenterX { get; set; }
+
+ /// 顶面中心点Y坐标
+ public double TopCenterY { get; set; }
+
+ /// 顶面中心点Z坐标
+ public double TopCenterZ { get; set; }
+
+ /// 底面中心点X坐标
+ public double BottomCenterX { get; set; }
+
+ /// 底面中心点Y坐标
+ public double BottomCenterY { get; set; }
+
+ /// 底面中心点Z坐标
+ public double BottomCenterZ { get; set; }
+
+ #endregion
+
+ ///
+ /// 构造函数
+ ///
+ public ModelItemBoundsWindow()
+ {
+ try
+ {
+ InitializeComponent();
+ DataContext = this;
+ RefreshBoundsInfo();
+ }
+ catch (Exception ex)
+ {
+ LogManager.Error($"包围盒信息窗口初始化失败: {ex.Message}", ex);
+ MessageBox.Show($"包围盒信息窗口初始化失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+ }
+
+ ///
+ /// 刷新包围盒信息
+ ///
+ public void RefreshBoundsInfo()
+ {
+ try
+ {
+ var doc = Autodesk.Navisworks.Api.Application.ActiveDocument;
+ if (doc == null)
+ {
+ ElementName = "未找到活动文档";
+ ClearBoundsData();
+ return;
+ }
+
+ var selectedItems = doc.CurrentSelection.SelectedItems;
+ if (selectedItems.Count == 0)
+ {
+ ElementName = "未选择任何元素";
+ ClearBoundsData();
+ return;
+ }
+
+ // 获取第一个选中的元素
+ var item = selectedItems[0];
+ if (item == null)
+ {
+ ElementName = "无法获取选中元素";
+ ClearBoundsData();
+ return;
+ }
+
+ // 获取元素名称
+ ElementName = item.DisplayName ?? "未命名元素";
+
+ // 获取包围盒
+ Autodesk.Navisworks.Api.BoundingBox3D bounds = item.BoundingBox();
+ if (bounds == null)
+ {
+ ElementName = "无法获取包围盒信息";
+ ClearBoundsData();
+ return;
+ }
+
+ // 计算尺寸
+ SizeX = bounds.Max.X - bounds.Min.X;
+ SizeY = bounds.Max.Y - bounds.Min.Y;
+ SizeZ = bounds.Max.Z - bounds.Min.Z;
+
+ // 计算中心点
+ CenterX = (bounds.Min.X + bounds.Max.X) / 2.0;
+ CenterY = (bounds.Min.Y + bounds.Max.Y) / 2.0;
+ CenterZ = (bounds.Min.Z + bounds.Max.Z) / 2.0;
+
+ // 计算顶面中心点(Z最大)
+ TopCenterX = CenterX;
+ TopCenterY = CenterY;
+ TopCenterZ = bounds.Max.Z;
+
+ // 计算底面中心点(Z最小)
+ BottomCenterX = CenterX;
+ BottomCenterY = CenterY;
+ BottomCenterZ = bounds.Min.Z;
+ }
+ catch (Exception ex)
+ {
+ LogManager.Error($"获取包围盒信息失败: {ex.Message}", ex);
+ ElementName = $"获取失败: {ex.Message}";
+ ClearBoundsData();
+ }
+ finally
+ {
+ // 通知UI更新
+ OnPropertyChanged();
+ }
+ }
+
+ ///
+ /// 清空包围盒数据
+ ///
+ private void ClearBoundsData()
+ {
+ SizeX = SizeY = SizeZ = 0;
+ CenterX = CenterY = CenterZ = 0;
+ TopCenterX = TopCenterY = TopCenterZ = 0;
+ BottomCenterX = BottomCenterY = BottomCenterZ = 0;
+ }
+
+ ///
+ /// 通知所有属性变更
+ ///
+ private void OnPropertyChanged()
+ {
+ // 重新设置 DataContext 触发刷新
+ DataContext = null;
+ DataContext = this;
+ }
+
+ ///
+ /// 刷新按钮点击
+ ///
+ private void OnRefreshClick(object sender, RoutedEventArgs e)
+ {
+ RefreshBoundsInfo();
+ }
+
+ ///
+ /// 关闭按钮点击
+ ///
+ private void OnCloseClick(object sender, RoutedEventArgs e)
+ {
+ Close();
+ }
+ }
+}
diff --git a/src/UI/WPF/Views/PathEditingView.xaml b/src/UI/WPF/Views/PathEditingView.xaml
index e2162e1..a91c138 100644
--- a/src/UI/WPF/Views/PathEditingView.xaml
+++ b/src/UI/WPF/Views/PathEditingView.xaml
@@ -292,6 +292,24 @@ NavisworksTransport 路径编辑页签视图 - 采用与动画控制和分层管
Foreground="#FF2B579A"
Margin="0,5,0,0"/>
+
+
+
+
+
+
+
+
+
+
+ /// 测量包围盒按钮点击事件,打开元素包围盒信息窗口
+ ///
+ private void OnMeasureBoundsButtonClick(object sender, RoutedEventArgs e)
+ {
+ try
+ {
+ LogManager.Info("测量包围盒按钮被点击,准备打开ModelItemBoundsWindow窗口");
+
+ // 创建或复用窗口实例
+ if (_boundsWindow == null || !_boundsWindow.IsVisible)
+ {
+ _boundsWindow = new ModelItemBoundsWindow();
+
+ // 在Navisworks环境中,尝试找到合适的父窗口
+ try
+ {
+ var parentWindow = Window.GetWindow(this);
+ if (parentWindow != null)
+ {
+ _boundsWindow.Owner = parentWindow;
+ LogManager.Info("设置ModelItemBoundsWindow的Owner为当前窗口");
+ }
+ else
+ {
+ LogManager.Info("未找到父窗口,将以独立窗口方式显示ModelItemBoundsWindow");
+ }
+ }
+ catch (Exception ownerEx)
+ {
+ LogManager.Warning($"设置Owner失败,将以独立窗口显示: {ownerEx.Message}");
+ }
+
+ // 使用 Show() 而非 ShowDialog(),允许窗口一直开着
+ _boundsWindow.Show();
+ LogManager.Info("ModelItemBoundsWindow窗口已显示(非模态)");
+ }
+ else
+ {
+ // 窗口已存在,刷新信息并激活
+ _boundsWindow.RefreshBoundsInfo();
+ _boundsWindow.Activate();
+ LogManager.Info("ModelItemBoundsWindow窗口已存在,已刷新并激活");
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Error($"打开包围盒信息窗口失败: {ex.Message}");
+ LogManager.Error($"异常详情: {ex}");
+ }
+ }
+
+ ///
+ /// 包围盒信息窗口实例(保持引用以防止被GC回收)
+ ///
+ private ModelItemBoundsWindow _boundsWindow;
}
}