124 lines
2.7 KiB
Rust
124 lines
2.7 KiB
Rust
use dyn_any::DynAny;
|
|
use glam::DVec2;
|
|
use kurbo::Point;
|
|
|
|
/// Represents different ways of calculating the centroid.
|
|
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Hash, DynAny, specta::Type, node_macro::ChoiceType)]
|
|
#[widget(Radio)]
|
|
pub enum CentroidType {
|
|
/// The center of mass for the area of a solid shape's interior, as if made out of an infinitely flat material.
|
|
#[default]
|
|
Area,
|
|
/// The center of mass for the arc length of a curved shape's perimeter, as if made out of an infinitely thin wire.
|
|
Length,
|
|
}
|
|
|
|
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Hash, DynAny, specta::Type, node_macro::ChoiceType)]
|
|
#[widget(Radio)]
|
|
pub enum BooleanOperation {
|
|
#[default]
|
|
#[icon("BooleanUnion")]
|
|
Union,
|
|
#[icon("BooleanSubtractFront")]
|
|
SubtractFront,
|
|
#[icon("BooleanSubtractBack")]
|
|
SubtractBack,
|
|
#[icon("BooleanIntersect")]
|
|
Intersect,
|
|
#[icon("BooleanDifference")]
|
|
Difference,
|
|
}
|
|
|
|
pub trait AsU32 {
|
|
fn as_u32(&self) -> u32;
|
|
}
|
|
impl AsU32 for u32 {
|
|
fn as_u32(&self) -> u32 {
|
|
*self
|
|
}
|
|
}
|
|
|
|
pub trait AsU64 {
|
|
fn as_u64(&self) -> u64;
|
|
}
|
|
impl AsU64 for u32 {
|
|
fn as_u64(&self) -> u64 {
|
|
*self as u64
|
|
}
|
|
}
|
|
impl AsU64 for u64 {
|
|
fn as_u64(&self) -> u64 {
|
|
*self
|
|
}
|
|
}
|
|
impl AsU64 for f64 {
|
|
fn as_u64(&self) -> u64 {
|
|
*self as u64
|
|
}
|
|
}
|
|
|
|
pub trait AsI64 {
|
|
fn as_i64(&self) -> i64;
|
|
}
|
|
impl AsI64 for u32 {
|
|
fn as_i64(&self) -> i64 {
|
|
*self as i64
|
|
}
|
|
}
|
|
impl AsI64 for u64 {
|
|
fn as_i64(&self) -> i64 {
|
|
*self as i64
|
|
}
|
|
}
|
|
impl AsI64 for f64 {
|
|
fn as_i64(&self) -> i64 {
|
|
*self as i64
|
|
}
|
|
}
|
|
|
|
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Hash, DynAny, specta::Type, node_macro::ChoiceType)]
|
|
#[widget(Radio)]
|
|
pub enum GridType {
|
|
#[default]
|
|
Rectangular,
|
|
Isometric,
|
|
}
|
|
|
|
#[repr(C)]
|
|
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize, Hash, DynAny, specta::Type, node_macro::ChoiceType)]
|
|
#[widget(Radio)]
|
|
pub enum ArcType {
|
|
#[default]
|
|
Open,
|
|
Closed,
|
|
PieSlice,
|
|
}
|
|
|
|
#[repr(C)]
|
|
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize, Hash, DynAny, specta::Type, node_macro::ChoiceType)]
|
|
#[widget(Radio)]
|
|
pub enum MergeByDistanceAlgorithm {
|
|
#[default]
|
|
Spatial,
|
|
Topological,
|
|
}
|
|
|
|
#[repr(C)]
|
|
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize, Hash, DynAny, specta::Type, node_macro::ChoiceType)]
|
|
#[widget(Radio)]
|
|
pub enum PointSpacingType {
|
|
#[default]
|
|
/// The desired spacing distance between points.
|
|
Separation,
|
|
/// The exact number of points to span the path.
|
|
Quantity,
|
|
}
|
|
|
|
pub fn point_to_dvec2(point: Point) -> DVec2 {
|
|
DVec2 { x: point.x, y: point.y }
|
|
}
|
|
|
|
pub fn dvec2_to_point(value: DVec2) -> Point {
|
|
Point { x: value.x, y: value.y }
|
|
}
|