private void DrawTiesInternal(ScoreRendererBase renderer, double arcStartX, double arcStartY, double arcEndY, double arcWidth, double arcHeight, int modifierY, Note element, Pen tiePen, double tieMidpointThickness)
        {
            var gap = tieMidpointThickness - tiePen.Thickness;

            renderer.DrawBezier(
                new Point(arcStartX, arcStartY),
                new Point(arcStartX + 0.25 * arcWidth, arcStartY + arcHeight * modifierY),
                new Point(arcStartX + 0.75 * arcWidth, arcStartY + arcHeight * modifierY),
                new Point(arcStartX + arcWidth, arcEndY),
                tiePen,
                element);
            if (gap >= tiePen.Thickness)
            {
                renderer.DrawBezier(
                    new Point(arcStartX, arcStartY),
                    new Point(arcStartX + 0.25 * arcWidth, arcStartY + (arcHeight + tieMidpointThickness / 2) * modifierY),
                    new Point(arcStartX + 0.75 * arcWidth, arcStartY + (arcHeight + tieMidpointThickness / 2) * modifierY),
                    new Point(arcStartX + arcWidth, arcEndY),
                    tiePen,
                    element);
            }
            renderer.DrawBezier(
                new Point(arcStartX, arcStartY),
                new Point(arcStartX + 0.25 * arcWidth, arcStartY + (arcHeight + tieMidpointThickness) * modifierY),
                new Point(arcStartX + 0.75 * arcWidth, arcStartY + (arcHeight + tieMidpointThickness) * modifierY),
                new Point(arcStartX + arcWidth, arcEndY),
                tiePen,
                element);
        }
Пример #2
0
        private void DrawSlurs(ScoreRendererBase renderer, Note element, double notePositionY)
        {
            if (element.Slur == null)
            {
                return;
            }
            VerticalPlacement slurPlacement;

            if (element.Slur.Placement.HasValue)
            {
                slurPlacement = element.Slur.Placement.Value;
            }
            else
            {
                slurPlacement = element.StemDirection == VerticalDirection.Up ? VerticalPlacement.Below : VerticalPlacement.Above;
            }

            if (element.Slur.Type == NoteSlurType.Start)
            {
                slurStartPlacement = slurPlacement;
                if (slurPlacement == VerticalPlacement.Above)
                {
                    measurementService.SlurStartPoint = new Point(scoreService.CursorPositionX, element.StemDirection == VerticalDirection.Down ? notePositionY : notePositionY + element.StemDefaultY);
                }
                else
                {
                    measurementService.SlurStartPoint = new Point(scoreService.CursorPositionX, notePositionY);
                }
            }
            else if (element.Slur.Type == NoteSlurType.Stop)
            {
                if (slurStartPlacement == VerticalPlacement.Above)
                {
                    renderer.DrawBezier(measurementService.SlurStartPoint.X + 10, measurementService.SlurStartPoint.Y + 18,
                                        measurementService.SlurStartPoint.X + 12, measurementService.SlurStartPoint.Y + 9,
                                        scoreService.CursorPositionX + 8, (element.StemDirection == VerticalDirection.Up ? element.StemDefaultY + scoreService.Systems.Take(scoreService.CurrentSystemNo - 1).Sum(s => s.Height) : notePositionY + 9),
                                        scoreService.CursorPositionX + 10, (element.StemDirection == VerticalDirection.Up ? element.StemDefaultY + scoreService.Systems.Take(scoreService.CurrentSystemNo - 1).Sum(s => s.Height) + 9 : notePositionY + 18), element);
                }
                else if (slurStartPlacement == VerticalPlacement.Below)
                {
                    renderer.DrawBezier(measurementService.SlurStartPoint.X + 10, measurementService.SlurStartPoint.Y + 30,
                                        measurementService.SlurStartPoint.X + 12, measurementService.SlurStartPoint.Y + 44,
                                        scoreService.CursorPositionX + 8, notePositionY + 44,
                                        scoreService.CursorPositionX + 10, notePositionY + 30, element);
                }
            }
        }