summaryrefslogtreecommitdiff
path: root/drawing/src
diff options
context:
space:
mode:
Diffstat (limited to 'drawing/src')
-rw-r--r--drawing/src/lineSegmenter.cpp4
-rw-r--r--drawing/src/lineSegmenter.h1
-rw-r--r--drawing/src/main.cpp4
-rw-r--r--drawing/src/ofApp.cpp56
-rw-r--r--drawing/src/ofApp.h5
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;
};