diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface.rs b/editor/src/messages/portfolio/document/utility_types/network_interface.rs index 70541b6cfc..db083e5409 100644 --- a/editor/src/messages/portfolio/document/utility_types/network_interface.rs +++ b/editor/src/messages/portfolio/document/utility_types/network_interface.rs @@ -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; diff --git a/editor/src/messages/tool/tool_messages/line_tool.rs b/editor/src/messages/tool/tool_messages/line_tool.rs index 7c78e92e4a..0bd281a620 100644 --- a/editor/src/messages/tool/tool_messages/line_tool.rs +++ b/editor/src/messages/tool/tool_messages/line_tool.rs @@ -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;