将切点改为立柱样式

This commit is contained in:
tian 2026-01-04 12:39:54 +08:00
parent ec3ef5b30e
commit 13e08faa8a

View File

@ -1061,14 +1061,24 @@ namespace NavisworksTransport
// 切点颜色与路径点相同
var tangentColor = GetRenderStyle(RenderStyleName.WayPoint).Color;
// 路径宽度基准值(柱状和带状都是 GetLineRadius() * 2
var pathWidth = GetLineRadius() * 2;
// 切点半径:路径半径的一半(切点直径 = 路径宽度的一半)
var tangentRadius = GetLineRadius() * 0.5;
// 切点高度:路径宽度的一半
var tangentHeight = pathWidth * 0.5;
// 进入切点Ts
var tsMarker = new SquareMarker
{
Center = edge.Trajectory.Ts,
Normal = new Vector3D(0, 0, 1),
Size = GetLineRadius() * 1.5,
Size = tangentRadius * 2, // 直径
Height = tangentHeight, // 高度
Color = tangentColor,
Alpha = 0.9,
Alpha = 0.8, // 80%透明度
EdgeId = edge.Id,
TangentType = TangentPointType.EntryTangent
};
@ -1079,9 +1089,10 @@ namespace NavisworksTransport
{
Center = edge.Trajectory.Te,
Normal = new Vector3D(0, 0, 1),
Size = GetLineRadius() * 1.5,
Size = tangentRadius * 2, // 直径
Height = tangentHeight, // 高度
Color = tangentColor,
Alpha = 0.9,
Alpha = 0.8, // 80%透明度
EdgeId = edge.Id,
TangentType = TangentPointType.ExitTangent
};
@ -1957,33 +1968,43 @@ namespace NavisworksTransport
}
/// <summary>
/// 渲染方块标记(切点)
/// 渲染方块标记(切点)- 使用圆柱体
/// </summary>
/// <param name="graphics">图形上下文</param>
/// <param name="marker">方块标记</param>
private void RenderSquareMarker(Graphics graphics, SquareMarker marker)
{
// 计算立方体的三个轴向量
var halfSize = marker.Size / 2.0;
// X轴向量沿X方向
var xVector = new Vector3D(marker.Size, 0, 0);
// Y轴向量沿Y方向
var yVector = new Vector3D(0, marker.Size, 0);
// Z轴向量沿Z方向高度很小形成扁平立方体
var zVector = new Vector3D(0, 0, marker.Size * 0.2);
// 计算立方体原点(中心点偏移)
var origin = new Point3D(
marker.Center.X - halfSize,
marker.Center.Y - halfSize,
marker.Center.Z - zVector.Z / 2
);
// 使用Cuboid API绘制方块
graphics.Cuboid(origin, xVector, yVector, zVector, true);
try
{
// 计算圆柱体半径
var radius = marker.Size / 2.0;
// 计算圆柱体高度
var height = marker.Height;
// 计算圆柱体起点和终点(底面放在通道上)
var startPoint = new Point3D(
marker.Center.X,
marker.Center.Y,
marker.Center.Z // 底面Z坐标 = 中心Z坐标
);
var endPoint = new Point3D(
marker.Center.X,
marker.Center.Y,
marker.Center.Z + height // 顶面Z坐标 = 中心Z坐标 + 高度
);
// 设置颜色和透明度
graphics.Color(marker.Color, marker.Alpha);
// 使用Cylinder API渲染圆柱体
graphics.Cylinder(startPoint, endPoint, radius);
}
catch (Exception ex)
{
LogManager.Error($"[切点渲染] 渲染切点失败: {ex.Message}", ex);
}
}
/// <summary>
@ -2207,6 +2228,16 @@ namespace NavisworksTransport
/// </summary>
public TangentPointType TangentType { get; set; }
/// <summary>
/// 路径方向(用于渲染垂直薄片)
/// </summary>
public Vector3D Direction { get; set; }
/// <summary>
/// 高度(用于圆柱体渲染)
/// </summary>
public double Height { get; set; }
public override string ToString()
{
return $"SquareMarker[类型={TangentType}, 中心=({Center.X:F2},{Center.Y:F2},{Center.Z:F2}), 边长={Size:F2}]";