jitx/layer-specs¶
Package name: jitx/layer-specs
Summary¶
Data Types¶
CustomLayer¶
Constructors¶
| Function | Description |
|---|---|
| CustomLayer | Constructor for defstruct CustomLayer |
Silkscreen¶
Constructors¶
| Function | Description |
|---|---|
| Silkscreen | Constructor for defstruct Silkscreen |
LayerIndex¶
The LayerIndex type is used to specify which conductor layer in the board stackup that a particular statement or property affects.
Constructors¶
| Function | Description |
|---|---|
| LayerIndex | Constructor for defstruct LayerIndex |
Functions¶
| Function | Description |
|---|---|
| layer-num | |
| to-layer-index | |
| flip | |
| layer-pair |
BoardEdge¶
Courtyard¶
Cutout¶
LayerSpecifier¶
The LayerSpecifier type is the base type for specifying non-copper manufacturing layers.
SolderMask¶
Constructors¶
| Function | Description |
|---|---|
| SolderMask | Constructor for defstruct SolderMask |
ForbidCopper¶
Constructors¶
| Function | Description |
|---|---|
| ForbidCopper | Constructor for defstruct ForbidCopper |
LayerShape¶
Constructors¶
| Function | Description |
|---|---|
| LayerShape | Constructor for defstruct LayerShape |
Paste¶
Finish¶
Glue¶
Side¶
Enum to represent which side of the board a component or module is placed on.
Functions¶
| Function | Description |
|---|---|
| to-layer-index | |
| flip (+ 2) |
ForbidVia¶
Definitions¶
CustomLayer¶
public defstruct CustomLayer <: LayerSpecifier :
name: String
side: Side
-
name: String -
side: Side
Constructors¶
CustomLayer¶
Constructor for defstruct CustomLayer
public defn CustomLayer (name:String, side:Side = ?)
Silkscreen¶
public defstruct Silkscreen <: LayerSpecifier :
name: String
side: Side
-
name: String -
side: Side
Constructors¶
Silkscreen¶
Constructor for defstruct Silkscreen
public defn Silkscreen (name:String = ?, side:Side)
LayerIndex¶
The LayerIndex type is used to specify which conductor layer in the board stackup that a particular statement or property affects.
public defstruct LayerIndex <: Hashable & Equalable & Comparable<LayerIndex> :
index: Int
side: Side
-
index: Int -
side: Side
Outline¶
defstruct LayerIndex :
index:Int
side:Side
defn LayerIndex (index:Int, side:Side = Top) -> LayerIndex:
...
The LayerIndex type expects two arguments:
index- If we consider the conductor layers in board stackup an zero-indexed array, theindexis the offset into the array from either theTopor theBottom.side- This parameter determines whether theindexapplies from theTopgoing down, or from theBottomgoing up.
Symmetry of Top and Bottom Indices¶
The Bottom side indices can be considered a reverse indexing scheme.

