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

44 lines
1 KiB
Rust
Raw Normal View History

2024-09-13 00:40:34 -07:00
use nalgebra::DVector;
use rustc_hash::FxHashSet;
2024-09-22 02:21:45 -07:00
use slab::Slab;
use sycamore::prelude::*;
2024-09-13 00:40:34 -07:00
#[derive(Clone, PartialEq)]
pub struct Element {
pub id: String,
pub label: String,
pub color: [f32; 3],
pub rep: DVector<f64>,
pub constraints: FxHashSet<usize>
}
2024-09-23 00:39:14 -07:00
#[derive(Clone)]
pub struct Constraint {
pub args: (usize, usize),
pub rep: f64
2024-09-13 00:40:34 -07:00
}
// a complete, view-independent description of an assembly
#[derive(Clone)]
2024-09-13 00:40:34 -07:00
pub struct Assembly {
pub elements: Signal<Slab<Element>>,
pub constraints: Signal<Slab<Constraint>>
}
impl Assembly {
pub fn new() -> Assembly {
Assembly {
elements: create_signal(Slab::new()),
constraints: create_signal(Slab::new())
}
}
pub fn insert_constraint(&self, constraint: Constraint) {
let args = constraint.args;
let key = self.constraints.update(|csts| csts.insert(constraint));
self.elements.update(|elts| {
elts[args.0].constraints.insert(key);
elts[args.1].constraints.insert(key);
})
}
2024-09-13 00:40:34 -07:00
}