mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-07-07 15:55:00 +00:00
Fix 'Scatter Points' node double transformation of points and remove segments connecting the points
This commit is contained in:
parent
504af4e68d
commit
02afd08c80
4 changed files with 13 additions and 18 deletions
|
@ -316,7 +316,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
||||||
DocumentNodeMetadata {
|
DocumentNodeMetadata {
|
||||||
persistent_metadata: DocumentNodePersistentMetadata {
|
persistent_metadata: DocumentNodePersistentMetadata {
|
||||||
display_name: "Layer".to_string(),
|
display_name: "Layer".to_string(),
|
||||||
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(1, -3)),
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, -3)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -333,7 +333,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
description: Cow::Borrowed("The Merge node combines graphical data through composition."),
|
description: Cow::Borrowed("Merge attaches a layer to the stack's group."),
|
||||||
properties: None,
|
properties: None,
|
||||||
},
|
},
|
||||||
DocumentNodeDefinition {
|
DocumentNodeDefinition {
|
||||||
|
@ -429,7 +429,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
||||||
DocumentNodeMetadata {
|
DocumentNodeMetadata {
|
||||||
persistent_metadata: DocumentNodePersistentMetadata {
|
persistent_metadata: DocumentNodePersistentMetadata {
|
||||||
display_name: "To Artboard".to_string(),
|
display_name: "To Artboard".to_string(),
|
||||||
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-10, -3)),
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-14, -3)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -437,7 +437,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
||||||
DocumentNodeMetadata {
|
DocumentNodeMetadata {
|
||||||
persistent_metadata: DocumentNodePersistentMetadata {
|
persistent_metadata: DocumentNodePersistentMetadata {
|
||||||
display_name: "Monitor".to_string(),
|
display_name: "Monitor".to_string(),
|
||||||
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-2, -3)),
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(-7, -3)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -445,7 +445,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
|
||||||
DocumentNodeMetadata {
|
DocumentNodeMetadata {
|
||||||
persistent_metadata: DocumentNodePersistentMetadata {
|
persistent_metadata: DocumentNodePersistentMetadata {
|
||||||
display_name: "Append Artboards".to_string(),
|
display_name: "Append Artboards".to_string(),
|
||||||
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(6, -4)),
|
node_type_metadata: NodeTypePersistentMetadata::node(IVec2::new(0, -4)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
|
|
@ -1076,7 +1076,6 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
|
||||||
}
|
}
|
||||||
|
|
||||||
if reference == "Sample Points" && inputs_count == 5 {
|
if reference == "Sample Points" && inputs_count == 5 {
|
||||||
// TODO: Rename to "Sample Polyline", also remove segment generation from "Scatter Points"
|
|
||||||
let node_definition = resolve_document_node_type("Sample Polyline").unwrap();
|
let node_definition = resolve_document_node_type("Sample Polyline").unwrap();
|
||||||
let new_node_template = node_definition.default_node_template();
|
let new_node_template = node_definition.default_node_template();
|
||||||
let document_node = new_node_template.document_node;
|
let document_node = new_node_template.document_node;
|
||||||
|
@ -1096,7 +1095,6 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageData<'_>> for PortfolioMes
|
||||||
document.network_interface.set_input(&InputConnector::node(*node_id, 5), old_inputs[3].clone(), network_path);
|
document.network_interface.set_input(&InputConnector::node(*node_id, 5), old_inputs[3].clone(), network_path);
|
||||||
document.network_interface.set_input(&InputConnector::node(*node_id, 6), old_inputs[4].clone(), network_path);
|
document.network_interface.set_input(&InputConnector::node(*node_id, 6), old_inputs[4].clone(), network_path);
|
||||||
|
|
||||||
// TODO: Rename to "Sample Polyline", also remove segment generation from "Scatter Points"
|
|
||||||
document.network_interface.replace_reference_name(node_id, network_path, "Sample Polyline".to_string());
|
document.network_interface.replace_reference_name(node_id, network_path, "Sample Polyline".to_string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -340,7 +340,12 @@ pub fn migrate_artboard_group<'de, D: serde::Deserializer<'de>>(deserializer: D)
|
||||||
pub type ArtboardGroupTable = Instances<Artboard>;
|
pub type ArtboardGroupTable = Instances<Artboard>;
|
||||||
|
|
||||||
#[node_macro::node(category(""))]
|
#[node_macro::node(category(""))]
|
||||||
async fn layer(_: impl Ctx, mut stack: GraphicGroupTable, element: GraphicElement, node_path: Vec<NodeId>) -> GraphicGroupTable {
|
async fn layer<I: 'n + Send + Clone>(
|
||||||
|
_: impl Ctx,
|
||||||
|
#[implementations(GraphicGroupTable, VectorDataTable, RasterDataTable<CPU>, RasterDataTable<GPU>)] mut stack: Instances<I>,
|
||||||
|
#[implementations(GraphicElement, VectorData, Raster<CPU>, Raster<GPU>)] element: I,
|
||||||
|
node_path: Vec<NodeId>,
|
||||||
|
) -> Instances<I> {
|
||||||
// Get the penultimate element of the node path, or None if the path is too short
|
// Get the penultimate element of the node path, or None if the path is too short
|
||||||
let source_node_id = node_path.get(node_path.len().wrapping_sub(2)).copied();
|
let source_node_id = node_path.get(node_path.len().wrapping_sub(2)).copied();
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ use crate::raster_types::{CPU, GPU, RasterDataTable};
|
||||||
use crate::registry::types::{Angle, Fraction, IntegerCount, Length, Multiplier, Percentage, PixelLength, PixelSize, SeedValue};
|
use crate::registry::types::{Angle, Fraction, IntegerCount, Length, Multiplier, Percentage, PixelLength, PixelSize, SeedValue};
|
||||||
use crate::renderer::GraphicElementRendered;
|
use crate::renderer::GraphicElementRendered;
|
||||||
use crate::transform::{Footprint, ReferencePoint, Transform};
|
use crate::transform::{Footprint, ReferencePoint, Transform};
|
||||||
use crate::vector::misc::{MergeByDistanceAlgorithm, PointSpacingType, dvec2_to_point};
|
use crate::vector::misc::{MergeByDistanceAlgorithm, PointSpacingType};
|
||||||
use crate::vector::style::{PaintOrder, StrokeAlign, StrokeCap, StrokeJoin};
|
use crate::vector::style::{PaintOrder, StrokeAlign, StrokeCap, StrokeJoin};
|
||||||
use crate::vector::{FillId, PointDomain, RegionId};
|
use crate::vector::{FillId, PointDomain, RegionId};
|
||||||
use crate::{CloneVarArgs, Color, Context, Ctx, ExtractAll, GraphicElement, GraphicGroupTable, OwnedContextImpl};
|
use crate::{CloneVarArgs, Color, Context, Ctx, ExtractAll, GraphicElement, GraphicGroupTable, OwnedContextImpl};
|
||||||
|
@ -1413,7 +1413,6 @@ async fn poisson_disk_points(
|
||||||
.stroke_bezpath_iter()
|
.stroke_bezpath_iter()
|
||||||
.map(|mut bezpath| {
|
.map(|mut bezpath| {
|
||||||
// TODO: apply transform to points instead of modifying the paths
|
// TODO: apply transform to points instead of modifying the paths
|
||||||
bezpath.apply_affine(Affine::new(vector_data_instance.transform.to_cols_array()));
|
|
||||||
bezpath.close_path();
|
bezpath.close_path();
|
||||||
let bbox = bezpath.bounding_box();
|
let bbox = bezpath.bounding_box();
|
||||||
(bezpath, bbox)
|
(bezpath, bbox)
|
||||||
|
@ -1425,16 +1424,9 @@ async fn poisson_disk_points(
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut poisson_disk_bezpath = BezPath::new();
|
|
||||||
|
|
||||||
for point in bezpath_algorithms::poisson_disk_points(i, &path_with_bounding_boxes, separation_disk_diameter, || rng.random::<f64>()) {
|
for point in bezpath_algorithms::poisson_disk_points(i, &path_with_bounding_boxes, separation_disk_diameter, || rng.random::<f64>()) {
|
||||||
if poisson_disk_bezpath.elements().is_empty() {
|
result.point_domain.push(PointId::generate(), point);
|
||||||
poisson_disk_bezpath.move_to(dvec2_to_point(point));
|
|
||||||
} else {
|
|
||||||
poisson_disk_bezpath.line_to(dvec2_to_point(point));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
result.append_bezpath(poisson_disk_bezpath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transfer the style from the input vector data to the result.
|
// Transfer the style from the input vector data to the result.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue