#rerun #component #archetypes #image #datatype #static #png

re_types

内置Rerun数据类型、组件类型和架构类型

105个版本 (10个破坏性版本)

新版本 0.18.0 2024年8月16日
0.17.0 2024年7月8日
0.15.0-alpha.52024年3月29日
0.12.0-alpha.22023年12月26日
0.8.0 2023年7月27日

#105 in 图像

Download history 4324/week @ 2024-05-03 7512/week @ 2024-05-10 7737/week @ 2024-05-17 6364/week @ 2024-05-24 6112/week @ 2024-05-31 6035/week @ 2024-06-07 6857/week @ 2024-06-14 8744/week @ 2024-06-21 8865/week @ 2024-06-28 11433/week @ 2024-07-05 9982/week @ 2024-07-12 12564/week @ 2024-07-19 11014/week @ 2024-07-26 12862/week @ 2024-08-02 12151/week @ 2024-08-09 10317/week @ 2024-08-16

每月48,393次下载
用于 45 个crate(直接使用33个)

MIT/Apache

2.5MB
54K SLoC

re_types

rerun crate系列的一部分。

Latest version Documentation MIT Apache

标准的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} 是以下之一:pycpprs,并且这部分文档将仅存在于为该特定语言生成的文件中。

示例

您可以将示例添加到 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:图像的文件扩展名(pngjpeg 等)

给定一个类似 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