README for ppedit

Raph Levien
4 May 2007

ppedit is my prototype application for editing curves using my
curvature-continuous spirals. While I have used this code to draw many
font outlines, it is very rough around the edges, and is far from a
polished tool.


== License and patent grant ==

All code in this package is released under the terms of the GNU GPL,
version 2 or later, at your choice.

Further, there is a provisional patent application filed for the
underlying curve technology. The following patent grant applies to any
patent which may be issued as a result of that application:

Whereas, Raph Levien (hereinafter "Inventor") has obtained patent
protection for related technology (hereinafter "Patented Technology"),
Inventor wishes to aid the the GNU free software project in achieving
its goals, and Inventor also wishes to increase public awareness of
Patented Technology, Inventor hereby grants a fully paid up,
nonexclusive, irrevocable, royalty free license to practice the
patents listed below ("the Patents") if and only if practiced in
conjunction with software distributed under the terms of any version
of the GNU General Public License as published by the Free Software
Foundation, 59 Temple Place, Suite 330, Boston, MA 02111. Inventor
reserves all other rights, including without limitation, licensing for
software not distributed under the GNU General Public License.

== Building ==

The main build supported right now is the Gtk2/cairo one. There's also
a Mac build and a Gtk1 one, but those aren't guaranteed to work.

1. Make sure you've got ../x3/ in a directory parallel to ppedit. If
   you've unpacked from a tarball, this should be the case already.
   From darcs, use: darcs get http://levien.com/garden/x3

2. make

3. The binary is ppedit

== Using ==

The numeric keys 1-6 select the mode. 1 is selection, 2-6 select
different point modes:

2: Add G4-continuous curve point
3: Add corner point
4: Add left-facing one-way point
5: Add right-facing one-way point
6: Add G2-continuous curve point

Note: Dave Crossland has a set of alternate keybindings which are
probably faster.

== Plate files ==

Ctrl-S saves a plate file in a file of the name 'plate'. Additionally,
a plate file can be given as a command line argument. The file uses
simple S-expressions, with a one-character code for each point, then
the X and Y coordinates - 0,0 is top left.

Here's the cap U from Inconsolata, for example:

(plate
  (v 68 78)
  (v 159 78)
  (o 158 92)
  ([ 148 115)
  (] 148 552)
  (o 298 744)
  ([ 459 549)
  (v 459 78)
  (v 536 78)
  (] 536 547)
  (o 295 813)
  ([ 68 551)
  (z)
)

v: corner
o: g4
c: g2
[: left-facing one-way
]: right-facing one-way

== Conversion to PostScript ==

Ctrl-P converts to PostScript, saving '/tmp/foo.ps'. Other utilities
can convert that representation into FontForge, and also optimize the
Beziers.

== Stability ==

The spline solver in this release is _not_ numerically robust. When
you start drawing random points, you'll quickly run into divergence.
However, "sensible" plates based on real fonts usually converge. Some
tips:

1. Huge changes of angle are likely to diverge.

2. For the first two or three points, G4 points are likelier to
   converge than G2's. For longer segments, G2 is more likely.

3. Start on a curve point.

A more numerically robust approach is in the works.
