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: Subject: [geda-user] Proposing a New Hierarchical Data Structure? From: "Jason White (whitewaterssoftwareinfo AT gmail DOT com) [via geda-user AT delorie DOT com]" To: geda-user AT delorie DOT com Content-Type: text/plain; charset=UTF-8 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