X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f X-Recipient: geda-user AT delorie DOT com From: geda AT psjt DOT org (Stephan =?utf-8?Q?B=C3=B6ttcher?=) To: "Nicklas Karlsson \(nicklas.karlsson17\@gmail.com\) \[via geda-user\@delorie.com\]" Subject: Re: [geda-user] The nature of gEDA layers References: <20160127091746 DOT 1c7a976c2752f913921688ac AT gmail DOT com> <20160127141334 DOT c738feb9dbeb54a7dec3dff8 AT gmail DOT com> <56A8F74B DOT 8080304 AT ecosensory DOT com> <56A961BC DOT 3040405 AT ecosensory DOT com> <56A9E416 DOT 8080500 AT ecosensory DOT com> <20160128124020 DOT 8f2f33210481f637a696f5d0 AT gmail DOT com> <20160128164922 DOT 7bd920859ab8462f8abb0f40 AT gmail DOT com> <20160128191943 DOT d3f06f258e112a8d7d532327 AT gmail DOT com> <20160201113121 DOT 9e1229dc74b565f082c3bfba AT gmail DOT com> Date: Mon, 01 Feb 2016 20:56:07 +0100 In-Reply-To: <20160201113121.9e1229dc74b565f082c3bfba@gmail.com> (Nicklas Karlsson's message of "Mon, 1 Feb 2016 11:31:21 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Reply-To: geda-user AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: geda-user AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk --=-=-= Content-Type: text/plain "Nicklas Karlsson (nicklas DOT karlsson17 AT gmail DOT com) [via geda-user AT delorie DOT com]" writes: >> You still want to model a 3D PCB accurately. But that is not the job of >> the layout program and its core data structures. > > In sort of but there are two methods: > 1. To model as it look then manufacturing is done. > 2. It should be possible to deduce how it should look then manufacturing is done. > Then drill size and between which conductive layer hole or cut out > should be made it is possible to deduce a accurate 3D pcb model. Your > example below should do the trick together with some knowledge of > stack up of course. Annotated with Attributes, a HID can visualize, edit, export a full 3D model of the PCB. > > > I had time to read your example more careful and could only contribute two meaningful comments: > >> Layer{name="Top:mask", Attributes{elements="COMPONENTSIDE:mask"}} > > I think the mask and silkscreen if there is one should be referenced > to TOP conductive layer instead of COMPONENTSIDE. Reason is multi > layer above two layer circuit boards are etched before they are > assembled and if mask/silk is referenced to conductive layer file > format would allow for embedded component soldered on inner layer > before board assembled. This is a library layer naming convention detail. > I assume > Line {layer="Vias", width=16mil, depth=200, Points{(0,-50mil), > (0,50mil)}, Attributes{thermal="plus"}, } > > there line is place on via layer would make a plated slit instead of a round hole? The idea is that a thermal tool is managing all objects marked with an apropriate attribute. The tools is allowd to remove the clearance around pads, or add negative Arcs around pads, or draw lines across pads. If you select the thermal tool and click on an object, the tool will search for objects on the active Layer inside, with thermal="" Attributes, figure out what style is currently implemented, remove all that, look for a clearance attribute on the pad. And then figure out how to replace those objects with something else, properly marked as thermal. If there is nothing, it may add a clearance, for example. If it is not a Group, it may wrap the pad in a Group, after confirmation. > I did not get what "depth=200" is for. Currently, the PCB objects come with a lot of implicit aura attached, polygon clearance, soldermask clearance, solderpad, thermals, ... A generic geometry may need to be more explicit. Everything is drawn at a depth. There are positive and negative depths. Deeper stuff is drawn before shallower stuff. Negative depth draw holes and clerances. I'll append what I have written so far that outlines these ideas. Just brainstorming ... Its not about syntax, could well become xml when exported, its about the data. To be continued. Or abandoned. I don't like xml, though. > Regards Nicklas Karlsson --=-=-= Content-Type: text/plain; charset=utf-8 Content-Disposition: inline; filename=pcb-new-data-structures.txt Content-Transfer-Encoding: quoted-printable Layer { name=3D"LAYERNAME", connects=3D("LAYERNAME", ...), Attributes{ conductive, outline, elements=3D"LIBRARYLAYERNAME", } } Group { name=3D"GROUPNAME", origin=3D(X,Y), Attributes{ } Ref{}, Line{} Polygon{} } Ref { name=3D"GROUPNAME", origin=3D(X,Y), scale=3DSCALE, Attributes{ copy_on_write, }=09 } Line { name=3D"NAME", Path{ (X1,Y1), (X2,Y2), ... }, Arc{ center=3D(X,Y), radius=3DDIM, start=3DANGLE, end=3DANGLE }, Text{ "TEXT", origin=3D(X,Y), font=3D"FONT", height=3DDIM, angle=3DANG= LE, align=3DALIGNMENT}, Attributes{ thermal, }, Stroke{layer=3D"LAYERNAME", depth=3DDEPTH, width=3DDIM}, } Polygon { name=3D"NAME", Path{ (X1,Y1), (X2,Y2), ... }, Attributes{ thermal, }, layer=3D"LAYERNAME", depth=3DDEPTH, } LAYERNAME: When an element is instantiated from a library, the library Layer names must be mapped to the lauout layers. COMPONENT -> top SOLDER -> bot INNER -> ground, power, signals, misc COMPONENT:SILK -> topsilk THROUGHHOLE -> vias COMPONENT:MASK ... COMPONENT:PASTE COMPONENT:KEEPOUT COMPONENT:BODY DEPTH: This could be a signed integer. Items drawn with negative depth are inverse. Clearance, holes, negative text in copper. DEPTHs with lower absolute value are drawn later. +100 pads +200 routing -400 routing clearance +600 thermals -700 via, pad clearance -800 holes in planes +900 copper planes =20=20 TEXT: must be exportable to Gerber. How shall that be done with TrueType fonts? Group{name=3D"S:A", Line{Path{ (0,0), (0.2,1), (0.4,0) }, Path{(0.1,0.5), (0.3,0.5)}, Attribute{width=3D0.5}} =09=20=20=20=20=20 Line{Text{"AB", font=3D"S", height=3D20mil}} ---> Group{ Group{Ref{name=3D"S:A", scale=3D20mil}}, Group{Ref{name=3D"S:B", scale=3D20mil, origin=3D(10mil,0)}} } SCALE: =C2=BFFor TEXT? Too expensive in the core? SCALE specifies a rotation matrix. scale=3Df --> ( (f 0) (0 f) ) scale=3D(X,Y) --> ( (X 0) (0 Y) ) scale=3D(a1,a2,a3,a4) --> ( (a1 a2} (a3 a4) ) rotate=3Da --> ( (cos(a) -sin(a)) (sin(a) cos(a)) ) scale=3D(0,-1) y-mirrored Any dimension without unit may be raed as mm=3D1e6nm, e.g., in text symbols. Those can be scaled to the desired size. The geometry code could maintain a cache of scaled Reference()s. Group{} A group without origin=3D is an unplaced group, not part of the layout. It can be referenced or instantiated (copied). Vias stacks, library components, text symbols. Line{} A line must accept multiple Strokes, but not necessarily multiple of Path, Arc, Text. The Strokes are meant to represent a main object and its Aura of clearnces and thermals. A complete Via stack could be based on a single, 1-point Path. Until there need to be thermal spokes. Line{} may be renamed Draw{} --=-=-= Content-Type: text/plain -- Stephan --=-=-=--