Ticket #5103: TestBoost.Bug.cpp

File TestBoost.Bug.cpp, 3.2 KB (added by thai@…, 12 years ago)

show the union of these two polygon will return an empty result

Line 
1/*
2Thai Dao
3AWR Corp
4thai@awrcorp.com
5*/
6
7#include <boost/polygon/polygon.hpp>
8#include <iostream>
9namespace gtl = boost::polygon;
10using namespace boost::polygon::operators;
11
12// points_array_A_1 (-92810838,3618230) (-94606872,1822196) (-94999302,2214626) (-93203268,4010660) (-92810838,3618230)
13int points_array_A_1[] = {-92810838,3618230,-94606872,1822196,-94999302,2214626,-93203268,4010660,-92810838,3618230};
14int points_array_A_1_size =5;
15
16// points_array_B_1 (-95269304,222758) (-95260668,419862) (-95234760,615696) (-95192088,808228) (-95132906,996442) (-95057214,1178814) (-94966028,1354074) (-94860110,1520444) (-94739968,1676908) (-94606618,1822450) (-94999048,2214880) (-95165164,2033778) (-95314770,1838706) (-95446850,1631442) (-95560388,1413510) (-95654368,1186434) (-95728282,951992) (-95781368,711962) (-95813626,468376) (-95824294,222758) (-95269304,222758)
17int points_array_B_1[] = {-95269304,222758,-95260668,419862,-95234760,615696,-95192088,808228,-95132906,996442,-95057214,1178814,-94966028,1354074,-94860110,1520444,-94739968,1676908,-94606618,1822450,-94999048,2214880,-95165164,2033778,-95314770,1838706,-95446850,1631442,-95560388,1413510,-95654368,1186434,-95728282,951992,-95781368,711962,-95813626,468376,-95824294,222758,-95269304,222758};
18int points_array_B_1_size =21;
19
20
21namespace{
22 class Output //for printing debug info
23 {
24 public:
25 template<class T>
26 static void Print(const gtl::polygon_data<T>& polyData)
27 {
28 gtl::polygon_data<T>::iterator_type pit = polyData.begin();
29 gtl::polygon_data<T>::iterator_type pit_end = polyData.end();
30 while(pit!=pit_end)
31 {
32 gtl::point_data<T> p = (*pit++);
33 std::cout<<"("<<p.x()<<","<<p.y()<<")";
34 std::cout<<" ";
35 }
36 }
37
38 template<class T>
39 static void Print(std::vector<gtl::polygon_data<T> >& polygonVec)
40 {
41 int size = polygonVec.size();
42 for(int i=0;i<size;i++)
43 {
44 gtl::polygon_data<T>& poly = polygonVec[i];
45 std::cout<<"Polygon "<<i+1<<": ";
46 Output::Print(poly);
47 std::cout<<std::endl;
48 }
49 }
50 };
51}
52
53static void AddPolygonData(std::vector<gtl::polygon_data<int> >& group, int* points_array, int size)
54{
55 //convert c array to boost polygon data
56 if(size>0)
57 {
58 gtl::polygon_data<int> poly_data;
59 std::vector<gtl::point_data<int> > poly_points(size);
60 int pi=0;
61 for(int i=0;i<size;i++)
62 {
63 int i1 = i*2;
64 int i2 = i1+1;
65 poly_points[i]=gtl::point_data<int>(points_array[i1],points_array[i2]);
66 }
67 poly_data.set(poly_points.begin(),poly_points.end());
68 group.push_back(poly_data);
69 }
70}
71
72void testBooleanOps()
73{
74 //lets declare ourselves a polygon set
75 using namespace gtl; //because of operators
76 typedef std::vector<polygon_data<int> > PolygonVec;
77 PolygonVec group_A;
78 PolygonVec group_B;
79 PolygonVec group_U;
80
81 //load group A;
82 AddPolygonData(group_A,points_array_A_1,points_array_A_1_size);
83
84 //load group B;
85 AddPolygonData(group_B,points_array_B_1,points_array_B_1_size);
86
87
88 std::cout<<"union\n";
89 //the result of the union is tore in group U;
90 assign(group_U, group_A + group_B);
91 Output::Print(group_U);
92}
93
94int main() {
95
96 testBooleanOps();
97 return 0;
98}
99
100//Now you know how to use the polygon set concept with library polygons