• Hi,

    For some observers I need the decomposed, removeOverlaped glyph.

    I have sort of a solution by adding duplicate glyphs to the font and decompose, removeOverlap them. And automatically remove them when the observer was removed.

    But I know this can be done in a nicer way. But this code doesn't do the trick. But why not? Seems okay to me...

    f = CurrentFont()
    g = f['H']
    temp = g.copy()
    for c in temp.components:
        print c #these must be gone...
    <Component for I>
    <Component for I>
    Traceback (most recent call last):
      File "<untitled>", line 10, in <module>
      File "main.py", line 29, in drawGlyph
      File "lib/fontObjects/robofabWrapper.pyc", line 2736, in draw
      File "/Applications/RoboFont_Beta.app/Contents/Resources/lib/python2.7/defcon/objects/glyph.py", line 299, in draw
      File "/Applications/RoboFont_Beta.app/Contents/Resources/lib/python2.7/defcon/objects/glyph.py", line 308, in drawPoints
      File "/Applications/RoboFont_Beta.app/Contents/Resources/lib/python2.7/defcon/objects/component.py", line 107, in drawPoints
      File "/Applications/RoboFont_Beta.app/Contents/Resources/lib/python2.7/robofab/pens/adapterPens.py", line 111, in addComponent
      File "/Applications/RoboFont_Beta.app/Contents/Resources/lib/python2.7/fontTools/pens/basePen.py", line 166, in addComponent
    TypeError: 'NoneType' object has no attribute '__getitem__'</code>

    Who can help?
    Thanks! Thom

  • Great, this works!

  • admin

    owke, this is idd not working cause a weakref object has to be referenced once or more.

    you could force it with:

    g = CurrentGlyph()
    copy = g.copy()
    # get the internal font and set it hard in the internal glyph object, even it is a copy
    print copy.components

  • Hi,

    OK it draws. But still overlapped, and composed...

  • admin


    A copy has no parent anymore… so it cannot find the referenced glyph in a component. So decompose will not work.

    Maybe the best option is to set the parent in the copied glyph:

    source = CurrentGlyph()
    g = source.copy()