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

75 lines
2.1 KiB
Rust
Raw Normal View History

2024-09-13 00:40:34 -07:00
mod assembly;
2024-09-13 14:53:12 -07:00
mod display;
mod outline;
2024-09-13 00:40:34 -07:00
use nalgebra::DVector;
2024-09-22 02:21:45 -07:00
use rustc_hash::FxHashSet;
2024-09-13 00:40:34 -07:00
use sycamore::prelude::*;
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,
2024-09-22 02:21:45 -07:00
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 key_a = state.assembly.elements.update(
|elts| elts.insert(
Element {
id: String::from("wing_a"),
label: String::from("Wing A"),
color: [1.00_f32, 0.25_f32, 0.00_f32],
rep: DVector::<f64>::from_column_slice(&[0.5, 0.5, 0.0, 0.5, -0.25]),
constraints: FxHashSet::default()
}
)
);
let key_b = state.assembly.elements.update(
|elts| elts.insert(
Element {
id: String::from("wing_b"),
label: String::from("Wing B"),
color: [0.00_f32, 0.25_f32, 1.00_f32],
rep: DVector::<f64>::from_column_slice(&[-0.5, -0.5, 0.0, 0.5, -0.25]),
constraints: FxHashSet::default()
},
)
);
state.assembly.elements.update(
|elts| elts.insert(
Element {
id: String::from("central"),
label: String::from("Central"),
color: [0.75_f32, 0.75_f32, 0.75_f32],
rep: DVector::<f64>::from_column_slice(&[0.0, 0.0, 0.0, 0.4, -0.625]),
constraints: FxHashSet::default()
}
)
);
state.assembly.insert_constraint(Constraint {
args: (key_a, key_b),
rep: 0.5
});
provide_context(state);
view! {
Outline {}
2024-09-13 14:53:12 -07:00
Display {}
}
});
}