ferritin_structure_mesh/
structure.rs1use 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#[derive(Clone)]
15pub enum RenderOptions {
16 Wireframe,
17 Cartoon,
18 BallAndStick,
19 Solid,
20 Putty,
21}
22
23#[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
35impl Structure {
37 }
39
40impl Structure {
41 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 pub fn get_material(&self) -> StandardMaterial {
54 self.material.clone()
55 }
56
57 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}