From 13e08faa8a2386ee4826fafbbce190c40368b6ba Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Sun, 4 Jan 2026 12:39:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E5=88=87=E7=82=B9=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E7=AB=8B=E6=9F=B1=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Core/PathPointRenderPlugin.cs | 83 +++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 26 deletions(-) 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}]";