On Tue, 2009-02-17 at 12:58 -0800, Ben Jackson wrote: > On Tue, Feb 17, 2009 at 08:02:42PM +0000, Peter Clifton wrote: > > > > I think the first hint of trouble is exemplified by PCB's failure to > > clear this the 360 degree arc from the polygon. I've distilled a > > test-case from your example (attached). > > Yes, as soon as he said it I figured that the self-intersecting arc would > blow up. > > > I wonder if (as a workaround) you'd get better results from two > > half-arcs, rather than one arc which touches its-self. > > If it were a line PCB would meld it, but it might work for an arc. On > the other hand, coincident lines (which normally would have been merged > but were not for some reason) have caused other clearing problems. > > I think the only straightforward way to fix the self-intersecting arc is > to build it internally from two parts and union them. Might be slow on > teardrop'd boards.
Probably just need some simple geometry to work out if it would self-intersect or not fn(radius, width, angle), and do something different with those cases which do. Unfortunately, there is (of course), a whole family of potential intersections, so its not quite as simple as just specifying an outer circle poly, with a circular hole. Since this probably isn't a common case, I'd not have a problem in requiring the performance hit for it. Ben, did you figure out what specifically causes co-incident lines to cause grief? My understanding of the code was that they shouldn't cause problems. (I'd love to see any simple test-cases you have where they do). As you may have noticed, I've done a bit of hacking on the polygon code recently. Not specifically in the contour intersection routines (yet), rather in the contour gathering. -- Peter Clifton Electrical Engineering Division, Engineering Department, University of Cambridge, 9, JJ Thomson Avenue, Cambridge CB3 0FA Tel: +44 (0)7729 980173 - (No signal in the lab!) _______________________________________________ geda-user mailing list [email protected] http://www.seul.org/cgi-bin/mailman/listinfo/geda-user

