diff --git a/TransportPlugin.csproj b/TransportPlugin.csproj index 3a7251b..daa497d 100644 --- a/TransportPlugin.csproj +++ b/TransportPlugin.csproj @@ -148,6 +148,7 @@ + diff --git a/src/Core/AliasTree/AliasTreePlugin.cs b/src/Core/AliasTree/AliasTreePlugin.cs new file mode 100644 index 0000000..388d629 --- /dev/null +++ b/src/Core/AliasTree/AliasTreePlugin.cs @@ -0,0 +1,51 @@ +using Autodesk.Navisworks.Api.Plugins; +using NavisworksTransport.UI.WPF.Views; +using NavisworksTransport.Utils; +using System.Windows.Forms.Integration; + +namespace NavisworksTransport.Core.AliasTree +{ + /// + /// 别名导航树 — DockPanePlugin 入口 + /// + /// 使用方式: + /// 1. 启动 Navisworks + /// 2. View → Docking Windows → 别名导航树 + /// 3. 手动拖放到内置 Selection Tree 下方 + /// + [Plugin("NavisworksTransport.AliasTree", "Tian", + DisplayName = "别名导航树", + ToolTip = "自定义节点别名管理面板 — 双击编辑、右键菜单、JSON 导入导出")] + [DockPanePlugin(300, 400, FixedSize = false, AutoScroll = true)] + public class AliasTreePlugin : DockPanePlugin + { + public override System.Windows.Forms.Control CreateControlPane() + { + LogManager.Info("[别名树] 创建 DockPane 面板"); + + var eh = new ElementHost + { + AutoSize = true + }; + + var control = new AliasTreeControl(); + eh.Child = control; + eh.CreateControl(); + + return eh; + } + + public override void DestroyControlPane(System.Windows.Forms.Control pane) + { + LogManager.Info("[别名树] 销毁 DockPane 面板"); + + if (pane is ElementHost eh && eh.Child is AliasTreeControl ctrl) + { + ctrl.Cleanup(); + eh.Child = null; + } + + pane?.Dispose(); + } + } +} diff --git a/src/UI/WPF/Views/AliasTreeControl.xaml b/src/UI/WPF/Views/AliasTreeControl.xaml index be35ca8..3154931 100644 --- a/src/UI/WPF/Views/AliasTreeControl.xaml +++ b/src/UI/WPF/Views/AliasTreeControl.xaml @@ -166,7 +166,9 @@ VirtualizingPanel.VirtualizationMode="Recycling" Background="White" BorderThickness="0" - ItemContainerStyle="{StaticResource AliasTreeViewItemStyle}"> + ItemContainerStyle="{StaticResource AliasTreeViewItemStyle}" + TreeViewItem.Expanded="OnTreeViewItemExpanded" + TreeViewItem.Selected="OnTreeViewItemSelected">