SetFillColor() публичный Метод

public SetFillColor ( float components ) : void
components float
Результат void
Пример #1
0
 public static void FillEllipsis(CGContext context, RectangleF rect, CGColor color, float lineWidth)
 {
     context.SaveState();
     context.SetFillColor(color);
     context.AddEllipseInRect(rect);
     context.FillPath();
     context.RestoreState();
 }
Пример #2
0
		public override void DrawInContext (CGContext context)
		{
			base.DrawInContext (context);
			
			context.AddEllipseInRect (Bounds);
			context.SetFillColor (ClockColor);
			context.FillPath ();
		}
Пример #3
0
 public static void FillRect(CGContext context, RectangleF rect, CGColor color)
 {
     context.SaveState();
     context.AddRect(rect);
     context.Clip();
     context.SetFillColor(color);
     context.FillRect(rect);
     context.RestoreState();
 }
        void RenderPixels(CGContext context, int x, int y, Edge edge32, Edge edge13, Edge edge21, int w1, int w2, int w3)
        {
            //VertexInterpoliation = A * x + B * y + C;
            //			float alpha = (edge32.A * x + edge32.B * y + edge32.C) * edge32.VertexFactor;
            //			float beta = (edge13.A * x + edge13.B * y + edge13.C)  * edge13.VertexFactor;
            //			float gamma = (edge21.A * x + edge21.B * y + edge21.C) * edge21.VertexFactor;

            // Determine barycentric coordinates
            float alpha = (float)(w1 * edge32.VertexFactor);
            float beta = (float)(w2 * edge13.VertexFactor);
            float gamma = (float)(w3 * edge21.VertexFactor);

            GradientLerp3 (alpha, beta, gamma);
            // Set the color
            context.SetFillColor (colorOutput [0], colorOutput [1], colorOutput [2], colorOutput [3]);

            // Set our pixel location
            pixelRect.X = x;
            pixelRect.Y = y;

            // Fill the pixel
            context.FillRect (pixelRect);
        }
        void HatchDottedDiamond(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            /* draw lines in the foreground color */
            context.SetFillColor(foreColor.ToCGColor());
            context.SetStrokeColor(foreColor.ToCGColor());
            context.SetLineWidth(lineWidth);
            context.SetLineCap(CGLineCap.Square);

            float halfMe = hatchWidth / 2.0f;
            float quarter = halfMe / 2.0f;

            // this is really just 6 dots that when tiled will
            // create the effect we are looking for
            RectangleF rect = new RectangleF(0,0,1,1);
            setPixels(context, rect);

            rect.Y = halfMe;
            setPixels(context, rect);

            rect.X = halfMe;
            setPixels(context, rect);

            rect.Y = 0;
            setPixels(context, rect);

            rect.X = quarter;
            rect.Y = quarter;
            setPixels(context, rect);

            rect.X = halfMe + quarter;
            rect.Y = halfMe + quarter;
            setPixels(context, rect);
        }
        void HatchDivot(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            /* draw lines in the foreground color */
            context.SetFillColor(foreColor.ToCGColor());
            context.SetStrokeColor(foreColor.ToCGColor());
            context.SetLineWidth(lineWidth);
            context.SetLineCap(CGLineCap.Square);

            float halfMe = hatchWidth / 2.0f;

            // draw a little wirly thingy
            RectangleF rect = new RectangleF(0,0,1,1);
            setPixels(context, rect);

            rect.X += 1;
            rect.Y += 1;
            setPixels(context, rect);

            rect.X -= 1;
            rect.Y += 1;
            setPixels(context, rect);

            // now top one
            rect.X = halfMe;// + HALF_PIXEL_X;
            rect.Y = halfMe;// + HALF_PIXEL_Y;
            setPixels(context, rect);

            rect.X -= 1;
            rect.Y += 1;
            setPixels(context, rect);

            rect.X += 1;
            rect.Y += 1;
            setPixels(context, rect);
        }
        void HatchConfetti(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            /* draw confetti Rectangles in the foreground color */
            context.SetFillColor(foreColor.ToCGColor());

            RectangleF rect = new RectangleF(0,0,2,2);

            // Do not see a mathematical equation so will just set
            // the same ones as in windows pattern.
            if (hatchStyle == HatchStyle.LargeConfetti)
            {
                setPixels(context, rect);

                rect.X = 2;
                rect.Y = 2;
                setPixels(context, rect);

                rect.X = 5;
                rect.Y = 1;
                setPixels(context, rect);

                rect.X = 6;
                rect.Y = 4;
                setPixels(context, rect);

                rect.X = 4;
                rect.Y = 6;
                setPixels(context, rect);

                rect.X = 1;
                rect.Y = 5;
                setPixels(context, rect);
            }
            else
            {
                rect.Width = 1;
                rect.Height = 1;

                setPixels(context, rect);

                rect.X = 3;
                rect.Y = 1;
                setPixels(context, rect);

                rect.X = 6;
                rect.Y = 2;
                setPixels(context, rect);

                rect.X = 2;
                rect.Y = 3;
                setPixels(context, rect);

                rect.X = 7;
                rect.Y = 4;
                setPixels(context, rect);

                rect.X = 4;
                rect.Y = 5;
                setPixels(context, rect);

                rect.X = 1;
                rect.Y = 6;
                setPixels(context, rect);

                rect.X = 5;
                rect.Y = 7;
                setPixels(context, rect);

            }
        }
        void HatchCheckered(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            context.SetFillColor(foreColor.ToCGColor());

            RectangleF rect = new RectangleF(0,0,hatchWidth / 2.0f,hatchHeight / 2.0f);
            setPixels(context, rect);

            rect.X = hatchWidth / 2.0f;
            rect.Y = hatchHeight / 2.0f;
            setPixels(context, rect);
        }
        void HatchPlaid(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            /* draw lines in the foreground color */
            context.SetFillColor(foreColor.ToCGColor());
            context.SetStrokeColor(foreColor.ToCGColor());
            context.SetLineWidth(lineWidth);
            context.SetLineCap(CGLineCap.Square);

            float halfMe = hatchWidth / 2.0f;
            RectangleF rect = new RectangleF(0,0,1,1);

            // fraw the alternating pattern for half of area
            int x = 0;
            int y = 0;

            for (y = 0; y<halfMe; y+=2)
            {
                for (x = 1; x < hatchWidth; x+=2)
                {
                    rect.X = x;
                    rect.Y = y;
                    setPixels(context, rect);
                }
            }
            for (y = 1; y<halfMe; y+=2)
            {
                for (x = 0; x < hatchWidth; x+=2)
                {
                    rect.X = x;
                    rect.Y = y;
                    setPixels(context, rect);
                }
            }

            // draw a square
            rect.X = 0;
            rect.Y = halfMe;
            rect.Width = halfMe;
            rect.Height = halfMe;
            setPixels(context, rect);
        }
        /**
         * Percentage patterns were obtained by creating a screen shot from a windows fill
         * and looking at the patterns at the pixel level.  A little tedious to say the least
         * but they do seem correct and recreate the same pattern from windows to here.
         */
        protected void HatchPercentage(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* some patterns require us to reverse the colors */
            switch (hatchStyle) {
            case HatchStyle.Percent05:
            case HatchStyle.Percent10:
            case HatchStyle.Percent20:
            case HatchStyle.Percent25:
            case HatchStyle.Percent30:
                drawBackground (context, backColor, hatchWidth, hatchWidth);
                context.SetFillColor(foreColor.ToCGColor());
                break;
            default:
                drawBackground (context, foreColor, hatchWidth, hatchWidth);
                context.SetFillColor(backColor.ToCGColor());
                break;
            }

            // create a work rectangle for setting pixels
            RectangleF rect = new RectangleF(0,0,1,1);

            // Only set the pixels for some
            if (hatchStyle != HatchStyle.Percent50 &&
                hatchStyle != HatchStyle.Percent40 &&
                hatchStyle != HatchStyle.Percent30 &&
                hatchStyle != HatchStyle.Percent60)
            {
                rect.X = 0;
                rect.Y = (int)(hatchHeight / 2.0f);
                setPixels(context, rect);
                rect.X = (int)(hatchWidth / 2.0f);
                rect.Y = 0;
                setPixels(context, rect);
            }

            // 50 and 40 start out the same with a 50 percent
            if (hatchStyle == HatchStyle.Percent50 ||
                hatchStyle == HatchStyle.Percent40 )
            {
                int x = 0;
                int y = 0;

                for (y = 0; y<hatchHeight; y+=2)
                {
                    for (x = 1; x < hatchWidth; x+=2)
                    {
                        rect.X = x;
                        rect.Y = y;
                        setPixels(context, rect);
                    }
                }
                for (y = 1; y<hatchHeight; y+=2)
                {
                    for (x = 0; x < hatchWidth; x+=2)
                    {
                        rect.X = x;
                        rect.Y = y;
                        setPixels(context, rect);
                    }
                }

                // Percent40 is a 50 with two more dots set of back color
                // within a set area.  This creates an interesting effect
                // of a double plus sign in opposite corners.
                if (hatchStyle == HatchStyle.Percent40)
                {
                    rect.X = 1;
                    rect.Y = 1;
                    setPixels(context, rect);
                    rect.X = 5;
                    rect.Y = 5;
                    setPixels(context, rect);
                }

            }

            // Percent30 and Percent60 are really messed up so we will just set some dots
            // to present the pattern.  Percent60 is a 30 with colors reversed, go figure.
            if (hatchStyle == HatchStyle.Percent30 ||
                hatchStyle == HatchStyle.Percent60)
            {
                rect.X = 0;
                rect.Y = 0;
                setPixels(context, rect);
                rect.X = 2;
                rect.Y = 0;
                setPixels(context, rect);
                rect.X = 0;
                rect.Y = 2;
                setPixels(context, rect);
                rect.X = 2;
                rect.Y = 2;
                setPixels(context, rect);

                rect.X = 1;
                rect.Y = 3;
                setPixels(context, rect);

                rect.X = 3;
                rect.Y = 1;
                setPixels(context, rect);
            }
        }
        /**
         * This is fill of hackish stuff.
         * Thought this was going to be easier but that just did not work out.
         **/
        protected void HatchSphere(CGContext context)
        {
            var hatchSize = getHatchWidth (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchSize, false);

            /* draw background in fore ground color*/
            drawBackground (context, backColor, hatchSize, hatchSize);

            context.SetStrokeColor(foreColor.ToCGColor());
            context.SetFillColor(foreColor.ToCGColor());

            context.SetLineWidth(1);
            context.SetLineCap(CGLineCap.Square);

            // Initialize work rectangle
            RectangleF rect = new RectangleF(0,0,1,1);

            float quad = hatchSize / 2.0f;

            // Left lower quad
            rect.Width = quad;
            rect.Height = quad;
            rect.X = 0;
            rect.Y = 0;

            context.StrokeRect(rect);

            // right upper quad
            rect.Width = quad;
            rect.Height = quad;
            rect.X = quad;
            rect.Y = quad;

            context.StrokeRect(rect);

            // left upper quad
            rect.Width = quad;
            rect.Height = quad;
            rect.X = 0;
            rect.Y = quad + 1;

            context.FillRect(rect);

            // right lower quod
            rect.Width = quad;
            rect.Height = quad;
            rect.X = quad + 1;
            rect.Y = 0;

            context.FillRect(rect);

            // Now we fill in some corner bits with background
            // This is a bad hack but now sure what else to do
            context.SetFillColor(backColor.ToCGColor());

            rect.Height = 1;
            rect.Width = 1;

            rect.X = 0;
            rect.Y = 0;
            setPixels(context, rect);

            rect.X = 0;
            rect.Y = quad;
            setPixels(context, rect);

            rect.X = 0;
            rect.Y = quad;
            setPixels(context, rect);

            rect.X = quad;
            rect.Y = 0;
            setPixels(context, rect);

            rect.X = quad;
            rect.Y = quad;
            setPixels(context, rect);

            rect.X = quad;
            rect.Y = hatchSize;
            setPixels(context, rect);

            rect.X = hatchSize;
            rect.Y = 0;
            setPixels(context, rect);

            rect.X = hatchSize;
            rect.Y = quad;
            setPixels(context, rect);

            rect.X = hatchSize;
            rect.Y = hatchSize;
            setPixels(context, rect);

            // Now for the fake shiny thingys hack
            // Probably could use a line here but it is already
            // so hacky I will just use this.
            rect.X = 5;
            rect.Y = 3;
            setPixels(context, rect);

            rect.X = 6;
            rect.Y = 3;
            setPixels(context, rect);

            rect.X = 1;
            rect.Y = 7;
            setPixels(context, rect);

            rect.X = 2;
            rect.Y = 7;
            setPixels(context, rect);
        }
        void HatchWeave(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            /* draw lines in the foreground color */
            context.SetFillColor(foreColor.ToCGColor());

            /* draw lines in the foreground color */
            context.SetStrokeColor(foreColor.ToCGColor());
            context.SetLineWidth(lineWidth);
            context.SetLineCap(CGLineCap.Square);

            float halfWidth = hatchWidth / 2.0f;
            float halfHeight = hatchHeight / 2.0f;

            RectangleF rect = new RectangleF(0,0,1,1);

            // Add upward diagonals
            context.MoveTo(0,0);
            context.AddLineToPoint(halfWidth, halfHeight);
            context.StrokePath();

            context.MoveTo(0, halfHeight);
            context.AddLineToPoint(halfWidth -1, hatchHeight - 1);
            context.StrokePath();

            context.MoveTo(halfWidth, 0);
            context.AddLineToPoint(6, 2);
            context.StrokePath();

            //			context.MoveTo(0, 4);
            //			context.AddLineToPoint(2, 2);
            //			context.StrokePath();

            context.MoveTo(2,6);
            context.AddLineToPoint(7, 1);
            context.StrokePath();
        }
 // Purple poka dots test
 protected void DrawPolkaDotPattern(CGContext context)
 {
     context.SetFillColor(Color.Purple.ToCGColor());
     context.FillEllipseInRect (new RectangleF (4, 4, 8, 8));
 }
        void HatchWave(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            /* draw lines in the foreground color */
            context.SetFillColor(foreColor.ToCGColor());

            RectangleF rect = new RectangleF(0,0,1,1);

            // We could maybe draw some arcs here but there are so few pixels
            // that it just is not worth it.
            rect.X = 1;
            setPixels(context, rect);
            rect.X = 2;
            setPixels(context, rect);

            rect.Y = 1;

            rect.X = 0;
            setPixels(context, rect);
            rect.X = 3;
            setPixels(context, rect);
            rect.X = 6;
            setPixels(context, rect);

            rect.Y = 2;

            rect.X = 4;
            setPixels(context, rect);
            rect.X = 5;
            setPixels(context, rect);
        }
        void HatchSolidDiamond(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            /* draw lines in the foreground color */
            context.SetFillColor(foreColor.ToCGColor());
            context.SetStrokeColor(foreColor.ToCGColor());
            context.SetLineWidth(lineWidth);
            context.SetLineCap(CGLineCap.Square);

            float halfMe = hatchWidth / 2.0f;

            // We will paint two triangles from corners meeting in the middle
            // make sure to offset by half pixels so that the point is actually a point.
            context.MoveTo(-HALF_PIXEL_X,HALF_PIXEL_Y);
            context.AddLineToPoint(2+HALF_PIXEL_X, halfMe - HALF_PIXEL_Y);
            context.AddLineToPoint(-HALF_PIXEL_X, hatchHeight- (1.0f + HALF_PIXEL_Y));
            context.ClosePath();
            context.FillPath();

            // now we do the right one
            context.MoveTo(hatchWidth,HALF_PIXEL_Y);
            context.AddLineToPoint(halfMe+HALF_PIXEL_X, halfMe - HALF_PIXEL_Y);
            context.AddLineToPoint(hatchWidth, hatchHeight - (1.0f + HALF_PIXEL_Y));
            context.ClosePath();
            context.FillPath();
        }
        void HatchShingle(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            /* draw lines in the foreground color */
            context.SetFillColor(foreColor.ToCGColor());
            context.SetStrokeColor(foreColor.ToCGColor());
            context.SetLineWidth(lineWidth);
            context.SetLineCap(CGLineCap.Square);

            float halfMe = hatchWidth / 2.0f;

            // We are basically going to draw a lamda sign

            // Draw base
            context.MoveTo(0,0);
            context.AddLineToPoint(halfMe,halfMe-HALF_PIXEL_Y);
            context.AddLineToPoint(hatchWidth, HALF_PIXEL_Y);
            context.StrokePath();

            // draw the first part of tail
            context.MoveTo(halfMe + HALF_PIXEL_X, halfMe);
            context.AddLineToPoint(halfMe + HALF_PIXEL_X, halfMe + 1);
            context.StrokePath();

            // now the last curl on the tail
            RectangleF rect = new RectangleF(1,hatchHeight-1,1,1);
            setPixels(context, rect);

            rect.X += 1;
            setPixels(context, rect);

            rect.X += 1;
            rect.Y -= 1;
            setPixels(context, rect);
        }
