[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
gEDA-user: skpi_drc patch
Attached you can find the "skip_drc" patch for the current head.
It would be nice if it was checked in to git HEAD.
Thanks,
Levente
--
Levente Kovacs
http://levente.logonex.eu
diff --git a/src/action.c b/src/action.c
index 4f2e401..af93c19 100644
--- a/src/action.c
+++ b/src/action.c
@@ -6947,7 +6947,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..6dbaf2d 100644
--- a/src/action.h
+++ b/src/action.h
@@ -46,4 +46,5 @@ 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 eb4cac2..cdd1063 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)
{
@@ -2901,6 +2906,22 @@ 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
*/
@@ -2908,6 +2929,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)
@@ -3350,6 +3372,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);
@@ -3366,8 +3389,8 @@ 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;
}
}
diff --git a/src/global.h b/src/global.h
index daa82a9..08abbb8 100644
--- a/src/global.h
+++ b/src/global.h
@@ -303,6 +303,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