www.delorie.com/archives/browse.cgi   search  
Mail Archives: geda-user/2015/09/10/17:35:18

X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f
X-Recipient: geda-user AT delorie DOT com
X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=simple; d=mail.ud03.udmedia.de; h=
to:from:subject:message-id:date:mime-version:content-type
:content-transfer-encoding; s=beta; bh=6qSpqoCOGGsd33uWAqxRN7CHd
DTG4In5esmPjuWjRPQ=; b=FpSFfsfIRscELGAFm5z8zpbZloiHcG9SaDFYDbBcG
ReymIoXAjUbxH+2SgE5IgzyyB9abkvt4YCfezqJCfrzcxvjDnNsyJ/53JV0ZTQgz
7OOdeHk+IkP6p62chX4MK6+S+ALq4VmuuJtmDBeVQ8hFQwSSOu0StOzuR09mkmre
IU=
To: geda-user AT delorie DOT com
From: "Markus Hitter (mah AT jump-ing DOT de) [via geda-user AT delorie DOT com]" <geda-user AT delorie DOT com>
Subject: [geda-user] Notice to developers: layers have now a type.
Message-ID: <55F1F75F.8010809@jump-ing.de>
Date: Thu, 10 Sep 2015 23:34:23 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
Thunderbird/38.2.0
MIME-Version: 1.0
Reply-To: geda-user AT delorie DOT com

Dear developers,

unless there appears evidence it doesn't work as expected, I'll forward
branch LP1493557 to master tomorrow. It's the essence of a patch made by
DJ Delorie in 2007 and some of my work for refining. Every single commit
passes the regression test.

The new code will give layers a type. These types exist (see hid.h and
strflags.c):

  "copper",       /* LT_COPPER */
  "silk",         /* LT_SILK */
  "mask",         /* LT_MASK */
  "pdrill",       /* LT_PDRILL */
  "udrill",       /* LT_UDRILL */
  "paste",        /* LT_PASTE */
  "invisible",    /* LT_INVISIBLE */
  "fab",          /* LT_FAB */
  "assy",         /* LT_ASSY */
  "outline",      /* LT_OUTLINE */
  "route",        /* LT_ROUTE */
  "notes",        /* LT_NOTES */
  "keepout",      /* LT_KEEPOUT */
  "no_type"       /* LT_NUM_LAYERTYPES */

To the left the name as it appears in the saved file, to the right the
flag to test for in code.

- - -

Examples:

To test wether a specific layer is a copper (conductive) layer, do it
like this:

  if (PCB->Data->Layer[index].Type == LT_COPPER)
    ...

To iterate through all layers of a specific type, there's now a
comfortable macro. For example to loop over all paste layers:

  LAYER_TYPE_LOOP (PCB->Data, max_copper_layer + SILK_LAYER, LT_PASTE)
    do_something_with (layer);
    layer_number_is (n);
  END_LOOP;


N.B. the term 'max_copper_layer + SILK_LAYER' is simply the number of
defined layers, so you get all defined layers. For details see src/const.h.

- - -

How does this meet existing design files?

Currently the above techniques aren't in use, yet, all code still uses
various voodoo heuristics in many places to guess the type of a layer as
it did the last 20 years. So, no immediate change in behaviour expected.

When loading older files, some such voodoo heuristics
("guess_layertype()") is now used right at load time. So all future code
can rely on an existing layertype from now on. Patches replacing old
heuristics by simple tests or loops, like shown above, are very welcome.

At save time, layer types are saved, so this guessing is done only once.
Former layer definition:

  Layer(1 "component")

From now on

  Layer(1 "component" "copper")

Easy to edit, it's Layer(<number> <name> <type>)

Older versions of pcb can load files saved with newer version, they
simply ignore the type field.


As said, code is currently on the LP1493557 branch in the official Git repo:
http://git.geda-project.org/pcb/log/?h=LP1493557


Happy hacking,
Markus

-- 
- - - - - - - - - - - - - - - - - - -
Dipl. Ing. (FH) Markus Hitter
http://www.jump-ing.de/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019