Acadrust 是一个用 Rust 语言 编写的高性能 CAD 库,专注于读写 DXF 和 DWG 格式的 CAD 文件。它通过利用 Rust 的内存安全、零成本抽象和并行计算等特性,实现了比同类 C# 库快 2-3 倍、内存占用低 30-50% 的性能表现。
🚀 核心特性
- 全面的文件格式支持:支持 DXF(ASCII 和二进制)和 DWG 原生二进制格式,涵盖 AutoCAD R12 到 2018+ 的几乎所有主流版本
- 丰富的图形实体 :提供 41 种图形实体类型,包括基础图形(线、圆、弧、椭圆)、复杂曲线(样条线、多段线)、标注(尺寸、引线、表格)以及三维实体(网格、面片、ACIS 实体)
- 完整的表格系统:支持图层、线型、文字样式、标注样式等 9 种标准表格管理
- ACIS 三维实体支持:可解析和写入 SAT(文本)和 SAB(二进制)格式的 ACIS 实体数据,并提供参数化构建器(立方体、圆柱、球体、圆环等)
- 健壮的解析机制:提供错误容忍解析模式,可收集诊断信息而不会因单个错误中断解析
- 可选的 Serde 支持 :通过启用
serde特性,可为所有类型实现Serialize/Deserialize,方便 JSON 等格式的序列化
📦 安装与快速入门
安装
在 Cargo.toml 中添加依赖:
toml
[dependencies]
acadrust = "0.3.0"
如需 Serde 序列化支持:
toml
acadrust = { version = "0.3.0", features = ["serde"] }
读取 DXF 文件
rust
use acadrust::{DxfReader, CadDocument};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 读取 DXF 文件
let doc = DxfReader::from_file("input.dxf")?.read()?;
println!("实体数量: {}", doc.entities().count());
Ok(())
}
读取 DWG 文件
rust
use acadrust::{DwgReader, CadDocument};
let mut reader = DwgReader::from_file("input.dwg")?;
let doc = reader.read()?;
创建并写入文件
rust
use acadrust::{CadDocument, DxfWriter, entities::{Line, EntityType}, types::Color};
let mut doc = CadDocument::new();
// 创建红色线段
let mut line = Line::from_coords(0.0, 0.0, 0.0, 100.0, 50.0, 0.0);
line.common.color = Color::RED;
doc.add_entity(EntityType::Line(line))?;
// 写入 DXF
DxfWriter::new(&doc).write_to_file("output.dxf")?;
操作图层
rust
use acadrust::{CadDocument, tables::Layer, types::Color};
let mut doc = CadDocument::new();
// 创建新图层
let mut layer = Layer::new("MY_LAYER");
layer.color = Color::from_index(1); // 红色
doc.add_table_entry(layer)?;
// 后续创建的实体可以指定该图层
📐 支持的版本矩阵
| 版本代码 | AutoCAD 版本 | DXF 支持 | DWG 支持 |
|---|---|---|---|
| AC1009 | R12 | 读写 | --- |
| AC1012 | R13 | 读写 | 读写 |
| AC1014 | R14 | 读写 | 读写 |
| AC1015 | 2000 | 读写 | 读写 |
| AC1018 | 2004 | 读写 | 读写 |
| AC1021 | 2007 | 读写 | 读写 |
| AC1024 | 2010 | 读写 | 读写 |
| AC1027 | 2013 | 读写 | 读写 |
| AC1032 | 2018+ | 读写 | 读写 |
🏗️ 架构设计
Acadrust 采用基于 trait 的模块化设计:
CadDocument:中央文档容器,包含标题变量、表格、实体和对象Entitytrait:所有图形实体的基础 traitTableEntrytrait:所有表格项(图层、线型等)的基础 trait- 分层模块 :
entities、tables、objects、io、types等模块各司其职
📊 性能优势
- 解析速度:比 C# 实现快 2-3 倍
- 内存占用:降低 30-50%,并支持零拷贝解析
- 大文件处理:支持内存映射 I/O 和 Rayon 并行迭代
🔮 路线图
项目正在积极开发中,未来计划支持:
- 完整的 DWG 二进制格式支持
- 几何运算(偏移、修剪、延伸)
- SVG/PDF 导出
- 空间索引
- LISP 表达式求值
📝 开源协议
Acadrust 采用 MIT 许可证,可自由用于商业和开源项目。