jsl/landpatterns/silkscreen¶
Package name: jsl/landpatterns/silkscreen
Summary¶
Data Types¶
SilkscreenOutline¶
Base Type for Silkscreen Outline Generators
Multis¶
Function | Description |
---|---|
build-shape | |
build-outline | Build Component Outline Silkscreen Content in VirtualLP |
Methods¶
Function | Description |
---|---|
build-outline | Default Implementation for Build Component Outline |
OverallOutline¶
Constructors¶
Function | Description |
---|---|
OverallOutline (+ 1) | Constructor for defstruct OverallOutline |
SingleLineOutline¶
Constructors¶
Function | Description |
---|---|
SingleLineOutline (+ 1) | Constructor for defstruct SingleLineOutline |
InterstitialOutline¶
Create an interstitial silkscreen outline.
Constructors¶
Function | Description |
---|---|
InterstitialOutline (+ 1) | Constructor for defstruct InterstitialOutline |
InteriorEdgesOutline¶
Constructors¶
Function | Description |
---|---|
InteriorEdgesOutline (+ 1) | Constructor for defstruct InteriorEdgesOutline |
Functions¶
Function | Description |
---|---|
has-enough-interior-space? |
EdgesOutline¶
Constructors¶
Function | Description |
---|---|
EdgesOutline (+ 1) | Constructor for defstruct EdgesOutline |
PackageOutline¶
Silkscreen Outline Generator that follows the Package Body
Constructors¶
Function | Description |
---|---|
PackageOutline (+ 1) | Constructor for defstruct PackageOutline |
SilkscreenEdge¶
Selector for whether the edge lines are
Functions¶
Function | Description |
---|---|
create-silkscreen-pkg-extrema-outline | Construct and instantiate the package extrema lines in the scene graph |
construct-pkg-extrema-lines | Construct the shapes for the package extrema lines |
get-extended-pkg-outline | Determine the dimensions of the package body with Y extension |
General Definitions¶
Function | Description |
---|---|
build-outline-pin-1-triangle | Create a triangle shaped marker in the outline on the silkscreen |
create-silkscreen-outline | Construct a silkscreen outline of a component based on the Package Body |
create-silkscreen-overall-outline | Construct a silkscreen outline based on the Package Body and Soldermask Pad Openings |
default-mask-clearance | |
add-pin-1-dot | Construct the Pin-1 Dot Marker at a particular location. |
compute-triangle-marker | Compute the Triangle Marker Shape for Pin-1 outline |
construct-pkg-outline | Construct the projected shape of the package body on the board. |
compute-corner | Compute the Corner Anchor Position. |
construct-overall-outline | Construct the projected shape of the Package Body and Soldermask Pad Openings |
build-smd-pin-1-dot | Create a Pin 1 indicator as a round dot next to the pad |
create-corner-marker-shape | Create a shape for the triangle corner marker |
corner-to-rotation | Compute the rotation of the shape pattern for a particular anchor |
default-silk-width | |
compute-closest-corner | Compute the closest corner of the passed Box to the Pin1 position. |
Definitions¶
SilkscreenOutline¶
Base Type for Silkscreen Outline Generators
public deftype SilkscreenOutline
The user should derive from this type and implement its interface to construct the silkscreen outline for a component.
Multis¶
build-shape¶
public defmulti build-shape (s:SilkscreenOutline, vp:VirtualLP -- side:Side = ?) -> Shape
- Returns
Shape
build-outline¶
Build Component Outline Silkscreen Content in VirtualLP
public defmulti build-outline (s:SilkscreenOutline, vp:VirtualLP -- side:Side = ?)
s: SilkscreenOutline
- Silkscreen Outline Objectvp: VirtualLP
- Virtual LandPattern Scene Graph. User can introspect the scene graph through this object then construct the appropriate new geometry.
This is the interface for the silkscreen outline generator
function that will construct the silkscreen geometry in
the VirtualLP
scene graph.
Methods¶
build-outline¶
Default Implementation for Build Component Outline
defmethod build-outline (s:SilkscreenOutline, vp:VirtualLP -- side:Side = ?)
This method uses the build-shape
method to contruct the
silkscreen content and then applies it to the VirtaulLP scene graph.
OverallOutline¶
public defstruct OverallOutline <: SilkscreenOutline
density-level: DensityLevel
line-width: Double
mask-clearance: Double
pkg-body: PackageBody
-
density-level: DensityLevel
- Density Level Specification This determines whether we use:- Maximum Material Condition
- Nominal Material Condition
- Least Material Condition
of the package body to construct the outline.
-
line-width: Double
- Line Width for the constructed silkscreen outline By default we use theMinSilkscreenWidth
from the design rules. -
mask-clearance: Double
- Clearance from silkscreen to the soldermask By default we use theMinSilkSolderMaskSpace
from the design rules. -
pkg-body: PackageBody
- Package Body Dimensions These dimensions will be projected on to the board to construct the outline.
Constructors¶
OverallOutline¶
Constructor for defstruct OverallOutline
public defn OverallOutline (pkg-body:PackageBody, line-width:Double, mask-clearance:Double = ?, density-level:DensityLevel = ?)
OverallOutline¶
Constructor for defstruct OverallOutline
public defn OverallOutline ( -- pkg-body:PackageBody, line-width:Double = ?, mask-clearance:Double = ?, density-level:DensityLevel = ?)
SingleLineOutline¶
public defstruct SingleLineOutline <: SilkscreenOutline
density-level: DensityLevel
edge: SilkscreenEdge
line-width: Double
mask-clearance: Double
pkg-body: PackageBody
-
density-level: DensityLevel
- Density Level Specification This determines whether we use:- Maximum Material Condition
- Nominal Material Condition
- Least Material Condition
of the package body to construct the outline.
-
edge: SilkscreenEdge
-
line-width: Double
- Line Width for the constructed silkscreen outline By default we use theMinSilkscreenWidth
from the design rules. -
mask-clearance: Double
- Clearance from silkscreen to the soldermask By default we use theMinSilkSolderMaskSpace
from the design rules. -
pkg-body: PackageBody
- Package Body Dimensions These dimensions will be projected on to the board to construct the outline.
Constructors¶
SingleLineOutline¶
Constructor for defstruct SingleLineOutline
public defn SingleLineOutline (pkg-body:PackageBody, edge:SilkscreenEdge, line-width:Double = ?, mask-clearance:Double = ?, density-level:DensityLevel = ?)
SingleLineOutline¶
Constructor for defstruct SingleLineOutline
public defn SingleLineOutline ( -- pkg-body:PackageBody, edge:SilkscreenEdge = ?, line-width:Double = ?, mask-clearance:Double = ?, density-level:DensityLevel = ?)
InterstitialOutline¶
Create an interstitial silkscreen outline.
public defstruct InterstitialOutline <: SilkscreenOutline
density-level: DensityLevel
line-width: Double
mask-clearance: Double
pkg-body: PackageBody
-
density-level: DensityLevel
- Density Level Specification This determines whether we use:- Maximum Material Condition
- Nominal Material Condition
- Least Material Condition
of the package body to construct the outline.
-
line-width: Double
- Line Width for the constructed silkscreen outline By default we use theMinSilkscreenWidth
from the design rules. -
mask-clearance: Double
- Clearance from silkscreen to the soldermask By default we use theMinSilkSolderMaskSpace
from the design rules. -
pkg-body: PackageBody
- Package Body Dimensions These dimensions will be projected on to the board to construct the outline.
The interstitial outline is formed between the pads, typically underneath the component package body. It may or may not be seen after the component has been installed.
This is most useful for packages like QFP, SOIC, SSOP, and similar packages. It also works for 2-pin SMT and through-hole components.
Constructors¶
InterstitialOutline¶
Constructor for defstruct InterstitialOutline
public defn InterstitialOutline (pkg-body:PackageBody, line-width:Double, mask-clearance:Double = ?, density-level:DensityLevel = ?)
InterstitialOutline¶
Constructor for defstruct InterstitialOutline
public defn InterstitialOutline ( -- pkg-body:PackageBody, line-width:Double = ?, mask-clearance:Double = ?, density-level:DensityLevel = ?)
InteriorEdgesOutline¶
public defstruct InteriorEdgesOutline <: SilkscreenOutline
density-level: DensityLevel
edge: SilkscreenEdge
line-width: Double
mask-clearance: Double
pkg-body: PackageBody
-
density-level: DensityLevel
- Density Level Specification This determines whether we use:- Maximum Material Condition
- Nominal Material Condition
- Least Material Condition
of the package body to construct the outline.
-
edge: SilkscreenEdge
-
line-width: Double
- Line Width for the constructed silkscreen outline By default we use theMinSilkscreenWidth
from the design rules. -
mask-clearance: Double
- Clearance from silkscreen to the soldermask By default we use theMinSilkSolderMaskSpace
from the design rules. -
pkg-body: PackageBody
- Package Body Dimensions These dimensions will be projected on to the board to construct the outline.
Constructors¶
InteriorEdgesOutline¶
Constructor for defstruct InteriorEdgesOutline
public defn InteriorEdgesOutline (pkg-body:PackageBody, edge:SilkscreenEdge, line-width:Double = ?, mask-clearance:Double = ?, density-level:DensityLevel = ?)
InteriorEdgesOutline¶
Constructor for defstruct InteriorEdgesOutline
public defn InteriorEdgesOutline ( -- pkg-body:PackageBody, edge:SilkscreenEdge = ?, line-width:Double = ?, mask-clearance:Double = ?, density-level:DensityLevel = ?)
Functions¶
has-enough-interior-space?¶
public defn has-enough-interior-space? (s:InteriorEdgesOutline, vp:VirtualLP -- side:Side = ?) -> True|False
- Returns
True|False
EdgesOutline¶
public defstruct EdgesOutline <: SilkscreenOutline
density-level: DensityLevel
edge: SilkscreenEdge
line-width: Double
mask-clearance: Double
pkg-body: PackageBody
-
density-level: DensityLevel
- Density Level Specification This determines whether we use:- Maximum Material Condition
- Nominal Material Condition
- Least Material Condition
of the package body to construct the outline.
-
edge: SilkscreenEdge
-
line-width: Double
- Line Width for the constructed silkscreen outline By default we use theMinSilkscreenWidth
from the design rules. -
mask-clearance: Double
- Clearance from silkscreen to the soldermask By default we use theMinSilkSolderMaskSpace
from the design rules. -
pkg-body: PackageBody
- Package Body Dimensions These dimensions will be projected on to the board to construct the outline.
Constructors¶
EdgesOutline¶
Constructor for defstruct EdgesOutline
public defn EdgesOutline (pkg-body:PackageBody, edge:SilkscreenEdge, line-width:Double = ?, mask-clearance:Double = ?, density-level:DensityLevel = ?)
EdgesOutline¶
Constructor for defstruct EdgesOutline
public defn EdgesOutline ( -- pkg-body:PackageBody, edge:SilkscreenEdge = ?, line-width:Double = ?, mask-clearance:Double = ?, density-level:DensityLevel = ?)
PackageOutline¶
Silkscreen Outline Generator that follows the Package Body
public defstruct PackageOutline <: SilkscreenOutline
density-level: DensityLevel
line-width: Double
mask-clearance: Double
pkg-body: PackageBody
-
density-level: DensityLevel
- Density Level Specification This determines whether we use:- Maximum Material Condition
- Nominal Material Condition
- Least Material Condition
of the package body to construct the outline.
-
line-width: Double
- Line Width for the constructed silkscreen outline By default we use theMinSilkscreenWidth
from the design rules. -
mask-clearance: Double
- Clearance from silkscreen to the soldermask By default we use theMinSilkSolderMaskSpace
from the design rules. -
pkg-body: PackageBody
- Package Body Dimensions These dimensions will be projected on to the board to construct the outline.
Constructors¶
PackageOutline¶
Constructor for defstruct PackageOutline
public defn PackageOutline (pkg-body:PackageBody, line-width:Double, mask-clearance:Double = ?, density-level:DensityLevel = ?)
PackageOutline¶
Constructor for defstruct PackageOutline
public defn PackageOutline ( -- pkg-body:PackageBody, line-width:Double = ?, mask-clearance:Double = ?, density-level:DensityLevel = ?)
SilkscreenEdge¶
Selector for whether the edge lines are
public defenum SilkscreenEdge <: Equalable & Hashable
drawn on the Top / Bottom sides (N/S) or the Left/Right sides (E/W)
Functions¶
create-silkscreen-pkg-extrema-outline¶
Construct and instantiate the package extrema lines in the scene graph
public defn create-silkscreen-pkg-extrema-outline (vp:VirtualLP, pkg-body:PackageBody -- edge:SilkscreenEdge = ?, density-level:DensityLevel = ?, line-width:Double = ?, mask-clearance:Double = ?, side:Side = ?) -> Shape
vp: VirtualLP
- Virtual Land Pattern Scene Graph nodepkg-body: PackageBody
- Package dimensional body for sizing the lines.edge: SilkscreenEdge
- N/S or E/W side of the component to creates lines for.density-level: DensityLevel
- Package density level. Default isDENSITY-LEVEL
from design settings.line-width: Double
- Line width in mm. Default is silkscreen width from the design'spcb-rules
.mask-clearance: Double
- Clearance distance between soldermask and silkscreen Default is the clearance rule from the design'spcb-rules
.side: Side
- Top or Bottom side of the board where silkscreen will be drawn. We use this to determine which pads to include in the outline calculation.- Returns
Shape
Legacy - To be replaced by EdgesOutline
construct-pkg-extrema-lines¶
Construct the shapes for the package extrema lines
public defn construct-pkg-extrema-lines (vp:VirtualLP, pkg-body:PackageBody -- density-level:DensityLevel = ?, line-width:Double = ?, mask-clearance:Double = ?, side:Side = ?, edge:SilkscreenEdge = ?) -> Shape
vp: VirtualLP
- Virtual Land Pattern Scene Graph nodepkg-body: PackageBody
- Package dimensional body for sizing the lines.density-level: DensityLevel
- Package density level. Default isDENSITY-LEVEL
from design settings.line-width: Double
- Line width in mm. Default is silkscreen width from the design'spcb-rules
.mask-clearance: Double
- Clearance distance between soldermask and silkscreen Default is the clearance rule from the design'spcb-rules
.side: Side
- Top or Bottom side of the board where silkscreen will be drawn. We use this to determine which pads to include in the outline calculation.edge: SilkscreenEdge
- N/S or E/W side of the component to creates lines for.- Returns
Shape
get-extended-pkg-outline¶
Determine the dimensions of the package body with Y extension
public defn get-extended-pkg-outline (vp:VirtualLP, pkg-body:PackageBody, density-level:DensityLevel, line-width:Double, mask-clearance:Double, side:Side, edge:SilkscreenEdge = ?) -> Box
vp: VirtualLP
- Virtual Land Pattern Scene Graphpkg-body: PackageBody
- Package Body for the ICdensity-level: DensityLevel
- Density Level for the Packageline-width: Double
- Silkscreen min line width as defined by pcb-rules.mask-clearance: Double
- Minimum soldermask clearance to silkscreen as defined by the pcb-rules.side: Side
- Which side of the board this outline will be created on. It filters for which pads of the landpattern to inspect.- Returns
Box
This function is used to create the minimal package body outline that we will use to create the horizontal lines at the extremes on the package body.
This function attempts to make a conservative size box by accounting for both the package body length and the location of the soldermask opening of the pads.
This function is typically only useful for dual-row packages like SOP, SON, SOT, etc.
General Definitions¶
build-outline-pin-1-triangle¶
Create a triangle shaped marker in the outline on the silkscreen
public defn build-outline-pin-1-triangle (vp:VirtualLP -- pin-1-id:Int|Ref = ?)
vp: VirtualLP
- Land Pattern scene graph node we will search for the outlinepin-1-id: Int|Ref
- This argument accepts either anInt
or aRef
for identifying the "Pin 1" of the component. If this is anInt
it will map to the conventionalp[N]
ref syntax used for land patterns. The default value is1
.- Throws
ValueError
- If we find more than oneoutline
in the silkscreen, or if we fail to find thepin-1-id
pad.
This function looks for the outline shape in the virtual artwork
of this VirtualLP node and then attempts to find the corner
of that outline closest to the pin-1-id
pad of the land pattern.
It then construct a triangle shaped marker and places it in that corner for a heavy indication of the pin 1 location. This corner marker will be placed in the silkscreen layer on the same side of the board as the outline is found.
create-silkscreen-outline¶
Construct a silkscreen outline of a component based on the Package Body
public defn create-silkscreen-outline (vp:VirtualLP, pkg-body:PackageBody -- density-level:DensityLevel = ?, line-width:Double = ?, mask-clearance:Double = ?, side:Side = ?) -> False
vp: VirtualLP
- Virtual LP scene graph node - outline will be created here.pkg-body: PackageBody
- 3D body model for the componentdensity-level: DensityLevel
- Indicates whether we will use MMC, NMC, or LMCline-width: Double
- width of the line to draw.mask-clearance: Double
- clearance between soldermask openings and the outline.side: Side
- Side of the board. Default isTop
.- Returns
False
To be replaced by the PackageOutline type
create-silkscreen-overall-outline¶
Construct a silkscreen outline based on the Package Body and Soldermask Pad Openings
public defn create-silkscreen-overall-outline (vp:VirtualLP, pkg-body:PackageBody -- density-level:DensityLevel = ?, line-width:Double = ?, mask-clearance:Double = ?, side:Side = ?) -> False
vp: VirtualLP
- Virtual LP scene graph node - outline will be created here.pkg-body: PackageBody
- 3D body model for the componentdensity-level: DensityLevel
- Indicates whether we will use MMC, NMC, or LMCline-width: Double
- width of the line to draw.mask-clearance: Double
- clearance between soldermask openings and the outline.- Returns
False
Legacy - To be replaced with OverallOutline
The user must create all of the pads associated with this landpattern before invoking this function.
default-mask-clearance¶
public defn default-mask-clearance () -> Double
- Returns
Double
add-pin-1-dot¶
Construct the Pin-1 Dot Marker at a particular location.
public defn add-pin-1-dot (vp:VirtualLP, pos:Point -- line-width:Double = ?, side:Side = ?)
vp: VirtualLP
- Virtual Landpattern scene graph node.pos: Point
- Location in the current scene graph node where this dot will be drawn.line-width: Double
- silkscreen line width defines the radius of the circle.side: Side
- Top or Bottom side silkscreen.
This function draws a Circle
shaped dot at the provided
location. This function is used to provide a visual pin 1
indicator in the silkscreen.
compute-triangle-marker¶
Compute the Triangle Marker Shape for Pin-1 outline
public defn compute-triangle-marker (pin-1-pos:Point, outline-box:Box, line-width:Double, max-height:Double = ?) -> Shape
pin-1-pos: Point
- Position of the pin 1 padoutline-box: Box
- Silkscreen outline as a 2D box.line-width: Double
- Silkscreen line width - primarily used for positioning and not for drawing lines.max-height: Double
- Max triangle marker height. This function attempts to compute a reasonable marker size based on the component's scale. This is a limiter to prevent unnecessarily large triangle marker features.- Returns
Shape
construct-pkg-outline¶
Construct the projected shape of the package body on the board.
public defn construct-pkg-outline (vp:VirtualLP, pkg-body:PackageBody -- density-level:DensityLevel = ?, line-width:Double = ?, mask-clearance:Double = ?) -> Shape
vp: VirtualLP
- Virtual LP scene graph node - outline will be created here.pkg-body: PackageBody
- 3D body model for the componentdensity-level: DensityLevel
- Indicates whether we will use MMC, NMC, or LMCline-width: Double
- width of the line to draw.mask-clearance: Double
- clearance between soldermask openings and the outline.- Returns
Shape
Legacy - Use PackageOutline
compute-corner¶
Compute the Corner Anchor Position.
public defn compute-corner (closest:Point) -> Anchor
closest: Point
- Closest point on the outline- Returns
Anchor
Given a point on the outline box that is closest
to pin 1 - compute the anchor position. For example,
if pin 1 is in the top left and the closest corner is
in the top-left, this would be the NW
anchor position.
construct-overall-outline¶
Construct the projected shape of the Package Body and Soldermask Pad Openings
public defn construct-overall-outline (vp:VirtualLP, pkg-body:PackageBody -- density-level:DensityLevel = ?, line-width:Double = ?, mask-clearance:Double = ?, side:Side = ?) -> Shape
vp: VirtualLP
- Virtual LP scene graph node - outline will be created here.pkg-body: PackageBody
- 3D body model for the componentdensity-level: DensityLevel
- Indicates whether we will use MMC, NMC, or LMCline-width: Double
- width of the line to draw.mask-clearance: Double
- clearance between soldermask openings and the outline.- Returns
Shape
-LineRectangle
Shape for the union of the package body and the pad openings.
Legacy - Use OverallOutline
The user must create all of the pads associated with this landpattern before invoking this function.
This function takes the union of the pads and the package body outline and constructs and overall outline encompassing this shape.
build-smd-pin-1-dot¶
Create a Pin 1 indicator as a round dot next to the pad
public defn build-smd-pin-1-dot (vp:VirtualLP -- pin-1-id:Int|Ref = ?, dir:Dir = ?, margin:Double = ?, line-width:Double = ?, mask-clearance:Double = ?, side:Side = ?)
vp: VirtualLP
- Virtual Landpattern that will store artwork and be inspected for pads that matchpin-1-id
. Note that the pads must already have been added to the land pattern for this function to work.pin-1-id: Int|Ref
- Indicates which pad by Int or Ref will be used as the "Pin 1" of the land pattern.dir: Dir
- Direction where to place the dot with respect to the pin 1 pad. Default value isUp
(+Y)line-width: Double
- Used for the radius of the created Circle. By default this is the minimum silk width from the design rules.mask-clearance: Double
- Mask clearance rule used to place the dot sufficiently far away the Pin 1 Pad. Default is the minimum silk to soldermask clearance pulled from the design rules.side: Side
- Indicates whether the marker will be drawn on the top or bottom side of the board. Default isTop
.
By default This creates a small circle in the silkscreen directly
above (+Y) the "pin 1" pad of a land pattern. You can use the
dir
option to place the marker in a different cardinal
direction.
This function assumes that the space directly above the pin 1 pad is available to place this circle.
create-corner-marker-shape¶
Create a shape for the triangle corner marker
public defn create-corner-marker-shape (line-width:Double, marker-height:Double) -> Shape
- Returns
Shape
This is often used in a rectangular outlines for marking the the pin-1 indication in one of the corners of the outline.
This function creates a shape that is a solid, isosceles right triangle (polygon) in the lower right quadrant of the XY plane. It is then offset from the X and Y axis (toward the lower right quandrant) by half the line-width
corner-to-rotation¶
Compute the rotation of the shape pattern for a particular anchor
public defn corner-to-rotation (corner:Anchor) -> Double
- Returns
Double
We typically position the triangle marker or pin 1 dot marker by transforming its base configuration. This means translating and rotating it to fit in one of the outline corners.
This method takes the corner anchor position and converts it to rotation angle for a shape pattern.
default-silk-width¶
public defn default-silk-width () -> Double
- Returns
Double
compute-closest-corner¶
Compute the closest corner of the passed Box to the Pin1 position.
public defn compute-closest-corner (pin-1-pos:Point, outline-box:Box)
pin-1-pos: Point
- Position of the Pin 1 pad.outline-box: Box
- Box that represents the silkscreen outline of the component.
This tool is used to determine what to place pin 1 markers in a component's silkscreen.
Related Packages¶
Forwarded by packages: jsl/landpatterns/framework, jsl/landpatterns