示例#1
0
    def __init__(self, prototile, cCurve):
        self.prototile = prototile
        AutoTiler.__init__(self, SimplePatch(), PrototileSet(prototile))
        self.n = self.prototile.getSymmetryGroup().getRotationalSymmetry() / 2
        self.fittingTiler = FittingTiler(self.patch, self.prototileSet)

        if cCurve:
            self.a = SymbolicTransform(self.prototile.getSymmetryGroup())
            self.b = SymbolicTransform(self.prototile.getSymmetryGroup()).reflect().rotate(-2)
            self.c = SymbolicTransform(self.prototile.getSymmetryGroup()).reflect().rotate(-1)
            self.d = SymbolicTransform(self.prototile.getSymmetryGroup()).rotate(-1)
        else:
            self.a = SymbolicTransform(self.prototile.getSymmetryGroup())
            self.b = SymbolicTransform(self.prototile.getSymmetryGroup()).rotate(self.n - 1)
            self.c = SymbolicTransform(self.prototile.getSymmetryGroup()).rotate(self.n)
            self.d = SymbolicTransform(self.prototile.getSymmetryGroup()).rotate(-1)

        self.step1 = 1
        self.black1 = 0

        self.step2 = 1
        self.black2 = 1

        tile = self.prototile.getTransformedTile(self.a)
        self.black1 = self.setTileColour(tile, self.black1)
        self.a.rotate(-1)
        self.patch.add(tile)
        self.currentSide1 = self.patch.getSides().get(self.patch.getSideIndex() + 2)

        tile = self.prototile.getTransformedTile(self.c)
        tile = self.fittingTiler.getFittingTile(0, tile, 0)
        self.black2 = self.setTileColour(tile, self.black2)
        self.c.rotate(-1)
        self.patch.add(tile)
        self.currentSide2 = self.patch.getSides().get(self.patch.getSideIndex() + 1)
示例#2
0
 def nextTile(self):
   if self.index >= 10:
     return None
   st = SymbolicTransform(self.prototile.getSymmetryGroup())
   if self.decapod.toString()[self.index] == '0':
     st.rotate(2 * self.index)
   else:
     st.reflect(1)
     st.rotate(2 * self.index + 3)
   self.index = self.index + 1
   return self.prototile.getTransformedTile(st)
示例#3
0
class SpiralAutoTiler(AutoTiler):
    """Spiral tilings."""

    def __init__(self, prototile, cCurve):
        self.prototile = prototile
        AutoTiler.__init__(self, SimplePatch(), PrototileSet(prototile))
        self.n = self.prototile.getSymmetryGroup().getRotationalSymmetry() / 2
        self.fittingTiler = FittingTiler(self.patch, self.prototileSet)

        if cCurve:
            self.a = SymbolicTransform(self.prototile.getSymmetryGroup())
            self.b = SymbolicTransform(self.prototile.getSymmetryGroup()).reflect().rotate(-2)
            self.c = SymbolicTransform(self.prototile.getSymmetryGroup()).reflect().rotate(-1)
            self.d = SymbolicTransform(self.prototile.getSymmetryGroup()).rotate(-1)
        else:
            self.a = SymbolicTransform(self.prototile.getSymmetryGroup())
            self.b = SymbolicTransform(self.prototile.getSymmetryGroup()).rotate(self.n - 1)
            self.c = SymbolicTransform(self.prototile.getSymmetryGroup()).rotate(self.n)
            self.d = SymbolicTransform(self.prototile.getSymmetryGroup()).rotate(-1)

        self.step1 = 1
        self.black1 = 0

        self.step2 = 1
        self.black2 = 1

        tile = self.prototile.getTransformedTile(self.a)
        self.black1 = self.setTileColour(tile, self.black1)
        self.a.rotate(-1)
        self.patch.add(tile)
        self.currentSide1 = self.patch.getSides().get(self.patch.getSideIndex() + 2)

        tile = self.prototile.getTransformedTile(self.c)
        tile = self.fittingTiler.getFittingTile(0, tile, 0)
        self.black2 = self.setTileColour(tile, self.black2)
        self.c.rotate(-1)
        self.patch.add(tile)
        self.currentSide2 = self.patch.getSides().get(self.patch.getSideIndex() + 1)

    def addTile(self):
        for i in range(self.step1 / self.n):
            self.currentSide1 = self.addBlockPair(self.a, self.b, self.currentSide1, self.black1)

        tile = self.prototile.getTransformedTile(self.a)
        tile = self.fittingTiler.getFittingTile(self.currentSide1, tile, 0)
        self.black1 = self.setTileColour(tile, self.black1)
        tileJoin = self.patch.add(tile)
        self.currentSide1 = self.patch.getSides().get(self.patch.getSideIndex() + 1)
        self.a.rotate(-1)
        self.b.rotate(-1)
        self.step1 = self.step1 + 1

        for i in range(self.step2 / self.n):
            self.currentSide2 = self.addBlockPair(self.c, self.d, self.currentSide2, self.black1)

        tile = self.prototile.getTransformedTile(self.c)
        tile = self.fittingTiler.getFittingTile(self.currentSide2, tile, 0)
        self.black2 = self.setTileColour(tile, self.black2)
        tileJoin = self.patch.add(tile)
        self.currentSide2 = self.patch.getSides().get(self.patch.getSideIndex() + 1)
        self.c.rotate(-1)
        self.d.rotate(-1)
        self.step2 = self.step2 + 1

        return tileJoin

    def addBlockPair(self, x, y, currentSide, black):
        tile = self.prototile.getTransformedTile(x)
        tile = self.fittingTiler.getFittingTile(currentSide, tile, 0)
        self.setTileColour(tile, black)
        self.patch.add(tile)
        currentSide = self.patch.getSides().get(self.patch.getSideIndex() + 1)
        tile = self.prototile.getTransformedTile(y)
        tile = self.fittingTiler.getFittingTile(currentSide, tile, 2)
        self.setTileColour(tile, not black)
        self.patch.add(tile)
        return self.patch.getSides().get(self.patch.getSideIndex())

    def setTileColour(self, tile, black):
        if black:
            tile.getUI().setBackground(Color.black)
            return 0
        else:
            tile.getUI().setBackground(Color.white)
            return 1