[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: gEDA-user: DRC rule structure



At 09:12 AM 8/16/2010, you wrote:
On Mon, Aug 16, 2010 at 02:56:17PM +0200, Armin Faltl wrote:
>
> >Actually, I don't think that's true:
> >
> >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?
> By checking exactly the object you are currently trying to place
> against the traces in vicinity,
> that can be found by bounding-box intersection.
>

There are two problems with this:

1. I would have to create bounding boxes for every object on the screen,
   because you never know if some weird part 10 inches away has a 10-inch
   clearance requirement.
2. Small parts, like vias, are able to be completely contained within the
   bounding box - so checking for intersections won't help me.

I'm not sure I follow. I was thinking of this when I saw your first post. This is a similar problem to displaying graphics using 3D information. I have seen a speed up method for that which uses the extra memory that typically is left over from working with three dimensions, in essence a fourth dimension. They precompute an approximate Z position (relative to the eye) which they use to quickly scan the data to see which planes to display first which are most likely to be partially or fully overwritten.

In your case, for each feature (your own definition of feature which works optimally) a working radius is computed which includes the furthest extent of the feature from it's origin plus what ever clearance is needed. All features are checked against one another still, but now it is just a matter of comparing origins against the working radii which is a much faster operation than checking each feature in detail (even a bounding box). Only the features that fail this test are then checked in detail, greatly speeding up the operation. Yes, you need to precompute the working radius of each "feature" on the board and store it, so that you only do this once and save that computing time for each display update.

Rick


_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user