Ejemplo n.º 1
0
        /// <summary>
        /// Draws specific divisions on the dial face
        /// </summary>
        /// <param name="canvas">Control's canvas</param>
        /// <param name="dialFace">Info about the dial face</param>
        /// <param name="divisionCount">Total count of divisions</param>
        /// <param name="divisionLength">Length of the single division</param>
        /// <param name="divisionColor">Color of the single division</param>
        private void DrawDivision(
            PaintEventArgs canvas,
            DialFaceInfo dialFace,
            int divisionCount,
            int divisionLength,
            Color divisionColor)
        {
            var additionToLength = (dialFace.Diameter / 2) - divisionLength;
            var currentAngle     = 0.0;
            var divisionPen      = new Pen(divisionColor, divisionThickness);

            for (int i = 0; i < divisionCount; ++i)
            {
                var firstPoint = this.ConvertPolarToCartesian(
                    additionToLength,
                    currentAngle,
                    new Point(dialFace.CenterX, dialFace.CenterY));

                var secondPoint = this.ConvertPolarToCartesian(
                    additionToLength + divisionLength,
                    currentAngle,
                    new Point(dialFace.CenterX, dialFace.CenterY));

                canvas.Graphics.DrawLine(divisionPen, firstPoint, secondPoint);

                currentAngle += 2 * Math.PI / divisionCount;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Draws all types of divisions on the dial face
        /// </summary>
        /// <param name="canvas">Control's canvas</param>
        /// <param name="dialFace">Info about the dial face</param>
        protected void DrawAllDivisions(PaintEventArgs canvas, DialFaceInfo dialFace)
        {
            // I don't know how to fix arrow overlapping without crutches

            this.DrawDivision(
                canvas,
                dialFace,
                60,
                dialFace.Diameter / minuteDivisionsLengthPart,
                this.minuteDivisionColor);

            // For "12", "3", "6", "9" hours
            this.DrawDivision(
                canvas,
                dialFace,
                4,
                dialFace.Diameter / hourMultipleOfThreeLengthPart,
                this.hourDivisionColor);

            this.DrawDivision(
                canvas,
                dialFace,
                12,
                dialFace.Diameter / hourDivisionsLengthPart,
                this.hourDivisionColor);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Draws a bold dot where the arrows connect to each other
        /// </summary>
        /// <param name="canvas">Control canvas</param>
        /// <param name="dialFace">Properties of the dial face</param>
        protected void DrawPointOfAttachment(
            PaintEventArgs canvas,
            DialFaceInfo dialFace)
        {
            var pointDiameter =
                dialFace.Diameter / pointOfAttachmentDiameterPart;
            var pointBrush = new SolidBrush(this.pointOfAttachmentColor);

            canvas.Graphics.FillEllipse(
                pointBrush,
                dialFace.CenterX - (pointDiameter / 2),
                dialFace.CenterY - (pointDiameter / 2),
                pointDiameter,
                pointDiameter);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Draws arrows of the watch
        /// </summary>
        /// <param name="canvas">Control canvas</param>
        /// <param name="dialFace">Parameters of the dial face</param>
        protected void DrawArrows(PaintEventArgs canvas, DialFaceInfo dialFace)
        {
            // TODO: Implement smooth moving of the arrows

            var hourArrowLength   = dialFace.Diameter / hourArrowLengthPart;
            var minuteArrowLength = dialFace.Diameter / minuteArrowLengthPart;

            var secondArrowLength = dialFace.Diameter / secondArrowLengthPart;
            var secondArrowCounterweightLength = dialFace.Diameter / secondArrowCounterweightPart;

            double hourArrowAngle = 2 * Math.PI / 12 * (this.currentDateTime.Hour % 12);

            this.DrawSingleArrow(
                canvas,
                dialFace,
                new ArrowInfo(
                    hourArrowLength,
                    this.hourArrowColor,
                    hourArrowThickness,
                    hourArrowAngle));

            double minuteArrowAngle = 2 * Math.PI / 60 * this.currentDateTime.Minute;

            this.DrawSingleArrow(
                canvas,
                dialFace,
                new ArrowInfo(
                    minuteArrowLength,
                    this.minuteArrowColor,
                    minuteArrowThickness,
                    minuteArrowAngle));

            double secondArrowAngle = 2 * Math.PI / 60 * this.currentDateTime.Second;

            this.DrawSingleArrow(
                canvas,
                dialFace,
                new ArrowInfo(
                    secondArrowLength,
                    this.secondArrowColor,
                    secondArrowThickness,
                    secondArrowAngle,
                    secondArrowCounterweightLength));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Draws single arrow on watches
        /// </summary>
        /// <param name="canvas">Control canvas</param>
        /// <param name="dialFace">Parameters of the dial face</param>
        /// <param name="arrow">Parameters of arrow</param>
        private void DrawSingleArrow(
            PaintEventArgs canvas,
            DialFaceInfo dialFace,
            ArrowInfo arrow)
        {
            // Because arrow.Angle is clockwise diviation from x = 0
            var realAngle = (Math.PI / 2) - arrow.Angle;

            var firstPoint = this.ConvertPolarToCartesian(
                arrow.CounterweightLength,
                realAngle + Math.PI,
                new Point(dialFace.CenterX, dialFace.CenterY));

            var secondPoint = this.ConvertPolarToCartesian(
                arrow.MainPartLength,
                realAngle,
                new Point(dialFace.CenterX, dialFace.CenterY));

            var arrowPen = new Pen(arrow.ArrowColor, arrow.Thickness);

            canvas.Graphics.DrawLine(arrowPen, firstPoint, secondPoint);
        }