Stroked vectors in FontLab Studio 6

Ray LarabieRay Larabie Posts: 1,060
edited February 2017 in Technique and Theory
I'm starting a typeface with a neon light effect in FontLab Studio 6. It's something I've done before with Ampacity and Electric. When I made those fonts, I wasted a lot of time manually cleaning up the mangled vector mess that FontLab's stroke tool created. Is there anything I can do to make this better besides expanding strokes in Illustrator or not using FontLab? Is there a trick to it? I'm certain every other font tool can do this properly but I'm in Windows so I pretty much have to use FontLab for this project. Was it really this bad in Fontographer?
  1. The original stroke at about 800 units: not an actual letter, just a test scribble with some RMX Harmonize
  2. 40 stroke with rounded ends (barf)
  3. Scaled 500%, stroked and scaled back down (yuck)
  4. 20 stroke with rounded ends (stop it)



  • Ofir ShavitOfir Shavit Posts: 371
    edited February 2017
    Obviously Fontark.

    Launch it in your browser (No OS dependency, no installation)
    Set the Outline width to 10 units. 

    With this curves complexity you can ignore the SX system, and draw each glyph independently. 

    For each node on the original path (skeleton) Fontark's outline generation algo will produce one node on the inside and one node on the outside of the contour.

    Generate an otf file and download it.

  • Did you try the 'Noodler' plugin in Glyphs:
    And you can apply the effect on export, that means you can keep the center stroke. I know that you might like to refine some details here and there, but it will at least speed up the design phase a lot as you can get from centreline to finished font (to preview in Indesign) in a few seconds. And you can add several instances with different stroke widths. more details:
  • Ofir ShavitOfir Shavit Posts: 371
    edited February 2017
    This is not an effect, it is FA basic way of work in real time, plus per node control over the outline nodes to perform optic corrections and desired adjustments while the skeleton remains editable.
    Dskl.jpg 162.3K
  • Ray LarabieRay Larabie Posts: 1,060
    Glyphs always looks like fun but off limits for Windows people. I'll give Fontark a try; the results look good. Anyone know of any way of doing reasonable stroke tracing in FontLab?
  • FontLab centerline to MetaFont code trough MetaPost interpeter + some dark magic and back to FontLab... that's my way of working such design. It was (pay attention) proof of concept system that I designed for my doctorate thesis, and it worked just fine (in seconds)... but it was not interactive (GUI of some sort ant etc.) and it is currently under rewriting, but I wont finish it any time soon, because I am not needing such a tool right now. Curve cleanliness was superb!

    As I see it FontArk results are superb - wonderful piece of software, but working in - browser is not my glass of beer and I don't favor the GUI also... nevertheless Ofir's implementation and engine is wonderful (congrats!) .
  • For stroked fonts it's very hard to beat Fontark.
  • Thomas PhinneyThomas Phinney Posts: 1,990
    edited February 2017
    Although the stroke in VI looks good, losing the points at extrema certainly sucks. FLS 5 did the same thing, as far as I can tell.

    In any case, I've filed a bug on this for VI, # 872.
  • Igor FreibergerIgor Freiberger Posts: 169
    edited February 2017
    Ray: I did a similar test in FontLab VI and achieved good results. Are you using the last build? The Contour > Expand Contour command respects the extremum nodes and produces orthogonal handles. This small video shows the test. And to scale up and down does not add or remove any node. Of course, you will get better results firstly correcting the inflection points and using Tunni lines adjust prior to expanding the contour.

    Thomas: the only problem I got with Expand Contour is the lack of extrema in rounded start/end caps, as you can see at the end of the video. The result seems just a bit inferior to Noodler plugin for Glyphs.
  • Huh. I trusted Ray's detailed report and images—but when I try it, I get excellent results in VI.
  • To satisfy my curiosity I have reanimated that old clumsy code of mine. Just for comparison - with my MetaStroke engine, as explained above...

  • Ray LarabieRay Larabie Posts: 1,060
    edited February 2017
    Doh! I'm so sorry: I'm using Fontlab Studio 5.2.2.  I think this site needs a "slap" button.

    Thanks for all your helpful advice, everyone.
  • Ray LarabieRay Larabie Posts: 1,060
    @Nick Shinn
    Yeah, it's probably better to do that and attach circles to the open ends manually. I'm aiming for something I can use for masters and I want precise control how those ends are constructed and I want precise twist overlaps on acute angles.

    @Vassil Kateliev
    What's MetaStroke?
  • Nick ShinnNick Shinn Posts: 1,647
    Following up on your suggestion Ray, how about this: # perform two actions on the same path, and combine the sides of one with the ends of the other.


    1. Draw skeletal path

    2. Copy path

    3. <Expand Path> value 20, roundness 100.

    4. Paste in Mask layer (Command M)

    5. Clear outline layer

    6. Paste skeletal path

    7. <Make Parallel Path> value 10 each side; “Remove the original”  “[open contour]”

    8. In the Mask layer, individually select the round ends, cut, snap and paste into position in the Outline layer
  • Vassil KatelievVassil Kateliev Posts: 56
    edited February 2017
    @Ray Larabie MetaStroke is the engine that in described in the post before that...

    It was a FontLab to METAPOST+ to FontLab stroking/calligraphy MM masters producing engine that I developed as a proof-of-concept for my doctorate thesis. It was designed to create super clean contours, on multiple nib/pen settings, but always keeping the same node count and construct identical masters with different weights/widths for interpolation... I presume exactly what you are asking/willing to do with your design right now...

    It is defunct now and very badly written (I knew very little python back then), but working 4 years ago. It needs to be rewritten from the ground up, but I do not have the time to invest in this particular project. Last night I patched it just so it could work for this particular example. When I finish rewriting the code it will be available for free (as all uni/thesis stuff usually is), but i presume FL5 will be defunct by then....

  • Ray LarabieRay Larabie Posts: 1,060
    @Vassil Kateliev
    Oh right, I remember now: very cool.

    @Nick Shinn
    Great idea!
  • edited February 2017
    @Vassil Kateliev my haskell cubicbezier library is made exactly for these kinds of operations.  It does curve approximation, finding intersections, removing overlap, etc...  Approximation is done numerically, by refining a least squares approximation.  It's still experimental though, I currently don't test for singular points.  Otherwise it should give pretty accurate results.
  • @Kristof Bastiaensen oh my.. haskell is way out of my league, trying to understand your code made me feel dumb :)

     ... just out of curiosity, why bother with haskell and beziers/vector/font stuff... do you have something in mind, or just for pleasure? I am also really interested in how haskell deals with pattern recognition, have you considered trying to implement some sort of character anatomy recognition, for example... find all vertical stems in vector shapes and etc.
  • All this works very nicely with the live brush capabilities in FontLab VI, btw.
  • @Vassil Kateliev: yeah, I want to implement metafont in haskell, but for opentype.  I am planning on supporting variable fonts too.  In the long run I'd like to create a GUI for creating fonts using parameters and constraints.  The code should be rather straight forward (except maybe the overlap algorithm), but if you aren't used to haskell...  I don't think haskell is harder than other languages, but it is ... different.  It takes time to get used to, but I like it, that's why I choose it for my personal projects.
Sign In or Register to comment.