protected void DisplayRoundMark(PaintEventArgs pe, Image imgMark, InstrumentControlMarksDefinition insControlMarksDefinition, Point ptImg, int radiusPx, Boolean displayText, float scaleFactor)
        {
            Double     alphaRot;
            int        textBoxLength;
            int        textPointRadiusPx;
            int        textBoxHeight = (int)(insControlMarksDefinition.fontSize * 1.1 / scaleFactor);
            Point      textPoint     = new Point();
            Point      rotatePoint   = new Point();
            Font       markFont      = new Font("Arial", insControlMarksDefinition.fontSize);
            SolidBrush markBrush     = new SolidBrush(insControlMarksDefinition.fontColor);

            InstrumentControlMarkPoint[] markArray = new InstrumentControlMarkPoint[2 + insControlMarksDefinition.numberOfDivisions];

            // Buid the markArray
            markArray[0].value = insControlMarksDefinition.minPhy;
            markArray[0].angle = insControlMarksDefinition.minAngle;
            markArray[markArray.Length - 1].value = insControlMarksDefinition.maxPhy;
            markArray[markArray.Length - 1].angle = insControlMarksDefinition.maxAngle;

            for (int index = 1; index < insControlMarksDefinition.numberOfDivisions + 1; index++)
            {
                markArray[index].value = (insControlMarksDefinition.maxPhy - insControlMarksDefinition.minPhy) / (insControlMarksDefinition.numberOfDivisions + 1) * index + insControlMarksDefinition.minPhy;
                markArray[index].angle = (insControlMarksDefinition.maxAngle - insControlMarksDefinition.minAngle) / (insControlMarksDefinition.numberOfDivisions + 1) * index + insControlMarksDefinition.minAngle;
            }

            // Define the rotate point (center of the indicator)
            rotatePoint.X = (int)((this.Width / 2) / scaleFactor);
            rotatePoint.Y = rotatePoint.X;

            // Display mark array
            foreach (InstrumentControlMarkPoint markPoint in markArray)
            {
                // pre computings
                alphaRot          = (Math.PI / 2) - markPoint.angle;
                textBoxLength     = (int)(Convert.ToString(markPoint.value).Length *insControlMarksDefinition.fontSize *0.8 / scaleFactor);
                textPointRadiusPx = (int)(radiusPx - 1.2 * imgMark.Height - 0.5 * textBoxLength);
                textPoint.X       = (int)((textPointRadiusPx * Math.Cos(markPoint.angle) - 0.5 * textBoxLength + rotatePoint.X) * scaleFactor);
                textPoint.Y       = (int)((-textPointRadiusPx * Math.Sin(markPoint.angle) - 0.5 * textBoxHeight + rotatePoint.Y) * scaleFactor);

                // Display mark
                RotateImage(pe, imgMark, alphaRot, ptImg, rotatePoint, scaleFactor);

                // Display text
                if (displayText == true)
                {
                    pe.Graphics.DrawString(Convert.ToString(markPoint.value), markFont, markBrush, textPoint);
                }
            }
        }
        protected void DisplayRoundMark(PaintEventArgs pe, Image imgMark, InstrumentControlMarksDefinition insControlMarksDefinition, Point ptImg, int radiusPx, Boolean displayText, float scaleFactor)
        {
            Double alphaRot;
             int textBoxLength;
             int textPointRadiusPx;
             int textBoxHeight = (int)(insControlMarksDefinition.fontSize * 1.1 / scaleFactor);
             Point textPoint = new Point();
             Point rotatePoint = new Point();
             Font markFont = new Font("Arial", insControlMarksDefinition.fontSize);
             SolidBrush markBrush = new SolidBrush(insControlMarksDefinition.fontColor);
             InstrumentControlMarkPoint[] markArray = new InstrumentControlMarkPoint[2 + insControlMarksDefinition.numberOfDivisions];

             // Buid the markArray
             markArray[0].value = insControlMarksDefinition.minPhy;
             markArray[0].angle = insControlMarksDefinition.minAngle;
             markArray[markArray.Length - 1].value = insControlMarksDefinition.maxPhy;
             markArray[markArray.Length - 1].angle = insControlMarksDefinition.maxAngle;

             for (int index = 1; index < insControlMarksDefinition.numberOfDivisions + 1; index++)
             {
            markArray[index].value = (insControlMarksDefinition.maxPhy - insControlMarksDefinition.minPhy) / (insControlMarksDefinition.numberOfDivisions + 1) * index + insControlMarksDefinition.minPhy;
            markArray[index].angle = (insControlMarksDefinition.maxAngle - insControlMarksDefinition.minAngle) / (insControlMarksDefinition.numberOfDivisions + 1) * index + insControlMarksDefinition.minAngle;
             }

             // Define the rotate point (center of the indicator)
             rotatePoint.X = (int)((this.Width / 2) / scaleFactor);
             rotatePoint.Y = rotatePoint.X;

             // Display mark array
             foreach (InstrumentControlMarkPoint markPoint in markArray)
             {
            // pre computings
            alphaRot = (Math.PI / 2) - markPoint.angle;
            textBoxLength = (int)(Convert.ToString(markPoint.value).Length * insControlMarksDefinition.fontSize * 0.8 / scaleFactor);
            textPointRadiusPx = (int)(radiusPx - 1.2 * imgMark.Height - 0.5 * textBoxLength);
            textPoint.X = (int)((textPointRadiusPx * Math.Cos(markPoint.angle) - 0.5 * textBoxLength + rotatePoint.X) * scaleFactor);
            textPoint.Y = (int)((-textPointRadiusPx * Math.Sin(markPoint.angle) - 0.5 * textBoxHeight + rotatePoint.Y) * scaleFactor);

            // Display mark
            RotateImage(pe, imgMark, alphaRot, ptImg, rotatePoint, scaleFactor);

            // Display text
            if (displayText == true)
            {
               pe.Graphics.DrawString(Convert.ToString(markPoint.value), markFont, markBrush, textPoint);
            }
             }
        }