NavisworksTransport/src/UI/WPF/Views/LogisticsControlPanel.xaml
tian 17d774154d fix: 关闭剖面盒后恢复剖面状态时同时显示UI指示器
JSON 透传方式不触发 Navisworks 剖面工具 UI 指示器。
改为解析保存的 JSON 自动识别 Box/Planes 模式:
- Box 模式:提取包围盒,用 ApplyClipBox 重建(已知能显示指示器)
- Planes 模式:提取平面数据 (Normal/Distance),重建 Planes JSON
移除旧注释中关于手动对齐的说明
2026-06-30 20:37:29 +08:00

213 lines
12 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
NavisworksTransport 主控制面板 - 采用与其他视图一致的Navisworks 2026风格
功能说明:
1. 分层管理:模型分层控制和可见性管理
2. 类别设置:物流类别设置和属性管理
3. 路径编辑3D路径规划和编辑功能
4. 检测动画:路径动画生成和碰撞检测
5. 系统管理:日志管理、插件设置和性能监控
设计原则与Navisworks 2026风格一致480像素宽度现代化UI布局
-->
<UserControl x:Class="NavisworksTransport.UI.WPF.LogisticsControlPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:views="clr-namespace:NavisworksTransport.UI.WPF.Views"
xmlns:converters="clr-namespace:NavisworksTransport.UI.WPF.Converters"
mc:Ignorable="d"
d:DesignHeight="700" d:DesignWidth="480">
<UserControl.Resources>
<!-- 引用共享的Navisworks 2026样式资源 -->
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/TransportPlugin;component/src/UI/WPF/Resources/NavisworksStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- 转换器资源 -->
<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<converters:BoolToBrushConverter x:Key="BoolToBrushConverter"/>
<converters:BoolToOpacityConverter x:Key="BoolToOpacityConverter"/>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- 主内容区域 -->
<TabControl Grid.Row="0"
Name="MainTabControl"
Style="{StaticResource NavisworksTabControlStyle}"
Margin="10,10,10,5">
<TabItem Header="分层管理" Name="LayerManagementTab" Style="{StaticResource NavisworksTabItemStyle}">
<Border Background="White" CornerRadius="0">
<ContentControl x:Name="LayerManagementContent" Margin="0"/>
</Border>
</TabItem>
<TabItem Header="类别设置" Name="ModelSettingsTab" Style="{StaticResource NavisworksTabItemStyle}">
<Border Background="White" CornerRadius="0">
<ContentControl x:Name="ModelSettingsContent" Margin="0"/>
</Border>
</TabItem>
<TabItem Header="路径编辑" Name="PathEditingTab" Style="{StaticResource NavisworksTabItemStyle}">
<Border Background="White" CornerRadius="0">
<ContentControl x:Name="PathEditingContent" Margin="0"/>
</Border>
</TabItem>
<TabItem Header="检测动画" Name="AnimationControlTab" Style="{StaticResource NavisworksTabItemStyle}">
<Border Background="White" CornerRadius="0">
<ContentControl x:Name="AnimationControlContent" Margin="0"/>
</Border>
</TabItem>
<TabItem Header="批处理任务" Name="BatchTaskManagementTab" Style="{StaticResource NavisworksTabItemStyle}">
<Border Background="White" CornerRadius="0">
<ContentControl x:Name="BatchTaskManagementContent" Margin="0"/>
</Border>
</TabItem>
<TabItem Header="系统管理" Name="SystemManagementTab" Style="{StaticResource NavisworksTabItemStyle}">
<Border Background="White" CornerRadius="0">
<views:SystemManagementView x:Name="SystemManagementView" Margin="0"/>
</Border>
</TabItem>
</TabControl>
<!-- 底部操作栏 -->
<Border Grid.Row="1"
BorderBrush="#FFD4E7FF"
BorderThickness="1"
CornerRadius="0"
Background="#FFF8FBFF"
Margin="10,5,10,10"
Padding="12,8">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- 左侧:状态信息 -->
<Grid Grid.Column="0" Margin="8,6,20,6">
<ProgressBar Height="20"
Value="{Binding ProgressPercentage}"
IsIndeterminate="{Binding IsIndeterminateProgress}"
Visibility="{Binding IsProcessing, Converter={StaticResource BoolToVisibilityConverter}}"/>
<TextBlock Text="{Binding StatusText}"
HorizontalAlignment="Left"
VerticalAlignment="Center"
FontSize="10"
Margin="10,0,0,0"/>
</Grid>
<!-- 中间:渲染模式快捷按钮 -->
<StackPanel Grid.Column="1"
Orientation="Horizontal"
HorizontalAlignment="Center"
Margin="0,0,20,0">
<ToggleButton IsChecked="{Binding ShowControlVisualization}"
ToolTip="控制点连线"
Width="28" Height="24"
Margin="2,0">
<TextBlock Text="CP" FontSize="9" FontWeight="Bold"
Foreground="{Binding ShowControlVisualization, Converter={StaticResource BoolToBrushConverter}, ConverterParameter=Green}"/>
</ToggleButton>
<ToggleButton IsChecked="{Binding ShowPathLines}"
IsEnabled="{Binding CanUsePathLines}"
ToolTip="路径线"
Width="28" Height="24"
Margin="2,0"
Opacity="{Binding CanUsePathLines, Converter={StaticResource BoolToOpacityConverter}}">
<TextBlock Text="LN" FontSize="9" FontWeight="Bold"
Foreground="{Binding ShowPathLines, Converter={StaticResource BoolToBrushConverter}, ConverterParameter=Blue}"/>
</ToggleButton>
<ToggleButton IsChecked="{Binding ShowObjectSpace}"
ToolTip="通行空间"
Width="28" Height="24"
Margin="2,0">
<TextBlock Text="SP" FontSize="9" FontWeight="Bold"
Foreground="{Binding ShowObjectSpace, Converter={StaticResource BoolToBrushConverter}, ConverterParameter=Orange}"/>
</ToggleButton>
<!-- 分隔符 -->
<TextBlock Text="|"
VerticalAlignment="Center"
Margin="8,0,6,0"
Foreground="#FFCCCCCC"
FontSize="14"/>
<!-- 选择对象剖面盒开关 -->
<ToggleButton IsChecked="{Binding IsSelectionClipBoxEnabled}"
ToolTip="剖面盒(聚焦当前选择对象)"
Width="28" Height="24"
Margin="2,0">
<Viewbox Width="18" Height="18" Stretch="Uniform">
<Canvas Width="20" Height="20">
<Path Data="M 2,6 L 14,6 L 14,18 L 2,18 Z M 2,6 L 6,2 L 18,2 L 14,6 M 14,18 L 18,14 L 18,2 L 14,6"
Stroke="{Binding IsSelectionClipBoxEnabled, Converter={StaticResource BoolToBrushConverter}, ConverterParameter=Green}"
StrokeThickness="1.3"
Fill="Transparent"/>
<Rectangle Canvas.Left="6"
Canvas.Top="10"
Width="4"
Height="4"
Stroke="{Binding IsSelectionClipBoxEnabled, Converter={StaticResource BoolToBrushConverter}, ConverterParameter=Green}"
StrokeThickness="1.2"
Fill="Transparent"/>
</Canvas>
</Viewbox>
</ToggleButton>
<!-- 路径剖面盒开关 -->
<ToggleButton IsChecked="{Binding IsClipBoxEnabled}"
ToolTip="剖面盒(聚焦当前路径)"
Width="28" Height="24"
Margin="2,0">
<Viewbox Width="18" Height="18" Stretch="Uniform">
<Canvas Width="20" Height="20">
<Path Data="M 2,6 L 14,6 L 14,18 L 2,18 Z M 2,6 L 6,2 L 18,2 L 14,6 M 14,18 L 18,14 L 18,2 L 14,6"
Stroke="{Binding IsClipBoxEnabled, Converter={StaticResource BoolToBrushConverter}, ConverterParameter=Green}"
StrokeThickness="1.3"
Fill="Transparent"/>
<Polyline Points="5.5,13 7.2,11 8.1,12 10.5,10"
Stroke="{Binding IsClipBoxEnabled, Converter={StaticResource BoolToBrushConverter}, ConverterParameter=Green}"
StrokeThickness="1.2"
StrokeLineJoin="Round"
StrokeStartLineCap="Round"
StrokeEndLineCap="Round"/>
</Canvas>
</Viewbox>
</ToggleButton>
</StackPanel>
<!-- 右侧:原有按钮 -->
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button Content="恢复剖面"
Command="{Binding RestoreClipStateCommand}"
Style="{StaticResource SecondaryButtonStyle}"
ToolTip="实验:恢复保存的剖面状态"/>
<Button Content="帮助"
Click="HelpButton_Click"
Style="{StaticResource SecondaryButtonStyle}"
ToolTip="查看插件使用说明和操作指南"/>
<Button Content="关于"
Click="AboutButton_Click"
Style="{StaticResource SecondaryButtonStyle}"
ToolTip="查看插件版本信息和开发者信息"/>
</StackPanel>
</Grid>
</Border>
</Grid>
</UserControl>