Added support for dependency download to pcbdraw
This commit is contained in:
parent
3440198cd7
commit
6a1372c574
|
|
@ -90,6 +90,8 @@ KICOST_SUBMODULE = '../submodules/KiCost/src/kicost'
|
|||
KICAD2STEP = 'kicad2step_do'
|
||||
PCBDRAW = 'pcbdraw'
|
||||
URL_PCBDRAW = 'https://github.com/INTI-CMNB/pcbdraw'
|
||||
# 0.9.0 implements KiCad 6 support
|
||||
PCBDRAW_MIN_VERSION = (0, 9, 0)
|
||||
EXAMPLE_CFG = 'example_template.kibot.yaml'
|
||||
AUTO_SCALE = 0
|
||||
PANDOC = 'pandoc'
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import re
|
|||
import os
|
||||
import subprocess
|
||||
from pcbnew import B_Cu, F_Cu, FromMM, IsCopperLayer, PLOT_CONTROLLER, PLOT_FORMAT_SVG, wxSize, F_Mask, B_Mask, ZONE_FILLER
|
||||
from shutil import rmtree, which
|
||||
from shutil import rmtree
|
||||
from tempfile import NamedTemporaryFile, mkdtemp
|
||||
from .svgutils.transform import fromstring, RectElement, fromfile
|
||||
from .error import KiPlotConfigurationError
|
||||
|
|
@ -22,9 +22,9 @@ from .kicad.worksheet import Worksheet, WksError
|
|||
from .kicad.config import KiConf
|
||||
from .kicad.v5_sch import SchError
|
||||
from .kicad.pcb import PCB
|
||||
from .misc import (CMD_PCBNEW_PRINT_LAYERS, URL_PCBNEW_PRINT_LAYERS, PDF_PCB_PRINT, MISSING_TOOL, W_PDMASKFAIL,
|
||||
KICAD5_SVG_SCALE, W_MISSTOOL, ToolDependency, ToolDependencyRole, TRY_INSTALL_CHECK, rsvg_dependency,
|
||||
gs_dependency, convert_dependency, pcbdraw_dependency)
|
||||
from .misc import (CMD_PCBNEW_PRINT_LAYERS, URL_PCBNEW_PRINT_LAYERS, PDF_PCB_PRINT, W_PDMASKFAIL, KICAD5_SVG_SCALE,
|
||||
W_MISSTOOL, ToolDependency, ToolDependencyRole, rsvg_dependency, gs_dependency, convert_dependency,
|
||||
pcbdraw_dependency, PCBDRAW_MIN_VERSION)
|
||||
from .kiplot import check_script, exec_with_retry, add_extra_options
|
||||
from .registrable import RegDependency
|
||||
from .create_pdf import create_pdf_from_pages
|
||||
|
|
@ -47,7 +47,7 @@ rsvg_dep = rsvg_dependency('pcb_print', rsvg_downloader, roles=ToolDependencyRol
|
|||
gs_dep = gs_dependency('pcb_print', gs_downloader, roles=ToolDependencyRole(desc='Create PS files'))
|
||||
convert_dep = convert_dependency('pcb_print', convert_downloader, roles=ToolDependencyRole(desc='Create monochrome prints'))
|
||||
pcbdraw_dep = pcbdraw_dependency('pcb_print', None, roles=ToolDependencyRole(desc='Create realistic solder masks',
|
||||
version=(0, 9, 0)))
|
||||
version=PCBDRAW_MIN_VERSION))
|
||||
RegDependency.register(rsvg_dep)
|
||||
RegDependency.register(gs_dep)
|
||||
RegDependency.register(convert_dep)
|
||||
|
|
@ -726,13 +726,10 @@ class PCB_PrintOptions(VariantOptions):
|
|||
return
|
||||
logger.debug('- Plotting realistic solder mask using PcbDraw')
|
||||
# Check PcbDraw is available
|
||||
if which('pcbdraw') is None:
|
||||
logger.error('`pcbdraw` not installed, needed for `realistic_solder_mask`')
|
||||
logger.error(TRY_INSTALL_CHECK)
|
||||
exit(MISSING_TOOL)
|
||||
pcbdraw_command = check_tool(pcbdraw_dep, fatal=True)
|
||||
# Run PcbDraw to make the heavy work (find the Edge.Cuts path and create masks)
|
||||
pcbdraw_file = os.path.join(temp_dir, out_file.replace('.svg', '-pcbdraw.svg'))
|
||||
cmd = ['pcbdraw', '--no-warn-back', '-f', '']
|
||||
cmd = [pcbdraw_command, '--no-warn-back', '-f', '']
|
||||
if id == B_Mask:
|
||||
cmd.append('-b')
|
||||
cmd.extend([GS.pcb_file, pcbdraw_file])
|
||||
|
|
@ -995,7 +992,7 @@ class PCB_Print(BaseOutput): # noqa: F821
|
|||
extra = {la._id for la in Layer.solve(EXTRA_LAYERS)}
|
||||
disabled = set()
|
||||
# Check we can use PcbDraw
|
||||
realistic_solder_mask = which('pcbdraw') is not None
|
||||
realistic_solder_mask = check_tool(pcbdraw_dep) is not None
|
||||
if not realistic_solder_mask:
|
||||
logger.warning(W_MISSTOOL+'Missing PcbDraw tool, disabling `realistic_solder_mask`')
|
||||
# Check we can convert SVGs
|
||||
|
|
|
|||
|
|
@ -7,24 +7,21 @@ import os
|
|||
from tempfile import NamedTemporaryFile
|
||||
# Here we import the whole module to make monkeypatch work
|
||||
import subprocess
|
||||
from .misc import (PCBDRAW, PCBDRAW_ERR, URL_PCBDRAW, W_AMBLIST, W_UNRETOOL, W_USESVG2, W_USEIMAGICK, PCB_MAT_COLORS,
|
||||
from .misc import (PCBDRAW_ERR, W_AMBLIST, W_UNRETOOL, W_USESVG2, W_USEIMAGICK, PCB_MAT_COLORS, PCBDRAW_MIN_VERSION,
|
||||
PCB_FINISH_COLORS, SOLDER_COLORS, SILK_COLORS, ToolDependencyRole, rsvg_dependency, convert_dependency,
|
||||
pcbdraw_dependency)
|
||||
from .kiplot import check_script
|
||||
from .registrable import RegDependency
|
||||
from .gs import GS
|
||||
from .optionable import Optionable
|
||||
from .out_base import VariantOptions
|
||||
from .dep_downloader import check_tool, rsvg_downloader, convert_downloader
|
||||
from .dep_downloader import check_tool, rsvg_downloader, convert_downloader, pytool_downloader
|
||||
from .macros import macros, document, output_class # noqa: F401
|
||||
from . import log
|
||||
|
||||
logger = log.get_logger()
|
||||
# 0.9.0 implements KiCad 6 support
|
||||
MIN_VERSION = '0.9.0'
|
||||
rsvg_dep = rsvg_dependency('pcbdraw', rsvg_downloader, roles=ToolDependencyRole(desc='Create PNG and JPG images'))
|
||||
convert_dep = convert_dependency('pcbdraw', convert_downloader, roles=ToolDependencyRole(desc='Create JPG images'))
|
||||
pcbdraw_dep = pcbdraw_dependency('pcbdraw', None, roles=ToolDependencyRole(version=(0, 9, 0)))
|
||||
pcbdraw_dep = pcbdraw_dependency('pcbdraw', pytool_downloader, roles=ToolDependencyRole(version=PCBDRAW_MIN_VERSION))
|
||||
RegDependency.register(rsvg_dep)
|
||||
RegDependency.register(convert_dep)
|
||||
RegDependency.register(pcbdraw_dep)
|
||||
|
|
@ -124,7 +121,9 @@ def _run_command(cmd, tmp_remap=False, tmp_style=False):
|
|||
os.remove(tmp_remap)
|
||||
if tmp_style:
|
||||
os.remove(tmp_style)
|
||||
logger.debug('Output from command:\n'+cmd_output.decode())
|
||||
out = cmd_output.decode()
|
||||
if out.strip():
|
||||
logger.debug('Output from command:\n'+out)
|
||||
|
||||
|
||||
class PcbDrawOptions(VariantOptions):
|
||||
|
|
@ -268,9 +267,9 @@ class PcbDrawOptions(VariantOptions):
|
|||
|
||||
def run(self, name):
|
||||
super().run(name)
|
||||
check_script(PCBDRAW, URL_PCBDRAW, MIN_VERSION)
|
||||
pcbdraw_command = check_tool(pcbdraw_dep, fatal=True)
|
||||
# Base command with overwrite
|
||||
cmd = [PCBDRAW]
|
||||
cmd = [pcbdraw_command]
|
||||
# Add user options
|
||||
tmp_style = None
|
||||
if self.style:
|
||||
|
|
@ -347,12 +346,7 @@ class PcbDraw(BaseOutput): # noqa: F821
|
|||
|
||||
@staticmethod
|
||||
def get_conf_examples(name, layers, templates):
|
||||
enabled = True
|
||||
try:
|
||||
check_script(PCBDRAW, URL_PCBDRAW, MIN_VERSION)
|
||||
except SystemExit:
|
||||
enabled = False
|
||||
if not enabled:
|
||||
if check_tool(pcbdraw_dep) is None:
|
||||
return None
|
||||
outs = []
|
||||
for la in layers:
|
||||
|
|
|
|||
Loading…
Reference in New Issue