diff --git a/src/Core/PathPointRenderPlugin.cs b/src/Core/PathPointRenderPlugin.cs
index cebae8c..87242dd 100644
--- a/src/Core/PathPointRenderPlugin.cs
+++ b/src/Core/PathPointRenderPlugin.cs
@@ -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
}
///
- /// 渲染方块标记(切点)
+ /// 渲染方块标记(切点)- 使用圆柱体
///
/// 图形上下文
/// 方块标记
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);
+ }
}
///
@@ -2207,6 +2228,16 @@ namespace NavisworksTransport
///
public TangentPointType TangentType { get; set; }
+ ///
+ /// 路径方向(用于渲染垂直薄片)
+ ///
+ public Vector3D Direction { get; set; }
+
+ ///
+ /// 高度(用于圆柱体渲染)
+ ///
+ public double Height { get; set; }
+
public override string ToString()
{
return $"SquareMarker[类型={TangentType}, 中心=({Center.X:F2},{Center.Y:F2},{Center.Z:F2}), 边长={Size:F2}]";