www.delorie.com/archives/browse.cgi   search  
Mail Archives: geda-user/2015/12/20/19:15:33

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=relaxed/relaxed;
d=gmail.com; s=20120113;
h=mime-version:date:message-id:subject:from:to:content-type;
bh=XTnJyBPtMXhaPYirLf+VR2kveOh9Pw5ul5R2kWKs7qI=;
b=ILqXE/kuOVqMg/nOpd4YbkZK888tHYmsxOECfsWKyb83QsSMFc6proRvCT9YxIjaM0
P0dDJ358ZK4IiwTWms5DEegSeDS/oBiY4ohLtJmPup3K1eHcwqnw6i2EV+lLYpgesfaj
MHJtErApjnQ/YepBdCOU0NVWc0MN4GL8TTM1G6g7Auj9KRkhnxjm8Uq2sAB0IYNh+HjV
u3EwJMfZuj+Q+LL8GIpu8/rv5Jk8spNsD3zhg0AJxr4laKTCT6Tks8DnGoQc54AdkeIY
ijvw0kSnKA05qJyfVxwfqnzcyNP4YfUCfEjtv9dm+4wXRhe2KHRCiItFpz3x301/s8qo
iqcw==
MIME-Version: 1.0
X-Received: by 10.60.82.168 with SMTP id j8mr6574846oey.39.1450656914803; Sun,
20 Dec 2015 16:15:14 -0800 (PST)
Date: Sun, 20 Dec 2015 19:15:14 -0500
Message-ID: <CAOFvGD6OiYxcGkOiQRVnvXW3TLs42bt7PE5Ot9s09hsukYicKA@mail.gmail.com>
Subject: [geda-user] Proposing a New Hierarchical Data Structure?
From: "Jason White (whitewaterssoftwareinfo AT gmail DOT com) [via geda-user AT delorie DOT com]" <geda-user AT delorie DOT com>
To: geda-user AT delorie DOT com
Reply-To: geda-user AT delorie DOT com

I have taken the liberty of restating Nicklas Karlsson's thread in a
(hopefully) more productive manner:

The purpose of this thread is to discuss the merits of various data
structures to represent (primarily) PCB Layouts and (possibly)
Schematics. The discussion of the of specific data encoding mechanisms
such as XML, SQL, Plain Text, YAML, and JSON is NOT to be discussed in
this thread (Please take it to a separate thread!). We are only
talking about structure and representation.

In addition, this thread is not to contain discussion about low level
implementation details - Again, Only data structure and
representation.

With that said I am looking for ideas regarding the most general
way(s) to represent multilayer PCB designs with features such as:
(these are random things off of the top of my head)
* Padstacks
* Blind and buried vias
* Repeated sub-layouts (picture a 16 channel audio mixer)
* Internal cutouts
* Dimensioning
* Differential signal pairs
* Arbitrary footprint attributes (ie. showing resistor value, and
refdes at the same time on silkscreen)
* Representing RF structures (Better trapezoids and arcs)
* Elements rotated at arbitrary angles (not just multiples of 90)
* Arbitrary groups of elements (that can be rotated)
* Arbitrary shaped pins (groups of simple shapes)
* Ability to remove solder mask from arbitrary traces and areas
* Netlist attributes

Feel free to post your thoughts on the subject, below are my thoughts:


Probably most PCB designs could be represented by using a set of basic
shapes ("graphical primitives") such as:
* Lines
* Arcs
* Polygons
* Circles
* Text

If the data representation were to allow for groups of elements to be
treated as one, then if we had a footprint requiring a pin with
complex shape not, the complex shaped pin could be represented nicely
using a single group of primitives.

One area where much improvement can be made is in the representation
of layers. All of the basic shapes should be drawable on every layer.
(For instance drawing arbitrary shapes in solder mask) For this all
layers should be treated the same by the format from the start all the
way up to the point that the layer is processed to produce the
Gerber/Artwork files.

The most general representation would allow for any primitive (line,
polygon, etc.) to be assigned to any layer. While certain layers are
associated with certain outputs, it is necessary to decouple the basic
primitives from their function. (ie. a line ion the silkscreen layer
is just a line, not a special "slikscreen line").

There should be some common predefined layers for top and bottom. Now
stay with me, what I am about to propose may not sit well with some:
layers would be well represented as a 2D grid. Each copper layer (top,
bottom, inner 1, inner 2 etc.) would be a row in this grid. Then each
column would be the purpose of layer, for example "top:copper",
"bottom:silkscreen", "inter1:keepout." This would allow an arbitrarily
shape to be assigned to a layer such as "inter1:keepout."

As for grouping:
* Padstacks could be represented using groups graphical primitives
* Pins are either a predefined padstack or a group of primitives
defined on the spot
* Footprints consist of a number of pins plus some arbitrarily placed
elements such as lines and text.
* Sub layouts consist of instances of footprints plus some arbitrarily
placed elements such as lines and text.


There are probably better ways than what I have proposed, feel free to share.

--Jason White

- Raw text -


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