molgfx-core 0.3.4

The semantic scene graph: columnar tables, GPU record layouts, the borrowed coordinate seam.
Documentation
use super::*;
use crate::{GuideStyle, Scene, fixture};
use molgfx_math::Vec3;

#[test]
fn a_planar_region_orthogonalizes_its_tangent_and_closes_its_boundary() {
    let mut scene = match Scene::from_structure(&fixture::structure()) {
        Ok(scene) => scene,
        Err(error) => panic!("fixture scene builds: {error}"),
    };
    let Some((owner, _)) = scene.structures().next() else {
        panic!("fixture has a structure")
    };
    let region = match PlanarRegion::new(
        owner,
        Vec3::ZERO,
        Vec3::Z,
        Vec3::new(1.0, 0.0, 2.0),
        [4.0, 2.0],
    ) {
        Ok(region) => region,
        Err(error) => panic!("region validates: {error}"),
    };
    assert!(region.normal.dot(region.tangent).abs() < 1.0e-6);
    assert_eq!(region.edges().len(), 4);
    let guide = match crate::Guide::new(
        owner,
        region.edges()[0].0,
        region.edges()[0].1,
        GuideStyle::default(),
    ) {
        Ok(guide) => guide,
        Err(error) => panic!("guide validates: {error}"),
    };
    assert!(scene.add_guide(guide).is_ok());
}

#[test]
fn a_degenerate_planar_region_is_rejected() {
    let scene = match Scene::from_structure(&fixture::structure()) {
        Ok(scene) => scene,
        Err(error) => panic!("fixture scene builds: {error}"),
    };
    let Some((owner, _)) = scene.structures().next() else {
        panic!("fixture has a structure")
    };
    assert!(PlanarRegion::new(owner, Vec3::ZERO, Vec3::Z, Vec3::Z, [1.0, 1.0]).is_err());
}