summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nextus/src/lineClipper.cpp33
-rw-r--r--nextus/src/lineClipper.h19
-rw-r--r--nextus/src/vectorPlugin.h5
3 files changed, 57 insertions, 0 deletions
diff --git a/nextus/src/lineClipper.cpp b/nextus/src/lineClipper.cpp
new file mode 100644
index 0000000..bbfa9eb
--- /dev/null
+++ b/nextus/src/lineClipper.cpp
@@ -0,0 +1,33 @@
+#include "lineClipper.h"
+
+vector <colourPolyline> lineClipper::mask(
+ vector <colourPolyline> shapes,
+ vector <ofPolyline> mask,
+ bool invert
+ )
+{
+ vector <colourPolyline> output;
+
+ ofx::Clipper clipper;
+
+ for (auto& shape: shapes)
+ {
+ clipper.Clear();
+ clipper.addPolylines(mask, ClipperLib::ptClip);
+ vector <ofPolyline> polys; //TODO make clipper clip colourpolylines
+ shapes.push_back(shape);
+ clipper.addPolylines(polys,ClipperLib::ptSubject);
+ vector <ofPolyline> clipped;
+ if (invert){
+ clipped = clipper.getClipped(ClipperLib::ctDifference);
+ }else {
+ clipped = clipper.getClipped(ClipperLib::ctIntersection);
+ }
+ for (auto& clip: clipped)
+ {
+ //clip.simplify(contour_simplify);
+ output.push_back(colourPolyline(clip,shape.getColourAt(0)));
+ }
+ }
+ return output;
+} \ No newline at end of file
diff --git a/nextus/src/lineClipper.h b/nextus/src/lineClipper.h
new file mode 100644
index 0000000..d8b7fdd
--- /dev/null
+++ b/nextus/src/lineClipper.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "ofMain.h"
+#include "ofxClipper.h"
+
+#include "colourPolyline.h"
+
+
+class lineClipper {
+ public:
+ lineClipper(){
+ }
+ vector <colourPolyline> static mask(
+ vector <colourPolyline> shapes,
+ vector <ofPolyline> mask,
+ bool invert=false);
+};
+
+ \ No newline at end of file
diff --git a/nextus/src/vectorPlugin.h b/nextus/src/vectorPlugin.h
index 047d836..3d01d07 100644
--- a/nextus/src/vectorPlugin.h
+++ b/nextus/src/vectorPlugin.h
@@ -7,6 +7,7 @@
#include "ofxPONK.h"
#include "lineTransformer.h"
#include "lineSegmenter.h"
+#include "lineClipper.h"
#include "vectorText.h"
static ofVec2f DISPLAYSIZE(200,200);
@@ -39,6 +40,9 @@ class vectorPanel {
ofPopMatrix();
ofPopMatrix();
}
+ vector<colourPolyline> clipOutput() {
+ return getOut();
+ };
vector<colourPolyline> getOutput() {return getLines();};
virtual vector<colourPolyline> getLines() {};
virtual void update() {};
@@ -47,6 +51,7 @@ class vectorPanel {
ofVec2f size;
ofPoint position;
ofxPanel panel;
+ vector <ofPolyline> frame;
};
class defaultPanel: public vectorPanel{