mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-08-04 13:30:48 +00:00
Add snapping for a line's midpoint when it's being drawn (#2594)
* line midpoint snapper * Add to snap option menu * remove being_drawn_line_midpoint * Code review --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
parent
d5cb380328
commit
0a65e570a9
2 changed files with 21 additions and 6 deletions
|
@ -4198,7 +4198,6 @@ impl NodeNetworkInterface {
|
|||
let Some(downstream_nodes) = outward_wires.get(¤t_node) else { continue };
|
||||
for downstream_node in downstream_nodes {
|
||||
if let InputConnector::Node { node_id: downstream_id, .. } = downstream_node {
|
||||
let downstream_node_output = OutputConnector::node(*downstream_id, 0);
|
||||
if !delete_nodes.contains(downstream_id) {
|
||||
can_delete = false;
|
||||
break;
|
||||
|
|
|
@ -394,6 +394,7 @@ fn generate_line(tool_data: &mut LineToolData, snap_data: SnapData, lock_angle:
|
|||
|
||||
let near_point = SnapCandidatePoint::handle_neighbors(document_points[1], [tool_data.drag_start]);
|
||||
let far_point = SnapCandidatePoint::handle_neighbors(2. * document_points[0] - document_points[1], [tool_data.drag_start]);
|
||||
let mid_point = SnapCandidatePoint::handle_neighbors((tool_data.drag_start + document_points[1]) / 2., [tool_data.drag_start]);
|
||||
let config = SnapTypeConfiguration::default();
|
||||
|
||||
if constrained {
|
||||
|
@ -410,8 +411,15 @@ fn generate_line(tool_data: &mut LineToolData, snap_data: SnapData, lock_angle:
|
|||
snap.update_indicator(best);
|
||||
} else {
|
||||
let snapped = snap.constrained_snap(&snap_data, &near_point, constraint, config);
|
||||
document_points[1] = snapped.snapped_point_document;
|
||||
snap.update_indicator(snapped);
|
||||
let snapped_mid = snap.constrained_snap(&snap_data, &mid_point, constraint, config);
|
||||
let best = if snap_data.document.snapping_state.path.line_midpoint && snapped_mid.other_snap_better(&snapped_mid) {
|
||||
document_points[1] += (snapped_mid.snapped_point_document - mid_point.document_point) * 2.;
|
||||
snapped_mid
|
||||
} else {
|
||||
document_points[1] = snapped.snapped_point_document;
|
||||
snapped.clone()
|
||||
};
|
||||
snap.update_indicator(best);
|
||||
}
|
||||
} else if center {
|
||||
let snapped = snap.free_snap(&snap_data, &near_point, config);
|
||||
|
@ -422,8 +430,15 @@ fn generate_line(tool_data: &mut LineToolData, snap_data: SnapData, lock_angle:
|
|||
snap.update_indicator(best);
|
||||
} else {
|
||||
let snapped = snap.free_snap(&snap_data, &near_point, config);
|
||||
document_points[1] = snapped.snapped_point_document;
|
||||
snap.update_indicator(snapped);
|
||||
let snapped_mid = snap.free_snap(&snap_data, &mid_point, config);
|
||||
let best = if snap_data.document.snapping_state.path.line_midpoint && snapped_mid.other_snap_better(&snapped_mid) {
|
||||
document_points[1] += (snapped_mid.snapped_point_document - mid_point.document_point) * 2.;
|
||||
snapped_mid
|
||||
} else {
|
||||
document_points[1] = snapped.snapped_point_document;
|
||||
snapped.clone()
|
||||
};
|
||||
snap.update_indicator(best);
|
||||
}
|
||||
|
||||
// Snapping happens in other space, while document graph renders in another.
|
||||
|
@ -433,7 +448,8 @@ fn generate_line(tool_data: &mut LineToolData, snap_data: SnapData, lock_angle:
|
|||
#[cfg(test)]
|
||||
mod test_line_tool {
|
||||
use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn;
|
||||
use crate::{messages::tool::common_functionality::graph_modification_utils::NodeGraphLayer, test_utils::test_prelude::*};
|
||||
use crate::messages::tool::common_functionality::graph_modification_utils::NodeGraphLayer;
|
||||
use crate::test_utils::test_prelude::*;
|
||||
use glam::DAffine2;
|
||||
use graph_craft::document::value::TaggedValue;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue