This seems like the most reasonable place to remove extra dots. Dot_configuration has the job of arranging dots in a chord, but confines its efforts to the mathematical problem of keeping a set of integer position for dots close to a set of integer positions of noteheads. Looking at the resulting configuration and removing grobs for aesthetic reasons is better done at this level.
You should count the number of dots you have so you do not remove the last one. Someone somewhere has a staff with three lines at positions 1 2 3, so even a single dot has to move two positions away from the head. You might want to start removing only after there are >3 dots, or else people will complain that their dots disappeared in chords like <d' e' f'>4. If you can't avoid complaints, you'll have to make this behavior controllable with a grob property. https://codereview.appspot.com/7319049/diff/2001/lily/dot-column.cc File lily/dot-column.cc (right): https://codereview.appspot.com/7319049/diff/2001/lily/dot-column.cc#newcode63 lily/dot-column.cc:63: vector<Interval> allowed_y_positions; It would be simpler to have just one interval, describing all the dots handled by one dot_engraver, even if coming from two voices. https://codereview.appspot.com/7319049/diff/2001/lily/dot-column.cc#newcode80 lily/dot-column.cc:80: Interval hp = Stem::head_positions (stem); It looks like head_positions are shifted in the test 'grid-lines.ly' but dot positions are not, at this stage in the code. https://codereview.appspot.com/7319049/diff/2001/lily/dot-column.cc#newcode195 lily/dot-column.cc:195: You could build the allowed interval here, allowed_positions.add_point(p); so that the interval uses the same point-of-origin as does the Dots_configuration code. https://codereview.appspot.com/7319049/ _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel