Dear George, Greg,
Thank you both for your feedback, most helpful!
One alternative approach would be to cut the outer polygon apart
instead of keeping it intact. Just sort the corner points of all
the holes eg. vertically, and make a horizontal cut at each
height. You need to be careful to combine equal hights (allow for
some numeric rounding error), and not to cut through tall holes
sitting next to short ones. This method should work particularly
well if the wall and hole polygons are orthogonal to each other,
which happens to often be the case in architectural models.
The solution proposed by the author of the python Polygon package does
exactly this; the complex polygon is split into a list of simple polygons,
using the center of gravity of the polygon. After the split it isn't
difficult to write it out to a .rad format!
Maybe I'm being naive, but I've had good luck creating connecting seams
between arbitrary vertices in holey polygons. Make sure the outer
vertices are in counter-clockwise order around the normal, and the
interior (hole) vertices are clockwise. Then, the algorithm goes
something like this:
First N vertices are N vertices of outer contour
Next M1 vertices are M1 vertices of hole 1
Close hole loop with vertex that is copy of the first hole
Close seam by adding copy of last outer contour vertex
Repeat 3 steps above for each hole contour
In Radiance, polygon seams can cross all over each other and it doesn't
create any artifacts. This is how fonts are rendered, for example.
This is also why I never bothered implementing holes in polygons; I
never found where seams caused a problem, and I couldn't think of any
way besides seams for implementing holes.
Thanks for the sketched out algorithm, I was hoping for that kind of
response! By no means was my mail intended as criticism for the lack of
explicit holes, just hoping for a way to get passed the problem!
I'm sure your suggested algorithm will be helpful in further development of