修正吊装通行空间显示问题。
This commit is contained in:
parent
bc1ad3f4c3
commit
668073b100
@ -1328,7 +1328,84 @@ namespace NavisworksTransport
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 构建路径连线(真实路径,不透明)
|
||||
/// 计算通行空间参数(高度、宽度、颜色、透明度、垂直偏移)
|
||||
/// </summary>
|
||||
/// <param name="visualization">路径可视化对象</param>
|
||||
/// <param name="metersToModelUnits">米到模型单位的转换系数</param>
|
||||
/// <returns>通行空间参数元组</returns>
|
||||
private (double heightInModelUnits, double widthInModelUnits, Color lineColor, double lineOpacity, double verticalOffset)
|
||||
CalculatePassageSpaceParameters(PathVisualization visualization, double metersToModelUnits)
|
||||
{
|
||||
double heightInMeters;
|
||||
double widthInMeters;
|
||||
Color lineColor;
|
||||
double lineOpacity;
|
||||
|
||||
if (_visualizationMode == PathVisualizationMode.VehicleSpace)
|
||||
{
|
||||
// VehicleSpace 模式:使用车辆高度和宽度
|
||||
// 根据路径类型调整参数
|
||||
if (visualization.PathRoute.PathType == NavisworksTransport.PathType.Hoisting)
|
||||
{
|
||||
// 吊装路径:通行空间截面使用车辆的宽度和长度(不是高度)
|
||||
heightInMeters = _vehicleLength + _safetyMargin; // Y方向使用车辆长度
|
||||
widthInMeters = _vehicleWidth + 2 * _safetyMargin; // X方向使用车辆宽度
|
||||
}
|
||||
else
|
||||
{
|
||||
// 地面路径和空轨:使用最大宽度和高度
|
||||
heightInMeters = _vehicleHeight + _safetyMargin;
|
||||
widthInMeters = _vehicleWidth + 2 * _safetyMargin;
|
||||
}
|
||||
var renderStyle = GetRenderStyle(RenderStyleName.VehicleSpace);
|
||||
lineColor = renderStyle.Color;
|
||||
lineOpacity = renderStyle.Alpha;
|
||||
}
|
||||
else if (_visualizationMode == PathVisualizationMode.RibbonLine)
|
||||
{
|
||||
// RibbonLine 模式:使用较低的带状高度
|
||||
heightInMeters = GetLineRadius() / metersToModelUnits * 0.1;
|
||||
widthInMeters = GetLineRadius() / metersToModelUnits * 2;
|
||||
var renderStyle = GetRenderStyle(RenderStyleName.Line);
|
||||
lineColor = renderStyle.Color;
|
||||
lineOpacity = renderStyle.Alpha;
|
||||
}
|
||||
else
|
||||
{
|
||||
// StandardLine 模式:不需要高度和宽度(圆柱体)
|
||||
heightInMeters = 0;
|
||||
widthInMeters = 0;
|
||||
var renderStyle = GetRenderStyle(RenderStyleName.Line);
|
||||
lineColor = renderStyle.Color;
|
||||
lineOpacity = renderStyle.Alpha;
|
||||
}
|
||||
|
||||
// 转换为模型单位
|
||||
double heightInModelUnits = heightInMeters * metersToModelUnits;
|
||||
double widthInModelUnits = widthInMeters * metersToModelUnits;
|
||||
|
||||
// 计算通行空间的垂直偏移(根据路径类型)
|
||||
double verticalOffset = 0;
|
||||
if (_visualizationMode == PathVisualizationMode.VehicleSpace)
|
||||
{
|
||||
if (visualization.PathRoute.PathType == NavisworksTransport.PathType.Ground)
|
||||
{
|
||||
// 地面路径:路径点是地面位置,通行空间底面在地面,中心需要向上偏移半个高度
|
||||
verticalOffset = heightInModelUnits / 2.0;
|
||||
}
|
||||
else if (visualization.PathRoute.PathType == NavisworksTransport.PathType.Rail)
|
||||
{
|
||||
// 空轨路径:路径点是空轨下表面位置,通行空间顶面在空轨下表面,中心需要向下偏移半个高度
|
||||
verticalOffset = -heightInModelUnits / 2.0;
|
||||
}
|
||||
// 吊装路径:路径点是设备中心位置,不需要偏移
|
||||
}
|
||||
|
||||
return (heightInModelUnits, widthInModelUnits, lineColor, lineOpacity, verticalOffset);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 构建路径连线(使用Edges,包含直线段和圆弧段)
|
||||
/// </summary>
|
||||
/// <param name="visualization">路径可视化对象</param>
|
||||
/// <param name="sortedPoints">排序后的路径点列表</param>
|
||||
@ -1368,72 +1445,14 @@ namespace NavisworksTransport
|
||||
// 获取单位转换系数
|
||||
double metersToModelUnits = UnitsConverter.GetMetersToUnitsConversionFactor();
|
||||
|
||||
// 根据可视化模式计算高度和宽度
|
||||
double heightInMeters;
|
||||
double widthInMeters;
|
||||
Color lineColor;
|
||||
double lineOpacity;
|
||||
// 计算通行空间参数
|
||||
var (heightInModelUnits, widthInModelUnits, lineColor, lineOpacity, verticalOffset) =
|
||||
CalculatePassageSpaceParameters(visualization, metersToModelUnits);
|
||||
|
||||
// 记录日志
|
||||
if (_visualizationMode == PathVisualizationMode.VehicleSpace)
|
||||
{
|
||||
// VehicleSpace 模式:使用车辆高度和宽度
|
||||
// 根据路径类型调整参数
|
||||
if (visualization.PathRoute.PathType == NavisworksTransport.PathType.Hoisting)
|
||||
{
|
||||
// 吊装路径:通行空间截面使用车辆的宽度和长度(不是高度)
|
||||
heightInMeters = _vehicleLength + _safetyMargin; // Y方向使用车辆长度
|
||||
widthInMeters = _vehicleWidth + 2 * _safetyMargin; // X方向使用车辆宽度
|
||||
LogManager.Info($"[通行空间渲染] 吊装路径: 车辆参数(长×宽×高)={_vehicleLength:F2}×{_vehicleWidth:F2}×{_vehicleHeight:F2}m, 安全间隙={_safetyMargin:F2}m, 通行空间截面(宽×高)={widthInMeters:F2}×{heightInMeters:F2}m");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 地面路径和空轨:使用最大宽度和高度
|
||||
heightInMeters = _vehicleHeight + _safetyMargin;
|
||||
widthInMeters = _vehicleWidth + 2 * _safetyMargin;
|
||||
LogManager.Info($"[通行空间渲染] {visualization.PathRoute.PathType}路径: 车辆参数(长×宽×高)={_vehicleLength:F2}×{_vehicleWidth:F2}×{_vehicleHeight:F2}m, 安全间隙={_safetyMargin:F2}m, 通行空间截面(宽×高)={widthInMeters:F2}×{heightInMeters:F2}m");
|
||||
}
|
||||
var renderStyle = GetRenderStyle(RenderStyleName.VehicleSpace);
|
||||
lineColor = renderStyle.Color;
|
||||
lineOpacity = renderStyle.Alpha;
|
||||
}
|
||||
else if (_visualizationMode == PathVisualizationMode.RibbonLine)
|
||||
{
|
||||
// RibbonLine 模式:使用较低的带状高度
|
||||
heightInMeters = GetLineRadius() / metersToModelUnits * 0.1;
|
||||
widthInMeters = GetLineRadius() / metersToModelUnits * 2; // 路径宽度(转换为米)
|
||||
var renderStyle = GetRenderStyle(RenderStyleName.Line);
|
||||
lineColor = renderStyle.Color;
|
||||
lineOpacity = renderStyle.Alpha;
|
||||
}
|
||||
else
|
||||
{
|
||||
// StandardLine 模式:不需要高度和宽度(圆柱体)
|
||||
heightInMeters = 0;
|
||||
widthInMeters = 0;
|
||||
var renderStyle = GetRenderStyle(RenderStyleName.Line);
|
||||
lineColor = renderStyle.Color;
|
||||
lineOpacity = renderStyle.Alpha;
|
||||
}
|
||||
|
||||
// 转换为模型单位
|
||||
double heightInModelUnits = heightInMeters * metersToModelUnits;
|
||||
double widthInModelUnits = widthInMeters * metersToModelUnits;
|
||||
|
||||
// 计算通行空间的垂直偏移(根据路径类型)
|
||||
double verticalOffset = 0;
|
||||
if (_visualizationMode == PathVisualizationMode.VehicleSpace)
|
||||
{
|
||||
if (visualization.PathRoute.PathType == NavisworksTransport.PathType.Ground)
|
||||
{
|
||||
// 地面路径:路径点是地面位置,通行空间底面在地面,中心需要向上偏移半个高度
|
||||
verticalOffset = heightInModelUnits / 2.0;
|
||||
}
|
||||
else if (visualization.PathRoute.PathType == NavisworksTransport.PathType.Rail)
|
||||
{
|
||||
// 空轨路径:路径点是空轨下表面位置,通行空间顶面在空轨下表面,中心需要向下偏移半个高度
|
||||
verticalOffset = -heightInModelUnits / 2.0;
|
||||
}
|
||||
// 吊装路径:路径点是设备中心位置,不需要偏移
|
||||
LogManager.Info($"[通行空间渲染] {visualization.PathRoute.PathType}路径: 车辆参数(长×宽×高)={_vehicleLength:F2}×{_vehicleWidth:F2}×{_vehicleHeight:F2}m, 安全间隙={_safetyMargin:F2}m, 通行空间截面(宽×高)={widthInModelUnits/metersToModelUnits:F2}×{heightInModelUnits/metersToModelUnits:F2}m");
|
||||
}
|
||||
|
||||
// 3. 构建路径连线(Edges包含直线段和圆弧段)
|
||||
@ -1527,72 +1546,14 @@ namespace NavisworksTransport
|
||||
// 获取单位转换系数
|
||||
double metersToModelUnits = UnitsConverter.GetMetersToUnitsConversionFactor();
|
||||
|
||||
// 根据可视化模式计算高度和宽度
|
||||
double heightInMeters;
|
||||
double widthInMeters;
|
||||
Color lineColor;
|
||||
double lineOpacity;
|
||||
// 计算通行空间参数
|
||||
var (heightInModelUnits, widthInModelUnits, lineColor, lineOpacity, verticalOffset) =
|
||||
CalculatePassageSpaceParameters(visualization, metersToModelUnits);
|
||||
|
||||
// 记录日志
|
||||
if (_visualizationMode == PathVisualizationMode.VehicleSpace)
|
||||
{
|
||||
// VehicleSpace 模式:使用车辆高度和宽度
|
||||
// 根据路径类型调整参数
|
||||
if (visualization.PathRoute.PathType == NavisworksTransport.PathType.Hoisting)
|
||||
{
|
||||
// 吊装路径:通行空间截面使用车辆的宽度和长度(不是高度)
|
||||
heightInMeters = _vehicleLength + _safetyMargin; // Y方向使用车辆长度
|
||||
widthInMeters = _vehicleWidth + 2 * _safetyMargin; // X方向使用车辆宽度
|
||||
LogManager.Info($"[通行空间渲染] 吊装路径(直接连线): 车辆参数(长×宽×高)={_vehicleLength:F2}×{_vehicleWidth:F2}×{_vehicleHeight:F2}m, 安全间隙={_safetyMargin:F2}m, 通行空间截面(宽×高)={widthInMeters:F2}×{heightInMeters:F2}m");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 地面路径和空轨:使用最大宽度和高度
|
||||
heightInMeters = _vehicleHeight + _safetyMargin;
|
||||
widthInMeters = _vehicleWidth + 2 * _safetyMargin;
|
||||
LogManager.Info($"[通行空间渲染] {visualization.PathRoute.PathType}路径(直接连线): 车辆参数(长×宽×高)={_vehicleLength:F2}×{_vehicleWidth:F2}×{_vehicleHeight:F2}m, 安全间隙={_safetyMargin:F2}m, 通行空间截面(宽×高)={widthInMeters:F2}×{heightInMeters:F2}m");
|
||||
}
|
||||
var renderStyle = GetRenderStyle(RenderStyleName.VehicleSpace);
|
||||
lineColor = renderStyle.Color;
|
||||
lineOpacity = renderStyle.Alpha;
|
||||
}
|
||||
else if (_visualizationMode == PathVisualizationMode.RibbonLine)
|
||||
{
|
||||
// RibbonLine 模式:使用较低的带状高度
|
||||
heightInMeters = GetLineRadius() / metersToModelUnits * 0.1;
|
||||
widthInMeters = GetLineRadius() / metersToModelUnits * 2; // 路径宽度(转换为米)
|
||||
var renderStyle = GetRenderStyle(RenderStyleName.Line);
|
||||
lineColor = renderStyle.Color;
|
||||
lineOpacity = renderStyle.Alpha;
|
||||
}
|
||||
else
|
||||
{
|
||||
// StandardLine 模式:不需要高度和宽度(圆柱体)
|
||||
heightInMeters = 0;
|
||||
widthInMeters = 0;
|
||||
var renderStyle = GetRenderStyle(RenderStyleName.Line);
|
||||
lineColor = renderStyle.Color;
|
||||
lineOpacity = renderStyle.Alpha;
|
||||
}
|
||||
|
||||
// 转换为模型单位
|
||||
double heightInModelUnits = heightInMeters * metersToModelUnits;
|
||||
double widthInModelUnits = widthInMeters * metersToModelUnits;
|
||||
|
||||
// 计算通行空间的垂直偏移(根据路径类型)
|
||||
double verticalOffset = 0;
|
||||
if (_visualizationMode == PathVisualizationMode.VehicleSpace)
|
||||
{
|
||||
if (visualization.PathRoute.PathType == NavisworksTransport.PathType.Ground)
|
||||
{
|
||||
// 地面路径:路径点是地面位置,通行空间底面在地面,中心需要向上偏移半个高度
|
||||
verticalOffset = heightInModelUnits / 2.0;
|
||||
}
|
||||
else if (visualization.PathRoute.PathType == NavisworksTransport.PathType.Rail)
|
||||
{
|
||||
// 空轨路径:路径点是空轨下表面位置,通行空间顶面在空轨下表面,中心需要向下偏移半个高度
|
||||
verticalOffset = -heightInModelUnits / 2.0;
|
||||
}
|
||||
// 吊装路径:路径点是设备中心位置,不需要偏移
|
||||
LogManager.Info($"[通行空间渲染] {visualization.PathRoute.PathType}路径(直接连线): 车辆参数(长×宽×高)={_vehicleLength:F2}×{_vehicleWidth:F2}×{_vehicleHeight:F2}m, 安全间隙={_safetyMargin:F2}m, 通行空间截面(宽×高)={widthInModelUnits/metersToModelUnits:F2}×{heightInModelUnits/metersToModelUnits:F2}m");
|
||||
}
|
||||
|
||||
// 直接使用路径点构建直线连线
|
||||
|
||||
@ -2456,31 +2456,9 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
|
||||
vehicleHeight = VirtualVehicleLength; // Y方向(使用车辆长度)
|
||||
|
||||
// 计算路径的Z长度差
|
||||
vehicleLength = VirtualVehicleLength; // 保持虚拟车辆长度不变
|
||||
|
||||
if (CurrentPathRoute.Points.Count >= 2)
|
||||
|
||||
{
|
||||
|
||||
var startPoint = CurrentPathRoute.Points.First();
|
||||
|
||||
var endPoint = CurrentPathRoute.Points.Last();
|
||||
|
||||
double metersToModelUnits = UnitsConverter.GetMetersToUnitsConversionFactor();
|
||||
|
||||
vehicleLength = Math.Abs(endPoint.Z - startPoint.Z) / metersToModelUnits;
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
|
||||
{
|
||||
|
||||
vehicleLength = VirtualVehicleLength; // fallback
|
||||
|
||||
}
|
||||
|
||||
LogManager.Info($"[通行空间可视化] 吊装路径使用虚拟车辆尺寸: 宽×高×长={vehicleWidth:F2}×{vehicleHeight:F2}×{vehicleLength:F2}m");
|
||||
LogManager.Info($"[通行空间可视化] 吊装路径使用虚拟车辆尺寸: 宽×高={vehicleWidth:F2}×{vehicleHeight:F2}m");
|
||||
|
||||
}
|
||||
|
||||
@ -2518,25 +2496,13 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
if (CurrentPathRoute.PathType == NavisworksTransport.PathType.Hoisting)
|
||||
{
|
||||
// 吊装路径(严格垂直路径):
|
||||
// - 宽度 = X方向尺寸
|
||||
// - 高度 = Y方向尺寸
|
||||
// - 长度 = 路径起点到终点的Z值差
|
||||
vehicleWidth = sizeX;
|
||||
vehicleHeight = sizeY;
|
||||
|
||||
// 计算路径的Z长度差
|
||||
if (CurrentPathRoute.Points.Count >= 2)
|
||||
{
|
||||
var startPoint = CurrentPathRoute.Points.First();
|
||||
var endPoint = CurrentPathRoute.Points.Last();
|
||||
vehicleLength = Math.Abs(endPoint.Z - startPoint.Z) / metersToModelUnits;
|
||||
}
|
||||
else
|
||||
{
|
||||
vehicleLength = sizeZ; // fallback
|
||||
}
|
||||
|
||||
LogManager.Info($"[通行空间可视化] 吊装路径使用物体XY尺寸 ({SelectedAnimatedObject.DisplayName}): 宽={vehicleWidth:F2}m, 高={vehicleHeight:F2}m, 长度(路径Z差)={vehicleLength:F2}m");
|
||||
// 通行空间截面使用物体的长度和宽度
|
||||
double objectLength = Math.Max(sizeX, sizeY);
|
||||
double objectWidth = Math.Min(sizeX, sizeY);
|
||||
vehicleWidth = objectWidth; // 通行空间宽度 = 物体宽度
|
||||
vehicleHeight = objectLength; // 通行空间高度 = 物体长度
|
||||
vehicleLength = sizeZ; // 物体Z尺寸
|
||||
LogManager.Info($"[通行空间可视化] 吊装路径使用物体尺寸 ({SelectedAnimatedObject.DisplayName}): 物体长×宽={objectLength:F2}×{objectWidth:F2}m, 通行空间宽×高={vehicleWidth:F2}×{vehicleHeight:F2}m");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user