// FillStyle demonstrates the difference between even odd and non zero winding rule. func FillStyle(gc draw2d.GraphicContext, x, y, width, height float64) { sx, sy := width/232, height/220 gc.SetLineWidth(width / 40) draw2dkit.Rectangle(gc, x+sx*0, y+sy*12, x+sx*232, y+sy*70) var wheel1, wheel2 draw2d.Path wheel1.ArcTo(x+sx*52, y+sy*70, sx*40, sy*40, 0, 2*math.Pi) wheel2.ArcTo(x+sx*180, y+sy*70, sx*40, sy*40, 0, -2*math.Pi) gc.SetFillRule(draw2d.FillRuleEvenOdd) gc.SetFillColor(color.NRGBA{0, 0xB2, 0, 0xFF}) gc.SetStrokeColor(image.Black) gc.FillStroke(&wheel1, &wheel2) draw2dkit.Rectangle(gc, x, y+sy*140, x+sx*232, y+sy*198) wheel1.Clear() wheel1.ArcTo(x+sx*52, y+sy*198, sx*40, sy*40, 0, 2*math.Pi) wheel2.Clear() wheel2.ArcTo(x+sx*180, y+sy*198, sx*40, sy*40, 0, -2*math.Pi) gc.SetFillRule(draw2d.FillRuleWinding) gc.SetFillColor(color.NRGBA{0, 0, 0xE5, 0xFF}) gc.FillStroke(&wheel1, &wheel2) }
// Main draws vertically spaced lines and returns the filename. // This should only be used during testing. func Main(gc draw2d.GraphicContext, ext string) (string, error) { gc.SetFillRule(draw2d.FillRuleWinding) gc.Clear() // Draw the line for x := 5.0; x < 297; x += 10 { Draw(gc, x, 0, x, 210) } gc.ClearRect(100, 75, 197, 135) draw2dkit.Ellipse(gc, 148.5, 105, 35, 25) gc.SetFillColor(color.RGBA{0xff, 0xff, 0x44, 0xff}) gc.FillStroke() // Return the output filename return samples.Output("line", ext), nil }