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

相关推荐
doiito9 小时前
【Agent Harness】Gliding Horse v0.1.4.preview 发布:时间感知、闭环审计与智能增强
ai·rust·架构设计·系统设计·ai agent
独孤留白10 小时前
从C到Rust:堆内存,数据如何逃逸栈的约束?
rust
doiito(Do It Together)11 小时前
【安全,架构】RustyVault 项目深度分析报告以及和HashiCorp Vault的差异
微服务·架构·rust
问窗11 小时前
Rust实现Windows本地搜索工具
windows·搜索引擎·rust
程序员爱钓鱼12 小时前
Rust 变量与不可变性:为什么默认不能修改变量?
前端·后端·rust
第一程序员1 天前
Rust Agent 子进程执行:Command 之前,先定义输入和超时
python·rust·github
IT笔记1 天前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
取地址符1 天前
Rust学习笔记(基于Rustlings)(2):数据结构与集合
笔记·学习·rust
取地址符1 天前
Rust语法学习 (基于Rustlings)(1):基础语法
经验分享·笔记·学习·rust