Any easy way to fill certain (closed) area of HIRES screen?

The Oric video chip is not an easy beast to master, so any trick or method that allows to achieve nice visual results is welcome. Don't hesitate to comment (nicely) other people tricks and pictures :)
Post Reply
Brana
Flying Officer
Posts: 150
Joined: Fri Nov 30, 2007 8:30 pm
Contact:

Any easy way to fill certain (closed) area of HIRES screen?

Post by Brana » Sat Jul 06, 2013 3:21 am

Any easy way to fill certain (closed) area of the HIRES screen?



I'm wondering is there any simple (in BASIC?) solution, for this is the problem that's been bugging me for a couple of years now (!)

If I do something simple as drawing a circle, square, or an ellipse in HIRES in Oric Atmos, then sometimes I need to fill all (inside) pixels of that (closed) shape with INK color (just to be white), but I do not know any simple (and accurate) way to do that?

Is there any solution in Oric BASIC for this situation?

User avatar
Dbug
Site Admin
Posts: 2268
Joined: Fri Jan 06, 2006 10:00 pm
Location: Oslo, Norway
Contact:

Re: Any easy way to fill certain (closed) area of HIRES scre

Post by Dbug » Sat Jul 06, 2013 7:53 am

Yes there is a way, I remember there was some Type In programs in some magazines with a BASIC implementation of that.
What you need to search for is 'floodfill'.

There are some examples with animations and pseudocode on wikipedia.:
http://en.wikipedia.org/wiki/Flood_fill

Know that there are many different methods to do it, but they basically are all recursive (so you may get an error with a Stack Overflow) or require arrays to store the non yet treated branches. Some are more efficient than others, and most can just be implemented with POINT(x,y) and CURSET(x,y,t).

In BASIC it may be quite slow, but I would try first the scanline method, it's probably the less memory/stack intensive.
Image

User avatar
peacer
Flight Lieutenant
Posts: 348
Joined: Wed Jun 09, 2010 9:23 pm
Location: Turkey
Contact:

Re: Any easy way to fill certain (closed) area of HIRES scre

Post by peacer » Sat Jul 06, 2013 10:59 am

In Peter's web site (TheSpider) he put his own painting program "spaint" . The program is written in %100 basic. The program is really helpful. It has many subroutines to draw circle, box, change attribute etc and shape filling routine. The filling code is really short, simple and fast.
4750 PRINTR$;"Fill Shape : Are you sure? (Y/N)"
4760 REPEAT:CK$=KEY$:UNTIL CK$="Y" OR CK$="N"
4770 IF CK$="N" THEN RETURN
4780 ' Fill shape
4790 FX=X:FY=Y
4800 IF POINT(X,Y)=0 THEN FP=0 ELSE FP=-1
4810 IF FP=0 THEN PRINT"Filling in foreground colour"
4820 IF FP=-1 THEN PRINT"Filling in background colour"
4830 REPEAT:PY=-1 ' move to top
4840 IF FY=LY THEN GOTO 4860
4850 IF POINT(FX,FY-1)=FP THEN FY=FY-1:PY=0
4860 UNTIL PY=-1
4870 CURSET FX,FY,2
4880 REPEAT:PY=-1 ' going down
4890 REPEAT:PX=-1 ' go left
4900 IF FX=LX THEN GOTO 4920
4910 IF POINT(FX-1,FY)=FP THEN CURSET FX-1,FY,2:FX=FX-1:PX=0
4920 UNTIL PX=-1
4930 FX=X
4940 REPEAT:PX=-1 ' go right
4950 IF FX=MX THEN GOTO 4970
4960 IF POINT(FX+1,FY)=FP THEN CURSET FX+1,FY,2:FX=FX+1:PX=0
4970 UNTIL PX=-1
4980 FX=X
4990 IF FY=MY THEN GOTO 5010
5000 IF POINT(FX,FY+1)=FP THEN CURSET FX,FY+1,2:FY=FY+1:PY=0
5010 UNTIL PY=-1
5020 RETURN
http://oricspider.home.insightbb.com/spiderbasic.html

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest