Stefan commited on 2013-07-13 20:29:44
Showing 2 changed files, with 17 additions and 10 deletions.
| ... | ... |
@@ -7,7 +7,9 @@ |
| 7 | 7 |
#include <iostream> |
| 8 | 8 |
#include <vector> |
| 9 | 9 |
|
| 10 |
-#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> |
|
| 10 |
+#include <CGAL/Exact_predicates_exact_constructions_kernel.h> |
|
| 11 |
+#include <CGAL/Gmpq.h> |
|
| 12 |
+#include <CGAL/number_utils.h> |
|
| 11 | 13 |
#include <CGAL/Polygon_2.h> |
| 12 | 14 |
#include <CGAL/Polygon_with_holes_2.h> |
| 13 | 15 |
#include <CGAL/Boolean_set_operations_2.h> |
| ... | ... |
@@ -179,9 +181,10 @@ bool Polygons::createInnerOffset(double offset, Polygons &offsetPolys) const |
| 179 | 181 |
for (poly = mPolys.begin(); poly != mPolys.end(); ++poly) {
|
| 180 | 182 |
|
| 181 | 183 |
// create inner offset polygons |
| 184 |
+ CGAL::Lazy_exact_nt<CGAL::Gmpq> offs(offset); |
|
| 182 | 185 |
CgPolyHolesPtrVec offPolys = |
| 183 | 186 |
CGAL::create_interior_skeleton_and_offset_polygons_with_holes_2( |
| 184 |
- offset, *poly); |
|
| 187 |
+ offs, *poly); |
|
| 185 | 188 |
|
| 186 | 189 |
// add offset polygons to output polygons |
| 187 | 190 |
CgPolyHolesPtrVec::const_iterator offPoly; |
| ... | ... |
@@ -247,8 +250,9 @@ bool Polygons::fillInnerOffset(double offset, Polygons &offsetPolys) const |
| 247 | 250 |
for (i = 1; ; ++i) {
|
| 248 | 251 |
|
| 249 | 252 |
// create inner offset polygons |
| 253 |
+ CGAL::Lazy_exact_nt<CGAL::Gmpq> offs_i(offset * i); |
|
| 250 | 254 |
CgPolyPtrVec offPolys = |
| 251 |
- CGAL::create_offset_polygons_2<CgPoly>(offset * i, *skel); |
|
| 255 |
+ CGAL::create_offset_polygons_2<CgPoly>(offs_i, *skel); |
|
| 252 | 256 |
|
| 253 | 257 |
// no offset polygons -> done |
| 254 | 258 |
if (offPolys.empty()) |
| ... | ... |
@@ -298,9 +302,12 @@ bool Polygons::createOuterOffsetPoly(const CgPolyHoles &poly, double offset, |
| 298 | 302 |
CgPolyHoles &offsetPoly) |
| 299 | 303 |
{
|
| 300 | 304 |
// calculate outer offset of outer bondary |
| 305 |
+ CGAL::Lazy_exact_nt<CGAL::Gmpq> offs(offset); |
|
| 301 | 306 |
const CgPoly &outer = poly.outer_boundary(); |
| 307 |
+ CgKern kern; |
|
| 302 | 308 |
CgPolyPtrVec outOffPolys = |
| 303 |
- CGAL::create_exterior_skeleton_and_offset_polygons_2(offset, outer); |
|
| 309 |
+ CGAL::create_exterior_skeleton_and_offset_polygons_2( |
|
| 310 |
+ offs, outer, kern, kern); |
|
| 304 | 311 |
/* outer Offset should now contain 2 polygons, |
| 305 | 312 |
the artificially added very outer boundary and the offset polygon */ |
| 306 | 313 |
if (outOffPolys.size() != 2) {
|
| ... | ... |
@@ -315,7 +322,8 @@ bool Polygons::createOuterOffsetPoly(const CgPolyHoles &poly, double offset, |
| 315 | 322 |
CgPoly holeRev = *hole; // reverse orientation (make hole a normal poly) |
| 316 | 323 |
holeRev.reverse_orientation(); |
| 317 | 324 |
CgPolyPtrVec inOffPolys = |
| 318 |
- CGAL::create_interior_skeleton_and_offset_polygons_2(offset, holeRev); |
|
| 325 |
+ CGAL::create_interior_skeleton_and_offset_polygons_2( |
|
| 326 |
+ offs, holeRev, kern, kern); |
|
| 319 | 327 |
CgPolyPtrVec::iterator inOff; // add inner offset polys as new holes |
| 320 | 328 |
for (inOff = inOffPolys.begin(); inOff != inOffPolys.end(); ++inOff) {
|
| 321 | 329 |
(*inOff)->reverse_orientation(); // re-reverse (make poly a hole again) |
| ... | ... |
@@ -342,10 +350,9 @@ void Polygons::PolyToLayer(const CgPoly &poly, Layer &layer) |
| 342 | 350 |
// add all points |
| 343 | 351 |
CgPoly::Vertex_const_iterator v; |
| 344 | 352 |
for (v = poly.vertices_begin(); v != poly.vertices_end(); ++v) |
| 345 |
- path.addPoint(v->x(), v->y()); |
|
| 353 |
+ path.addPoint(CGAL::to_double(v->x()), CGAL::to_double(v->y())); |
|
| 346 | 354 |
// add first point again to close path |
| 347 |
- v = poly.vertices_begin(); |
|
| 348 |
- path.addPoint(v->x(), v->y()); |
|
| 355 |
+ path.addPoint(path.mPoints.front()); |
|
| 349 | 356 |
} |
| 350 | 357 |
|
| 351 | 358 |
/** |
| ... | ... |
@@ -9,7 +9,7 @@ |
| 9 | 9 |
#include <boost/shared_ptr.hpp> |
| 10 | 10 |
#include <vector> |
| 11 | 11 |
|
| 12 |
-#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> |
|
| 12 |
+#include <CGAL/Exact_predicates_exact_constructions_kernel.h> |
|
| 13 | 13 |
#include <CGAL/Polygon_2.h> |
| 14 | 14 |
#include <CGAL/Polygon_with_holes_2.h> |
| 15 | 15 |
#include <CGAL/create_straight_skeleton_from_polygon_with_holes_2.h> |
| ... | ... |
@@ -19,7 +19,7 @@ |
| 19 | 19 |
/// a set of polygons |
| 20 | 20 |
class Polygons {
|
| 21 | 21 |
public: |
| 22 |
- typedef CGAL::Exact_predicates_inexact_constructions_kernel CgKern; |
|
| 22 |
+ typedef CGAL::Exact_predicates_exact_constructions_kernel CgKern; |
|
| 23 | 23 |
|
| 24 | 24 |
typedef CgKern::Point_2 CgPoint; |
| 25 | 25 |
typedef CGAL::Polygon_2<CgKern> CgPoly; |
| 26 | 26 |