From bf8d899ef82f6bdad8deb1f0ff7dfa8d335ea8bd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Ji=C5=99i=C5=A1t=C4=9B?= Date: Thu, 26 Dec 2024 22:26:02 +0100 Subject: [PATCH] Merge overlapping segments after drawing --- src/schema_mode.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/schema_mode.c b/src/schema_mode.c index f910b52..f4c9a3e 100644 --- a/src/schema_mode.c +++ b/src/schema_mode.c @@ -241,6 +241,34 @@ int cmp_seg(const void *v_seg1, const void *v_seg2) return (0); } +static void merge_overlapping_segments(t_node *node) +{ + size_t i; + size_t j; + t_node_segment *seg_i; + t_node_segment *seg_j; + + i = 0; + while (i < node->segments.size) + { + seg_i = ft_vec_access(&node->segments, i); + j = i + 1; + while (j < node->segments.size) + { + seg_j = ft_vec_access(&node->segments, j); + if (pos_is_equal(seg_i->position, seg_j->position)) + { + seg_i->connects = merge_connect(seg_i->connects, seg_j->connects); + ft_vec_erase(&node->segments, j, NULL); + } + else + ++j; + } + ++i; + } + return ; +} + void schema_user_draw_node(WINDOW *schematics_win, t_vec *nodes, t_vec *mosfets, t_position pos) { t_node *chosen_node; @@ -275,7 +303,11 @@ void schema_user_draw_node(WINDOW *schematics_win, t_vec *nodes, t_vec *mosfets, merge_seg = find_node_seg_at_pos(end_node, seg.position); merge_seg->connects = merge_connect(merge_seg->connects, seg.connects); if (end_node->id != chosen_node->id) + { + index = chosen_node->id; merge_nodes(nodes, mosfets, chosen_node, end_node); + chosen_node = get_node_by_id(nodes, index); + } schema_draw_segment(schematics_win, merge_seg); } else @@ -283,6 +315,8 @@ void schema_user_draw_node(WINDOW *schematics_win, t_vec *nodes, t_vec *mosfets, ft_vec_append(&chosen_node->segments, &seg); schema_draw_segment(schematics_win, &seg); } + merge_overlapping_segments(chosen_node); + schema_draw_node(schematics_win, chosen_node); wmove(schematics_win, seg.position.y, seg.position.x); return ; } -- 2.30.2