summaryrefslogtreecommitdiff
path: root/nextus/src
diff options
context:
space:
mode:
authorTim Redfern <redfernt@gmail.com>2023-04-20 22:44:47 +0100
committerTim Redfern <redfernt@gmail.com>2023-04-20 22:44:47 +0100
commitcdb92d8c8532a287b752a92f1cf0cbf88d52c117 (patch)
tree778002c5eef99d7d4b1f3f438f0668100985c4ad /nextus/src
parent4c12e758b280388426ca8070b80028031d75d054 (diff)
WIP trying to clip
Diffstat (limited to 'nextus/src')
-rw-r--r--nextus/src/lineClipper.cpp41
-rw-r--r--nextus/src/lineClipper.h2
-rw-r--r--nextus/src/ofApp.cpp2
-rw-r--r--nextus/src/vectorPlugin.h28
4 files changed, 50 insertions, 23 deletions
diff --git a/nextus/src/lineClipper.cpp b/nextus/src/lineClipper.cpp
index bbfa9eb..eb9c480 100644
--- a/nextus/src/lineClipper.cpp
+++ b/nextus/src/lineClipper.cpp
@@ -2,32 +2,35 @@
vector <colourPolyline> lineClipper::mask(
vector <colourPolyline> shapes,
- vector <ofPolyline> mask,
+ ofRectangle frame,
bool invert
)
{
vector <colourPolyline> output;
ofx::Clipper clipper;
+
+ clipper.Clear();
+ clipper.addRectangle(frame, ClipperLib::ptClip, true);
+ vector <ofPolyline> polys; //TODO make clipper clip colourpolylines
+
+ for (auto& shape: shapes) polys.push_back(shape);
+
+ clipper.addPolylines(polys,ClipperLib::ptSubject);
- 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)));
- }
+ 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,shapes[0].getColourAt(0)));
}
+
return output;
} \ No newline at end of file
diff --git a/nextus/src/lineClipper.h b/nextus/src/lineClipper.h
index d8b7fdd..7b098a1 100644
--- a/nextus/src/lineClipper.h
+++ b/nextus/src/lineClipper.h
@@ -12,7 +12,7 @@ class lineClipper {
}
vector <colourPolyline> static mask(
vector <colourPolyline> shapes,
- vector <ofPolyline> mask,
+ ofRectangle frame,
bool invert=false);
};
diff --git a/nextus/src/ofApp.cpp b/nextus/src/ofApp.cpp
index f3aee1d..22e3d11 100644
--- a/nextus/src/ofApp.cpp
+++ b/nextus/src/ofApp.cpp
@@ -67,7 +67,7 @@ void ofApp::draw(){
textinput.draw();
//process the pipeline
- vector<colourPolyline> output=textinput.getOutput();
+ vector<colourPolyline> output=textinput.clipOutput();
int points=0;
diff --git a/nextus/src/vectorPlugin.h b/nextus/src/vectorPlugin.h
index 3d01d07..78ce06d 100644
--- a/nextus/src/vectorPlugin.h
+++ b/nextus/src/vectorPlugin.h
@@ -22,6 +22,29 @@ class vectorPanel {
size=_size;
position=_pos;
panel.setup(_title,"",_pos.x,_pos.y+size.y+5);
+
+ /*
+ float f1=-1.0;
+ float f2=1.0;
+ vector<glm::vec3> v1 = {{f1,f1,0},{f2,f1,0}};
+ vector<glm::vec3> v2 = {{f2,f1,0},{f2,f2,0}};
+ vector<glm::vec3> v3 = {{f2,f2,0},{f1,f2,0}};
+ vector<glm::vec3> v4 = {{f1,f2,0},{f1,f1,0}};
+ ofPolyline p1,p2,p3,p4;
+ p1.addVertices(v1);
+ p2.addVertices(v2);
+ p3.addVertices(v3);
+ p4.addVertices(v4);
+ frame.push_back(p1);
+ frame.push_back(p2);
+ frame.push_back(p3);
+ frame.push_back(p4);
+ */
+
+ ofPolyline p=ofPolyline().fromRectangle(ofRectangle(-1.0f,-1.0f,2.0f,2.0f));
+ p.close();
+
+ frame.push_back(p);
}
void draw(){
panel.draw();
@@ -33,7 +56,7 @@ class vectorPanel {
ofPushMatrix();
ofTranslate(size/2);
ofScale(DISPLAYSIZE.x/2.0f);
- vector<colourPolyline> lines=getOutput();
+ vector<colourPolyline> lines=clipOutput();
for (auto& line:lines){
line.draw();
}
@@ -41,7 +64,8 @@ class vectorPanel {
ofPopMatrix();
}
vector<colourPolyline> clipOutput() {
- return getOut();
+ ofLog()<<"frame has "<<frame.size()<<" paths";
+ return lineClipper::mask(getOutput(),ofRectangle(-1.0f,-1.0f,2.0f,2.0f));
};
vector<colourPolyline> getOutput() {return getLines();};
virtual vector<colourPolyline> getLines() {};