Ticket #6063: boost_polygon_bug6063.diff

File boost_polygon_bug6063.diff, 1.5 KB (added by dbfaken@…, 11 years ago)

patch for ticket 6063

Line 
186a87,88
2> if(resizing == 0) return *this;
3> if(empty()) return *this;
490c92
5< if(resizing > 0)
6---
7> else
892d93
9< return *this;
1094,95c95
11< if(resizing == 0) return *this;
12< if(empty()) return *this;
13---
14>
15103,105c103,109
16< //make_arc(std::vector<point_data< T> >& return_points,
17< //point_data< double> start, point_data< double> end,
18< //point_data< double> center, double r, unsigned int num_circle_segments)
19---
20>
21> // scale arc up so that minimum radius corresponds to 'resizing',
22> // for bug ticket #6063.
23> const double our_pi=3.1415926535897932384626433832795028841971;
24> double arcRadScaling = 1.0/cos(2.0*our_pi/double(num_circle_segments)/2.0);
25> double arcRadius = double(std::abs(resizing))*arcRadScaling;
26>
27107,109c111,112
28< point_data<double> center(0.0, 0.0), start(0.0, (double)resizing);
29< make_arc(circle, start, start, center, std::abs((double)resizing),
30< num_circle_segments);
31---
32> point_data<double> center(0.0, 0.0), start(0.0, arcRadius);
33> make_arc(circle, start, start, center, arcRadius, num_circle_segments);
34116a120,127
35>
36> // Intersect with result of 'normal' (non-minkowski-sum) offset,
37> // to remove offsets larger than the given 'resizing' when not near corners.
38> // Also for bug ticket #6063
39> polygon_set_data<coordinate_type> normal_offset_result(*this);
40> normal_offset_result.bloat(std::abs(resizing));
41> result = result & normal_offset_result;
42>
43120a132
44>