Notice that there is a way to index every layer in the stackup in either direction.
Shortcuts based on Side¶
In some applications of the LayerIndex type, you will often see the type LayerIndex|Side used. This means that the user can pass either a LayerIndex or a Side parameter in the form of Top or Bottom enumerated values.
These Side values are a shortcut for:
Top=>LayerIndex(0, Top)Bottom=>LayerIndex(0, Bottom)
Operators¶
Currently the plus and minus operators are defined for the LayerIndex and Side types. This provides a short cut for indexing:
val inner-1 = Top + 1
println("Inner 1: %_" % [inner-1])
val inner-N-1 = Bottom - 1
println("Inner N-1: %_" % [inner-N-1])
val inner-skip = inner-1 + 2
println("Inner Skip: %_" % [inner-skip])
When run this will generate:
Inner 1: LayerIndex(1)
Inner N-1: LayerIndex(1, Bottom)
Inner Skip: LayerIndex(3)
Constructors¶
LayerIndex¶
Constructor for defstruct LayerIndex
public defn LayerIndex (index:Int, side:Side = ?)
Functions¶
layer-num¶
public defn layer-num (l:LayerIndex, num-copper-layers:Int)
to-layer-index¶
public defn to-layer-index (l:LayerIndex|Side) -> LayerIndex
- Returns
LayerIndex
flip¶
public defn flip (a:Side, l:LayerIndex)
layer-pair¶
public defn layer-pair (l0:LayerIndex, l1:LayerIndex) -> [LayerIndex, LayerIndex]
- Returns
[LayerIndex, LayerIndex]
Operators¶
minus -¶
public defn minus (l:LayerIndex, i:Int) -> LayerIndex
- Returns
LayerIndex
minus -¶
public defn minus (side:Side, index:Int) -> LayerIndex
- Returns
LayerIndex
plus +¶
public defn plus (l:LayerIndex, i:Int) -> LayerIndex
- Returns
LayerIndex
plus +¶
public defn plus (side:Side, index:Int) -> LayerIndex
- Returns
LayerIndex
BoardEdge¶
public defstruct BoardEdge <: LayerSpecifier :
Courtyard¶
public defstruct Courtyard <: LayerSpecifier :
side: Side
side: Side
Cutout¶
public defstruct Cutout <: LayerSpecifier :
LayerSpecifier¶
The LayerSpecifier type is the base type for specifying non-copper manufacturing layers.
public deftype LayerSpecifier <: Equalable & Hashable
This typically includes the silkscreen, solder mask, forbidden regions, etc. It is not used to specify geometry on copper layers.
Derived Types¶
LayerSpecifier is the parent to multiple child types. The child types defined below are what we typically use with the layer() statement.
| Name | Description |
|---|---|
Courtyard(s:Side) |
Courtyard layer to indicate land pattern bounds. Expects a Top|Bottom argument. |
Cutout() |
Cutout layer for holes and slots. Vias and through-hole pads will include their hole definitions on this layer. |
SolderMask(s:Side) |
Solder mask layer. Expects a Top|Bottom argument. |
Paste(s:Side) |
Paste application layer. Expects a Top|Bottom argument. |
Glue(s:Side) |
Glue application layer. Expects a Top|Bottom argument. |
Finish(s:Side) |
Surface Finish layer to indicate plating. Expects a Top|Bottom argument. |
Silkscreen(s:Side) |
Silkscreen application layer. Expects a Top|Bottom argument. |
BoardEdge() |
Geometry to align with edge of board |
ForbidVia() |
Forbid Vias layer (via keepout) |
ForbidCopper( start:LayerIndex, end:LayerIndex) |
Forbid Copper layer (copper keepout). Expects a LayerIndex argument to specify which layer[s] to forbid copper. |
CustomLayer( name:String, s:Side) |
Custom Mechanical layer. Expects a name and a Top|Bottom argument. |
Cutout¶
The Cutout layer is intended to make internal holes in the board shape, like for through holes or routed holes/slots.
While you can use any geometry on the Cutout layer - keep in mind your fabricator's limitations and constraints. If your fabricator only has a router (and not a laser or waterjet cutter) then they will likely not be able to construct a hole with squared corners.
Silkscreen¶
defstruct Silkscreen <: LayerSpecifier:
name:String with:
default => "default-silkscreen"
side:Side
This layer optionally allows for a name:String argument with default value of default-silkscreen. This name acts like a class attribute in HTML. It is intended to group like content together on the silkscreen layers.
When the board data is exported, the silkscreen content for the top and bottom layers, respectively, will be flattened into a single top and bottom silkscreen layers.
The typical usage model is to use the default value and create layer specificiers with Silkscreen(Top) or Silkscreen(Bottom) and no custom name.
CustomLayer¶
Similarly, the CustomLayer specifier expects a name:String argument. This argument allows the user to specify different classes of content like:
- Fabrication Notes
- Assembly Notes
- Dimensions
ForbidCopper¶
The ForbidCopper specifier takes a LayerIndex instance[s] as an argument. This allows you to construct keepout regions for the copper on any layer or set of layers in a design.
defn ForbidCopper (start:LayerIndex, end:LayerIndex = start) -> ForbidCopper :
...
Notice that the end by default is start. If you construct a ForbidCopper() with a single argument, then only that copper layer will possess a forbidden region.
Let's consider a case where we have an antenna on a N-layer board:

And we want to place a forbid region in the blue area of the board.
pcb-board curr-board:
...
val forbid-range = ForbidCopper(
LayerIndex(1), LayerIndex(0, Bottom)
)
layer(forbid-range) = loc(40.0, 0.0) * Rectangle(10.0, 30.0)
Here we construct a ForbidCopper instance that spans the layer 1 to N. Notice that we don't include the layer 0 or the Top layer because that is where the antenna structure will go. The LayerIndex(0, Bottom) is a means of specifying the bottom copper layer of the board without knowing the full number of layers in the stackup.
We then use the loc() function to position the desired forbid region on the board. This takes our 10mm x 30mm forbid region and translates it 40mm to right from the origin of the board.
SolderMask¶
public defstruct SolderMask <: LayerSpecifier :
side: Side
side: Side
ForbidCopper¶
public defstruct ForbidCopper <: LayerSpecifier :
end: LayerIndex
start: LayerIndex
-
end: LayerIndex -
start: LayerIndex
Constructors¶
ForbidCopper¶
Constructor for defstruct ForbidCopper
public defn ForbidCopper (start:LayerIndex, end:LayerIndex = ?)
LayerShape¶
public defstruct LayerShape <: Hashable & Equalable :
shape: Shape
specifier: LayerSpecifier
-
shape: Shape -
specifier: LayerSpecifier
Constructors¶
LayerShape¶
Constructor for defstruct LayerShape
public defn LayerShape (specifier:LayerSpecifier, shape:Shape)
Paste¶
public defstruct Paste <: LayerSpecifier :
side: Side
side: Side
Finish¶
public defstruct Finish <: LayerSpecifier :
side: Side
side: Side
Glue¶
public defstruct Glue <: LayerSpecifier :
side: Side
side: Side
Side¶
Enum to represent which side of the board a component or module is placed on.
public defenum Side <: Equalable & Hashable & Comparable
-
Top- top of the board, or same side as the reference placement -
Bottom- bottom of the board, or opposite side as the reference placement
Note that in some contexts the interpretation is relative; for example if a module is placed on Bottom but it has a component which is placed relatively to that module on Bottom, that component will actually be on Top overall.
Functions¶
to-layer-index¶
public defn to-layer-index (l:LayerIndex|Side) -> LayerIndex
- Returns
LayerIndex
flip¶
public defn flip (a:Side, b:Side)
flip¶
public defn flip (a:Side, l:LayerSpecifier)
flip¶
public defn flip (a:Side, l:LayerIndex)
Operators¶
minus -¶
public defn minus (side:Side, index:Int) -> LayerIndex
- Returns
LayerIndex
plus +¶
public defn plus (side:Side, index:Int) -> LayerIndex
- Returns
LayerIndex
ForbidVia¶
public defstruct ForbidVia <: LayerSpecifier :
Related Packages¶
Forwarded by package: jitx