【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 许可证,可自由用于商业和开源项目。

相关推荐
Rust研习社2 小时前
Once、OnceCell、OnceLock:Rust 一次性初始化终极指南
后端·rust·编程语言
Rust研习社2 小时前
从入门到实践:Rust 异步编程完全指南
开发语言·后端·rust
Rust研习社5 小时前
Rust Pin 解析:核心原理与异步编程实践
开发语言·后端·rust
圆山猫7 小时前
[AI] [Linux] 教我编一个启用rust的riscv kernel用于qemu启动
linux·ai·rust
代码羊羊8 小时前
Rust-特征trait和特征对象
服务器·网络·rust
圆山猫8 小时前
[AI] [Linux] 教我用rust写一个GPIO驱动
linux·rust
DevilSeagull11 小时前
Rust 结构体详解:从定义到实例化的指南
开发语言·算法·安全·rust
圆山猫11 小时前
[AI] [RISCV] 用 Rust 写一个 RISC-V BootROM:从 QEMU 到真实硬件
开发语言·rust·risc-v
AI首席情报员_阿布1 天前
Numa:用 Rust 从零造一个 DNS 解析器,顺手解决了开发者最头疼的几件事
人工智能·rust·dns
Rust研习社1 天前
Rust 多线程从入门到实战
开发语言·后端·rust