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

embedded/2025/3/27 5:24:56/

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

文章来源:https://blog.csdn.net/zkmrobot/article/details/146402899
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/embedded/176668.html

相关文章

涨薪技术|Docker容器数据管理

在生产环境中使用Docker时,经常需要对数据进行持久化,这就有点像Redis里面的持久性一样的,或者需要在多个容器之间在进行数据共享,这就是Docker中我们说的数据管理操作。 容器中管理数据主要有两种方式: 数据卷(Data …

RabbitMQ的高级特性介绍(二)

发送方确认 当消息的⽣产者将消息发送出去之后,消息到底有没有正确地到达服务器呢? 如果在消息到 达服务器之前已经丢失(比如RabbitMQ重启, 那么RabbitMQ重启期间⽣产者消息投递失败), 持久化操作也解决不了这个问题,因为消息根本没有到达服务器&#…

Bash 脚本基础

一、Bash 脚本基础 什么是 Bash 脚本:Bash 脚本是一种文本文件,其中包含了一系列的命令,这些命令可以被 Bash shell 执行。它用于自动化重复性的任务,提高工作效率。 Bash 脚本的基本结构:以 #!/bin/bash 开头&#x…

MyBatis-Plus(Ⅲ)IService详解

目录 一、逐一演示 1.save(插入一条) 结果 断言(引入概念) 2.saveBatch(批量插入) 结果 3.saveOrUpdateBatch(批量插入&更新) 结果 4.removeById(通过id删除…

VUE2导出el-table数据为excel并且按字段分多个sheet

首先在根目录下建一个文件夹export用来存储export.js import * as XLSX from xlsxfunction autoWidthFunc(ws, data) {// 设置每列的最大宽度const colWidth data.map(row > row.map(val > {var reg new RegExp([\\u4E00-\\u9FFF], g) // 检测字符串是否包含汉字if (v…

从零到一开发一款 DeepSeek 聊天机器人

AI聊天机器人 目标设计方案系统架构技术选型功能模块 实现代码环境配置安装依赖 核心代码API 请求函数主循环函数 功能扩展1. 情感分析2. 多语言支持3. 上下文记忆4. 用户身份识别 总结附录 目标 开发一个智能聊天机器人,旨在为用户提供自然、流畅的对话体验。通过…

二分查找------查找区间

1. 题目 2. 思路和题解 这道题虽然是道中等题,并且看起来很复杂,但是实际上就是给定一个数组和目标值,让我们去寻找该目标值在数组中的位置。题目还提到说设计O(log n)的算法解决问题,更进一步暗示我们去用二分查找。要找开始位置…

DeepSeek+RAG局域网部署

已经有很多平台集成RAG模式,dify,cherrystudio等,这里通过AI辅助,用DS的API实现一个简单的RAG部署。框架主要技术栈是Chroma,langchain,streamlit,答案流式输出,并且对答案加上索引。支持doc,docx,pdf,txt。…