Лишние узлы и незакрытые контуры

не закрыт контур

Если вы переносили глифы из Illustrator в FontLab, то наверняка сталкивались с ситуацией когда в импортируемых контурах были лишние узлы и незакрытые контуры. В этой статье пойдёт речь как отслеживать подобные контуры и узлы.

Вот вам простой пример разорванного контура:

пример разорванного контура

FontLab отображает конечный узел незакрытого контура немного иначе

конечный узел незакрытого контура

В приведённом примере оба узла разорванного контура находятся друг над другом.

А вот вам пример посложнее, с более сложным контуром.

пример с более сложным контуром

Попробуете определить навскидку где здесь незамкнутый контур? :)
А если это будет отдельный узел, или несколько?

Для того, что бы быстро определить в каких символах шрифта контуры не замкнуты или имеются лишние узлы, я сгенерирую промежуточную версию шрифта.

При генерации всплывает вот такое окно с предупреждением и вопросом о дальнейших действиях.

окно с предупреждением

Оставляем всё так как на скриншоте. Самое главное это отмеченный пункт: Highlight glyphs that contain open contours.

После отметки этого пункта в нашем файле .vfb, все знакоместа с проблемными контурами будут помечены красным цветом.

знакоместа с проблемными контурами

Идём в меню Tools > Options > Пункт Glyph window > раздел Outline drawing.
Проверяем, что бы не был отмечен пункт Fill open contours. Если он отмечен, отметку нужно снять и сохранить настройки.

Fill open contours

Далее, иду в один из проблемных символов и по двойному щелчку на символе открываю окно Glyph.
Попеременно нажимая и отпуская кнопку ~ я смотрю какой контур отображается, а какой нет:

контур

Тот контур который при нажатой клавише ~ не отображается - разомкнут.
Останется найти конечные узлы разомкнутого контура и соединить их.

Данный пример справедлив относительно контура, но если попадается лишний отдельный узел или несколько, то данный пример нам не поможет.

Боремся с бесхозными узлами

Для примера я взял сложный контур у которого есть один бесхозный узел.

бесхозный узел

Перед началом работы нужно сделать маску, что бы мы смогли легко контролировать произошедшие изменения.
На клавиатуре жмём Ctrl+A и Ctrl+M.

Только что при помощи клавиатурных сокращений я выделил все контуры и создал для них маску. Снимаем выделение с контуров и используя нажатую клавишу Shift, и щёлкая попеременно на каждом контуре, производим выделение всех видимых контуров.

Далее выполняем команду Ctrl+X - вырезать.
В результате у нас остаётся только маска, хотя не только маска... на маске расположен бесхозный узел:)

на маске расположен бесхозный узел

Выделяем и удаляем этот узел.
Нажатием Ctrl+V я возвращаю вырезанный контур на прежнее место. Теперь нужно сохранить результат.

Вместо послесловия:

В FontLab есть и автоматические команды для борьбы с лишними узлами - Contour > Optimize Ctrl+E и команда для автоматического закрытия всех контуров - Contour > Close Open Contours.

Не использовал я их по двум причинам:

  • Цель статьи научить вас работать с контурами самостоятельно
  • Иногда, использование этих команд даёт не совсем ожидаемый результат.

Удачи!