3个不稳定版本
0.2.0 | 2024年4月29日 |
---|---|
0.1.1 | 2023年10月31日 |
0.1.0 | 2023年7月4日 |
#290 in 算法
200KB
4.5K SLoC
cnccoder
cnccoder是一个用于编写切割指令并将其转换为G代码用于3轴CNC机器的crate。
与FreeCAD和类似软件从3D模型生成切割不同,它允许用户精确地编写CNC机器应该如何切割以及使用哪些工具的指令。
通过提供几个辅助切割函数和程序,该crate可以将这些高级指令编译成G代码。
该crate还可以生成可用于模拟G代码的Camotics项目文件,以便在实际机器运行之前进行验证,从而降低损坏CNC机器和受伤的风险。
虽然G代码有多种风味,但到目前为止,该项目只针对使用Grbl控制器的CNC机器。
使用示例
简单平面程序的示例(来自examples/planing.rs
)
use anyhow::Result;
use cnccoder::prelude::*;
fn main() -> Result<()> {
// Create a program with metric measurements where the tool can travel freely at 10 mm
// height, and move to 50 mm height for manual tool change.
let mut program = Program::new(Units::Metric, 10.0, 50.0);
// Create a cylindrical tool
let tool = Tool::cylindrical(
Units::Metric, // Unit for tool measurements
20.0, // Cutter length
10.0, // Cutter diameter
Direction::Clockwise, // Spindle rotation direction
10000.0, // Spindle speed (rpm)
3000.0, // Max feed rate/speed that the cutter will travel with (mm/min)
);
// Get the tool context to extend the program
let mut context = program.context(tool);
// Append the planing cuts to the cylindrical tool context
context.append_cut(Cut::plane(
// Start at the x 0 mm, y 0 mm, z 3 mm coordinates
Vector3::new(0.0, 0.0, 3.0),
// Plane a 100 x 100 mm area
Vector2::new(100.0, 100.0),
// Plane down to 0 mm height (from 3 mm)
0.0,
// Cut at the most 1 mm per pass
1.0,
));
// Write the G-code (for CNC) `planing.gcode` and Camotics project file
// `planing.camotics` (for simulation) to disk using a resolution value
// of 0.5 for the Camotics simulation.
write_project("planing", program, 0.5)?;
Ok(())
}
要在Camotics中运行G代码仿真(如果已安装),只需运行
$ cargo run --example planing && camotics planing.camotics
运行cargo run --example planing
命令将生成当前目录中的G代码文件planing.gcode
和Camotics项目文件planing.camotics
。
然后可以通过运行camotics planing.camotics
在Camotics中打开这些文件。
这样您就可以轻松地模拟您的项目。
新功能愿望单
- 使用具有定义错误的use thiserror而不是anyhow。
- 为
programs/
模块提供更多可用的程序,例如,盒子、可重复使用的木制接合。 - WASM构建和API,当前API由于使用工具和切割的枚举变体而与其不兼容。这目前还不被wasm-pack支持,因此可能需要暂时使用另一个API。
- 支持基于字体的文本v雕刻。
- 支持创建用于镶嵌的负v雕刻切割。
贡献
您可以通过多种方式提供帮助
- 尝试使用这个crate
- 报告任何问题、错误、缺失的文档或示例
- 创建有关crate API人机工学的反馈问题
- 扩展文档或示例
- 贡献代码更改
对crate或其功能/缺乏的反馈可能和代码贡献一样有价值。
代码贡献
尽管如此,代码贡献总是受欢迎的。创建一个合并请求,包括您的新切割、工具、程序或其他改进,并创建一个pull request。
确保任何新的/更改的面向公众的API都有适当的文档注释。
一旦pull request准备好合并,也可以将提交合并为每个特性或修复的单个提交。
此项目的提交信息应符合常规提交标准,以便可以自动计算semver版本并自动生成发布变更日志。
许可证
您可以选择在Apache许可证,版本2.0或MIT许可证下许可。
除非您明确声明,否则您根据Apache-2.0许可证定义的任何有意提交给Serde的贡献,将如上所述双重许可,不附加任何额外条款或条件。
依赖关系
~3–28MB
~430K SLoC