[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
gEDA-user: skip drc
Hi,
I have rewritten the skip_drc patch (originally written by Ineiev) to apply
to the current git HEAD.
The original patch can be found here:
http://www.seul.org/pipermail/geda-user/2010-September/048721.html
My patch is attached.
Levente
diff --git a/src/action.c b/src/action.c
index de2738e..2ad20b1 100644
--- a/src/action.c
+++ b/src/action.c
@@ -7001,7 +7001,7 @@ find_element_by_refdes (char *refdes)
return NULL;
}
-static AttributeType *
+AttributeType *
lookup_attr (AttributeListTypePtr list, const char *name)
{
int i;
diff --git a/src/action.h b/src/action.h
index ee116e8..ca1cbc3 100644
--- a/src/action.h
+++ b/src/action.h
@@ -46,4 +46,7 @@ void warpNoWhere (void);
/* In gui-misc.c */
bool ActionGetLocation (char *);
void ActionGetXY (char *);
+
+AttributeType * lookup_attr (AttributeListTypePtr list, const char *name);
+
#endif
diff --git a/src/find.c b/src/find.c
index 615659d..167f149 100644
--- a/src/find.c
+++ b/src/find.c
@@ -94,6 +94,7 @@
#include "set.h"
#include "undo.h"
#include "rats.h"
+#include "action.h"
#ifdef HAVE_LIBDMALLOC
#include <dmalloc.h>
@@ -822,6 +823,8 @@ LookupLOConnectionsToPVList (bool AndRats)
/* 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)
@@ -1169,6 +1172,8 @@ LookupPVConnectionsToLOList (bool AndRats)
/* loop over all layers */
for (layer = 0; layer < max_copper_layer; layer++)
{
+ if (LAYER_PTR (layer)->no_drc)
+ continue;
/* do nothing if there are no PV's */
if (TotalP + TotalV == 0)
{
@@ -2896,6 +2901,19 @@ ListsEmpty (bool AndRats)
return (empty);
}
+static void
+reassign_no_drc_flags (void)
+{
+ int layer;
+
+ for (layer = 0; layer < max_copper_layer; layer++)
+ {
+ LayerTypePtr l = LAYER_PTR (layer);
+ l->no_drc = lookup_attr (&(l->Attributes), "PCB::skip-drc") != NULL;
+ }
+}
+
+
/* ---------------------------------------------------------------------------
* loops till no more connections are found
*/
@@ -2903,6 +2921,7 @@ static bool
DoIt (bool AndRats, bool AndDraw)
{
bool newone = false;
+ reassign_no_drc_flags ();
do
{
/* lookup connections; these are the steps (2) to (4)
@@ -3345,6 +3364,7 @@ LookupConnection (LocationType X, LocationType Y, bool AndDraw,
/* check if there are any pins or pads at that position */
+ reassign_no_drc_flags ();
type
= SearchObjectByLocation (LOOKUP_FIRST, &ptr1, &ptr2, &ptr3, X, Y, Range);
@@ -3361,9 +3381,10 @@ LookupConnection (LocationType X, LocationType Y, bool AndDraw,
int laynum = GetLayerNumber (PCB->Data,
(LayerTypePtr) ptr1);
- /* don't mess with silk objects! */
- if (laynum >= max_copper_layer)
+ /* don't mess with non-conducting objects! */
+ if (laynum >= max_copper_layer || ((LayerTypePtr)ptr1)->no_drc)
return;
+
}
}
else
diff --git a/src/global.h b/src/global.h
index 0420a18..8460714 100644
--- a/src/global.h
+++ b/src/global.h
@@ -301,6 +301,7 @@ typedef struct /* holds information about one layer */
char *Color, /* color */
*SelectedColor;
AttributeListType Attributes;
+ int no_drc; /* whether to ignore the layer when checking the design rules */
}
LayerType, *LayerTypePtr;
_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user