LB allows extra niceties- such as transparent backgounds for each letter, and rotating the orientation of the letters. Then you can make animations that REALLY wave around.Left as an 'exercise for the reader'!
The first code generates the chosen text character-by-character along a sine-wave line. The other variation is one where instead the path is a r-theta spiral with decreasing font size. I suppose I could add random font choice too!
Note the time delay can be remmed-out, and there is a button to save nice results as a bitmap image with a name based on the current time. Other frills easily added.
nomainwin WindowWidth =600 WindowHeight =640 graphicbox #w.gb, 40, 40, 500, 500 button #w.b1. "Draw Me", [drawMe], LR, 280, 20 button #w.b2. "Save Me", [saveMe], LR, 180, 20 button #w.b3. " QUIT ", [quit], LR, 80, 20 text$ ="tenochtitlanuk on diga.me.uk!" Lng =len( text$) pi =3.14159265 open "Spiral text" for window as #w #w "trapclose [quit]" #w.gb "down ; fill 100 100 100" wait [drawMe] x = 0 ' x-position at start c$ =randomCol$() ' generate RGB string for a random colour i = 1 ' position of character in the string radius =240 ' radius from centre fSize = 60 ' initial font size stepAngle=10 +20 *rnd( 1) ' angle per step xOld =250: yOld =250 +radius #w.gb "backcolor "; c$ #w.gb "font arial "; fSize; " bold" #w.gb "fill "; c$ ' rem out if want different letter- and box background colour #w.gb "up ; goto 250 "; 250 +radius; " ; down" for theta =0 to 3600 step stepAngle ' 1 to len( text$) x =250 +radius *sin( theta *pi /180) ' specify x & y from radius and angle ( radians) y =250 +radius *cos( theta *pi /180) #w.gb "place "; x; " "; y #w.gb "color "; randomCol$() #w.gb "\"; mid$( text$, i, 1) i =i +1: if i >Lng then i =1 ' keep cycling through the characters radius =radius *0.980 ' decrease the radius... fSize =fSize *0.970 ' ... and the font size if fSize <6 then fSize =6 #w.gb "font arial "; int( fSize); " bold" #w.gb "color black ; down ; line "; xOld; " "; yOld; " "; x; " "; y xOld =x: yOld =y timer 40, [onward] ' delete this delay for fast results! wait [onward] timer 0 next theta wait [quit] close #w end [saveMe] #w.gb, "getbmp gb 0 0 500 500" bmpsave "gb", "demo" +str$( time$( "seconds")) +".bmp" wait function randomCol$() ' returns random amounts of RGB randomCol$ =str$( int( 256 *rnd( 1))) +" " +str$( int( 256 *rnd( 1))) +" " +str$( int( 256 *rnd( 1))) print randomCol$ end function
nomainwin WindowWidth =600 WindowHeight =640 graphicbox #w.gb, 40, 40, 500, 500 button #w.b1. "Draw Me", [drawMe], LR, 280, 20 button #w.b2. "Save Me", [saveMe], LR, 180, 20 button #w.b3. " QUIT ", [quit], LR, 80, 20 text$ ="tenochtitlanuk on diga.me.uk!" Lng =len( text$) pi =3.14159265 open "Spiral text" for window as #w #w "trapclose [quit]" #w.gb "down ; fill 100 100 100" wait [drawMe] x = 0 ' x-position at start c$ =randomCol$() ' generate RGB string for a random colour i = 1 ' position of character in the string radius =240 ' radius from centre fSize = 60 ' initial font size stepAngle=10 +20 *rnd( 1) ' angle per step xOld =250: yOld =250 +radius #w.gb "backcolor "; c$ #w.gb "font arial "; fSize; " bold" #w.gb "fill "; c$ ' rem out if want different letter- and box background colour #w.gb "up ; goto 250 "; 250 +radius; " ; down" for theta =0 to 3600 step stepAngle ' 1 to len( text$) x =250 +radius *sin( theta *pi /180) ' specify x & y from radius and angle ( radians) y =250 +radius *cos( theta *pi /180) #w.gb "place "; x; " "; y #w.gb "color "; randomCol$() #w.gb "\"; mid$( text$, i, 1) i =i +1: if i >Lng then i =1 ' keep cycling through the characters radius =radius *0.980 ' decrease the radius... fSize =fSize *0.970 ' ... and the font size if fSize <6 then fSize =6 #w.gb "font arial "; int( fSize); " bold" #w.gb "color black ; down ; line "; xOld; " "; yOld; " "; x; " "; y xOld =x: yOld =y timer 40, [onward] ' delete this delay for fast results! wait [onward] timer 0 next theta wait [quit] close #w end [saveMe] #w.gb, "getbmp gb 0 0 500 500" bmpsave "gb", "demo" +str$( time$( "seconds")) +".bmp" wait function randomCol$() ' returns random amounts of RGB randomCol$ =str$( int( 256 *rnd( 1))) +" " +str$( int( 256 *rnd( 1))) +" " +str$( int( 256 *rnd( 1))) print randomCol$ end function