1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
#pragma once
#include "ofMain.h"
#include "ofxGui.h"
#include "ofxSVG.h"
#include "ofxClipper.h"
#include "ofxPONK.h"
#include "lineTransformer.h"
#include "lineSegmenter.h"
static ofVec2f DISPLAYSIZE(200,200);
class vectorPanel {
public:
vectorPanel(
string _title="",
ofVec2f _size=DISPLAYSIZE,
ofVec2f _pos=ofPoint(5,5))
{
size=_size;
position=_pos;
panel.setup(_title,"",0,size.y+5);
}
void draw(){
ofPushMatrix();
ofTranslate(position);
ofSetColor(255);
ofNoFill();
ofDrawRectangle(0,0,size.x,size.y);
panel.draw();
ofPushMatrix();
ofTranslate(size/2);
ofScale(DISPLAYSIZE.x/2.0f);
vector<colourPolyline> lines=getLines();
for (auto& line:lines){
line.draw();
}
ofPopMatrix();
ofPopMatrix();
}
virtual vector<colourPolyline> getLines() {};
protected:
ofVec2f size;
ofPoint position;
ofxPanel panel;
};
class defaultPanel: public vectorPanel{
//the minimum panel that can be instanced
public:
defaultPanel(
string _title="",
ofVec2f _size=DISPLAYSIZE,
ofVec2f _pos=ofPoint(5,5)
) : vectorPanel(_title,_size,_pos){}
vector<colourPolyline> getLines(){
vector<colourPolyline> output;
return output;
}
};
class svgPanel: public vectorPanel{
public:
svgPanel(
string _title="",
ofVec2f _size=DISPLAYSIZE,
ofVec2f _pos=ofPoint(5,5)
) : vectorPanel(_title,_size,_pos){
//panel.add(ofxLabel().setup("SHAPES",""));
panel.add(shapes_randomise.set("randomise",false));
panel.add(generate_shapes.set("generate",false));
panel.add(shapes_amount.set("amount",0.2,0.0,1.0));
panel.add(shapes_duration.set("duration",5.0,0,10.0));
panel.add(use_segmenter.set("SEGMENTER",false));
panel.add(shapes_randomise.set("randomise",false));
panel.add(segmenter_speed.set("speed",0.2,-1.0,1.0));
panel.add(segmenter_length.set("length",0.2,0.0,1.0));
panel.add(segmenter_number.set("number",1,1,8));
}
void load(string filename);
void select_random_shapes(float duration,bool generate);
vector<colourPolyline> getAllLines();
vector<colourPolyline> getLines();
private:
//ofxFloatSlider contour_simplify;
//svg gui
ofParameter<bool> shapes_randomise;
ofParameter<bool> generate_shapes; //manual version of audio driven version
ofParameter<float> shapes_amount;
ofParameter<float> shapes_duration;
//ofxToggle use_mask;
//ofxToggle invert_mask;
//segmenter
ofParameter<bool> use_segmenter;
//ofxToggle colour_segmenter;
ofParameter<float> segmenter_speed;
ofParameter<float> segmenter_length;
ofParameter<int> segmenter_number;
vector <colourLineSegmenter> segmenters;
vector <float> shape_selection_durations;
set <int> shape_selection;
int framecounter;
float phase; //,prev_time; //to calculate phase
//float rotate_amt;
//float scale_phase,scale_amt;
float last_frame_time;
};
|