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

Re: gEDA-user: skpi_drc patch



On Fri, 17 Jun 2011 17:30:22 -0400
DJ Delorie <dj@xxxxxxxxxxx> wrote:

> You want the (already global) AttributeGet() function.
> 
>   l->no_drc = AttributeGet (l, "PCB::skip-drc") != NULL;
> 
> This does assume that the attribute has *some* value, even if the
> value is the empty string.

Thanks for pointing this out.

Attached is the new patch.

Levente 
 


-- 
Levente Kovacs
http://levente.logonex.eu
diff --git a/src/find.c b/src/find.c
index eb4cac2..c5159ba 100644
--- a/src/find.c
+++ b/src/find.c
@@ -822,6 +822,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 +1171,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 +2905,21 @@ 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 = AttributeGet (l, "PCB::skip-drc") != NULL;
+    }
+}
+
+
+
+
 /* ---------------------------------------------------------------------------
  * loops till no more connections are found 
  */
@@ -2908,6 +2927,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 +3370,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 +3387,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