You could implement the width as another bezier 'stroke' in 'thickness space' - that way there would be continuous change in the width of the stroke, and it could be magnified and rerendered without loss. I will work on this and present a formula for a broad edge calligraphy pen, since the relationship between thickness and other factors is so simple. After I get a look at the code you guys are using now, I can figure something out for that, too.
A sequence of beziers in "thickness space" will indeed give you smooth thickness function and may require less data to store (i.e. you can use less samples). Still, I think what is _stored_ for a stroke should be just an array of widths, which can then be rendered either as a polygon (for quick renders), or as an automatic beziergon where all the points are smooth points on a path of beziers (for quality renders). Using such an array will allow us to represent both "geometric" (elliptical, triangular etc) stroke shapes as well as totally random strokes, e.g. with thickness information coming from a tablet pen pressure.
The tricky part is the algorithm: given a midline path (a sequence of lines and beziers) and the thickness array, produce a closed path representing the final stroke. This algorithm should deal satisfactorily with sharp turns and any other oddities in the input data. Once we have it, adding a new object type to Inkscape and some UI for it is more or less trivial.
_________________________________________________________________ Free yourself from those irritating pop-up ads with MSn Premium. Get 2months FREE* http://join.msn.com/?pgmarket=en-ca&page=byoa/prem&xAPID=1994&DI...