This follows #130.
If we have multiple Paths, or a Path that doubles back on itself, we may want to add fencing while skipping fenceposts that would collide with another already-placed fencepost. This should also be a simple command: autofence!(paths, fencepost, offsets, pitch, keepout_radius=pitch) (using auto in the name in analogy to autofill). This is a little more involved because we have to efficiently check for collisions (easiest if we're just checking that distance is at least keepout_radius from existing fencepost centers stored in an appropriate spatial index for finding nearest neighbors). (There may be some simplifications possible if you are doing this in a RouteChannel, but I'm not sure it's worth it.) This can leverage some of fence!, but since the result is not actually periodic it may not be able to use any of the data structures suggested for fence implementation in #130.
This follows #130.
If we have multiple Paths, or a Path that doubles back on itself, we may want to add fencing while skipping fenceposts that would collide with another already-placed fencepost. This should also be a simple command:
autofence!(paths, fencepost, offsets, pitch, keepout_radius=pitch)(usingautoin the name in analogy toautofill). This is a little more involved because we have to efficiently check for collisions (easiest if we're just checking that distance is at leastkeepout_radiusfrom existing fencepost centers stored in an appropriate spatial index for finding nearest neighbors). (There may be some simplifications possible if you are doing this in a RouteChannel, but I'm not sure it's worth it.) This can leverage some offence!, but since the result is not actually periodic it may not be able to use any of the data structures suggested for fence implementation in #130.