`pcb_print` added KiCad 5 adjust for solder mask coordinates
- Also removed unused code
This commit is contained in:
parent
bca090b685
commit
caad4e346e
|
|
@ -98,17 +98,6 @@ def get_width(svg):
|
||||||
return float(svg.root.get('viewBox').split(' ')[2])
|
return float(svg.root.get('viewBox').split(' ')[2])
|
||||||
|
|
||||||
|
|
||||||
def to_inches(w):
|
|
||||||
val = float(w[:-2])
|
|
||||||
units = w[-2:]
|
|
||||||
if units == 'cm':
|
|
||||||
return val/2.54
|
|
||||||
if units == 'pt':
|
|
||||||
return val/72.0
|
|
||||||
# Currently impossible for KiCad
|
|
||||||
return val
|
|
||||||
|
|
||||||
|
|
||||||
def create_pdf_from_pages(input_files, output_fn):
|
def create_pdf_from_pages(input_files, output_fn):
|
||||||
output = PyPDF2.PdfFileWriter()
|
output = PyPDF2.PdfFileWriter()
|
||||||
# Collect all pages
|
# Collect all pages
|
||||||
|
|
@ -319,6 +308,8 @@ class PCB_PrintOptions(VariantOptions):
|
||||||
""" Try to draw the solder mask as a real solder mask, not the negative used for fabrication.
|
""" Try to draw the solder mask as a real solder mask, not the negative used for fabrication.
|
||||||
In order to get a good looking select a color with transparency, i.e. '#14332440'.
|
In order to get a good looking select a color with transparency, i.e. '#14332440'.
|
||||||
PcbDraw must be installed in order to use this option """
|
PcbDraw must be installed in order to use this option """
|
||||||
|
self.add_background = False
|
||||||
|
""" Add a background to the SVG/PNG """
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self._expand_id = 'assembly'
|
self._expand_id = 'assembly'
|
||||||
|
|
||||||
|
|
@ -718,6 +709,7 @@ class PCB_PrintOptions(VariantOptions):
|
||||||
new_layer = fromstring(load_svg(file, color, p.colored_holes, p.holes_color, p.monochrome))
|
new_layer = fromstring(load_svg(file, color, p.colored_holes, p.holes_color, p.monochrome))
|
||||||
width = get_width(new_layer)
|
width = get_width(new_layer)
|
||||||
if GS.ki5() and file.endswith('frame.svg'):
|
if GS.ki5() and file.endswith('frame.svg'):
|
||||||
|
# Workaround for polygon fill on KiCad 5
|
||||||
if p.monochrome:
|
if p.monochrome:
|
||||||
color = to_gray_hex(color)
|
color = to_gray_hex(color)
|
||||||
self.fill_polygons(new_layer, color)
|
self.fill_polygons(new_layer, color)
|
||||||
|
|
@ -725,7 +717,6 @@ class PCB_PrintOptions(VariantOptions):
|
||||||
svg_out = new_layer
|
svg_out = new_layer
|
||||||
# This is the width declared at the beginning of the file
|
# This is the width declared at the beginning of the file
|
||||||
base_width = width
|
base_width = width
|
||||||
phys_width = to_inches(new_layer.width)
|
|
||||||
first = False
|
first = False
|
||||||
self.add_frame_images(svg_out, p.monochrome)
|
self.add_frame_images(svg_out, p.monochrome)
|
||||||
else:
|
else:
|
||||||
|
|
@ -734,11 +725,11 @@ class PCB_PrintOptions(VariantOptions):
|
||||||
scale = base_width/width
|
scale = base_width/width
|
||||||
if scale != 1.0:
|
if scale != 1.0:
|
||||||
logger.debug(' - Scaling {} by {}'.format(file, scale))
|
logger.debug(' - Scaling {} by {}'.format(file, scale))
|
||||||
|
logger.error('Este')
|
||||||
for e in root:
|
for e in root:
|
||||||
e.scale(scale)
|
e.scale(scale)
|
||||||
svg_out.append([root])
|
svg_out.append([root])
|
||||||
svg_out.save(os.path.join(output_folder, output_file))
|
svg_out.save(os.path.join(output_folder, output_file))
|
||||||
return phys_width
|
|
||||||
|
|
||||||
def find_paper_size(self):
|
def find_paper_size(self):
|
||||||
pcb = PCB.load(GS.pcb_file)
|
pcb = PCB.load(GS.pcb_file)
|
||||||
|
|
@ -781,23 +772,28 @@ class PCB_PrintOptions(VariantOptions):
|
||||||
svg_kicad = fromstring(f.read())
|
svg_kicad = fromstring(f.read())
|
||||||
view_box = svg_kicad.root.get('viewBox')
|
view_box = svg_kicad.root.get('viewBox')
|
||||||
view_box_elements = view_box.split(' ')
|
view_box_elements = view_box.split(' ')
|
||||||
paper_size_iu_x = int(view_box_elements[2])
|
# This is the paper size using the SVG precision
|
||||||
paper_size_iu_y = int(view_box_elements[3])
|
paper_size_x = int(view_box_elements[2])
|
||||||
|
paper_size_y = int(view_box_elements[3])
|
||||||
# Compute the coordinates translation for mirror
|
# Compute the coordinates translation for mirror
|
||||||
transform = ''
|
transform = ''
|
||||||
if scale != 1.0 and scale:
|
if scale != 1.0 and scale:
|
||||||
# This the autocenter computation used by KiCad
|
# This the autocenter computation used by KiCad
|
||||||
scale_x = scale_y = scale
|
scale_x = scale_y = scale
|
||||||
board_center = GS.board.GetBoundingBox().GetCenter()
|
board_center = GS.board.GetBoundingBox().GetCenter()
|
||||||
offset_x = round((board_center.x*scale-(paper_size_iu_x/2.0))/scale)
|
if GS.ki5():
|
||||||
offset_y = round((board_center.y*scale-(paper_size_iu_y/2.0))/scale)
|
# KiCad 5 uses a different precision, we must adjust
|
||||||
|
board_center.x = round(board_center.x*116930/297002200)
|
||||||
|
board_center.y = round(board_center.y*116930/297002200)
|
||||||
|
offset_x = round((board_center.x*scale-(paper_size_x/2.0))/scale)
|
||||||
|
offset_y = round((board_center.y*scale-(paper_size_y/2.0))/scale)
|
||||||
if mirror:
|
if mirror:
|
||||||
scale_x = -scale_x
|
scale_x = -scale_x
|
||||||
offset_x += round(paper_size_iu_x/scale)
|
offset_x += round(paper_size_x/scale)
|
||||||
transform = 'scale({},{}) translate({},{})'.format(scale_x, scale_y, -offset_x, -offset_y)
|
transform = 'scale({},{}) translate({},{})'.format(scale_x, scale_y, -offset_x, -offset_y)
|
||||||
else:
|
else:
|
||||||
if mirror:
|
if mirror:
|
||||||
transform = 'scale(-1,1) translate({},0)'.format(-paper_size_iu_x)
|
transform = 'scale(-1,1) translate({},0)'.format(-paper_size_x)
|
||||||
# Filter the PcbDraw SVG to get what we want
|
# Filter the PcbDraw SVG to get what we want
|
||||||
defs = None
|
defs = None
|
||||||
g = None
|
g = None
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue