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

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:中央文档容器,包含标题变量、表格、实体和对象
  • Entity trait:所有图形实体的基础 trait
  • TableEntry trait:所有表格项(图层、线型等)的基础 trait
  • 分层模块 :entities、tables、objects、io、types 等模块各司其职

📊 性能优势

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

🔮 路线图

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

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

📝 开源协议

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

相关推荐
离歌漠6 小时前
《我用 Tauri 做了一个本地开发工具箱》
rust·typescript·vue
小小龙学IT10 小时前
Python Polars 高性能数据处理引擎深度解析
开发语言·python·rust·1024程序员节
zzu123zsw12 小时前
为什么 Python 做 Agent 总在并发中崩溃?拆解 Blockcell 在 Rust 下的 Host-Cell 隔离与自愈状态机
开发语言·python·rust·大模型·ai agent
hsg7714 小时前
简述:基于Ubuntu24编译发布rust开发的html+web后端服务的方法
rust·1024程序员节
zzu123zsw14 小时前
当 GPU 加速渲染遇上无头组件:拆解 Yororen UI 在 GPUI 生态下的状态解耦与 XML 模板实践
xml·ui·rust·gui·gpui
传奇开心果编程1 天前
【Rust入门练中学】第6课:结构体与方法
开发语言·rust·结构体·编程语言理论·结构体方法·编程通用语言
本地化文档1 天前
cutile-rs-book-l10n
rust·gpu·nvidia·cuda·sphinx·crowdin
qq_406981031 天前
大白话rust系列09 函数调用两次有什么错?
开发语言·python·rust
康小旺1 天前
TypeScript 编译器开始卷 Rust 了:Cloudflare 的 tsrs 到底想干嘛?
rust·typescript
Norna1 天前
时间轮的 +1,为什么最后只留在顶层
rust