TODO
Less hairy code. knee: ([\stem 1; c8 \stem -1; c8]
-
+
*/
#include <math.h>
}
Molecule*
-Beam::brew_molecule_p() const
+Beam::brew_molecule_p() const
{
Molecule *mol_p = new Molecule;
// huh? inter-what
// Real inter_f = paper()->interbeam_f ();
Real inter_f = paper()->internote_f ();
Real x0 = stems[0]->hpos_f();
- for (int j=0; j <stems.size(); j++)
+ for (int j=0; j <stems.size(); j++)
{
Stem *i = stems[j];
Stem * prev = (j > 0)? stems[j-1] : 0;
void
Beam::do_post_processing()
{
- if (stems.size() < 2)
+ if (stems.size() < 2)
{
- warning ("Beam with less than 2 stems");
+ warning (_("Beam with less than 2 stems"));
transparent_b_ = true;
return ;
}
- solve_slope();
+ solve_slope();
set_stemlens();
}
void
Beam::do_substitute_dependent (Score_elem*o,Score_elem*n)
{
- if (o->is_type_b (Stem::static_name()))
+ if (o->is_type_b (Stem::static_name()))
stems.substitute ((Stem*)o->item(), n?(Stem*) n->item ():0);
}
int up = 0, down = 0;
int up_count = 0, down_count = 0;
- for (int i=0; i <stems.size(); i++)
+ for (int i=0; i <stems.size(); i++)
{
Stem *sl = stems[i];
int cur_down = sl->get_center_distance_from_top();
int cur_up = sl->get_center_distance_from_bottom();
- if (cur_down)
+ if (cur_down)
{
down += cur_down;
down_count++;
}
- if (cur_up)
+ if (cur_up)
{
up += cur_up;
up_count++;
// up / up_count > down / down_count
dir_ = (up * down_count > down * up_count) ? UP : DOWN;
- for (int i=0; i <stems.size(); i++)
+ for (int i=0; i <stems.size(); i++)
{
Stem *sl = stems[i];
sl->dir_ = dir_;
Beam::solve_slope()
{
Array<Stem_info> sinfo;
- for (int j=0; j <stems.size(); j++)
+ for (int j=0; j <stems.size(); j++)
{
Stem *i = stems[j];
i->set_default_extents();
if (i->invisible_b())
continue;
-
+
Stem_info info (i);
sinfo.push (info);
}
if (! sinfo.size())
slope = left_pos = 0;
- else if (sinfo.size() == 1)
+ else if (sinfo.size() == 1)
{
slope = 0;
left_pos = sinfo[0].idealy_f_;
}
- else
+ else
{
-
+
Real leftx = sinfo[0].x;
Least_squares l;
- for (int i=0; i < sinfo.size(); i++)
+ for (int i=0; i < sinfo.size(); i++)
{
sinfo[i].x -= leftx;
l.input.push (Offset (sinfo[i].x, sinfo[i].idealy_f_));
l.minimise (slope, left_pos);
}
-
+
Real dy = 0.0;
- for (int i=0; i < sinfo.size(); i++)
+ for (int i=0; i < sinfo.size(); i++)
{
Real y = sinfo[i].x * slope + left_pos;
Real my = sinfo[i].miny_f_;
if (my - y > dy)
- dy = my -y;
+ dy = my -y;
}
left_pos += dy;
- left_pos *= dir_;
+ left_pos *= dir_;
slope *= dir_;
This neat trick is by Werner Lemberg, damped = tanh (slope) corresponds
with some tables in [Wanske]
*/
- slope = 0.6 * tanh (slope);
+ slope = 0.6 * tanh (slope);
// ugh
Real sl = slope*paper()->internote_f ();
void
Beam::set_stemlens()
{
- Real x0 = stems[0]->hpos_f();
- for (int j=0; j <stems.size(); j++)
+ Real x0 = stems[0]->hpos_f();
+ for (int j=0; j <stems.size(); j++)
{
Stem *s = stems[j];
Real x = s->hpos_f()-x0;
- s->set_stemend (left_pos + slope * x);
+ s->set_stemend (left_pos + slope * x);
}
}
def.OK();
cur.OK();
assert (cur.children.size() == stems.size ());
-
+
cur.split (def);
Array<int> b;
{
Array<int> flags;
- for (int j=0; j <stems.size(); j++)
+ for (int j=0; j <stems.size(); j++)
{
Stem *s = stems[j];
assert (stems.size() == b.size ()/2);
}
- for (int j=0, i=0; i < b.size() && j <stems.size (); i+= 2, j++)
+ for (int j=0, i=0; i < b.size() && j <stems.size (); i+= 2, j++)
{
Stem *s = stems[j];
s->beams_left_i_ = b[i];
Molecule rightbeams;
/* half beams extending to the left. */
- if (prev)
+ if (prev)
{
int lhalfs= lhalfs = here->beams_left_i_ - prev->beams_right_i_ ;
int lwholebeams= here->beams_left_i_ <? prev->beams_right_i_ ;
if (lhalfs) // generates warnings if not
a = paper()->lookup_l ()->beam (sl, w);
a.translate (Offset (-w, -w * sl));
- for (int j = 0; j < lhalfs; j++)
+ for (int j = 0; j < lhalfs; j++)
{
Atom b (a);
b.translate_axis (-dir_ * dy * (lwholebeams+j), Y_AXIS);
leftbeams.add (b);
}
}
-
+
if (next)
{
int rhalfs = here->beams_right_i_ - next->beams_left_i_;
- int rwholebeams = here->beams_right_i_ <? next->beams_left_i_;
+ int rwholebeams = here->beams_right_i_ <? next->beams_left_i_;
Real w = next->hpos_f() - here->hpos_f ();
Atom a = paper()->lookup_l ()->beam (sl, w + stemdx);
if (here->beam_gap_i_)
{
int nogap = rwholebeams - here->beam_gap_i_;
- for (; j < nogap; j++)
+ for (; j < nogap; j++)
{
Atom b (a);
b.translate_axis (-dir_ * dy * j, Y_AXIS);
- rightbeams.add (b);
+ rightbeams.add (b);
}
// TODO: notehead widths differ for different types
gap_f = paper()->note_width () / 2;
a = paper()->lookup_l ()->beam (sl, w + stemdx);
}
- for (; j < rwholebeams; j++)
+ for (; j < rwholebeams; j++)
{
Atom b (a);
b.translate (Offset (gap_f, -dir_ * dy * j));
- rightbeams.add (b);
+ rightbeams.add (b);
}
w /= 4;
if (rhalfs)
a = paper()->lookup_l ()->beam (sl, w);
-
- for (; j < rwholebeams + rhalfs; j++)
+
+ for (; j < rwholebeams + rhalfs; j++)
{
Atom b (a);
b.translate_axis (-dir_ * dy * j, Y_AXIS);
- rightbeams.add (b);
+ rightbeams.add (b);
}
-
+
}
leftbeams.add (rightbeams);
return leftbeams;