- fixed the Tcl Command AlignDrill
- fixed the Tcl Command AlignDrillGrid - fixed the Tcl COmmand Panelize, Excellon panelization section - Fixed an issue in Tool Calibration export_excellon method call - PEP8 corrections all over the app
This commit is contained in:
@@ -383,7 +383,7 @@ class AlignUI:
|
||||
grid0.setColumnStretch(1, 1)
|
||||
self.layout.addLayout(grid0)
|
||||
|
||||
self.aligned_label =FCLabel('<b>%s:</b>' % _("MOVING object"))
|
||||
self.aligned_label = FCLabel('<b>%s:</b>' % _("MOVING object"))
|
||||
grid0.addWidget(self.aligned_label, 0, 0, 1, 2)
|
||||
|
||||
self.aligned_label.setToolTip(
|
||||
@@ -478,7 +478,7 @@ class AlignUI:
|
||||
grid0.addWidget(separator_line, 14, 0, 1, 2)
|
||||
|
||||
# Buttons
|
||||
self.align_object_button =FCButton(_("Align Object"))
|
||||
self.align_object_button = FCButton(_("Align Object"))
|
||||
self.align_object_button.setIcon(QtGui.QIcon(self.app.resource_location + '/align16.png'))
|
||||
self.align_object_button.setToolTip(
|
||||
_("Align the specified object to the aligner object.\n"
|
||||
|
||||
@@ -639,7 +639,7 @@ class ToolCalibration(AppTool):
|
||||
if obj.tools:
|
||||
obj_init.tools = deepcopy(obj.tools)
|
||||
except Exception as ee:
|
||||
log.debug("ToolCalibration.new_calibrated_object.initialize_geometry() --> %s" % str(ee))
|
||||
app.log.debug("ToolCalibration.new_calibrated_object.initialize_geometry() --> %s" % str(ee))
|
||||
|
||||
obj_init.scale(xfactor=scalex, yfactor=scaley, point=(origin_x, origin_y))
|
||||
obj_init.skew(angle_x=skewx, angle_y=skewy, point=(origin_x, origin_y))
|
||||
@@ -649,7 +649,7 @@ class ToolCalibration(AppTool):
|
||||
except (AttributeError, TypeError):
|
||||
pass
|
||||
|
||||
def initialize_gerber(obj_init, app):
|
||||
def initialize_gerber(obj_init, app_obj):
|
||||
obj_init.solid_geometry = deepcopy(obj.solid_geometry)
|
||||
try:
|
||||
obj_init.follow_geometry = deepcopy(obj.follow_geometry)
|
||||
@@ -671,12 +671,12 @@ class ToolCalibration(AppTool):
|
||||
obj_init.skew(angle_x=skewx, angle_y=skewy, point=(origin_x, origin_y))
|
||||
|
||||
try:
|
||||
obj_init.source_file = self.app.f_handlers.export_gerber(obj_name=obj_name, filename=None,
|
||||
local_use=obj_init, use_thread=False)
|
||||
obj_init.source_file = app_obj.f_handlers.export_gerber(obj_name=obj_name, filename=None,
|
||||
local_use=obj_init, use_thread=False)
|
||||
except (AttributeError, TypeError):
|
||||
pass
|
||||
|
||||
def initialize_excellon(obj_init, app):
|
||||
def initialize_excellon(obj_init, app_obj):
|
||||
obj_init.tools = deepcopy(obj.tools)
|
||||
|
||||
# drills are offset, so they need to be deep copied
|
||||
@@ -689,8 +689,8 @@ class ToolCalibration(AppTool):
|
||||
|
||||
obj_init.create_geometry()
|
||||
|
||||
obj_init.source_file = self.app.export.export_excellon(obj_name=obj_name, local_use=obj, filename=None,
|
||||
use_thread=False)
|
||||
obj_init.source_file = app_obj.f_handlers.export_excellon(obj_name=obj_name, local_use=obj, filename=None,
|
||||
use_thread=False)
|
||||
|
||||
obj = self.cal_object
|
||||
obj_name = obj_name
|
||||
|
||||
@@ -245,9 +245,7 @@ class ToolCopperThieving(AppTool):
|
||||
break
|
||||
|
||||
if aperture_found:
|
||||
geo_elem = {}
|
||||
geo_elem['solid'] = self.robber_geo
|
||||
geo_elem['follow'] = self.robber_line
|
||||
geo_elem = {'solid': self.robber_geo, 'follow': self.robber_line}
|
||||
self.grb_object.apertures[aperture_found]['geometry'].append(deepcopy(geo_elem))
|
||||
else:
|
||||
ap_keys = list(self.grb_object.apertures.keys())
|
||||
@@ -261,9 +259,7 @@ class ToolCopperThieving(AppTool):
|
||||
self.grb_object.apertures[new_apid]['size'] = self.rb_thickness
|
||||
self.grb_object.apertures[new_apid]['geometry'] = []
|
||||
|
||||
geo_elem = {}
|
||||
geo_elem['solid'] = self.robber_geo
|
||||
geo_elem['follow'] = self.robber_line
|
||||
geo_elem = {'solid': self.robber_geo, 'follow': self.robber_line}
|
||||
self.grb_object.apertures[new_apid]['geometry'].append(deepcopy(geo_elem))
|
||||
|
||||
geo_obj = self.grb_object.solid_geometry
|
||||
@@ -857,18 +853,14 @@ class ToolCopperThieving(AppTool):
|
||||
geo_list.append(poly)
|
||||
|
||||
# append into the '0' aperture
|
||||
geo_elem = {}
|
||||
geo_elem['solid'] = poly
|
||||
geo_elem['follow'] = poly.exterior
|
||||
geo_elem = {'solid': poly, 'follow': poly.exterior}
|
||||
app_obj.grb_object.apertures['0']['geometry'].append(deepcopy(geo_elem))
|
||||
except TypeError:
|
||||
# append to the new solid geometry
|
||||
geo_list.append(app_obj.new_solid_geometry)
|
||||
|
||||
# append into the '0' aperture
|
||||
geo_elem = {}
|
||||
geo_elem['solid'] = app_obj.new_solid_geometry
|
||||
geo_elem['follow'] = app_obj.new_solid_geometry.exterior
|
||||
geo_elem = {'solid': app_obj.new_solid_geometry, 'follow': app_obj.new_solid_geometry.exterior}
|
||||
app_obj.grb_object.apertures['0']['geometry'].append(deepcopy(geo_elem))
|
||||
|
||||
app_obj.grb_object.solid_geometry = MultiPolygon(geo_list).buffer(0.0000001).buffer(-0.0000001)
|
||||
@@ -993,9 +985,7 @@ class ToolCopperThieving(AppTool):
|
||||
break
|
||||
|
||||
if aperture_found:
|
||||
geo_elem = {}
|
||||
geo_elem['solid'] = robber_solid_geo
|
||||
geo_elem['follow'] = robber_line
|
||||
geo_elem = {'solid': robber_solid_geo, 'follow': robber_line}
|
||||
grb_obj.apertures[aperture_found]['geometry'].append(deepcopy(geo_elem))
|
||||
else:
|
||||
ap_keys = list(grb_obj.apertures.keys())
|
||||
|
||||
@@ -264,9 +264,7 @@ class ToolCorners(AppTool):
|
||||
geo_buff = geo.buffer(line_thickness / 2.0, resolution=self.grb_steps_per_circle, join_style=2)
|
||||
geo_buff_list.append(geo_buff)
|
||||
|
||||
dict_el = {}
|
||||
dict_el['follow'] = geo
|
||||
dict_el['solid'] = geo_buff
|
||||
dict_el = {'follow': geo, 'solid': geo_buff}
|
||||
new_apertures[aperture_found]['geometry'].append(deepcopy(dict_el))
|
||||
else:
|
||||
ap_keys = list(new_apertures.keys())
|
||||
@@ -674,4 +672,4 @@ class CornersUI:
|
||||
self.app.inform[str, bool].emit('[WARNING_NOTCL] %s: [%d, %d]' %
|
||||
(_("Edited value is out of range"), minval, maxval), False)
|
||||
else:
|
||||
self.app.inform[str, bool].emit('[success] %s' % _("Edited value is within limits."), False)
|
||||
self.app.inform[str, bool].emit('[success] %s' % _("Edited value is within limits."), False)
|
||||
|
||||
@@ -389,7 +389,7 @@ class CutOut(AppTool):
|
||||
|
||||
def on_tool_default_add(self, dia=None, muted=None):
|
||||
|
||||
dia = dia
|
||||
dia = dia if dia else str(self.app.defaults["tools_cutout_tooldia"])
|
||||
self.default_data.update({
|
||||
"plot": True,
|
||||
|
||||
@@ -442,7 +442,7 @@ class CutOut(AppTool):
|
||||
})
|
||||
|
||||
self.cut_tool_dict.update({
|
||||
'tooldia': str(self.app.defaults["tools_cutout_tooldia"]),
|
||||
'tooldia': dia,
|
||||
'offset': 'Path',
|
||||
'offset_value': 0.0,
|
||||
'type': _('Rough'),
|
||||
@@ -874,16 +874,18 @@ class CutOut(AppTool):
|
||||
if not holes:
|
||||
return 'fail'
|
||||
|
||||
tools = {}
|
||||
tools[1] = {}
|
||||
tools[1]["tooldia"] = mb_dia
|
||||
tools[1]['drills'] = holes
|
||||
tools[1]['solid_geometry'] = []
|
||||
tools = {
|
||||
1: {
|
||||
"tooldia": mb_dia,
|
||||
"drills": holes,
|
||||
"solid_geometry": []
|
||||
}
|
||||
}
|
||||
|
||||
exc_obj.tools = tools
|
||||
exc_obj.create_geometry()
|
||||
exc_obj.source_file = app_o.f_handlers.export_excellon(obj_name=exc_obj.options['name'],
|
||||
local_use=exc_obj,filename=None,
|
||||
local_use=exc_obj, filename=None,
|
||||
use_thread=False)
|
||||
# calculate the bounds
|
||||
xmin, ymin, xmax, ymax = CutOut.recursive_bounds(exc_obj.solid_geometry)
|
||||
@@ -1244,11 +1246,13 @@ class CutOut(AppTool):
|
||||
if not holes:
|
||||
return 'fail'
|
||||
|
||||
tools = {}
|
||||
tools[1] = {}
|
||||
tools[1]["tooldia"] = mb_dia
|
||||
tools[1]['drills'] = holes
|
||||
tools[1]['solid_geometry'] = []
|
||||
tools = {
|
||||
1: {
|
||||
"tooldia": mb_dia,
|
||||
"drills": holes,
|
||||
"solid_geometry": []
|
||||
}
|
||||
}
|
||||
|
||||
exc_obj.tools = tools
|
||||
exc_obj.create_geometry()
|
||||
@@ -1602,11 +1606,13 @@ class CutOut(AppTool):
|
||||
if not holes:
|
||||
return 'fail'
|
||||
|
||||
tools = {}
|
||||
tools[1] = {}
|
||||
tools[1]["tooldia"] = mb_dia
|
||||
tools[1]['drills'] = holes
|
||||
tools[1]['solid_geometry'] = []
|
||||
tools = {
|
||||
1: {
|
||||
"tooldia": mb_dia,
|
||||
"drills": holes,
|
||||
"solid_geometry": []
|
||||
}
|
||||
}
|
||||
|
||||
exc_obj.tools = tools
|
||||
exc_obj.create_geometry()
|
||||
|
||||
@@ -190,9 +190,9 @@ class ToolEtchCompensation(AppTool):
|
||||
|
||||
# update the apertures attributes (keys in the apertures dict)
|
||||
for ap in new_apertures:
|
||||
type = new_apertures[ap]['type']
|
||||
ap_type = new_apertures[ap]['type']
|
||||
for k in new_apertures[ap]:
|
||||
if type == 'R' or type == 'O':
|
||||
if ap_type == 'R' or ap_type == 'O':
|
||||
if k == 'width' or k == 'height':
|
||||
new_apertures[ap][k] += offset
|
||||
else:
|
||||
@@ -207,9 +207,9 @@ class ToolEtchCompensation(AppTool):
|
||||
# in case of 'R' or 'O' aperture type we need to update the aperture 'size' after
|
||||
# the 'width' and 'height' keys were updated
|
||||
for ap in new_apertures:
|
||||
type = new_apertures[ap]['type']
|
||||
ap_type = new_apertures[ap]['type']
|
||||
for k in new_apertures[ap]:
|
||||
if type == 'R' or type == 'O':
|
||||
if ap_type == 'R' or ap_type == 'O':
|
||||
if k == 'size':
|
||||
new_apertures[ap][k] = math.sqrt(
|
||||
new_apertures[ap]['width'] ** 2 + new_apertures[ap]['height'] ** 2)
|
||||
@@ -233,8 +233,8 @@ class ToolEtchCompensation(AppTool):
|
||||
new_obj.apertures = deepcopy(new_apertures)
|
||||
|
||||
new_obj.solid_geometry = deepcopy(new_solid_geometry)
|
||||
new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None, local_use=new_obj,
|
||||
use_thread=False)
|
||||
new_obj.source_file = app_obj.f_handlers.export_gerber(obj_name=outname, filename=None, local_use=new_obj,
|
||||
use_thread=False)
|
||||
|
||||
self.app.app_obj.new_object('gerber', outname, init_func)
|
||||
|
||||
|
||||
@@ -270,9 +270,7 @@ class ToolFiducials(AppTool):
|
||||
|
||||
if aperture_found:
|
||||
for geo in geo_list:
|
||||
dict_el = {}
|
||||
dict_el['follow'] = geo.centroid
|
||||
dict_el['solid'] = geo
|
||||
dict_el = {'follow': geo.centroid, 'solid': geo}
|
||||
g_obj.apertures[aperture_found]['geometry'].append(deepcopy(dict_el))
|
||||
else:
|
||||
ap_keys = list(g_obj.apertures.keys())
|
||||
@@ -287,9 +285,7 @@ class ToolFiducials(AppTool):
|
||||
g_obj.apertures[new_apid]['geometry'] = []
|
||||
|
||||
for geo in geo_list:
|
||||
dict_el = {}
|
||||
dict_el['follow'] = geo.centroid
|
||||
dict_el['solid'] = geo
|
||||
dict_el = {'follow': geo.centroid, 'solid': geo}
|
||||
g_obj.apertures[new_apid]['geometry'].append(deepcopy(dict_el))
|
||||
|
||||
s_list = []
|
||||
@@ -330,9 +326,7 @@ class ToolFiducials(AppTool):
|
||||
geo_buff_list.append(geo_buff_h)
|
||||
geo_buff_list.append(geo_buff_v)
|
||||
|
||||
dict_el = {}
|
||||
dict_el['follow'] = geo_buff_h.centroid
|
||||
dict_el['solid'] = geo_buff_h
|
||||
dict_el = {'follow': geo_buff_h.centroid, 'solid': geo_buff_h}
|
||||
g_obj.apertures[aperture_found]['geometry'].append(deepcopy(dict_el))
|
||||
dict_el['follow'] = geo_buff_v.centroid
|
||||
dict_el['solid'] = geo_buff_v
|
||||
@@ -344,10 +338,11 @@ class ToolFiducials(AppTool):
|
||||
else:
|
||||
new_apid = '10'
|
||||
|
||||
g_obj.apertures[new_apid] = {}
|
||||
g_obj.apertures[new_apid]['type'] = 'C'
|
||||
g_obj.apertures[new_apid]['size'] = line_thickness
|
||||
g_obj.apertures[new_apid]['geometry'] = []
|
||||
g_obj.apertures[new_apid] = {
|
||||
'type': 'C',
|
||||
'size': line_thickness,
|
||||
'geometry': []
|
||||
}
|
||||
|
||||
for geo in geo_list:
|
||||
geo_buff_h = geo[0].buffer(line_thickness / 2.0, self.grb_steps_per_circle)
|
||||
@@ -355,9 +350,7 @@ class ToolFiducials(AppTool):
|
||||
geo_buff_list.append(geo_buff_h)
|
||||
geo_buff_list.append(geo_buff_v)
|
||||
|
||||
dict_el = {}
|
||||
dict_el['follow'] = geo_buff_h.centroid
|
||||
dict_el['solid'] = geo_buff_h
|
||||
dict_el = {'follow': geo_buff_h.centroid, 'solid': geo_buff_h}
|
||||
g_obj.apertures[new_apid]['geometry'].append(deepcopy(dict_el))
|
||||
dict_el['follow'] = geo_buff_v.centroid
|
||||
dict_el['solid'] = geo_buff_v
|
||||
@@ -412,9 +405,7 @@ class ToolFiducials(AppTool):
|
||||
for geo in geo_list:
|
||||
geo_buff_list.append(geo)
|
||||
|
||||
dict_el = {}
|
||||
dict_el['follow'] = geo.centroid
|
||||
dict_el['solid'] = geo
|
||||
dict_el = {'follow': geo.centroid, 'solid': geo}
|
||||
g_obj.apertures[aperture_found]['geometry'].append(deepcopy(dict_el))
|
||||
else:
|
||||
ap_keys = list(g_obj.apertures.keys())
|
||||
@@ -423,19 +414,18 @@ class ToolFiducials(AppTool):
|
||||
else:
|
||||
new_apid = '10'
|
||||
|
||||
g_obj.apertures[new_apid] = {}
|
||||
g_obj.apertures[new_apid]['type'] = 'R'
|
||||
g_obj.apertures[new_apid]['size'] = new_ap_size
|
||||
g_obj.apertures[new_apid]['width'] = fid_size
|
||||
g_obj.apertures[new_apid]['height'] = fid_size
|
||||
g_obj.apertures[new_apid]['geometry'] = []
|
||||
g_obj.apertures[new_apid] = {
|
||||
'type': 'R',
|
||||
'size': new_ap_size,
|
||||
'width': fid_size,
|
||||
'height': fid_size,
|
||||
'geometry': []
|
||||
}
|
||||
|
||||
for geo in geo_list:
|
||||
geo_buff_list.append(geo)
|
||||
|
||||
dict_el = {}
|
||||
dict_el['follow'] = geo.centroid
|
||||
dict_el['solid'] = geo
|
||||
dict_el = {'follow': geo.centroid, 'solid': geo}
|
||||
g_obj.apertures[new_apid]['geometry'].append(deepcopy(dict_el))
|
||||
|
||||
s_list = []
|
||||
|
||||
@@ -613,7 +613,8 @@ class Film(AppTool):
|
||||
drawing = svg2rlg(doc_final)
|
||||
|
||||
p_size = self.ui.pagesize_combo.get_value()
|
||||
if p_size == 'Bounds': renderPDF.drawToFile(drawing, filename)
|
||||
if p_size == 'Bounds':
|
||||
renderPDF.drawToFile(drawing, filename)
|
||||
else:
|
||||
if self.ui.orientation_radio.get_value() == 'p':
|
||||
page_size = portrait(self.ui.pagesize[p_size])
|
||||
|
||||
@@ -79,11 +79,10 @@ class ToolImage(AppTool):
|
||||
def on_file_importimage(self):
|
||||
"""
|
||||
Callback for menu item File->Import IMAGE.
|
||||
:param type_of_obj: to import the IMAGE as Geometry or as Gerber
|
||||
:type type_of_obj: str
|
||||
|
||||
:return: None
|
||||
"""
|
||||
mask = []
|
||||
|
||||
self.app.log.debug("on_file_importimage()")
|
||||
|
||||
_filter = "Image Files(*.BMP *.PNG *.JPG *.JPEG);;" \
|
||||
@@ -147,7 +146,7 @@ class ToolImage(AppTool):
|
||||
geo_obj.import_image(filename, units=units, dpi=dpi, mode=mode, mask=mask)
|
||||
geo_obj.multigeo = False
|
||||
|
||||
with self.app.proc_container.new(_("Importing Image")) as proc:
|
||||
with self.app.proc_container.new(_("Importing Image")):
|
||||
|
||||
# Object name
|
||||
name = outname or filename.split('/')[-1].split('\\')[-1]
|
||||
|
||||
@@ -131,21 +131,18 @@ class ToolInvertGerber(AppTool):
|
||||
new_apertures = {}
|
||||
|
||||
if '0' not in new_apertures:
|
||||
new_apertures['0'] = {}
|
||||
new_apertures['0']['type'] = 'C'
|
||||
new_apertures['0']['size'] = 0.0
|
||||
new_apertures['0']['geometry'] = []
|
||||
new_apertures['0'] = {
|
||||
'type': 'C',
|
||||
'size': 0.0,
|
||||
'geometry': []
|
||||
}
|
||||
|
||||
try:
|
||||
for poly in new_solid_geometry:
|
||||
new_el = {}
|
||||
new_el['solid'] = poly
|
||||
new_el['follow'] = poly.exterior
|
||||
new_el = {'solid': poly, 'follow': poly.exterior}
|
||||
new_apertures['0']['geometry'].append(new_el)
|
||||
except TypeError:
|
||||
new_el = {}
|
||||
new_el['solid'] = new_solid_geometry
|
||||
new_el['follow'] = new_solid_geometry.exterior
|
||||
new_el = {'solid': new_solid_geometry, 'follow': new_solid_geometry.exterior}
|
||||
new_apertures['0']['geometry'].append(new_el)
|
||||
|
||||
def init_func(new_obj, app_obj):
|
||||
@@ -157,8 +154,8 @@ class ToolInvertGerber(AppTool):
|
||||
new_obj.apertures = deepcopy(new_apertures)
|
||||
|
||||
new_obj.solid_geometry = deepcopy(new_solid_geometry)
|
||||
new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=new_obj, use_thread=False)
|
||||
new_obj.source_file = app_obj.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=new_obj, use_thread=False)
|
||||
|
||||
self.app.app_obj.new_object('gerber', outname, init_func)
|
||||
|
||||
@@ -315,4 +312,4 @@ class InvertUI:
|
||||
self.app.inform[str, bool].emit('[WARNING_NOTCL] %s: [%d, %d]' %
|
||||
(_("Edited value is out of range"), minval, maxval), False)
|
||||
else:
|
||||
self.app.inform[str, bool].emit('[success] %s' % _("Edited value is within limits."), False)
|
||||
self.app.inform[str, bool].emit('[success] %s' % _("Edited value is within limits."), False)
|
||||
|
||||
@@ -793,8 +793,8 @@ class ToolIsolation(AppTool, Gerber):
|
||||
parent=self.app.ui)
|
||||
tool_add_popup.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/letter_t_32.png'))
|
||||
|
||||
def find_optimal(val):
|
||||
tool_add_popup.set_value(float(val))
|
||||
def find_optimal(valor):
|
||||
tool_add_popup.set_value(float(valor))
|
||||
|
||||
self.optimal_found_sig.connect(find_optimal)
|
||||
|
||||
@@ -1620,8 +1620,7 @@ class ToolIsolation(AppTool, Gerber):
|
||||
self.app.proc_container.update_view_text(' %s' % _("Subtracting Geo"))
|
||||
geo_obj.solid_geometry = self.area_subtraction(geo_obj.solid_geometry)
|
||||
|
||||
geo_obj.tools = {}
|
||||
geo_obj.tools['1'] = {}
|
||||
geo_obj.tools = {'1': {}}
|
||||
geo_obj.tools.update({
|
||||
'1': {
|
||||
'tooldia': float(tool_dia),
|
||||
|
||||
@@ -635,7 +635,7 @@ class ToolMilling(AppTool, Excellon):
|
||||
# Get source object.
|
||||
try:
|
||||
self.excellon_obj = self.app.collection.get_by_name(self.obj_name)
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s: %s' % (_("Could not retrieve object"), str(self.obj_name)))
|
||||
return
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@ class ToolMove(AppTool):
|
||||
if obj.options['plot'] and obj.visible is True]
|
||||
|
||||
def job_move(app_obj):
|
||||
with self.app.proc_container.new(_("Moving...")) as proc:
|
||||
with self.app.proc_container.new(_("Moving...")):
|
||||
|
||||
if not obj_list:
|
||||
app_obj.app.inform.emit('[WARNING_NOTCL] %s' % _("No object(s) selected."))
|
||||
|
||||
@@ -109,9 +109,10 @@ class ToolPDF(AppTool):
|
||||
short_name = filename.split('/')[-1].split('\\')[-1]
|
||||
self.parsing_promises.append(short_name)
|
||||
|
||||
self.pdf_parsed[short_name] = {}
|
||||
self.pdf_parsed[short_name]['pdf'] = {}
|
||||
self.pdf_parsed[short_name]['filename'] = filename
|
||||
self.pdf_parsed[short_name] = {
|
||||
'pdf': {},
|
||||
'filename': filename
|
||||
}
|
||||
|
||||
self.pdf_decompressed[short_name] = ''
|
||||
|
||||
@@ -181,22 +182,26 @@ class ToolPDF(AppTool):
|
||||
name_tool = 0
|
||||
for dia in sorted_dia:
|
||||
name_tool += 1
|
||||
tool = str(name_tool)
|
||||
|
||||
# create tools dictionary
|
||||
spec = {"C": dia, 'solid_geometry': []}
|
||||
exc_obj.tools[str(name_tool)] = spec
|
||||
exc_obj.tools[tool] = {
|
||||
'tooldia': dia,
|
||||
'drills': [],
|
||||
'solid_geometry': []
|
||||
}
|
||||
|
||||
# create drill list of dictionaries
|
||||
# update the drill list
|
||||
for dia_points in points:
|
||||
if dia == dia_points:
|
||||
for pt in points[dia_points]:
|
||||
exc_obj.drills.append({'point': Point(pt), 'tool': str(name_tool)})
|
||||
exc_obj.tools[tool]['drills'].append(Point(pt))
|
||||
break
|
||||
|
||||
ret = exc_obj.create_geometry()
|
||||
if ret == 'fail':
|
||||
log.debug("Could not create geometry for Excellon object.")
|
||||
return "fail"
|
||||
|
||||
for tool in exc_obj.tools:
|
||||
if exc_obj.tools[tool]['solid_geometry']:
|
||||
return
|
||||
|
||||
@@ -472,14 +472,14 @@ class ToolPunchGerber(AppTool):
|
||||
# since there may be drills that do not drill into a pad we test only for
|
||||
# drills in a pad
|
||||
if drill_pt.within(elem['solid']):
|
||||
geo_elem = {}
|
||||
geo_elem['clear'] = drill_pt
|
||||
geo_elem = {'clear': drill_pt}
|
||||
|
||||
if clear_apid_size not in holes_apertures:
|
||||
holes_apertures[clear_apid_size] = {}
|
||||
holes_apertures[clear_apid_size]['type'] = 'C'
|
||||
holes_apertures[clear_apid_size]['size'] = clear_apid_size
|
||||
holes_apertures[clear_apid_size]['geometry'] = []
|
||||
holes_apertures[clear_apid_size] = {
|
||||
'type': 'C',
|
||||
'size': clear_apid_size,
|
||||
'geometry': []
|
||||
}
|
||||
|
||||
holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem))
|
||||
|
||||
@@ -498,8 +498,8 @@ class ToolPunchGerber(AppTool):
|
||||
new_obj.apertures = deepcopy(new_apertures)
|
||||
|
||||
new_obj.solid_geometry = deepcopy(punched_solid_geometry)
|
||||
new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=new_obj, use_thread=False)
|
||||
new_obj.source_file = app_obj.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=new_obj, use_thread=False)
|
||||
|
||||
self.app.app_obj.new_object('gerber', outname, init_func)
|
||||
|
||||
@@ -605,14 +605,14 @@ class ToolPunchGerber(AppTool):
|
||||
|
||||
# since there may be drills that do not drill into a pad we test only for drills in a pad
|
||||
if geo.within(elem['solid']):
|
||||
geo_elem = {}
|
||||
geo_elem['clear'] = geo.centroid
|
||||
geo_elem = {'clear': geo.centroid}
|
||||
|
||||
if clear_apid_size not in holes_apertures:
|
||||
holes_apertures[clear_apid_size] = {}
|
||||
holes_apertures[clear_apid_size]['type'] = 'C'
|
||||
holes_apertures[clear_apid_size]['size'] = clear_apid_size
|
||||
holes_apertures[clear_apid_size]['geometry'] = []
|
||||
holes_apertures[clear_apid_size] = {
|
||||
'type': 'C',
|
||||
'size': clear_apid_size,
|
||||
'geometry': []
|
||||
}
|
||||
|
||||
holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem))
|
||||
|
||||
@@ -631,8 +631,8 @@ class ToolPunchGerber(AppTool):
|
||||
new_obj.apertures = deepcopy(new_apertures)
|
||||
|
||||
new_obj.solid_geometry = deepcopy(punched_solid_geometry)
|
||||
new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=new_obj, use_thread=False)
|
||||
new_obj.source_file = app_obj.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=new_obj, use_thread=False)
|
||||
|
||||
self.app.app_obj.new_object('gerber', outname, init_func)
|
||||
|
||||
@@ -754,14 +754,14 @@ class ToolPunchGerber(AppTool):
|
||||
|
||||
# since there may be drills that do not drill into a pad we test only for geos in a pad
|
||||
if geo.within(elem['solid']):
|
||||
geo_elem = {}
|
||||
geo_elem['clear'] = geo.centroid
|
||||
geo_elem = {'clear': geo.centroid}
|
||||
|
||||
if clear_apid_size not in holes_apertures:
|
||||
holes_apertures[clear_apid_size] = {}
|
||||
holes_apertures[clear_apid_size]['type'] = 'C'
|
||||
holes_apertures[clear_apid_size]['size'] = clear_apid_size
|
||||
holes_apertures[clear_apid_size]['geometry'] = []
|
||||
holes_apertures[clear_apid_size] = {
|
||||
'type': 'C',
|
||||
'size': clear_apid_size,
|
||||
'geometry': []
|
||||
}
|
||||
|
||||
holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem))
|
||||
|
||||
@@ -780,8 +780,8 @@ class ToolPunchGerber(AppTool):
|
||||
new_obj.apertures = deepcopy(new_apertures)
|
||||
|
||||
new_obj.solid_geometry = deepcopy(punched_solid_geometry)
|
||||
new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=new_obj, use_thread=False)
|
||||
new_obj.source_file = app_obj.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=new_obj, use_thread=False)
|
||||
|
||||
self.app.app_obj.new_object('gerber', outname, init_func)
|
||||
|
||||
@@ -898,14 +898,14 @@ class ToolPunchGerber(AppTool):
|
||||
|
||||
# since there may be drills that do not drill into a pad we test only for geos in a pad
|
||||
if geo.within(elem['solid']):
|
||||
geo_elem = {}
|
||||
geo_elem['clear'] = geo.centroid
|
||||
geo_elem = {'clear': geo.centroid}
|
||||
|
||||
if clear_apid_size not in holes_apertures:
|
||||
holes_apertures[clear_apid_size] = {}
|
||||
holes_apertures[clear_apid_size]['type'] = 'C'
|
||||
holes_apertures[clear_apid_size]['size'] = clear_apid_size
|
||||
holes_apertures[clear_apid_size]['geometry'] = []
|
||||
holes_apertures[clear_apid_size] = {
|
||||
'type': 'C',
|
||||
'size': clear_apid_size,
|
||||
'geometry': []
|
||||
}
|
||||
|
||||
holes_apertures[clear_apid_size]['geometry'].append(deepcopy(geo_elem))
|
||||
|
||||
@@ -924,8 +924,8 @@ class ToolPunchGerber(AppTool):
|
||||
new_obj.apertures = deepcopy(new_apertures)
|
||||
|
||||
new_obj.solid_geometry = deepcopy(punched_solid_geometry)
|
||||
new_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=new_obj, use_thread=False)
|
||||
new_obj.source_file = app_obj.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=new_obj, use_thread=False)
|
||||
|
||||
self.app.app_obj.new_object('gerber', outname, init_func)
|
||||
|
||||
|
||||
@@ -270,9 +270,11 @@ class QRCode(AppTool):
|
||||
|
||||
# don't know if the condition is required since I already made sure above that the new_apid is a new one
|
||||
if new_apid not in self.grb_object.apertures:
|
||||
self.grb_object.apertures[new_apid] = {}
|
||||
self.grb_object.apertures[new_apid]['geometry'] = []
|
||||
self.grb_object.apertures[new_apid]['type'] = 'R'
|
||||
self.grb_object.apertures[new_apid] = {
|
||||
'type': 'R',
|
||||
'geometry': []
|
||||
}
|
||||
|
||||
# TODO: HACK
|
||||
# I've artificially added 1% to the height and width because otherwise after loading the
|
||||
# exported file, it will not be correctly reconstructed (it will be made from multiple shapes instead of
|
||||
@@ -282,15 +284,15 @@ class QRCode(AppTool):
|
||||
self.grb_object.apertures[new_apid]['size'] = deepcopy(math.sqrt(box_size ** 2 + box_size ** 2))
|
||||
|
||||
if '0' not in self.grb_object.apertures:
|
||||
self.grb_object.apertures['0'] = {}
|
||||
self.grb_object.apertures['0']['geometry'] = []
|
||||
self.grb_object.apertures['0']['type'] = 'REG'
|
||||
self.grb_object.apertures['0']['size'] = 0.0
|
||||
self.grb_object.apertures['0'] = {
|
||||
'type': 'REG',
|
||||
'size': 0.0,
|
||||
'geometry': []
|
||||
}
|
||||
|
||||
# in case that the QRCode geometry is dropped onto a copper region (found in the '0' aperture)
|
||||
# make sure that I place a cutout there
|
||||
zero_elem = {}
|
||||
zero_elem['clear'] = offset_mask_geo
|
||||
zero_elem = {'clear': offset_mask_geo}
|
||||
self.grb_object.apertures['0']['geometry'].append(deepcopy(zero_elem))
|
||||
|
||||
try:
|
||||
@@ -304,13 +306,13 @@ class QRCode(AppTool):
|
||||
|
||||
try:
|
||||
for geo in self.qrcode_geometry:
|
||||
geo_elem = {}
|
||||
geo_elem['solid'] = translate(geo, xoff=pos[0], yoff=pos[1])
|
||||
geo_elem['follow'] = translate(geo.centroid, xoff=pos[0], yoff=pos[1])
|
||||
geo_elem = {
|
||||
'solid': translate(geo, xoff=pos[0], yoff=pos[1]),
|
||||
'follow': translate(geo.centroid, xoff=pos[0], yoff=pos[1])
|
||||
}
|
||||
self.grb_object.apertures[new_apid]['geometry'].append(deepcopy(geo_elem))
|
||||
except TypeError:
|
||||
geo_elem = {}
|
||||
geo_elem['solid'] = self.qrcode_geometry
|
||||
geo_elem = {'solid': self.qrcode_geometry}
|
||||
self.grb_object.apertures[new_apid]['geometry'].append(deepcopy(geo_elem))
|
||||
|
||||
# update the source file with the new geometry:
|
||||
|
||||
@@ -631,16 +631,18 @@ class RulesCheck(AppTool):
|
||||
copper_list = []
|
||||
copper_name_1 = self.ui.copper_t_object.currentText()
|
||||
if copper_name_1 != '' and self.ui.copper_t_cb.get_value():
|
||||
elem_dict = {}
|
||||
elem_dict['name'] = deepcopy(copper_name_1)
|
||||
elem_dict['apertures'] = deepcopy(self.app.collection.get_by_name(copper_name_1).apertures)
|
||||
elem_dict = {
|
||||
'name': deepcopy(copper_name_1),
|
||||
'apertures': deepcopy(app_obj.collection.get_by_name(copper_name_1).apertures)
|
||||
}
|
||||
copper_list.append(elem_dict)
|
||||
|
||||
copper_name_2 = self.ui.copper_b_object.currentText()
|
||||
if copper_name_2 != '' and self.ui.copper_b_cb.get_value():
|
||||
elem_dict = {}
|
||||
elem_dict['name'] = deepcopy(copper_name_2)
|
||||
elem_dict['apertures'] = deepcopy(self.app.collection.get_by_name(copper_name_2).apertures)
|
||||
elem_dict = {
|
||||
'name': deepcopy(copper_name_2),
|
||||
'apertures': deepcopy(app_obj.collection.get_by_name(copper_name_2).apertures)
|
||||
}
|
||||
copper_list.append(elem_dict)
|
||||
|
||||
trace_size = float(self.ui.trace_size_entry.get_value())
|
||||
@@ -664,7 +666,7 @@ class RulesCheck(AppTool):
|
||||
|
||||
if copper_t_obj != '':
|
||||
copper_t_dict['name'] = deepcopy(copper_t_obj)
|
||||
copper_t_dict['apertures'] = deepcopy(self.app.collection.get_by_name(copper_t_obj).apertures)
|
||||
copper_t_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(copper_t_obj).apertures)
|
||||
|
||||
self.results.append(self.pool.apply_async(self.check_inside_gerber_clearance,
|
||||
args=(copper_t_dict,
|
||||
@@ -675,7 +677,7 @@ class RulesCheck(AppTool):
|
||||
copper_b_dict = {}
|
||||
if copper_b_obj != '':
|
||||
copper_b_dict['name'] = deepcopy(copper_b_obj)
|
||||
copper_b_dict['apertures'] = deepcopy(self.app.collection.get_by_name(copper_b_obj).apertures)
|
||||
copper_b_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(copper_b_obj).apertures)
|
||||
|
||||
self.results.append(self.pool.apply_async(self.check_inside_gerber_clearance,
|
||||
args=(copper_b_dict,
|
||||
@@ -683,7 +685,7 @@ class RulesCheck(AppTool):
|
||||
_("BOTTOM -> Copper to Copper clearance"))))
|
||||
|
||||
if self.ui.copper_t_cb.get_value() is False and self.ui.copper_b_cb.get_value() is False:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Copper to Copper clearance"),
|
||||
_("At least one Gerber object has to be selected for this rule but none is selected.")))
|
||||
return
|
||||
@@ -697,29 +699,29 @@ class RulesCheck(AppTool):
|
||||
copper_top = self.ui.copper_t_object.currentText()
|
||||
if copper_top != '' and self.ui.copper_t_cb.get_value():
|
||||
top_dict['name'] = deepcopy(copper_top)
|
||||
top_dict['apertures'] = deepcopy(self.app.collection.get_by_name(copper_top).apertures)
|
||||
top_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(copper_top).apertures)
|
||||
|
||||
copper_bottom = self.ui.copper_b_object.currentText()
|
||||
if copper_bottom != '' and self.ui.copper_b_cb.get_value():
|
||||
bottom_dict['name'] = deepcopy(copper_bottom)
|
||||
bottom_dict['apertures'] = deepcopy(self.app.collection.get_by_name(copper_bottom).apertures)
|
||||
bottom_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(copper_bottom).apertures)
|
||||
|
||||
copper_outline = self.ui.outline_object.currentText()
|
||||
if copper_outline != '' and self.ui.out_cb.get_value():
|
||||
outline_dict['name'] = deepcopy(copper_outline)
|
||||
outline_dict['apertures'] = deepcopy(self.app.collection.get_by_name(copper_outline).apertures)
|
||||
outline_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(copper_outline).apertures)
|
||||
|
||||
try:
|
||||
copper_outline_clearance = float(self.ui.clearance_copper2ol_entry.get_value())
|
||||
except Exception as e:
|
||||
log.debug("RulesCheck.execute.worker_job() --> %s" % str(e))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Copper to Outline clearance"),
|
||||
_("Value is not valid.")))
|
||||
return
|
||||
|
||||
if not top_dict and not bottom_dict or not outline_dict:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Copper to Outline clearance"),
|
||||
_("One of the copper Gerber objects or the Outline Gerber object is not valid.")))
|
||||
return
|
||||
@@ -732,7 +734,7 @@ class RulesCheck(AppTool):
|
||||
if outline_dict:
|
||||
objs.append(outline_dict)
|
||||
else:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Copper to Outline clearance"),
|
||||
_("Outline Gerber object presence is mandatory for this rule but it is not selected.")))
|
||||
return
|
||||
@@ -750,7 +752,7 @@ class RulesCheck(AppTool):
|
||||
silk_silk_clearance = float(self.ui.clearance_silk2silk_entry.get_value())
|
||||
except Exception as e:
|
||||
log.debug("RulesCheck.execute.worker_job() --> %s" % str(e))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Silk to Silk clearance"),
|
||||
_("Value is not valid.")))
|
||||
return
|
||||
@@ -759,7 +761,7 @@ class RulesCheck(AppTool):
|
||||
silk_obj = self.ui.ss_t_object.currentText()
|
||||
if silk_obj != '':
|
||||
silk_dict['name'] = deepcopy(silk_obj)
|
||||
silk_dict['apertures'] = deepcopy(self.app.collection.get_by_name(silk_obj).apertures)
|
||||
silk_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(silk_obj).apertures)
|
||||
|
||||
self.results.append(self.pool.apply_async(self.check_inside_gerber_clearance,
|
||||
args=(silk_dict,
|
||||
@@ -769,7 +771,7 @@ class RulesCheck(AppTool):
|
||||
silk_obj = self.ui.ss_b_object.currentText()
|
||||
if silk_obj != '':
|
||||
silk_dict['name'] = deepcopy(silk_obj)
|
||||
silk_dict['apertures'] = deepcopy(self.app.collection.get_by_name(silk_obj).apertures)
|
||||
silk_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(silk_obj).apertures)
|
||||
|
||||
self.results.append(self.pool.apply_async(self.check_inside_gerber_clearance,
|
||||
args=(silk_dict,
|
||||
@@ -777,7 +779,7 @@ class RulesCheck(AppTool):
|
||||
_("BOTTOM -> Silk to Silk clearance"))))
|
||||
|
||||
if self.ui.ss_t_cb.get_value() is False and self.ui.ss_b_cb.get_value() is False:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Silk to Silk clearance"),
|
||||
_("At least one Gerber object has to be selected for this rule but none is selected.")))
|
||||
return
|
||||
@@ -797,38 +799,38 @@ class RulesCheck(AppTool):
|
||||
silk_top = self.ui.ss_t_object.currentText()
|
||||
if silk_top != '' and self.ui.ss_t_cb.get_value():
|
||||
silk_t_dict['name'] = deepcopy(silk_top)
|
||||
silk_t_dict['apertures'] = deepcopy(self.app.collection.get_by_name(silk_top).apertures)
|
||||
silk_t_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(silk_top).apertures)
|
||||
top_ss = True
|
||||
|
||||
silk_bottom = self.ui.ss_b_object.currentText()
|
||||
if silk_bottom != '' and self.ui.ss_b_cb.get_value():
|
||||
silk_b_dict['name'] = deepcopy(silk_bottom)
|
||||
silk_b_dict['apertures'] = deepcopy(self.app.collection.get_by_name(silk_bottom).apertures)
|
||||
silk_b_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(silk_bottom).apertures)
|
||||
bottom_ss = True
|
||||
|
||||
sm_top = self.ui.sm_t_object.currentText()
|
||||
if sm_top != '' and self.ui.sm_t_cb.get_value():
|
||||
sm_t_dict['name'] = deepcopy(sm_top)
|
||||
sm_t_dict['apertures'] = deepcopy(self.app.collection.get_by_name(sm_top).apertures)
|
||||
sm_t_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(sm_top).apertures)
|
||||
top_sm = True
|
||||
|
||||
sm_bottom = self.ui.sm_b_object.currentText()
|
||||
if sm_bottom != '' and self.ui.sm_b_cb.get_value():
|
||||
sm_b_dict['name'] = deepcopy(sm_bottom)
|
||||
sm_b_dict['apertures'] = deepcopy(self.app.collection.get_by_name(sm_bottom).apertures)
|
||||
sm_b_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(sm_bottom).apertures)
|
||||
bottom_sm = True
|
||||
|
||||
try:
|
||||
silk_sm_clearance = float(self.ui.clearance_silk2sm_entry.get_value())
|
||||
except Exception as e:
|
||||
log.debug("RulesCheck.execute.worker_job() --> %s" % str(e))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Silk to Solder Mask Clearance"),
|
||||
_("Value is not valid.")))
|
||||
return
|
||||
|
||||
if (not silk_t_dict and not silk_b_dict) or (not sm_t_dict and not sm_b_dict):
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Silk to Solder Mask Clearance"),
|
||||
_("One or more of the Gerber objects is not valid.")))
|
||||
return
|
||||
@@ -846,7 +848,7 @@ class RulesCheck(AppTool):
|
||||
silk_sm_clearance,
|
||||
_("BOTTOM -> Silk to Solder Mask Clearance"))))
|
||||
else:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Silk to Solder Mask Clearance"),
|
||||
_("Both Silk and Solder Mask Gerber objects has to be either both Top or both Bottom.")))
|
||||
return
|
||||
@@ -860,29 +862,29 @@ class RulesCheck(AppTool):
|
||||
silk_top = self.ui.ss_t_object.currentText()
|
||||
if silk_top != '' and self.ui.ss_t_cb.get_value():
|
||||
top_dict['name'] = deepcopy(silk_top)
|
||||
top_dict['apertures'] = deepcopy(self.app.collection.get_by_name(silk_top).apertures)
|
||||
top_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(silk_top).apertures)
|
||||
|
||||
silk_bottom = self.ui.ss_b_object.currentText()
|
||||
if silk_bottom != '' and self.ui.ss_b_cb.get_value():
|
||||
bottom_dict['name'] = deepcopy(silk_bottom)
|
||||
bottom_dict['apertures'] = deepcopy(self.app.collection.get_by_name(silk_bottom).apertures)
|
||||
bottom_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(silk_bottom).apertures)
|
||||
|
||||
copper_outline = self.ui.outline_object.currentText()
|
||||
if copper_outline != '' and self.ui.out_cb.get_value():
|
||||
outline_dict['name'] = deepcopy(copper_outline)
|
||||
outline_dict['apertures'] = deepcopy(self.app.collection.get_by_name(copper_outline).apertures)
|
||||
outline_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(copper_outline).apertures)
|
||||
|
||||
try:
|
||||
copper_outline_clearance = float(self.ui.clearance_copper2ol_entry.get_value())
|
||||
except Exception as e:
|
||||
log.debug("RulesCheck.execute.worker_job() --> %s" % str(e))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Silk to Outline Clearance"),
|
||||
_("Value is not valid.")))
|
||||
return
|
||||
|
||||
if not top_dict and not bottom_dict or not outline_dict:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Silk to Outline Clearance"),
|
||||
_("One of the Silk Gerber objects or the Outline Gerber object is not valid.")))
|
||||
return
|
||||
@@ -896,7 +898,7 @@ class RulesCheck(AppTool):
|
||||
if outline_dict:
|
||||
objs.append(outline_dict)
|
||||
else:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Silk to Outline Clearance"),
|
||||
_("Outline Gerber object presence is mandatory for this rule but it is not selected.")))
|
||||
return
|
||||
@@ -914,7 +916,7 @@ class RulesCheck(AppTool):
|
||||
sm_sm_clearance = float(self.ui.clearance_sm2sm_entry.get_value())
|
||||
except Exception as e:
|
||||
log.debug("RulesCheck.execute.worker_job() --> %s" % str(e))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Minimum Solder Mask Sliver"),
|
||||
_("Value is not valid.")))
|
||||
return
|
||||
@@ -923,7 +925,7 @@ class RulesCheck(AppTool):
|
||||
solder_obj = self.ui.sm_t_object.currentText()
|
||||
if solder_obj != '':
|
||||
sm_dict['name'] = deepcopy(solder_obj)
|
||||
sm_dict['apertures'] = deepcopy(self.app.collection.get_by_name(solder_obj).apertures)
|
||||
sm_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(solder_obj).apertures)
|
||||
|
||||
self.results.append(self.pool.apply_async(self.check_inside_gerber_clearance,
|
||||
args=(sm_dict,
|
||||
@@ -933,7 +935,7 @@ class RulesCheck(AppTool):
|
||||
solder_obj = self.ui.sm_b_object.currentText()
|
||||
if solder_obj != '':
|
||||
sm_dict['name'] = deepcopy(solder_obj)
|
||||
sm_dict['apertures'] = deepcopy(self.app.collection.get_by_name(solder_obj).apertures)
|
||||
sm_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(solder_obj).apertures)
|
||||
|
||||
self.results.append(self.pool.apply_async(self.check_inside_gerber_clearance,
|
||||
args=(sm_dict,
|
||||
@@ -941,7 +943,7 @@ class RulesCheck(AppTool):
|
||||
_("BOTTOM -> Minimum Solder Mask Sliver"))))
|
||||
|
||||
if self.ui.sm_t_cb.get_value() is False and self.ui.sm_b_cb.get_value() is False:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Minimum Solder Mask Sliver"),
|
||||
_("At least one Gerber object has to be selected for this rule but none is selected.")))
|
||||
return
|
||||
@@ -956,36 +958,36 @@ class RulesCheck(AppTool):
|
||||
copper_top = self.ui.copper_t_object.currentText()
|
||||
if copper_top != '' and self.ui.copper_t_cb.get_value():
|
||||
top_dict['name'] = deepcopy(copper_top)
|
||||
top_dict['apertures'] = deepcopy(self.app.collection.get_by_name(copper_top).apertures)
|
||||
top_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(copper_top).apertures)
|
||||
|
||||
copper_bottom = self.ui.copper_b_object.currentText()
|
||||
if copper_bottom != '' and self.ui.copper_b_cb.get_value():
|
||||
bottom_dict['name'] = deepcopy(copper_bottom)
|
||||
bottom_dict['apertures'] = deepcopy(self.app.collection.get_by_name(copper_bottom).apertures)
|
||||
bottom_dict['apertures'] = deepcopy(app_obj.collection.get_by_name(copper_bottom).apertures)
|
||||
|
||||
excellon_1 = self.ui.e1_object.currentText()
|
||||
if excellon_1 != '' and self.ui.e1_cb.get_value():
|
||||
exc_1_dict['name'] = deepcopy(excellon_1)
|
||||
exc_1_dict['tools'] = deepcopy(
|
||||
self.app.collection.get_by_name(excellon_1).tools)
|
||||
app_obj.collection.get_by_name(excellon_1).tools)
|
||||
|
||||
excellon_2 = self.ui.e2_object.currentText()
|
||||
if excellon_2 != '' and self.ui.e2_cb.get_value():
|
||||
exc_2_dict['name'] = deepcopy(excellon_2)
|
||||
exc_2_dict['tools'] = deepcopy(
|
||||
self.app.collection.get_by_name(excellon_2).tools)
|
||||
app_obj.collection.get_by_name(excellon_2).tools)
|
||||
|
||||
try:
|
||||
ring_val = float(self.ui.ring_integrity_entry.get_value())
|
||||
except Exception as e:
|
||||
log.debug("RulesCheck.execute.worker_job() --> %s" % str(e))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Minimum Annular Ring"),
|
||||
_("Value is not valid.")))
|
||||
return
|
||||
|
||||
if (not top_dict and not bottom_dict) or (not exc_1_dict and not exc_2_dict):
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Minimum Annular Ring"),
|
||||
_("One of the Copper Gerber objects or the Excellon objects is not valid.")))
|
||||
return
|
||||
@@ -1001,7 +1003,7 @@ class RulesCheck(AppTool):
|
||||
elif exc_2_dict:
|
||||
objs.append(exc_2_dict)
|
||||
else:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
app_obj.inform.emit('[ERROR_NOTCL] %s. %s' % (
|
||||
_("Minimum Annular Ring"),
|
||||
_("Excellon object presence is mandatory for this rule but none is selected.")))
|
||||
return
|
||||
@@ -1016,16 +1018,18 @@ class RulesCheck(AppTool):
|
||||
exc_list = []
|
||||
exc_name_1 = self.ui.e1_object.currentText()
|
||||
if exc_name_1 != '' and self.ui.e1_cb.get_value():
|
||||
elem_dict = {}
|
||||
elem_dict['name'] = deepcopy(exc_name_1)
|
||||
elem_dict['tools'] = deepcopy(self.app.collection.get_by_name(exc_name_1).tools)
|
||||
elem_dict = {
|
||||
'name': deepcopy(exc_name_1),
|
||||
'tools': deepcopy(app_obj.collection.get_by_name(exc_name_1).tools)
|
||||
}
|
||||
exc_list.append(elem_dict)
|
||||
|
||||
exc_name_2 = self.ui.e2_object.currentText()
|
||||
if exc_name_2 != '' and self.ui.e2_cb.get_value():
|
||||
elem_dict = {}
|
||||
elem_dict['name'] = deepcopy(exc_name_2)
|
||||
elem_dict['tools'] = deepcopy(self.app.collection.get_by_name(exc_name_2).tools)
|
||||
elem_dict = {
|
||||
'name': deepcopy(exc_name_2),
|
||||
'tools': deepcopy(app_obj.collection.get_by_name(exc_name_2).tools)
|
||||
}
|
||||
exc_list.append(elem_dict)
|
||||
|
||||
hole_clearance = float(self.ui.clearance_d2d_entry.get_value())
|
||||
@@ -1036,16 +1040,18 @@ class RulesCheck(AppTool):
|
||||
exc_list = []
|
||||
exc_name_1 = self.ui.e1_object.currentText()
|
||||
if exc_name_1 != '' and self.ui.e1_cb.get_value():
|
||||
elem_dict = {}
|
||||
elem_dict['name'] = deepcopy(exc_name_1)
|
||||
elem_dict['tools'] = deepcopy(self.app.collection.get_by_name(exc_name_1).tools)
|
||||
elem_dict = {
|
||||
'name': deepcopy(exc_name_1),
|
||||
'tools': deepcopy(app_obj.collection.get_by_name(exc_name_1).tools)
|
||||
}
|
||||
exc_list.append(elem_dict)
|
||||
|
||||
exc_name_2 = self.ui.e2_object.currentText()
|
||||
if exc_name_2 != '' and self.ui.e2_cb.get_value():
|
||||
elem_dict = {}
|
||||
elem_dict['name'] = deepcopy(exc_name_2)
|
||||
elem_dict['tools'] = deepcopy(self.app.collection.get_by_name(exc_name_2).tools)
|
||||
elem_dict = {
|
||||
'name': deepcopy(exc_name_2),
|
||||
'tools': deepcopy(app_obj.collection.get_by_name(exc_name_2).tools)
|
||||
}
|
||||
exc_list.append(elem_dict)
|
||||
|
||||
drill_size = float(self.ui.drill_size_entry.get_value())
|
||||
@@ -1056,7 +1062,7 @@ class RulesCheck(AppTool):
|
||||
output.append(p.get())
|
||||
|
||||
self.tool_finished.emit(output)
|
||||
self.app.proc_container.view.set_idle()
|
||||
app_obj.proc_container.view.set_idle()
|
||||
|
||||
log.debug("RuleCheck() finished")
|
||||
|
||||
|
||||
@@ -195,9 +195,7 @@ class ToolSub(AppTool):
|
||||
|
||||
def worker_job(app_obj):
|
||||
# SUBTRACTOR geometry (always the same)
|
||||
sub_geometry = {}
|
||||
sub_geometry['solid'] = []
|
||||
sub_geometry['clear'] = []
|
||||
sub_geometry = {'solid': [], 'clear': []}
|
||||
# iterate over SUBTRACTOR geometry and load it in the sub_geometry dict
|
||||
for s_apid in app_obj.sub_grb_obj.apertures:
|
||||
for s_el in app_obj.sub_grb_obj.apertures[s_apid]['geometry']:
|
||||
@@ -206,13 +204,13 @@ class ToolSub(AppTool):
|
||||
if "clear" in s_el:
|
||||
sub_geometry['clear'].append(s_el["clear"])
|
||||
|
||||
for apid in app_obj.target_grb_obj.apertures:
|
||||
for ap_id in app_obj.target_grb_obj.apertures:
|
||||
# TARGET geometry
|
||||
target_geo = [geo for geo in app_obj.target_grb_obj.apertures[apid]['geometry']]
|
||||
target_geo = [geo for geo in app_obj.target_grb_obj.apertures[ap_id]['geometry']]
|
||||
|
||||
# send the job to the multiprocessing JOB
|
||||
app_obj.results.append(
|
||||
app_obj.pool.apply_async(app_obj.aperture_intersection, args=(apid, target_geo, sub_geometry))
|
||||
app_obj.pool.apply_async(app_obj.aperture_intersection, args=(ap_id, target_geo, sub_geometry))
|
||||
)
|
||||
|
||||
output = []
|
||||
@@ -348,8 +346,8 @@ class ToolSub(AppTool):
|
||||
|
||||
grb_obj.solid_geometry = deepcopy(poly_buff)
|
||||
grb_obj.follow_geometry = deepcopy(follow_buff)
|
||||
grb_obj.source_file = self.app.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=grb_obj, use_thread=False)
|
||||
grb_obj.source_file = app_obj.f_handlers.export_gerber(obj_name=outname, filename=None,
|
||||
local_use=grb_obj, use_thread=False)
|
||||
|
||||
with self.app.proc_container.new(_("Generating new object ...")):
|
||||
ret = self.app.app_obj.new_object('gerber', outname, obj_init, autoselected=False)
|
||||
@@ -542,7 +540,7 @@ class ToolSub(AppTool):
|
||||
for tool in geo_obj.tools:
|
||||
geo_obj.tools[tool]['solid_geometry'] = deepcopy(self.new_solid_geometry)
|
||||
except Exception as e:
|
||||
log.debug("ToolSub.new_geo_object() --> %s" % str(e))
|
||||
app_obj.log.debug("ToolSub.new_geo_object() --> %s" % str(e))
|
||||
geo_obj.multigeo = False
|
||||
|
||||
with self.app.proc_container.new(_("Generating new object ...")):
|
||||
|
||||
Reference in New Issue
Block a user