Yes, for simple shapes like circles, triangles and boxes you can fill as you draw fairly easily.
Here's code for filled triangles:
function FilledTriangle(x0,y0,x1,y1,x2,y2)
local tx as integer
local ty as integer
local NewX as integer
` Sort the points so that they are in order of their y coords
if y1 < y0
ty=y1 : y1=y0 : y0=ty
tx=x1 : x1=x0 : x0=tx
endif
if y2 < y0
ty=y2 : y2=y0 : y0=ty
tx=x2 : x2=x0 : x0=ty
endif
if y2 < y1
ty=y2 : y2=y1 : y1=ty
tx=x2 : x2=x1 : x1=tx
endif
if y0 = y1
FlatTopTriangle(x0,y0,x1,y1,x2,y2)
else
if y1 = y2
FlatBottomTriangle(x0,y0,x1,y1,x2,y2)
else
NewX=x0+( ( ((y1+0.0)-y0) * ((x2+0.0)-x0) ) / ((y2+0.0)-y0) )+0.5
FlatBottomTriangle(x0,y0,x1,y1,NewX,y1)
FlatTopTriangle(x1,y1,NewX,y1,x2,y2)
endif
endif
endfunction
function FlatBottomTriangle(x0,y0,x1,y1,x2,y2)
local dxy_left as float
local dxy_right as float
local xs as float
local xe as float
local y as integer
if x2 > x1 then tx=x1 : x1=x2 : x2=tx
dxy_left=((x2+0.0)-x0)/((y2+0.0)-y0)
dxy_right=((x1+0.0)-x0)/((y1+0.0)-y0)
xs=x0+0.5
xe=x0+1.0
for y=y0 to y1
box xs,y,xe,y+1
xs=xs+dxy_left
xe=xe+dxy_right
next y
endfunction
function FlatTopTriangle(x0,y0,x1,y1,x2,y2)
local dxy_left as float
local dxy_right as float
local xs as float
local xe as float
local y as integer
if x1 < x0 then tx=x0 : x0=x1 : x1=tx
dxy_left=((x2+0.0)-x0)/((y2+0.0)-y0)
dxy_right=((x2+0.0)-x1)/((y2+0.0)-y1)
xs=x0+0.5
xe=x1+1.0
for y=y0 to y2
box xs,y,xe,y+1
xs=xs+dxy_left
xe=xe+dxy_right
next y
endfunction
Here's code to draw a filled circle:
function FilledCircle( CX as integer, CY as integer, R as integer )
local x as integer
local y as integer
local i as integer
local s as integer
` Precalculate the square of the radius - this is the hypotenuse
i=R*R
` Calculate the size of the central square (distance from the centre to a corner)
s=R*0.70710678 : ` this number is sin(45)
` Draw it
box CX-s, CY-s, CX+s+1, CY+s+1
s=s+1
` Loop through the bit we have not yet drawn
for y=s to R
x=sqrt( i-(y*y) )
` Draw top and bottom
box CX-x, CY-y, CX+x+1, CY-y+1
box CX-x, CY+y, CX+x+1, CY+y+1
` Draw left and right
box CX-y, CY-x, CX-y+1, CY+x+1
box CX+y, CY-x, CX+y+1, CY+x+1
next y
endfunction
And finally, filled boxes can be done using the built-in BOX command.