当前位置: 首页 > news >正文

两个常用的用于读写和操作DXF文件C#库:netDxf 和 DXF.NET

netDxf 和 DXF.NET 是两个常用的C#库,用于读取、写入和操作DXF文件。以下是它们的详细介绍和用法示例。


1. netDxf

简介

netDxf 是一个开源的DXF文件读写库,支持AutoCAD DXF格式的读取和写入。它支持大多数DXF实体和对象,并且易于使用。

  • GitHub地址:https://github.com/haplokuon/netDxf

  • 特点

    • 支持DXF文件的读取和写入。

    • 支持多种实体类型(如直线、圆弧、圆、多段线等)。

    • 支持图层、块、尺寸标注等高级功能。

    • 跨平台(基于.NET Standard)。


安装

通过NuGet安装:

Install-Package netDxf

基本用法

读取DXF文件
using netDxf;
using netDxf.Entities;

class Program
{
    static void Main()
    {
        // 加载DXF文件
        DxfDocument dxf = DxfDocument.Load("example.dxf");

        // 遍历所有实体
        foreach (EntityObject entity in dxf.Entities)
        {
            switch (entity.Type)
            {
                case EntityType.Line:
                    Line line = (Line)entity;
                    Console.WriteLine($"Line: Start({line.StartPoint.X}, {line.StartPoint.Y}), End({line.EndPoint.X}, {line.EndPoint.Y})");
                    break;
                case EntityType.Arc:
                    Arc arc = (Arc)entity;
                    Console.WriteLine($"Arc: Center({arc.Center.X}, {arc.Center.Y}), Radius({arc.Radius})");
                    break;
                case EntityType.Circle:
                    Circle circle = (Circle)entity;
                    Console.WriteLine($"Circle: Center({circle.Center.X}, {circle.Center.Y}), Radius({circle.Radius})");
                    break;
                // 处理其他实体类型
            }
        }
    }
}
创建并保存DXF文件
using netDxf;
using netDxf.Entities;
using netDxf.Header;

class Program
{
    static void Main()
    {
        // 创建新的DXF文档
        DxfDocument dxf = new DxfDocument();

        // 创建实体
        Line line = new Line(new Vector2(0, 0), new Vector2(100, 100));
        Circle circle = new Circle(new Vector2(50, 50), 25);

        // 添加实体到文档
        dxf.AddEntity(line);
        dxf.AddEntity(circle);

        // 保存DXF文件
        dxf.Save("output.dxf");
    }
}

支持的实体类型

  • 直线(Line

  • 圆弧(Arc

  • 圆(Circle

  • 多段线(Polyline

  • 文字(Text

  • 尺寸标注(Dimension

  • 块(Block

  • 图层(Layer


2. DXF.NET

简介

DXF.NET 是另一个轻量级的DXF文件读写库,专注于简单易用和高效解析。

  • GitHub地址:https://github.com/ixmilia/dxf

  • 特点

    • 轻量级,易于集成。

    • 支持DXF文件的读取和写入。

    • 支持常见的实体类型(如直线、圆弧、圆等)。

    • 基于.NET Standard,跨平台。


安装

通过NuGet安装:

Install-Package IxMilia.Dxf

基本用法

读取DXF文件
using IxMilia.Dxf;
using IxMilia.Dxf.Entities;

class Program
{
    static void Main()
    {
        // 加载DXF文件
        DxfFile dxf = DxfFile.Load("example.dxf");

        // 遍历所有实体
        foreach (DxfEntity entity in dxf.Entities)
        {
            switch (entity.EntityType)
            {
                case DxfEntityType.Line:
                    DxfLine line = (DxfLine)entity;
                    Console.WriteLine($"Line: Start({line.P1.X}, {line.P1.Y}), End({line.P2.X}, {line.P2.Y})");
                    break;
                case DxfEntityType.Arc:
                    DxfArc arc = (DxfArc)entity;
                    Console.WriteLine($"Arc: Center({arc.Center.X}, {arc.Center.Y}), Radius({arc.Radius})");
                    break;
                case DxfEntityType.Circle:
                    DxfCircle circle = (DxfCircle)entity;
                    Console.WriteLine($"Circle: Center({circle.Center.X}, {circle.Center.Y}), Radius({circle.Radius})");
                    break;
                // 处理其他实体类型
            }
        }
    }
}
创建并保存DXF文件
using IxMilia.Dxf;
using IxMilia.Dxf.Entities;

class Program
{
    static void Main()
    {
        // 创建新的DXF文件
        DxfFile dxf = new DxfFile();

        // 创建实体
        DxfLine line = new DxfLine(new DxfPoint(0, 0, 0), new DxfPoint(100, 100, 0));
        DxfCircle circle = new DxfCircle(new DxfPoint(50, 50, 0), 25);

        // 添加实体到文件
        dxf.Entities.Add(line);
        dxf.Entities.Add(circle);

        // 保存DXF文件
        dxf.Save("output.dxf");
    }
}

支持的实体类型

  • 直线(DxfLine

  • 圆弧(DxfArc

  • 圆(DxfCircle

  • 多段线(DxfPolyline

  • 文字(DxfText

  • 块(DxfBlock

  • 图层(DxfLayer


3. netDxf 与 DXF.NET 的比较

特性netDxfDXF.NET
功能丰富度更丰富,支持更多实体和高级功能轻量级,支持常见实体
易用性较复杂,适合高级用户简单易用,适合快速集成
性能较高较高
文档和支持文档较全,社区活跃文档较少,但代码简洁易读
适用场景需要处理复杂DXF文件的场景简单DXF文件读写场景

4. 选择建议

  • 如果需要处理复杂的DXF文件(如包含块、尺寸标注等),推荐使用 netDxf

  • 如果只需要简单的DXF文件读写功能,推荐使用 DXF.NET

相关文章:

  • Redis命令详解--集合
  • 服务器——报错解决:移动文件时,bash: /usr/bin/mv: Argument list too long
  • [密码学实战]Java实现抗量子Kyber512与Dilithium2算法及详解
  • Facebook 如何影响元宇宙的发展趋势
  • 连接 kafka0.8.1.1 java
  • 使用HAI来打通DeepSeek的任督二脉
  • Python简单爬虫实践案例
  • 基于Rockylinux9.5(LTS-SP4)安装MySQL Community Server 9.2.0
  • 侯捷 C++ 课程学习笔记:从对象生命周期谈C++内存管理范式演进——侯捷C++课程学习启示录
  • Transformer原理
  • 数据结构篇——二叉树的存储与遍历
  • libnvdla_compiler.so: cannot open shared object file: No such file or directory
  • 在LwIP中,`tcp_recved()`、`tcp_sndbuf()` 和 `tcp_write()`三个函数详细用法及示例
  • 【QT】Q_GLOBAL_STATIC的使用
  • 免费提供多样风格手机壁纸及自动更换功能的软件
  • 高速网络包处理,基础网络协议上内核态直接处理数据包,XDP技术的原理
  • C#实现自己的Json解析器(LALR(1)+miniDFA)
  • 正则表达式详解(regular expression)
  • 数据库连接不上,端口号为0?
  • CLR 线程池
  • 中共中央、国务院印发《党政机关厉行节约反对浪费条例》
  • 陈刚:推动良好政治生态和美好自然生态共生共优相得益彰
  • 陕西三原高新区违法占用土地,被自然资源局罚款10万元
  • 上海高院与上海妇联签协议,建立反家暴常态化联动协作机制
  • 巴基斯坦与印度停火延长至18日
  • 六连板成飞集成:航空零部件业务收入占比为1.74%,市场环境没有重大调整