mod add_remove; mod assembly; mod display; mod engine; mod outline; use nalgebra::DVector; use rustc_hash::FxHashSet; use std::collections::BTreeSet; use sycamore::prelude::*; use add_remove::AddRemove; use assembly::{Assembly, Constraint, Element}; use display::Display; use outline::Outline; #[derive(Clone)] struct AppState { assembly: Assembly, selection: Signal> } impl AppState { fn new() -> AppState { AppState { assembly: Assembly::new(), selection: create_signal(FxHashSet::default()) } } } fn main() { sycamore::render(|| { let state = AppState::new(); let assemb = &state.assembly; let _ = assemb.try_insert_element( Element { id: String::from("gemini_a"), label: String::from("Castor"), color: [1.00_f32, 0.25_f32, 0.00_f32], rep: engine::sphere(0.5, 0.5, 0.0, 1.0), constraints: BTreeSet::default() } ); let _ = assemb.try_insert_element( Element { id: String::from("gemini_b"), label: String::from("Pollux"), color: [0.00_f32, 0.25_f32, 1.00_f32], rep: engine::sphere(-0.5, -0.5, 0.0, 1.0), constraints: BTreeSet::default() } ); let _ = assemb.try_insert_element( Element { id: String::from("ursa_major"), label: String::from("Ursa major"), color: [0.25_f32, 0.00_f32, 1.00_f32], rep: engine::sphere(-0.5, 0.5, 0.0, 0.75), constraints: BTreeSet::default() } ); let _ = assemb.try_insert_element( Element { id: String::from("ursa_minor"), label: String::from("Ursa minor"), color: [0.25_f32, 1.00_f32, 0.00_f32], rep: engine::sphere(0.5, -0.5, 0.0, 0.5), constraints: BTreeSet::default() } ); let _ = assemb.try_insert_element( Element { id: String::from("moon_deimos"), label: String::from("Deimos"), color: [0.75_f32, 0.75_f32, 0.00_f32], rep: engine::sphere(0.0, 0.15, 1.0, 0.25), constraints: BTreeSet::default() } ); let _ = assemb.try_insert_element( Element { id: String::from("moon_phobos"), label: String::from("Phobos"), color: [0.00_f32, 0.75_f32, 0.50_f32], rep: engine::sphere(0.0, -0.15, -1.0, 0.25), constraints: BTreeSet::default() } ); assemb.insert_constraint( Constraint { args: ( assemb.elements_by_id.with(|elts_by_id| elts_by_id["gemini_a"]), assemb.elements_by_id.with(|elts_by_id| elts_by_id["gemini_b"]) ), rep: 0.5 } ); provide_context(state); view! { div(id="sidebar") { AddRemove {} Outline {} } Display {} } }); }