ak_vis/render/
render_bonds.rs1use crate::components::FrameBond;
2use crate::visuals::BondVisual;
3use bevy::{
4 light::{NotShadowCaster, NotShadowReceiver},
5 prelude::*,
6};
7
8pub fn render_bonds(
9 visuals: Vec<BondVisual>,
10 commands: &mut Commands,
11 materials: &mut ResMut<Assets<StandardMaterial>>,
12 meshes: &mut ResMut<Assets<Mesh>>,
13) {
14 let cyl_mesh = Cylinder::new(1.0, 2.0);
15
16 for visual in visuals {
17 commands.spawn((
18 Mesh3d(meshes.add(cyl_mesh)),
19 MeshMaterial3d(materials.add(visual.color)),
20 transform_cylinder_between(visual.start, visual.end, visual.radius),
21 FrameBond,
22 NotShadowCaster,
23 NotShadowReceiver,
24 ));
25 }
26}
27
28fn transform_cylinder_between(p0: Vec3, p1: Vec3, radius: f32) -> Transform {
29 let d = p1 - p0;
30 let len = d.length();
31 let mid = (p0 + p1) * 0.5;
32 let dir = d / len;
33 let rot = Quat::from_rotation_arc(Vec3::Y, dir);
34
35 Transform {
36 translation: mid,
37 rotation: rot,
38 scale: Vec3::new(radius, len * 0.5, radius),
39 }
40}