diff --git include/boost/polygon/polygon_set_data.hpp include/boost/polygon/polygon_set_data.hpp
index 41a1b59..3c761d3 100644
|
|
namespace boost { namespace polygon {
|
197 | 197 | |
198 | 198 | template <class iT> |
199 | 199 | inline void insert_vertex_sequence(iT begin_vertex, iT end_vertex, direction_1d winding, bool is_hole) { |
200 | | bool first_iteration = true; |
201 | | point_type first_point; |
202 | | point_type previous_point; |
203 | | point_type current_point; |
204 | | direction_1d winding_dir = winding; |
205 | | int multiplier = winding_dir == COUNTERCLOCKWISE ? 1 : -1; |
206 | | if(is_hole) multiplier *= -1; |
207 | | for( ; begin_vertex != end_vertex; ++begin_vertex) { |
208 | | assign(current_point, *begin_vertex); |
209 | | if(first_iteration) { |
210 | | first_iteration = false; |
211 | | first_point = previous_point = current_point; |
212 | | } else { |
213 | | if(previous_point != current_point) { |
214 | | element_type elem(edge_type(previous_point, current_point), |
215 | | ( previous_point.get(HORIZONTAL) == current_point.get(HORIZONTAL) ? -1 : 1) * multiplier); |
216 | | insert_clean(elem); |
217 | | } |
218 | | } |
219 | | previous_point = current_point; |
| 200 | if (begin_vertex == end_vertex) { |
| 201 | // No edges to insert. |
| 202 | return; |
| 203 | } |
| 204 | // Current edge endpoints. |
| 205 | iT vertex0 = begin_vertex; |
| 206 | iT vertex1 = begin_vertex; |
| 207 | if (++vertex1 == end_vertex) { |
| 208 | // No edges to insert. |
| 209 | return; |
220 | 210 | } |
221 | | current_point = first_point; |
222 | | if(!first_iteration) { |
223 | | if(previous_point != current_point) { |
224 | | element_type elem(edge_type(previous_point, current_point), |
225 | | ( previous_point.get(HORIZONTAL) == current_point.get(HORIZONTAL) ? -1 : 1) * multiplier); |
| 211 | int wmultiplier = (winding == COUNTERCLOCKWISE) ? 1 : -1; |
| 212 | dirty_ = true; |
| 213 | unsorted_ = true; |
| 214 | while (vertex0 != end_vertex) { |
| 215 | point_type p0, p1; |
| 216 | assign(p0, *vertex0); |
| 217 | assign(p1, *vertex1); |
| 218 | if (p0 != p1) { |
| 219 | int hmultiplier = (p0.get(HORIZONTAL) == p1.get(HORIZONTAL)) ? -1 : 1; |
| 220 | element_type elem(edge_type(p0, p1), hmultiplier * wmultiplier); |
226 | 221 | insert_clean(elem); |
227 | 222 | } |
228 | | dirty_ = true; |
229 | | unsorted_ = true; |
| 223 | ++vertex0; |
| 224 | ++vertex1; |
| 225 | if (vertex1 == end_vertex) { |
| 226 | vertex1 = begin_vertex; |
| 227 | } |
230 | 228 | } |
231 | 229 | } |
232 | 230 | |
… |
… |
namespace boost { namespace polygon {
|
271 | 269 | |
272 | 270 | // equivalence operator |
273 | 271 | inline bool operator==(const polygon_set_data& p) const; |
274 | | |
| 272 | |
275 | 273 | // inequivalence operator |
276 | 274 | inline bool operator!=(const polygon_set_data& p) const { |
277 | 275 | return !((*this) == p); |