Пример #17
0
 public static void EOFillPath(CGContext context, CGPath path, CGColor color)
 {
     context.SaveState();
     context.SetFillColor(color);
     context.AddPath(path);
     context.EOFillPath();
     context.RestoreState();
 }
        void HatchHorizontalBrick(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            /* draw lines in the foreground color */
            context.SetFillColor(foreColor.ToCGColor());

            /* draw lines in the foreground color */
            context.SetStrokeColor(foreColor.ToCGColor());
            context.SetLineWidth(lineWidth);
            context.SetLineCap(CGLineCap.Square);

            RectangleF rect = new RectangleF(0,0,1,1);

            rect.Y = 3;
            rect.Width = hatchWidth;
            rect.Height = hatchHeight - 4;
            context.StrokeRect(rect);

            context.MoveTo(hatchWidth / 2.0f, 0);
            context.AddLineToPoint(hatchWidth / 2.0f,3);
            context.StrokePath();
        }
Пример #19
0
 public static void DrawText(CGContext context, string text, string fontName, float fontSize, float translateHeight, float x, float y)
 {
     context.SaveState();
     context.SelectFont(fontName, fontSize, CGTextEncoding.MacRoman);
     context.SetTextDrawingMode(CGTextDrawingMode.Fill);
     context.SetFillColor(new CGColor(1, 1));
     context.SetStrokeColor(new CGColor(1.0f, 1.0f));
     //context.AddRect(rectText);
     //context.Clip();
     context.TextMatrix = CGAffineTransform.MakeScale(1.0f, -1.0f);
     context.TranslateCTM(0, translateHeight);
     context.ScaleCTM(1, -1);
     context.ShowTextAtPoint(x, y, text);
     context.RestoreState();
 }
 void drawBackground(CGContext context, Color color, float width, float height)
 {
     context.SetFillColor(color.ToCGColor());
     context.FillRect(new RectangleF(HALF_PIXEL_X, HALF_PIXEL_Y, width+HALF_PIXEL_X, height+HALF_PIXEL_Y));
     context.FillPath();
 }
        protected void HatchUpwardDiagonal(CGContext context)
        {
            var hatchSize = getHatchWidth (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            if (hatchStyle != HatchStyle.ForwardDiagonal &&
                hatchStyle != HatchStyle.BackwardDiagonal)
            {
                initializeContext(context, hatchSize, false);
            }
            else {
                initializeContext(context, hatchSize, true);
            }

            /* draw background */
            drawBackground (context, backColor, hatchSize, hatchSize);

            /* draw lines in the foreground color */
            context.SetStrokeColor(foreColor.ToCGColor());
            context.SetFillColor(foreColor.ToCGColor());

            context.SetLineWidth(1);
            context.SetLineCap(CGLineCap.Square);

            context.MoveTo(0,0);
            context.AddLineToPoint(hatchSize,hatchSize);
            /* draw a diagonal line for as many times as linewidth*/
            for (int l = 0; l < lineWidth; l++)
            {
                /* draw a diagonal line */
                context.MoveTo(l,0);
                context.AddLineToPoint(hatchSize, hatchSize-l);

                context.StrokePath();
            }

            /**
             * because we are within a rectangular pattern we have to complete the tip of the preceeding line
             * pattern
             */
            for (int k = 1; k < lineWidth; k++)
            {
                /* draw a diagonal line */
                context.MoveTo(0,hatchSize-k);
                context.AddLineToPoint(k-1, hatchSize-1);

                context.StrokePath();
            }
        }
        void HatchOutlinedDiamond(CGContext context)
        {
            var hatchWidth = getHatchWidth (hatchStyle);
            var hatchHeight = getHatchHeight (hatchStyle);
            var lineWidth = getLineWidth (hatchStyle);

            initializeContext(context, hatchHeight, false);

            /* draw background */
            drawBackground (context, backColor, hatchWidth, hatchHeight);

            /* draw lines in the foreground color */
            context.SetFillColor(foreColor.ToCGColor());
            context.SetStrokeColor(foreColor.ToCGColor());
            context.SetLineWidth(lineWidth);
            context.SetLineCap(CGLineCap.Square);

            // this is really just two diagonal lines from each corner too
            // their opposite corners.
            context.MoveTo(0,0);
            context.AddLineToPoint(hatchWidth, hatchHeight);
            context.StrokePath();
            context.MoveTo(1,hatchHeight);
            context.AddLineToPoint(hatchWidth, 1);
            context.StrokePath();
        }