Files
rdkit/Python/utils/spiral.py
Greg Landrum 75a79b6327 initial import
2006-05-06 22:20:08 +00:00

51 lines
1.8 KiB
Python

from Numeric import *
from sping import pid
import math
def DrawSpiral(canvas,startColor,endColor,startRadius,endRadius,nLoops,degsPerSlice=70,degsPerStep=1,
startAngle=0,centerPos=None,dir=1):
if centerPos is None:
centerPos = (canvas.size[0]/2,canvas.size[1]/2)
nSlices = int(math.ceil(360*nLoops/degsPerSlice))
radPerStep = math.pi*degsPerStep/180.
stepsPerSlice = degsPerSlice/degsPerStep
radiusStep = float(endRadius-startRadius)/(stepsPerSlice*nSlices)
colorStep = (array(endColor,Float)-array(startColor,Float))/nSlices
print 'INFO:',nSlices,radPerStep,stepsPerSlice,radiusStep,colorStep
angle = math.pi*startAngle/180.
radius = startRadius
color = array(startColor,Float)
for i in range(nSlices):
pts = [ (centerPos[0],centerPos[1])]
for j in range(stepsPerSlice):
xPos = centerPos[0] + radius*math.cos(angle)
yPos = centerPos[1] + radius*math.sin(angle)
pts.append((xPos,yPos))
angle += dir*radPerStep
radius += radiusStep
xPos = centerPos[0] + radius*math.cos(angle)
yPos = centerPos[1] + radius*math.sin(angle)
pts.append((xPos,yPos) )
canvas.drawPolygon(pts,edgeColor=pid.transparent,
fillColor=pid.Color(color[0],color[1],color[2]),
closed=1)
color += colorStep
if __name__ == '__main__':
#from sping.PIL.pidPIL import PILCanvas
#canv = PILCanvas(size=(600,600),name='test.png')
#from sping.SVG.pidSVG import SVGCanvas
#canv = SVGCanvas(size=(600,600),name='test.svg')
from sping.PDF.pidPDF import PDFCanvas
canv = PDFCanvas(size=(600,600),name='test.pdf')
DrawSpiral(canv,(.2,.2,1),(.9,.9,1.),250,5,10,startAngle=-45,degsPerSlice=50,dir=-1)
canv.save()