Free SVG icons
Mark Waddingham
mark at livecode.com
Wed Jan 3 10:16:09 EST 2018
On 2018-01-03 15:30, hh via use-livecode wrote:
>> BM wrote:
>> I looked briefly for something that could convert SVG to just a path.
>> Inkscape can do it, but I was more looking for something that could
>> easily
>> do it in a batch run. Then you could convert the whole set.
>
> I'm looking for that for months. TMHO opinion inkscape can do that for
> single
> selected shapes only. Even paper.js and also other js or java snippets
> can't
> do such a global flattening-all without loosing some properties.
>
> Please post whenever you find or write such a general
> "flatten-to-path".
Assuming that 'flatten-to-path' means:
"Produce a compound path which, when filled, produces the same result as
filling and/or stroking a sequence of paths and/or shapes."
Then, in full generality, this is really quite complex - particularly if
you want to preserve curves (which is important if you want your
resulting path to scale arbitrarily).
There are two pieces:
1) A 'thicken' operation which takes a path and stroke properties as
input and produces a path which can be filled to produce the stroke.
(i.e. the 'inside' of the path is the same as the 'inside' of the stroke
of the original path).
2) A 'union' operation which takes two arbitrary paths and produces a
single path which, when filled, produces the same result as filling the
first path, and then filling and compositing the second path on top of
it. (i.e. the 'inside' of the path is the same as the union of the
'insides' of the two input paths).
Neither of these are at all straight-forward in the general case
unfortunately :(
However, if you restrict yourself to:
1) polygonal paths and elliptical arcs, sectors and segments
2) non-overlapping paths which use the same fill rule
Restricting to (1) means it is much easier to generate a thickened path
from the original - there's no pesky bezier thickening to deal with
(which is problematic because the curve which is a fixed perpendicular
distance from a bezier is not a bezier).
Restricting to (2) means that A union B == A concat B - i.e. you append
the path definition of B to A.
Warmest Regards,
Mark.
--
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps
More information about the use-livecode
mailing list