void _clipper(ClipperLib::ClipType clipType, const Slic3r::Polygons &subject, const Slic3r::Polygons &clip, Slic3r::Polygons* retval, bool safety_offset_) { // perform operation ClipperLib::Paths output; _clipper_do<ClipperLib::Paths>(clipType, subject, clip, &output, ClipperLib::pftNonZero, safety_offset_); // convert into Polygons ClipperPaths_to_Slic3rMultiPoints(output, retval); }
void offset(const Slic3r::Polygons &polygons, Slic3r::Polygons &retval, const float delta, double scale, ClipperLib::JoinType joinType, double miterLimit) { // perform offset ClipperLib::Paths output; offset(polygons, output, delta, scale, joinType, miterLimit); // convert into ExPolygons ClipperPaths_to_Slic3rMultiPoints(output, retval); }
void offset2(const Slic3r::Polygons &polygons, Slic3r::Polygons* retval, const float delta1, const float delta2, const ClipperLib::JoinType joinType, const double miterLimit) { // perform offset ClipperLib::Paths output; offset2(polygons, &output, delta1, delta2, joinType, miterLimit); // convert into ExPolygons ClipperPaths_to_Slic3rMultiPoints(output, retval); }
void _clipper(ClipperLib::ClipType clipType, const Slic3r::Polylines &subject, const Slic3r::Polygons &clip, Slic3r::Polylines &retval) { // perform operation ClipperLib::PolyTree polytree; _clipper_do(clipType, subject, clip, polytree, ClipperLib::pftNonZero); // convert into Polygons ClipperLib::Paths output; ClipperLib::PolyTreeToPaths(polytree, output); ClipperPaths_to_Slic3rMultiPoints(output, retval); }
void offset2(const Slic3r::Polygons &polygons, Slic3r::Polygons &retval, const float delta1, const float delta2, const double scale, const ClipperLib::JoinType joinType, const double miterLimit) { // perform offset ClipperLib::Paths* output = new ClipperLib::Paths(); offset2(polygons, *output, delta1, delta2, scale, joinType, miterLimit); // convert into ExPolygons ClipperPaths_to_Slic3rMultiPoints(*output, retval); delete output; }
Slic3r::Polygons offset(const Slic3r::ExPolygons &expolygons, const float delta, ClipperLib::JoinType joinType, double miterLimit) { // perform offset ClipperLib::Paths output; offset(expolygons, &output, delta, joinType, miterLimit); // convert into ExPolygons Slic3r::Polygons retval; ClipperPaths_to_Slic3rMultiPoints(output, &retval); return retval; }
void _clipper(ClipperLib::ClipType clipType, const Slic3r::Polylines &subject, const Slic3r::Polygons &clip, Slic3r::Polylines* retval, bool safety_offset_) { PROFILE_FUNC(); // perform operation ClipperLib::PolyTree polytree; _clipper_do(clipType, subject, clip, &polytree, ClipperLib::pftNonZero, safety_offset_); // convert into Polylines ClipperLib::Paths output; ClipperLib::PolyTreeToPaths(polytree, output); ClipperPaths_to_Slic3rMultiPoints(output, retval); }
void simplify_polygons(const Slic3r::Polygons &subject, Slic3r::Polygons &retval) { // convert into Clipper polygons ClipperLib::Paths* input_subject = new ClipperLib::Paths(); Slic3rMultiPoints_to_ClipperPaths(subject, *input_subject); ClipperLib::Paths* output = new ClipperLib::Paths(); ClipperLib::SimplifyPolygons(*input_subject, *output, ClipperLib::pftNonZero); delete input_subject; // convert into Slic3r polygons ClipperPaths_to_Slic3rMultiPoints(*output, retval); delete output; }
void simplify_polygons(const Slic3r::Polygons &subject, Slic3r::Polygons* retval, bool preserve_collinear) { // convert into Clipper polygons ClipperLib::Paths input_subject, output; Slic3rMultiPoints_to_ClipperPaths(subject, &input_subject); if (preserve_collinear) { ClipperLib::Clipper c; c.PreserveCollinear(true); c.StrictlySimple(true); c.AddPaths(input_subject, ClipperLib::ptSubject, true); c.Execute(ClipperLib::ctUnion, output, ClipperLib::pftNonZero, ClipperLib::pftNonZero); } else { ClipperLib::SimplifyPolygons(input_subject, output, ClipperLib::pftNonZero); } // convert into Slic3r polygons ClipperPaths_to_Slic3rMultiPoints(output, retval); }