Skip to main content

ak_vis/viewer/session/
appearance.rs

1use crate::ScalarColorMap;
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
4pub enum AppearanceChannel {
5    Color,
6    Metallic,
7    PerceptualRoughness,
8}
9
10#[derive(Clone, Debug, PartialEq)]
11pub struct AtomAppearanceRule {
12    pub name: String,
13    pub channel: AppearanceChannel,
14    pub palette: Option<ScalarColorMap>,
15    pub min: Option<f32>,
16    pub max: Option<f32>,
17}
18
19#[derive(Clone, Copy, Debug, PartialEq)]
20pub enum BondScope {
21    BothSelected,
22    TouchSelection,
23}
24
25#[derive(Clone, Copy, Debug, PartialEq)]
26pub struct BallAndStickStyle {
27    pub atom_scale: f32,
28    pub bond_radius: f32,
29    pub bond_color: [f32; 4],
30    pub bond_scope: BondScope,
31}
32
33#[derive(Clone, Copy, Debug, PartialEq)]
34pub enum RenderStyle {
35    SpaceFilling,
36    BallAndStick(BallAndStickStyle),
37}
38
39#[derive(Clone, Debug, PartialEq)]
40pub struct RenderStyleRule {
41    pub frame_index: usize,
42    pub selection: Vec<bool>,
43    pub style: RenderStyle,
44}
45
46impl BallAndStickStyle {
47    pub fn bond_color(self) -> bevy::color::Color {
48        bevy::color::Color::srgba(
49            self.bond_color[0],
50            self.bond_color[1],
51            self.bond_color[2],
52            self.bond_color[3],
53        )
54    }
55}