Hi Riley,
I created jscut; I'll send you a separate message. I want to see how TinyG handles my high-speed experiments.
I'll drop down to SVG syntax to try to explain open paths vs closed paths vs groups. It would be great if someone would write an explanation in less technical terms.
Here's a path object: <path d="M 0 0 L 100 0" /> This says to move (M) to 0,0 then draw a line (L) to 100,0. The (L) can be left out; it automatically follows an M. Upper case uses absolute coordinates and lower case uses relative coordinates.
Here's a closed loop: <path d="M 0 0 L 100 0 L 100 100 L 100 0 Z" /> The close command (Z) says to connect the last point to the first; this forms a closed path. jscut pretends there's a final Z there if you leave it out.
Here are two ways to have a bunch of disconnected line segments:
Method 1: <path d="M 0 0 L 100 0" /> <path d="M 100 0 L 100 100" /> ...
Method 2: <path d="M 0 0 L 100 0 M 100 0 L 100 100 ..." />
Notice the "M" in the middle of Method 2. Either way jscut sees a bunch of unconnected line segments and not a closed path. jscut's implied Z rule doesn't help:
<path d="M 0 0 L 100 0 Z M 100 0 L 100 100 Z ..." />
The Z closes to the previous M. Each line segment is now a 2-line-segment loop; the loop has 0 volume so is useless.
Here's what happens when you group:
Method 3: <g> <path d="M 0 0 L 100 0" /> <path d="M 100 0 L 100 100" /> ... </g>
Now it's a group of separate line segments. jscut still doesn't see an enclosed volume.
Inkscape has easy commands to combine paths (method 1 -> method 2), break apart paths (method 2 -> method 1), group objects (method 1 -> method 3), and ungroup objects (method 3 -> method 1). None of this helps. It also has more advanced path editing tools, but these are a pain to use if you're trying to close a large set of line segments. They're also really nasty to explain. I don't know of an easy way to fix that SVG.
jscut works on closed paths because it needs to know what is inside vs. what is outside. The only operation which could have worked with open paths is "engrave", but I built it on the same machinery as the rest of the system, so it also requires closed paths.
Todd