summaryrefslogtreecommitdiff
path: root/drawing/src
diff options
context:
space:
mode:
authorTim Redfern <tim@getdrop.com>2018-01-20 01:16:15 +0000
committerTim Redfern <tim@getdrop.com>2018-01-20 01:16:15 +0000
commit05be256f7b2c106101ec990a06e7dbf474ff9dda (patch)
treea8380f98ef27b90ce740cd007f72662b1a12221c /drawing/src
parentfa21034b7548ab0c1553f57caa6208b90cf28bdf (diff)
correct clipping mask
Diffstat (limited to 'drawing/src')
-rw-r--r--drawing/src/ofApp.cpp59
1 files changed, 51 insertions, 8 deletions
diff --git a/drawing/src/ofApp.cpp b/drawing/src/ofApp.cpp
index 89b7b97..28bca20 100644
--- a/drawing/src/ofApp.cpp
+++ b/drawing/src/ofApp.cpp
@@ -2,6 +2,8 @@
#include "glew.h"
+vector<std::string> cmdnames={"moveTo","lineTo","curveTo","bezierTo","quadBezierTo","arc","arcNegative","close"};
+
//--------------------------------------------------------------
void ofApp::setup(){
ofxSVG svg;
@@ -17,13 +19,30 @@ void ofApp::setup(){
cout << "Drawing: found " << paths.size() << " paths with " << segmenters.size() << " shapes" <<std::endl;
- svg.load("shapes.svg");
+ svg.load("lorenzo.svg");
paths= svg.getPaths();
- for (int i=0;i<paths.size();i++){
- vector <ofPolyline> outlines= paths[i].getOutline();
- for (int j=0;j<outlines.size();j++){
- mask.push_back(outlines[j]);
+
+ for (auto& path:paths){
+ //paths[i].setMode(ofPath::COMMANDS);
+ path.setPolyWindingMode(OF_POLY_WINDING_ODD);
+
+ vector <ofPolyline> outlines= path.getOutline();
+ for (auto& outline:outlines){
+ mask.push_back(outline);
+ }
+ /*
+ vector<ofPath::Command> cmds=paths[i].getCommands();
+
+ std::stringstream strm;
+ strm << "Mask: found " << cmds.size() << " commands (";
+ for (auto& cmd:cmds){
+ strm << cmdnames[cmd.type] <<",";
}
+
+ strm << ")" << std::endl;
+ cout << strm.str();
+ */
+
}
cout << "Mask: found " << paths.size() << " paths with " << mask.size() << " shapes" <<std::endl;
@@ -78,14 +97,33 @@ void ofApp::draw(){
}
clipper.addPolylines(shapes,ClipperLib::ptSubject);
vector<ofPolyline> clipped = clipper.getClippedLines(ClipperLib::ctIntersection);
- segmentsdrawn=clipped.size();
for (auto& clip: clipped)
{
clip.draw();
+ segmentsdrawn++;
pointsdrawn+=clip.size();
}
+ break;
}
case 2:{
+ vector <ofPolyline> shapes;
+ for (auto shape=segmenters.begin();shape!=segmenters.end();shape++){
+ auto segments=shape->getSegments(numsegments,coverage,phase);
+ for (auto segment=segments.begin();segment!=segments.end();segment++){
+ shapes.push_back(*segment);
+ }
+ }
+ clipper.addPolylines(shapes,ClipperLib::ptSubject);
+ vector<ofPolyline> clipped = clipper.getClippedLines(ClipperLib::ctDifference);
+ for (auto& clip: clipped)
+ {
+ clip.draw();
+ segmentsdrawn++;
+ pointsdrawn+=clip.size();
+ }
+ break;
+ }
+ case 3:{
int w=ofRandom(1000);
segmenters[w%segmenters.size()].draw();
segmentsdrawn=1;
@@ -93,7 +131,12 @@ void ofApp::draw(){
break;
}
}
-
+ /*
+ ofxSVG svg;
+ svg.load("lorenzos.svg");
+ vector <ofPath> paths= svg.getPaths();
+ for (auto& l:paths) l.draw();
+ */
std::stringstream strm;
@@ -141,7 +184,7 @@ void ofApp::keyReleased(int key){
break;
}
case 'p':{
- mode=(mode+1)%3;
+ mode=(mode+1)%4;
break;
}
}