Application prototype #14
@ -1,11 +1,105 @@
|
|||||||
|
use std::collections::BTreeSet; /* DEBUG */
|
||||||
use sycamore::prelude::*;
|
use sycamore::prelude::*;
|
||||||
use web_sys::{console, wasm_bindgen::JsValue};
|
use web_sys::{console, wasm_bindgen::JsValue};
|
||||||
|
|
||||||
use crate::AppState;
|
use crate::{engine, AppState, assembly::{Assembly, Constraint, Element}};
|
||||||
use crate::Constraint;
|
|
||||||
|
/* DEBUG */
|
||||||
|
fn load_gen_assemb(assembly: &Assembly) {
|
||||||
|
let _ = assembly.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 _ = assembly.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 _ = assembly.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 _ = assembly.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 _ = assembly.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 _ = assembly.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()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
assembly.insert_constraint(
|
||||||
|
Constraint {
|
||||||
|
args: (
|
||||||
|
assembly.elements_by_id.with_untracked(|elts_by_id| elts_by_id["gemini_a"]),
|
||||||
|
assembly.elements_by_id.with_untracked(|elts_by_id| elts_by_id["gemini_b"])
|
||||||
|
),
|
||||||
|
rep: 0.5
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[component]
|
#[component]
|
||||||
pub fn AddRemove() -> View {
|
pub fn AddRemove() -> View {
|
||||||
|
/* DEBUG */
|
||||||
|
let assembly_name = create_signal("general".to_string());
|
||||||
|
create_effect(move || {
|
||||||
|
// get name of chosen assembly
|
||||||
|
let name = assembly_name.get_clone();
|
||||||
|
console::log_1(
|
||||||
|
&JsValue::from(format!("Showing assembly \"{}\"", name.clone()))
|
||||||
|
);
|
||||||
|
|
||||||
|
batch(|| {
|
||||||
|
let state = use_context::<AppState>();
|
||||||
|
let assembly = &state.assembly;
|
||||||
|
|
||||||
|
// clear state
|
||||||
|
assembly.elements.update(|elts| elts.clear());
|
||||||
|
assembly.elements_by_id.update(|elts_by_id| elts_by_id.clear());
|
||||||
|
state.selection.update(|sel| sel.clear());
|
||||||
|
|
||||||
|
// load assembly
|
||||||
|
match name.as_str() {
|
||||||
|
"general" => load_gen_assemb(assembly),
|
||||||
|
"low-curv" => /*load_low_curv_assemb(state)*/(),
|
||||||
|
_ => ()
|
||||||
|
};
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
view! {
|
view! {
|
||||||
div(id="add-remove") {
|
div(id="add-remove") {
|
||||||
button(
|
button(
|
||||||
@ -60,6 +154,10 @@ pub fn AddRemove() -> View {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
) { "🔗" }
|
) { "🔗" }
|
||||||
|
select(bind:value=assembly_name) { /* DEBUG */
|
||||||
|
option(value="general") { "General" }
|
||||||
|
option(value="low-curv") { "Low-curvature" }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -10,7 +10,7 @@ use std::collections::BTreeSet;
|
|||||||
use sycamore::prelude::*;
|
use sycamore::prelude::*;
|
||||||
|
|
||||||
use add_remove::AddRemove;
|
use add_remove::AddRemove;
|
||||||
use assembly::{Assembly, Constraint, Element};
|
use assembly::Assembly;
|
||||||
use display::Display;
|
use display::Display;
|
||||||
use outline::Outline;
|
use outline::Outline;
|
||||||
|
|
||||||
@ -31,72 +31,7 @@ impl AppState {
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
sycamore::render(|| {
|
sycamore::render(|| {
|
||||||
let state = AppState::new();
|
provide_context(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! {
|
view! {
|
||||||
div(id="sidebar") {
|
div(id="sidebar") {
|
||||||
|
Loading…
Reference in New Issue
Block a user