From 05be256f7b2c106101ec990a06e7dbf474ff9dda Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Sat, 20 Jan 2018 01:16:15 +0000 Subject: correct clipping mask --- drawing/src/ofApp.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 8 deletions(-) (limited to 'drawing/src/ofApp.cpp') 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 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" < outlines= paths[i].getOutline(); - for (int j=0;j outlines= path.getOutline(); + for (auto& outline:outlines){ + mask.push_back(outline); + } + /* + vector 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" < clipped = clipper.getClippedLines(ClipperLib::ctIntersection); - segmentsdrawn=clipped.size(); for (auto& clip: clipped) { clip.draw(); + segmentsdrawn++; pointsdrawn+=clip.size(); } + break; } case 2:{ + vector 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 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 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; } } -- cgit v1.2.3