def expand(self, sender):
     glyph = CurrentGlyph()
     
     defconGlyph = glyph.naked()
     
     glyph.prepareUndo("Outline")
     
     isQuad = curveConverter.isQuadratic(defconGlyph)
     
     if isQuad:
         curveConverter.quadratic2bezier(defconGlyph)
     
     outline = self.calculate(glyph)
     
     glyph.clear()
     outline.drawPoints(glyph.getPointPen())
     
     if isQuad:
         curveConverter.bezier2quadratic(defconGlyph)
     
     glyph.round()
     glyph.performUndo()
                    y - radius * cos(phi + rho)
                )
            )
    else:
        for i in range(n - 1, 0, -1):
            rho = 2 * pi * i / n
            pen.lineTo(
                (
                    x - radius * sin(phi + rho),
                    y - radius * cos(phi + rho)
                )
            )
    
    # Close the path
    pen.closePath()


g = CurrentGlyph()
g.clear()
p = g.getPen()

diameter = 600
n = 8

for i in range(10):
    clockwise = i % 2
    phi = 1.2 * i * pi
    draw_polygon(p, (275, 216), diameter, n, phi, clockwise)
    #n -= 1
    diameter -= 50
    
    def _lineTo(self, pt):
        self.writer_pen.lineTo(pt)
    
    def _curveToOne(self, bcp1, bcp2, pt):
        self.writer_pen.curveTo(bcp1, bcp2, pt)
    
    def _closePath(self):
        self.writer_pen.closePath()
    
    def _endPath(self):
        self.writer_pen.endPath()
    
    def addComponent(self, baseGlyphName, transformation):
        pass


source = CurrentGlyph()

# Temporary glyph to which the pen is writing
target = RGlyph()
target_pen = target.getPen()

source_pen = MyPen(CurrentFont(), target_pen)
source.draw(source_pen)

# Clear the original glyph and add the modfied outline
source.clear()
source.appendGlyph(target)

# You will notice any anchors are converted to stray points ...
    def _endPath(self):
        self.writer_pen.endPath()
    
    def addComponent(self, baseGlyphName, transformation):
        pass


source = CurrentGlyph()

# Save the anchors from the original glyph in a list
anchors = [a for a in source.anchors]

# Remove all anchors from the glyph so they don't interfere with our processing
for a in anchors:
    source.removeAnchor(a)

# Temporary glyph to which the pen is writing
target = RGlyph()
target_pen = target.getPen()

source_pen = MyPen(CurrentFont(), target_pen, 10)
source.draw(source_pen)

# Clear the original glyph and add the modfied outline
source.clear(components=False)
source.appendGlyph(target)

# Restore the saved anchors
for a in anchors:
    source.appendAnchor(a.name, a.position)