GLE Library: stm.gle
! Common subroutines for laying-out STM images
! By: Vincent P. LaBella
sub scale_bar llength texth a$ lx ly ap$ line_width text_offset fillpattern$ boxit x_buffer y_buffer
!
! draws a scale bar with text over it
!
! llenght ........ line length
! a$.............. text
! texth........... texht height
! lx.............. x coordinate of box
! ly.............. y coordinate of box
! ap$............. anchor point (tl,tc,tr,lc,cc,rc,bl,bc,br)
! line_width ..... width of line
! text_offset .... offset of text from line
! fillpattern$.... background
! boxit........... =1 draws a black box=0 no box is drawn
! x_buffer........ distance on both ends from line to box
! y_buffer........ distance on top and bottom
!
! -- calculate box height and width
!
boxw=llength+x_buffer*2
boxh=texth-0.1+line_width+text_offset+2*y_buffer
gsave
set hei texth
set color BLACK
set just bc
!
! translate starting coordinates to lower left hand side
!
if ap$="tr" then
lx=lx-boxw
ly=ly-boxh
end if
if ap$="tc" then
lx=lx-boxw/2
ly=ly-boxh
end if
if ap$="tl" then
lx=lx
ly=ly-boxh
end if
if ap$="rc" then
lx=lx-boxw
ly=ly-boxh/2
end if
if ap$="cc" then
lx=lx-boxw/2
ly=ly-boxh/2
end if
if ap$="lc" then
lx=lx
ly=ly-boxh/2
end if
if ap$="br" then
lx=lx-boxw
ly=ly
end if
if ap$="bc" then
lx=lx-boxw/2
ly=ly
end if
if ap$="bl" then
lx=lx
ly=ly
end if
lstartx=lx+x_buffer
lstarty=ly+y_buffer
amove lx ly
if boxit=1 then
box boxw boxh fill fillpattern$
else
box boxw boxh fill fillpattern$ nobox
end if
set lwidth line_width
amove lstartx lstarty
rline llength 0.0
amove lstartx+llength/2.0 lstarty+text_offset+line_width/2
write a$
grestore
end sub
sub textbox x1 y1 ap$ text_size string$ txbuffer tybuffer boxit bgcolor$ fgcolor$ lncolor$ lnwidth
!
! draws a box around a piece of text and fills it with a color
!
! (x1,y1) ........ x and y coordinates of box
! ap$............. anchor point (tl,tc,tr,lc,cc,rc,bl,bc,br)
! string$......... the string to put in the box
! text_size....... the size of the text
! t(x,y)buffer.... extra padding around text
! boxit........... 1 draws box 0 no box is drawn
! fg color........ text color
! bgcolor ........ background color
! lnwidth......... line width of surrounding box
! lncolor......... line color of surrounding box
!
!
gsave
!
! translate starting coordinates to lower left hand side
!
set hei text_size
textbox_boxw=2*txbuffer+TWIDTH(string$)
textbox_boxh=2*tybuffer+THEIGHT(string$)
if ap$="tr" then
x1=x1-textbox_boxw
y1=y1-textbox_boxh
end if
if ap$="tc" then
x1=x1-textbox_boxw/2
y1=y1-textbox_boxh
end if
if ap$="tl" then
x1=x1
y1=y1-textbox_boxh
end if
if ap$="rc" then
x1=x1-textbox_boxw
y1=y1-textbox_boxh/2
end if
if ap$="cc" then
x1=x1-textbox_boxw/2
y1=y1-textbox_boxh/2
end if
if ap$="lc" then
x1=x1
y1=y1-textbox_boxh/2
end if
if ap$="br" then
x1=x1-textbox_boxw
y1=y1
end if
if ap$="bc" then
x1=x1-textbox_boxw/2
y1=y1
end if
if ap$="bl" then
x1=x1
y1=y1
end if
amove x1 y1
set color lncolor$
set lwidth lnwidth
if boxit=1 then
box textbox_boxw textbox_boxh fill bgcolor$
else
box textbox_boxw textbox_boxh fill bgcolor$ nobox
end if
set color fgcolor$
set just cc
amove x1+textbox_boxw/2 y1+textbox_boxh/2
write string$
grestore
end sub
sub axis_dir x1 y1 dx dy x_text$ y_text$ text_height angle text_offset text_ap$
!
! draws and axis x and y and lables it called by axis_box
!
gsave
amove x1 y1
set hei text_height
begin rotate angle
rline dx 0.0 arrow end
if angle>90 then
set just tl
begin rotate 180
rmove 0.0 -text_offset
write x_text$
end rotate
else
set just br
rmove 0.0 text_offset
write x_text$
end if
amove x1 y1
rline 0.0 dy arrow end
!
! for y text roate if necessary
!
if angle<0 then
set just bc
begin rotate 90
rmove 0.0 -text_offset
write y_text$
end rotate
else
set just bl
rmove text_offset 0.0
begin rotate -90
write y_text$
end rotate
end if
end rotate
grestore
end sub
sub axis_box lx ly textx$ texty$ angle xoffset yoffset axis_length ap$ boxit fgcolor$ bgcolor$ txtcolor$ text_height text_offset
!
! draws a box and puts two axis 90 deg apart and lables them as you want
!
! lx,ly........location of box
! textx$.......text to put on x axis
! texty$.......text to put on y axis
! angle........axis is rotated
! xoffset......location of origin relative to corner of box
! yoffset......""""""" """ """ """
! axis_length..lenght of axis
! ap$..........anchor point (does not work yet puts it at lower left
! boxit........1 draws box 0 no box
! text_offset....offset of text from axis
!
gsave
amove lx ly
begin rotate angle
if boxit=1 then
set color fgcolor$
box axis_length+2*xoffset axis_length+2*yoffset fill bgcolor$
else
set color bgcolor$
box axis_length+2*xoffset axis_length+2*yoffset fill bgcolor$
end if
set color fgcolor$
end rotate
@axis_dir lx+xoffset ly+yoffset axis_length axis_length textx$ texty$ text_height angle text_offset "br"
grestore
end sub
sub axis_boxr lx ly textx$ texty$ angle xoffset yoffset axis_length ap$ boxit fgcolor$ bgcolor$ txtcolor$ text_height text_offset
!
! draws a box and puts two axis 90 deg apart and lables them as you want
!
! lx,ly........location of box
! textx$.......text to put on x axis
! texty$.......text to put on y axis
! angle........axis is rotated
! xoffset......location of origin relative to corner of box
! yoffset......""""""" """ """ """
! axis_length..lenght of axis
! ap$..........anchor point (does not work yet puts it at lower left
! boxit........1 draws box 0 no box
! text_offset....offset of text from axis
!
gsave
amove lx ly
begin rotate angle
if boxit=1 then
set color fgcolor$
box axis_length+2*xoffset axis_length+2*yoffset fill bgcolor$
else
set color bgcolor$
box axis_length+2*xoffset axis_length+2*yoffset fill bgcolor$
end if
set color fgcolor$
@axis_dir lx+xoffset ly+yoffset axis_length axis_length textx$ texty$ text_height 0 text_offset "br"
end rotate
grestore
end sub
[Return to subroutines page]