/* This Genie sets up a grid to match the position of a box, with snap enabled. If either a side or the top is selected, the result resembles a snap-to guide line. Note that when you move a box only the left or top side will snap, and rotated boxes do not snap properly. Ctrl-S switches snap on and off.
Written by Don Cox ⌐ Feb 93. Not public domain. All rights reserved. */
signal on error
signal on syntax
address command
call SafeEndEdit.rexx()
call ppm_AutoUpdate(0)
cr="0a"x
trace n
currentunits = ppm_GetUnits()
box = ppm_ClickOnBox(" Click on box for grid size.")
if box = 0 then exit_msg("No box selected")
gsize = ppm_GetGridSize()
gwidth = word(gsize,1)
gheight = word(gsize,2)
call ppm_SaveText("ram:gridsize",gsize)
size = ppm_GetBoxSize(box)
width = word(size,1)
height = word(size,2)
where = ppm_GetBoxPosition(box)
xpos = word(where,1)
ypos = word(where,2)
if xpos>2 then do
xnum = xpos%2.0
xspacing = xpos/xnum
end
if ypos>2 then do
ynum = ypos%2.0
yspacing = ypos/ynum
end
choice = ppm_Inform(3,"Set Grid position to match box...","Right","Top","Left")
select
when choice = 0 then do
if (xpos+width)>2 then do
xnum = (xpos+width)%2
xspacing = (xpos+width)/xnum
end
call ppm_SetGridSize(xspacing,0.01)
end
when choice = 1 then call ppm_SetGridSize(0.01,yspacing)
otherwise call ppm_SetGridSize(xspacing,0.01)
end
call ppm_SetGrid(1)
call ppm_SetGridSnap(1)
call exit_msg()
end
error:
syntax:
do
exit_msg("Genie failed due to error: "errortext(rc))