From 0d9256fb244d4f08c890be9b720308b90051920c Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Sun, 14 Jun 2020 15:12:56 -0300 Subject: [PATCH] The 'check_zone_fills' option is now independent of 'run_drc' Implemented in a different way. For all internal commands now we use Python bindings to fill the zones as suggested by @arikrupnik in johnbeard/kiplot#11 For 'print_pcb' now we ask KiCad to do it before printing (needs v1.4.1) --- CHANGELOG.md | 3 + Makefile | 12 +- README.md | 6 +- kiplot/kiplot.py | 20 +- tests/board_samples/zone-refill.kicad_pcb | 339 +++++++++++++++++ tests/board_samples/zone-refill.kicad_pcb.ok | 339 +++++++++++++++++ .../zone-refill.kicad_pcb.refill | 352 ++++++++++++++++++ tests/reference/PCB_Bot.pdf | Bin 0 -> 10692 bytes tests/reference/zone-refill-B_Cu.pdf | Bin 0 -> 4886 bytes tests/test_plot/test_pdf.py | 10 + tests/test_plot/test_print_pcb.py | 10 + tests/utils/context.py | 5 +- .../yaml_samples/pdf_zone-refill.kiplot.yaml | 31 ++ .../print_pcb_zone-refill.kiplot.yaml | 17 + 14 files changed, 1128 insertions(+), 16 deletions(-) create mode 100644 tests/board_samples/zone-refill.kicad_pcb create mode 100644 tests/board_samples/zone-refill.kicad_pcb.ok create mode 100644 tests/board_samples/zone-refill.kicad_pcb.refill create mode 100644 tests/reference/PCB_Bot.pdf create mode 100644 tests/reference/zone-refill-B_Cu.pdf create mode 100644 tests/yaml_samples/pdf_zone-refill.kiplot.yaml create mode 100644 tests/yaml_samples/print_pcb_zone-refill.kiplot.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index 34f1d450..52c2169f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Better debug information when a BoM fails to be generated. - Support for compressed YAML files. + ### Changed - Allowed operations that doesn't involve a PCB now can run if the PCB file is missing or corrupted. +- The 'check_zone_fills' option is now independent of 'run_drc' + ### Fixed - Error codes that overlapped. diff --git a/Makefile b/Makefile index 6bee753c..e5939b2f 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,11 @@ #!/usr/bin/make PY_COV=python3-coverage +REFDIR=tests/reference/ +REFILL=tests/board_samples/zone-refill.kicad_pcb CWD := $(abspath $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST)))))) USER_ID=$(shell id -u) GROUP_ID=$(shell id -g) - deb: fakeroot dpkg-buildpackage -uc -b @@ -43,4 +44,11 @@ test_docker_local: deb_clean: fakeroot debian/rules clean -.PHONY: deb deb_clean lint test test_local +gen_ref: + # Reference outputs, must be manually inspected if regenerated + cp -a $(REFILL).refill $(REFILL) + src/kiplot -c tests/yaml_samples/pdf_zone-refill.kiplot.yaml -b tests/board_samples/zone-refill.kicad_pcb -d $(REFDIR) + src/kiplot -c tests/yaml_samples/print_pcb_zone-refill.kiplot.yaml -b tests/board_samples/zone-refill.kicad_pcb -d $(REFDIR) + cp -a $(REFILL).ok $(REFILL) + +.PHONY: deb deb_clean lint test test_local gen_ref diff --git a/README.md b/README.md index 5920285b..90f68c6e 100644 --- a/README.md +++ b/README.md @@ -51,9 +51,9 @@ This section is used to specify tasks that will executed before generating any o - `run_erc` To run the ERC (Electrical Rules Check). To ensure the schematic is electrically correct. - `run_drc` To run the DRC (Distance Rules Check). To ensure we have a valid PCB. - `update_xml` To update the XML version of the BoM (Bill of Materials). To ensure our generated BoM is up to date. +- `check_zone_fills` Zones are filled before doing any operation involving PCB layers. -The `run_drc` command has the following options: -- `check_zone_fills` Every time we run the DRC the zones are filled again. This option saves the PCB to disk updating the zones. +The `run_drc` command has the following option: - `ignore_unconnected` Ignores the unconnected nets. Useful if you didn't finish the routing. Here is an example of a *preflight* section: @@ -169,7 +169,6 @@ outputs: plot_footprint_values: true force_plot_invisible_refs_vals: false tent_vias: true - check_zone_fills: true line_width: 0.15 # gerber options @@ -199,7 +198,6 @@ Most options are the same you'll find in the KiCad dialogs. - `plot_footprint_values` include the footprint values - `force_plot_invisible_refs_vals` include references and values even when they are marked as invisible - `tent_vias` cover the vias -- `check_zone_fills` currently without effect Note that each layer is generated in a separated file. diff --git a/kiplot/kiplot.py b/kiplot/kiplot.py index 9298df76..4056884f 100644 --- a/kiplot/kiplot.py +++ b/kiplot/kiplot.py @@ -134,6 +134,8 @@ class Plotter(object): def _load_board(self, brd_file): try: board = pcbnew.LoadBoard(brd_file) + if self.cfg.check_zone_fills: + pcbnew.ZONE_FILLER(board).Fill(board.Zones()) except OSError as e: logger.error('Error loading PCB file. Currupted?') logger.error(e) @@ -165,6 +167,9 @@ class Plotter(object): elif skip == 'run_erc': self.cfg.run_erc = False logger.debug('Skipping run_erc') + elif skip == 'check_zone_fills': + self.cfg.check_zone_fills = False + logger.debug('Skipping run_erc') else: logger.error('Unknown action to skip: '+skip) exit(misc.EXIT_BAD_ARGS) @@ -179,8 +184,7 @@ class Plotter(object): if self.cfg.update_xml: self._update_xml(brd_file) if self.cfg.run_drc: - self._run_drc(brd_file, self.cfg.ignore_unconnected, - self.cfg.check_zone_fills, filter_file) + self._run_drc(brd_file, self.cfg.ignore_unconnected, filter_file) def _run_erc(self, brd_file, filter_file): sch_file = check_eeschema_do(brd_file) @@ -216,7 +220,7 @@ class Plotter(object): logger.error('Failed to update the BoM, error %d', ret) exit(misc.BOM_ERROR) - def _run_drc(self, brd_file, ignore_unconnected, check_zone_fills, filter_file): + def _run_drc(self, brd_file, ignore_unconnected, filter_file): check_script(misc.CMD_PCBNEW_RUN_DRC, misc.URL_PCBNEW_RUN_DRC, '1.4.0') cmd = [misc.CMD_PCBNEW_RUN_DRC, 'run_drc'] if filter_file: @@ -228,8 +232,6 @@ class Plotter(object): cmd.insert(1, '-r') if ignore_unconnected: cmd.insert(1, '-i') - if check_zone_fills: - cmd.insert(1, '-s') logger.info('- Running the DRC') logger.debug('Executing: '+str(cmd)) ret = call(cmd) @@ -602,7 +604,7 @@ class Plotter(object): def _do_pcb_print(self, board, output_dir, output, brd_file): check_script(misc.CMD_PCBNEW_PRINT_LAYERS, - misc.URL_PCBNEW_PRINT_LAYERS, '1.3.1') + misc.URL_PCBNEW_PRINT_LAYERS, '1.4.1') to = output.options.type_options # Verify the inner layers layer_cnt = board.GetCopperLayerCount() @@ -615,8 +617,10 @@ class Plotter(object): "Inner layer {} is not valid for this board" .format(layer.layer)) cmd = [misc.CMD_PCBNEW_PRINT_LAYERS, 'export', - '--output_name', to.output_name, - brd_file, output_dir] + '--output_name', to.output_name] + if self.cfg.check_zone_fills: + cmd.append('-f') + cmd.extend([brd_file, output_dir]) if level_debug(): cmd.insert(1, '-vv') cmd.insert(1, '-r') diff --git a/tests/board_samples/zone-refill.kicad_pcb b/tests/board_samples/zone-refill.kicad_pcb new file mode 100644 index 00000000..2cba7e7d --- /dev/null +++ b/tests/board_samples/zone-refill.kicad_pcb @@ -0,0 +1,339 @@ +(kicad_pcb (version 20171130) (host pcbnew 5.1.5+dfsg1-2~bpo10+1) + + (general + (thickness 1.6) + (drawings 5) + (tracks 10) + (zones 0) + (modules 4) + (nets 4) + ) + + (page A4) + (layers + (0 F.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 1 GND) + (net 2 "Net-(C1-Pad1)") + (net 3 "Net-(J1-Pad1)") + + (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) + (add_net GND) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(J1-Pad1)") + ) + + (module Resistor_SMD:R_0805_2012Metric (layer B.Cu) (tedit 5B36C52B) (tstamp 5EBAC712) + (at 161.9375 74 180) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags resistor) + (path /5EBAD9A3) + (attr smd) + (fp_text reference R1 (at 0 1.65) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value R (at 0 -1.65) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.68 -0.95) (end -1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 -0.95) (end -1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer B.SilkS) (width 0.12)) + (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)) + (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 3 "Net-(J1-Pad1)")) + (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 2 "Net-(C1-Pad1)")) + (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 Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5EBAC57B) + (at 167 77.54 180) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5EBAC9BE) + (fp_text reference J2 (at 0 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x02_Male (at -4 4.87) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0 1.27 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 0 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 2 "Net-(C1-Pad1)")) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5EBAC6B7) + (at 157.82 74.85) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5EBAC114) + (fp_text reference J1 (at 0 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x02_Male (at -4.82 5.15) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0 1.27 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 "Net-(J1-Pad1)")) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric (layer B.Cu) (tedit 5B36C52B) (tstamp 5EBAC54F) + (at 163 77.0625 270) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags capacitor) + (path /5EBAE412) + (attr smd) + (fp_text reference C1 (at 0 1.65 270) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value C (at 0 -1.65 270) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 270) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.68 -0.95) (end -1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 -0.95) (end -1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer B.SilkS) (width 0.12)) + (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)) + (pad 2 smd roundrect (at 0.9375 0 270) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 1 GND)) + (pad 1 smd roundrect (at -0.9375 0 270) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 2 "Net-(C1-Pad1)")) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_line (start 170 80) (end 169 80) (layer Edge.Cuts) (width 0.05) (tstamp 5EBAC92C)) + (gr_line (start 170 72) (end 170 80) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 155 72) (end 170 72) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 155 80) (end 155 72) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 169 80) (end 155 80) (layer Edge.Cuts) (width 0.05)) + + (segment (start 162.39 77.39) (end 163 78) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 157.82 77.39) (end 162.39 77.39) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 163.46 77.54) (end 163 78) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 167 77.54) (end 163.46 77.54) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 167 75) (end 164 75) (width 0.25) (layer B.Cu) (net 2)) + (segment (start 164 75) (end 163 76) (width 0.25) (layer B.Cu) (net 2)) + (segment (start 164 75) (end 163 74) (width 0.25) (layer B.Cu) (net 2)) + (segment (start 159.7 74) (end 161 74) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 157.82 74.85) (end 158.92 74.85) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 158.92 74.85) (end 159.7 74) (width 0.25) (layer B.Cu) (net 3)) + + (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 5EBAC970) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 170 80) (xy 155 80) (xy 155 72) (xy 170 72) + ) + ) + (filled_polygon + (pts + (xy 169.340001 79.34) (xy 155.66 79.34) (xy 155.66 77.74689) (xy 156.378524 77.74689) (xy 156.423175 77.894099) + (xy 156.548359 78.15692) (xy 156.722412 78.390269) (xy 156.938645 78.585178) (xy 157.188748 78.734157) (xy 157.463109 78.831481) + (xy 157.693 78.710814) (xy 157.693 77.517) (xy 157.947 77.517) (xy 157.947 78.710814) (xy 158.176891 78.831481) + (xy 158.451252 78.734157) (xy 158.701355 78.585178) (xy 158.917588 78.390269) (xy 158.917788 78.39) (xy 165.511928 78.39) + (xy 165.524188 78.514482) (xy 165.560498 78.63418) (xy 165.619463 78.744494) (xy 165.698815 78.841185) (xy 165.795506 78.920537) + (xy 165.90582 78.979502) (xy 166.025518 79.015812) (xy 166.15 79.028072) (xy 166.71425 79.025) (xy 166.873 78.86625) + (xy 166.873 77.667) (xy 167.127 77.667) (xy 167.127 78.86625) (xy 167.28575 79.025) (xy 167.85 79.028072) + (xy 167.974482 79.015812) (xy 168.09418 78.979502) (xy 168.204494 78.920537) (xy 168.301185 78.841185) (xy 168.380537 78.744494) + (xy 168.439502 78.63418) (xy 168.475812 78.514482) (xy 168.488072 78.39) (xy 168.485 77.82575) (xy 168.32625 77.667) + (xy 167.127 77.667) (xy 166.873 77.667) (xy 165.67375 77.667) (xy 165.515 77.82575) (xy 165.511928 78.39) + (xy 158.917788 78.39) (xy 159.091641 78.15692) (xy 159.216825 77.894099) (xy 159.261476 77.74689) (xy 159.140155 77.517) + (xy 157.947 77.517) (xy 157.693 77.517) (xy 156.499845 77.517) (xy 156.378524 77.74689) (xy 155.66 77.74689) + (xy 155.66 74) (xy 156.331928 74) (xy 156.331928 75.7) (xy 156.344188 75.824482) (xy 156.380498 75.94418) + (xy 156.439463 76.054494) (xy 156.518815 76.151185) (xy 156.615506 76.230537) (xy 156.72582 76.289502) (xy 156.806466 76.313966) + (xy 156.722412 76.389731) (xy 156.548359 76.62308) (xy 156.423175 76.885901) (xy 156.378524 77.03311) (xy 156.499845 77.263) + (xy 157.693 77.263) (xy 157.693 77.243) (xy 157.947 77.243) (xy 157.947 77.263) (xy 159.140155 77.263) + (xy 159.261476 77.03311) (xy 159.216825 76.885901) (xy 159.091641 76.62308) (xy 158.917588 76.389731) (xy 158.833534 76.313966) + (xy 158.91418 76.289502) (xy 159.024494 76.230537) (xy 159.121185 76.151185) (xy 159.200537 76.054494) (xy 159.259502 75.94418) + (xy 159.295812 75.824482) (xy 159.308072 75.7) (xy 159.308072 75.592847) (xy 160.012857 75.560218) (xy 160.065361 75.560874) + (xy 160.124226 75.549928) (xy 160.183465 75.541311) (xy 160.197692 75.536266) (xy 160.212544 75.533504) (xy 160.268139 75.511284) + (xy 160.324563 75.491275) (xy 160.337542 75.483545) (xy 160.351559 75.477943) (xy 160.401746 75.445309) (xy 160.453187 75.414673) + (xy 160.492188 75.379524) (xy 161.50392 74.570139) (xy 161.584237 74.491803) (xy 161.668957 74.368374) (xy 161.727969 74.230789) + (xy 161.759006 74.084334) (xy 161.760058 74) (xy 162.236324 74) (xy 162.250998 74.148985) (xy 162.294454 74.292246) + (xy 162.365026 74.424276) (xy 162.436201 74.511002) (xy 162.925199 75) (xy 162.436201 75.488998) (xy 162.365026 75.575724) + (xy 162.294454 75.707754) (xy 162.250998 75.851015) (xy 162.236324 76) (xy 162.250998 76.148985) (xy 162.294454 76.292246) + (xy 162.365026 76.424276) (xy 162.459999 76.540001) (xy 162.575724 76.634974) (xy 162.707754 76.705546) (xy 162.851015 76.749002) + (xy 163 76.763676) (xy 163.148985 76.749002) (xy 163.292246 76.705546) (xy 163.424276 76.634974) (xy 163.511002 76.563799) + (xy 164.314802 75.76) (xy 165.721822 75.76) (xy 165.846525 75.946632) (xy 165.97838 76.078487) (xy 165.90582 76.100498) + (xy 165.795506 76.159463) (xy 165.698815 76.238815) (xy 165.619463 76.335506) (xy 165.560498 76.44582) (xy 165.524188 76.565518) + (xy 165.511928 76.69) (xy 165.515 77.25425) (xy 165.67375 77.413) (xy 166.873 77.413) (xy 166.873 77.393) + (xy 167.127 77.393) (xy 167.127 77.413) (xy 168.32625 77.413) (xy 168.485 77.25425) (xy 168.488072 76.69) + (xy 168.475812 76.565518) (xy 168.439502 76.44582) (xy 168.380537 76.335506) (xy 168.301185 76.238815) (xy 168.204494 76.159463) + (xy 168.09418 76.100498) (xy 168.02162 76.078487) (xy 168.153475 75.946632) (xy 168.31599 75.703411) (xy 168.427932 75.433158) + (xy 168.485 75.14626) (xy 168.485 74.85374) (xy 168.427932 74.566842) (xy 168.31599 74.296589) (xy 168.153475 74.053368) + (xy 167.946632 73.846525) (xy 167.703411 73.68401) (xy 167.433158 73.572068) (xy 167.14626 73.515) (xy 166.85374 73.515) + (xy 166.566842 73.572068) (xy 166.296589 73.68401) (xy 166.053368 73.846525) (xy 165.846525 74.053368) (xy 165.721822 74.24) + (xy 164.314802 74.24) (xy 163.511002 73.436201) (xy 163.424276 73.365026) (xy 163.292246 73.294454) (xy 163.148985 73.250998) + (xy 163 73.236324) (xy 162.851015 73.250998) (xy 162.707754 73.294454) (xy 162.575724 73.365026) (xy 162.459999 73.459999) + (xy 162.365026 73.575724) (xy 162.294454 73.707754) (xy 162.250998 73.851015) (xy 162.236324 74) (xy 161.760058 74) + (xy 161.760874 73.934639) (xy 161.733504 73.787456) (xy 161.677944 73.64844) (xy 161.596331 73.522935) (xy 161.491802 73.415763) + (xy 161.368373 73.331043) (xy 161.230788 73.272031) (xy 161.084334 73.240995) (xy 160.934638 73.239126) (xy 160.787455 73.266496) + (xy 160.64844 73.322057) (xy 160.554384 73.383218) (xy 159.718111 74.052237) (xy 159.308072 74.07122) (xy 159.308072 74) + (xy 159.295812 73.875518) (xy 159.259502 73.75582) (xy 159.200537 73.645506) (xy 159.121185 73.548815) (xy 159.024494 73.469463) + (xy 158.91418 73.410498) (xy 158.794482 73.374188) (xy 158.67 73.361928) (xy 156.97 73.361928) (xy 156.845518 73.374188) + (xy 156.72582 73.410498) (xy 156.615506 73.469463) (xy 156.518815 73.548815) (xy 156.439463 73.645506) (xy 156.380498 73.75582) + (xy 156.344188 73.875518) (xy 156.331928 74) (xy 155.66 74) (xy 155.66 72.66) (xy 169.34 72.66) + ) + ) + ) +) diff --git a/tests/board_samples/zone-refill.kicad_pcb.ok b/tests/board_samples/zone-refill.kicad_pcb.ok new file mode 100644 index 00000000..2cba7e7d --- /dev/null +++ b/tests/board_samples/zone-refill.kicad_pcb.ok @@ -0,0 +1,339 @@ +(kicad_pcb (version 20171130) (host pcbnew 5.1.5+dfsg1-2~bpo10+1) + + (general + (thickness 1.6) + (drawings 5) + (tracks 10) + (zones 0) + (modules 4) + (nets 4) + ) + + (page A4) + (layers + (0 F.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 1 GND) + (net 2 "Net-(C1-Pad1)") + (net 3 "Net-(J1-Pad1)") + + (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) + (add_net GND) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(J1-Pad1)") + ) + + (module Resistor_SMD:R_0805_2012Metric (layer B.Cu) (tedit 5B36C52B) (tstamp 5EBAC712) + (at 161.9375 74 180) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags resistor) + (path /5EBAD9A3) + (attr smd) + (fp_text reference R1 (at 0 1.65) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value R (at 0 -1.65) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.68 -0.95) (end -1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 -0.95) (end -1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer B.SilkS) (width 0.12)) + (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)) + (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 3 "Net-(J1-Pad1)")) + (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 2 "Net-(C1-Pad1)")) + (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 Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5EBAC57B) + (at 167 77.54 180) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5EBAC9BE) + (fp_text reference J2 (at 0 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x02_Male (at -4 4.87) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0 1.27 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 0 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 2 "Net-(C1-Pad1)")) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5EBAC6B7) + (at 157.82 74.85) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5EBAC114) + (fp_text reference J1 (at 0 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x02_Male (at -4.82 5.15) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0 1.27 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 "Net-(J1-Pad1)")) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric (layer B.Cu) (tedit 5B36C52B) (tstamp 5EBAC54F) + (at 163 77.0625 270) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags capacitor) + (path /5EBAE412) + (attr smd) + (fp_text reference C1 (at 0 1.65 270) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value C (at 0 -1.65 270) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 270) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.68 -0.95) (end -1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 -0.95) (end -1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer B.SilkS) (width 0.12)) + (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)) + (pad 2 smd roundrect (at 0.9375 0 270) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 1 GND)) + (pad 1 smd roundrect (at -0.9375 0 270) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 2 "Net-(C1-Pad1)")) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_line (start 170 80) (end 169 80) (layer Edge.Cuts) (width 0.05) (tstamp 5EBAC92C)) + (gr_line (start 170 72) (end 170 80) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 155 72) (end 170 72) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 155 80) (end 155 72) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 169 80) (end 155 80) (layer Edge.Cuts) (width 0.05)) + + (segment (start 162.39 77.39) (end 163 78) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 157.82 77.39) (end 162.39 77.39) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 163.46 77.54) (end 163 78) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 167 77.54) (end 163.46 77.54) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 167 75) (end 164 75) (width 0.25) (layer B.Cu) (net 2)) + (segment (start 164 75) (end 163 76) (width 0.25) (layer B.Cu) (net 2)) + (segment (start 164 75) (end 163 74) (width 0.25) (layer B.Cu) (net 2)) + (segment (start 159.7 74) (end 161 74) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 157.82 74.85) (end 158.92 74.85) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 158.92 74.85) (end 159.7 74) (width 0.25) (layer B.Cu) (net 3)) + + (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 5EBAC970) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 170 80) (xy 155 80) (xy 155 72) (xy 170 72) + ) + ) + (filled_polygon + (pts + (xy 169.340001 79.34) (xy 155.66 79.34) (xy 155.66 77.74689) (xy 156.378524 77.74689) (xy 156.423175 77.894099) + (xy 156.548359 78.15692) (xy 156.722412 78.390269) (xy 156.938645 78.585178) (xy 157.188748 78.734157) (xy 157.463109 78.831481) + (xy 157.693 78.710814) (xy 157.693 77.517) (xy 157.947 77.517) (xy 157.947 78.710814) (xy 158.176891 78.831481) + (xy 158.451252 78.734157) (xy 158.701355 78.585178) (xy 158.917588 78.390269) (xy 158.917788 78.39) (xy 165.511928 78.39) + (xy 165.524188 78.514482) (xy 165.560498 78.63418) (xy 165.619463 78.744494) (xy 165.698815 78.841185) (xy 165.795506 78.920537) + (xy 165.90582 78.979502) (xy 166.025518 79.015812) (xy 166.15 79.028072) (xy 166.71425 79.025) (xy 166.873 78.86625) + (xy 166.873 77.667) (xy 167.127 77.667) (xy 167.127 78.86625) (xy 167.28575 79.025) (xy 167.85 79.028072) + (xy 167.974482 79.015812) (xy 168.09418 78.979502) (xy 168.204494 78.920537) (xy 168.301185 78.841185) (xy 168.380537 78.744494) + (xy 168.439502 78.63418) (xy 168.475812 78.514482) (xy 168.488072 78.39) (xy 168.485 77.82575) (xy 168.32625 77.667) + (xy 167.127 77.667) (xy 166.873 77.667) (xy 165.67375 77.667) (xy 165.515 77.82575) (xy 165.511928 78.39) + (xy 158.917788 78.39) (xy 159.091641 78.15692) (xy 159.216825 77.894099) (xy 159.261476 77.74689) (xy 159.140155 77.517) + (xy 157.947 77.517) (xy 157.693 77.517) (xy 156.499845 77.517) (xy 156.378524 77.74689) (xy 155.66 77.74689) + (xy 155.66 74) (xy 156.331928 74) (xy 156.331928 75.7) (xy 156.344188 75.824482) (xy 156.380498 75.94418) + (xy 156.439463 76.054494) (xy 156.518815 76.151185) (xy 156.615506 76.230537) (xy 156.72582 76.289502) (xy 156.806466 76.313966) + (xy 156.722412 76.389731) (xy 156.548359 76.62308) (xy 156.423175 76.885901) (xy 156.378524 77.03311) (xy 156.499845 77.263) + (xy 157.693 77.263) (xy 157.693 77.243) (xy 157.947 77.243) (xy 157.947 77.263) (xy 159.140155 77.263) + (xy 159.261476 77.03311) (xy 159.216825 76.885901) (xy 159.091641 76.62308) (xy 158.917588 76.389731) (xy 158.833534 76.313966) + (xy 158.91418 76.289502) (xy 159.024494 76.230537) (xy 159.121185 76.151185) (xy 159.200537 76.054494) (xy 159.259502 75.94418) + (xy 159.295812 75.824482) (xy 159.308072 75.7) (xy 159.308072 75.592847) (xy 160.012857 75.560218) (xy 160.065361 75.560874) + (xy 160.124226 75.549928) (xy 160.183465 75.541311) (xy 160.197692 75.536266) (xy 160.212544 75.533504) (xy 160.268139 75.511284) + (xy 160.324563 75.491275) (xy 160.337542 75.483545) (xy 160.351559 75.477943) (xy 160.401746 75.445309) (xy 160.453187 75.414673) + (xy 160.492188 75.379524) (xy 161.50392 74.570139) (xy 161.584237 74.491803) (xy 161.668957 74.368374) (xy 161.727969 74.230789) + (xy 161.759006 74.084334) (xy 161.760058 74) (xy 162.236324 74) (xy 162.250998 74.148985) (xy 162.294454 74.292246) + (xy 162.365026 74.424276) (xy 162.436201 74.511002) (xy 162.925199 75) (xy 162.436201 75.488998) (xy 162.365026 75.575724) + (xy 162.294454 75.707754) (xy 162.250998 75.851015) (xy 162.236324 76) (xy 162.250998 76.148985) (xy 162.294454 76.292246) + (xy 162.365026 76.424276) (xy 162.459999 76.540001) (xy 162.575724 76.634974) (xy 162.707754 76.705546) (xy 162.851015 76.749002) + (xy 163 76.763676) (xy 163.148985 76.749002) (xy 163.292246 76.705546) (xy 163.424276 76.634974) (xy 163.511002 76.563799) + (xy 164.314802 75.76) (xy 165.721822 75.76) (xy 165.846525 75.946632) (xy 165.97838 76.078487) (xy 165.90582 76.100498) + (xy 165.795506 76.159463) (xy 165.698815 76.238815) (xy 165.619463 76.335506) (xy 165.560498 76.44582) (xy 165.524188 76.565518) + (xy 165.511928 76.69) (xy 165.515 77.25425) (xy 165.67375 77.413) (xy 166.873 77.413) (xy 166.873 77.393) + (xy 167.127 77.393) (xy 167.127 77.413) (xy 168.32625 77.413) (xy 168.485 77.25425) (xy 168.488072 76.69) + (xy 168.475812 76.565518) (xy 168.439502 76.44582) (xy 168.380537 76.335506) (xy 168.301185 76.238815) (xy 168.204494 76.159463) + (xy 168.09418 76.100498) (xy 168.02162 76.078487) (xy 168.153475 75.946632) (xy 168.31599 75.703411) (xy 168.427932 75.433158) + (xy 168.485 75.14626) (xy 168.485 74.85374) (xy 168.427932 74.566842) (xy 168.31599 74.296589) (xy 168.153475 74.053368) + (xy 167.946632 73.846525) (xy 167.703411 73.68401) (xy 167.433158 73.572068) (xy 167.14626 73.515) (xy 166.85374 73.515) + (xy 166.566842 73.572068) (xy 166.296589 73.68401) (xy 166.053368 73.846525) (xy 165.846525 74.053368) (xy 165.721822 74.24) + (xy 164.314802 74.24) (xy 163.511002 73.436201) (xy 163.424276 73.365026) (xy 163.292246 73.294454) (xy 163.148985 73.250998) + (xy 163 73.236324) (xy 162.851015 73.250998) (xy 162.707754 73.294454) (xy 162.575724 73.365026) (xy 162.459999 73.459999) + (xy 162.365026 73.575724) (xy 162.294454 73.707754) (xy 162.250998 73.851015) (xy 162.236324 74) (xy 161.760058 74) + (xy 161.760874 73.934639) (xy 161.733504 73.787456) (xy 161.677944 73.64844) (xy 161.596331 73.522935) (xy 161.491802 73.415763) + (xy 161.368373 73.331043) (xy 161.230788 73.272031) (xy 161.084334 73.240995) (xy 160.934638 73.239126) (xy 160.787455 73.266496) + (xy 160.64844 73.322057) (xy 160.554384 73.383218) (xy 159.718111 74.052237) (xy 159.308072 74.07122) (xy 159.308072 74) + (xy 159.295812 73.875518) (xy 159.259502 73.75582) (xy 159.200537 73.645506) (xy 159.121185 73.548815) (xy 159.024494 73.469463) + (xy 158.91418 73.410498) (xy 158.794482 73.374188) (xy 158.67 73.361928) (xy 156.97 73.361928) (xy 156.845518 73.374188) + (xy 156.72582 73.410498) (xy 156.615506 73.469463) (xy 156.518815 73.548815) (xy 156.439463 73.645506) (xy 156.380498 73.75582) + (xy 156.344188 73.875518) (xy 156.331928 74) (xy 155.66 74) (xy 155.66 72.66) (xy 169.34 72.66) + ) + ) + ) +) diff --git a/tests/board_samples/zone-refill.kicad_pcb.refill b/tests/board_samples/zone-refill.kicad_pcb.refill new file mode 100644 index 00000000..9f8cd6e4 --- /dev/null +++ b/tests/board_samples/zone-refill.kicad_pcb.refill @@ -0,0 +1,352 @@ +(kicad_pcb (version 20171130) (host pcbnew 5.1.5+dfsg1-2~bpo10+1) + + (general + (thickness 1.6) + (drawings 5) + (tracks 10) + (zones 0) + (modules 4) + (nets 4) + ) + + (page A4) + (layers + (0 F.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 1 GND) + (net 2 "Net-(C1-Pad1)") + (net 3 "Net-(J1-Pad1)") + + (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) + (add_net GND) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(J1-Pad1)") + ) + + (module Resistor_SMD:R_0805_2012Metric (layer B.Cu) (tedit 5B36C52B) (tstamp 5EBAC712) + (at 161.9375 74 180) + (descr "Resistor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags resistor) + (path /5EBAD9A3) + (attr smd) + (fp_text reference R1 (at 0 1.65) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value R (at 0 -1.65) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.68 -0.95) (end -1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 -0.95) (end -1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer B.SilkS) (width 0.12)) + (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)) + (pad 2 smd roundrect (at 0.9375 0 180) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 3 "Net-(J1-Pad1)")) + (pad 1 smd roundrect (at -0.9375 0 180) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 2 "Net-(C1-Pad1)")) + (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 Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5EBAC57B) + (at 167 77.54 180) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5EBAC9BE) + (fp_text reference J2 (at 0 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x02_Male (at -4 4.87) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0 1.27 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 0 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 2 "Net-(C1-Pad1)")) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical (layer F.Cu) (tedit 59FED5CC) (tstamp 5EBAC6B7) + (at 157.82 74.85) + (descr "Through hole straight pin header, 1x02, 2.54mm pitch, single row") + (tags "Through hole pin header THT 1x02 2.54mm single row") + (path /5EBAC114) + (fp_text reference J1 (at 0 -2.33) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x02_Male (at -4.82 5.15) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0 1.27 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.8 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.8 4.35) (end 1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 4.35) (end 1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 4.35) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.33 -1.33) (end 0 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 1.27) (end -1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 3.87) (end 1.33 3.87) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -0.635) (end -0.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 3.81) (end -1.27 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 3.81) (end -1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.27) (end 1.27 3.81) (layer F.Fab) (width 0.1)) + (fp_line (start -0.635 -1.27) (end 1.27 -1.27) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 0 2.54) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole rect (at 0 0) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 "Net-(J1-Pad1)")) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x02_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_SMD:C_0805_2012Metric (layer B.Cu) (tedit 5B36C52B) (tstamp 5EBAC54F) + (at 163 77.0625 270) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags capacitor) + (path /5EBAE412) + (attr smd) + (fp_text reference C1 (at 0 1.65 270) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value C (at 0 -1.65 270) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user %R (at 0 0 270) (layer B.Fab) + (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror)) + ) + (fp_line (start 1.68 -0.95) (end -1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start 1.68 0.95) (end 1.68 -0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 0.95) (end 1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.68 -0.95) (end -1.68 0.95) (layer B.CrtYd) (width 0.05)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer B.SilkS) (width 0.12)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer B.SilkS) (width 0.12)) + (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)) + (pad 2 smd roundrect (at 0.9375 0 270) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 1 GND)) + (pad 1 smd roundrect (at -0.9375 0 270) (size 0.975 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25) + (net 2 "Net-(C1-Pad1)")) + (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_line (start 170 80) (end 169 80) (layer Edge.Cuts) (width 0.05) (tstamp 5EBAC92C)) + (gr_line (start 170 72) (end 170 80) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 155 72) (end 170 72) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 155 80) (end 155 72) (layer Edge.Cuts) (width 0.05)) + (gr_line (start 169 80) (end 155 80) (layer Edge.Cuts) (width 0.05)) + + (segment (start 162.39 77.39) (end 163 78) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 157.82 77.39) (end 162.39 77.39) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 163.46 77.54) (end 163 78) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 167 77.54) (end 163.46 77.54) (width 0.25) (layer B.Cu) (net 1)) + (segment (start 167 75) (end 164 75) (width 0.25) (layer B.Cu) (net 2)) + (segment (start 164 75) (end 163 76) (width 0.25) (layer B.Cu) (net 2)) + (segment (start 164 75) (end 163 74) (width 0.25) (layer B.Cu) (net 2)) + (segment (start 159.7 74) (end 161 74) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 157.82 74.85) (end 158.92 74.85) (width 0.25) (layer B.Cu) (net 3)) + (segment (start 158.92 74.85) (end 159.7 74) (width 0.25) (layer B.Cu) (net 3)) + + (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 5EBAC970) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 170 80) (xy 155 80) (xy 155 72) (xy 170 72) + ) + ) + (filled_polygon + (pts + (xy 169.340001 79.34) (xy 155.66 79.34) (xy 155.66 77.74689) (xy 156.378524 77.74689) (xy 156.423175 77.894099) + (xy 156.548359 78.15692) (xy 156.722412 78.390269) (xy 156.938645 78.585178) (xy 157.188748 78.734157) (xy 157.463109 78.831481) + (xy 157.693 78.710814) (xy 157.693 77.517) (xy 157.947 77.517) (xy 157.947 78.710814) (xy 158.176891 78.831481) + (xy 158.451252 78.734157) (xy 158.701355 78.585178) (xy 158.809719 78.4875) (xy 161.661928 78.4875) (xy 161.674188 78.611982) + (xy 161.710498 78.73168) (xy 161.769463 78.841994) (xy 161.848815 78.938685) (xy 161.945506 79.018037) (xy 162.05582 79.077002) + (xy 162.175518 79.113312) (xy 162.3 79.125572) (xy 162.71425 79.1225) (xy 162.873 78.96375) (xy 162.873 78.127) + (xy 163.127 78.127) (xy 163.127 78.96375) (xy 163.28575 79.1225) (xy 163.7 79.125572) (xy 163.824482 79.113312) + (xy 163.94418 79.077002) (xy 164.054494 79.018037) (xy 164.151185 78.938685) (xy 164.230537 78.841994) (xy 164.289502 78.73168) + (xy 164.325812 78.611982) (xy 164.338072 78.4875) (xy 164.336588 78.39) (xy 165.511928 78.39) (xy 165.524188 78.514482) + (xy 165.560498 78.63418) (xy 165.619463 78.744494) (xy 165.698815 78.841185) (xy 165.795506 78.920537) (xy 165.90582 78.979502) + (xy 166.025518 79.015812) (xy 166.15 79.028072) (xy 166.71425 79.025) (xy 166.873 78.86625) (xy 166.873 77.667) + (xy 167.127 77.667) (xy 167.127 78.86625) (xy 167.28575 79.025) (xy 167.85 79.028072) (xy 167.974482 79.015812) + (xy 168.09418 78.979502) (xy 168.204494 78.920537) (xy 168.301185 78.841185) (xy 168.380537 78.744494) (xy 168.439502 78.63418) + (xy 168.475812 78.514482) (xy 168.488072 78.39) (xy 168.485 77.82575) (xy 168.32625 77.667) (xy 167.127 77.667) + (xy 166.873 77.667) (xy 165.67375 77.667) (xy 165.515 77.82575) (xy 165.511928 78.39) (xy 164.336588 78.39) + (xy 164.335 78.28575) (xy 164.17625 78.127) (xy 163.127 78.127) (xy 162.873 78.127) (xy 161.82375 78.127) + (xy 161.665 78.28575) (xy 161.661928 78.4875) (xy 158.809719 78.4875) (xy 158.917588 78.390269) (xy 159.091641 78.15692) + (xy 159.216825 77.894099) (xy 159.261476 77.74689) (xy 159.140155 77.517) (xy 157.947 77.517) (xy 157.693 77.517) + (xy 156.499845 77.517) (xy 156.378524 77.74689) (xy 155.66 77.74689) (xy 155.66 74) (xy 156.331928 74) + (xy 156.331928 75.7) (xy 156.344188 75.824482) (xy 156.380498 75.94418) (xy 156.439463 76.054494) (xy 156.518815 76.151185) + (xy 156.615506 76.230537) (xy 156.72582 76.289502) (xy 156.806466 76.313966) (xy 156.722412 76.389731) (xy 156.548359 76.62308) + (xy 156.423175 76.885901) (xy 156.378524 77.03311) (xy 156.499845 77.263) (xy 157.693 77.263) (xy 157.693 77.243) + (xy 157.947 77.243) (xy 157.947 77.263) (xy 159.140155 77.263) (xy 159.261476 77.03311) (xy 159.216825 76.885901) + (xy 159.091641 76.62308) (xy 158.917588 76.389731) (xy 158.833534 76.313966) (xy 158.91418 76.289502) (xy 159.024494 76.230537) + (xy 159.121185 76.151185) (xy 159.200537 76.054494) (xy 159.259502 75.94418) (xy 159.295812 75.824482) (xy 159.308072 75.7) + (xy 159.308072 75.504326) (xy 159.344276 75.484974) (xy 159.356983 75.474546) (xy 159.371129 75.466185) (xy 159.41474 75.427146) + (xy 159.460001 75.390001) (xy 159.494163 75.348374) (xy 159.964226 74.836127) (xy 160.023042 74.946164) (xy 160.132708 75.079792) + (xy 160.266336 75.189458) (xy 160.418791 75.270947) (xy 160.584215 75.321128) (xy 160.75625 75.338072) (xy 161.24375 75.338072) + (xy 161.415785 75.321128) (xy 161.581209 75.270947) (xy 161.733664 75.189458) (xy 161.867292 75.079792) (xy 161.9375 74.994244) + (xy 162.007708 75.079792) (xy 162.076264 75.136054) (xy 162.053836 75.148042) (xy 161.920208 75.257708) (xy 161.810542 75.391336) + (xy 161.729053 75.543791) (xy 161.678872 75.709215) (xy 161.661928 75.88125) (xy 161.661928 76.36875) (xy 161.678872 76.540785) + (xy 161.729053 76.706209) (xy 161.810542 76.858664) (xy 161.920208 76.992292) (xy 161.926564 76.997508) (xy 161.848815 77.061315) + (xy 161.769463 77.158006) (xy 161.710498 77.26832) (xy 161.674188 77.388018) (xy 161.661928 77.5125) (xy 161.665 77.71425) + (xy 161.82375 77.873) (xy 162.873 77.873) (xy 162.873 77.853) (xy 163.127 77.853) (xy 163.127 77.873) + (xy 164.17625 77.873) (xy 164.335 77.71425) (xy 164.338072 77.5125) (xy 164.325812 77.388018) (xy 164.289502 77.26832) + (xy 164.230537 77.158006) (xy 164.151185 77.061315) (xy 164.073436 76.997508) (xy 164.079792 76.992292) (xy 164.189458 76.858664) + (xy 164.270947 76.706209) (xy 164.321128 76.540785) (xy 164.338072 76.36875) (xy 164.338072 75.88125) (xy 164.32613 75.76) + (xy 165.721822 75.76) (xy 165.846525 75.946632) (xy 165.97838 76.078487) (xy 165.90582 76.100498) (xy 165.795506 76.159463) + (xy 165.698815 76.238815) (xy 165.619463 76.335506) (xy 165.560498 76.44582) (xy 165.524188 76.565518) (xy 165.511928 76.69) + (xy 165.515 77.25425) (xy 165.67375 77.413) (xy 166.873 77.413) (xy 166.873 77.393) (xy 167.127 77.393) + (xy 167.127 77.413) (xy 168.32625 77.413) (xy 168.485 77.25425) (xy 168.488072 76.69) (xy 168.475812 76.565518) + (xy 168.439502 76.44582) (xy 168.380537 76.335506) (xy 168.301185 76.238815) (xy 168.204494 76.159463) (xy 168.09418 76.100498) + (xy 168.02162 76.078487) (xy 168.153475 75.946632) (xy 168.31599 75.703411) (xy 168.427932 75.433158) (xy 168.485 75.14626) + (xy 168.485 74.85374) (xy 168.427932 74.566842) (xy 168.31599 74.296589) (xy 168.153475 74.053368) (xy 167.946632 73.846525) + (xy 167.703411 73.68401) (xy 167.433158 73.572068) (xy 167.14626 73.515) (xy 166.85374 73.515) (xy 166.566842 73.572068) + (xy 166.296589 73.68401) (xy 166.053368 73.846525) (xy 165.846525 74.053368) (xy 165.721822 74.24) (xy 164.314802 74.24) + (xy 164.000572 73.925771) (xy 164.000572 73.54375) (xy 163.983628 73.371715) (xy 163.933447 73.206291) (xy 163.851958 73.053836) + (xy 163.742292 72.920208) (xy 163.608664 72.810542) (xy 163.456209 72.729053) (xy 163.290785 72.678872) (xy 163.11875 72.661928) + (xy 162.63125 72.661928) (xy 162.459215 72.678872) (xy 162.293791 72.729053) (xy 162.141336 72.810542) (xy 162.007708 72.920208) + (xy 161.9375 73.005756) (xy 161.867292 72.920208) (xy 161.733664 72.810542) (xy 161.581209 72.729053) (xy 161.415785 72.678872) + (xy 161.24375 72.661928) (xy 160.75625 72.661928) (xy 160.584215 72.678872) (xy 160.418791 72.729053) (xy 160.266336 72.810542) + (xy 160.132708 72.920208) (xy 160.023042 73.053836) (xy 159.941553 73.206291) (xy 159.931327 73.24) (xy 159.720983 73.24) + (xy 159.667234 73.237027) (xy 159.609291 73.245257) (xy 159.551014 73.250997) (xy 159.535281 73.255769) (xy 159.519014 73.25808) + (xy 159.463788 73.277456) (xy 159.407753 73.294454) (xy 159.393257 73.302202) (xy 159.37775 73.307643) (xy 159.32735 73.337431) + (xy 159.275724 73.365026) (xy 159.26302 73.375452) (xy 159.24887 73.383815) (xy 159.205248 73.422864) (xy 159.159999 73.459999) + (xy 159.125845 73.501616) (xy 159.099137 73.530721) (xy 159.024494 73.469463) (xy 158.91418 73.410498) (xy 158.794482 73.374188) + (xy 158.67 73.361928) (xy 156.97 73.361928) (xy 156.845518 73.374188) (xy 156.72582 73.410498) (xy 156.615506 73.469463) + (xy 156.518815 73.548815) (xy 156.439463 73.645506) (xy 156.380498 73.75582) (xy 156.344188 73.875518) (xy 156.331928 74) + (xy 155.66 74) (xy 155.66 72.66) (xy 169.34 72.66) + ) + ) + ) +) diff --git a/tests/reference/PCB_Bot.pdf b/tests/reference/PCB_Bot.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cee2376757c3079b565ea82dae92aa974616e475 GIT binary patch literal 10692 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 F{|7zNT6X{d literal 0 HcmV?d00001 diff --git a/tests/reference/zone-refill-B_Cu.pdf b/tests/reference/zone-refill-B_Cu.pdf new file mode 100644 index 0000000000000000000000000000000000000000..919e9b476502733569cb9113d0e741b092ec9541 GIT binary patch literal 4886 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