Subversion Repositories DIN Is Noise

Rev

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);
}