1

I used surface.DrawTexturedRectRotated() to make filled circle but it rotates from center and i want to make it rotate from left.

I tried to rotate it but it makes full circle when its 180 degrees

function draw.FilledCircle( x, y, w, h, ang, color )
    for i=1,ang do
        draw.NoTexture()
        surface.SetDrawColor( color or color_white )
        surface.DrawTexturedRectRotated( x,y, w, h, i )
    end
end

How do i make it to be rotated from left?

kruzgi
  • 11
  • 2

1 Answers1

1

If you want a function that allows you to create pie-chart-like filled circle by specifying the ang parameter, your best bet is probably surface.DrawPoly( table vertices ). You should be able to use it like so:

function draw.FilledCircle(x, y, r, ang, color)    --x, y being center of the circle, r being radius
    local verts = {{x = x, y = y}}    --add center point
    for i = 0, ang do
        local xx = x + math.cos(math.rad(i)) * r
        local yy = y - math.sin(math.rad(i)) * r
        table.insert(verts, {x = xx, y = yy})
    end

    --the resulting table is a list of counter-clockwise vertices
    --surface.DrawPoly() needs clockwise list
    verts = table.Reverse(verts)    --should do the job

    surface.SetDrawColor(color or color_white)
    draw.NoTexture()
    surface.DrawPoly(verts)
end

I have put surface.SetDrawColor() before draw.NoTexture() as this example suggests it.

You may want to use for i = 0, ang, angleStep do instead to reduce the number of vertices, therefore reducing hardware load, however that is viable only for small circles (like the one in your example) so the angle step should be some function of radius to account for every situation. Also, additional computing needs to be done to allow for angles that do not divide by the angle step with remainder of zero.

--after the for loop
if ang % angleStep then
    local xx = x + math.cos(math.rad(ang)) * r
    local yy = y - math.sin(math.rad(ang)) * r
    table.insert(verts, {x = xx, y = yy})
end

As for the texturing, this will be very different from rectangle if your texture is anything else than solid color, but a swift look at the library did not reveal any better way to achieve this.

IsawU
  • 430
  • 3
  • 12