Its instance data is a single underlying trc, and a collection of hard and soft points. (For this discussion, let g(x) represent the value of the underlying trc.) A hard point specifies both an x and a y value (x being the domain and y being the range). A soft point specifies only an x value — when a cartesian point is needed for a soft point, (x, g(x)) is used.. For its output function, the edit trc looks at the x value its is asked and performs the following
CASE statement:
no hard or soft points => Use g(x)
x is between two soft points => Use g(x)
x is between two points (2 hard or 1 of each) => Interpolate between the two points.
x is closest to a hard point => Use the y-value of that hard point.
x is closest to a soft point => Use g(x).
The user interface for edit trcs takes place mostly in a trc viewer. Left-clicking grabs the nearest edit point (soft or hard) and drags it. Middle-clicking sets down a hard point. Right-clicking sets down a soft point. Shift-middle-clicking deletes a point.
The control viewer for the edit class is comprised solely of a selectable trc.