sophus_viewer/
packets.rs

1use sophus_lie::Isometry3F64;
2use sophus_renderer::{
3    camera::RenderCamera,
4    renderables::{
5        ImageFrame,
6        PixelRenderable,
7        SceneRenderable,
8    },
9};
10
11use crate::prelude::*;
12
13mod image_view_packet;
14mod plot_view_packet;
15mod scene_view_packet;
16
17pub use image_view_packet::*;
18pub use plot_view_packet::*;
19pub use scene_view_packet::*;
20
21/// Packet of renderables
22#[derive(Clone, Debug)]
23pub enum Packet {
24    /// scene view packet
25    Scene(SceneViewPacket),
26    /// image view packet
27    Image(ImageViewPacket),
28    /// plot view packet
29    Plot(Vec<PlotViewPacket>),
30}
31
32/// Create a image packet
33pub fn make_image_packet(
34    view_label: &str,
35    frame: Option<ImageFrame>,
36    pixel_renderables: Vec<PixelRenderable>,
37    scene_renderables: Vec<SceneRenderable>,
38) -> Packet {
39    Packet::Image(ImageViewPacket {
40        frame,
41        pixel_renderables,
42        scene_renderables,
43        view_label: view_label.to_string(),
44        delete: false,
45    })
46}
47
48/// Delete an image packet
49pub fn delete_image_packet(view_label: &str) -> Packet {
50    Packet::Image(ImageViewPacket {
51        frame: None,
52        pixel_renderables: vec![],
53        scene_renderables: vec![],
54        view_label: view_label.to_string(),
55        delete: true,
56    })
57}
58
59/// Create a scene packet
60pub fn create_scene_packet(
61    view_label: &str,
62    initial_camera: RenderCamera,
63    locked_to_birds_eye_orientation: bool,
64) -> Packet {
65    Packet::Scene(SceneViewPacket {
66        view_label: view_label.to_string(),
67        content: SceneViewPacketContent::Creation(SceneViewCreation {
68            initial_camera,
69            locked_to_birds_eye_orientation,
70        }),
71    })
72}
73
74/// Delete a scene packet
75pub fn delete_scene_packet(view_label: &str) -> Packet {
76    Packet::Scene(SceneViewPacket {
77        view_label: view_label.to_string(),
78        content: SceneViewPacketContent::Delete,
79    })
80}
81
82/// Append to scene packet
83pub fn append_to_scene_packet(view_label: &str, scene_renderables: Vec<SceneRenderable>) -> Packet {
84    Packet::Scene(SceneViewPacket {
85        view_label: view_label.to_string(),
86        content: SceneViewPacketContent::Renderables(scene_renderables),
87    })
88}
89
90/// Create world-from-scene update, scene packet
91pub fn world_from_scene_update_packet(
92    view_label: &str,
93    world_from_scene_update: Isometry3F64,
94) -> Packet {
95    Packet::Scene(SceneViewPacket {
96        view_label: view_label.to_string(),
97        content: SceneViewPacketContent::WorldFromSceneUpdate(world_from_scene_update),
98    })
99}