You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While the Grid tool (G or shift+G) is useful for aligning things on a small scale, there is no such tool for larger-scale alignment. Thus, I propose a "guideline" tool that draws a specified number of equally-spaced lines on the screen for this purpose.
I've created this Lua script that implements this feature roughly as I envisioned it:
-- Use Alt+G to open the Guideline Tool
-- Use Shift+Alt+G to disable the Guideline Tool
local guidelinesActive = false
local guidelinesH
local guidelinesV
local ignoreEdge = false
event.register(event.keypress, function(key, scan, r, shift, ctrl, alt)
if key == 103 and alt then
if shift then
guidelinesActive = false
else
guidelinesActive = true
guidelinesH = nil
guidelinesV = nil
local guidelineWindow = Window:new(-1, -1, 150, 80)
local hLineLabel = Label:new(4, 4, 40, 16, "H lines:")
guidelineWindow:addComponent(hLineLabel)
local vLineLabel = Label:new(4, 24, 40, 16, "V lines:")
guidelineWindow:addComponent(vLineLabel)
local hLineTextbox = Textbox:new(50, 4, 80, 16)
hLineTextbox:onTextChanged(
function(sender)
guidelinesH = math.min(math.max(math.floor(tonumber(sender:text())), 1), sim.YRES)
end)
guidelineWindow:addComponent(hLineTextbox)
local vLineTextbox = Textbox:new(50, 24, 80, 16)
vLineTextbox:onTextChanged(
function(sender)
guidelinesV = math.min(math.max(math.floor(tonumber(sender:text())), 1), sim.XRES)
end)
guidelineWindow:addComponent(vLineTextbox)
local edgeCheckbox = Checkbox:new(4, 42, 50, 16, "Ignore 4 pixels at edges");
edgeCheckbox:checked(ignoreEdge)
edgeCheckbox:action(
function(sender, checked)
ignoreEdge = checked
end)
guidelineWindow:addComponent(edgeCheckbox)
local closeButton = Button:new(0, 64, 150, 16, "Close")
closeButton:action( function()
interface.closeWindow(guidelineWindow)
end)
guidelineWindow:addComponent(closeButton)
interface.showWindow(guidelineWindow)
guidelineWindow:onTryExit(function()
interface.closeWindow(guidelineWindow)
end)
end
return false
end
end)
event.register(event.tick, function()
if guidelinesActive then
local yres = sim.YRES
local xres = sim.XRES
local offset = 0
if ignoreEdge then
yres = sim.YRES - 8
xres = sim.XRES - 8
offset = 4
end
if guidelinesH then
for i = 1, guidelinesH do
local y = i / (guidelinesH + 1) * yres + offset
graphics.drawLine(offset, y, xres + offset, y, 255, 255, 255, 31)
end
end
if guidelinesV then
for i = 1, guidelinesV do
local x = i / (guidelinesV + 1) * xres + offset
graphics.drawLine(x, offset, x, yres + offset, 255, 255, 255, 31)
end
end
end
end)
The only major problem with this implementation is that it doesn't interact properly with the zoom window and I'd rather not make a convoluted workaround to get it to.
I used this implementation to create a display in one of my saves with several rectangles arranged like this:
I've left the gridlines shown in this image. It may also be useful for artists - see the rule of thirds - and there are likely other potential uses I haven't been able to think of yet.
The text was updated successfully, but these errors were encountered:
While the Grid tool (G or shift+G) is useful for aligning things on a small scale, there is no such tool for larger-scale alignment. Thus, I propose a "guideline" tool that draws a specified number of equally-spaced lines on the screen for this purpose.
I've created this Lua script that implements this feature roughly as I envisioned it:
The only major problem with this implementation is that it doesn't interact properly with the zoom window and I'd rather not make a convoluted workaround to get it to.
I used this implementation to create a display in one of my saves with several rectangles arranged like this:
I've left the gridlines shown in this image. It may also be useful for artists - see the rule of thirds - and there are likely other potential uses I haven't been able to think of yet.
The text was updated successfully, but these errors were encountered: