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#[derive(Clone, Debug)]
23pub enum Packet {
24 Scene(SceneViewPacket),
26 Image(ImageViewPacket),
28 Plot(Vec<PlotViewPacket>),
30}
31
32pub 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
48pub 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
59pub 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
74pub 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
82pub 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
90pub 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}