示例#1
0
        /// <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);
        }
示例#2
0
 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;
 }
示例#3
0
文件: Metrics.cs 项目: notator/Moritz
        /// <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;
        }