It looks like you're new here. If you want to get involved, click one of these buttons!
harmonize_contours, harmonize_handles_contours, tunnify_contours, inflection_contours, harmonize_glyphs, harmonize_handles_glyphs, tunnify_glyphs, inflection_glyphs
In automated processes one will still need a script in order to add points of inflection.
I have never claimed any of these contours to be perfect. The non-horizontal-or-vertical node on the dot contour should demonstrate that the tools will work for such nodes, too.
@ivan louette I think I have figured out what probably happend: You inserted an inflection point at the end of a contour. This led to a problem because the end node is identical with the start node. I have fixed this bug now. I hope it will work now for you.
@AbrahamLee Unfortunately, there are hardly any plugins of FontForge available. I have only found the plugin in the FontForge documentation and those of David Crossland (which were worth a lot for me because the documentation is so sparse).
I am looking forward to the publication of your scripts.
cdef double harmonize_distance(cPoint &p0, cPoint &p1, cPoint &p2) nogil: cdef: double i = p2.x - p1.x double j = p2.y - p1.y return fabs((((p0.y - p1.y) * i) - ((p0.x - p1.x) * j)) / sqrt(pow(i, 2) + pow(j, 2)))cdef cPoint harmonize_cubic(cCurve &curve, cCurve &next_curve) nogil: if curve.p2.x == next_curve.p1.x and curve.p2.y == next_curve.p1.y: return curve.p3 cdef: double d0 = harmonize_distance(curve.p1, curve.p2, next_curve.p1) double d1 = harmonize_distance(next_curve.p2, curve.p2, next_curve.p1) if d0 == d1: return Point(.5 * (curve.p2.x + next_curve.p1.x), .5 * (curve.p2.y + next_curve.p1.y), 0) cdef: double t = (d0 - sqrt(d0 * d1)) / (d0 - d1) double t_1 = 1 - t return Point(t_1 * curve.p2.x + t * next_curve.p1.x, t_1 * curve.p2.y + t * next_curve.p1.y, 0)