diff options
| -rw-r--r-- | pluginchooser/src/ofApp.cpp | 2 | ||||
| -rw-r--r-- | pluginchooser/src/pluginpanel.h | 81 |
2 files changed, 64 insertions, 19 deletions
diff --git a/pluginchooser/src/ofApp.cpp b/pluginchooser/src/ofApp.cpp index 1980be4..351c429 100644 --- a/pluginchooser/src/ofApp.cpp +++ b/pluginchooser/src/ofApp.cpp @@ -12,7 +12,7 @@ void ofApp::setup(){ } void ofApp::update(){ - + plugingui.update(); } void ofApp::draw(){ diff --git a/pluginchooser/src/pluginpanel.h b/pluginchooser/src/pluginpanel.h index 6e8e07d..82c7e46 100644 --- a/pluginchooser/src/pluginpanel.h +++ b/pluginchooser/src/pluginpanel.h @@ -14,32 +14,78 @@ struct float_param { class loader { public: - loader(string _n,AChaosBase *_plugin,vector<float_param> _params={}){ + loader(string _n,AChaosBase *_plugin,int _dimension,int _input_index,vector<float_param> _params={}){ name=_n; plugin=_plugin; + dimension=_dimension; + input_index=_input_index; params=_params; + iv.resize(_params.size()+_dimension); } string name; AChaosBase *plugin; vector<float_param> params; + vector<REAL> iv; + int dimension; + int input_index; + void update(vector<ofParameter<float> > _params){ + int in=input_index==0?dimension:0; + for (int i=0;i<min(_params.size(),params.size());i++,in++){ + iv[in]=_params[i]; + params[i].val=_params[i]; + } + } + ofVec2f calc(ofVec2f point){ + iv[input_index]=point.x; + iv[input_index+1]=point.y; + plugin->set(iv); + plugin->calc(); + vector<REAL> ov=plugin->getVec(); + return ofVec2f(ov[0],ov[1]); + } }; +/* +some plugins have more or less dimensions of input/output +params are ordered differently +some allow t/dt control + +-> tag the first input dimension index +-> tag the first param index +-> tag the number of params + +*/ + class pluginPanel : public ofxPanel { public: pluginPanel(){ ofRegisterKeyEvents(this, defaultEventsPriority); plugins={ - loader("baker",&baker), - loader("clifford",&clifford,{ - {"a",0.0f,-1.0f,1.0f}, - {"b",0.0f,-1.0f,1.0f}, - {"c",0.0f,-1.0f,1.0f}, - {"d",0.0f,-1.0f,1.0f} + //loader("baker",&baker), //2,1 + loader("clifford",&clifford, + 2,4, //number of dimensions and index + { //4,2 a b c d nx ny + {"a",-1.4f,-2.0f,2.0f}, + {"b",1.6f,-2.0f,2.0f}, + {"c",1.0f,-2.0f,2.0f}, + {"d",0.7f,-2.0f,2.0f} + } + ), + //loader("collatz",&collatz), //3,1 + //loader("duffing",&duffing,{ //7,2 a b w nx ny dt t time, could be real time or magnified + // } //seems perfect + //), + //loader("ginger",&ginger), //3,2 seed nx ny maybe + loader("henon",&henon, //4,2 a b nx ny perfect + 2,2, + { + {"a",1.4f,-0.0f,2.0f}, + {"b",0.3f,-1.0f,1.0f} } ) }; index=0; - update(); + select(); } bool mouseMoved(ofMouseEventArgs & args){ if (args.x>getPosition().x&& @@ -71,7 +117,7 @@ class pluginPanel : public ofxPanel { if (index<0){ index=plugins.size()-1; } - update(); + select(); break; } case 57358:{ //right @@ -79,7 +125,7 @@ class pluginPanel : public ofxPanel { if (index==plugins.size()){ index=0; } - update(); + select(); break; } default: @@ -91,7 +137,7 @@ class pluginPanel : public ofxPanel { bool keyReleased(ofKeyEventArgs & args){ //required in order to call ofRegisterKeyEvents } - void update(){ + void select(){ ofLog()<<"selected "<<plugins[index].name; clear(); add(label.setup(plugins[index].name)); @@ -110,13 +156,12 @@ class pluginPanel : public ofxPanel { params.push_back(param); } } + void update(){ + //push params to plugin + plugins[index].update(params); + } ofVec2f calc(ofVec2f point){ - REAL iv[6]={point.x,point.y}; - for (int i=0;i<params.size();i++){ - iv[i+2]=params[i]; - } - plugins[index].plugin->set(iv); - plugins[index].plugin->calc(); + return plugins[index].calc(point); } private: int index; @@ -126,6 +171,6 @@ private: ofParameter<bool> active; ofParameter<float> amount; vector<ofParameter<float> > params; - AChaosBaker baker; AChaosClifford clifford; + AChaosHenon henon; };
\ No newline at end of file |
