summaryrefslogtreecommitdiff
path: root/nextus/src/lineClipper.cpp
diff options
context:
space:
mode:
authorTim Redfern <tim@getdrop.com>2023-04-23 23:22:38 +0100
committerTim Redfern <tim@getdrop.com>2023-04-23 23:22:38 +0100
commit9e0236016f5d6afd3a73edad183dfb2b02387e98 (patch)
tree5589b5010a1de6eed1650493e812179b84e6e3c6 /nextus/src/lineClipper.cpp
parentcdb92d8c8532a287b752a92f1cf0cbf88d52c117 (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.cpp56
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