On Wed, 2008-11-19 at 13:32 -0500, DJ Delorie wrote: > I think the problem is that mm grid points are not exactly on 1/100mil > coordinates, so two mm grid points that look diagonally opposite each > other may not be exactly diagonal in 1/100mil space. > > The only way to "fix" this is to change to something other than > 1/100mil internal coordinates.
Two solutions there.. 1. Really high resolution integer coordinate space. Reduces available board dimensions due to size of integers. (Or go to floating-point.. -> Still limited precision for a big board). 2. A kind of semi-intrinsic coordinates, (think computer graphics, where each coordinate vector also has a divisor. -> 3D coordinate has 4 numbers, with the fourth usually being "1"). We would presumably store value (multiplied by some desired precision) and units. E.g. (1,5)mm -> point->x.value = 1000000; point->x.unit = PCB_UNIT_NM; point->y.value = 5000000; point->y.unit = PCB_UNIT_NM; Or perhaps the * 1e6 would be implicit, and we'd call the units PCB_UNIT_MM - whatever. This scheme would mean we could no longer compare units easily, needing to convert to a common format before comparing bounding boxes etc.., but it does neatly solve the problem of retaining precision in arbitrary units. (Ok... given a common origin to both systems!) Further problems (whilst I'm thinking and typing), would be representing coordinates which result as an intersection of points / geometry in different coordinate systems. You'd quickly start needing to add more precision, or descriptions of how to construct the location. The same problem recurs - approx 45 degree lines would probably result. > Alternately, we could allow lines to be not-quite-exactly-45-degrees, > but I suspect a lot of the internals would get confused about that. Probably confused, but part of me suspects this might be the best solution. One final thought.. could we round the width / height of the line to internal coordinate units, and (say), the start-point, rather than both end-points? That way, the line-drawing code could properly constrain the drawn line to be diagonal. -- 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 geda-user@moria.seul.org http://www.seul.org/cgi-bin/mailman/listinfo/geda-user