diff options
Diffstat (limited to 'drawing/src')
| -rw-r--r-- | drawing/src/lineSegmenter.cpp | 4 | ||||
| -rw-r--r-- | drawing/src/lineSegmenter.h | 1 | ||||
| -rw-r--r-- | drawing/src/main.cpp | 4 | ||||
| -rw-r--r-- | drawing/src/ofApp.cpp | 56 | ||||
| -rw-r--r-- | drawing/src/ofApp.h | 5 |
5 files changed, 52 insertions, 18 deletions
diff --git a/drawing/src/lineSegmenter.cpp b/drawing/src/lineSegmenter.cpp index 47a9d62..7e0af7a 100644 --- a/drawing/src/lineSegmenter.cpp +++ b/drawing/src/lineSegmenter.cpp @@ -58,6 +58,10 @@ void lineSegmenter::draw(){ line.draw(); return; } +int lineSegmenter::size(){ + return line.size(); +} + /* diff --git a/drawing/src/lineSegmenter.h b/drawing/src/lineSegmenter.h index 25f3d55..5b2aab3 100644 --- a/drawing/src/lineSegmenter.h +++ b/drawing/src/lineSegmenter.h @@ -12,6 +12,7 @@ class lineSegmenter{ } const vector <ofPolyline> &getSegments(int num,float coverage, float phase); void draw(); + int size(); private: ofPolyline line; vector <ofPolyline> segments; diff --git a/drawing/src/main.cpp b/drawing/src/main.cpp index f9ba23c..50ef9f2 100644 --- a/drawing/src/main.cpp +++ b/drawing/src/main.cpp @@ -9,8 +9,8 @@ int main(int argc, char *argv[]){ ofGLFWWindowSettings settings; - settings.width = 600; - settings.height = 800; + settings.width = 1200; + settings.height = 900; shared_ptr<ofAppBaseWindow> mainWindow = ofCreateWindow(settings); diff --git a/drawing/src/ofApp.cpp b/drawing/src/ofApp.cpp index 43069d2..e888d4d 100644 --- a/drawing/src/ofApp.cpp +++ b/drawing/src/ofApp.cpp @@ -9,18 +9,24 @@ void ofApp::setup(){ vector <ofPath> 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++){ + segmenters.push_back(lineSegmenter(outlines[j])); + } + } - paths[i].setMode(ofPath::COMMANDS); + cout << "Drawing: found " << paths.size() << " paths with " << segmenters.size() << " shapes" <<std::endl; + 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++){ - segmenters.push_back(lineSegmenter(outlines[j])); + mask.push_back(outlines[j]); } - } - cout << "Found " << paths.size() << " paths with " << segmenters.size() << " shapes" <<std::endl; + cout << "Mask: found " << paths.size() << " paths with " << mask.size() << " shapes" <<std::endl; numsegments=1; coverage=0.5; @@ -33,8 +39,9 @@ void ofApp::setup(){ //-------------------------------------------------------------- void ofApp::update(){ + clipper.Clear(); - + clipper.addPolylines(mask, ClipperLib::ptClip); } @@ -44,34 +51,53 @@ void ofApp::draw(){ ofBackground(0,0,0); ofSetColor(255,255,255); - glTranslatef(-80,-130,0); - int segmentsdrawn=0; + int pointsdrawn=0; + + float phase=fmod(ofGetElapsedTimef()/2,1); switch (mode){ case 0:{ - float phase=fmod(ofGetElapsedTimef(),1); - - - 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++){ segment->draw(); - segmentsdrawn++; + segmentsdrawn+=1; + pointsdrawn+=segment->size(); } } + break; } case 1:{ + 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.getClipped(ClipperLib::ctIntersection); + segmentsdrawn=clipped.size(); + for (auto& clip: clipped) + { + clip.draw(); + pointsdrawn+=clip.size(); + } + } + case 2:{ int w=ofRandom(1000); segmenters[w%segmenters.size()].draw(); + segmentsdrawn=1; + pointsdrawn+=segmenters[w%segmenters.size()].size(); + break; } } std::stringstream strm; - strm << "segments: "<<segmentsdrawn; + strm << "segments: "<<segmentsdrawn<< " points: "<<pointsdrawn; ofSetWindowTitle(strm.str()); mainOutputSyphonServer.publishScreen(); @@ -115,7 +141,7 @@ void ofApp::keyReleased(int key){ break; } case 'p':{ - mode=(mode==1?0:1); + mode=(mode+1)%3; break; } } diff --git a/drawing/src/ofApp.h b/drawing/src/ofApp.h index 32b848c..ae4c1a3 100644 --- a/drawing/src/ofApp.h +++ b/drawing/src/ofApp.h @@ -3,7 +3,7 @@ #include "ofMain.h" #include "ofxSvg.h" #include "lineSegmenter.h" - +#include "ofxClipper.h" #include "ofxSyphon.h" @@ -33,11 +33,14 @@ class ofApp : public ofBaseApp{ void gotMessage(ofMessage msg); vector <lineSegmenter> segmenters; + vector <ofPolyline> mask; int numsegments; float coverage; int mode; + ofx::Clipper clipper; + ofxSyphonServer mainOutputSyphonServer; }; |
