I have a rectangular area filled with vector paths (an SVG document, to be precise). Starting at the origin, I need to visit every part of every path.
For an open path, like a line or an arc, I would most often walk to one end of the path, walk the length of the path, then walk to another path.
For a closed path, like a circle or a square, I would most often walk to a point on the path near my previous stop, walk the perimeter of the path, then walk to another path.
I say "most often" above because it would also be valid to visit a path, not necessarily at an endpoint, walk along part of it, then leave to another path, later coming back to finish the abandoned walk.
The purpose of this problem is to minimize total travel distance for a laser cutter or CNC mill that needs to cut along all the paths.
Are there any existing algorithms (or open source tools) for solving this problem?
EDIT: Two paths never cross. Anywhere that might happen will have been altered from 4 vertices and 2 paths to 5 vertices and 4 paths by a previous step in my workflow.
EDIT2: The set of paths is disjoint. Some steps in the solution will be between pieces of disconnected paths.