105个版本 (10个破坏性版本)
| 新版本 0.18.0 | 2024年8月16日 |
|---|---|
| 0.17.0 | 2024年7月8日 |
| 0.15.0-alpha.5 | 2024年3月29日 |
| 0.12.0-alpha.2 | 2023年12月26日 |
| 0.8.0 | 2023年7月27日 |
#105 in 图像
每月48,393次下载
用于 45 个crate(直接使用33个)
2.5MB
54K SLoC
re_types
是 rerun crate系列的一部分。
标准的Rerun数据类型、组件类型和架构类型。
该crate包含语言无关的定义(flatbuffers IDL)以及生成的代码。
使用 just codegen 生成的代码。
lib.rs:
标准的Rerun数据类型、组件类型和架构类型。
该crate包含Rerun类型(flatbuffers)的IDL定义以及使用 re_types_builder 生成的代码。
所有内置的架构、组件、数据类型和空间视图定义都可以在其各自的顶层模块中找到。
贡献
组织
definitions/包含所有Rerun类型(数据、组件、架构)的IDL定义。src/包含为Rust生成的代码。rerun_py/rerun/rerun2/(此工作区的根目录)包含为Python生成的代码。
尽管这个包中的大部分代码都是自动生成的,但也有一些手动扩展散布在其中:寻找以_ext.rs、_ext.py或_ext.cpp结尾的文件(也参见本文件的“扩展”部分)。
构建缓存
更新代码生成器本身的源代码(例如re_types_builder)或任何.fbs文件,应该在下次构建re_types时重新触发代码生成过程。手动扩展文件将保持不变。
缓存由存储在store_hash.txt中的版本哈希来控制。如果您怀疑缓存机制有问题,并且当应该考虑您的更改时,您的更改没有被考虑在内,请尝试删除source_hash.txt。如果这解决了问题,那么您已经找到了一个bug。
如何:添加新的数据类型/组件/架构
在适当的位置创建适当的.fbs文件,并确保以某种方式(最可能是间接方式)被archetypes.fbs包含,这是代码生成的入口点。通常,最简单的方法是将您的新类型添加到集中式的清单之一中,例如,对于新的组件,将其包含在components.fbs中。
您的文件应该会被代码生成器自动获取。一旦生成您新组件的代码,实现您需要的任何扩展,并确保测试您添加的任何自定义构造函数。
如何:删除现有的数据类型/组件/架构
只需删除相关的类型,并重新构建re_types以触发代码生成即可。
请注意:如果您删除整个定义文件,重新运行代码生成器不会删除相关的生成文件,您需要自己删除。
扩展
Rust
可以通过添加具有_ext.rs前缀的兄弟文件来手动扩展生成的Rust代码。例如,要扩展vec2d.rs,创建一个vec2d_ext.rs。
触发代码生成(例如,通过删除source_hash.txt)以自动生成正确的mod子句。
开始的最简单方法是查看任何现有的示例。
Python
可以通过添加具有_ext.py前缀的兄弟文件来手动扩展生成的Python代码。例如,要扩展vec2d.py,创建一个vec2d_ext.py。
此兄弟文件需要实现一个扩展类,该类与自动生成的类混合在一起。开始的最简单方法是查看任何现有的示例。
C++
可以通过添加具有_ext.cpp后缀的兄弟文件来手动扩展生成的C++代码。例如,要扩展vec2d.cpp,创建一个vec2d_ext.cpp。
此兄弟文件作为rerun_cpp包的一部分编译。
在扩展中使用的任何包含指令都会自动添加到生成的头文件中,除了生成的头文件本身。
为了扩展头文件中生成的类型声明,您可以通过以<CODEGEN_COPY_TO_HEADER>开头并以</CODEGEN_COPY_TO_HEADER>结尾的单个代码块来指定您想要注入到类型声明中的代码块。请注意,确保cpp文件是有效的C++代码是你的责任 - 代码生成器和构建将不会为您调整扩展文件!
语言特定的文档
您可以在任何文档注释行前加上前缀 \{tag},其中 {tag} 是以下之一:py、cpp、rs,并且这部分文档将仅存在于为该特定语言生成的文件中。
示例
您可以将示例添加到 docs/snippets/all,然后使用 \example 标签将其源代码包含在文档中。该示例也将包含在为该类型生成的文档的示例列表中。
\example 标签支持以下参数
title:示例的简短描述,将在源代码之前显示image:图片的链接,对使用scripts/upload_image.py上传到static.rerun.io的图片进行特殊处理!api:如果存在,示例将不会包含在生成的代码中嵌入的注释中
\example example_file_name title="Some title" image="https://link.to/any_image.png"
如果 URL 不是以 https://static.rerun.io/ 开头,则它将作为 src 属性在 img HTML 标签中使用,不进行任何更改
<img src="https://link.to/any_image.png">
否则,URL 被视为 rerun 截图,它期望以下链接格式
https://static.rerun.io/{name}/{hash}/{max_width}.{ext}
这些参数将用于生成图像堆栈
name:上传截图的原始文件名,不包括扩展名hash:原始截图的内容哈希max_width:此截图可用的最大宽度- 如果该值不是以
w结尾的有效整数(例如1200w),则图像堆栈将仅包括full大小 - 如果该值 是 有效整数,则将省略大于该值的尺寸
- 如果该值不是以
ext:图像的文件扩展名(png、jpeg等)
给定一个类似 https://static.rerun.io/my_screenshot/9066060e59ee9d2d7d98b214b8db0b8f2e8ab4b8/1024w.png 的 URL,文档代码生成器将生成以下图像堆栈
<picture>
<source media="(max-width: 480px)" srcset="https://static.rerun.io/my_screenshot/9066060e59ee9d2d7d98b214b8db0b8f2e8ab4b8/480w.png">
<source media="(max-width: 768px)" srcset="https://static.rerun.io/my_screenshot/9066060e59ee9d2d7d98b214b8db0b8f2e8ab4b8/768w.png">
<source media="(max-width: 1024px)" srcset="https://static.rerun.io/my_screenshot/9066060e59ee9d2d7d98b214b8db0b8f2e8ab4b8/1024w.png">
<img src="https://static.rerun.io/my_screenshot/9066060e59ee9d2d7d98b214b8db0b8f2e8ab4b8/full.png" alt="screenshot of {title} example">
</picture>
堆栈中省略了 1200px 尺寸。
如何与 scripts/upload_image.py 一起使用
运行 scripts/upload_image.py {file} 将生成图像堆栈。您需要获取该堆栈中可用的 最大宽度,并将其用作 \example 中的 image= 的值。
例如,如果脚本生成的图像堆栈是
<picture>
<source media="(max-width: 480px)" srcset="https://static.rerun.io/my_screenshot/9066060e59ee9d2d7d98b214b8db0b8f2e8ab4b8/480w.png">
<source media="(max-width: 768px)" srcset="https://static.rerun.io/my_screenshot/9066060e59ee9d2d7d98b214b8db0b8f2e8ab4b8/768w.png">
<source media="(max-width: 1024px)" srcset="https://static.rerun.io/my_screenshot/9066060e59ee9d2d7d98b214b8db0b8f2e8ab4b8/1024w.png">
<img src="https://static.rerun.io/my_screenshot/9066060e59ee9d2d7d98b214b8db0b8f2e8ab4b8/full.png">
</picture>
那么您应该使用的 URL 是 https://static.rerun.io/my_screenshot/9066060e59ee9d2d7d98b214b8db0b8f2e8ab4b8/1024w.png。
它之所以这样工作,是因为upload_image.py不会放大截图,它只会缩小。我们需要知道我们可以使用的最大宽度是多少,因为我们不能总是提供所有宽度。如果当前使用的max-width源加载失败,它将显示空白图像图标。如果在<picture>中某个特定的max-width源加载失败,则无法提供回退。如果某个特定的max-width源加载失败,浏览器不会自动尝试加载其他源!
功能标志
依赖关系
~17-30MB
~472K SLoC