将切点改为立柱样式
This commit is contained in:
parent
ec3ef5b30e
commit
13e08faa8a
@ -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}]";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user