Rev 2108 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* starrer.cc
* DIN Is Noise is copyright (c) 2006-2025 Jagannathan Sampath
* DIN Is Noise is released under GNU Public License 2.0
* For more information, please visit https://dinisnoise.org/
*/
#include "starrer.h"
#include "vector2d.h"
#include "ui_list.h"
#include "multi_curve.h"
#include <vector>
#include <fstream>
using namespace std;
extern ofstream dlog;
extern ui_list uis;
starrer::starrer () {
name = "Starrer";
load_params ();
}
starrer::~starrer () {
widget_save ("d_starrer", ctrls);
save_params ();
}
void starrer::load_params () {
ifstream f (make_fname().c_str(), ios::in);
string ignore;
f >> ignore >> step;
}
void starrer::save_params () {
ofstream f (make_fname().c_str(), ios::out);
f << "steps " << step << endl;
}
void starrer::setup () {
plugin::setup ();
ctrls.push_back (&sp_num_steps);
num_ctrls = ctrls.size ();
sp_num_steps.set ("Steps", 1, 1, MILLION, this, 0);
sp_num_steps.set_value (step);
widget_load ("d_starrer", ctrls);
}
int starrer::apply (multi_curve& crv) {
int n = 0;
vector<crvpt> pts;
crv.get_profile_points (pts);
n = pts.size () - 1;
points.clear ();
int i = 0, j = i;
step = sp_num_steps.value;
do {
if (i < n) {
crvpt& pi = pts[i];
points.push_back (point<float>(pi.x, pi.y));
i += step;
} else {
i -= n;
}
} while (i != j);
crvpt& p0 = pts[0];
points.push_back (point<float>(p0.x, p0.y));
ss.str("");
ss << "starrer_" << step;
return plugin::apply (crv);
}