use crate::{CurveNetwork, Vec3, with_context_mut};
pub fn register_curve_network(
name: impl Into<String>,
nodes: Vec<Vec3>,
edges: Vec<[u32; 2]>,
) -> CurveNetworkHandle {
let name = name.into();
let cn = CurveNetwork::new(name.clone(), nodes, edges);
with_context_mut(|ctx| {
ctx.registry
.register(Box::new(cn))
.expect("failed to register curve network");
ctx.update_extents();
});
CurveNetworkHandle { name }
}
pub fn register_curve_network_line(
name: impl Into<String>,
nodes: Vec<Vec3>,
) -> CurveNetworkHandle {
let name = name.into();
let cn = CurveNetwork::new_line(name.clone(), nodes);
with_context_mut(|ctx| {
ctx.registry
.register(Box::new(cn))
.expect("failed to register curve network");
ctx.update_extents();
});
CurveNetworkHandle { name }
}
pub fn register_curve_network_loop(
name: impl Into<String>,
nodes: Vec<Vec3>,
) -> CurveNetworkHandle {
let name = name.into();
let cn = CurveNetwork::new_loop(name.clone(), nodes);
with_context_mut(|ctx| {
ctx.registry
.register(Box::new(cn))
.expect("failed to register curve network");
ctx.update_extents();
});
CurveNetworkHandle { name }
}
pub fn register_curve_network_segments(
name: impl Into<String>,
nodes: Vec<Vec3>,
) -> CurveNetworkHandle {
let name = name.into();
let cn = CurveNetwork::new_segments(name.clone(), nodes);
with_context_mut(|ctx| {
ctx.registry
.register(Box::new(cn))
.expect("failed to register curve network");
ctx.update_extents();
});
CurveNetworkHandle { name }
}
impl_structure_accessors! {
get_fn = get_curve_network,
with_fn = with_curve_network,
with_ref_fn = with_curve_network_ref,
handle = CurveNetworkHandle,
type_name = "CurveNetwork",
rust_type = CurveNetwork,
doc_name = "curve network"
}
#[derive(Clone)]
pub struct CurveNetworkHandle {
name: String,
}
impl CurveNetworkHandle {
#[must_use]
pub fn name(&self) -> &str {
&self.name
}
pub fn set_color(&self, color: Vec3) -> &Self {
with_curve_network(&self.name, |cn| {
cn.set_color(color);
});
self
}
pub fn set_radius(&self, radius: f32, is_relative: bool) -> &Self {
with_curve_network(&self.name, |cn| {
cn.set_radius(radius, is_relative);
});
self
}
pub fn set_material(&self, material: &str) -> &Self {
with_curve_network(&self.name, |cn| {
cn.set_material(material);
});
self
}
}