#pragma once #include "ofMain.h" #include "ofxGui.h" #include "ofxSVG.h" #include "ofxClipper.h" #include "ofxPONK.h" #include "lineTransformer.h" #include "lineSegmenter.h" #include "vectorText.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,"",_pos.x,_pos.y+size.y+5); } void draw(){ panel.draw(); ofPushMatrix(); ofTranslate(position); ofSetColor(255); ofNoFill(); ofDrawRectangle(0,0,size.x,size.y); ofPushMatrix(); ofTranslate(size/2); ofScale(DISPLAYSIZE.x/2.0f); vector lines=getOutput(); for (auto& line:lines){ line.draw(); } ofPopMatrix(); ofPopMatrix(); } vector getOutput() {return getLines();}; virtual vector getLines() {}; virtual void update() {}; 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 getLines(){ vector output; return output; } void update(){}; }; class transformPanel: public vectorPanel{ //a base class which supports transformation public: transformPanel( string _title="", ofVec2f _size=DISPLAYSIZE, ofVec2f _pos=ofPoint(5,5) ) : vectorPanel(_title,_size,_pos){ origin=ofPoint(0,0); rotation=0; panel.add(use_rotate.set("rotate",false)); panel.add(rotation_delta.set("rotation",0.1,-2.0,2.0)); } void update(){ timedelta=ofGetElapsedTimef()-last_frame_time; last_frame_time=ofGetElapsedTimef(); if (use_rotate) rotation+=rotation_delta*timedelta; }; vector getOutput(){ vector lines=getLines(); if (use_rotate){ ofMatrix4x4 rm = ofMatrix4x4::newIdentityMatrix(); rm.rotateRad(rotation,0,0,1); //if (use_scale){ // rm.scale(scale_amt,scale_amt,scale_amt); //} //rm.translate(outputWindowSize.x/2,outputWindowSize.y/2,0); vector transformedLines; for (auto& line:lines){ transformedLines.push_back(lineTransformer::polyLineTransform(rm,line)); } return transformedLines; } return lines; }; protected: ofPoint origin; float rotation; ofParameter use_rotate; ofParameter rotation_delta; float last_frame_time, timedelta; }; /* next- enable transform offsets crop for display transformers easy midi */ class svgPanel: public transformPanel{ public: svgPanel( string _title="", ofVec2f _size=DISPLAYSIZE, ofVec2f _pos=ofPoint(5,5) ) : transformPanel(_title,_size,_pos){ panel.add(shapeslabel.setup("SHAPES","")); panel.add(shapes_randomise.set("randomise",false)); //panel.add(shapes_generate.setup("generate")); 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(segmenterlabel.setup("SEGMENTER","")); panel.add(use_segmenter.set("enable",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)); //shapes_generate.addListener(this,&svgPanel::generate_shapes); } void load(string filename); void select_random_shapes(); void update_random_shapes(bool generate); vector getAllLines(); vector getLines(); void update(){ transformPanel::update(); phase=fmod(phase+(timedelta*segmenter_speed),1); while(phase<0) phase+=1.0f; } private: //ofxFloatSlider contour_simplify; ofxLabel shapeslabel; //svg gui ofParameter shapes_randomise; ofxButton shapes_generate; ofParameter shapes_amount; ofParameter shapes_duration; //ofxToggle use_mask; //ofxToggle invert_mask; //segmenter ofxLabel segmenterlabel; ofParameter use_segmenter; //ofxToggle colour_segmenter; ofParameter segmenter_speed; ofParameter segmenter_length; ofParameter segmenter_number; vector segmenters; vector shape_selection_durations; set shape_selection; int framecounter; float phase; //,prev_time; //to calculate phase //float rotate_amt; //float scale_phase,scale_amt; }; class textPanel: public vectorPanel{ public: textPanel( string _title="", ofVec2f _size=DISPLAYSIZE, ofVec2f _pos=ofPoint(5,5) ) : vectorPanel(_title,_size,_pos){ panel.add(use_beat.set("use beat", false)); panel.add(beat_duration.set("duration factor", 0.5f, 0.0f, 1.0f)); panel.add(text_speed.set("speed", 5.0f, 0.0f, 25.0f)); panel.add(text_scale.set("scale", 0.1f, 0.0f, 0.5f)); panel.add(enable_anim.set("animate", false)); panel.add(anim_rev.set("reverse", false)); panel.add(vert_pos.set("vert_pos", 0.0f, -0.3f, 0.3f)); panel.add(vert_spread.set("vert_spread", 0.0f, -0.3f, 0.3f)); } vector getLines(){ vector output; return output; } protected: ofParameter use_beat; ofParameter beat_duration; ofParameter text_speed; ofParameter text_scale; ofParameter enable_anim; ofParameter anim_rev; ofParameter vert_pos; ofParameter vert_spread; glyphbanner text; }; /* class textgui : public ofxPanel{ public: ofParameter use_beat; ofParameter beat_duration; ofParameter text_speed; ofParameter text_scale; ofParameter enable_anim; ofParameter anim_rev; ofParameter vert_pos; ofParameter vert_spread; glyphbanner text; int onset_frame; void loadfile(const string & f){ if (!strcmp(strchr(f.c_str(), '\0') - 4, ".plt")){ text.loadPalette(f); } else { text.load(f); } } void setup(int x, int y){ //text.loadFont("fonts/EMSSpaceRocks.svg"); text.loadFont("fonts/EMSOsmotron.svg"); ofxPanel::setup("text","",x,y); ofxPanel::add(use_beat.set("use beat", false)); ofxPanel::add(beat_duration.set("duration factor", 0.5f, 0.0f, 1.0f)); ofxPanel::add(text_speed.set("speed", 5.0f, 0.0f, 25.0f)); ofxPanel::add(text_scale.set("scale", 0.1f, 0.0f, 0.5f)); ofxPanel::add(enable_anim.set("animate", false)); ofxPanel::add(anim_rev.set("reverse", false)); ofxPanel::add(vert_pos.set("vert_pos", 0.0f, -0.3f, 0.3f)); ofxPanel::add(vert_spread.set("vert_spread", 0.0f, -0.3f, 0.3f)); } void update(int oframe=0){ onset_frame=oframe; text.update(text_speed,true); } void drawgui(int oframe=0){ onset_frame=oframe; ofxPanel::draw(); } void createWords(string t){ text.createWords(t); } vector& getOutlines(float x=0, float y=0){ return text.getOutlines(text_scale,STYLE_OVERLAPPING,x,y+(ofGetHeight()*vert_pos),enable_anim,anim_rev,vert_spread,use_beat,beat_duration); } }; */