diff options
| author | Tim Redfern <tim@getdrop.com> | 2023-04-23 23:22:38 +0100 |
|---|---|---|
| committer | Tim Redfern <tim@getdrop.com> | 2023-04-23 23:22:38 +0100 |
| commit | 9e0236016f5d6afd3a73edad183dfb2b02387e98 (patch) | |
| tree | 5589b5010a1de6eed1650493e812179b84e6e3c6 /nextus/src/lineClipper.cpp | |
| parent | cdb92d8c8532a287b752a92f1cf0cbf88d52c117 (diff) | |
many fixes for Nextus show at the complex April 22 2023
Diffstat (limited to 'nextus/src/lineClipper.cpp')
| -rw-r--r-- | nextus/src/lineClipper.cpp | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/nextus/src/lineClipper.cpp b/nextus/src/lineClipper.cpp index eb9c480..135e840 100644 --- a/nextus/src/lineClipper.cpp +++ b/nextus/src/lineClipper.cpp @@ -1,36 +1,50 @@ #include "lineClipper.h" -vector <colourPolyline> lineClipper::mask( +/* +PONK coords are normalised -1<x<1 +this scales everything by 10^4 to allow integer math to work +on shapes at screen res +*/ + +#define SCALE_FROM_OF 10000 +#define SCALE_TO_OF 0.0001 + +vector <colourPolyline> lineClipper::clip( vector <colourPolyline> shapes, - ofRectangle frame, + ofPolyline mask, bool invert ) { + //this supports one colour per polyline vector <colourPolyline> output; - ofx::Clipper clipper; - - clipper.Clear(); - clipper.addRectangle(frame, ClipperLib::ptClip, true); - vector <ofPolyline> polys; //TODO make clipper clip colourpolylines + if (shapes.size()){ - for (auto& shape: shapes) polys.push_back(shape); - - clipper.addPolylines(polys,ClipperLib::ptSubject); + ofx::Clipper clipper; - vector <ofPolyline> clipped; + mask.scale(SCALE_FROM_OF,SCALE_FROM_OF); - if (invert){ - clipped = clipper.getClipped(ClipperLib::ctDifference); - }else { - clipped = clipper.getClipped(ClipperLib::ctIntersection); - } + for (auto& shape: shapes) { - for (auto& clip: clipped) - { - //clip.simplify(contour_simplify); - output.push_back(colourPolyline(clip,shapes[0].getColourAt(0))); - } + clipper.Clear(); + clipper.addPolyline(mask, ClipperLib::ptClip); + shape.scale(SCALE_FROM_OF,SCALE_FROM_OF); + clipper.addPolyline(shape,ClipperLib::ptSubject); + vector <ofPolyline> clipped; + if (invert){ + clipped = clipper.getClippedLines(ClipperLib::ctDifference); + }else { + clipped = clipper.getClippedLines(ClipperLib::ctIntersection); + } + + for (auto& clip: clipped) + { + //clip.simplify(contour_simplify); + clip.scale(SCALE_TO_OF,SCALE_TO_OF); + output.push_back(colourPolyline(clip,shape.getColourAt(0))); + } + } + } return output; }
\ No newline at end of file |
