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