/// <summary> /// Returns the positive horizontal distance by which this metrics overlaps the argument metrics. /// The result can be 0, if previousMetrics.Right = this.Metrics.Left. /// If there is no overlap, float.MinValue is returned. /// </summary> public float OverlapWidth(AnchorageSymbol previousAS) { float overlap = float.MinValue; OutputChordSymbol chord = previousAS as OutputChordSymbol; if (chord != null) { overlap = chord.ChordMetrics.OverlapWidth(this); } else { overlap = this.OverlapWidth(previousAS.Metrics); } return(overlap); }
public new float OverlapWidth(AnchorageSymbol previousAnchorageSymbol) { float maxOverlapWidth = float.MinValue; float overlap = 0; #region _stemMetrics if(_stemMetrics != null) { overlap = _stemMetrics.OverlapWidth(previousAnchorageSymbol); maxOverlapWidth = maxOverlapWidth > overlap ? maxOverlapWidth : overlap; } #endregion #region _flagsBlockMetrics if(_flagsBlockMetrics != null) { overlap = _flagsBlockMetrics.OverlapWidth(previousAnchorageSymbol); maxOverlapWidth = maxOverlapWidth > overlap ? maxOverlapWidth : overlap; } #endregion #region _topDownHeadsMetrics if(_headsMetricsTopDown != null) { foreach(HeadMetrics headMetric in _headsMetricsTopDown) { overlap = headMetric.OverlapWidth(previousAnchorageSymbol); maxOverlapWidth = maxOverlapWidth > overlap ? maxOverlapWidth : overlap; } } #endregion #region _accidentalsMetrics if(_topDownAccidentalsMetrics != null) { foreach(AccidentalMetrics accidentalMetric in _topDownAccidentalsMetrics) { overlap = accidentalMetric.OverlapWidth(previousAnchorageSymbol); maxOverlapWidth = maxOverlapWidth > overlap ? maxOverlapWidth : overlap; } } #endregion #region _ledgerlineBlocksMetrics if(_upperLedgerlineBlockMetrics != null) { overlap = _upperLedgerlineBlockMetrics.OverlapWidth(previousAnchorageSymbol); maxOverlapWidth = maxOverlapWidth > overlap ? maxOverlapWidth : overlap; } if(_lowerLedgerlineBlockMetrics != null) { overlap = _lowerLedgerlineBlockMetrics.OverlapWidth(previousAnchorageSymbol); maxOverlapWidth = maxOverlapWidth > overlap ? maxOverlapWidth : overlap; } #endregion #region _cautionaryBracketsMetrics if(_cautionaryBracketsMetrics != null) { foreach(CautionaryBracketMetrics cautionaryBracketMetrics in _cautionaryBracketsMetrics) { overlap = cautionaryBracketMetrics.OverlapWidth(previousAnchorageSymbol); maxOverlapWidth = maxOverlapWidth > overlap ? maxOverlapWidth : overlap; } } #endregion #region _ornamentMetrics if(_ornamentMetrics != null) { overlap = _ornamentMetrics.OverlapWidth(previousAnchorageSymbol); maxOverlapWidth = maxOverlapWidth > overlap ? maxOverlapWidth : overlap; } #endregion #region _lyricMetrics if(_lyricMetrics != null) { overlap = _lyricMetrics.OverlapWidth(previousAnchorageSymbol); maxOverlapWidth = maxOverlapWidth > overlap ? maxOverlapWidth : overlap; } #endregion #region _dynamicMetrics if(_dynamicMetrics != null) { overlap = _dynamicMetrics.OverlapWidth(previousAnchorageSymbol); maxOverlapWidth = maxOverlapWidth > overlap ? maxOverlapWidth : overlap; } #endregion #region NoteheadExtendersMetrics // NoteheadExtenders never overlap the previousAnchorageSymbol, // and should only be created after JustifyHorizontally() anyway. // They should be null here. Debug.Assert(NoteheadExtendersMetrics == null); #endregion return maxOverlapWidth; }
/// <summary> /// Returns the positive horizontal distance by which this metrics overlaps the argument metrics. /// The result can be 0, if previousMetrics.Right = this.Metrics.Left. /// If there is no overlap, float.MinValue is returned. /// </summary> public float OverlapWidth(AnchorageSymbol previousAS) { float overlap = float.MinValue; OutputChordSymbol chord = previousAS as OutputChordSymbol; if(chord != null) { overlap = chord.ChordMetrics.OverlapWidth(this); } else { overlap = this.OverlapWidth(previousAS.Metrics); } return overlap; }