PAINT command

 BBS: Inland Empire Archive
Date: 01-25-93 (19:07)             Number: 332
From: SCOTT WUNSCH                 Refer#: NONE
  To: SEAN PAGE                     Recvd: NO  
Subj: PAINT command                  Conf: (2) Quik_Bas
Salutations, Sean!

  While violating the Neutral Zone on stardate 23 Jan 93,
Captain Sean Page opened hailing frequencies to the U.S.S.
All to say this:

 SP> Does anyone know of or have source code that will do a complete paint
 SP> routine.  Not like QB's paint, but un actual fill command a-la Windows
 SP> PaintBrush style fill.  I need a routine that will fill an enclosed area
 SP> regardless of it's bordercolor.

  Well, courtesy of resident EchoGenius Rich Geldreich <g>...

    Well, back when I was in 8th grade, while the other
kids where probably playing hockey or something :-),  I
created this algorithm on an old Color Computer  2.  It's
not that practical, because  it is constantly throwing &
removing things from its ring buffer, but it works!

   It's currently set up for a snake fill.   To see  a  diamond fill (which
is much more efficient  that a snake fill,  FWIW), then
look at the very  end  of the  program  and remark/unremark
 some lines...   The snake fill  looks cool, while the
diamond fill is rather dull...


        Rich


'A Snake fill
DEFINT A-Z
CONST RSize = 10000
TYPE SpillType
    x   AS INTEGER
    y   AS INTEGER
    t   AS INTEGER
END TYPE
DIM Ring(RSize - 1) AS SpillType
SCREEN 13
CLS
RANDOMIZE -3500
FOR A = 1 TO 35: x1 = RND * 320: y1 = RND * 200
x2 = RND * 320: y2 = RND * 200: LINE (x1, y1)-(x2, y2), 14: NEXT
LINE (0, 0)-(219, 199), 0: LINE (1, 0)-(220, 199), 0
LINE (319, 0)-(160, 150), 0: LINE (318, 0)-(159, 150), 0

RingIn = 0: RingOut = 0
cx = 160: cy = 150: t = 0
IF POINT(cx, cy) = 0 THEN
PSET (cx, cy), 9
DO
    IF cy > 0 AND t <> 4 THEN
        IF POINT(cx, cy - 1) = 0 THEN
            PSET (cx, cy - 1), 9
            Ring(RingIn).x = cx: Ring(RingIn).y = cy - 1: Ring(RingIn).t = 3
            RingIn = (RingIn + 1) MOD RSize
        END IF
    END IF

    IF cx < 320 AND t <> 2 THEN
        IF POINT(cx + 1, cy) = 0 THEN
            PSET (cx + 1, cy), 9
            Ring(RingIn).x = cx + 1: Ring(RingIn).y = cy: Ring(RingIn).t = 1
            RingIn = (RingIn + 1) MOD RSize
        END IF
    END IF

    IF cy < 200 AND t <> 3 THEN
        IF POINT(cx, cy + 1) = 0 THEN
            PSET (cx, cy + 1), 9
            Ring(RingIn).x = cx: Ring(RingIn).y = cy + 1: Ring(RingIn).t = 4
            RingIn = (RingIn + 1) MOD RSize
        END IF
    END IF

    IF cx > 0 AND t <> 1 THEN
        IF POINT(cx - 1, cy) = 0 THEN
            PSET (cx - 1, cy), 9
            Ring(RingIn).x = cx - 1: Ring(RingIn).y = cy: Ring(RingIn).t = 2
            RingIn = (RingIn + 1) MOD RSize
        END IF
    END IF

    'The following 3 lines give a "snake" fill.

    IF RingIn = 0 THEN EXIT DO
    RingIn = RingIn - 1
    cx = Ring(RingIn).x: cy = Ring(RingIn).y: t = Ring(RingIn).t

    'Unremark the following 3 lines and remark the 3 lines above
    'to see a "diamond" fill...

    'IF RingIn = RingOut THEN EXIT DO
    'cx = Ring(RingOut).x: cy = Ring(RingOut).y: t = Ring(RingOut).t
    'RingOut = (RingOut + 1) MOD RSize

LOOP
END IF

-+- MsgToss 2.0b
 + Origin: Computer Co-Op - Voorhees, NJ | Ted Hare (1:266/29)


  That's all, folks!

                                               /\   LLAP...
                                             > \ cott \\'unsch <
                                              \/

... Al, I just leaped into a tagline.  What does Ziggy say?

---
 * Origin: Regina, Sask, Canada, Earth, Sol System, Milky Way (1:140/23.1701)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET