33 个版本 (破坏性更新)
| 0.34.0 | 2020 年 8 月 7 日 |
|---|---|
| 0.33.0 | 2020 年 4 月 5 日 |
| 0.32.0 | 2020 年 3 月 14 日 |
| 0.31.0 | 2019 年 12 月 8 日 |
| 0.5.4 | 2017 年 1 月 25 日 |
#733 in 数据结构
每月 261 次下载
在 2 个软件包中使用 (通过 dms-coordinates)
665KB
14K SLoC
rust-3d
用 Rust 编写的 3D/2D 库。提供用于 2D 和 3D 空间的实用容器、结构和算法。旨在作为数值算法、查看器、游戏引擎等的基础。
迁移 0.29.0 -> 0.30.0
请注意,模块结构已更改。现在只有 io 和 impls 的子模块。
此外,还删除了 prelude。
如果您之前通过 rust_3d::prelude::*; 使用预定义,现在应该切换到 rust_3d::*;。
如果您使用的是显式路径,例如 rust_3d::filters::combinators::FilterAll,现在应使用 rust_3d::FilterAll。
请注意,io 和 impls 仍然是模块路径的一部分。
这将使未来的使用更加容易,但可能会对现有用户造成不便。
概述
以下是 rust-3d 的一些功能概述。片段/名称可能不是最新的,请检查 tests/ 目录中的示例以获取编译信息。
适当的错误处理
在不完全安全的情况下,不使用 .unwrap()。
强类型 / 智能类型
对于可能容易混淆的所有内容,都存在强类型。
这样,例如,面 ID 就不会与顶点 ID 混淆。
fn edges_of_face(&self, faceid: FId) -> Result<(EId, EId, EId)>;
还有限制它们可以持有值的智能类型。
这种方法使得距离永远不会是 < 0.0,大小可以被强制设置为 > 0.0 等。
Positive
NonNegative
通用代码库
我尽量使所有算法和类型尽可能通用。
- 即使是像
Is2D这样的基本类型也被分成几个版本:IsEditable2D、IsBuildable2D IsMesh定义了任何顶点类型和任何数量的顶点/面的情况- 对于集合(无需使用
Vec)有特性和转换器
这使得在使用自己的类型时,可以尽可能少地进行实现工作。
组合器/转换器
- 任何
IsFilter<T>都可以通过FilterAND、FilterOR、FilterAny、FilterNegate等进行组合 - 任何
IsFilter<T>都可以转换成适用于任何T集合(IsFilterRandomAccessible) IsDirectionField2D可能会被转换成IsFilter<Is2D>,然后可以转换成IsFilterRandomAccessible<Is2D>
I/O
任何 IO 方法都是在特质上定义的,所以如果你实现这些,你将免费获得对不同文件格式的读写。
文档
您可以在这里找到文档。
示例
请查看 tests/ 中的测试。这些将是最新版本且可编译的。
我可能在将来添加详细教程/示例/演示项目。
链接
贡献
如果您觉得缺少某些功能或发现了错误,请随意在GitHub上创建一个issue。请避免直接贡献,因为我可能正在开发破坏性更改或您想要实现的功能。在贡献之前,请先创建一个issue或给我发送电子邮件。
许可证
MIT (见 LICENSE)
依赖关系
~1.5MB
~31K SLoC