diff --git a/kibot/gs.py b/kibot/gs.py index b3ba0bfd..f8c973c6 100644 --- a/kibot/gs.py +++ b/kibot/gs.py @@ -14,6 +14,7 @@ except ImportError: pass from datetime import datetime, date from sys import exit +from shutil import copy2 from .misc import EXIT_BAD_ARGS, W_DATEFORMAT, KICAD_VERSION_5_99, W_UNKVAR from .log import get_logger @@ -326,6 +327,16 @@ class GS(object): logger.error('No SCH file found (*.sch), use -e to specify one.') exit(EXIT_BAD_ARGS) + @staticmethod + def copy_project(pcb_name): + pro_name = GS.pro_file + if pro_name is None or not os.path.isfile(pro_name): + return None + pro_copy = pcb_name.replace('.kicad_pcb', GS.pro_ext) + logger.debug('Copying project `{}` to `{}`'.format(pro_name, pro_copy)) + copy2(pro_name, pro_copy) + return pro_copy + @staticmethod def load_board(): """ Will be repplaced by kiplot.py """ diff --git a/kibot/out_any_pcb_print.py b/kibot/out_any_pcb_print.py index 0c21b7f4..4aae0b82 100644 --- a/kibot/out_any_pcb_print.py +++ b/kibot/out_any_pcb_print.py @@ -4,7 +4,7 @@ # License: GPL-3.0 # Project: KiBot (formerly KiPlot) import os -from shutil import copy2, rmtree +from shutil import rmtree from tempfile import mkdtemp from .pre_base import BasePreFlight from .error import KiPlotConfigurationError @@ -68,16 +68,6 @@ class Any_PCB_PrintOptions(VariantOptions): super().config(parent) self._drill_marks = Any_PCB_PrintOptions._drill_marks_map[self._drill_marks] - @staticmethod - def _copy_project(fname): - pro_name = GS.pro_file - if pro_name is None or not os.path.isfile(pro_name): - return None - pro_copy = fname.replace('.kicad_pcb', GS.pro_ext) - logger.debug('Copying project `{}` to `{}`'.format(pro_name, pro_copy)) - copy2(pro_name, pro_copy) - return pro_copy - def filter_components(self, board, force_copy): if not self._comps and not force_copy: return GS.pcb_file, None @@ -92,7 +82,7 @@ class Any_PCB_PrintOptions(VariantOptions): logger.debug('Storing filtered PCB to `{}`'.format(fname)) GS.board.Save(fname) # Copy the project: avoids warnings, could carry some options - self._copy_project(fname) + GS.copy_project(fname) self.uncross_modules(board, comps_hash) self.restore_paste_and_glue(board, comps_hash) if self.hide_excluded: diff --git a/kibot/out_base_3d.py b/kibot/out_base_3d.py index 806a87ed..b61d07b1 100644 --- a/kibot/out_base_3d.py +++ b/kibot/out_base_3d.py @@ -187,8 +187,7 @@ class Base3DOptions(VariantOptions): fname = f.name logger.debug('Storing modified PCB to `{}`'.format(fname)) GS.board.Save(fname) - with open(fname.replace('.kicad_pcb', GS.pro_ext), 'wt') as f: - pass + GS.copy_project(fname) return fname def apply_variant_aspect(self, enable=False): diff --git a/tests/board_samples/kicad_6/kibom-variant_3.kicad_sch b/tests/board_samples/kicad_6/kibom-variant_3.kicad_sch index 6e42cfb4..88656f91 100644 --- a/tests/board_samples/kicad_6/kibom-variant_3.kicad_sch +++ b/tests/board_samples/kicad_6/kibom-variant_3.kicad_sch @@ -229,6 +229,9 @@ (property "Config" "T1" (id 4) (at 63.5 43.18 0) (effects (font (size 1.27 1.27)) hide) ) + (property "default:_3D_model" "${KICAD6_3DMODEL_DIR}/Resistor_SMD.3dshapes/R_2010_5025Metric.wrl" (id 4) (at 63.5 43.18 0) + (effects (font (size 1.27 1.27)) hide) + ) (pin "1" (uuid c70d9ef3-bfeb-47e0-a1e1-9aeba3da7864)) (pin "2" (uuid 4e3d7c0d-12e3-42f2-b944-e4bcdbbcac2a)) ) diff --git a/tests/board_samples/kicad_6/kibom-variant_3_txt.kicad_pcb b/tests/board_samples/kicad_6/kibom-variant_3_txt.kicad_pcb new file mode 100644 index 00000000..538b4af2 --- /dev/null +++ b/tests/board_samples/kicad_6/kibom-variant_3_txt.kicad_pcb @@ -0,0 +1,325 @@ +(kicad_pcb (version 20211014) (generator pcbnew) + + (general + (thickness 1.6) + ) + + (paper "A4") + (layers + (0 "F.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 + (pad_to_mask_clearance 0) + (aux_axis_origin 139.89 89.63) + (pcbplotparams + (layerselection 0x00010fc_ffffffff) + (disableapertmacros false) + (usegerberextensions false) + (usegerberattributes true) + (usegerberadvancedattributes true) + (creategerberjobfile true) + (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 "") + (net 1 "Net-(C1-Pad2)") + (net 2 "Net-(C1-Pad1)") + (net 3 "Net-(C2-Pad2)") + (net 4 "Net-(C2-Pad1)") + (net 5 "Net-(R1-Pad2)") + (net 6 "Net-(R1-Pad1)") + (net 7 "Net-(R2-Pad2)") + (net 8 "Net-(R2-Pad1)") + + (footprint "Capacitor_SMD:C_0805_2012Metric" (layer "F.Cu") + (tedit 5B36C52B) (tstamp 00000000-0000-0000-0000-00005f496a58) + (at 137.16 87.63) + (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 "/00000000-0000-0000-0000-00005f43bec2") + (attr smd) + (fp_text reference "C1" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp a17658ae-6bb1-4adb-b6b3-ef4c836b3104) + ) + (fp_text value "1nF" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 7a3ff137-c90e-4755-bfaa-61ac4559c1c4) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp 610d3dab-96f1-467e-a8bb-982e1a5e28b3) + ) + (fp_circle (center 0 0) (end 0.4 0) (layer "F.Adhes") (width 0.1) (fill none) (tstamp b95c9af6-d571-4ff7-aa89-c20d6a5096f9)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer "F.SilkS") (width 0.12) (tstamp 535fb667-3ef5-4c7d-8b0e-f211f4b2598f)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer "F.SilkS") (width 0.12) (tstamp 877d03b3-2e6b-4283-8774-f9a3972e5d1b)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 179b1cfd-2c85-4f43-a5f6-868ca3ed1710)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 68d5b6f4-dbf5-4aa8-9240-b1053c3090c9)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp 7b599469-c7d3-440a-82c3-3fb41a9ddc82)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp f815ff74-24a8-400f-8ca4-b5af8d9ae8aa)) + (fp_line (start 1 -0.6) (end 1 0.6) (layer "F.Fab") (width 0.1) (tstamp 09f8738f-4304-4557-bcc0-63f51e2bb272)) + (fp_line (start -1 0.6) (end -1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 53842113-2eed-4e07-83f9-cf62ab0b8b6b)) + (fp_line (start 1 0.6) (end -1 0.6) (layer "F.Fab") (width 0.1) (tstamp 6052d8c7-51a2-4347-a770-b463e8004a6a)) + (fp_line (start -1 -0.6) (end 1 -0.6) (layer "F.Fab") (width 0.1) (tstamp ffd4eef0-200f-473f-98ef-875ae2710211)) + (pad "1" smd roundrect locked (at -0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 2 "Net-(C1-Pad1)") (tstamp 0396208e-a401-46d6-a9d6-4fc5f29a991e)) + (pad "2" smd roundrect locked (at 0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 1 "Net-(C1-Pad2)") (tstamp c0e176e6-2b65-4e42-ab43-deafd4b2725e)) + (model "${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.step" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + (model "${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.step" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Capacitor_SMD:C_0805_2012Metric" (layer "F.Cu") + (tedit 5B36C52B) (tstamp 00000000-0000-0000-0000-00005f496a69) + (at 137.16 90.58) + (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 "/00000000-0000-0000-0000-00005f43ce1c") + (attr through_hole) + (fp_text reference "C2" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 4de8c707-0d2d-4070-9fe2-95aba800da97) + ) + (fp_text value "1000 pF" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 1aadc258-dafc-428e-a9e1-059c1ee3bc24) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp 210883df-9124-4ab7-9e4d-1d5de0e14436) + ) + (fp_circle (center 0 0) (end 0.4 0) (layer "F.Adhes") (width 0.1) (fill none) (tstamp 565df081-bb0e-4272-889c-8883a6cf574f)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer "F.SilkS") (width 0.12) (tstamp b38aac83-d426-48eb-8136-075909ca0d4a)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer "F.SilkS") (width 0.12) (tstamp f39138bd-8e9c-4749-b1f6-ad562a76c547)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp 446b00b9-49fb-4d19-99d8-f7dfbf5ba90e)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 8cd966ec-936a-4a2a-97a1-c162eb60f3e5)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp c3bee8b2-8413-4ed0-8a3c-b25a7b938428)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp cfca8046-57f9-4bad-b147-0e4cb641e71b)) + (fp_line (start -1 0.6) (end -1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 55b19cfa-b606-4080-b04d-dd557256f1ba)) + (fp_line (start 1 -0.6) (end 1 0.6) (layer "F.Fab") (width 0.1) (tstamp 72ae4549-fa18-4dbf-93bb-1305330c71a6)) + (fp_line (start -1 -0.6) (end 1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 7fc277fd-f98e-4d8c-95fe-9dde488db0c6)) + (fp_line (start 1 0.6) (end -1 0.6) (layer "F.Fab") (width 0.1) (tstamp ff6fa4d8-6d22-441b-96c5-4b33ac32fe1e)) + (pad "1" smd roundrect locked (at -0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 4 "Net-(C2-Pad1)") (tstamp bb444f3e-7d1f-4c82-8eb7-24fddaab885c)) + (pad "2" smd roundrect locked (at 0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 3 "Net-(C2-Pad2)") (tstamp 378300c0-8cef-4c8a-8338-6f66311fc3c2)) + (model "${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.step" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") + (tedit 5B36C52B) (tstamp 00000000-0000-0000-0000-00005f496a8b) + (at 141.57 90.58) + (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 "/00000000-0000-0000-0000-00005f43d4bb") + (attr through_hole) + (fp_text reference "R2" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp a16bb11f-1ae1-452b-ab06-c0c0c5550581) + ) + (fp_text value "1000" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 8d62e4b1-2b78-479f-8bd0-b822c934ecc5) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp e7acb238-433c-4d0c-9ac5-aada44ae87c6) + ) + (fp_circle (center 0 0) (end 0.4 0) (layer "F.Adhes") (width 0.1) (fill none) (tstamp 5e9a445e-d281-40e5-aa88-5a4ca0015602)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer "F.SilkS") (width 0.12) (tstamp 2f751c07-db61-4fb2-a551-ac48ab965e3e)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer "F.SilkS") (width 0.12) (tstamp 77b6adbd-4ea1-4b55-ac32-3d73199bfa37)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp 1c18e8fe-20b5-44a9-abff-9239aded7a2a)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 321cd77f-700d-4ffc-989c-fc5e37251c36)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp bcb3d769-6147-42c5-ad88-f725f9c8e563)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp ff0028a2-d2a5-403f-bb0c-e9daef57d7dd)) + (fp_line (start 1 -0.6) (end 1 0.6) (layer "F.Fab") (width 0.1) (tstamp 10ce8a66-bf48-418c-bc77-95fd17a79c81)) + (fp_line (start -1 0.6) (end -1 -0.6) (layer "F.Fab") (width 0.1) (tstamp a40020d7-ffd1-4386-b107-b0101c1b0ce5)) + (fp_line (start 1 0.6) (end -1 0.6) (layer "F.Fab") (width 0.1) (tstamp c22ae2e3-a19d-4183-bd18-87d52e335b80)) + (fp_line (start -1 -0.6) (end 1 -0.6) (layer "F.Fab") (width 0.1) (tstamp df843824-3ab8-4db7-a313-5cb6e638d41e)) + (pad "1" smd roundrect locked (at -0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 8 "Net-(R2-Pad1)") (tstamp d82b2b32-b91d-4cb1-86e2-007ccd994e78)) + (pad "2" smd roundrect locked (at 0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 7 "Net-(R2-Pad2)") (tstamp ba5049a8-ad9a-49c4-997a-84e5c7fdd3d9)) + (model "${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.step" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") + (tedit 5B36C52B) (tstamp 00000000-0000-0000-0000-00005f503c2a) + (at 141.57 87.63) + (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 "/00000000-0000-0000-0000-00005f43d144") + (attr smd) + (fp_text reference "R1" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp b6a444b7-f4ce-419c-89ef-2cfd5db7a945) + ) + (fp_text value "1k" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 855c640f-0598-43af-83dd-404d817a88f8) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp 6d891518-8781-400e-8095-ad01983a9315) + ) + (fp_circle (center 0 0) (end 0.4 0) (layer "F.Adhes") (width 0.1) (fill none) (tstamp b6bf2be9-d47d-4982-baf3-f6485d5fc2fa)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer "F.SilkS") (width 0.12) (tstamp 3f82faa0-e76b-430f-9a3e-124be5e074a2)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer "F.SilkS") (width 0.12) (tstamp 47987321-48a0-4e03-bdbc-dad9ea6b9662)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 2320c397-f9b3-417f-93bc-7684581ff540)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp 76d0d3ec-964c-4d0d-9433-cb608686da84)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp b02a9d87-40a3-4d0f-ba46-740e56a66166)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp eff8f9e3-70f6-43f8-b054-b752e97ce246)) + (fp_line (start 1 0.6) (end -1 0.6) (layer "F.Fab") (width 0.1) (tstamp 010c6a20-5856-4bad-b771-0fe13323a108)) + (fp_line (start -1 0.6) (end -1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 5d794526-beca-4e0a-b441-f09f1366536c)) + (fp_line (start 1 -0.6) (end 1 0.6) (layer "F.Fab") (width 0.1) (tstamp a32c49f6-0990-4f13-ad49-4db52adad6aa)) + (fp_line (start -1 -0.6) (end 1 -0.6) (layer "F.Fab") (width 0.1) (tstamp b953df13-a55a-4953-a0fa-5fdc226f66e6)) + (pad "1" smd roundrect locked (at -0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 6 "Net-(R1-Pad1)") (tstamp 3fbca69d-47ae-4671-b766-56ad2b10b635)) + (pad "2" smd roundrect locked (at 0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 5 "Net-(R1-Pad2)") (tstamp 364ef61c-3c7f-49af-92ac-c9cb1c72df90)) + (model "${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.step" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_SMD:R_0805_2012Metric" (layer "F.Cu") + (tedit 5B36C52B) (tstamp 00000000-0000-0000-0000-00005f503c4a) + (at 148.555 89.154) + (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 "/00000000-0000-0000-0000-00005f43d144") + (attr smd) + (fp_text reference "R3" (at 0 -1.65) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 1ebe2927-938f-48bf-a28f-b1341cb4eb92) + ) + (fp_text value "1k" (at 0 1.65) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 6639c313-6496-4cf4-b2f1-d7ac22590bf8) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp 760a8cec-d133-4ac1-9b68-2a482625bd1f) + ) + (fp_circle (center 0 0) (end 0.4 0) (layer "F.Adhes") (width 0.1) (fill none) (tstamp e5b325c5-598d-4f6b-a413-d3a79eb95cbb)) + (fp_line (start -0.258578 0.71) (end 0.258578 0.71) (layer "F.SilkS") (width 0.12) (tstamp 02c4cbf5-9900-4c08-981d-8f9deb435440)) + (fp_line (start -0.258578 -0.71) (end 0.258578 -0.71) (layer "F.SilkS") (width 0.12) (tstamp 35b37184-c1db-4605-9bcd-675b2c4b2158)) + (fp_line (start 1.68 0.95) (end -1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 2ad9142c-8923-4abd-b90a-c8ae2f7c9d80)) + (fp_line (start -1.68 -0.95) (end 1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp 885792c5-6361-4eb1-8fbb-77d0c940bafc)) + (fp_line (start -1.68 0.95) (end -1.68 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp ab11510d-aa5c-41d7-a0b9-335045f11724)) + (fp_line (start 1.68 -0.95) (end 1.68 0.95) (layer "F.CrtYd") (width 0.05) (tstamp e1cd1c41-7c11-498a-9141-5d74c0f912c2)) + (fp_line (start -1 0.6) (end -1 -0.6) (layer "F.Fab") (width 0.1) (tstamp 3e58ad13-421d-4712-a3a6-baa45f7a50d9)) + (fp_line (start -1 -0.6) (end 1 -0.6) (layer "F.Fab") (width 0.1) (tstamp c9abcf12-7a33-4d52-8f7f-751243a70726)) + (fp_line (start 1 -0.6) (end 1 0.6) (layer "F.Fab") (width 0.1) (tstamp d540225e-b626-44df-a06e-d1355b1826a9)) + (fp_line (start 1 0.6) (end -1 0.6) (layer "F.Fab") (width 0.1) (tstamp d7ea9ea0-5b1e-4200-8463-6407ba1b21a5)) + (pad "1" smd roundrect locked (at -0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 6 "Net-(R1-Pad1)") (tstamp 7c75769f-18a4-4d0c-9703-f047e8f5ab1d)) + (pad "2" smd roundrect locked (at 0.9375 0) (size 0.975 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 5 "Net-(R1-Pad2)") (tstamp 2b8f6242-95b2-4ff4-8124-8f1c2a171f0a)) + (model "${KISYS3DMOD}/Resistor_SMD.3dshapes/R_0805_2012Metric.step" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Fiducial:Fiducial_0.5mm_Mask1mm" (layer "F.Cu") + (tedit 5C18CB26) (tstamp 00000000-0000-0000-0000-00005f57ee4f) + (at 139.6746 82.9564) + (descr "Circular Fiducial, 0.5mm bare copper, 1mm soldermask opening (Level C)") + (tags "fiducial") + (path "/00000000-0000-0000-0000-00005f57eddb") + (attr exclude_from_pos_files exclude_from_bom) + (fp_text reference "FID1" (at 0 -1.5) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 7b643210-edc8-42fc-ae01-131c3f64b382) + ) + (fp_text value "Fiducial" (at 0 1.5) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 0efa37b2-af85-4c04-a3a9-67fbb3deae71) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.2 0.2) (thickness 0.04))) + (tstamp af5353c5-81fd-4093-969d-2b7178673638) + ) + (fp_circle (center 0 0) (end 0.75 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp bd1aa9f8-fd9c-4c73-ad79-67b18a6317f1)) + (fp_circle (center 0 0) (end 0.5 0) (layer "F.Fab") (width 0.1) (fill none) (tstamp b2736e48-774d-475e-b008-2b03645f9be3)) + (pad "" smd circle locked (at 0 0) (size 0.5 0.5) (layers "F.Cu" "F.Mask") + (solder_mask_margin 0.25) (clearance 0.25) (tstamp 1dde19d5-99c8-4d8b-8f79-2b55c7e0cf67)) + ) + + (gr_line (start 133.35 80.4) (end 133.35 93.98) (layer "Edge.Cuts") (width 0.1) (tstamp 00000000-0000-0000-0000-00005f496acc)) + (gr_line (start 146.05 80.4) (end 133.35 80.4) (layer "Edge.Cuts") (width 0.1) (tstamp 00000000-0000-0000-0000-00005f57eeaf)) + (gr_line (start 146.05 93.98) (end 146.05 80.4) (layer "Edge.Cuts") (width 0.1) (tstamp 123e2e63-e5a2-438b-a092-e86abe433be1)) + (gr_line (start 133.35 93.98) (end 146.05 93.98) (layer "Edge.Cuts") (width 0.1) (tstamp db70ada3-b7ba-4225-9c00-3f7474e61b64)) + (gr_text "${text}" (at 139 92.5) (layer "F.SilkS") (tstamp b873bc5d-a9af-4bd9-afcb-87ce4d417120) + (effects (font (size 1 1.5) (thickness 0.25))) + ) + (gr_text "Bogus component.\nNot in schematic." (at 161.163 89.281) (layer "Cmts.User") (tstamp 5f5ef4dd-f4ae-40a8-adf2-0ac2296d03fa) + (effects (font (size 1.5 1.5) (thickness 0.3))) + ) + +) diff --git a/tests/board_samples/kicad_6/kibom-variant_3_txt.kicad_pro b/tests/board_samples/kicad_6/kibom-variant_3_txt.kicad_pro new file mode 100644 index 00000000..ccb29b75 --- /dev/null +++ b/tests/board_samples/kicad_6/kibom-variant_3_txt.kicad_pro @@ -0,0 +1,176 @@ +{ + "board": { + "design_settings": { + "defaults": { + "board_outline_line_width": 0.049999999999999996, + "copper_line_width": 0.19999999999999998, + "copper_text_italic": false, + "copper_text_size_h": 1.5, + "copper_text_size_v": 1.5, + "copper_text_thickness": 0.3, + "copper_text_upright": false, + "courtyard_line_width": 0.049999999999999996, + "dimension_precision": 4, + "dimension_units": 3, + "dimensions": { + "arrow_length": 1270000, + "extension_offset": 500000, + "keep_text_aligned": true, + "suppress_zeroes": false, + "text_position": 0, + "units_format": 1 + }, + "fab_line_width": 0.09999999999999999, + "fab_text_italic": false, + "fab_text_size_h": 1.0, + "fab_text_size_v": 1.0, + "fab_text_thickness": 0.15, + "fab_text_upright": false, + "other_line_width": 0.09999999999999999, + "other_text_italic": false, + "other_text_size_h": 1.0, + "other_text_size_v": 1.0, + "other_text_thickness": 0.15, + "other_text_upright": false, + "pads": { + "drill": 0.762, + "height": 1.524, + "width": 1.524 + }, + "silk_line_width": 0.12, + "silk_text_italic": false, + "silk_text_size_h": 1.0, + "silk_text_size_v": 1.0, + "silk_text_thickness": 0.15, + "silk_text_upright": false, + "zones": { + "45_degree_only": false, + "min_clearance": 0.508 + } + }, + "diff_pair_dimensions": [], + "drc_exclusions": [], + "meta": { + "version": 2 + }, + "rule_severities": { + "annular_width": "error", + "clearance": "error", + "copper_edge_clearance": "error", + "courtyards_overlap": "error", + "diff_pair_gap_out_of_range": "error", + "diff_pair_uncoupled_length_too_long": "error", + "drill_out_of_range": "error", + "duplicate_footprints": "warning", + "extra_footprint": "warning", + "footprint_type_mismatch": "error", + "hole_clearance": "error", + "hole_near_hole": "error", + "invalid_outline": "error", + "item_on_disabled_layer": "error", + "items_not_allowed": "error", + "length_out_of_range": "error", + "malformed_courtyard": "error", + "microvia_drill_out_of_range": "error", + "missing_courtyard": "ignore", + "missing_footprint": "warning", + "net_conflict": "warning", + "npth_inside_courtyard": "ignore", + "padstack": "error", + "pth_inside_courtyard": "ignore", + "shorting_items": "error", + "silk_over_copper": "warning", + "silk_overlap": "warning", + "skew_out_of_range": "error", + "through_hole_pad_without_hole": "error", + "too_many_vias": "error", + "track_dangling": "warning", + "track_width": "error", + "tracks_crossing": "error", + "unconnected_items": "error", + "unresolved_variable": "error", + "via_dangling": "warning", + "zone_has_empty_net": "error", + "zones_intersect": "error" + }, + "rules": { + "allow_blind_buried_vias": false, + "allow_microvias": false, + "max_error": 0.005, + "min_clearance": 0.0, + "min_copper_edge_clearance": 0.01, + "min_hole_clearance": 0.25, + "min_hole_to_hole": 0.25, + "min_microvia_diameter": 0.19999999999999998, + "min_microvia_drill": 0.09999999999999999, + "min_silk_clearance": 0.0, + "min_through_hole_diameter": 0.3, + "min_track_width": 0.19999999999999998, + "min_via_annular_width": 0.049999999999999996, + "min_via_diameter": 0.39999999999999997, + "use_height_for_length_calcs": true + }, + "track_widths": [], + "via_dimensions": [], + "zones_allow_external_fillets": false, + "zones_use_no_outline": true + }, + "layer_presets": [] + }, + "boards": [], + "cvpcb": { + "equivalence_files": [] + }, + "libraries": { + "pinned_footprint_libs": [], + "pinned_symbol_libs": [] + }, + "meta": { + "filename": "kibom-variant_3_txt.kicad_pro", + "version": 1 + }, + "net_settings": { + "classes": [ + { + "bus_width": 12.0, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "Default", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.25, + "via_diameter": 0.8, + "via_drill": 0.4, + "wire_width": 6.0 + } + ], + "meta": { + "version": 2 + }, + "net_colors": null + }, + "pcbnew": { + "last_paths": { + "gencad": "", + "idf": "", + "netlist": "", + "specctra_dsn": "", + "step": "", + "vrml": "" + }, + "page_layout_descr_file": "" + }, + "schematic": { + "legacy_lib_dir": "", + "legacy_lib_list": [] + }, + "sheets": [], + "text_variables": { + "text": "Test" + } +} \ No newline at end of file diff --git a/tests/board_samples/kicad_6/kibom-variant_3_txt.kicad_sch b/tests/board_samples/kicad_6/kibom-variant_3_txt.kicad_sch new file mode 120000 index 00000000..eb88def2 --- /dev/null +++ b/tests/board_samples/kicad_6/kibom-variant_3_txt.kicad_sch @@ -0,0 +1 @@ +kibom-variant_3.kicad_sch \ No newline at end of file diff --git a/tests/reference/5_1_6/kibom-variant_3-3D_top.png b/tests/reference/5_1_6/kibom-variant_3-3D_top.png new file mode 100644 index 00000000..eca53e0b Binary files /dev/null and b/tests/reference/5_1_6/kibom-variant_3-3D_top.png differ diff --git a/tests/reference/5_1_7/kibom-variant_3-3D_top.png b/tests/reference/5_1_7/kibom-variant_3-3D_top.png new file mode 120000 index 00000000..829534b7 --- /dev/null +++ b/tests/reference/5_1_7/kibom-variant_3-3D_top.png @@ -0,0 +1 @@ +../5_1_6/kibom-variant_3-3D_top.png \ No newline at end of file diff --git a/tests/reference/6_0_2/kibom-variant_3_txt-3D_top.png b/tests/reference/6_0_2/kibom-variant_3_txt-3D_top.png new file mode 100644 index 00000000..668d418f Binary files /dev/null and b/tests/reference/6_0_2/kibom-variant_3_txt-3D_top.png differ diff --git a/tests/test_plot/test_step.py b/tests/test_plot/test_step.py index d121c052..8ae1f644 100644 --- a/tests/test_plot/test_step.py +++ b/tests/test_plot/test_step.py @@ -72,8 +72,12 @@ def test_step_variant_1(test_dir): def test_render_3d_variant_1(test_dir): prj = 'kibom-variant_3' + if context.ki6(): + prj += '_txt' ctx = context.TestContext(test_dir, 'test_render_3d_variant_1', prj, 'render_3d_variant_1', '') - ctx.run(extra_debug=True) + ctx.run() # Check all outputs are there - ctx.expect_out_file(prj+'-3D_top.png') + name = prj+'-3D_top.png' + ctx.expect_out_file(name) + ctx.compare_image(name, fuzz='50%', tol=100) ctx.clean_up(keep_project=True) diff --git a/tests/utils/context.py b/tests/utils/context.py index 290f1b40..5d353a9a 100644 --- a/tests/utils/context.py +++ b/tests/utils/context.py @@ -433,7 +433,7 @@ class TestContext(object): logging.debug(msg+' OK') # logging.debug(' '+m.group(0)) - def compare_image(self, image, reference=None, diff='diff.png', ref_out_dir=False, fuzz='5%'): + def compare_image(self, image, reference=None, diff='diff.png', ref_out_dir=False, fuzz='5%', tol=0): """ For images and single page PDFs """ if reference is None: reference = image @@ -464,7 +464,7 @@ class TestContext(object): '-colorspace', 'RGB', self.get_out_path(diff)] logging.debug('Comparing images with: '+usable_cmd(cmd)) - res = subprocess.check_output(cmd, stderr=subprocess.STDOUT) + res = subprocess.run(cmd, stderr=subprocess.STDOUT, check=(tol == 0), stdout=subprocess.PIPE).stdout # m = re.match(r'([\d\.e-]+) \(([\d\.e-]+)\)', res.decode()) # assert m # logging.debug('MSE={} ({})'.format(m.group(1), m.group(2))) @@ -474,7 +474,7 @@ class TestContext(object): os.remove(png_ref) if png_image: os.remove(png_image) - assert ae == 0 + assert ae <= tol def compare_pdf(self, gen, reference=None, diff='diff-{}.png'): """ For multi-page PDFs """ diff --git a/tests/yaml_samples/render_3d_variant_1.kibot.yaml b/tests/yaml_samples/render_3d_variant_1.kibot.yaml index 76e97556..e2f132a8 100644 --- a/tests/yaml_samples/render_3d_variant_1.kibot.yaml +++ b/tests/yaml_samples/render_3d_variant_1.kibot.yaml @@ -25,3 +25,4 @@ outputs: type: render_3d options: variant: default + ray_tracing: true