Example #1
0
class TrimorphicUI(PolygonTileUI):
  def __init__(self, t, wiggle=CubicCurve2D.Double(0, 0, 0.5, 0.5, 0.5, -0.5, 1, 0)):
    self.preTransform = t
    self.wiggle = wiggle
    PolygonTileUI.__init__(self, Color(64, 183, 185), t)
    self.initialiseGraphics()

  def initialiseGraphics(self):
    self.polygonalTilePath = GeneralPath() 
    self.polygonalTilePath.append(self.wiggle, 1)

    t = AffineTransform.getTranslateInstance(1, 0)
    t.rotate(math.pi / 2)
    wiggle2 = GeneralPath(self.wiggle)
    wiggle2.transform(t)
    self.polygonalTilePath.append(wiggle2, 1)

    t = AffineTransform.getTranslateInstance(1, 1)
    t.rotate(3 * math.pi / 4)
    t.scale(1 / math.sqrt(2), 1 / math.sqrt(2))
    wiggle3 = GeneralPath(self.wiggle)
    wiggle3.transform(t)
    self.polygonalTilePath.append(wiggle3, 1)

    t = AffineTransform.getTranslateInstance(0.5, 1.5)
    t.rotate(5 * math.pi / 4)
    t.scale(1 / math.sqrt(2), 1 / math.sqrt(2))
    wiggle4 = GeneralPath(self.wiggle)
    wiggle4.transform(t)
    self.polygonalTilePath.append(wiggle4, 1)

    t = AffineTransform.getTranslateInstance(0, 1)
    t.rotate(3 * math.pi / 2)
    wiggle5 = GeneralPath(self.wiggle)
    wiggle5.transform(t)
    self.polygonalTilePath.append(wiggle5, 1)

    self.polygonalTilePath.closePath()
    self.polygonalTilePath.transform(self.preTransform)
Example #2
0
class SHornUI(PolygonTileUI):
  def __init__(self, t, n):
    self.preTransform = t
    self.n = n
    PolygonTileUI.__init__(self, Color(210, 83, 185), t)
    self.initialiseGraphics()

  def initialiseGraphics(self):
    wiggle=CubicCurve2D.Double(0, 0, 0.3, -0.3, 0.7, 0.3, 1, 0)
    reverseWiggle=CubicCurve2D.Double(1, 0, 0.7, 0.3, 0.3, -0.3, 0, 0)

    self.polygonalTilePath = GeneralPath() 
    self.polygonalTilePath.append(wiggle, 1)

    self.polygonalTilePath.lineTo(math.cos(math.pi / self.n), math.sin(math.pi / self.n))

    t = AffineTransform.getRotateInstance(math.pi / self.n)
    wiggle2 = GeneralPath(reverseWiggle)
    wiggle2.transform(t)
    self.polygonalTilePath.append(wiggle2, 1)

    self.polygonalTilePath.closePath()
    self.polygonalTilePath.transform(self.preTransform)
Example #3
0
class Star():
    def __init__(self, radius, color):
        self.color = color
        self.setSize(radius)

    def setSize(self, size):
        # First triangle, size is radius of circumcircle, center at (0,0)
        self.tri1 = GeneralPath()
        self.tri1.moveTo(size, 0)
        self.tri1.lineTo(int(-0.5 * size), int(0.866 * size))
        self.tri1.lineTo(int(-0.5 * size), int(-0.866 * size))
        self.tri1.closePath()

        # Second triangle like first, but rotated 180 degrees
        self.tri2 = self.tri1.clone()
        t = AffineTransform()
        t.rotate(math.pi)
        self.tri2.transform(t)

    def turn(self, angle):
        t = AffineTransform()
        t.rotate(angle)
        self.tri1.transform(t)
        self.tri2.transform(t)

    def showAt(self, mx, my):
        bg.setPaintColor(self.color)
        t = AffineTransform()
        t.translate(mx, -50 + my % 650)  # Restrict to playground
        # Cloning to avoid side effects
        gp1 = self.tri1.clone()
        gp2 = self.tri2.clone()
        gp1.transform(t)
        gp2.transform(t)
        bg.fillGeneralPath(gp1)
        bg.fillGeneralPath(gp2)