增加网格点可视化类型,立方体(可用)、点(不可用)
This commit is contained in:
parent
fb13b81259
commit
9c97633411
@ -23,6 +23,27 @@ namespace NavisworksTransport
|
||||
VehicleSpace
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 网格点类型枚举
|
||||
/// </summary>
|
||||
public enum GridPointType
|
||||
{
|
||||
/// <summary>
|
||||
/// 球形
|
||||
/// </summary>
|
||||
Sphere,
|
||||
|
||||
/// <summary>
|
||||
/// 立方体
|
||||
/// </summary>
|
||||
Cube,
|
||||
|
||||
/// <summary>
|
||||
/// 点
|
||||
/// </summary>
|
||||
Point
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 渲染颜色类型枚举
|
||||
@ -283,6 +304,9 @@ namespace NavisworksTransport
|
||||
// 路径可视化模式配置
|
||||
private PathVisualizationMode _visualizationMode = PathVisualizationMode.StandardLine;
|
||||
|
||||
// 网格点类型配置
|
||||
private GridPointType _gridPointType = GridPointType.Cube;
|
||||
|
||||
// 车辆参数(必须通过SetVehicleParameters方法设置)
|
||||
private double _vehicleLength;
|
||||
private double _vehicleWidth;
|
||||
@ -319,6 +343,20 @@ namespace NavisworksTransport
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 网格点类型
|
||||
/// </summary>
|
||||
public GridPointType GridPointType
|
||||
{
|
||||
get { return _gridPointType; }
|
||||
set
|
||||
{
|
||||
_gridPointType = value;
|
||||
// 类型改变时刷新所有网格路径
|
||||
RefreshGridPaths();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用渲染
|
||||
@ -406,7 +444,7 @@ namespace NavisworksTransport
|
||||
foreach (var pointMarker in visualization.PointMarkers)
|
||||
{
|
||||
graphics.Color(pointMarker.Color, pointMarker.Alpha);
|
||||
graphics.Sphere(pointMarker.Center, pointMarker.Radius);
|
||||
RenderPointMarker(graphics, pointMarker);
|
||||
}
|
||||
|
||||
// 渲染所有连线(删除频繁的调试日志以避免日志泛滥)
|
||||
@ -428,7 +466,7 @@ namespace NavisworksTransport
|
||||
if (_previewMarker != null && _previewMarker.IsVisible)
|
||||
{
|
||||
graphics.Color(_previewMarker.Color, 0.7); // 使用半透明效果
|
||||
graphics.Sphere(_previewMarker.Position, _previewMarker.Radius);
|
||||
RenderPointMarker(graphics, _previewMarker);
|
||||
}
|
||||
|
||||
// 渲染预览连线(灰色)
|
||||
@ -614,6 +652,32 @@ namespace NavisworksTransport
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新所有网格路径
|
||||
/// </summary>
|
||||
private void RefreshGridPaths()
|
||||
{
|
||||
lock (_lockObject)
|
||||
{
|
||||
var gridPathIds = _pathVisualizations.Keys
|
||||
.Where(id => IsGridVisualizationPath(id))
|
||||
.ToList();
|
||||
|
||||
foreach (var pathId in gridPathIds)
|
||||
{
|
||||
if (_pathVisualizations.TryGetValue(pathId, out var visualization))
|
||||
{
|
||||
BuildPointMarkersOnly(visualization);
|
||||
}
|
||||
}
|
||||
|
||||
if (gridPathIds.Count > 0)
|
||||
{
|
||||
RequestViewRefresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 移除路径
|
||||
/// </summary>
|
||||
@ -855,6 +919,7 @@ namespace NavisworksTransport
|
||||
Alpha = isGridVisualization ? gridStyle.Alpha : 1.0,
|
||||
Filled = true,
|
||||
PointType = point.Type,
|
||||
GridPointType = isGridVisualization ? _gridPointType : GridPointType.Sphere, // 网格点使用配置的类型,其他点使用球形
|
||||
SequenceNumber = point.Index, // 使用Index而不是任意序号
|
||||
CreatedTime = DateTime.Now
|
||||
};
|
||||
@ -1533,6 +1598,57 @@ namespace NavisworksTransport
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 渲染点标记
|
||||
/// </summary>
|
||||
/// <param name="graphics">图形上下文</param>
|
||||
/// <param name="pointMarker">点标记</param>
|
||||
private void RenderPointMarker(Graphics graphics, CircleMarker pointMarker)
|
||||
{
|
||||
switch (pointMarker.GridPointType)
|
||||
{
|
||||
case GridPointType.Cube:
|
||||
// 渲染立方体
|
||||
RenderCubeMarker(graphics, pointMarker);
|
||||
break;
|
||||
case GridPointType.Point:
|
||||
// 渲染点
|
||||
graphics.Point(pointMarker.Center);
|
||||
break;
|
||||
case GridPointType.Sphere:
|
||||
default:
|
||||
// 渲染球形(默认)
|
||||
graphics.Sphere(pointMarker.Center, pointMarker.Radius);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 渲染立方体标记
|
||||
/// </summary>
|
||||
/// <param name="graphics">图形上下文</param>
|
||||
/// <param name="pointMarker">点标记</param>
|
||||
private void RenderCubeMarker(Graphics graphics, CircleMarker pointMarker)
|
||||
{
|
||||
// 计算立方体的边长(直径的一半)
|
||||
double halfSide = pointMarker.Radius;
|
||||
|
||||
// 定义立方体的三个轴向量(沿X、Y、Z轴)
|
||||
var xVector = new Vector3D(halfSide * 2, 0, 0);
|
||||
var yVector = new Vector3D(0, halfSide * 2, 0);
|
||||
var zVector = new Vector3D(0, 0, halfSide * 2);
|
||||
|
||||
// 计算立方体原点(中心点减去各轴向量的一半)
|
||||
var origin = new Point3D(
|
||||
pointMarker.Center.X - halfSide,
|
||||
pointMarker.Center.Y - halfSide,
|
||||
pointMarker.Center.Z - halfSide
|
||||
);
|
||||
|
||||
// 使用Cuboid API渲染立方体
|
||||
graphics.Cuboid(origin, xVector, yVector, zVector, pointMarker.Filled);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 请求视图刷新(带防抖机制)
|
||||
/// </summary>
|
||||
@ -1683,6 +1799,11 @@ namespace NavisworksTransport
|
||||
/// </summary>
|
||||
public PathPointType PointType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 网格点类型
|
||||
/// </summary>
|
||||
public GridPointType GridPointType { get; set; } = GridPointType.Sphere;
|
||||
|
||||
/// <summary>
|
||||
/// 序号
|
||||
/// </summary>
|
||||
|
||||
@ -25,6 +25,11 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
private bool _showObstacleGrid = false;
|
||||
private bool _showUnknownGrid = false;
|
||||
private bool _showDoorGrid = false;
|
||||
|
||||
// 网格点类型字段
|
||||
private GridPointType _gridPointType = GridPointType.Cube;
|
||||
private ObservableCollection<GridPointType> _gridPointTypes;
|
||||
|
||||
// 路径可视化模式字段
|
||||
private bool _isStandardLineMode = true;
|
||||
private bool _isVehicleSpaceMode = false;
|
||||
@ -104,6 +109,71 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 网格点类型
|
||||
/// </summary>
|
||||
public GridPointType GridPointType
|
||||
{
|
||||
get => _gridPointType;
|
||||
set
|
||||
{
|
||||
if (SetProperty(ref _gridPointType, value))
|
||||
{
|
||||
// 通知相关的单选按钮属性更新
|
||||
OnPropertyChanged(nameof(IsCubePointType));
|
||||
OnPropertyChanged(nameof(IsSpherePointType));
|
||||
OnPropertyChanged(nameof(IsPointPointType));
|
||||
OnGridPointTypeChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否使用立方体点类型
|
||||
/// </summary>
|
||||
public bool IsCubePointType
|
||||
{
|
||||
get => _gridPointType == GridPointType.Cube;
|
||||
set
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
GridPointType = GridPointType.Cube;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否使用球形点类型
|
||||
/// </summary>
|
||||
public bool IsSpherePointType
|
||||
{
|
||||
get => _gridPointType == GridPointType.Sphere;
|
||||
set
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
GridPointType = GridPointType.Sphere;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否使用点状点类型
|
||||
/// </summary>
|
||||
public bool IsPointPointType
|
||||
{
|
||||
get => _gridPointType == GridPointType.Point;
|
||||
set
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
GridPointType = GridPointType.Point;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否使用标准连线模式
|
||||
/// </summary>
|
||||
@ -369,6 +439,36 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
UpdateMainStatus("网格可视化设置应用失败");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 网格点类型变更事件处理
|
||||
/// </summary>
|
||||
private void OnGridPointTypeChanged()
|
||||
{
|
||||
try
|
||||
{
|
||||
LogManager.Info($"网格点类型已更改: {GridPointType}");
|
||||
|
||||
// 通知路径点渲染插件更新网格点类型
|
||||
var renderPlugin = PathPointRenderPlugin.Instance;
|
||||
if (renderPlugin != null)
|
||||
{
|
||||
renderPlugin.GridPointType = GridPointType;
|
||||
UpdateMainStatus("网格点类型已更新");
|
||||
}
|
||||
else
|
||||
{
|
||||
LogManager.Warning("无法获取PathPointRenderPlugin实例,网格点类型可能不会立即生效");
|
||||
UpdateMainStatus("网格点类型已保存");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Error($"应用网格点类型失败: {ex.Message}", ex);
|
||||
UpdateMainStatus("网格点类型应用失败");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 路径可视化模式变更事件处理
|
||||
/// </summary>
|
||||
@ -446,6 +546,9 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
var currentLevel = LogManager.GetLogLevel();
|
||||
SelectedLogLevel = currentLevel.ToString();
|
||||
|
||||
// 设置默认网格点类型
|
||||
GridPointType = GridPointType.Cube;
|
||||
|
||||
// 初始化系统信息
|
||||
PluginVersion = "v1.0";
|
||||
NavisworksVersion = "2026";
|
||||
|
||||
@ -154,6 +154,43 @@ NavisworksTransport 系统管理页签视图 - 采用与其他页签一致的Nav
|
||||
ToolTip="显示通行空间(矩形通道)"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<!-- 网格点类型设置 -->
|
||||
<Grid Margin="0,10,0,10">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Grid.Column="0"
|
||||
Content="网格点类型:"
|
||||
Style="{StaticResource ParameterLabelStyle}"
|
||||
Width="100"
|
||||
VerticalAlignment="Center"/>
|
||||
|
||||
<StackPanel Grid.Column="1"
|
||||
Orientation="Horizontal"
|
||||
VerticalAlignment="Center"
|
||||
Margin="5,0,0,0">
|
||||
<RadioButton Content="立方体"
|
||||
GroupName="GridPointType"
|
||||
IsChecked="{Binding IsCubePointType}"
|
||||
Margin="0,0,20,0"
|
||||
VerticalAlignment="Center"
|
||||
ToolTip="显示立方体网格点"/>
|
||||
<RadioButton Content="球形"
|
||||
GroupName="GridPointType"
|
||||
IsChecked="{Binding IsSpherePointType}"
|
||||
Margin="0,0,20,0"
|
||||
VerticalAlignment="Center"
|
||||
ToolTip="显示球形网格点"/>
|
||||
<RadioButton Content="点"
|
||||
GroupName="GridPointType"
|
||||
IsChecked="{Binding IsPointPointType}"
|
||||
VerticalAlignment="Center"
|
||||
ToolTip="显示点状网格点"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user