delorie.com/archives/browse.cgi   search  
Mail Archives: geda-user/2016/02/01/14:57:24

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\]" <geda-user AT delorie DOT com>
Subject: Re: [geda-user] The nature of gEDA layers
References: <alpine DOT DEB DOT 2 DOT 00 DOT 1601180756390 DOT 9035 AT igor2priv>
<s6n1t93h4ub DOT fsf AT blaulicht DOT dmz DOT brux>
<20160127091746 DOT 1c7a976c2752f913921688ac AT gmail DOT com>
<s6npowne74w DOT fsf AT blaulicht DOT dmz DOT brux>
<20160127141334 DOT c738feb9dbeb54a7dec3dff8 AT gmail DOT com>
<s6n37tjt1tv DOT fsf AT falbala DOT ieap DOT uni-kiel DOT de>
<56A8F74B DOT 8080304 AT ecosensory DOT com>
<CAC4O8c9UKLsh5FAAwUMEtHThKH-w3gUmCU2i9dRW9igkyRt-TQ AT mail DOT gmail DOT com>
<CAJZxidDmjMtd_fKvR5qZVRa+hwDUbvfaz79oZjkBgDuE1m8RBg AT mail DOT gmail DOT com>
<56A961BC DOT 3040405 AT ecosensory DOT com>
<CAJZxidC=nbxAinOtpfGHHqwPXbEMrhfat7jKgA9KBp3EVVg4_Q AT mail DOT gmail DOT com>
<s6nbn863xlu DOT fsf AT blaulicht DOT dmz DOT brux> <56A9E416 DOT 8080500 AT ecosensory DOT com>
<20160128124020 DOT 8f2f33210481f637a696f5d0 AT gmail DOT com>
<CAJZxidD7=NE+Q3FGOU+ER3Xh7TRskEPRTKa=yrwUm51_VaYw0A AT mail DOT gmail DOT com>
<20160128164922 DOT 7bd920859ab8462f8abb0f40 AT gmail DOT com>
<s6ny4b9r3x7 DOT fsf AT falbala DOT ieap DOT uni-kiel DOT de>
<20160128191943 DOT d3f06f258e112a8d7d532327 AT gmail DOT com>
<s6nio2d2yr0 DOT fsf AT blaulicht DOT dmz DOT brux>
<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: <s6n60y8urvs.fsf@blaulicht.dmz.brux>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)
MIME-Version: 1.0
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

--=-=-=
Content-Type: text/plain

"Nicklas Karlsson (nicklas DOT karlsson17 AT gmail DOT com) [via
geda-user AT delorie DOT com]" <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

--=-=-=--

- Raw text -


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