home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Inside Multimedia 1995 August
/
IMM0895.ISO01.iso
/
magazin
/
optix
/
disk1
/
optxppac.set
/
FILL.OPT
< prev
next >
Wrap
Text File
|
1995-06-08
|
18KB
|
694 lines
def(sc,236)
def(i)
def(j)
def(cnt)
def(modus,1)
def(fillcnt)
def(fillcol)
def(qx,165)
def(qy,250)
def(ix)
def(iy)
def(x)
def(y)
procedure waitmouse
locals(x,y,k,flag)
x:=mousex
y:=mousey
k:=mousek
repeat
flag:=0
if mousex=x
if mousey=y
if mousek=k
if keypressed=0
flag:=true
endif
endif
endif
endif
until flag=0
return
procedure bit(x,y,col1,col2,col3)
disk(x ,y ,5,col1)
disk(x-1,y-1,4,col2)
disk(x-2,y-2,1,col3)
return
procedure rbox(m,xl,yo,xr,yu)
locals(i,j)
j:=vcolor
if m=0
viewport(xl+(yu-yo)/2,yo,xr-(yu-yo)/2,yu)
cbox(0,bcolor,0)
disk(xl+(yu-yo)/2,yo+(yu-yo)/2,(yu-yo)/2,vcolor)
disk(xr-(yu-yo)/2,yo+(yu-yo)/2,(yu-yo)/2,vcolor)
circle(xl+(yu-yo)/2,yo+(yu-yo)/2,(yu-yo)/2,bcolor)
circle(xr-(yu-yo)/2,yo+(yu-yo)/2,(yu-yo)/2,bcolor)
viewport(xl+(yu-yo)/2,yo+1,xr-(yu-yo)/2,yu-1)
cbox(0,vcolor,0)
for i:=0 to 30 do
line(xr-(yu-yo)/2-i,yu-1,xr-(yu-yo)/2+10,yu+20,0)
next(i)
setcolor(bcolor)
line(xr-(yu-yo)/2,yu,xr-(yu-yo)/2+10,yu+20,0)
line(xr-(yu-yo)/2-30,yu,xr-(yu-yo)/2+10,yu+20,0)
setcolor(j)
else
viewport(xl,yo+(xr-xl)/2,xr,yu-(xr-xl)/2)
cbox(0,bcolor,0)
disk(xl+(xr-xl)/2,yo+(xr-xl)/2,(xr-xl)/2,vcolor)
disk(xl+(xr-xl)/2,yu-(xr-xl)/2,(xr-xl)/2,vcolor)
circle(xl+(xr-xl)/2,yo+(xr-xl)/2,(xr-xl)/2,bcolor)
circle(xl+(xr-xl)/2,yu-(xr-xl)/2,(xr-xl)/2,bcolor)
viewport(xl+1,yo+(xr-xl)/2,xr-1,yu-(xr-xl)/2)
cbox(0,vcolor,0)
for i:=0 to 30 do
line(xr-1,yu-(xr-xl)/2-i,xr+20,yu-(xr-xl)/2+10,0)
next(i)
setcolor(bcolor)
line(xr,yu-(xr-xl)/2,xr+20,yu-(xr-xl)/2+10,0)
line(xr,yu-(xr-xl)/2-30,xr+20,yu-(xr-xl)/2+10,0)
setcolor(j)
endif
return
procedure frame(xl,yo,xr,yu,col,dick)
locals(i,j)
viewport(xl,yo,xr,yu)
for i:=1 to dick/2 do
setcolor(col+i-1)
rectangle
incviewport
next(i)
if (dick/2)*2<>dick
incviewport
endif
for j:=1 to dick/2 do
setcolor(col+i-j)
rectangle
incviewport
next(j)
return
procedure ffill(x,y,xo,yo,c,f)
rem ***
rem *** Muster-Filling (max. Rekursionstiefe = 1000 Durchläufe)
rem *** benutzt zum Füllen die angegebene Füllfarbe 'f' und
rem *** geht von der Ausgangsfarbe 'c' an Pos. 'x,y' aus.
rem *** 'xo, yo' =Rasteroffsets.
locals(v)
inc(fillcnt,1)
if mousek<>2
if fillcnt<1000
setcolor(f)
getpixel(x,y,v)
if v=c
if v<>f
plot(x,y)
ffill(x+xo,y ,xo,yo,c,f)
ffill(x ,y+yo,xo,yo,c,f)
ffill(x+xo,y+yo,xo,yo,c,f)
ffill(x-xo,y ,xo,yo,c,f)
ffill(x-xo,y+yo,xo,yo,c,f)
ffill(x ,y-yo,xo,yo,c,f)
ffill(x-xo,y-yo,xo,yo,c,f)
ffill(x+xo,y-yo,xo,yo,c,f)
endif
endif
endif
endif
dec(fillcnt,1)
return
procedure afill(x,y,c,f,o)
rem ***
rem *** Color-Filling (max. Rekursionstiefe = 1000 Durchläufe)
rem *** benutzt zum Füllen die angegebene Füllfarbe 'f' und
rem *** geht von der Ausgangsfarbe 'c' an Pos. 'x,y' aus. Mit 'o'
rem *** kann bei der Punktanalyse zusätzlich eine max. Farbabweichung
rem *** von 'c' um 'o' Farbstufen eingestellt werden. Es wird dann
rem *** also nicht nur Farbe 'c' gefüllt, sondern auch von Farbe
rem *** 'c-o' bis Farbe 'c+o'.
locals(v,i,flag)
inc(fillcnt,1)
if mousek<>2
if fillcnt<1000
setcolor(f)
getpixel(x,y,v)
for i:=c-o to c+o do
if v=i
flag:=1
endif
next(i)
if flag<>0
if v<>f
plot(x,y)
afill(x+1,y ,c,f,o)
afill(x+1,y-1,c,f,o)
afill(x ,y+1,c,f,o)
afill(x+1,y+1,c,f,o)
afill(x-1,y ,c,f,o)
afill(x-1,y+1,c,f,o)
afill(x ,y-1,c,f,o)
afill(x-1,y-1,c,f,o)
endif
endif
endif
endif
dec(fillcnt,1)
return
procedure xfill(x,y,c)
rem ***
rem *** X-Muster-Filling (max. Rekursionstiefe = 1000 Durchläufe)
rem *** Benutzt zum Füllen die aktuelle SETCOLOR-Farbe, sucht diagonal
rem *** und geht von der Ausgangsfarbe 'c' an Pos. 'x,y' aus.
locals(v)
inc(fillcnt,1)
if mousek<>2
if fillcnt<1000
getpixel(x,y,v)
if v=c
plot(x,y)
xfill(x+1,y+1,c)
xfill(x-1,y+1,c)
xfill(x-1,y-1,c)
xfill(x+1,y-1,c)
endif
endif
endif
dec(fillcnt,1)
return
procedure do_fill(x,y,c)
rem ***
rem *** Color-Filling (max. Rekursionstiefe = 1000 Durchläufe)
rem *** benutzt zum Füllen die angegebene Farbe 'c' und
rem *** geht von der Startposition 'x,y' aus.
locals(v)
inc(fillcnt,1)
if mousek<>2
if fillcnt<1000
getpixel(x,y,v)
if v=fillcol
if v<>c
plotc(x,y,c)
do_fill(x+1,y ,c)
do_fill(x+1,y-1,c)
do_fill(x ,y+1,c)
do_fill(x+1,y+1,c)
do_fill(x-1,y ,c)
do_fill(x-1,y+1,c)
do_fill(x ,y-1,c)
do_fill(x-1,y-1,c)
endif
endif
endif
endif
dec(fillcnt,1)
return
procedure fill(x,y,c)
getpixel(x,y,fillcol)
do_fill(x,y,c)
return
procedure bfill(x,y)
rem ***
rem *** Bereichs-Color-Filling mit (max. Rekursionstiefe = 1000 Durchläufe)
rem *** benutzt zum Füllen die aktuelle SETCOLOR-Farbe und wird nur
rem *** durch die aktuelle SETBCOLOR-Farbe begrenzt. Der Prozess startet
rem *** an Position 'x,y'.
locals(v)
inc(fillcnt,1)
if mousek<>2
if fillcnt<1000
getpixel(x,y,v)
bound(x,0,xmax)
bound(y,0,ymax)
if v<>bcolor
if v<>vcolor
plot(x,y)
bfill(x+1,y)
bfill(x+1,y-1)
bfill(x ,y+1)
bfill(x+1,y+1)
bfill(x-1,y)
bfill(x-1,y+1)
bfill(x ,y-1)
bfill(x-1,y-1)
endif
endif
endif
endif
dec(fillcnt,1)
return
procedure cfill(x,y,col1,col2)
rem ***
rem *** Bereichs-Color-Filling mit (max. Rekursionstiefe = 1000 Durchläufe)
rem *** benutzt zum Füllen die aktuelle SETCOLOR-Farbe und füllt nur die
rem *** Bereiche, die innerhalb des Farbbereichs von 'col1' bis 'col2'
rem *** liegen. Der Füllprozess startet an Position 'x,y'.
locals(v)
inc(fillcnt,1)
if mousek<>2
if fillcnt<1000
getpixel(x,y,v)
bound(x,0,xmax)
bound(y,0,ymax)
if v<=col2
if v>=col1
if v<>vcolor
plot(x,y)
cfill(x+1,y ,col1,col2)
cfill(x+1,y-1,col1,col2)
cfill(x ,y+1,col1,col2)
cfill(x+1,y+1,col1,col2)
cfill(x-1,y ,col1,col2)
cfill(x-1,y+1,col1,col2)
cfill(x ,y-1,col1,col2)
cfill(x-1,y-1,col1,col2)
endif
endif
endif
endif
endif
dec(fillcnt,1)
return
procedure rfill(x,y,c)
rem ***
rem *** Restore-Filling (max. Rekursionstiefe = 1000 Durchläufe)
rem *** benutzt zum Füllen das entsprechende Pixel des Hintergrund-
rem *** (Restore-) Speichers
locals(v)
inc(fillcnt,1)
if mousek<>2
if fillcnt<1000
getpixel(x,y,v)
if v=c
restoreline(x,y,x,y,0)
rfill(x+1,y ,c)
rfill(x ,y+1,c)
rfill(x+1,y+1,c)
rfill(x-1,y ,c)
rfill(x-1,y+1,c)
rfill(x ,y-1,c)
rfill(x-1,y-1,c)
rfill(x+1,y-1,c)
endif
endif
endif
dec(fillcnt,1)
return
procedure pfill(x,y,x2,y2,c)
rem ***
rem *** Quellpixel-Filling (max. Rekursionstiefe = 1000 Durchläufe)
rem *** benutzt zum Füllen das entsprechende Pixel des Quellbereichs
rem ****
rem *** x ,y : Ausgangs-Koordinaten des Füllbereichs
rem *** x2,y2: Ausgangs-Koordinaten des Quellbereichs
locals(v,v2)
inc(fillcnt,1)
if mousek<>2
if fillcnt<1000
getpixel(x,y,v)
if v=c
getpixel(x2,y2,v2)
if v<>v2
plotc(x,y,v2)
pfill(x+1,y ,x2+1,y2 ,c)
pfill(x+1,y-1,x2+1,y2-1,c)
pfill(x ,y+1,x2 ,y2+1,c)
pfill(x+1,y+1,x2+1,y2+1,c)
pfill(x-1,y ,x2-1,y2 ,c)
pfill(x-1,y-1,x2-1,y2-1,c)
pfill(x ,y-1,x2 ,y2-1,c)
pfill(x-1,y+1,x2-1,y2+1,c)
endif
endif
endif
endif
dec(fillcnt,1)
return
procedure cpfill(x,y,x2,y2,col1,col2)
rem ***
rem *** Bereichs-Quellpixel-Filling mit (max. Rekursionstiefe = 1000
rem *** Durchläufe), benutzt zum Füllen das entsprechende Pixel des
rem *** Quellbereichs und füllt nur die Bereiche, die innerhalb des
rem *** Farbbereichs von 'col1' bis 'col2' liegen. Der Füllprozess
rem *** startet an Position 'x,y' und beginnt im Quellbereich an den
rem *** Ausgangskoordinaten 'x2,y2'
locals(v,v2)
inc(fillcnt,1)
if mousek<>2
if fillcnt<1000
bound(x,0,xmax)
bound(y,0,ymax)
getpixel(x,y,v)
if v<=col2
if v>=col1
getpixel(x2,y2,v2)
if v<>v2
plotc(x,y,v2)
cpfill(x+1,y ,x2+1,y2 ,col1,col2)
cpfill(x+1,y-1,x2+1,y2-1,col1,col2)
cpfill(x ,y+1,x2 ,y2+1,col1,col2)
cpfill(x+1,y+1,x2+1,y2+1,col1,col2)
cpfill(x-1,y ,x2-1,y2 ,col1,col2)
cpfill(x-1,y-1,x2-1,y2-1,col1,col2)
cpfill(x ,y-1,x2 ,y2-1,col1,col2)
cpfill(x-1,y+1,x2-1,y2+1,col1,col2)
endif
endif
endif
endif
endif
dec(fillcnt,1)
return
begin
readsound('loop.voc')
soundloop(on)
startsound
readfont(1,'tri22n.fnt')
font(1)
readpic('orca.tga')
setallpal
clearscreen(56)
keycol(126)
key(on)
setpstd
setsubpal(15)
gradation(231,239,2,5,4,32,63,56)
textcofs(-2)
textcolor(252)
setrgbcolor(21,20,26,252)
printat(445,30,'Rettet')
printat(445,60,'die Wale')
sysfont(2,1)
font(0)
for i:=0 to 42 do
setrgbcolor(21+i,20-i/2,26-i/2,252)
pause(50)
next(i)
setcolor(208)
setrgbcolor(21,20,26,208)
printc(249,150,'Eines der größten Tiere, die jemals auf diesem prächtigen')
printc(249,170,'Planeten ERDE gelebt haben - und das heute noch lebt -')
printc(249,190,'ist der Blauwal. Er wird über 30 (!) Meter lang und bis')
printc(249,210,'zu 150 Tonnen schwer (soviel wie ca. 35 ausgewachsene')
printc(249,230,'Elefanten). Der schnellste Mensch der Welt müßte ca. drei')
printc(249,250,'Sekunden in Höchstgeschwindigkeit laufen, um von der')
printc(249,270,'Schwanzspitze bis zum Maul des Wals zu gelangen, in das')
printc(249,290,'-sage und schreibe- ein ganzes Einfamilienhaus hineinpaßt.')
printc(249,330,'Er wurde durch eine erbarmungslose Ausrottungsmaschinerie')
printc(249,350,'im Laufe der letzten 150 Jahre global von ca. 650.000 bis')
printc(249,370,'auf ca. ganze 2.000 Exemplare dezimiert. Stellen Sie sich')
printc(249,390,'nun bitte für jeden (!) einzelnen Punkt auf dem Bildschirm')
printc(249,410,'(ca. 310.000) zwei Blauwale vor - und drücken nun eine')
printc(249,430,'<Taste> um zu sehen, welch - fast - verschwindende Anzahl')
printc(249,450,'heute davon noch übrig geblieben ist.')
for i:=0 to 25 do
setrgbcolor(21+i,20+(i*37/26),26+(i*33/26),208)
pause(10)
next(i)
pause(120000)
for i:=0 to 25 do
setrgbcolor(46-i,57-(i*37/25),59-(i*33/25),208)
pause(30)
next(i)
getpal
wait(500)
fadeout(1)
clearscreen(146)
fadein(1)
setrgbcolor(46,57,59,208)
cnt:=0
repeat
random(xmax/10+10,ix)
random(ymax/10+10,iy)
getpixel(ix*10+5,iy*10+5,sc)
if sc<>0
inc(cnt,1)
viewport(ix*10,iy*10,ix*10+9,iy*10+9)
cbox(0,0,0)
endif
until cnt>4760
repeat
until readkey+mousek=0
pause(3000)
font(1)
setcolor(122)
for i:=0 to xmax step 5 do
line(0,i,xmax,i,0)
line(i,0,i,xmax,0)
next(i)
for i:=50 to 400 step 2 do
setcolor(39+i/2)
line(20,i,420,i,0)
line(20,i+1,420,i+1,0)
next(i)
scrtobuf
viewport(50+winx,99,59+winx,99+winy)
cbox(9,0,0)
viewport(59,89+winy,59+winx,99+winy)
cbox(9,0,0)
viewport(49,89,50+winx,90+winy)
plateau(255,50)
frame(20,50,420,400,231,18)
disk(200,216,120,245)
disk(200,216,113,252)
disk(200,216,106, 84)
disk(200,216, 99,254)
disk(200,216, 92,250)
disk(200,216, 85,249)
disk(200,216, 78,241)
disk(200,216, 71,244)
loadwin(50,90,0,0)
showpalette(442,304,2)
copywin(442,304,634,416)
key(off)
for i:=0 to winy-1 do
loadsprite(0,i,442,192+i*2,winx,2)
next(i)
key(on)
copywin(20,438,300,473)
keycol(56)
setcolor(255)
loadwin(19,434,16,0)
setcolor(0)
loadwin(21,436,16,0)
setcolor(78)
loadwin(20,435,17,0)
textcolor(255)
textcofs(0)
printat(29,432,'OPTIX - Filling')
textcolor(0)
printat(31,434,'OPTIX - Filling')
textcolor(178)
printat(30,433,'OPTIX - Filling')
sysfont(0,1)
font(0)
setcolor(255)
printat(320,436,'rechte Maustaste = Farb-Auswahl')
printat(320,448,'linke Maustaste = Füll-Start')
printat(320,460,'rechte Maustaste halten = Füll-Abbruch')
cnt:=0
disk(570,150,24,0)
disk(565,145,22,200)
disk(565,145,15,220)
pfill(565,127,310,140,200)
defbutton(445, 33,75,20,15,1,0,1,'1','dummy')
defbutton(445, 55,75,20,15,1,0,1,'1','dummy')
defbutton(445, 77,75,20,15,1,0,1,'1','dummy')
defbutton(445, 99,75,20,15,1,0,1,'1','dummy')
defbutton(445,121,75,20,15,1,0,1,'1','dummy')
defbutton(445,143,75,20,15,1,0,1,'1','dummy')
defbutton(445,165,75,20,15,1,0,1,'1','dummy')
setcolor(0)
printat(452, 37,'FILL')
printat(452, 59,'BFILL')
printat(452, 81,'XFILL')
printat(452,103,'AFILL')
printat(452,126,'CPFILL')
printat(452,147,'FFILL')
printat(452,169,'CFILL')
fill(46 ,450,249)
fill(55 ,450,250)
fill(82 ,450,251)
fill(97 ,450,252)
fill(114,450,254)
rem checkbutton('dummy',1,0) *** in dieser Demo eigentlich unnötig,
rem *** wäre hier nur zum Aufräumen der
rem *** DEFBUTTON-Objektkette sinnvoll
:dummy
scrtobuf
curson(mousex,mousey)
bit(511,43+(modus-1)*22,244,252,255)
repeat
inbox(445,33,520,190,j)
if j:=false
waitmouse
endif
cursoff
for i:=0 to 6 do
inbox(445,33+i*22,520,33+i*22+20,j)
if j:=true
if mousek=1
modus:=i+1
viewport(447,35+i*22,518,31+i*22+20)
plateau(240,255)
wait(100)
plateau(255,248)
viewport(445,33,520,190)
restorebox(0,0)
bit(511,43+i*22,244,252,255)
setcolor(255)
j:=30+i*22
rbox(0,230,j-44,470,j-6)
setcolor(240)
if i+1=1
printc(350,j-28,'Standard-')
printc(350,j-16,'Filling')
endif
if i+1=2
printc(350,j-34,'Bereichsfill - wird')
printc(350,j-24,'nur durch BCOLOR')
printc(350,j-14,'(hier: 231) begrenzt')
endif
if i+1=3
printc(350,j-34,'X-Musterfill - erzeugt')
printc(350,j-24,'eine Punktraster mit')
printc(350,j-14,'VCOLOR im Füllbereich')
endif
if i+1=4
printc(350,j-34,'Bereichsfill - arbeitet')
printc(350,j-24,'mit Offset zur Ausgangs-')
printc(350,j-14,'farbe (hier: 3)')
endif
if i+1=5
printc(350,j-34,'Quellbereichsfill-begrenzt')
printc(350,j-24,'nur durch col1/col2 (0-96)')
printc(350,j-14,'füllt m.AnalogQuellpixeln')
endif
if i+1=6
printc(350,j-34,'Rasterfill - Farbfill,')
printc(350,j-24,'füllt in einem einstell-')
printc(350,j-14,'baren X/Y-Offsetraster')
endif
if i+1=7
printc(350,j-34,'Füllt nur die Farben, die')
printc(350,j-24,'im Bereich "col1" bis "col2"')
printc(350,j-14,'(hier: 128 ... 230) liegen')
endif
waitmouse
viewport(230,j-44,470,j+15)
restorebox(0,0)
endif
endif
next(i)
if keypressed<>0
repeat
until readkey+mousek=0
endif
ix:=mousex
iy:=mousey
getpixel(ix,iy,i)
disk(xmax-20,20,20,sc)
circle(xmax-20,20,20,i)
disk(xmax-20,20,13,i)
printc(xmax-20,20,str(i,3))
inbox(445,33,520,190,j)
if j=0
if mousek=1
noise(1200,2)
setcolor(sc)
setbcolor(231)
if modus=1
fill(ix,iy,sc)
endif
if modus=2
bfill(ix,iy)
endif
if modus=3
xfill(ix,iy,i)
endif
if modus=4
afill(ix,iy,i,sc,3)
endif
if modus=5
cpfill(ix,iy,qx,qy,0,96)
endif
if modus=6
ffill(ix,iy,2,2,i,sc)
endif
if modus=7
cfill(ix,iy,128,230)
endif
bit(511,43+(modus-1)*22,247,247,247)
scrtobuf
bit(511,43+(modus-1)*22,244,252,255)
endif
endif
if mousek=2
qx:=mousex
qy:=mousey
getpixel(qx,qy,sc)
endif
curson(mousex,mousey)
until mousek=3
end