Sorry for the radio silence, which I know isn't terribly unusual for me. This time it wasn't mere distractedness at work, though. Just a case of a nearly intractable problem with one of my projects.
I uploaded my Icons: Plaques pack on May 4. I figured the hearts pack would follow shortly after. But then I had a bad thing: an idea. I thought it might beef the pack up a little bit if instead of just having a couple heart variants, I also included a couple heart outline variants. But it's not as easy to do an outline of a heart as it is to do an outline of a regular polygon. If you've ever tried scaling a concave shape, you know exactly what I mean -- the scaled version overlaps in odd ways, and it doesn't look like an outline. If you want an outline, you essentially have to draw a new shape: one that's different from the original shape in more than just scale. You can see the difference between scaling and an outline below.
Doing this precisely is almost impossible by hand, so it'd be nice to have a PSP script to do it (I do all my vector work in PSP, even if I later wind up exporting it). This goes back to a problem that has vexed me for years: how to do a pseudo-"scaling" operation on a shape, not by directly scaling it, but by ensuring that the edges of the new shape are always distance X away from the original shape's edges. It's easy enough to do with straight edges, but vector objects aren't always all straight edges. Well, I knew it must be possible, but it wasn't an algorithm I could derive on my own, and it's been too long since I've taken geometry or calculus. And search after search online failed because I could not figure out what the proper terminology for the operation was. So I spent a few days knocking my head against the wall on that once again. It took about a week before I finally stumbled across the proper terminology: what I was looking for is how to offset every Bezier curve by a particular distance.
Ten years or so spent looking in vain for this solution because I couldn't remember the word "offset".
But then implementing it was not an easy process either. It's a heuristic algorithm, and indeed it's only an approximation -- the true offset of a Bezier curve isn't a Bezier curve itself (it changes degree), so if you want to end up with Bezier curves, which was necessary here, you have to essentially piece things together. There are a lot of branching if-else statements necessary to account for all possible situations. This isn't the longest PSP script I've ever written, but it's up there.
I finally got it mostly together last night. But even so, I'm not sure it's ready for release. Normally when I write a PSP Script, I upload it here in case anybody else finds it useful; I think the only exception is the Vector-to-COB script, and that's simply because the odds that anybody else has a workflow that involves both Paint Shop Pro vectors and Caligari trueSpace NURBs curves are pretty damned small. But I may hold off on this one, even though I know it'd be useful to people. Why? Because there are still a lot of issues to iron out with it, and right now, I don't know how many of them are bugs with the script, bugs with Paint Shop Pro, bugs with Python, or are just inherent to the situation (i.e., things the user has to work around). If I were to release it, I'd have to put out a Known Issues list longer than the script itself. And right now, I'm a little too burned out on it to tackle it further for a little while.
But in the meantime, it's something that I can use myself. So the outlines are back on the table, and the next Icons pack should be along soon.