From 50d71d1378c53e1d79aec6b793c53448e8b11a27 Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Tue, 16 Apr 2024 15:55:21 +0200 Subject: [PATCH] Improve type index pages, codegen now knows about doc categories (#5978) ### What * Fixes #5533 image ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested the web demo (if applicable): * Using examples from latest `main` build: [rerun.io/viewer](https://rerun.io/viewer/pr/5978?manifest_url=https://app.rerun.io/version/main/examples_manifest.json) * Using full set of examples from `nightly` build: [rerun.io/viewer](https://rerun.io/viewer/pr/5978?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json) * [x] The PR title and labels are set such as to maximize their usefulness for the next release's CHANGELOG * [x] If applicable, add a new check to the [release checklist](https://github.com/rerun-io/rerun/blob/main/tests/python/release_checklist)! - [PR Build Summary](https://build.rerun.io/pr/5978) - [Recent benchmark results](https://build.rerun.io/graphs/crates.html) - [Wasm size tracking](https://build.rerun.io/graphs/sizes.html) To run all checks from `main`, comment on the PR with `@rerun-bot full-check`. --- .../re_types/definitions/docs/attributes.fbs | 3 + .../definitions/rerun/archetypes/arrows2d.fbs | 3 +- .../definitions/rerun/archetypes/arrows3d.fbs | 3 +- .../definitions/rerun/archetypes/asset3d.fbs | 3 +- .../rerun/archetypes/bar_chart.fbs | 3 +- .../definitions/rerun/archetypes/boxes2d.fbs | 3 +- .../definitions/rerun/archetypes/boxes3d.fbs | 3 +- .../rerun/archetypes/depth_image.fbs | 3 +- .../definitions/rerun/archetypes/image.fbs | 3 +- .../rerun/archetypes/line_strips2d.fbs | 3 +- .../rerun/archetypes/line_strips3d.fbs | 3 +- .../definitions/rerun/archetypes/mesh3d.fbs | 3 +- .../definitions/rerun/archetypes/pinhole.fbs | 3 +- .../definitions/rerun/archetypes/points2d.fbs | 3 +- .../definitions/rerun/archetypes/points3d.fbs | 3 +- .../definitions/rerun/archetypes/scalar.fbs | 3 +- .../rerun/archetypes/segmentation_image.fbs | 3 +- .../rerun/archetypes/series_line.fbs | 4 +- .../rerun/archetypes/series_point.fbs | 4 +- .../definitions/rerun/archetypes/tensor.fbs | 3 +- .../rerun/archetypes/text_document.fbs | 3 +- .../definitions/rerun/archetypes/text_log.fbs | 3 +- .../rerun/archetypes/transform3d.fbs | 3 +- .../rerun/archetypes/view_coordinates.fbs | 3 +- .../re_types_builder/src/codegen/docs/mod.rs | 84 +++++++++++------ crates/re_types_builder/src/docs.rs | 7 ++ crates/re_types_builder/src/lib.rs | 1 + crates/re_types_builder/src/objects.rs | 4 + docs/content/reference/types.md | 60 ++---------- docs/content/reference/types/archetypes.md | 78 ++++++++++------ docs/content/reference/types/components.md | 92 ++++++++++--------- docs/content/reference/types/datatypes.md | 78 ++++++++-------- 32 files changed, 264 insertions(+), 214 deletions(-) diff --git a/crates/re_types/definitions/docs/attributes.fbs b/crates/re_types/definitions/docs/attributes.fbs index 2cc3a775c372..60dd49b482ee 100644 --- a/crates/re_types/definitions/docs/attributes.fbs +++ b/crates/re_types/definitions/docs/attributes.fbs @@ -6,3 +6,6 @@ namespace docs.attributes; /// Speculative links contain a `?speculative-link` query param. Any such links are ignored by linkinator, /// and we check for their absence as the first step in our release process. attribute "attr.docs.unreleased"; + +/// Apply to an archetype to set its category used in the docs. +attribute "attr.docs.category"; diff --git a/crates/re_types/definitions/rerun/archetypes/arrows2d.fbs b/crates/re_types/definitions/rerun/archetypes/arrows2d.fbs index 0b904c0cec74..995973929f2d 100644 --- a/crates/re_types/definitions/rerun/archetypes/arrows2d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/arrows2d.fbs @@ -15,7 +15,8 @@ namespace rerun.archetypes; table Arrows2D ( "attr.rust.derive": "PartialEq", "attr.rust.new_pub_crate", - "attr.cpp.no_field_ctors" + "attr.cpp.no_field_ctors", + "attr.docs.category": "Spatial 2D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/arrows3d.fbs b/crates/re_types/definitions/rerun/archetypes/arrows3d.fbs index 47dc8f6fdbd7..2ddc8eaa9db7 100644 --- a/crates/re_types/definitions/rerun/archetypes/arrows3d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/arrows3d.fbs @@ -15,7 +15,8 @@ namespace rerun.archetypes; table Arrows3D ( "attr.rust.derive": "PartialEq", "attr.rust.new_pub_crate", - "attr.cpp.no_field_ctors" + "attr.cpp.no_field_ctors", + "attr.docs.category": "Spatial 3D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/asset3d.fbs b/crates/re_types/definitions/rerun/archetypes/asset3d.fbs index 6fd1d6f339a4..f0be08ea0880 100644 --- a/crates/re_types/definitions/rerun/archetypes/asset3d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/asset3d.fbs @@ -15,7 +15,8 @@ namespace rerun.archetypes; /// \example asset3d_simple title="Simple 3D asset" image="https://static.rerun.io/asset3d_simple/af238578188d3fd0de3e330212120e2842a8ddb2/1200w.png" /// \example asset3d_out_of_tree !api title="3D asset with out-of-tree transform" table Asset3D ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Spatial 3D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/bar_chart.fbs b/crates/re_types/definitions/rerun/archetypes/bar_chart.fbs index bcb3c6d093d7..1af9584ccd12 100644 --- a/crates/re_types/definitions/rerun/archetypes/bar_chart.fbs +++ b/crates/re_types/definitions/rerun/archetypes/bar_chart.fbs @@ -12,7 +12,8 @@ namespace rerun.archetypes; /// /// \example bar_chart title="Simple bar chart" image="https://static.rerun.io/barchart_simple/cf6014b18265edfcaa562c06526c0716b296b193/1200w.png" table BarChart ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Plotting" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/boxes2d.fbs b/crates/re_types/definitions/rerun/archetypes/boxes2d.fbs index 171f4b2128d3..a9b2bec06c60 100644 --- a/crates/re_types/definitions/rerun/archetypes/boxes2d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/boxes2d.fbs @@ -15,7 +15,8 @@ namespace rerun.archetypes; table Boxes2D ( "attr.rust.derive": "PartialEq", "attr.rust.new_pub_crate", - "attr.cpp.no_field_ctors" + "attr.cpp.no_field_ctors", + "attr.docs.category": "Spatial 2D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/boxes3d.fbs b/crates/re_types/definitions/rerun/archetypes/boxes3d.fbs index 709bbf7cef69..b23fda975c13 100644 --- a/crates/re_types/definitions/rerun/archetypes/boxes3d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/boxes3d.fbs @@ -16,7 +16,8 @@ namespace rerun.archetypes; table Boxes3D ( "attr.rust.derive": "PartialEq", "attr.rust.new_pub_crate", - "attr.cpp.no_field_ctors" + "attr.cpp.no_field_ctors", + "attr.docs.category": "Spatial 3D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/depth_image.fbs b/crates/re_types/definitions/rerun/archetypes/depth_image.fbs index dc027148590a..5466ca0bd31c 100644 --- a/crates/re_types/definitions/rerun/archetypes/depth_image.fbs +++ b/crates/re_types/definitions/rerun/archetypes/depth_image.fbs @@ -19,7 +19,8 @@ namespace rerun.archetypes; /// \example depth_image_3d title="Depth to 3D example" image="https://static.rerun.io/depth_image_3d/f78674bdae0eb25786c6173307693c5338f38b87/1200w.png" table DepthImage ( "attr.rust.derive": "PartialEq", - "attr.cpp.no_field_ctors" + "attr.cpp.no_field_ctors", + "attr.docs.category": "Image & tensor" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/image.fbs b/crates/re_types/definitions/rerun/archetypes/image.fbs index 3d9ab91b2126..2b99ac3b5f56 100644 --- a/crates/re_types/definitions/rerun/archetypes/image.fbs +++ b/crates/re_types/definitions/rerun/archetypes/image.fbs @@ -30,7 +30,8 @@ namespace rerun.archetypes; /// \example image_simple image="https://static.rerun.io/image_simple/06ba7f8582acc1ffb42a7fd0006fad7816f3e4e4/1200w.png" table Image ( "attr.rust.derive": "PartialEq", - "attr.cpp.no_field_ctors" + "attr.cpp.no_field_ctors", + "attr.docs.category": "Image & tensor" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/line_strips2d.fbs b/crates/re_types/definitions/rerun/archetypes/line_strips2d.fbs index b04bd9775bae..69b5cec2bd66 100644 --- a/crates/re_types/definitions/rerun/archetypes/line_strips2d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/line_strips2d.fbs @@ -13,7 +13,8 @@ namespace rerun.archetypes; /// \example line_segments2d_simple !api image="https://static.rerun.io/line_segment2d_simple/53df596662dd9ffaaea5d09d091ef95220346c83/1200w.png" /// \example line_strip2d_batch image="https://static.rerun.io/line_strip2d_batch/d8aae7ca3d6c3b0e3b636de60b8067fa2f0b6db9/1200w.png" table LineStrips2D ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Spatial 2D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/line_strips3d.fbs b/crates/re_types/definitions/rerun/archetypes/line_strips3d.fbs index 3b14a76e2e0e..9e242a2a1934 100644 --- a/crates/re_types/definitions/rerun/archetypes/line_strips3d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/line_strips3d.fbs @@ -13,7 +13,8 @@ namespace rerun.archetypes; /// \example line_segments3d_simple !api title="Many individual segments" image="https://static.rerun.io/line_segment3d_simple/aa800b2a6e6a7b8e32e762b42861bae36f5014bb/1200w.png" /// \example line_strip3d_batch title="Many strips" image="https://static.rerun.io/line_strip3d_batch/102e5ec5271475657fbc76b469267e4ec8e84337/1200w.png" table LineStrips3D ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Spatial 3D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/mesh3d.fbs b/crates/re_types/definitions/rerun/archetypes/mesh3d.fbs index febd12e5ecb5..83b692f8e109 100644 --- a/crates/re_types/definitions/rerun/archetypes/mesh3d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/mesh3d.fbs @@ -15,7 +15,8 @@ namespace rerun.archetypes; /// \example mesh3d_indexed title="Simple indexed 3D mesh" image="https://static.rerun.io/mesh3d_simple/e1e5fd97265daf0d0bc7b782d862f19086fd6975/1200w.png" /// \example mesh3d_partial_updates !api title="3D mesh with partial updates" image="https://static.rerun.io/mesh3d_partial_updates/a11e4accb0257dcd9531867b7e1d6fd5e3bee5c3/1200w.png" table Mesh3D ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Spatial 2D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/pinhole.fbs b/crates/re_types/definitions/rerun/archetypes/pinhole.fbs index d69b1a475b75..2519e0b1fa87 100644 --- a/crates/re_types/definitions/rerun/archetypes/pinhole.fbs +++ b/crates/re_types/definitions/rerun/archetypes/pinhole.fbs @@ -11,7 +11,8 @@ namespace rerun.archetypes; /// \example pinhole_simple title="Simple pinhole camera" image="https://static.rerun.io/pinhole_simple/9af9441a94bcd9fd54e1fea44fb0c59ff381a7f2/1200w.png" /// \example pinhole_perspective title="Perspective pinhole camera" image="https://static.rerun.io/pinhole_perspective/d0bd02a0cf354a5c8eafb79a84fe8674335cab98/1200w.png" table Pinhole ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Spatial 3D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/points2d.fbs b/crates/re_types/definitions/rerun/archetypes/points2d.fbs index fdc48f20edf9..c88441d02a2a 100644 --- a/crates/re_types/definitions/rerun/archetypes/points2d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/points2d.fbs @@ -14,7 +14,8 @@ namespace rerun.archetypes; /// \example point2d_simple !api title="Simple 2D points" image="https://static.rerun.io/point2d_simple/a8e801958bce5aa4e080659c033630f86ce95f71/1200w.png" /// \example point2d_random title="Randomly distributed 2D points with varying color and radius" image="https://static.rerun.io/point2d_random/8e8ac75373677bd72bd3f56a15e44fcab309a168/1200w.png" table Points2D ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Spatial 2D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/points3d.fbs b/crates/re_types/definitions/rerun/archetypes/points3d.fbs index f569f0caabec..8afb33729265 100644 --- a/crates/re_types/definitions/rerun/archetypes/points3d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/points3d.fbs @@ -12,7 +12,8 @@ namespace rerun.archetypes; /// \example point3d_simple !api title="Simple 3D points" image="https://static.rerun.io/point3d_simple/32fb3e9b65bea8bd7ffff95ad839f2f8a157a933/1200w.png" /// \example point3d_random title="Randomly distributed 3D points with varying color and radius" image="https://static.rerun.io/point3d_random/7e94e1806d2c381943748abbb3bedb68d564de24/1200w.png" table Points3D ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Spatial 3D" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/scalar.fbs b/crates/re_types/definitions/rerun/archetypes/scalar.fbs index 176a3c7fd661..70938ef2183f 100644 --- a/crates/re_types/definitions/rerun/archetypes/scalar.fbs +++ b/crates/re_types/definitions/rerun/archetypes/scalar.fbs @@ -24,7 +24,8 @@ namespace rerun.archetypes; /// \example scalar_simple title="Simple line plot" image="https://static.rerun.io/scalar_simple/8bcc92f56268739f8cd24d60d1fe72a655f62a46/1200w.png" /// \example scalar_multiple_plots !api title="Multiple time series plots" image="https://static.rerun.io/scalar_multiple/15845c2a348f875248fbd694e03eabd922741c4c/1200w.png" table Scalar ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Plotting" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/segmentation_image.fbs b/crates/re_types/definitions/rerun/archetypes/segmentation_image.fbs index 6338b4310324..f9e4f5b06f62 100644 --- a/crates/re_types/definitions/rerun/archetypes/segmentation_image.fbs +++ b/crates/re_types/definitions/rerun/archetypes/segmentation_image.fbs @@ -27,7 +27,8 @@ namespace rerun.archetypes; /// \example segmentation_image_simple title="Simple segmentation image" image="https://static.rerun.io/segmentation_image_simple/eb49e0b8cb870c75a69e2a47a2d202e5353115f6/1200w.png" table SegmentationImage ( "attr.rust.derive": "PartialEq", - "attr.cpp.no_field_ctors" + "attr.cpp.no_field_ctors", + "attr.docs.category": "Image & tensor" ) { // --- Required --- diff --git a/crates/re_types/definitions/rerun/archetypes/series_line.fbs b/crates/re_types/definitions/rerun/archetypes/series_line.fbs index 5524d21566e8..2cf098a4ac36 100644 --- a/crates/re_types/definitions/rerun/archetypes/series_line.fbs +++ b/crates/re_types/definitions/rerun/archetypes/series_line.fbs @@ -18,7 +18,9 @@ namespace rerun.archetypes; /// \cpp See `rerun::archetypes::Scalar` /// /// \example series_line_style title="Line series" image="https://static.rerun.io/series_line_style/d2616d98b1e46bdb85849b8669154fdf058e3453/1200w.png" -table SeriesLine { +table SeriesLine ( + "attr.docs.category": "Plotting" +) { // --- Required --- // --- Optional --- diff --git a/crates/re_types/definitions/rerun/archetypes/series_point.fbs b/crates/re_types/definitions/rerun/archetypes/series_point.fbs index 60d544ae1953..9ffc07e8082b 100644 --- a/crates/re_types/definitions/rerun/archetypes/series_point.fbs +++ b/crates/re_types/definitions/rerun/archetypes/series_point.fbs @@ -18,7 +18,9 @@ namespace rerun.archetypes; /// \cpp See `rerun::archetypes::Scalar` /// /// \example series_point_style title="Point series" image="https://static.rerun.io/series_point_style/82207a705da6c086b28ce161db1db9e8b12258b7/1200w.png" -table SeriesPoint { +table SeriesPoint ( + "attr.docs.category": "Plotting" +) { // --- Required --- // --- Optional --- diff --git a/crates/re_types/definitions/rerun/archetypes/tensor.fbs b/crates/re_types/definitions/rerun/archetypes/tensor.fbs index c645fdea5a9f..b04ed9a018bc 100644 --- a/crates/re_types/definitions/rerun/archetypes/tensor.fbs +++ b/crates/re_types/definitions/rerun/archetypes/tensor.fbs @@ -14,7 +14,8 @@ namespace rerun.archetypes; /// /// \example tensor_simple title="Simple tensor" image="https://static.rerun.io/tensor_simple/baacb07712f7b706e3c80e696f70616c6c20b367/1200w.png" table Tensor ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Image & tensor" ) { /// The tensor data data: rerun.components.TensorData ("attr.rerun.component_required", order: 1000); diff --git a/crates/re_types/definitions/rerun/archetypes/text_document.fbs b/crates/re_types/definitions/rerun/archetypes/text_document.fbs index cb4e6e0ff7f6..5153d5ec5b8e 100644 --- a/crates/re_types/definitions/rerun/archetypes/text_document.fbs +++ b/crates/re_types/definitions/rerun/archetypes/text_document.fbs @@ -13,7 +13,8 @@ namespace rerun.archetypes; /// /// \example text_document title="Markdown text document" image="https://static.rerun.io/textdocument/babda19558ee32ed8d730495b595aee7a5e2c174/1200w.png" table TextDocument ( - "attr.rust.derive": "PartialEq, Eq" + "attr.rust.derive": "PartialEq, Eq", + "attr.docs.category": "Text" ) { /// Contents of the text document. text: rerun.components.Text ("attr.rerun.component_required", order: 100); diff --git a/crates/re_types/definitions/rerun/archetypes/text_log.fbs b/crates/re_types/definitions/rerun/archetypes/text_log.fbs index 3d9656e7894f..144cd956668d 100644 --- a/crates/re_types/definitions/rerun/archetypes/text_log.fbs +++ b/crates/re_types/definitions/rerun/archetypes/text_log.fbs @@ -11,7 +11,8 @@ namespace rerun.archetypes; /// /// \example text_log_integration text="Logging text directly or via a logger" image="https://static.rerun.io/text_log_integration/9737d0c986325802a9885499d6fcc773b1736488/1200w.png" table TextLog ( - "attr.rust.derive": "PartialEq, Eq" + "attr.rust.derive": "PartialEq, Eq", + "attr.docs.category": "Text" ) { /// The body of the message. text: rerun.components.Text ("attr.rerun.component_required", order: 100); diff --git a/crates/re_types/definitions/rerun/archetypes/transform3d.fbs b/crates/re_types/definitions/rerun/archetypes/transform3d.fbs index b4e8f1abf009..445430668c0b 100644 --- a/crates/re_types/definitions/rerun/archetypes/transform3d.fbs +++ b/crates/re_types/definitions/rerun/archetypes/transform3d.fbs @@ -10,7 +10,8 @@ namespace rerun.archetypes; /// /// \example transform3d_simple title="Variety of 3D transforms" image="https://static.rerun.io/transform3d_simple/141368b07360ce3fcb1553079258ae3f42bdb9ac/1200w.png" table Transform3D ( - "attr.rust.derive": "PartialEq" + "attr.rust.derive": "PartialEq", + "attr.docs.category": "Spatial 3D" ) { /// The transform transform: rerun.components.Transform3D ("attr.rerun.component_required", order: 1000); diff --git a/crates/re_types/definitions/rerun/archetypes/view_coordinates.fbs b/crates/re_types/definitions/rerun/archetypes/view_coordinates.fbs index 41279c44c28d..21f876bec85d 100644 --- a/crates/re_types/definitions/rerun/archetypes/view_coordinates.fbs +++ b/crates/re_types/definitions/rerun/archetypes/view_coordinates.fbs @@ -18,7 +18,8 @@ namespace rerun.archetypes; /// \example view_coordinates_simple title="View coordinates for adjusting the eye camera" image="https://static.rerun.io/viewcoordinates/0833f0dc8616a676b7b2c566f2a6f613363680c5/1200w.png" table ViewCoordinates ( "attr.rust.derive": "Copy, PartialEq, Eq, bytemuck::Pod, bytemuck::Zeroable", - "attr.rust.repr": "transparent" + "attr.rust.repr": "transparent", + "attr.docs.category": "Spatial 3D" ) { xyz: rerun.components.ViewCoordinates ("attr.rerun.component_required", required, order: 1000); } diff --git a/crates/re_types_builder/src/codegen/docs/mod.rs b/crates/re_types_builder/src/codegen/docs/mod.rs index 8a9c77c2f8a4..b47f1d99430e 100644 --- a/crates/re_types_builder/src/codegen/docs/mod.rs +++ b/crates/re_types_builder/src/codegen/docs/mod.rs @@ -1,10 +1,12 @@ use std::fmt::Write; use camino::Utf8PathBuf; +use itertools::Itertools; use crate::{ - codegen::common::ExampleInfo, objects::FieldKind, CodeGenerator, GeneratedFiles, Object, - ObjectKind, Objects, Reporter, Type, + codegen::{autogen_warning, common::ExampleInfo}, + objects::FieldKind, + CodeGenerator, GeneratedFiles, Object, ObjectKind, Objects, Reporter, Type, }; type ObjectMap = std::collections::BTreeMap; @@ -69,19 +71,25 @@ impl CodeGenerator for DocsCodeGenerator { ( ObjectKind::Archetype, 1, - "Archetypes are bundles of components", + "Archetypes are bundles of components. This page lists all built-in components.", &archetypes, ), ( ObjectKind::Component, 2, - "Archetypes are bundles of components", + r"Components are the fundamental unit of logging in Rerun. This page lists all built-in components. + +An entity can only ever contain a single array of any given component type. +If you log the same component several times on an entity, the last value (or array of values) will overwrite the previous. + +For more information on the relationship between **archetypes** and **components**, check out the concept page +on [Entities and Components](../../concepts/entity-component.md).", &components, ), ( ObjectKind::Datatype, 3, - "Data types are the lowest layer of the data model hierarchy", + r"Data types are the lowest layer of the data model hierarchy. They are re-usable types used by the components.", &datatypes, ), ] { @@ -101,38 +109,58 @@ fn index_page(kind: ObjectKind, order: u64, prelude: &str, objects: &[&Object]) write_frontmatter(&mut page, kind.plural_name(), Some(order)); putln!(page); + // Can't put the autogen warning before the frontmatter, stuff breaks down then. + putln!(page, "", autogen_warning!()); + putln!(page); putln!(page, "{prelude}"); putln!(page); - if !objects.is_empty() { - // First all non deprecated ones: - putln!(page, "## Available {}", kind.plural_name().to_lowercase()); + + let mut any_category = false; + for (category, objects) in &objects + .iter() + .sorted_by(|a, b| { + // Put other category last. + if a.doc_category().is_none() { + std::cmp::Ordering::Greater + } else if b.doc_category().is_none() { + std::cmp::Ordering::Less + } else { + a.doc_category().cmp(&b.doc_category()) + } + }) + .group_by(|o| o.doc_category()) + { + if category.is_some() { + any_category = true; + } + if let Some(category) = category.or_else(|| { + if any_category { + Some("Other".to_owned()) + } else { + None + } + }) { + putln!(page, "## {category}"); + } putln!(page); - for object in objects.iter().filter(|o| o.deprecation_notice().is_none()) { + + for object in objects.sorted_by_key(|object| &object.name) { + let deprecation_note = if object.deprecation_notice().is_some() { + "⚠️ _deprecated_ " + } else { + "" + }; + putln!( page, - "* [`{}`]({}/{}.md)", + "* {deprecation_note}[`{}`]({}/{}.md): {}", object.name, object.kind.plural_snake_case(), - object.snake_case_name() + object.snake_case_name(), + object.docs.first_line().unwrap_or_default(), ); } - - // Then all deprecated ones: - if objects.iter().any(|o| o.deprecation_notice().is_some()) { - putln!(page); - putln!(page); - putln!(page, "## Deprecated {}", kind.plural_name().to_lowercase()); - putln!(page); - for object in objects.iter().filter(|o| o.deprecation_notice().is_some()) { - putln!( - page, - "* [`{}`]({}/{}.md)", - object.name, - object.kind.plural_snake_case(), - object.snake_case_name() - ); - } - } + putln!(page); } page diff --git a/crates/re_types_builder/src/docs.rs b/crates/re_types_builder/src/docs.rs index 3bfe9b2cf339..489a64cd9d8d 100644 --- a/crates/re_types_builder/src/docs.rs +++ b/crates/re_types_builder/src/docs.rs @@ -70,6 +70,13 @@ impl Docs { .collect() } + /// Get the first line of the documentation untagged. + pub fn first_line(&self) -> Option<&str> { + self.lines_with_tag_matching(|t| t.is_empty()) + .first() + .copied() + } + /// Get all doc lines that are untagged, or match the given tag. /// /// For instance, pass `"py"` to get all lines that are untagged or starta with `"\py"`. diff --git a/crates/re_types_builder/src/lib.rs b/crates/re_types_builder/src/lib.rs index 80b0ca697ab9..395ea8c2fa4d 100644 --- a/crates/re_types_builder/src/lib.rs +++ b/crates/re_types_builder/src/lib.rs @@ -194,6 +194,7 @@ pub const ATTR_RUST_TUPLE_STRUCT: &str = "attr.rust.tuple_struct"; pub const ATTR_CPP_NO_FIELD_CTORS: &str = "attr.cpp.no_field_ctors"; pub const ATTR_DOCS_UNRELEASED: &str = "attr.docs.unreleased"; +pub const ATTR_DOCS_CATEGORY: &str = "attr.docs.category"; // --- Entrypoints --- diff --git a/crates/re_types_builder/src/objects.rs b/crates/re_types_builder/src/objects.rs index d368f7a4eab9..93b2ab368425 100644 --- a/crates/re_types_builder/src/objects.rs +++ b/crates/re_types_builder/src/objects.rs @@ -523,6 +523,10 @@ impl Object { self.try_get_attr::(crate::ATTR_RERUN_DEPRECATED) } + pub fn doc_category(&self) -> Option { + self.try_get_attr::(crate::ATTR_DOCS_CATEGORY) + } + /// Returns the crate name of an object, accounting for overrides. pub fn crate_name(&self) -> String { self.try_get_attr::(crate::ATTR_RUST_OVERRIDE_CRATE) diff --git a/docs/content/reference/types.md b/docs/content/reference/types.md index 02da158ab288..b2b7dd6cd3f6 100644 --- a/docs/content/reference/types.md +++ b/docs/content/reference/types.md @@ -3,60 +3,14 @@ title: Types order: 400 --- -Rerun comes with built-in support for a number of different types that can be logged via the Python and Rust Logging -APIs and then visualized in the [Viewer](viewer.md). +Rerun has 3 levels of types that can be used in all SDK languages: -The top-level types are called [**archetypes**](types/archetypes.md) to differentiate them from the lower-level -[**data types**](types/datatypes.md) that make up the individual [**components**](types/components.md). -For more information on the relationship between **archetypes** and **components**, check out the concept page -on [Entities and Components](../concepts/entity-component.md). - -## Spatial **archetypes** - -The spatial archetypes represent 2D and 3D spatial data. These types have some notion of a coordinate system and -generally support spatial transformations. These types can be visualized by 2D and 3D space views. - -To visualize a 2D entity in a 3D space view it must be under a pinhole transformation. -To visualize a 3D entity in a 2D space view, the 2D's origin must be at a pinhole transform and all 3D objects are above it. - -- [Arrows3D](types/archetypes/arrows3d.md) -- [Asset3D](types/archetypes/asset3d.md) -- [Boxes2D](types/archetypes/boxes2d.md) -- [Boxes3D](types/archetypes/boxes3d.md) -- [LineStrips2D](types/archetypes/line_strips2d.md) -- [LineStrips3D](types/archetypes/line_strips3d.md) -- [Mesh3D](types/archetypes/mesh3d.md) -- [Points2D](types/archetypes/points2d.md) -- [Points3D](types/archetypes/points3d.md) - -### Spatial transformations +* [**Archetypes**](types/archetypes.md) - high level bundles of components. +* [**Components**](types/components.md) - the base unit of logging data. +* [**Data types**](types/datatypes.md) - that make up the individual components. -- [Transform3D](types/archetypes/transform3d.md) -- [Pinhole](types/archetypes/pinhole.md) -- [DisconnectedSpace](types/archetypes/disconnected_space.md): disconnect an entity path from its parent. +To get an overview of what the Rerun [Viewer](./viewer.md) can show, start at [**Archetypes**](types/archetypes.md). -## Image & tensor **archetypes** - -Image and tensor archetypes all build on top of a common tensor component. The tensor component is a multi-dimensional -generic container for arrays of data. Images are restricted to tensors of rank 2 or rank 3; these can be viewed in the -`Spatial` space view. Generic tensors of greater rank can only be viewed in the specialized `Tensor` space view. - -- [Image](types/archetypes/image.md) -- [DepthImage](types/archetypes/depth_image.md) -- [SegmentationImage](types/archetypes/segmentation_image.md) -- [Tensor](types/archetypes/tensor.md) - -## Time series **archetypes** - -- [Scalar](types/archetypes/scalar.md): a single scalar / metric value. -- [SeriesPoint](types/archetypes/series_point.md): define the style properties for a point series in a chart. -- [SeriesLine](types/archetypes/series_line.md): define the style properties for a line series in a chart. - -## Other **archetypes** +For more information on the relationship between **archetypes** and **components**, check out the concept page +on [Entities and Components](../concepts/entity-component.md). -- [AnnotationContext](types/archetypes/annotation_context.md): not viewed directly, but provides classes, labels, and connectivity information for other entities. -- [BarChart](types/archetypes/bar_chart.md): data displayed in a `BarChart` space view. -- [Clear](types/archetypes/clear.md): clear all components of an entity. -- [TextDocument](types/archetypes/text_document.md): text displayed in a `TextDocument` space view. -- [TextLog](types/archetypes/text_log.md): a log entry in a `TextLog` space view. -- [ViewCoordinates](types/archetypes/view_coordinates.md): determines how we interpret the coordinate system of an entity/space. diff --git a/docs/content/reference/types/archetypes.md b/docs/content/reference/types/archetypes.md index 36b682a1e4a5..f6d6a75eb7f6 100644 --- a/docs/content/reference/types/archetypes.md +++ b/docs/content/reference/types/archetypes.md @@ -3,33 +3,51 @@ title: "Archetypes" order: 1 --- -Archetypes are bundles of components - -## Available archetypes - -* [`AnnotationContext`](archetypes/annotation_context.md) -* [`Arrows2D`](archetypes/arrows2d.md) -* [`Arrows3D`](archetypes/arrows3d.md) -* [`Asset3D`](archetypes/asset3d.md) -* [`BarChart`](archetypes/bar_chart.md) -* [`Boxes2D`](archetypes/boxes2d.md) -* [`Boxes3D`](archetypes/boxes3d.md) -* [`Clear`](archetypes/clear.md) -* [`DepthImage`](archetypes/depth_image.md) -* [`DisconnectedSpace`](archetypes/disconnected_space.md) -* [`Image`](archetypes/image.md) -* [`LineStrips2D`](archetypes/line_strips2d.md) -* [`LineStrips3D`](archetypes/line_strips3d.md) -* [`Mesh3D`](archetypes/mesh3d.md) -* [`Pinhole`](archetypes/pinhole.md) -* [`Points2D`](archetypes/points2d.md) -* [`Points3D`](archetypes/points3d.md) -* [`Scalar`](archetypes/scalar.md) -* [`SegmentationImage`](archetypes/segmentation_image.md) -* [`SeriesLine`](archetypes/series_line.md) -* [`SeriesPoint`](archetypes/series_point.md) -* [`Tensor`](archetypes/tensor.md) -* [`TextDocument`](archetypes/text_document.md) -* [`TextLog`](archetypes/text_log.md) -* [`Transform3D`](archetypes/transform3d.md) -* [`ViewCoordinates`](archetypes/view_coordinates.md) + + +Archetypes are bundles of components. This page lists all built-in components. + +## Image & tensor + +* [`DepthImage`](archetypes/depth_image.md): A depth image. +* [`Image`](archetypes/image.md): A monochrome or color image. +* [`SegmentationImage`](archetypes/segmentation_image.md): An image made up of integer class-ids. +* [`Tensor`](archetypes/tensor.md): A generic n-dimensional Tensor. + +## Plotting + +* [`BarChart`](archetypes/bar_chart.md): A bar chart. +* [`Scalar`](archetypes/scalar.md): Log a double-precision scalar. +* [`SeriesLine`](archetypes/series_line.md): Define the style properties for a line series in a chart. +* [`SeriesPoint`](archetypes/series_point.md): Define the style properties for a point series in a chart. + +## Spatial 2D + +* [`Arrows2D`](archetypes/arrows2d.md): 2D arrows with optional colors, radii, labels, etc. +* [`Boxes2D`](archetypes/boxes2d.md): 2D boxes with half-extents and optional center, rotations, rotations, colors etc. +* [`LineStrips2D`](archetypes/line_strips2d.md): 2D line strips with positions and optional colors, radii, labels, etc. +* [`Mesh3D`](archetypes/mesh3d.md): A 3D triangle mesh as specified by its per-mesh and per-vertex properties. +* [`Points2D`](archetypes/points2d.md): A 2D point cloud with positions and optional colors, radii, labels, etc. + +## Spatial 3D + +* [`Arrows3D`](archetypes/arrows3d.md): 3D arrows with optional colors, radii, labels, etc. +* [`Asset3D`](archetypes/asset3d.md): A prepacked 3D asset (`.gltf`, `.glb`, `.obj`, `.stl`, etc.). +* [`Boxes3D`](archetypes/boxes3d.md): 3D boxes with half-extents and optional center, rotations, rotations, colors etc. +* [`LineStrips3D`](archetypes/line_strips3d.md): 3D line strips with positions and optional colors, radii, labels, etc. +* [`Pinhole`](archetypes/pinhole.md): Camera perspective projection (a.k.a. intrinsics). +* [`Points3D`](archetypes/points3d.md): A 3D point cloud with positions and optional colors, radii, labels, etc. +* [`Transform3D`](archetypes/transform3d.md): A 3D transform. +* [`ViewCoordinates`](archetypes/view_coordinates.md): How we interpret the coordinate system of an entity/space. + +## Text + +* [`TextDocument`](archetypes/text_document.md): A text element intended to be displayed in its own text-box. +* [`TextLog`](archetypes/text_log.md): A log entry in a text log, comprised of a text body and its log level. + +## Other + +* [`AnnotationContext`](archetypes/annotation_context.md): The `AnnotationContext` provides additional information on how to display entities. +* [`Clear`](archetypes/clear.md): Empties all the components of an entity. +* [`DisconnectedSpace`](archetypes/disconnected_space.md): Spatially disconnect this entity from its parent. + diff --git a/docs/content/reference/types/components.md b/docs/content/reference/types/components.md index f12d2fd1bfe6..d11ab090ef1e 100644 --- a/docs/content/reference/types/components.md +++ b/docs/content/reference/types/components.md @@ -3,47 +3,55 @@ title: "Components" order: 2 --- -Archetypes are bundles of components + -## Available components +Components are the fundamental unit of logging in Rerun. This page lists all built-in components. + +An entity can only ever contain a single array of any given component type. +If you log the same component several times on an entity, the last value (or array of values) will overwrite the previous. + +For more information on the relationship between **archetypes** and **components**, check out the concept page +on [Entities and Components](../../concepts/entity-component.md). + + +* [`AnnotationContext`](components/annotation_context.md): The `AnnotationContext` provides additional information on how to display entities. +* [`Blob`](components/blob.md): A binary blob of data. +* [`ClassId`](components/class_id.md): A 16-bit ID representing a type of semantic class. +* [`ClearIsRecursive`](components/clear_is_recursive.md): Configures how a clear operation should behave - recursive or not. +* [`Color`](components/color.md): An RGBA color with unmultiplied/separate alpha, in sRGB gamma space with linear alpha. +* [`DepthMeter`](components/depth_meter.md): A component indicating how long a meter is, expressed in native units. +* [`DisconnectedSpace`](components/disconnected_space.md): Spatially disconnect this entity from its parent. +* [`DrawOrder`](components/draw_order.md): Draw order used for the display order of 2D elements. +* [`HalfSizes2D`](components/half_sizes2d.md): Half-sizes (extents) of a 2D box along its local axis, starting at its local origin/center. +* [`HalfSizes3D`](components/half_sizes3d.md): Half-sizes (extents) of a 3D box along its local axis, starting at its local origin/center. +* [`InstanceKey`](components/instance_key.md): A unique numeric identifier for each individual instance within a batch. +* [`KeypointId`](components/keypoint_id.md): A 16-bit ID representing a type of semantic keypoint within a class. +* [`LineStrip2D`](components/line_strip2d.md): A line strip in 2D space. +* [`LineStrip3D`](components/line_strip3d.md): A line strip in 3D space. +* [`MarkerShape`](components/marker_shape.md): Shape of a marker. +* [`MarkerSize`](components/marker_size.md): Size of a marker in UI points. +* [`Material`](components/material.md): Material properties of a mesh. +* [`MediaType`](components/media_type.md): A standardized media type (RFC2046, formerly known as MIME types), encoded as a utf8 string. +* [`MeshProperties`](components/mesh_properties.md): Optional triangle indices for a mesh. +* [`Name`](components/name.md): A display name, typically for an entity or a item like a plot series. +* [`OutOfTreeTransform3D`](components/out_of_tree_transform3d.md): An out-of-tree affine transform between two 3D spaces, represented in a given direction. +* [`PinholeProjection`](components/pinhole_projection.md): Camera projection, from image coordinates to view coordinates. +* [`Position2D`](components/position2d.md): A position in 2D space. +* [`Position3D`](components/position3d.md): A position in 3D space. +* [`Radius`](components/radius.md): A Radius component. +* [`Range1D`](components/range1d.md): A 1D range, specifying a lower and upper bound. +* [`Resolution`](components/resolution.md): Pixel resolution width & height, e.g. of a camera sensor. +* [`Rotation3D`](components/rotation3d.md): A 3D rotation, represented either by a quaternion or a rotation around axis. +* [`Scalar`](components/scalar.md): A double-precision scalar. +* [`ScalarScattering`](components/scalar_scattering.md): If true, a scalar will be shown as individual point in a scatter plot. +* [`StrokeWidth`](components/stroke_width.md): The width of a stroke specified in UI points. +* [`TensorData`](components/tensor_data.md): A multi-dimensional `Tensor` of data. +* [`Texcoord2D`](components/texcoord2d.md): A 2D texture UV coordinate. +* [`Text`](components/text.md): A string of text, e.g. for labels and text documents. +* [`TextLogLevel`](components/text_log_level.md): The severity level of a text log message. +* [`Transform3D`](components/transform3d.md): An affine transform between two 3D spaces, represented in a given direction. +* [`Vector2D`](components/vector2d.md): A vector in 2D space. +* [`Vector3D`](components/vector3d.md): A vector in 3D space. +* [`ViewCoordinates`](components/view_coordinates.md): How we interpret the coordinate system of an entity/space. +* [`VisualizerOverrides`](components/visualizer_overrides.md): The name of a visualizer. -* [`AnnotationContext`](components/annotation_context.md) -* [`Blob`](components/blob.md) -* [`ClassId`](components/class_id.md) -* [`ClearIsRecursive`](components/clear_is_recursive.md) -* [`Color`](components/color.md) -* [`DepthMeter`](components/depth_meter.md) -* [`DisconnectedSpace`](components/disconnected_space.md) -* [`DrawOrder`](components/draw_order.md) -* [`HalfSizes2D`](components/half_sizes2d.md) -* [`HalfSizes3D`](components/half_sizes3d.md) -* [`InstanceKey`](components/instance_key.md) -* [`KeypointId`](components/keypoint_id.md) -* [`LineStrip2D`](components/line_strip2d.md) -* [`LineStrip3D`](components/line_strip3d.md) -* [`MarkerShape`](components/marker_shape.md) -* [`MarkerSize`](components/marker_size.md) -* [`Material`](components/material.md) -* [`MediaType`](components/media_type.md) -* [`MeshProperties`](components/mesh_properties.md) -* [`Name`](components/name.md) -* [`OutOfTreeTransform3D`](components/out_of_tree_transform3d.md) -* [`PinholeProjection`](components/pinhole_projection.md) -* [`Position2D`](components/position2d.md) -* [`Position3D`](components/position3d.md) -* [`Radius`](components/radius.md) -* [`Range1D`](components/range1d.md) -* [`Resolution`](components/resolution.md) -* [`Rotation3D`](components/rotation3d.md) -* [`Scalar`](components/scalar.md) -* [`ScalarScattering`](components/scalar_scattering.md) -* [`StrokeWidth`](components/stroke_width.md) -* [`TensorData`](components/tensor_data.md) -* [`Texcoord2D`](components/texcoord2d.md) -* [`Text`](components/text.md) -* [`TextLogLevel`](components/text_log_level.md) -* [`Transform3D`](components/transform3d.md) -* [`Vector2D`](components/vector2d.md) -* [`Vector3D`](components/vector3d.md) -* [`ViewCoordinates`](components/view_coordinates.md) -* [`VisualizerOverrides`](components/visualizer_overrides.md) diff --git a/docs/content/reference/types/datatypes.md b/docs/content/reference/types/datatypes.md index 95daf97ca8f7..90467a297494 100644 --- a/docs/content/reference/types/datatypes.md +++ b/docs/content/reference/types/datatypes.md @@ -3,43 +3,45 @@ title: "Datatypes" order: 3 --- -Data types are the lowest layer of the data model hierarchy + -## Available datatypes +Data types are the lowest layer of the data model hierarchy. They are re-usable types used by the components. + + +* [`Angle`](datatypes/angle.md): Angle in either radians or degrees. +* [`AnnotationInfo`](datatypes/annotation_info.md): Annotation info annotating a class id or key-point id. +* [`Bool`](datatypes/bool.md): A single boolean. +* [`ClassDescription`](datatypes/class_description.md): The description of a semantic Class. +* [`ClassDescriptionMapElem`](datatypes/class_description_map_elem.md): A helper type for mapping class IDs to class descriptions. +* [`ClassId`](datatypes/class_id.md): A 16-bit ID representing a type of semantic class. +* [`EntityPath`](datatypes/entity_path.md): A path to an entity in the `DataStore`. +* [`Float32`](datatypes/float32.md): A single-precision 32-bit IEEE 754 floating point number. +* [`KeypointId`](datatypes/keypoint_id.md): A 16-bit ID representing a type of semantic keypoint within a class. +* [`KeypointPair`](datatypes/keypoint_pair.md): A connection between two `Keypoints`. +* [`Mat3x3`](datatypes/mat3x3.md): A 3x3 Matrix. +* [`Mat4x4`](datatypes/mat4x4.md): A 4x4 Matrix. +* [`Material`](datatypes/material.md): Material properties of a mesh. +* [`MeshProperties`](datatypes/mesh_properties.md): Optional triangle indices for a mesh. +* [`Quaternion`](datatypes/quaternion.md): A Quaternion represented by 4 real numbers. +* [`Rgba32`](datatypes/rgba32.md): An RGBA color with unmultiplied/separate alpha, in sRGB gamma space with linear alpha. +* [`Rotation3D`](datatypes/rotation3d.md): A 3D rotation. +* [`RotationAxisAngle`](datatypes/rotation_axis_angle.md): 3D rotation represented by a rotation around a given axis. +* [`Scale3D`](datatypes/scale3d.md): 3D scaling factor, part of a transform representation. +* [`TensorBuffer`](datatypes/tensor_buffer.md): The underlying storage for a `Tensor`. +* [`TensorData`](datatypes/tensor_data.md): A multi-dimensional `Tensor` of data. +* [`TensorDimension`](datatypes/tensor_dimension.md): A single dimension within a multi-dimensional tensor. +* [`TimeInt`](datatypes/time_int.md): A 64-bit number describing either nanoseconds OR sequence numbers. +* [`Transform3D`](datatypes/transform3d.md): Representation of a 3D affine transform. +* [`TranslationAndMat3x3`](datatypes/translation_and_mat3x3.md): Representation of an affine transform via a 3x3 affine matrix paired with a translation. +* [`TranslationRotationScale3D`](datatypes/translation_rotation_scale3d.md): Representation of an affine transform via separate translation, rotation & scale. +* [`UInt32`](datatypes/uint32.md): A 32bit unsigned integer. +* [`UInt64`](datatypes/uint64.md): A 64bit unsigned integer. +* [`UVec2D`](datatypes/uvec2d.md): A uint32 vector in 2D space. +* [`UVec3D`](datatypes/uvec3d.md): A uint32 vector in 3D space. +* [`UVec4D`](datatypes/uvec4d.md): A uint vector in 4D space. +* [`Utf8`](datatypes/utf8.md): A string of text, encoded as UTF-8. +* [`Uuid`](datatypes/uuid.md): A 16-byte uuid. +* [`Vec2D`](datatypes/vec2d.md): A vector in 2D space. +* [`Vec3D`](datatypes/vec3d.md): A vector in 3D space. +* [`Vec4D`](datatypes/vec4d.md): A vector in 4D space. -* [`Angle`](datatypes/angle.md) -* [`AnnotationInfo`](datatypes/annotation_info.md) -* [`Bool`](datatypes/bool.md) -* [`ClassDescription`](datatypes/class_description.md) -* [`ClassDescriptionMapElem`](datatypes/class_description_map_elem.md) -* [`ClassId`](datatypes/class_id.md) -* [`EntityPath`](datatypes/entity_path.md) -* [`Float32`](datatypes/float32.md) -* [`KeypointId`](datatypes/keypoint_id.md) -* [`KeypointPair`](datatypes/keypoint_pair.md) -* [`Mat3x3`](datatypes/mat3x3.md) -* [`Mat4x4`](datatypes/mat4x4.md) -* [`Material`](datatypes/material.md) -* [`MeshProperties`](datatypes/mesh_properties.md) -* [`Quaternion`](datatypes/quaternion.md) -* [`Rgba32`](datatypes/rgba32.md) -* [`Rotation3D`](datatypes/rotation3d.md) -* [`RotationAxisAngle`](datatypes/rotation_axis_angle.md) -* [`Scale3D`](datatypes/scale3d.md) -* [`TensorBuffer`](datatypes/tensor_buffer.md) -* [`TensorData`](datatypes/tensor_data.md) -* [`TensorDimension`](datatypes/tensor_dimension.md) -* [`TimeInt`](datatypes/time_int.md) -* [`Transform3D`](datatypes/transform3d.md) -* [`TranslationAndMat3x3`](datatypes/translation_and_mat3x3.md) -* [`TranslationRotationScale3D`](datatypes/translation_rotation_scale3d.md) -* [`UInt32`](datatypes/uint32.md) -* [`UInt64`](datatypes/uint64.md) -* [`UVec2D`](datatypes/uvec2d.md) -* [`UVec3D`](datatypes/uvec3d.md) -* [`UVec4D`](datatypes/uvec4d.md) -* [`Utf8`](datatypes/utf8.md) -* [`Uuid`](datatypes/uuid.md) -* [`Vec2D`](datatypes/vec2d.md) -* [`Vec3D`](datatypes/vec3d.md) -* [`Vec4D`](datatypes/vec4d.md)