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

在.NET中使用netDxf绘制DXF文件指定图层的技术求助

使用netDxf筛选指定图层绘制DXF实体到位图

1. 获取DXF文件所有图层信息

netDxf的DxfDocument类自带Layers集合属性,直接遍历就能拿到所有图层的名称和ID:

// 遍历所有图层并输出名称
foreach (Layer layer in doc.Layers)
{
    Console.WriteLine($"图层名称: {layer.Name}, 图层ID: {layer.Id}");
}

2. 筛选目标图层的实体进行绘制

每个DXF实体(EntityObject)都包含Layer属性,指向它所属的图层对象。只需在绘制前判断实体的图层名称是否匹配你的目标图层,就能实现只绘制指定图层的内容。

修改你现有的DrawDxfEntity方法,添加图层筛选逻辑:

// 定义你要绘制的目标图层名称
private const string TargetLayerName = "你的目标图层名称";

static void DrawDxfEntity(Graphics graphics, EntityObject entity, DxfDocument doc)
{
    // 先判断实体是否属于目标图层,不属于则直接返回
    if (string.Equals(entity.Layer.Name, TargetLayerName, StringComparison.OrdinalIgnoreCase))
    {
        // 保留原实体绘制逻辑
        if (entity is Line line)
        {
            graphics.DrawLine(Pens.Black, (float)line.StartPoint.X, (float)line.StartPoint.Y, (float)line.EndPoint.X, (float)line.EndPoint.Y);
        }
        else if (entity is Circle circle)
        {
            graphics.DrawEllipse(Pens.Black, (float)(circle.Center.X - circle.Radius), (float)(circle.Center.Y - circle.Radius),
                (float)(2 * circle.Radius), (float)(2 * circle.Radius));
        }
        else if (entity is Arc arc)
        {
            double sweepAngle = arc.EndAngle - arc.StartAngle;
            arc.EndAngle = sweepAngle;

            if (arc.StartAngle >= 270.565033310362 && arc.StartAngle <= 270.565033310364)
            {
                return;
            }

            graphics.DrawArc(Pens.Black, (float)(arc.Center.X - arc.Radius), (float)(arc.Center.Y - arc.Radius),
            (float)(2 * arc.Radius), (float)(2 * arc.Radius), (float)arc.StartAngle, (float)arc.EndAngle);
        }
        else if (entity is Polyline2D polyline2d)
        {
            if (polyline2d != null && polyline2d.Vertexes != null)
            {
                var points = polyline2d.Vertexes.Select(v => new PointF((float)v.Position.X, (float)v.Position.Y)).ToArray();
                graphics.DrawPolygon(Pens.Black, points);
            }
        }
    }
}

补充说明

  • 图层名称默认区分大小写,若想忽略大小写匹配,可使用StringComparison.OrdinalIgnoreCase(如代码中所示)。
  • 若需筛选多个图层,可将目标图层名称存入集合,判断时使用Contains方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:52:37