diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ed5b45c..0f60dd9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - PCB Print: - Interference between the visible layers in the PRL file and the results when scaling. (#407) + - Problems with images in the WKS (KiCad 5/6) - Diff: - Problems when using an output and no variant specified. - PCB/SCH parity test: diff --git a/Makefile b/Makefile index f1054a23..b28cb761 100644 --- a/Makefile +++ b/Makefile @@ -80,7 +80,7 @@ test_docker_local_1: # Run in the same directory to make the __pycache__ valid # Also change the owner of the files to the current user (we run as root like in GitHub) #docker run --rm -it -v $(CWD):$(CWD) --workdir="$(CWD)" setsoft/kicad_auto_test:latest '/bin/bash' - docker run --rm -v $(CWD):$(CWD) --workdir="$(CWD)" setsoft/kicad_auto_test:latest \ + docker run --rm -v $(CWD):$(CWD) --workdir="$(CWD)" ghcr.io/inti-cmnb/kicad_auto_test:ki5 \ /bin/bash -c "flake8 . --count --statistics ; python3-coverage run -a src/kibot --help-outputs > /dev/null; pytest-3 --log-cli-level debug -k '$(SINGLE_TEST)' --test_dir=output ; $(PY_COV) html; chown -R $(USER_ID):$(GROUP_ID) output/ tests/board_samples/ tests/.config/kiplot/plugins/__pycache__/ tests/test_plot/fake_pcbnew/__pycache__/ tests/.config/kibot/plugins/__pycache__/ .coverage.* htmlcov/" #$(PY_COV) report #x-www-browser htmlcov/index.html @@ -106,6 +106,8 @@ test_docker_local_1_ki7: docker run --rm -v $(CWD):$(CWD) --workdir="$(CWD)" ghcr.io/inti-cmnb/kicad_auto_test:ki7 \ /bin/bash -c "python3-coverage run src/kibot --help-outputs > /dev/null; pytest-3 --log-cli-level debug -k '$(SINGLE_TEST)' --test_dir=output ; $(PY_COV) html; chown -R $(USER_ID):$(GROUP_ID) output/ tests/board_samples/ tests/.config/kiplot/plugins/__pycache__/ tests/test_plot/fake_pcbnew/__pycache__/ tests/.config/kibot/plugins/__pycache__/ .coverage htmlcov/" +t1k7: test_docker_local_1_ki7 + test_docker_local: rm -rf output rm -f tests/.local diff --git a/kibot/gs.py b/kibot/gs.py index 4da3124c..891cd701 100644 --- a/kibot/gs.py +++ b/kibot/gs.py @@ -527,16 +527,21 @@ class GS(object): @staticmethod def iu_to_svg(values, svg_precision): - """ Converts 1 or more values from KiCad internal IUs to the units used for SVGs """ - if not isinstance(values, tuple): - values = [values] + """ Converts 1 or more values from KiCad internal IUs to the units used for SVGs. + For tuples we assume the result is SVG coordinates, for 1 value a scale """ if GS.ki5: - return tuple(map(lambda x: int(round(x*KICAD5_SVG_SCALE)), values)) + if isinstance(values, tuple): + return tuple(map(lambda x: int(round(x*KICAD5_SVG_SCALE)), values)) + return values*KICAD5_SVG_SCALE if GS.ki7: - return tuple(map(GS.to_mm, values)) + if isinstance(values, tuple): + return tuple(map(GS.to_mm, values)) + return GS.to_mm(values) # KiCad 6 mult = 10.0 ** (svg_precision - 6) - return tuple(map(lambda x: int(round(x*mult)), values)) + if isinstance(values, tuple): + return tuple(map(lambda x: int(round(x*mult)), values)) + return values*mult @staticmethod def svg_round(val): diff --git a/kibot/kicad/worksheet.py b/kibot/kicad/worksheet.py index e82caee2..2548ad27 100644 --- a/kibot/kicad/worksheet.py +++ b/kibot/kicad/worksheet.py @@ -417,6 +417,7 @@ class WksBitmap(WksDrawing): p.images.append(e) def add_to_svg(e, svg, p, svg_precision): + # Note: we compute all in KiCad IUs, and then apply a scale for the SVG s = e.data w, h = unpack('>LL', s[16:24]) # For KiCad 300 dpi is 1:1 scale @@ -429,7 +430,7 @@ class WksBitmap(WksDrawing): # KiCad 6 can adjust the precision # The default is 6 and makes 1 KiCad unit == 1 SVG unit # But this isn't supported by browsers (Chrome and Firefox) - scale = GS.iu_to_svg(1.0, svg_precision)[0] + scale = GS.iu_to_svg(1.0, svg_precision) for _ in range(e.repeat): img = ImageElement(io.BytesIO(s), w, h) x = pos.x-round(w/2) diff --git a/tests/data/test_img.kicad_wks b/tests/data/test_img.kicad_wks index 7b4dd332..4d4af17a 100644 --- a/tests/data/test_img.kicad_wks +++ b/tests/data/test_img.kicad_wks @@ -1,7 +1,8 @@ (kicad_wks (version 20210606) (generator pl_editor) (setup (textsize 1.5 1.5)(linewidth 0.15)(textlinewidth 0.15) (left_margin 10)(right_margin 10)(top_margin 10)(bottom_margin 10)) - (rect (name "") (start 110 34) (end 2 2) (comment "rect around the title block") (option page1only)) + (rect (name "") (start 110 34) (end 2 2) (option page1only) (comment "rect around the title block") +) (rect (name "") (start 0 0 ltcorner) (end 0 0) (repeat 2) (incrx 2) (incry 2)) (line (name "") (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50)) (tbtext "1" (name "") (pos 25 1 ltcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50)) @@ -13,25 +14,34 @@ (tbtext "A" (name "") (pos 1 25 rtcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50)) (tbtext "Date: ${ISSUE_DATE}" (name "") (pos 87 6.9)) (line (name "") (start 110 5.5) (end 2 5.5)) - (tbtext "${KICAD_VERSION}" (name "") (pos 109 4.1) (comment "Kicad version")) + (tbtext "No KiCad version to make it reproducible\n" (name "") (pos 109 4.1) (comment "Kicad version") +) (line (name "") (start 110 8.5) (end 2 8.5)) (tbtext "Rev: ${REVISION}" (name "") (pos 24 6.9) (font bold)) - (tbtext "Size: ${PAPER}" (name "") (pos 109 6.9) (comment "Paper format name")) - (tbtext "Id: ${#}/${##}" (name "") (pos 24 4.1) (comment "Sheet id")) + (tbtext "Size: ${PAPER}" (name "") (pos 109 6.9) (comment "Paper format name") +) + (tbtext "Id: ${#}/${##}" (name "") (pos 24 4.1) (comment "Sheet id") +) (line (name "") (start 110 12.5) (end 2 12.5)) (tbtext "Title: ${TITLE}" (name "") (pos 109 10.7) (font (size 2 2) bold)) (tbtext "File: ${FILENAME}" (name "") (pos 109 14.3)) (line (name "") (start 110 18.5) (end 2 18.5)) (tbtext "Sheet: ${SHEETNAME}" (name "") (pos 109 17)) - (tbtext "${COMPANY}" (name "") (pos 109 20) (font bold) (comment "Company name") (option page1only)) - (tbtext "${COMMENT1}" (name "") (pos 109 23) (comment "Comment 0") (option page1only)) - (tbtext "${COMMENT2}" (name "") (pos 109 26) (comment "Comment 1") (option page1only)) - (tbtext "${COMMENT3}" (name "") (pos 109 29) (comment "Comment 2") (option page1only)) - (tbtext "${COMMENT4}" (name "") (pos 109 32) (comment "Comment 3") (option page1only)) + (tbtext "${COMPANY}" (name "") (pos 109 20) (option page1only) (font bold) (comment "Company name") +) + (tbtext "${COMMENT1}" (name "") (pos 109 23) (option page1only) (comment "Comment 0") +) + (tbtext "${COMMENT2}" (name "") (pos 109 26) (option page1only) (comment "Comment 1") +) + (tbtext "${COMMENT3}" (name "") (pos 109 29) (option page1only) (comment "Comment 2") +) + (tbtext "${COMMENT4}" (name "") (pos 109 32) (option page1only) (comment "Comment 3") +) (line (name "") (start 90 8.5) (end 90 5.5)) (line (name "") (start 26 8.5) (end 26 2)) - (rect (name "") (start 157 34) (end 110 2) (comment "rect around the logo") (option page1only)) - (polygon (name "") (pos 133.5002 11.5002) (linewidth 0.00254) (option page1only) + (rect (name "") (start 157 34) (end 110 2) (option page1only) (comment "rect around the logo") +) + (polygon (name "") (pos 133.5002 11.5002) (option page1only) (linewidth 0.00254) (pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932) (xy 19.71802 5.92328) (xy 19.69262 5.83946) (xy 19.66976 5.72262) (xy 19.65198 5.56006) (xy 19.63674 5.33908) (xy 19.6215 5.04952) (xy 19.61134 4.67614) (xy 19.60372 4.20624) (xy 19.5961 3.62712) (xy 19.58848 2.92862) (xy 19.5834 2.09296) (xy 19.57832 1.11252) (xy 19.57578 0.27432) @@ -138,7 +148,7 @@ (xy 15.66418 0.127) (xy 16.06042 0.08382) (xy 16.48714 0.17018) (xy 16.68018 0.254) (xy 17.018 0.42672) (xy 17.018 2.23774) (xy 17.018 4.04876) (xy 17.018 4.04876)) ) - (bitmap (name "") (pos 131.5022 27.0072) (scale 0.75) (option page1only) + (bitmap (name "") (pos 131.5022 27.0072) (option page1only) (scale 0.75) (pngdata (data "89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 01 72 00 00 00 C8 08 06 00 00 00 F5 02 6A ") (data "AE 00 00 00 04 73 42 49 54 08 08 08 08 7C 08 64 88 00 00 00 09 70 48 59 73 00 00 2B 5C 00 00 2B ") diff --git a/tests/reference/5_1_7/light_control-F_Cu_color.png b/tests/reference/5_1_7/light_control-F_Cu_color.png new file mode 100644 index 00000000..e1d7e81c Binary files /dev/null and b/tests/reference/5_1_7/light_control-F_Cu_color.png differ diff --git a/tests/reference/6_0_8/light_control-F_Cu_color.png b/tests/reference/6_0_8/light_control-F_Cu_color.png new file mode 100644 index 00000000..b46f1637 Binary files /dev/null and b/tests/reference/6_0_8/light_control-F_Cu_color.png differ diff --git a/tests/reference/7_0_0/light_control-F_Cu_color.png b/tests/reference/7_0_0/light_control-F_Cu_color.png new file mode 100644 index 00000000..bfada78b Binary files /dev/null and b/tests/reference/7_0_0/light_control-F_Cu_color.png differ diff --git a/tests/test_plot/test_print_pcb.py b/tests/test_plot/test_print_pcb.py index d6ff0774..605db265 100644 --- a/tests/test_plot/test_print_pcb.py +++ b/tests/test_plot/test_print_pcb.py @@ -128,6 +128,7 @@ def test_pcb_print_simple_1(test_dir): ctx.run() ctx.expect_out_file(prj+'-F_Cu_mono.png') ctx.expect_out_file(prj+'-F_Cu_color.png') + ctx.compare_image(prj+'-F_Cu_color.png', height='100%') ctx.expect_out_file(prj+'-assembly_page_01.eps') ctx.expect_out_file(prj+'-assembly_page_01.svg') ctx.expect_out_file(prj+'-assembly.ps')