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 数据结构

Download history 119/week @ 2024-03-13 118/week @ 2024-03-20 82/week @ 2024-03-27 90/week @ 2024-04-03 149/week @ 2024-04-10 111/week @ 2024-04-17 86/week @ 2024-04-24 81/week @ 2024-05-01 86/week @ 2024-05-08 73/week @ 2024-05-15 83/week @ 2024-05-22 68/week @ 2024-05-29 63/week @ 2024-06-05 67/week @ 2024-06-12 67/week @ 2024-06-19 56/week @ 2024-06-26

每月 261 次下载
2 个软件包中使用 (通过 dms-coordinates)

MIT 协议

665KB
14K SLoC

rust-3d

用 Rust 编写的 3D/2D 库。提供用于 2D 和 3D 空间的实用容器、结构和算法。旨在作为数值算法、查看器、游戏引擎等的基础。

迁移 0.29.0 -> 0.30.0

请注意,模块结构已更改。现在只有 ioimpls 的子模块。
此外,还删除了 prelude
如果您之前通过 rust_3d::prelude::*; 使用预定义,现在应该切换到 rust_3d::*;
如果您使用的是显式路径,例如 rust_3d::filters::combinators::FilterAll,现在应使用 rust_3d::FilterAll
请注意,ioimpls 仍然是模块路径的一部分。
这将使未来的使用更加容易,但可能会对现有用户造成不便。

概述

以下是 rust-3d 的一些功能概述。片段/名称可能不是最新的,请检查 tests/ 目录中的示例以获取编译信息。

适当的错误处理

在不完全安全的情况下,不使用 .unwrap()

强类型 / 智能类型

对于可能容易混淆的所有内容,都存在强类型。
这样,例如,面 ID 就不会与顶点 ID 混淆。

fn edges_of_face(&self, faceid: FId) -> Result<(EId, EId, EId)>;

还有限制它们可以持有值的智能类型。
这种方法使得距离永远不会是 < 0.0,大小可以被强制设置为 > 0.0 等。

Positive  
NonNegative

通用代码库

我尽量使所有算法和类型尽可能通用。

  • 即使是像 Is2D 这样的基本类型也被分成几个版本:IsEditable2DIsBuildable2D
  • IsMesh 定义了任何顶点类型和任何数量的顶点/面的情况
  • 对于集合(无需使用 Vec)有特性和转换器

这使得在使用自己的类型时,可以尽可能少地进行实现工作。

组合器/转换器

  • 任何 IsFilter<T> 都可以通过 FilterANDFilterORFilterAnyFilterNegate 等进行组合
  • 任何 IsFilter<T> 都可以转换成适用于任何 T 集合(IsFilterRandomAccessible
  • IsDirectionField2D 可能会被转换成 IsFilter<Is2D>,然后可以转换成 IsFilterRandomAccessible<Is2D>

I/O

任何 IO 方法都是在特质上定义的,所以如果你实现这些,你将免费获得对不同文件格式的读写。

文档

您可以在这里找到文档。

示例

请查看 tests/ 中的测试。这些将是最新版本且可编译的。
我可能在将来添加详细教程/示例/演示项目。

crates.io
github.com
docs.rs

贡献

如果您觉得缺少某些功能或发现了错误,请随意在GitHub上创建一个issue。请避免直接贡献,因为我可能正在开发破坏性更改或您想要实现的功能。在贡献之前,请先创建一个issue或给我发送电子邮件。

许可证

MIT (见 LICENSE)

依赖关系

~1.5MB
~31K SLoC