src/reportlab/graphics/testdrawings.py
changeset 2964 32352db0d71e
parent 2332 2a7ab4405e18
child 3032 22224b1b4d24
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/reportlab/graphics/testdrawings.py	Wed Sep 03 16:10:51 2008 +0000
@@ -0,0 +1,294 @@
+#!/bin/env python
+#Copyright ReportLab Europe Ltd. 2000-2004
+#see license.txt for license details
+#history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/graphics/testdrawings.py
+__version__=''' $Id $ '''
+"""This contains a number of routines to generate test drawings
+for reportlab/graphics.  For now they are contrived, but we will expand them
+to try and trip up any parser. Feel free to add more.
+
+"""
+
+from reportlab.graphics.shapes import *
+from reportlab.lib import colors
+
+def getDrawing1():
+    """Hello World, on a rectangular background"""
+
+    D = Drawing(400, 200)
+    D.add(Rect(50, 50, 300, 100, fillColor=colors.yellow))  #round corners
+    D.add(String(180,100, 'Hello World', fillColor=colors.red))
+
+
+    return D
+
+
+def getDrawing2():
+    """This demonstrates the basic shapes.  There are
+    no groups or references.  Each solid shape should have
+    a purple fill."""
+    D = Drawing(400, 200) #, fillColor=colors.purple)
+
+    D.add(Line(10,10,390,190))
+    D.add(Circle(100,100,20, fillColor=colors.purple))
+    D.add(Circle(200,100,20, fillColor=colors.purple))
+    D.add(Circle(300,100,20, fillColor=colors.purple))
+
+    D.add(Wedge(330,100,40, -10,40, fillColor=colors.purple))
+
+    D.add(PolyLine([120,10,130,20,140,10,150,20,160,10,
+                    170,20,180,10,190,20,200,10]))
+
+    D.add(Polygon([300,20,350,20,390,80,300,75, 330, 40]))
+
+    D.add(Ellipse(50, 150, 40, 20))
+
+    D.add(Rect(120, 150, 60, 30,
+               strokeWidth=10,
+               strokeColor=colors.red,
+               fillColor=colors.yellow))  #square corners
+
+    D.add(Rect(220, 150, 60, 30, 10, 10))  #round corners
+
+    D.add(String(10,50, 'Basic Shapes', fillColor=colors.black))
+
+    return D
+
+
+##def getDrawing2():
+##    """This drawing uses groups. Each group has two circles and a comment.
+##    The line style is set at group level and should be red for the left,
+##    bvlue for the right."""
+##    D = Drawing(400, 200)
+##
+##    Group1 = Group()
+##
+##    Group1.add(String(50, 50, 'Group 1', fillColor=colors.black))
+##    Group1.add(Circle(75,100,25))
+##    Group1.add(Circle(125,100,25))
+##    D.add(Group1)
+##
+##    Group2 = Group(
+##        String(250, 50, 'Group 2', fillColor=colors.black),
+##        Circle(275,100,25),
+##        Circle(325,100,25)#,
+
+
+##def getDrawing2():
+##    """This drawing uses groups. Each group has two circles and a comment.
+##    The line style is set at group level and should be red for the left,
+##    bvlue for the right."""
+##    D = Drawing(400, 200)
+##
+##    Group1 = Group()
+##
+##    Group1.add(String(50, 50, 'Group 1', fillColor=colors.black))
+##    Group1.add(Circle(75,100,25))
+##    Group1.add(Circle(125,100,25))
+##    D.add(Group1)
+##
+##    Group2 = Group(
+##        String(250, 50, 'Group 2', fillColor=colors.black),
+##        Circle(275,100,25),
+##        Circle(325,100,25)#,
+##
+##        #group attributes
+##        #strokeColor=colors.blue
+##        )
+##    D.add(Group2)
+
+##    return D
+##
+##
+##def getDrawing3():
+##    """This uses a named reference object.  The house is a 'subroutine'
+##    the basic brick colored walls are defined, but the roof and window
+##    color are undefined and may be set by the container."""
+##
+##    D = Drawing(400, 200, fill=colors.bisque)
+##
+##
+##    House = Group(
+##        Rect(2,20,36,30, fill=colors.bisque),  #walls
+##        Polygon([0,20,40,20,20,5]), #roof
+##        Rect(8, 38, 8, 12), #door
+##        Rect(25, 38, 8, 7), #window
+##        Rect(8, 25, 8, 7), #window
+##        Rect(25, 25, 8, 7) #window
+##
+##        )
+##    D.addDef('MyHouse', House)
+##
+##    # one row all the same color
+##    D.add(String(20, 40, 'British Street...',fill=colors.black))
+##    for i in range(6):
+##        x = i * 50
+##        D.add(NamedReference('MyHouse',
+##                             House,
+##                             transform=translate(x, 40),
+##                             fill = colors.brown
+##                             )
+##              )
+##
+##    # now do a row all different
+##    D.add(String(20, 120, 'Mediterranean Street...',fill=colors.black))
+##    x = 0
+##    for color in (colors.blue, colors.yellow, colors.orange,
+##                       colors.red, colors.green, colors.chartreuse):
+##        D.add(NamedReference('MyHouse',
+##                             House,
+##                             transform=translate(x,120),
+##                             fill = color,
+##                             )
+##              )
+##        x = x + 50
+##    #..by popular demand, the mayor gets a big one at the end
+##    D.add(NamedReference('MyHouse',
+##                             House,
+##                             transform=mmult(translate(x,110), scale(1.2,1.2)),
+##                             fill = color,
+##                             )
+##              )
+##
+##
+##    return D
+##
+##def getDrawing4():
+##    """This tests that attributes are 'unset' correctly when
+##    one steps back out of a drawing node. All the circles are part of a
+##    group setting the line color to blue; the second circle explicitly
+##    sets it to red.  Ideally, the third circle should go back to blue."""
+##    D = Drawing(400, 200)
+##
+##
+##    G = Group(
+##            Circle(100,100,20),
+##            Circle(200,100,20, stroke=colors.blue),
+##            Circle(300,100,20),
+##            stroke=colors.red,
+##            stroke_width=3,
+##            fill=colors.aqua
+##            )
+##    D.add(G)
+##
+##
+##    D.add(String(10,50, 'Stack Unwinding - should be red, blue, red'))
+##
+##    return D
+##
+##
+##def getDrawing5():
+##    """This Rotates Coordinate Axes"""
+##    D = Drawing(400, 200)
+##
+##
+##
+##    Axis = Group(
+##        Line(0,0,100,0), #x axis
+##        Line(0,0,0,50),   # y axis
+##        Line(0,10,10,10), #ticks on y axis
+##        Line(0,20,10,20),
+##        Line(0,30,10,30),
+##        Line(0,40,10,40),
+##        Line(10,0,10,10), #ticks on x axis
+##        Line(20,0,20,10),
+##        Line(30,0,30,10),
+##        Line(40,0,40,10),
+##        Line(50,0,50,10),
+##        Line(60,0,60,10),
+##        Line(70,0,70,10),
+##        Line(80,0,80,10),
+##        Line(90,0,90,10),
+##        String(20, 35, 'Axes', fill=colors.black)
+##        )
+##
+##    D.addDef('Axes', Axis)
+##
+##    D.add(NamedReference('Axis', Axis,
+##            transform=translate(10,10)))
+##    D.add(NamedReference('Axis', Axis,
+##            transform=mmult(translate(150,10),rotate(15)))
+##          )
+##    return D
+##
+##def getDrawing6():
+##    """This Rotates Text"""
+##    D = Drawing(400, 300, fill=colors.black)
+##
+##    xform = translate(200,150)
+##    C = (colors.black,colors.red,colors.green,colors.blue,colors.brown,colors.gray, colors.pink,
+##        colors.lavender,colors.lime, colors.mediumblue, colors.magenta, colors.limegreen)
+##
+##    for i in range(12):
+##        D.add(String(0, 0, ' - - Rotated Text', fill=C[i%len(C)], transform=mmult(xform, rotate(30*i))))
+##
+##    return D
+##
+##def getDrawing7():
+##    """This defines and tests a simple UserNode0 (the trailing zero denotes
+##    an experimental method which is not part of the supported API yet).
+##    Each of the four charts is a subclass of UserNode which generates a random
+##    series when rendered."""
+##
+##    class MyUserNode(UserNode0):
+##        import whrandom, math
+##
+##
+##        def provideNode(self, sender):
+##            """draw a simple chart that changes everytime it's drawn"""
+##            # print "here's a random  number %s" % self.whrandom.random()
+##            #print "MyUserNode.provideNode being called by %s" % sender
+##            g = Group()
+##            #g._state = self._state  # this is naughty
+##            PingoNode.__init__(g, self._state)  # is this less naughty ?
+##            w = 80.0
+##            h = 50.0
+##            g.add(Rect(0,0, w, h, stroke=colors.black))
+##            N = 10.0
+##            x,y = (0,h)
+##            dx = w/N
+##            for ii in range(N):
+##                dy = (h/N) * self.whrandom.random()
+##                g.add(Line(x,y,x+dx, y-dy))
+##                x = x + dx
+##                y = y - dy
+##            return g
+##
+##    D = Drawing(400,200, fill=colors.white)  # AR - same size as others
+##
+##    D.add(MyUserNode())
+##
+##    graphcolor= [colors.green, colors.red, colors.brown, colors.purple]
+##    for ii in range(4):
+##        D.add(Group( MyUserNode(stroke=graphcolor[ii], stroke_width=2),
+##                     transform=translate(ii*90,0) ))
+##
+##    #un = MyUserNode()
+##    #print un.provideNode()
+##    return D
+##
+##def getDrawing8():
+##    """Test Path operations--lineto, curveTo, etc."""
+##    D = Drawing(400, 200, fill=None, stroke=colors.purple, stroke_width=2)
+##
+##    xform = translate(200,100)
+##    C = (colors.black,colors.red,colors.green,colors.blue,colors.brown,colors.gray, colors.pink,
+##        colors.lavender,colors.lime, colors.mediumblue, colors.magenta, colors.limegreen)
+##    p = Path(50,50)
+##    p.lineTo(100,100)
+##    p.moveBy(-25,25)
+##    p.curveTo(150,125, 125,125, 200,50)
+##    p.curveTo(175, 75, 175, 98, 62, 87)
+##
+##
+##    D.add(p)
+##    D.add(String(10,30, 'Tests of path elements-lines and bezier curves-and text formating'))
+##    D.add(Line(220,150, 220,200, stroke=colors.red))
+##    D.add(String(220,180, "Text should be centered", text_anchor="middle") )
+##
+##
+##    return D
+
+
+if __name__=='__main__':
+    print __doc__
\ No newline at end of file