On Sun, Aug 15, 2010 at 04:46:55PM -0500, John Griessen wrote: > Andrew Poelstra wrote: > > >Suppose I have a trace whose clearance is set to 2.5mm - if I lay any > >component > >too close while the real-time DRC is running, how can it know that it's > >breaking > >a rule without re-checking the clearance for every object on the PCB? > > Hmm... well, I have not written DRC checkers, but I am imagining > you have a worst case rule distance and can solve everything that > touches a rectangle with the worse case distances to it's sides > from the object you are editing/checking against. Distance is the common > thread in all DRCs to use to simplify the problem. >
I haven't written a DRC before either, but I think I've figured out a way to do it: My current filter/rule structure doesn't quite work for clearance - because it validates /attributes/, and clearance isn't an attribute. So, in PCB, we will create clearance as a "virtual" attribute that exists in PCB's memory but isn't saved out. There may be other virtual attributes we need to create as well. Clearance would be set for each component created or moved, as well as the components nearby it (still working on the details ;). Whenever any attribute is set, virtual or otherwise, its respective rules are also checked. This is a straightforward O(1) operation and only has to be run when attributes are being set. Andrew _______________________________________________ geda-user mailing list [email protected] http://www.seul.org/cgi-bin/mailman/listinfo/geda-user

