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 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 HatchDiagonalBrick(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.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); hatchHeight -= 1; hatchWidth -= 1; context.MoveTo(0, 0); context.AddLineToPoint(hatchWidth,hatchHeight); context.StrokePath(); context.MoveTo(0, hatchHeight); context.AddLineToPoint(hatchWidth / 2.0f,hatchHeight / 2.0f); context.StrokePath(); }
void HatchDiagonalCross(CGContext context) { var hatchWidth = getHatchWidth (hatchStyle); var hatchHeight = getHatchHeight (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchHeight, true); /* draw background */ drawBackground (context, backColor, hatchWidth, hatchHeight); /* draw lines in the foreground color */ context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); float halfMe = hatchHeight / 2.0f; context.MoveTo(0, 0); context.AddLineToPoint(hatchWidth, hatchHeight); context.StrokePath(); context.MoveTo(hatchWidth, 0); context.AddLineToPoint(0, hatchHeight); context.StrokePath(); }
protected void HatchVertical(CGContext context) { var hatchSize = getHatchWidth (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchSize, false); /* draw background */ drawBackground (context, backColor, hatchSize, hatchSize); /* draw horizontal line in the foreground color */ context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); float halfMe = hatchSize / 2.0f; // draw a horizontal line context.MoveTo(0, 0); context.AddLineToPoint(0, hatchSize); context.StrokePath(); }
void HatchDashedHorizontal(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.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); float halfMe = hatchHeight / 2.0f - 1; hatchWidth -=1; hatchHeight -= 1; context.MoveTo(halfMe+1, halfMe); context.AddLineToPoint(hatchWidth, halfMe); context.StrokePath(); context.MoveTo(0,hatchHeight); context.AddLineToPoint(halfMe, hatchHeight); context.StrokePath(); }
/** * 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 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(); }
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(); }
protected void HatchGrid(CGContext context) { var hatchSize = getHatchWidth (hatchStyle); var lineWidth = getLineWidth (hatchStyle); initializeContext(context, hatchSize, false); /* draw background */ drawBackground (context, backColor, hatchSize, hatchSize); /* draw lines in the foreground color */ context.SetStrokeColor(foreColor.ToCGColor()); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Square); hatchSize -=HALF_PIXEL_X; float yoffset = 0; if (hatchStyle == HatchStyle.DottedGrid) { yoffset = 1; float[] dash = new float[] { 1, 1}; context.SetLineDash(2,dash); } /* draw a horizontal line */ context.MoveTo(0,yoffset); context.AddLineToPoint(0,hatchSize); context.StrokePath(); /* draw a vertical line */ context.MoveTo(0,hatchSize); context.AddLineToPoint(hatchSize, hatchSize); context.StrokePath(); }
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); }
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); }
public CoreGraphicsGraphics(CGContext c, bool highQuality) { if (c == null) throw new ArgumentNullException ("c"); _c = c; //_highQuality = highQuality; if (highQuality) { c.SetLineCap (CGLineCap.Round); } else { c.SetLineCap (CGLineCap.Butt); } SetColor (Colors.Black); }
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(); } }
public static void DrawRoundedLine(CGContext context, List<PointF> points, CGColor color, float lineWidth, bool closePath, bool dashed) { if (points == null) throw new NullReferenceException(); if (points.Count == 0) throw new ArgumentException("The line must have at least one point."); context.SaveState(); context.SetStrokeColor(color); context.SetLineWidth(lineWidth); context.SetLineCap(CGLineCap.Round); context.SetLineJoin(CGLineJoin.Round); context.MoveTo(points[0].X, points[0].Y); for(int a = 1; a < points.Count; a++) context.AddLineToPoint(points[a].X, points[a].Y); if (dashed) context.SetLineDash(0, new float[2] { 1, 2 }, 2); if (closePath) context.ClosePath(); context.StrokePath(); 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(); }