New node: Copy to Points (#1513)

* New node: Copy to Points

* Remove dead code
This commit is contained in:
Keavon Chambers
2023-12-17 04:17:17 -08:00
parent 9f0ea35d9b
commit 9e06e70aa2
4 changed files with 80 additions and 27 deletions

View File

@@ -2235,19 +2235,6 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
properties: node_properties::stroke_properties,
..Default::default()
},
DocumentNodeDefinition {
name: "Repeat",
category: "Vector",
implementation: NodeImplementation::proto("graphene_core::vector::RepeatNode<_, _>"),
inputs: vec![
DocumentInputType::value("Vector Data", TaggedValue::VectorData(graphene_core::vector::VectorData::empty()), true),
DocumentInputType::value("Direction", TaggedValue::DVec2((100., 0.).into()), false),
DocumentInputType::value("Count", TaggedValue::U32(10), false),
],
outputs: vec![DocumentOutputType::new("Vector", FrontendGraphDataType::Subpath)],
properties: node_properties::repeat_properties,
..Default::default()
},
DocumentNodeDefinition {
name: "Bounding Box",
category: "Vector",
@@ -2257,12 +2244,25 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
properties: node_properties::node_no_properties,
..Default::default()
},
DocumentNodeDefinition {
name: "Repeat",
category: "Vector",
implementation: NodeImplementation::proto("graphene_core::vector::RepeatNode<_, _>"),
inputs: vec![
DocumentInputType::value("Instance", TaggedValue::VectorData(graphene_core::vector::VectorData::empty()), true),
DocumentInputType::value("Direction", TaggedValue::DVec2((100., 0.).into()), false),
DocumentInputType::value("Count", TaggedValue::U32(10), false),
],
outputs: vec![DocumentOutputType::new("Vector", FrontendGraphDataType::Subpath)],
properties: node_properties::repeat_properties,
..Default::default()
},
DocumentNodeDefinition {
name: "Circular Repeat",
category: "Vector",
implementation: NodeImplementation::proto("graphene_core::vector::CircularRepeatNode<_, _, _>"),
inputs: vec![
DocumentInputType::value("Vector Data", TaggedValue::VectorData(graphene_core::vector::VectorData::empty()), true),
DocumentInputType::value("Instance", TaggedValue::VectorData(graphene_core::vector::VectorData::empty()), true),
DocumentInputType::value("Angle Offset", TaggedValue::F32(0.), false),
DocumentInputType::value("Radius", TaggedValue::F32(5.), false),
DocumentInputType::value("Count", TaggedValue::U32(10), false),
@@ -2271,6 +2271,18 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
properties: node_properties::circular_repeat_properties,
..Default::default()
},
DocumentNodeDefinition {
name: "Copy to Points",
category: "Vector",
implementation: NodeImplementation::proto("graphene_core::vector::CopyToPoints<_>"),
inputs: vec![
DocumentInputType::value("Points", TaggedValue::VectorData(graphene_core::vector::VectorData::empty()), true),
DocumentInputType::value("Instance", TaggedValue::VectorData(graphene_core::vector::VectorData::empty()), true),
],
outputs: vec![DocumentOutputType::new("Vector", FrontendGraphDataType::Subpath)],
properties: node_properties::copy_to_points_properties,
..Default::default()
},
DocumentNodeDefinition {
name: "Resample Points",
category: "Vector",
@@ -2284,9 +2296,9 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
..Default::default()
},
DocumentNodeDefinition {
name: "Spline from Points",
name: "Splines from Points",
category: "Vector",
implementation: NodeImplementation::proto("graphene_core::vector::SplineFromPointsNode"),
implementation: NodeImplementation::proto("graphene_core::vector::SplinesFromPointsNode"),
inputs: vec![DocumentInputType::value("Vector Data", TaggedValue::VectorData(graphene_core::vector::VectorData::empty()), true)],
outputs: vec![DocumentOutputType::new("Vector", FrontendGraphDataType::Subpath)],
properties: node_properties::node_no_properties,

View File

@@ -309,6 +309,14 @@ fn font_inputs(document_node: &DocumentNode, node_id: NodeId, index: usize, name
(first_widgets, second_widgets)
}
fn vector_widget(document_node: &DocumentNode, node_id: NodeId, index: usize, name: &str, blank_assist: bool) -> Vec<WidgetHolder> {
let mut widgets = start_widgets(document_node, node_id, index, name, FrontendGraphDataType::Vector, blank_assist);
widgets.push(TextLabel::new("Vector data must be supplied through the graph").widget_holder());
widgets
}
fn number_widget(document_node: &DocumentNode, node_id: NodeId, index: usize, name: &str, number_props: NumberInput, blank_assist: bool) -> Vec<WidgetHolder> {
let mut widgets = start_widgets(document_node, node_id, index, name, FrontendGraphDataType::Number, blank_assist);
@@ -2107,6 +2115,12 @@ pub fn circular_repeat_properties(document_node: &DocumentNode, node_id: NodeId,
vec![LayoutGroup::Row { widgets: angle_offset }, LayoutGroup::Row { widgets: radius }, LayoutGroup::Row { widgets: count }]
}
pub fn copy_to_points_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let instance = vector_widget(document_node, node_id, 1, "Spacing", true);
vec![LayoutGroup::Row { widgets: instance }]
}
pub fn resample_points_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let spacing = number_widget(document_node, node_id, 1, "Spacing", NumberInput::default().min(1.), true);