【Acadrust】Rust 语言的高性能 CAD 库

Acadrust 是一个用 Rust 语言 编写的高性能 CAD 库,专注于读写 DXFDWG 格式的 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:中央文档容器,包含标题变量、表格、实体和对象
  • Entity trait:所有图形实体的基础 trait
  • TableEntry trait:所有表格项(图层、线型等)的基础 trait
  • 分层模块entitiestablesobjectsiotypes 等模块各司其职

📊 性能优势

  • 解析速度:比 C# 实现快 2-3 倍
  • 内存占用:降低 30-50%,并支持零拷贝解析
  • 大文件处理:支持内存映射 I/O 和 Rayon 并行迭代

🔮 路线图

项目正在积极开发中,未来计划支持:

  • 完整的 DWG 二进制格式支持
  • 几何运算(偏移、修剪、延伸)
  • SVG/PDF 导出
  • 空间索引
  • LISP 表达式求值

📝 开源协议

Acadrust 采用 MIT 许可证,可自由用于商业和开源项目。

相关推荐
本地化文档19 小时前
rustdoc-book-l10n
rust·github·gitcode
Tony Bai1 天前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
jump_jump1 天前
RTK:给 AI 编码助手瘦身的 Rust 代理
性能优化·rust·claude
小杍随笔1 天前
【Rust Exercism 练习详解:Anagram + Space Age + Sublist(附完整代码与深度解读)】
开发语言·rust·c#
Rust研习社1 天前
Rust 字符串与切片实战
rust
朝阳5811 天前
局域网聊天工具
javascript·rust
朝阳5811 天前
我做了一个局域网传文件的小工具,记录一下
javascript·rust
Rust语言中文社区2 天前
【Rust日报】用 Rust 重写的 Turso 是一个更好的 SQLite 吗?
开发语言·数据库·后端·rust·sqlite
小杍随笔2 天前
【Rust 半小时速成(2024 Edition 更新版)】
开发语言·后端·rust
Source.Liu2 天前
【office2pdf】office2pdf 纯 Rust 实现的 Office 转 PDF 库
rust·pdf·office2pdf