@@ -58,25 +58,35 @@ namespace cg {
58
58
};
59
59
std::map<segment_2, point_2, decltype (segment_comp)> helper (segment_comp);
60
60
for (auto c : p) {
61
- switch (vertex_type (c)) {
62
- case SPLIT:
63
- helper[segment_2 (*c, *(c - 1 ))] = *c;
64
- break ;
65
- case MERGE:
66
- helper.erase (segment_2 (*(c + 1 ), *c));
67
- break ;
68
- case LEFT_REGULAR:
69
- break ;
70
- case RIGHT_REGULAR:
71
- helper.erase (segment_2 (*(c + 1 ), *c));
72
- helper[segment_2 (*c, *(c - 1 ))] = *c;
73
- break ;
74
- case START:
75
- helper[segment_2 (*c, *(c - 1 ))] = *c;
76
- break ;
77
- case END:
78
- helper.erase (segment_2 (*(c + 1 ), *c));
79
- break ;
61
+ v_type type = vertex_type (c);
62
+ if (type == SPLIT) {
63
+ segment_2 ej = helper.upper_bound (segment_2 (*c, *c))->first ;
64
+
65
+ helper[ej] = *c;
66
+ helper[segment_2 (*c, *(c + 1 ))] = *c;
67
+ }
68
+ if (type == MERGE) {
69
+
70
+ helper.erase (segment_2 (*(c - 1 ), *c));
71
+ segment_2 ej = helper.upper_bound (segment_2 (*c, *c))->first ;
72
+
73
+ helper[ej] = *c;
74
+ }
75
+ if (type == LEFT_REGULAR) {
76
+
77
+ helper.erase (segment_2 (*(c - 1 ), *c));
78
+ helper[segment_2 (*c, *(c + 1 ))] = *c;
79
+ }
80
+ if (type == RIGHT_REGULAR) {
81
+ segment_2 ej = helper.upper_bound (segment_2 (*c, *c))->first ;
82
+
83
+ helper[ej] = *c;
84
+ }
85
+ if (type == START) {
86
+ helper[segment_2 (*c, *(c + 1 ))] = *c;
87
+ }
88
+ if (type == END) {
89
+ helper.erase (segment_2 (*(c - 1 ), *c));
80
90
}
81
91
}
82
92
return std::vector<triangle_2>(1 );
0 commit comments