parent
beee95ce31
commit
788b7d6b83
|
|
@ -28,7 +28,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
- XYRS support (you can generate position files using it)
|
||||
- CSV `hide_header` option
|
||||
- Generic filter: options to match if a field is/isn't defined.
|
||||
- Excellon drill: added `route_mode_for_oval_holes` option.
|
||||
- Drill:
|
||||
- Excellon: added `route_mode_for_oval_holes` option.
|
||||
- Support for blind/buried vias. (#166)
|
||||
- Default global `dir` option.
|
||||
- Default global `units` option.
|
||||
- Global option to specify `out_dir` (like -d command line option)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2020-2021 Salvador E. Tropea
|
||||
# Copyright (c) 2020-2021 Instituto Nacional de Tecnología Industrial
|
||||
# Copyright (c) 2020-2022 Salvador E. Tropea
|
||||
# Copyright (c) 2020-2022 Instituto Nacional de Tecnología Industrial
|
||||
# License: GPL-3.0
|
||||
# Project: KiBot (formerly KiPlot)
|
||||
import pcbnew
|
||||
|
|
@ -40,6 +40,8 @@ class Layer(Optionable):
|
|||
'F.Fab': pcbnew.F_Fab,
|
||||
'B.Fab': pcbnew.B_Fab,
|
||||
}
|
||||
# ID to default name table
|
||||
ID_2_DEFAULT_NAME = None
|
||||
# Default names
|
||||
DEFAULT_LAYER_DESC = {
|
||||
'F.Cu': 'Front copper',
|
||||
|
|
@ -270,8 +272,15 @@ class Layer(Optionable):
|
|||
return "{} ({} '{}' {})".format(self.layer, self._id, self.description, self.suffix)
|
||||
return "{} ('{}' {})".format(self.layer, self.description, self.suffix)
|
||||
|
||||
@staticmethod
|
||||
def id2def_name(id):
|
||||
if GS.ki5():
|
||||
return Layer.ID_2_DEFAULT_NAME[id]
|
||||
return pcbnew.LayerName(id)
|
||||
|
||||
|
||||
for i in range(1, 30):
|
||||
name = 'In'+str(i)+'.Cu'
|
||||
Layer.DEFAULT_LAYER_NAMES[name] = pcbnew.In1_Cu+i-1
|
||||
Layer.DEFAULT_LAYER_DESC[name] = 'Inner layer '+str(i)
|
||||
Layer.ID_2_DEFAULT_NAME = {v: k for k, v in Layer.DEFAULT_LAYER_NAMES.items()}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2020-2021 Salvador E. Tropea
|
||||
# Copyright (c) 2020-2021 Instituto Nacional de Tecnología Industrial
|
||||
# Copyright (c) 2020-2022 Salvador E. Tropea
|
||||
# Copyright (c) 2020-2022 Instituto Nacional de Tecnología Industrial
|
||||
# License: GPL-3.0
|
||||
# Project: KiBot (formerly KiPlot)
|
||||
import os
|
||||
import re
|
||||
from pcbnew import (PLOT_FORMAT_HPGL, PLOT_FORMAT_POST, PLOT_FORMAT_GERBER, PLOT_FORMAT_DXF, PLOT_FORMAT_SVG,
|
||||
PLOT_FORMAT_PDF, wxPoint)
|
||||
from .optionable import (Optionable, BaseOptions)
|
||||
from .gs import GS
|
||||
from .layer import Layer
|
||||
from .macros import macros, document # noqa: F401
|
||||
from . import log
|
||||
|
||||
|
|
@ -96,12 +98,43 @@ class AnyDrill(BaseOptions):
|
|||
# PTH
|
||||
return self.pth_id if self.pth_id is not None else d+'_drill'
|
||||
|
||||
@staticmethod
|
||||
def _get_layer_name(id):
|
||||
""" Converts a layer ID into the magical name used by KiCad.
|
||||
This is somehow portable because we don't directly rely on the ID. """
|
||||
name = Layer.id2def_name(id)
|
||||
if name == 'F.Cu':
|
||||
return 'front'
|
||||
if name == 'B.Cu':
|
||||
return 'back'
|
||||
m = re.match(r'In(\d+)\.Cu', name)
|
||||
if not m:
|
||||
return None
|
||||
return 'in'+m.group(1)
|
||||
|
||||
@staticmethod
|
||||
def _get_drill_groups(unified):
|
||||
""" Get the ID for all the generated files.
|
||||
It includes buried/blind vias. """
|
||||
groups = [''] if unified else ['PTH', 'NPTH']
|
||||
via_type = 'VIA' if GS.ki5() else 'PCB_VIA'
|
||||
pairs = set()
|
||||
for t in GS.board.GetTracks():
|
||||
tclass = t.GetClass()
|
||||
if tclass == via_type:
|
||||
via = t.Cast()
|
||||
l1 = AnyDrill._get_layer_name(via.TopLayer())
|
||||
l2 = AnyDrill._get_layer_name(via.BottomLayer())
|
||||
pairs.add(l1+'-'+l2)
|
||||
groups.extend(list(pairs))
|
||||
return groups
|
||||
|
||||
def get_file_names(self, output_dir):
|
||||
""" Returns a dict containing KiCad names and its replacement.
|
||||
If no replacement is needed the replacement is empty """
|
||||
filenames = {}
|
||||
self._configure_writer(GS.board, wxPoint(0, 0))
|
||||
files = [''] if self._unified_output else ['PTH', 'NPTH']
|
||||
files = AnyDrill._get_drill_groups(self._unified_output)
|
||||
for d in files:
|
||||
kicad_id = '-'+d if d else d
|
||||
kibot_id = self.solve_id(d)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,235 @@
|
|||
(kicad_pcb (version 20171130) (host pcbnew 5.1.9+dfsg1-1~bpo10+1)
|
||||
|
||||
(general
|
||||
(thickness 1.6)
|
||||
(drawings 4)
|
||||
(tracks 4)
|
||||
(zones 0)
|
||||
(modules 4)
|
||||
(nets 1)
|
||||
)
|
||||
|
||||
(page A4)
|
||||
(layers
|
||||
(0 F.Cu signal)
|
||||
(1 El1 signal)
|
||||
(2 In2.Cu signal)
|
||||
(31 B.Cu signal)
|
||||
(32 B.Adhes user)
|
||||
(33 F.Adhes user)
|
||||
(34 B.Paste user)
|
||||
(35 F.Paste user)
|
||||
(36 B.SilkS user)
|
||||
(37 F.SilkS user)
|
||||
(38 B.Mask user)
|
||||
(39 F.Mask user)
|
||||
(40 Dwgs.User user)
|
||||
(41 Cmts.User user)
|
||||
(42 Eco1.User user)
|
||||
(43 Eco2.User user)
|
||||
(44 Edge.Cuts user)
|
||||
(45 Margin user)
|
||||
(46 B.CrtYd user)
|
||||
(47 F.CrtYd user)
|
||||
(48 B.Fab user)
|
||||
(49 F.Fab user)
|
||||
)
|
||||
|
||||
(setup
|
||||
(last_trace_width 0.25)
|
||||
(trace_clearance 0.2)
|
||||
(zone_clearance 0.508)
|
||||
(zone_45_only no)
|
||||
(trace_min 0.2)
|
||||
(via_size 0.8)
|
||||
(via_drill 0.4)
|
||||
(via_min_size 0.4)
|
||||
(via_min_drill 0.3)
|
||||
(uvia_size 0.3)
|
||||
(uvia_drill 0.1)
|
||||
(uvias_allowed no)
|
||||
(uvia_min_size 0.2)
|
||||
(uvia_min_drill 0.1)
|
||||
(edge_width 0.05)
|
||||
(segment_width 0.2)
|
||||
(pcb_text_width 0.3)
|
||||
(pcb_text_size 1.5 1.5)
|
||||
(mod_edge_width 0.12)
|
||||
(mod_text_size 1 1)
|
||||
(mod_text_width 0.15)
|
||||
(pad_size 1.524 1.524)
|
||||
(pad_drill 0.762)
|
||||
(pad_to_mask_clearance 0.051)
|
||||
(solder_mask_min_width 0.25)
|
||||
(aux_axis_origin 0 0)
|
||||
(visible_elements FFFFFF7F)
|
||||
(pcbplotparams
|
||||
(layerselection 0x010fc_ffffffff)
|
||||
(usegerberextensions false)
|
||||
(usegerberattributes false)
|
||||
(usegerberadvancedattributes false)
|
||||
(creategerberjobfile false)
|
||||
(excludeedgelayer true)
|
||||
(linewidth 0.100000)
|
||||
(plotframeref false)
|
||||
(viasonmask false)
|
||||
(mode 1)
|
||||
(useauxorigin false)
|
||||
(hpglpennumber 1)
|
||||
(hpglpenspeed 20)
|
||||
(hpglpendiameter 15.000000)
|
||||
(psnegative false)
|
||||
(psa4output false)
|
||||
(plotreference true)
|
||||
(plotvalue true)
|
||||
(plotinvisibletext false)
|
||||
(padsonsilk false)
|
||||
(subtractmaskfromsilk false)
|
||||
(outputformat 1)
|
||||
(mirror false)
|
||||
(drillshape 1)
|
||||
(scaleselection 1)
|
||||
(outputdirectory ""))
|
||||
)
|
||||
|
||||
(net 0 "")
|
||||
|
||||
(net_class Default "Esta es la clase de red por defecto."
|
||||
(clearance 0.2)
|
||||
(trace_width 0.25)
|
||||
(via_dia 0.8)
|
||||
(via_drill 0.4)
|
||||
(uvia_dia 0.3)
|
||||
(uvia_drill 0.1)
|
||||
)
|
||||
|
||||
(module MountingHole:MountingHole_2.1mm (layer F.Cu) (tedit 5B924765) (tstamp 5EBE1AA4)
|
||||
(at 120 29)
|
||||
(descr "Mounting Hole 2.1mm, no annular")
|
||||
(tags "mounting hole 2.1mm no annular")
|
||||
(attr virtual)
|
||||
(fp_text reference REF** (at 0 -3.2) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value MountingHole_2.1mm (at 0 3.2) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_circle (center 0 0) (end 2.1 0) (layer Cmts.User) (width 0.15))
|
||||
(fp_circle (center 0 0) (end 2.35 0) (layer F.CrtYd) (width 0.05))
|
||||
(fp_text user %R (at 0.3 0) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(pad "" np_thru_hole circle (at 0 0) (size 2.1 2.1) (drill 2.1) (layers *.Cu *.Mask))
|
||||
)
|
||||
|
||||
(module Resistor_THT:R_Box_L13.0mm_W4.0mm_P9.00mm (layer F.Cu) (tedit 5AE5139B) (tstamp 5EA76EC0)
|
||||
(at 110 45)
|
||||
(descr "Resistor, Box series, Radial, pin pitch=9.00mm, 2W, length*width=13.0*4.0mm^2, http://www.produktinfo.conrad.com/datenblaetter/425000-449999/443860-da-01-de-METALLBAND_WIDERSTAND_0_1_OHM_5W_5Pr.pdf")
|
||||
(tags "Resistor Box series Radial pin pitch 9.00mm 2W length 13.0mm width 4.0mm")
|
||||
(fp_text reference R3 (at 4.5 -3.25) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value R_Box_L13.0mm_W4.0mm_P9.00mm (at 4.5 3.25) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -2 -2) (end -2 2) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -2 2) (end 11 2) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 11 2) (end 11 -2) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 11 -2) (end -2 -2) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -2.12 -2.12) (end 11.12 -2.12) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -2.12 2.12) (end 11.12 2.12) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -2.12 -2.12) (end -2.12 2.12) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start 11.12 -2.12) (end 11.12 2.12) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -2.25 -2.25) (end -2.25 2.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -2.25 2.25) (end 11.25 2.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 11.25 2.25) (end 11.25 -2.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 11.25 -2.25) (end -2.25 -2.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_text user 300 (at 4.5 0) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(pad 2 thru_hole circle (at 9 0) (size 2 2) (drill 1) (layers *.Cu *.Mask))
|
||||
(pad 1 thru_hole circle (at 0 0) (size 2 2) (drill 1) (layers *.Cu *.Mask))
|
||||
(model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Box_L13.0mm_W4.0mm_P9.00mm.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(module Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5EA76DE9)
|
||||
(at 110 35 270)
|
||||
(descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
|
||||
(tags "resistor handsolder")
|
||||
(attr smd)
|
||||
(fp_text reference R2 (at 0 1.65 270) (layer B.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
|
||||
)
|
||||
(fp_text value R_0805_2012Metric_Pad1.15x1.40mm_HandSolder (at 0 -1.65 270) (layer B.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
|
||||
)
|
||||
(fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
|
||||
(fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
|
||||
(fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
|
||||
(fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
|
||||
(fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
|
||||
(fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
|
||||
(fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
|
||||
(fp_text user 150 (at 0 0 270) (layer B.Fab)
|
||||
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
|
||||
)
|
||||
(pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391))
|
||||
(pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391))
|
||||
(model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(module Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer F.Cu) (tedit 5B36C52B) (tstamp 5EA76D80)
|
||||
(at 105 35 90)
|
||||
(descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
|
||||
(tags "resistor handsolder")
|
||||
(attr smd)
|
||||
(fp_text reference R1 (at 0 -1.65 90) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value R_0805_2012Metric_Pad1.15x1.40mm_HandSolder (at 0 1.65 90) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
|
||||
(fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
|
||||
(fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
|
||||
(fp_text user 100 (at 0 0 90) (layer F.Fab)
|
||||
(effects (font (size 0.5 0.5) (thickness 0.08)))
|
||||
)
|
||||
(pad 2 smd roundrect (at 1.025 0 90) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
|
||||
(pad 1 smd roundrect (at -1.025 0 90) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391))
|
||||
(model ${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(gr_line (start 100 25) (end 100 50) (layer Edge.Cuts) (width 0.05) (tstamp 5EA7192F))
|
||||
(gr_line (start 100 50) (end 125 50) (layer Edge.Cuts) (width 0.05))
|
||||
(gr_line (start 125 25) (end 125 50) (layer Edge.Cuts) (width 0.05) (tstamp 5EA76EFC))
|
||||
(gr_line (start 100 25) (end 125 25) (layer Edge.Cuts) (width 0.05) (tstamp 5EA76F1D))
|
||||
|
||||
(via blind (at 117.5 36.25) (size 0.8) (drill 0.4) (layers F.Cu In2.Cu) (net 0))
|
||||
(via blind (at 119.25 37.75) (size 0.8) (drill 0.4) (layers F.Cu In1.Cu) (net 0))
|
||||
(via blind (at 120.75 36.25) (size 0.8) (drill 0.4) (layers In1.Cu In2.Cu) (net 0))
|
||||
(via blind (at 119.25 34.5) (size 0.8) (drill 0.4) (layers In2.Cu B.Cu) (net 0))
|
||||
|
||||
)
|
||||
|
|
@ -0,0 +1,236 @@
|
|||
(kicad_pcb (version 20211014) (generator pcbnew)
|
||||
|
||||
(general
|
||||
(thickness 1.6)
|
||||
)
|
||||
|
||||
(paper "A4")
|
||||
(layers
|
||||
(0 "F.Cu" signal)
|
||||
(1 "In1.Cu" signal "El1")
|
||||
(2 "In2.Cu" signal)
|
||||
(31 "B.Cu" signal)
|
||||
(32 "B.Adhes" user "B.Adhesive")
|
||||
(33 "F.Adhes" user "F.Adhesive")
|
||||
(34 "B.Paste" user)
|
||||
(35 "F.Paste" user)
|
||||
(36 "B.SilkS" user "B.Silkscreen")
|
||||
(37 "F.SilkS" user "F.Silkscreen")
|
||||
(38 "B.Mask" user)
|
||||
(39 "F.Mask" user)
|
||||
(40 "Dwgs.User" user "User.Drawings")
|
||||
(41 "Cmts.User" user "User.Comments")
|
||||
(42 "Eco1.User" user "User.Eco1")
|
||||
(43 "Eco2.User" user "User.Eco2")
|
||||
(44 "Edge.Cuts" user)
|
||||
(45 "Margin" user)
|
||||
(46 "B.CrtYd" user "B.Courtyard")
|
||||
(47 "F.CrtYd" user "F.Courtyard")
|
||||
(48 "B.Fab" user)
|
||||
(49 "F.Fab" user)
|
||||
)
|
||||
|
||||
(setup
|
||||
(stackup
|
||||
(layer "F.SilkS" (type "Top Silk Screen"))
|
||||
(layer "F.Paste" (type "Top Solder Paste"))
|
||||
(layer "F.Mask" (type "Top Solder Mask") (thickness 0.01))
|
||||
(layer "F.Cu" (type "copper") (thickness 0.035))
|
||||
(layer "dielectric 1" (type "core") (thickness 0.48) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))
|
||||
(layer "In1.Cu" (type "copper") (thickness 0.035))
|
||||
(layer "dielectric 2" (type "prepreg") (thickness 0.48) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))
|
||||
(layer "In2.Cu" (type "copper") (thickness 0.035))
|
||||
(layer "dielectric 3" (type "core") (thickness 0.48) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02))
|
||||
(layer "B.Cu" (type "copper") (thickness 0.035))
|
||||
(layer "B.Mask" (type "Bottom Solder Mask") (thickness 0.01))
|
||||
(layer "B.Paste" (type "Bottom Solder Paste"))
|
||||
(layer "B.SilkS" (type "Bottom Silk Screen"))
|
||||
(copper_finish "None")
|
||||
(dielectric_constraints no)
|
||||
)
|
||||
(pad_to_mask_clearance 0.051)
|
||||
(solder_mask_min_width 0.25)
|
||||
(pcbplotparams
|
||||
(layerselection 0x00010fc_ffffffff)
|
||||
(disableapertmacros false)
|
||||
(usegerberextensions false)
|
||||
(usegerberattributes false)
|
||||
(usegerberadvancedattributes false)
|
||||
(creategerberjobfile false)
|
||||
(svguseinch false)
|
||||
(svgprecision 6)
|
||||
(excludeedgelayer true)
|
||||
(plotframeref false)
|
||||
(viasonmask false)
|
||||
(mode 1)
|
||||
(useauxorigin false)
|
||||
(hpglpennumber 1)
|
||||
(hpglpenspeed 20)
|
||||
(hpglpendiameter 15.000000)
|
||||
(dxfpolygonmode true)
|
||||
(dxfimperialunits true)
|
||||
(dxfusepcbnewfont true)
|
||||
(psnegative false)
|
||||
(psa4output false)
|
||||
(plotreference true)
|
||||
(plotvalue true)
|
||||
(plotinvisibletext false)
|
||||
(sketchpadsonfab false)
|
||||
(subtractmaskfromsilk false)
|
||||
(outputformat 1)
|
||||
(mirror false)
|
||||
(drillshape 1)
|
||||
(scaleselection 1)
|
||||
(outputdirectory "")
|
||||
)
|
||||
)
|
||||
|
||||
(net 0 "")
|
||||
|
||||
(footprint "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" (layer "F.Cu")
|
||||
(tedit 5B36C52B) (tstamp 00000000-0000-0000-0000-00005ea76d80)
|
||||
(at 105 35 90)
|
||||
(descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
|
||||
(tags "resistor handsolder")
|
||||
(attr smd)
|
||||
(fp_text reference "R1" (at 0 -1.65 90) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 0b21a65d-d20b-411e-920a-75c343ac5136)
|
||||
)
|
||||
(fp_text value "R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" (at 0 1.65 90) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 3cd1bda0-18db-417d-b581-a0c50623df68)
|
||||
)
|
||||
(fp_text user "100" (at 0 0 90) (layer "F.Fab")
|
||||
(effects (font (size 0.5 0.5) (thickness 0.08)))
|
||||
(tstamp 6c2e273e-743c-4f1e-a647-4171f8122550)
|
||||
)
|
||||
(fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer "F.SilkS") (width 0.12) (tstamp 4c8eb964-bdf4-44de-90e9-e2ab82dd5313))
|
||||
(fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer "F.SilkS") (width 0.12) (tstamp 94a873dc-af67-4ef9-8159-1f7c93eeb3d7))
|
||||
(fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 2d210a96-f81f-42a9-8bf4-1b43c11086f3))
|
||||
(fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp 9bb20359-0f8b-45bc-9d38-6626ed3a939d))
|
||||
(fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp aa14c3bd-4acc-4908-9d28-228585a22a9d))
|
||||
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer "F.CrtYd") (width 0.05) (tstamp e857610b-4434-4144-b04e-43c1ebdc5ceb))
|
||||
(fp_line (start -1 -0.6) (end 1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 03c52831-5dc5-43c5-a442-8d23643b46fb))
|
||||
(fp_line (start 1 0.6) (end -1 0.6) (layer "F.Fab") (width 0.1) (tstamp 29e78086-2175-405e-9ba3-c48766d2f50c))
|
||||
(fp_line (start 1 -0.6) (end 1 0.6) (layer "F.Fab") (width 0.1) (tstamp a1823eb2-fb0d-4ed8-8b96-04184ac3a9d5))
|
||||
(fp_line (start -1 0.6) (end -1 -0.6) (layer "F.Fab") (width 0.1) (tstamp d57dcfee-5058-4fc2-a68b-05f9a48f685b))
|
||||
(pad "1" smd roundrect locked (at -1.025 0 90) (size 1.15 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.217391) (tstamp 7dc880bc-e7eb-4cce-8d8c-0b65a9dd788e))
|
||||
(pad "2" smd roundrect locked (at 1.025 0 90) (size 1.15 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.217391) (tstamp 666713b0-70f4-42df-8761-f65bc212d03b))
|
||||
(model "${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(footprint "Resistor_THT:R_Box_L13.0mm_W4.0mm_P9.00mm" (layer "F.Cu")
|
||||
(tedit 5AE5139B) (tstamp 00000000-0000-0000-0000-00005ea76ec0)
|
||||
(at 110 45)
|
||||
(descr "Resistor, Box series, Radial, pin pitch=9.00mm, 2W, length*width=13.0*4.0mm^2, http://www.produktinfo.conrad.com/datenblaetter/425000-449999/443860-da-01-de-METALLBAND_WIDERSTAND_0_1_OHM_5W_5Pr.pdf")
|
||||
(tags "Resistor Box series Radial pin pitch 9.00mm 2W length 13.0mm width 4.0mm")
|
||||
(attr through_hole)
|
||||
(fp_text reference "R3" (at 4.5 -3.25) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 47baf4b1-0938-497d-88f9-671136aa8be7)
|
||||
)
|
||||
(fp_text value "R_Box_L13.0mm_W4.0mm_P9.00mm" (at 4.5 3.25) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 77ed3941-d133-4aef-a9af-5a39322d14eb)
|
||||
)
|
||||
(fp_text user "300" (at 4.5 0) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp 87371631-aa02-498a-998a-09bdb74784c1)
|
||||
)
|
||||
(fp_line (start 11.12 -2.12) (end 11.12 2.12) (layer "F.SilkS") (width 0.12) (tstamp 3b838d52-596d-4e4d-a6ac-e4c8e7621137))
|
||||
(fp_line (start -2.12 2.12) (end 11.12 2.12) (layer "F.SilkS") (width 0.12) (tstamp 66116376-6967-4178-9f23-a26cdeafc400))
|
||||
(fp_line (start -2.12 -2.12) (end -2.12 2.12) (layer "F.SilkS") (width 0.12) (tstamp 749dfe75-c0d6-4872-9330-29c5bbcb8ff8))
|
||||
(fp_line (start -2.12 -2.12) (end 11.12 -2.12) (layer "F.SilkS") (width 0.12) (tstamp eb667eea-300e-4ca7-8a6f-4b00de80cd45))
|
||||
(fp_line (start -2.25 2.25) (end 11.25 2.25) (layer "F.CrtYd") (width 0.05) (tstamp 1e1b062d-fad0-427c-a622-c5b8a80b5268))
|
||||
(fp_line (start 11.25 -2.25) (end -2.25 -2.25) (layer "F.CrtYd") (width 0.05) (tstamp 30f15357-ce1d-48b9-93dc-7d9b1b2aa048))
|
||||
(fp_line (start -2.25 -2.25) (end -2.25 2.25) (layer "F.CrtYd") (width 0.05) (tstamp cbdcaa78-3bbc-413f-91bf-2709119373ce))
|
||||
(fp_line (start 11.25 2.25) (end 11.25 -2.25) (layer "F.CrtYd") (width 0.05) (tstamp d8603679-3e7b-4337-8dbc-1827f5f54d8a))
|
||||
(fp_line (start 11 -2) (end -2 -2) (layer "F.Fab") (width 0.1) (tstamp 44d8279a-9cd1-4db6-856f-0363131605fc))
|
||||
(fp_line (start -2 2) (end 11 2) (layer "F.Fab") (width 0.1) (tstamp 4fb02e58-160a-4a39-9f22-d0c75e82ee72))
|
||||
(fp_line (start -2 -2) (end -2 2) (layer "F.Fab") (width 0.1) (tstamp e615f7aa-337e-474d-9615-2ad82b1c44ca))
|
||||
(fp_line (start 11 2) (end 11 -2) (layer "F.Fab") (width 0.1) (tstamp ef8fe2ac-6a7f-4682-9418-b801a1b10a3b))
|
||||
(pad "1" thru_hole circle locked (at 0 0) (size 2 2) (drill 1) (layers *.Cu *.Mask) (tstamp 5038e144-5119-49db-b6cf-f7c345f1cf03))
|
||||
(pad "2" thru_hole circle locked (at 9 0) (size 2 2) (drill 1) (layers *.Cu *.Mask) (tstamp 2e642b3e-a476-4c54-9a52-dcea955640cd))
|
||||
(model "${KISYS3DMOD}/Resistor_THT.3dshapes/R_Box_L13.0mm_W4.0mm_P9.00mm.wrl"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(footprint "MountingHole:MountingHole_2.1mm" (layer "F.Cu")
|
||||
(tedit 5B924765) (tstamp 00000000-0000-0000-0000-00005ebe1aa4)
|
||||
(at 120 29)
|
||||
(descr "Mounting Hole 2.1mm, no annular")
|
||||
(tags "mounting hole 2.1mm no annular")
|
||||
(attr exclude_from_pos_files exclude_from_bom)
|
||||
(fp_text reference "REF**" (at 0 -3.2) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp bb7f0588-d4d8-44bf-9ebf-3c533fe4d6ae)
|
||||
)
|
||||
(fp_text value "MountingHole_2.1mm" (at 0 3.2) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp f1830a1b-f0cc-47ae-a2c9-679c82032f14)
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0.3 0) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
(tstamp e10b5627-3247-4c86-b9f6-ef474ca11543)
|
||||
)
|
||||
(fp_circle (center 0 0) (end 2.1 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp 6a955fc7-39d9-4c75-9a69-676ca8c0b9b2))
|
||||
(fp_circle (center 0 0) (end 2.35 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp e8314017-7be6-4011-9179-37449a29b311))
|
||||
(pad "" np_thru_hole circle locked (at 0 0) (size 2.1 2.1) (drill 2.1) (layers *.Cu *.Mask) (tstamp 746ba970-8279-4e7b-aed3-f28687777c21))
|
||||
)
|
||||
|
||||
(footprint "Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" (layer "B.Cu")
|
||||
(tedit 5B36C52B) (tstamp 00000000-0000-0000-0000-00005ea76de9)
|
||||
(at 110 35 -90)
|
||||
(descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
|
||||
(tags "resistor handsolder")
|
||||
(attr smd)
|
||||
(fp_text reference "R2" (at 0 1.65 -90) (layer "B.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
|
||||
(tstamp efeac2a2-7682-4dc7-83ee-f6f1b23da506)
|
||||
)
|
||||
(fp_text value "R_0805_2012Metric_Pad1.15x1.40mm_HandSolder" (at 0 -1.65 -90) (layer "B.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
|
||||
(tstamp 5fc27c35-3e1c-4f96-817c-93b5570858a6)
|
||||
)
|
||||
(fp_text user "150" (at 0 0 -90) (layer "B.Fab")
|
||||
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
|
||||
(tstamp 0eaa98f0-9565-4637-ace3-42a5231b07f7)
|
||||
)
|
||||
(fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer "B.SilkS") (width 0.12) (tstamp 127679a9-3981-4934-815e-896a4e3ff56e))
|
||||
(fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer "B.SilkS") (width 0.12) (tstamp 48ab88d7-7084-4d02-b109-3ad55a30bb11))
|
||||
(fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer "B.CrtYd") (width 0.05) (tstamp 704d6d51-bb34-4cbf-83d8-841e208048d8))
|
||||
(fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer "B.CrtYd") (width 0.05) (tstamp 8174b4de-74b1-48db-ab8e-c8432251095b))
|
||||
(fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer "B.CrtYd") (width 0.05) (tstamp f71da641-16e6-4257-80c3-0b9d804fee4f))
|
||||
(fp_line (start -1.85 0.95) (end 1.85 0.95) (layer "B.CrtYd") (width 0.05) (tstamp fd470e95-4861-44fe-b1e4-6d8a7c66e144))
|
||||
(fp_line (start -1 0.6) (end 1 0.6) (layer "B.Fab") (width 0.1) (tstamp 6a45789b-3855-401f-8139-3c734f7f52f9))
|
||||
(fp_line (start -1 -0.6) (end -1 0.6) (layer "B.Fab") (width 0.1) (tstamp 6c9b793c-e74d-4754-a2c0-901e73b26f1c))
|
||||
(fp_line (start 1 -0.6) (end -1 -0.6) (layer "B.Fab") (width 0.1) (tstamp 716e31c5-485f-40b5-88e3-a75900da9811))
|
||||
(fp_line (start 1 0.6) (end 1 -0.6) (layer "B.Fab") (width 0.1) (tstamp b1086f75-01ba-4188-8d36-75a9e2828ca9))
|
||||
(pad "1" smd roundrect locked (at -1.025 0 270) (size 1.15 1.4) (layers "B.Cu" "B.Paste" "B.Mask") (roundrect_rratio 0.217391) (tstamp ce83728b-bebd-48c2-8734-b6a50d837931))
|
||||
(pad "2" smd roundrect locked (at 1.025 0 270) (size 1.15 1.4) (layers "B.Cu" "B.Paste" "B.Mask") (roundrect_rratio 0.217391) (tstamp 181abe7a-f941-42b6-bd46-aaa3131f90fb))
|
||||
(model "${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.wrl"
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(gr_line (start 100 25) (end 100 50) (layer "Edge.Cuts") (width 0.05) (tstamp 00000000-0000-0000-0000-00005ea7192f))
|
||||
(gr_line (start 125 25) (end 125 50) (layer "Edge.Cuts") (width 0.05) (tstamp 00000000-0000-0000-0000-00005ea76efc))
|
||||
(gr_line (start 100 25) (end 125 25) (layer "Edge.Cuts") (width 0.05) (tstamp 00000000-0000-0000-0000-00005ea76f1d))
|
||||
(gr_line (start 100 50) (end 125 50) (layer "Edge.Cuts") (width 0.05) (tstamp 1a1ab354-5f85-45f9-938c-9f6c4c8c3ea2))
|
||||
|
||||
(via blind (at 119.25 37.75) (size 0.8) (drill 0.4) (layers "F.Cu" "In1.Cu") (net 0) (tstamp 97fe9c60-586f-4895-8504-4d3729f5f81a))
|
||||
(via blind (at 117.5 36.25) (size 0.8) (drill 0.4) (layers "F.Cu" "In2.Cu") (net 0) (tstamp bdc7face-9f7c-4701-80bb-4cc144448db1))
|
||||
(via blind (at 120.75 36.25) (size 0.8) (drill 0.4) (layers "In1.Cu" "In2.Cu") (net 0) (tstamp 922058ca-d09a-45fd-8394-05f3e2c1e03a))
|
||||
(via blind (at 119.25 34.5) (size 0.8) (drill 0.4) (layers "In2.Cu" "B.Cu") (net 0) (tstamp 0f54db53-a272-4955-88fb-d7ab00657bb0))
|
||||
|
||||
)
|
||||
|
|
@ -24,25 +24,37 @@ positions = {'R1': (105, 35, 'top'), 'R2': (110, 35, 'bottom'), 'R3': (110, 45,
|
|||
|
||||
|
||||
def do_3Rs(test_dir, conf, dir, modern, single=False):
|
||||
ctx = context.TestContext(test_dir, dir, '3Rs', conf, DRILL_DIR)
|
||||
ctx = context.TestContext(test_dir, dir, '3Rs_bv', conf, DRILL_DIR)
|
||||
ctx.run()
|
||||
# Check all outputs are there
|
||||
pth_drl = ctx.get_pth_drl_filename()
|
||||
npth_drl = ctx.get_npth_drl_filename()
|
||||
f1_drl = ctx.get_f1_drl_filename()
|
||||
i12_drl = ctx.get_12_drl_filename()
|
||||
pth_pdf_drl = ctx.get_pth_pdf_drl_filename()
|
||||
npth_pdf_drl = ctx.get_npth_pdf_drl_filename()
|
||||
f1_pdf_drl = ctx.get_f1_pdf_drl_filename()
|
||||
i12_pdf_drl = ctx.get_12_pdf_drl_filename()
|
||||
pth_gbr_drl = ctx.get_pth_gbr_drl_filename()
|
||||
npth_gbr_drl = ctx.get_npth_gbr_drl_filename()
|
||||
f1_gbr_drl = ctx.get_f1_gbr_drl_filename()
|
||||
i12_gbr_drl = ctx.get_12_gbr_drl_filename()
|
||||
report = 'report.rpt'
|
||||
|
||||
if modern:
|
||||
pth_drl = pth_drl.replace('PTH', 'PTH_drill')
|
||||
npth_drl = npth_drl.replace('PTH', 'PTH_drill')
|
||||
f1_drl = f1_drl.replace('front-in1', 'front-in1_drill')
|
||||
i12_drl = i12_drl.replace('in1-in2', 'in1-in2_drill')
|
||||
pth_gbr_drl = pth_gbr_drl.replace('-drl', '_drill')
|
||||
npth_gbr_drl = npth_gbr_drl.replace('-drl', '_drill')
|
||||
f1_gbr_drl = f1_gbr_drl.replace('-drl', '_drill')
|
||||
i12_gbr_drl = i12_gbr_drl.replace('-drl', '_drill')
|
||||
pth_pdf_drl = pth_pdf_drl.replace('-drl', '_drill')
|
||||
npth_pdf_drl = npth_pdf_drl.replace('-drl', '_drill')
|
||||
report = '3Rs-drill_report.txt'
|
||||
f1_pdf_drl = f1_pdf_drl.replace('-drl', '_drill')
|
||||
i12_pdf_drl = i12_pdf_drl.replace('-drl', '_drill')
|
||||
report = '3Rs_bv-drill_report.txt'
|
||||
if single:
|
||||
pth_drl = pth_drl.replace('PTH_', '')
|
||||
npth_drl = npth_drl.replace('NPTH_', '')
|
||||
|
|
@ -57,10 +69,16 @@ def do_3Rs(test_dir, conf, dir, modern, single=False):
|
|||
ctx.expect_out_file(os.path.join(DRILL_DIR, report))
|
||||
ctx.expect_out_file(pth_drl)
|
||||
ctx.expect_out_file(npth_drl)
|
||||
ctx.expect_out_file(f1_drl)
|
||||
ctx.expect_out_file(i12_drl)
|
||||
ctx.expect_out_file(pth_gbr_drl)
|
||||
ctx.expect_out_file(npth_gbr_drl)
|
||||
ctx.expect_out_file(f1_gbr_drl)
|
||||
ctx.expect_out_file(i12_gbr_drl)
|
||||
ctx.expect_out_file(pth_pdf_drl)
|
||||
ctx.expect_out_file(npth_pdf_drl)
|
||||
ctx.expect_out_file(f1_pdf_drl)
|
||||
ctx.expect_out_file(i12_pdf_drl)
|
||||
# We have R3 at (110, 45) length is 9 mm on X, drill 1 mm
|
||||
ctx.search_in_file(pth_drl, ['X110.0Y-45.0', 'X119.0Y-45.0'])
|
||||
ctx.expect_gerber_flash_at(pth_gbr_drl, 6, (110, -45))
|
||||
|
|
|
|||
|
|
@ -217,6 +217,24 @@ class TestContext(object):
|
|||
def get_pth_pdf_drl_filename(self):
|
||||
return os.path.join(self.sub_dir, self.board_name+'-PTH-drl_map.pdf')
|
||||
|
||||
def get_f1_drl_filename(self):
|
||||
return os.path.join(self.sub_dir, self.board_name+'-front-in1.drl')
|
||||
|
||||
def get_f1_gbr_drl_filename(self):
|
||||
return os.path.join(self.sub_dir, self.board_name+'-front-in1-drl.gbr')
|
||||
|
||||
def get_f1_pdf_drl_filename(self):
|
||||
return os.path.join(self.sub_dir, self.board_name+'-front-in1-drl_map.pdf')
|
||||
|
||||
def get_12_drl_filename(self):
|
||||
return os.path.join(self.sub_dir, self.board_name+'-in1-in2.drl')
|
||||
|
||||
def get_12_gbr_drl_filename(self):
|
||||
return os.path.join(self.sub_dir, self.board_name+'-in1-in2-drl.gbr')
|
||||
|
||||
def get_12_pdf_drl_filename(self):
|
||||
return os.path.join(self.sub_dir, self.board_name+'-in1-in2-drl_map.pdf')
|
||||
|
||||
def get_npth_drl_filename(self):
|
||||
return os.path.join(self.sub_dir, self.board_name+'-NPTH.drl')
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue