Exemple #1
0
        // 绘制和弦
        private void DrawChord()
        {
            bool leftOrRight  = _note.IsUpOrDown();
            int  headPosition = Start;
            int  lastPosition = 0;

//            int chordPaintNum = 0;
            // 绘制和弦中的其他乐符(最后一个乐符即当前乐符,已经绘制),去掉和弦表中的最后一个乐符
            for (int i = 0; i < _note.GetChordList().Count - 1; i++)
            {
                Note extraNote = _note.GetChordList()[i];
                DrawShiftLine(extraNote.GetShift() / ParamsGetter.GetPitchPositionDiff());
                int extraDuration = extraNote.GetType();
                int extraPosition = extraNote.GetShift() + ParamsGetter.GetStaffCenterPosition();
                if (Math.Abs(extraPosition - lastPosition) == ParamsGetter.GetPitchPositionDiff())
                {
                    if (leftOrRight)
                    {
                        headPosition += ParamsGetter.GetNoteHeadWidth();
                    }
                    else
                    {
                        headPosition -= ParamsGetter.GetNoteHeadWidth();
                    }
                    leftOrRight = !leftOrRight;
                }

                if (extraDuration == 1) // 全音符
                {
                    DrawSymbol("\uE12B", headPosition, extraPosition);
                    continue;
                }
                else
                {
                    if (extraDuration == 2)
                    {
                        DrawSymbol("\uE12C", headPosition, extraPosition);
                    }
                    else
                    {
                        DrawSymbol("\uE12D", headPosition, extraPosition);
                    }
                }

                lastPosition = extraPosition;
                int temp;
                if (_note.IsUpOrDown())
                {
                    temp = extraPosition + ParamsGetter.GetNoteStemHeight();
                }
                else
                {
                    temp = extraPosition - ParamsGetter.GetNoteStemHeight();
                }
                DrawLine(_stemX, extraPosition, _stemX, temp);
            }
        }