Mail Archives: geda-user/2016/02/01/14:57:24
--=-=-=
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 -