#include "ofApp.h" #include "glew.h" vector cmdnames={"moveTo","lineTo","curveTo","bezierTo","quadBezierTo","arc","arcNegative","close"}; //-------------------------------------------------------------- void ofApp::setup(){ ofxSVG svg; svg.load("bars.svg"); imagepaths= svg.getPaths(); for (int i=0;i outlines= imagepaths[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 " << maskpaths.size() << " paths with " << mask.size() << " shapes" <getSegments(numsegments,coverage,phase); for (auto segment=segments.begin();segment!=segments.end();segment++){ segment->draw(); segmentsdrawn+=1; pointsdrawn+=segment->size(); } } break; } case 1:{ 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::ctIntersection); 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:{ vector shapes; ofMatrix4x4 rm = ofMatrix4x4::newIdentityMatrix(); rm.translate(-600,-450,0); rm.rotateRad(ofGetElapsedTimef(),0,0,1); rm.translate(600,450,0); for (auto& segment:segmenters){ shapes.push_back(polyLineTransform(segment.getPoly(),rm)); } clipper.addPolylines(shapes,ClipperLib::ptSubject); vector clipped = clipper.getClippedLines(ClipperLib::ctIntersection); for (auto& clip: clipped) { clip.draw(); segmentsdrawn++; pointsdrawn+=clip.size(); } break; } case 4:{ vector clipped = clipper.getOffsets(maskpaths,((sin(ofGetElapsedTimef())+1)*5)+1,true); for (auto& clip: clipped) { clip.draw(); segmentsdrawn++; pointsdrawn+=clip.size(); } break; } case 5:{ vector clipped = clipper.getOffsets(maskpaths,(phase*20)+1,true); vector simplified = clipper.simplifyPolylines(clipped); ofSetColor(255*(1.0f-phase),255*(1.0f-phase),255*(1.0f-phase)); for (auto& clip: simplified) { clip.draw(); segmentsdrawn++; pointsdrawn+=clip.size(); } float phase1=fmod(phase+0.5f,1.0f); clipped.clear(); clipped = clipper.getOffsets(maskpaths,(phase1*20)+1,true); simplified.clear(); simplified = clipper.simplifyPolylines(clipped); ofSetColor(255*(1.0f-phase1),255*(1.0f-phase1),255*(1.0f-phase1)); for (auto& clip: simplified) { clip.draw(); segmentsdrawn++; pointsdrawn+=clip.size(); } break; } case 6:{ vector shapes; for (auto& shape: mask) { shape.close(); shapes.push_back(shape); } vector clipped = clipper.getOffsets(shapes,((sin(ofGetElapsedTimef())+1)*5)+1); vector simplified = clipper.simplifyPolylines(clipped); for (auto& clip: simplified) { clip.draw(); segmentsdrawn++; pointsdrawn+=clip.size(); } break; } case 7:{ int w=ofRandom(1000); segmenters[w%segmenters.size()].draw(); segmentsdrawn=1; pointsdrawn+=segmenters[w%segmenters.size()].size(); break; } } /* ofxSVG svg; svg.load("lorenzos.svg"); vector paths= svg.getPaths(); for (auto& l:paths) l.draw(); */ std::stringstream strm; strm << "mode: " << mode << " segments: "<