Making layout grid with guides
Jump to navigation
Jump to search
This is my first Python script. (Sorry if it is ugly, but my native language is Rebol). It makes a "layout grid" useful for designing newspapers and magazines.
José Antonio Meira da Rocha
[email protected]
http://meiradarocha.jor.br/news/about
#!/usr/bin/env python2.3
# -*- coding: utf-8 -*-
"""Generate a grid of guides for layout porpouses.
Ask user for number of columns, number of rows and gap measure.
"""
import sys
"""Locale strings to be translated """
numColStr1 = 'Número de colunas' #How many columns
numColStr2 = 'Quantas colunas?' #How many columns?
numLinStr1 = 'Número de linhas' #How many rows
numLinStr2 = 'Quantas linhas de módulos?' #How many rows?
gapStr1 = 'Largura da valeta' #gap measure
gapStr2 = 'Qual a largura das valetas em pontos?' #gap measure in points?
TITLE = "Gera linhas-guia" #Generate guides
noDocMsg = "<h2>Abra um documento, primeiramente</h2>Ops! Este script só funciona com um documento aberto. <b>Abra um documento</b> antes de rodar o script." # <h2>First, open a doc</h2>This script only work on opened document. <b>Open a document</b> before run this script.
runningMsg = "Rodando o script..." #"Running script..."
noScribusMsg = "This Python script is written for the Scribus scripting interface.\nIt can only be run from within Scribus."
""" Feel free to change defaults"""
defaultNumColumns = '5'
defaultNumRows = '8'
defaultGap = '14.1732' #5mm in points, due a bug in getPageMargins
""" You don't need change nothing below this line """
try:
import scribus
except ImportError,err:
print noScribusMsg
sys.exit(1)
from scribus import UNIT_POINTS,BUTTON_OK,ICON_WARNING
def odd(num):
return num % 2
def main(argv):
"""Generate guides"""
if scribus.haveDoc():
scribus.setRedraw(False)
numColumns = int(scribus.valueDialog(numColStr1, numColStr2, defaultNumColumns))
numRows = int(scribus.valueDialog(numLinStr1, numLinStr2, defaultNumRows))
gap = float(scribus.valueDialog(gapStr1, gapStr2, defaultGap))
unit = scribus.getUnit() # save original unit
scribus.setUnit(UNIT_POINTS) # working in points, due a bug in getPageMargins
pageWidth, pageHeight = scribus.getPageSize()
# The margins order is wrong in Scripter documentation
topMargin, leftMargin, rightMargin, bottomMargin = scribus.getPageMargins()
printAreaWidth = pageWidth - leftMargin - rightMargin
printAreaHeight = pageHeight - topMargin - bottomMargin
numVgaps = numColumns-1
numHgaps = numRows-1
columnWidth = (printAreaWidth-(numVgaps*gap)) / numColumns
rowHeight = (printAreaHeight-(numHgaps*gap)) / numRows
VGuides = []
HGuides = []
# getPageMargins() return only odd page margins.
# This correct even margins
if not odd(scribus.currentPage()):
leftMargin = rightMargin
# Build vertical guides
for i in range(1,numColumns):
res = leftMargin+(i*columnWidth)+((i-1)*gap)
VGuides.append(res)
VGuides.append(res+gap)
# Build horizontal guides
scribus.setVGuides(VGuides)
for i in range(1,numRows):
res = topMargin+(i*rowHeight)+((i-1)*gap)
HGuides.append(res)
HGuides.append(res+gap)
scribus.setHGuides(HGuides)
scribus.setUnit(unit) # restore original unit
else:
scribus.messageBox(TITLE, noDocMsg, ICON_WARNING, BUTTON_OK)
def main_wrapper(argv):
try:
scribus.statusMessage(runningMsg)
scribus.progressReset()
main(argv)
finally:
if scribus.haveDoc():
scribus.setRedraw(True)
scribus.statusMessage("")
scribus.progressReset()
if __name__ == '__main__':
main_wrapper(sys.argv)