You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Path中提取ArcSegment和LineSegment而非PolylineSegment?

解决方法

问题出在你调用了GetFlattenedPathGeometry()方法——这个方法的核心作用就是把路径里的所有曲线(包括圆弧)都转换成由直线段构成的折线,所以得到的只能是PolylineSegment,自然会丢失原始的ArcSegment和LineSegment信息。

要获取路径的原始片段,直接访问Path.Data对应的原始几何结构即可,不需要做扁平化处理:

var geometry = snappedPath.Data as PathGeometry;
if (geometry != null)
{
    var figure = geometry.Figures[0];
    foreach (var segment in figure.Segments)
    {
        if (segment is ArcSegment arcSeg)
        {
            // 提取圆弧数据,比如半径、圆弧方向等
            var arcRadius = arcSeg.Size;
            var isLargeArc = arcSeg.IsLargeArc;
            var sweepDir = arcSeg.SweepDirection;
            // 按需处理其他圆弧属性
        }
        else if (segment is LineSegment lineSeg)
        {
            // 处理直线段端点数据
            var lineEndPoint = lineSeg.Point;
            // 按需处理直线段逻辑
        }
    }
}

如果snappedPath.Data是StreamGeometry类型,需要先将其转换为PathGeometry才能访问内部片段:

if (snappedPath.Data is StreamGeometry streamGeo)
{
    PathGeometry pathGeo = new PathGeometry();
    using (var ctx = streamGeo.Open())
    {
        streamGeo.FillWithContext(ctx);
    }
    // 后续操作pathGeo.Figures和Segments即可获取原始片段
    var figure = pathGeo.Figures[0];
    foreach (var segment in figure.Segments)
    {
        // 类型判断与处理逻辑同前
    }
}

核心原则就是不要使用扁平化方法,直接操作路径的原始几何结构,这样就能完整保留所有原始线段类型。

内容的提问来源于stack exchange,提问作者HillbillyHarry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:54:58