diff options
Diffstat (limited to 'drawing/src')
| -rw-r--r-- | drawing/src/ofApp.cpp | 59 |
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; } } |
