Drawing Circles with Radii

This script arose from a query in the mailing list. It can form the basis of similar drawings.

Uses createLayer createLine newDocument saveDocAs setLineColor setLineWidth zoomDocument




 * 1) !/usr/bin/env python


 * 1) This program is free software; you can redistribute it and/or modify
 * 2) it under the terms of the GNU General Public License as published by
 * 3) the Free Software Foundation; either version 2 of the License, or
 * 4) (at your option) any later version.

""" this script creates circles with radii. It can form the basis to other scripts, eg, add markers on one of the circles. Calls used in this script are;

createLayer createLine newDocument saveDocAs setLineColor setLineWidth zoomDocument Python lists, range, for """

from math import sin, cos, pi try: from scribus import * except ImportError,err: print "This Python script is written for the Scribus scripting interface." print "It can only be run from within Scribus." sys.exit(1)

myCircles = newDocument(PAPER_A4, (10, 10, 10, 10), LANDSCAPE, 1, UNIT_POINTS, NOFACINGPAGES, FIRSTPAGERIGHT, 1)

angleStep = pi * 2 / 360           # one degree increments

oX = [] oY = [] oZ = [] cX = [] cY = [] cZ = [] iX = [] iY = [] iZ = []

for a in range(0, 360): ox = sin(a * angleStep) * 1.1 * 250        # Outer ring "x" coordinates oy = cos(a * angleStep) * 1.1 * 250        # Outer ring "y" coordinates cx = sin(a * angleStep) * 250       # Center ring cy = cos(a * angleStep) * 250 ix = sin(a * angleStep) * 0.9 * 250       # Inner ring iy = cos(a * angleStep) * 0.9 * 250

oX.append(ox)               # Make a list of all the co-ordinates oY.append(oy) oZ.append(ox)               # Place the x coordinate in oZ   oZ.append(oy)                 # Place the y coordinate in oZ   cX.append(cx) cY.append(cy) cZ.append(cx) cZ.append(cy) iX.append(ix) iY.append(iy) iZ.append(ix) iZ.append(iy)


 * 1) This is Landscape, so now move the circle to the center of the page.

for x in range(0,720,2):

oZ[x] = oZ[x] + 841.89/2           # Every odd element has 841.89/2 added to it    oZ[x+1] = oZ[x + 1] + 595.28/2        # Every even element has 595.28 added cZ[x] = cZ[x] + 841.89/2 cZ[x+1] = cZ[x + 1] + 595.28/2 iZ[x] = iZ[x] + 841.89/2 iZ[x+1] = iZ[x + 1] + 595.28/2

oCircle = createPolygon(oZ)           # Draw the outer circle setLineWidth(2, oCircle)

createLayer("innerLayer")           # To draw the inner circle createLayer("centerLayer")           # To draw the center circle createLayer("outerLines")           # To draw lines from the center to to outer circle

setActiveLayer("centerLayer") cCircle = createPolygon(cZ)           # Draw the center circle setLineWidth(0.5, cCircle)

setActiveLayer("innerLayer") iCircle = createPolygon(iZ)           # Draw the inner circle setLineWidth(0.5, iCircle)

setActiveLayer("outerLines") for x in range(0,720,24):           # Draw the lines line = createLine(841.89/2,595.28/2,oZ[x],oZ[x+1]) setLineWidth(8, line) setLineColor("Blue", line)

zoomDocument(60.0)               # So it fits my screen saveDocAs("circles.sla")            #Make sure this is writable