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

相关推荐
SomeB1oody8 小时前
【RustyML入门】1.0. 快速上手
开发语言·后端·机器学习·rust·教程
骊城英雄8 小时前
Rust从入门到精通-trait
人工智能·算法·rust
花褪残红青杏小9 小时前
Rust图像处理第23节-图像加噪:给每个像素单独掷一次骰子
rust·webassembly·图形学
小杍随笔14 小时前
2025年Rust GUI框架实战万字避坑指南
开发语言·后端·rust
在水一缸2 天前
当 AI 编码助手遇上 Rust:深入解析 Zerostack 的极简哲学与实战应用
rust·系统架构·开源项目·轻量化·ai编码助手·zerostack
2401_873479402 天前
风控引擎高并发IP查询方案对比:开源Rust库 vs 商业离线库,怎么选?
tcp/ip·rust·开源·ip
花褪残红青杏小2 天前
Rust图像处理第22节-从RGB到YCbCr: 让亮度和颜色分家
rust·webassembly·图形学
花褪残红青杏小2 天前
Rust图像处理第21节-最小二乘回归:用矩阵求逆解"拟合"问题
rust·webassembly·图形学
k4m7v2pz3 天前
Bevy 0.14.2 玩家精灵不渲染(只有背景在动)排查全记录
macos·rust·bevy
老王生涯3 天前
rust开发环境配置-Windows & GNU
开发语言·windows·rust