[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: gEDA-user: Color silk layers in pcb
On 9/6/10, Peter Clifton <pcjc2@xxxxxxxxx> wrote:
...
> confusing "non-copper" with "skip-drc" is
> probably a bad idea.
...
Thank you, your suggestion is really reasonable.
I renamed the attribute to PCB::non-copper
and corrected the variable name and comments accordingly;
probably it does not make the patch perfect,
but I have no better idea at the moment.
Regards,
Ineiev
From 5ec7e281f01fa09b041537e4f4eb8237cda1cc9c Mon Sep 17 00:00:00 2001
From: Ineiev <ineiev@xxxxxxxxxxxxxxxx>
Date: Tue, 7 Sep 2010 10:30:44 +0400
Subject: [PATCH] recognize PCB::non-copper layer attribute
layers with `PCB::non-copper' attribute are excluded
from DRC (both copper- and silkscreen-specific) and connection lookup
---
src/action.c | 2 +-
src/action.h | 2 ++
src/find.c | 23 +++++++++++++++++++++--
src/global.h | 2 ++
4 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/src/action.c b/src/action.c
index 32e294c..2936080 100644
--- a/src/action.c
+++ b/src/action.c
@@ -6957,7 +6957,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..7b64e05 100644
--- a/src/action.h
+++ b/src/action.h
@@ -46,4 +46,6 @@ 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 593be70..17f042f 100644
--- a/src/find.c
+++ b/src/find.c
@@ -81,6 +81,7 @@
#include "global.h"
+#include "action.h"
#include "crosshair.h"
#include "data.h"
#include "draw.h"
@@ -826,6 +827,8 @@ LookupLOConnectionsToPVList (bool AndRats)
/* now all lines, arcs and polygons of the several layers */
for (layer = 0; layer < max_layer; layer++)
{
+ if (LAYER_PTR (layer)->non_copper)
+ continue;
info.layer = layer;
/* add touching lines */
if (setjmp (info.env) == 0)
@@ -1173,6 +1176,8 @@ LookupPVConnectionsToLOList (bool AndRats)
/* loop over all layers */
for (layer = 0; layer < max_layer; layer++)
{
+ if (LAYER_PTR (layer)->non_copper)
+ continue;
/* do nothing if there are no PV's */
if (TotalP + TotalV == 0)
{
@@ -2900,6 +2905,18 @@ ListsEmpty (bool AndRats)
return (empty);
}
+static void
+reassign_non_copper_flags (void)
+{
+ int layer;
+
+ for (layer = 0; layer < max_layer; layer++)
+ {
+ LayerTypePtr l = LAYER_PTR (layer);
+ l->non_copper = lookup_attr (&(l->Attributes), "PCB::non-copper") != NULL;
+ }
+}
+
/* ---------------------------------------------------------------------------
* loops till no more connections are found
*/
@@ -2907,6 +2924,7 @@ static bool
DoIt (bool AndRats, bool AndDraw)
{
bool new = false;
+ reassign_non_copper_flags ();
do
{
/* lookup connections; these are the steps (2) to (4)
@@ -3349,6 +3367,7 @@ LookupConnection (LocationType X, LocationType Y, bool AndDraw,
/* check if there are any pins or pads at that position */
+ reassign_non_copper_flags ();
type
= SearchObjectByLocation (LOOKUP_FIRST, &ptr1, &ptr2, &ptr3, X, Y, Range);
@@ -3365,8 +3384,8 @@ LookupConnection (LocationType X, LocationType Y, bool AndDraw,
int laynum = GetLayerNumber (PCB->Data,
(LayerTypePtr) ptr1);
- /* don't mess with silk objects! */
- if (laynum >= max_layer)
+ /* don't mess with silk and other non-conducting objects! */
+ if (laynum >= max_layer || ((LayerTypePtr)ptr1)->non_copper)
return;
}
}
diff --git a/src/global.h b/src/global.h
index bb78abc..bb82b79 100644
--- a/src/global.h
+++ b/src/global.h
@@ -301,6 +301,8 @@ typedef struct /* holds information about one layer */
char *Color, /* color */
*SelectedColor;
AttributeListType Attributes;
+ int non_copper; /* whether to ignore the layer when looking up connections
+ and checking against copper-specific design rules */
}
LayerType, *LayerTypePtr;
--
1.6.0.4
_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user