[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: gEDA-user: Layer selective DRC
Kai-Martin Knaak wrote:
> Unfortunately, current git head of PCB enters an infinite loop if
> the attribute is set correctly. The attached patch fixes this bug.
> Now, DRC does indeed ignore the layers marked by the attribute.
> ( I triple checked ;-)
Well, it was working for a smallish pet project. Unfortunately, it still
fails in a similar way for my real project (the large one).
As a workaround, I tried to temporarily remove all tracks from the layers
I don't want to apply the DRC check to. But this breaks connectivity and
DRC gets swamped by false positives.
Looks like I am running out of options...
Maybe, PCB::skip-drc can be made to work, after all. I was able to narrow
down the code path for the entry into the endless loop. It is a continue
statement in LookupLOConnectionsToPVList() in the middle of find.c . See
below. The offending lines are marked with an exclamation mark at the start of
the line. Anyone got an idea, what might be the correct way to skip here?
/------------from pcb/src/find.c------------------------------------
static bool
LookupLOConnectionsToPVList (bool AndRats)
{
Cardinal layer;
struct pv_info info;
/* loop over all PVs currently on list */
while (PVList.Location < PVList.Number)
{
/* get pointer to data */
info.pv = *(PVLIST_ENTRY (PVList.Location));
EXPAND_BOUNDS (&info.pv);
/* check pads */
if (setjmp (info.env) == 0)
r_search (PCB->Data->pad_tree, (BoxType *) & info.pv, NULL,
LOCtoPVpad_callback, &info);
else
return true;
/* now all lines, arcs and polygons of the several layers */
for (layer = 0; layer < max_copper_layer; layer++)
{
! if (LAYER_PTR (layer)->no_drc)
! continue;
info.layer = layer;
/* add touching lines */
if (setjmp (info.env) == 0)
r_search (LAYER_PTR (layer)->line_tree, (BoxType *) & info.pv,
NULL, LOCtoPVline_callback, &info);
else
return true;
/* add touching arcs */
if (setjmp (info.env) == 0)
r_search (LAYER_PTR (layer)->arc_tree, (BoxType *) & info.pv,
NULL, LOCtoPVarc_callback, &info);
else
return true;
/* check all polygons */
if (setjmp (info.env) == 0)
r_search (LAYER_PTR (layer)->polygon_tree, (BoxType *) & info.pv,
NULL, LOCtoPVpoly_callback, &info);
else
return true;
}
/* Check for rat-lines that may intersect the PV */
if (AndRats)
{
if (setjmp (info.env) == 0)
r_search (PCB->Data->rat_tree, (BoxType *) & info.pv, NULL,
LOCtoPVrat_callback, &info);
else
return true;
}
PVList.Location++;
}
return false;
}
\-------------------------------------------------
---<)kaimartin(>---
--
Kai-Martin Knaak tel: +49-511-762-2895
UniversitÃt Hannover, Inst. fÃr Quantenoptik fax: +49-511-762-2211
Welfengarten 1, 30167 Hannover http://www.iqo.uni-hannover.de
-----> not happy with moderation of geda-user mailinglist
_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user