ferritin_structure_mesh/
structure.rs

1//! Structure.
2//!
3//! Struct for rendering protein structures
4//!
5
6use super::ColorScheme;
7use bevy::prelude::*;
8use bevy::render::mesh::{Indices, PrimitiveTopology};
9use bevy::render::render_asset::RenderAssetUsages;
10use bon::Builder;
11use ferritin_core::AtomCollection;
12
13/// Rendering options for protein structures
14#[derive(Clone)]
15pub enum RenderOptions {
16    Wireframe,
17    Cartoon,
18    BallAndStick,
19    Solid,
20    Putty,
21}
22
23/// Structure represents a molecular structure that can be rendered
24#[derive(Builder, Clone)]
25pub struct Structure {
26    pdb: AtomCollection,
27    #[builder(default = RenderOptions::Solid)]
28    rendertype: RenderOptions,
29    #[builder(default = ColorScheme::ByAtomType)]
30    color_scheme: ColorScheme,
31    #[builder(default = StandardMaterial::default())]
32    material: StandardMaterial,
33}
34
35// Basic implementation without feature gates
36impl Structure {
37    // Basic methods that don't depend on bevy or rerun
38}
39
40impl Structure {
41    /// Convert the structure to a mesh using the specified render type
42    pub fn to_mesh(&self) -> Mesh {
43        match self.rendertype {
44            RenderOptions::Wireframe => self.render_wireframe(),
45            RenderOptions::Cartoon => self.render_cartoon(),
46            RenderOptions::BallAndStick => self.render_ballandstick(),
47            RenderOptions::Solid => self.render_spheres(),
48            RenderOptions::Putty => self.render_putty(),
49        }
50    }
51
52    /// Get the material used for rendering
53    pub fn get_material(&self) -> StandardMaterial {
54        self.material.clone()
55    }
56
57    // Placeholder implementations of rendering methods
58    fn render_wireframe(&self) -> Mesh {
59        Mesh::new(PrimitiveTopology::LineList, RenderAssetUsages::default())
60    }
61
62    fn render_cartoon(&self) -> Mesh {
63        Mesh::new(
64            PrimitiveTopology::TriangleList,
65            RenderAssetUsages::default(),
66        )
67    }
68
69    fn render_ballandstick(&self) -> Mesh {
70        Mesh::new(
71            PrimitiveTopology::TriangleList,
72            RenderAssetUsages::default(),
73        )
74    }
75
76    fn render_spheres(&self) -> Mesh {
77        Mesh::new(
78            PrimitiveTopology::TriangleList,
79            RenderAssetUsages::default(),
80        )
81    }
82
83    fn render_putty(&self) -> Mesh {
84        Mesh::new(
85            PrimitiveTopology::TriangleList,
86            RenderAssetUsages::default(),
87        )
88    }
89}