+#include "varray.hh"
+
#include "dimen.hh"
#include "beam.hh"
#include "misc.hh"
#include "leastsquares.hh"
#include "pcol.hh"
#include "stem.hh"
-#include "paper.hh"
+#include "paper-def.hh"
#include "lookup.hh"
#include "grouping.hh"
+
+
struct Stem_info {
Real x;
Real idealy;
Real miny;
int no_beams;
- ///////////////
Stem_info(){}
Stem_info(const Stem*);
Stem_info::Stem_info(const Stem*s)
{
- x = s->hpos();
+ x = s->hindex();
int dir = s->dir;
idealy = max(dir*s->top, dir*s->bot);
miny = max(dir*s->minnote, dir*s-> maxnote);
assert(miny <= idealy);
- no_beams = s->flag;
+
}
-/****************/
+/* *************** */
+
Offset
Beam::center()const
{
assert(status >= POSTCALCED);
- if (calc_children){ // URGGGG!!!
- Beam*me_p = (Beam*)this;
- me_p->do_post_processing();
- }
- Real w=width().length()/2;
- return Offset(w,
- (left_pos + w* slope)*paper()->interline());
+
+ Real w=(paper()->note_width() + width().length())/2.0;
+ return Offset(w, (left_pos + w* slope)*paper()->internote());
}
{
slope = 0;
left_pos = 0.0;
- dir =0;
}
void
Beam::add(Stem*s)
{
stems.bottom().add(s);
- s->dependencies.add(this);
+ s->add_dependency(this);
s->print_flag = false;
}
int dirs[2];
dirs[0]=0; dirs[1] =0;
for (iter_top(stems,i); i.ok(); i++) {
- i->set_default_dir();
- dirs[(i->dir+1)/2] ++;
+ int d = i->get_default_dir();
+ dirs[(d+1)/2] ++;
}
- dir = (dirs[0] > dirs[1]) ? -1 : 1;
+ dir_i_ = (dirs[0] > dirs[1]) ? -1 : 1;
for (iter_top(stems,i); i.ok(); i++) {
- i->dir = dir;
+ i->dir = dir_i_;
}
}
for (iter_top(stems,i); i.ok(); i++) {
i->set_default_extents();
Stem_info info(i);
- sinfo.add(info);
+ sinfo.push(info);
}
Real leftx = sinfo[0].x;
Least_squares l;
for (int i=0; i < sinfo.size(); i++) {
sinfo[i].x -= leftx;
- l.input.add(Offset(sinfo[i].x, sinfo[i].idealy));
+ l.input.push(Offset(sinfo[i].x, sinfo[i].idealy));
}
l.minimise(slope, left_pos);
dy = my -y;
}
left_pos += dy;
- left_pos *= dir;
- slope *= dir;
+ left_pos *= dir_i_;
+ slope *= dir_i_;
// URG
Real sl = slope*paper()->internote();
- paper()->lookup_p_->beam(sl, convert_dimen(20,"pt"));
+ paper()->lookup_p_->beam(sl, 20 PT);
slope = sl /paper()->internote();
}
Beam::set_stemlens()
{
iter_top(stems,s);
- Real x0 = s->hpos();
+ Real x0 = s->hindex();
for (; s.ok() ; s++) {
- Real x = s->hpos()-x0;
+ Real x = s->hindex()-x0;
s->set_stemend(left_pos + slope * x);
}
}
for (; s.ok(); s++) {
int f = intlog2(abs(s->flag))-2;
assert(f>0);
- flags.add(f);
+ flags.push(f);
}
int fi =0;
b= cur.generate_beams(flags, fi);
b.insert(0,0);
- b.add(0);
+ b.push(0);
assert(stems.size() == b.size()/2);
}
Spanner *
Beam::do_break_at( PCol *, PCol *) const
{
- return new Beam(*this);
+ Beam *beam_p= new Beam(*this);
+
+ return beam_p;
}
void
left = (*stems.top()) ->pcol_l_;
right = (*stems.bottom())->pcol_l_;
assert(stems.size()>1);
- if (!dir)
+ if (!dir_i_)
set_default_dir();
}
Beam::width() const
{
Beam * me = (Beam*) this; // ugh
- return Interval( (*me->stems.top()) ->hpos(),
- (*me->stems.bottom()) ->hpos() );
+ return Interval( (*me->stems.top()) ->hindex(),
+ (*me->stems.bottom()) ->hindex() );
}
/*
Molecule
Beam::stem_beams(Stem *here, Stem *next, Stem *prev)const
{
- assert( !next || next->hpos() > here->hpos() );
- assert( !prev || prev->hpos() < here->hpos() );
+ assert( !next || next->hindex() > here->hindex() );
+ assert( !prev || prev->hindex() < here->hindex() );
Real dy=paper()->internote()*2;
Real stemdx = paper()->rule_thickness();
Real sl = slope*paper()->internote();
- paper()->lookup_p_->beam(sl, convert_dimen(20,"pt"));
+ paper()->lookup_p_->beam(sl, 20 PT);
Molecule leftbeams;
Molecule rightbeams;
if (prev) {
int lhalfs= lhalfs = here->beams_left - prev->beams_right ;
int lwholebeams= here->beams_left <? prev->beams_right ;
- Real w = (here->hpos() - prev->hpos())/4;
- Atom a = paper()->lookup_p_->beam(sl, w);
+ Real w = (here->hindex() - prev->hindex())/4;
+ Symbol dummy;
+ Atom a(dummy);
+ if (lhalfs) // generates warnings if not
+ a = paper()->lookup_p_->beam(sl, w);
a.translate(Offset (-w, -w * sl));
for (int j = 0; j < lhalfs; j++) {
Atom b(a);
- b.translate(Offset(0, -dir * dy * (lwholebeams+j)));
+ b.translate(Offset(0, -dir_i_ * dy * (lwholebeams+j)));
leftbeams.add( b );
}
}
int rhalfs = here->beams_right - next->beams_left;
int rwholebeams = here->beams_right <? next->beams_left;
- Real w = next->hpos() - here->hpos();
+ Real w = next->hindex() - here->hindex();
Atom a = paper()->lookup_p_->beam(sl, w + stemdx);
int j = 0;
for (; j < rwholebeams; j++) {
Atom b(a);
- b.translate(Offset(0, -dir * dy * j));
+ b.translate(Offset(0, -dir_i_ * dy * j));
rightbeams.add( b );
}
+
w /= 4;
- a = paper()->lookup_p_->beam(sl, w);
+ if (rhalfs)
+ a = paper()->lookup_p_->beam(sl, w);
for (; j < rwholebeams + rhalfs; j++) {
Atom b(a);
- b.translate(Offset(0, -dir * dy * j));
+ b.translate(Offset(0, -dir_i_ * dy * j));
rightbeams.add(b );
}
Molecule*
-Beam::brew_molecule() const return out;
+Beam::brew_molecule_p() const return out;
{
Real inter=paper()->internote();
out = new Molecule;
- Real x0 = stems.top()->hpos();
+ Real x0 = stems.top()->hindex();
for (iter_top(stems,i); i.ok(); i++) {
PCursor<Stem*> p(i-1);
Stem * next = n.ok() ? n.ptr() : 0;
Molecule sb = stem_beams(i, next, prev);
- Real x = i->hpos()-x0;
+ Real x = i->hindex()-x0;
sb.translate(Offset(x, (x * slope + left_pos)* inter));
out->add(sb);
}
}
void
-Beam::print()const
+Beam::do_print()const
{
#ifndef NPRINT
- mtor << "{ slope " <<slope << "left ypos " << left_pos;
+ mtor << "slope " <<slope << "left ypos " << left_pos;
Spanner::print();
- mtor << "}\n";
#endif
}