#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:{ //the N only fucks up when the other shapes are drawn! vector clipped; for (auto & maskpath:maskpaths){ auto clips=clipper.getOffsets(maskpath,-((phase*20)+1),true); clipped.insert(clipped.end(),clips.begin(),clips.end()); } 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,-((phase*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: { movie.update(); if (movie.isFrameNew()){ colorImg.setFromPixels(movie.getPixels()); grayImage = colorImg; grayImage.threshold(threshold); contourFinder.findContours(grayImage, 20, (340*240)/3, 10, true); } vector shapes; for (int i = 0; i < contourFinder.nBlobs; i++){ ofPolyline shape; for (auto& point:contourFinder.blobs[i].pts){ shape.addVertex(point); } shapes.push_back(shape); segmentsdrawn++; pointsdrawn+=shape.size(); contourFinder.blobs[i].draw(0,0); } break; } case 8:{ 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: "<