- curve around flag for y coordinate
- - this file is a mess, clean it up
-
- short-cut: try a smaller region first.
- handle non-visible stems better.
if (!stem)
{
- programming_error ("No stem for note column?");
+ programming_error ("no stem for note column");
ei.x_ = col->relative_coordinate (common_[X_AXIS], X_AXIS);
ei.head_ = ei.stem_ = col->extent (common_[Y_AXIS],
Y_AXIS)[dir_];
return ei;
}
-
Drul_array<Bound_info>
Slur_score_state::get_bound_info () const
{
extremes[d].note_column_ = extremes[d].bound_;
extremes[d].stem_ = Note_column::get_stem (extremes[d].note_column_);
extremes[d].stem_dir_ = get_grob_direction (extremes[d].stem_);
- extremes[d].stem_extent_[X_AXIS]
- = extremes[d].stem_->extent (common_[X_AXIS], X_AXIS);
+
+ for (int a = X_AXIS; a < NO_AXES; a++)
+ {
+ Axis ax = Axis (a);
+ Interval s = extremes[d].stem_->extent (common_[ax], ax);
+ if (s.is_empty ())
+ {
+ programming_error ("Stem has no extent in Slur_score_state");
+ s = Interval (0,0)
+ + extremes[d].stem_->relative_coordinate (common_[ax], ax);
+ }
+ extremes[d].stem_extent_[ax] = s;
+ }
+
extremes[d].stem_extent_[Y_AXIS]
= extremes[d].stem_->extent (common_[Y_AXIS], Y_AXIS);
extremes[d].slur_head_
}
}
while (flip (&d) != LEFT);
+
return extremes;
}
}
}
if (mindist > 1e5)
- programming_error ("Could not find quant.");
+ programming_error ("can't not find quant");
return opt_idx;
}
if (extremes_[d].note_column_)
{
end_ys[d] = dir_
- * ((dir_ * (base_attachments_[d][Y_AXIS] + parameters_.region_size_* dir_))
+ * ((dir_ * (base_attachments_[d][Y_AXIS] + parameters_.region_size_ * dir_))
>? (dir_ * (dir_ + extremes_[d].note_column_->extent (common_[Y_AXIS],
Y_AXIS)[dir_]))
>? (dir_ * base_attachments_[-d][Y_AXIS]));
fixme: X coord should also be set in this case.
*/
if (stem
+ && !Stem::is_invisible (stem)
&& extremes_[d].stem_dir_ == dir_
&& Stem::get_beaming (stem, -d)
&& (!spanner_less (slur_, Stem::get_beam (stem))
.linear_combination (CENTER);
}
base_attachment[d] = Offset (x, y);
-
}
while (flip (&d) != LEFT);
}
while (flip (&d) != LEFT);
+
+ do
+ {
+ for (int a = X_AXIS; a < NO_AXES; a++)
+ {
+ Real &b = base_attachment[d][Axis (a)];
+
+ if (isinf (b) || isnan (b))
+ {
+ programming_error ("slur attachment is inf/nan");
+ b = 0.0;
+ }
+
+ }
+ }
+ while (flip (&d) != LEFT);
+
+
return base_attachment;
}
Slur_score_state::generate_curves () const
{
Real r_0 = robust_scm2double (slur_->get_property ("ratio"), 0.33);
- Real h_inf = staff_space_ *scm_to_double (slur_->get_property ("height-limit"));
+ Real h_inf = staff_space_ * scm_to_double (slur_->get_property ("height-limit"));
for (int i = 0; i < configurations_.size (); i++)
configurations_[i]->generate_curve (*this, r_0, h_inf);
}
-
Link_array<Slur_configuration>
Slur_score_state::enumerate_attachments (Drul_array<Real> end_ys) const
{
- /*ugh. */
Link_array<Slur_configuration> scores;
Drul_array<Offset> os;
for (int k = 0; k < 3; k++)
{
- Direction hdir = Direction (k /2 - 1);
+ Direction hdir = Direction (k / 2 - 1);
/*
Only take bound into account if small slur starts
yext[dir_] = z[Y_AXIS] + dir_ * thickness_ * 1.0;
Interval xext (-1, 1);
- xext = xext * (thickness_*2) + z[X_AXIS];
+ xext = xext * (thickness_ * 2) + z[X_AXIS];
Extra_collision_info info (small_slur,
k - 1.0,
xext,