dyna3/app-proto/full-interface/src/main.rs

109 lines
3.2 KiB
Rust
Raw Normal View History

mod add_remove;
2024-09-13 00:40:34 -07:00
mod assembly;
2024-09-13 14:53:12 -07:00
mod display;
mod engine;
mod outline;
2024-09-13 00:40:34 -07:00
use nalgebra::DVector;
use rustc_hash::FxHashSet;
use std::collections::BTreeSet;
2024-09-13 00:40:34 -07:00
use sycamore::prelude::*;
use add_remove::AddRemove;
use assembly::{Assembly, Constraint, Element};
2024-09-13 14:53:12 -07:00
use display::Display;
use outline::Outline;
#[derive(Clone)]
struct AppState {
assembly: Assembly,
selection: Signal<FxHashSet<usize>>
}
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 {}
}
2024-09-13 14:53:12 -07:00
Display {}
}
});
}