- fixed issue when loading unbuffered a Gerber file that has negative regions

- fixed Panelize Tool to save the aperture geometries into the panel apertures. Also made the tool faster by removing the buffering at the end of the job
- modified FlatCAMEditor's files to the new string format that will allow easier translations
- updated POT file and the Romanian translation
This commit is contained in:
Marius Stanciu 2019-09-10 03:20:14 +03:00 committed by Marius
parent 14fe5080ec
commit 59704a6e01
19 changed files with 13227 additions and 10471 deletions

View File

@ -7495,7 +7495,7 @@ class App(QtCore.QObject):
def on_file_savegerber(self):
"""
Callback for menu item File->Export Gerber.
Callback for menu item in Project context menu.
:return: None
"""
@ -7504,7 +7504,7 @@ class App(QtCore.QObject):
obj = self.collection.get_active()
if obj is None:
self.inform.emit('[WARNING_NOTCL] %S' %
self.inform.emit('[WARNING_NOTCL] %s' %
_("No object selected. Please select an Gerber object to export."))
return
@ -7539,7 +7539,7 @@ class App(QtCore.QObject):
def on_file_saveexcellon(self):
"""
Callback for menu item File->Export Gerber.
Callback for menu item in project context menu.
:return: None
"""
@ -8671,14 +8671,14 @@ class App(QtCore.QObject):
with self.proc_container.new(_("Exporting Gerber")) as proc:
def job_thread_exc(app_obj):
def job_thread_grb(app_obj):
ret = make_gerber()
if ret == 'fail':
self.inform.emit('[ERROR_NOTCL] %s' %
_('Could not export Gerber file.'))
return
self.worker_task.emit({'fcn': job_thread_exc, 'params': [self]})
self.worker_task.emit({'fcn': job_thread_grb, 'params': [self]})
else:
ret = make_gerber()
if ret == 'fail':
@ -8912,10 +8912,8 @@ class App(QtCore.QObject):
app_obj.progress.emit(0)
return "fail"
except ParseError as err:
app_obj.inform.emit(_("{e_code} Failed to parse file: {name}. {error}").format(
e_code=_("[ERROR_NOTCL]"),
name=filename,
error=str(err)))
app_obj.inform.emit('[ERROR_NOTCL] %s: %s. %s' %
(_("Failed to parse file"), filename, str(err)))
app_obj.progress.emit(0)
self.log.error(str(err))
return "fail"

View File

@ -1503,6 +1503,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
:return: Gerber_code
"""
log.debug("FlatCAMGerber.export_gerber() --> Generating the Gerber code from the selected Gerber file")
def tz_format(x, y, fac):
x_c = x * fac
@ -1650,6 +1651,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
for geo_elem in self.apertures[apid]['geometry']:
if 'follow' in geo_elem:
geo = geo_elem['follow']
print(geo)
if not geo.is_empty:
if isinstance(geo, Point):
if g_zeros == 'T':

View File

@ -19,6 +19,10 @@ CAD program, and create G-Code for Isolation routing.
- modified FlatCAMObj.py file to the new string format that will allow easier translations
- modified camlib.py, FlatCAMAPp.py and ObjectCollection.py files to the new string format that will allow easier translations
- updated the POT file and the German language
- fixed issue when loading unbuffered a Gerber file that has negative regions
- fixed Panelize Tool to save the aperture geometries into the panel apertures. Also made the tool faster by removing the buffering at the end of the job
- modified FlatCAMEditor's files to the new string format that will allow easier translations
- updated POT file and the Romanian translation
8.09.2019

View File

@ -3376,8 +3376,17 @@ class Gerber (Geometry):
new_poly = cascaded_union(poly_buffer)
new_poly = new_poly.buffer(0, int(self.steps_per_circle / 4))
log.warning("Union done.")
if current_polarity == 'D':
self.solid_geometry = self.solid_geometry.union(new_poly)
try:
self.solid_geometry = self.solid_geometry.union(new_poly)
except Exception as e:
# in case in the new_poly are some self intersections try to avoid making union with them
for poly in new_poly:
try:
self.solid_geometry = self.solid_geometry.union(poly)
except:
pass
else:
self.solid_geometry = self.solid_geometry.difference(new_poly)
except Exception as err:
@ -6313,7 +6322,7 @@ class CNCjob(Geometry):
self.z_depthpercut = abs(self.z_cut)
if self.z_move is None:
self.app.inform.emit('[ERROR_NOTCL] %S' %
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Travel Z parameter is None or zero."))
return 'fail'

View File

@ -50,7 +50,8 @@ class FCDrillAdd(FCShapeTool):
item = self.draw_app.tools_table_exc.item((self.draw_app.last_tool_selected - 1), 1)
self.draw_app.tools_table_exc.setCurrentItem(item)
except KeyError:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] To add a drill first select a tool"))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("To add a drill first select a tool"))
self.draw_app.select_tool("drill_select")
return
@ -112,7 +113,8 @@ class FCDrillAdd(FCShapeTool):
self.geometry = DrawToolShape(self.util_shape(self.points))
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Drill added."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Drill added."))
class FCDrillArray(FCShapeTool):
@ -154,7 +156,8 @@ class FCDrillArray(FCShapeTool):
item = self.draw_app.tools_table_exc.item((self.draw_app.last_tool_selected - 1), 1)
self.draw_app.tools_table_exc.setCurrentItem(item)
except KeyError:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] To add an Drill Array first select a tool in Tool Table"))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("To add an Drill Array first select a tool in Tool Table"))
return
try:
@ -208,11 +211,12 @@ class FCDrillArray(FCShapeTool):
self.drill_linear_angle = float(self.draw_app.linear_angle_spinner.get_value())
self.drill_angle = float(self.draw_app.drill_angle_entry.get_value())
except TypeError:
self.draw_app.app.inform.emit(
_("[ERROR_NOTCL] The value is not Float. Check for comma instead of dot separator."))
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' %
_("The value is not Float. Check for comma instead of dot separator."))
return
except Exception as e:
self.draw_app.app.inform.emit(_("[ERROR_NOTCL] The value is mistyped. Check the value. %s") % str(e))
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s. %s' %
(_("The value is mistyped. Check the value"), str(e)))
return
if self.drill_array == 'Linear':
@ -310,7 +314,8 @@ class FCDrillArray(FCShapeTool):
self.geometry.append(DrawToolShape(geo))
else:
if (self.drill_angle * self.drill_array_size) > 360:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Too many drills for the selected spacing angle."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Too many drills for the selected spacing angle."))
return
radius = distance(self.destination, self.origin)
@ -327,7 +332,8 @@ class FCDrillArray(FCShapeTool):
geo = self.util_shape((x, y))
self.geometry.append(DrawToolShape(geo))
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Drill Array added."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Drill Array added."))
self.draw_app.in_action = False
self.draw_app.array_frame.hide()
return
@ -355,7 +361,8 @@ class FCSlot(FCShapeTool):
item = self.draw_app.tools_table_exc.item((self.draw_app.last_tool_selected - 1), 1)
self.draw_app.tools_table_exc.setCurrentItem(item)
except KeyError:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] To add a slot first select a tool"))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("To add a slot first select a tool"))
self.draw_app.select_tool("drill_select")
return
@ -412,15 +419,15 @@ class FCSlot(FCShapeTool):
slot_length = float(self.draw_app.slot_length_entry.get_value().replace(',', '.'))
self.draw_app.slot_length_entry.set_value(slot_length)
except ValueError:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Value is missing or wrong format. "
"Add it and retry."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Value is missing or wrong format. Add it and retry."))
return
try:
slot_angle = float(self.draw_app.slot_angle_spinner.get_value())
except ValueError:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Value is missing or wrong format. "
"Add it and retry."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Value is missing or wrong format. Add it and retry."))
return
if self.draw_app.slot_axis_radio.get_value() == 'X':
@ -518,7 +525,8 @@ class FCSlot(FCShapeTool):
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Adding Slot completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Adding Slot completed."))
self.draw_app.slot_frame.hide()
@ -544,7 +552,8 @@ class FCSlotArray(FCShapeTool):
item = self.draw_app.tools_table_exc.item((self.draw_app.last_tool_selected - 1), 1)
self.draw_app.tools_table_exc.setCurrentItem(item)
except KeyError:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] To add an Slot Array first select a tool in Tool Table"))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("To add an Slot Array first select a tool in Tool Table"))
return
@ -622,11 +631,12 @@ class FCSlotArray(FCShapeTool):
self.slot_linear_angle = float(self.draw_app.slot_array_linear_angle_spinner.get_value())
self.slot_angle = float(self.draw_app.slot_array_angle_entry.get_value())
except TypeError:
self.draw_app.app.inform.emit(
_("[ERROR_NOTCL] The value is not Float. Check for comma instead of dot separator."))
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' %
_("The value is not Float. Check for comma instead of dot separator."))
return
except Exception as e:
self.draw_app.app.inform.emit(_("[ERROR_NOTCL] The value is mistyped. Check the value."))
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' %
_("The value is mistyped. Check the value."))
return
if self.slot_array == 'Linear':
@ -687,15 +697,15 @@ class FCSlotArray(FCShapeTool):
slot_length = float(self.draw_app.slot_length_entry.get_value().replace(',', '.'))
self.draw_app.slot_length_entry.set_value(slot_length)
except ValueError:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Value is missing or wrong format. "
"Add it and retry."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Value is missing or wrong format. Add it and retry."))
return
try:
slot_angle = float(self.draw_app.slot_angle_spinner.get_value())
except ValueError:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Value is missing or wrong format. "
"Add it and retry."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Value is missing or wrong format. Add it and retry."))
return
if self.draw_app.slot_axis_radio.get_value() == 'X':
@ -804,7 +814,8 @@ class FCSlotArray(FCShapeTool):
self.geometry.append(DrawToolShape(geo))
else:
if (self.slot_angle * self.slot_array_size) > 360:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Too many Slots for the selected spacing angle."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Too many Slots for the selected spacing angle."))
return
radius = distance(self.destination, self.origin)
@ -826,7 +837,8 @@ class FCSlotArray(FCShapeTool):
self.geometry.append(DrawToolShape(geo))
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Slot Array added."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Slot Array added."))
self.draw_app.in_action = False
self.draw_app.slot_frame.hide()
self.draw_app.slot_array_frame.hide()
@ -872,9 +884,8 @@ class FCDrillResize(FCShapeTool):
try:
new_dia = self.draw_app.resdrill_entry.get_value()
except:
self.draw_app.app.inform.emit(
_("[ERROR_NOTCL] Resize drill(s) failed. Please enter a diameter for resize.")
)
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' %
_("Resize drill(s) failed. Please enter a diameter for resize."))
return
if new_dia not in self.draw_app.olddia_newdia:
@ -963,7 +974,8 @@ class FCDrillResize(FCShapeTool):
self.geometry.append(DrawToolShape(new_poly))
else:
# unexpected geometry so we cancel
self.draw_app.app.inform.emit(_("[ERROR_NOTCL] Cancelled."))
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' %
_("Cancelled."))
return
# remove the geometry with the old size
@ -1032,7 +1044,8 @@ class FCDrillResize(FCShapeTool):
except KeyError:
# if the exception happen here then we are not dealing with slots neither
# therefore something else is not OK so we return
self.draw_app.app.inform.emit(_("[ERROR_NOTCL] Cancelled."))
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' %
_("Cancelled."))
return
# this simple hack is used so we can delete form self.draw_app.selected but
@ -1052,9 +1065,11 @@ class FCDrillResize(FCShapeTool):
# we reactivate the signals after the after the tool editing
self.draw_app.tools_table_exc.itemChanged.connect(self.draw_app.on_tool_edit)
self.draw_app.app.inform.emit(_("[success] Done. Drill/Slot Resize completed."))
self.draw_app.app.inform.emit('[success] Done. %s' %
_("Drill/Slot Resize completed."))
else:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Cancelled. No drills/slots selected for resize ..."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Cancelled. No drills/slots selected for resize ..."))
# init this set() for another use perhaps
self.selected_dia_set = set()
@ -1137,7 +1152,8 @@ class FCDrillMove(FCShapeTool):
sel_shapes_to_be_deleted = []
self.draw_app.build_ui()
self.draw_app.app.inform.emit(_("[success] Done. Drill(s) Move completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Drill(s) Move completed."))
def selection_bbox(self):
geo_list = []
@ -1234,7 +1250,8 @@ class FCDrillCopy(FCDrillMove):
sel_shapes_to_be_deleted = []
self.draw_app.build_ui()
self.draw_app.app.inform.emit(_("[success] Done. Drill(s) copied."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Drill(s) copied."))
class FCDrillSelect(DrawTool):
@ -2395,9 +2412,8 @@ class FlatCAMExcEditor(QtCore.QObject):
try:
tool_dia = float(self.addtool_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered, "
"use a number.")
)
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
if tool_dia not in self.olddia_newdia:
@ -2408,17 +2424,17 @@ class FlatCAMExcEditor(QtCore.QObject):
# each time a tool diameter is edited or added
self.olddia_newdia[tool_dia] = tool_dia
else:
self.app.inform.emit(_("[WARNING_NOTCL] Tool already in the original or actual tool list.\n"
"Save and reedit Excellon if you need to add this tool. ")
)
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Tool already in the original or actual tool list.\n"
"Save and reedit Excellon if you need to add this tool. "))
return
# since we add a new tool, we update also the initial state of the tool_table through it's dictionary
# we add a new entry in the tool2tooldia dict
self.tool2tooldia[len(self.olddia_newdia)] = tool_dia
self.app.inform.emit(_("[success] Added new tool with dia: {dia} {units}").format(dia=str(tool_dia),
units=str(self.units)))
self.app.inform.emit('[success] %s: %s %s' %
(_("Added new tool with dia"), str(tool_dia), str(self.units)))
self.build_ui()
@ -2449,7 +2465,8 @@ class FlatCAMExcEditor(QtCore.QObject):
else:
deleted_tool_dia_list.append(float('%.4f' % dia))
except Exception as e:
self.app.inform.emit(_("[WARNING_NOTCL] Select a tool in Tool Table"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Select a tool in Tool Table"))
return
for deleted_tool_dia in deleted_tool_dia_list:
@ -2481,9 +2498,8 @@ class FlatCAMExcEditor(QtCore.QObject):
self.olddia_newdia.pop(deleted_tool_dia, None)
self.app.inform.emit(_("[success] Deleted tool with dia: {del_dia} {units}").format(
del_dia=str(deleted_tool_dia),
units=str(self.units)))
self.app.inform.emit('[success] %s: %s %s' %
(_("Deleted tool with diameter"), str(deleted_tool_dia), str(self.units)))
self.replot()
# self.app.inform.emit("Could not delete selected tool")
@ -2632,7 +2648,8 @@ class FlatCAMExcEditor(QtCore.QObject):
self.tools_table_exc.itemChanged.connect(self.on_tool_edit)
self.tools_table_exc.cellPressed.connect(self.on_row_selected)
self.app.inform.emit(_("[success] Done. Tool edit completed."))
self.app.inform.emit('[success] %s' %
_("Done. Tool edit completed."))
# self.tools_table_exc.selectionModel().currentChanged.connect(self.on_row_selected)
@ -3166,11 +3183,12 @@ class FlatCAMExcEditor(QtCore.QObject):
try:
excellon_obj.create_geometry()
except KeyError:
self.app.inform.emit(
_("[ERROR_NOTCL] There are no Tools definitions in the file. Aborting Excellon creation.")
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("There are no Tools definitions in the file. Aborting Excellon creation.")
)
except:
msg = _("[ERROR] An internal error has ocurred. See shell.\n")
msg = '[ERROR] %s' % \
_("An internal error has ocurred. See Shell.\n")
msg += traceback.format_exc()
app_obj.inform.emit(msg)
raise
@ -3185,7 +3203,8 @@ class FlatCAMExcEditor(QtCore.QObject):
self.app.progress.emit(100)
return
self.app.inform.emit(_("[success] Excellon editing finished."))
self.app.inform.emit('[success] %s' %
_("Excellon editing finished."))
# self.progress.emit(100)
def on_tool_select(self, tool):
@ -3202,7 +3221,8 @@ class FlatCAMExcEditor(QtCore.QObject):
# self.draw_app.select_tool('drill_select')
self.complete = True
current_tool = 'drill_select'
self.app.inform.emit(_("[WARNING_NOTCL] Cancelled. There is no Tool/Drill selected"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Cancelled. There is no Tool/Drill selected"))
# This is to make the group behave as radio group
if current_tool in self.tools_exc:
@ -3421,14 +3441,16 @@ class FlatCAMExcEditor(QtCore.QObject):
self.active_tool.complete = True
self.in_action = False
self.delete_utility_geometry()
self.app.inform.emit(_("[success] Done."))
self.app.inform.emit('[success] %s' %
_("Done."))
self.select_tool('drill_select')
else:
if isinstance(self.active_tool, FCDrillAdd):
self.active_tool.complete = True
self.in_action = False
self.delete_utility_geometry()
self.app.inform.emit(_("[success] Done."))
self.app.inform.emit('[success] %s' %
_("Done."))
self.select_tool('drill_select')
self.app.cursor = QtGui.QCursor()
@ -3784,7 +3806,8 @@ class FlatCAMExcEditor(QtCore.QObject):
self.selected = []
self.build_ui()
self.app.inform.emit(_("[success] Done. Drill(s) deleted."))
self.app.inform.emit('[success] %s' %
_("Done. Drill(s) deleted."))
def delete_shape(self, del_shape):
self.is_modified = True

View File

@ -137,8 +137,8 @@ class BufferSelectionTool(FlatCAMTool):
buffer_distance = float(self.buffer_distance_entry.get_value().replace(',', '.'))
self.buffer_distance_entry.set_value(buffer_distance)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Buffer distance value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Buffer distance value is missing or wrong format. Add it and retry."))
return
# the cb index start from 0 but the join styles for the buffer start from 1 therefore the adjustment
# I populated the combobox such that the index coincide with the join styles value (which is really an INT)
@ -154,8 +154,8 @@ class BufferSelectionTool(FlatCAMTool):
buffer_distance = float(self.buffer_distance_entry.get_value().replace(',', '.'))
self.buffer_distance_entry.set_value(buffer_distance)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Buffer distance value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Buffer distance value is missing or wrong format. Add it and retry."))
return
# the cb index start from 0 but the join styles for the buffer start from 1 therefore the adjustment
# I populated the combobox such that the index coincide with the join styles value (which is really an INT)
@ -171,8 +171,8 @@ class BufferSelectionTool(FlatCAMTool):
buffer_distance = float(self.buffer_distance_entry.get_value().replace(',', '.'))
self.buffer_distance_entry.set_value(buffer_distance)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Buffer distance value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Buffer distance value is missing or wrong format. Add it and retry."))
return
# the cb index start from 0 but the join styles for the buffer start from 1 therefore the adjustment
# I populated the combobox such that the index coincide with the join styles value (which is really an INT)
@ -562,7 +562,8 @@ class PaintOptionsTool(FlatCAMTool):
def on_paint(self):
if not self.fcdraw.selected:
self.app.inform.emit(_("[WARNING_NOTCL] Paint cancelled. No shape selected."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Paint cancelled. No shape selected."))
return
try:
@ -573,8 +574,8 @@ class PaintOptionsTool(FlatCAMTool):
tooldia = float(self.painttooldia_entry.get_value().replace(',', '.'))
self.painttooldia_entry.set_value(tooldia)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Tool diameter value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Tool diameter value is missing or wrong format. Add it and retry."))
return
try:
overlap = float(self.paintoverlap_entry.get_value())
@ -584,8 +585,8 @@ class PaintOptionsTool(FlatCAMTool):
overlap = float(self.paintoverlap_entry.get_value().replace(',', '.'))
self.paintoverlap_entry.set_value(overlap)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Overlap value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Overlap value is missing or wrong format. Add it and retry."))
return
try:
@ -596,8 +597,8 @@ class PaintOptionsTool(FlatCAMTool):
margin = float(self.paintmargin_entry.get_value().replace(',', '.'))
self.paintmargin_entry.set_value(margin)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Margin distance value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Margin distance value is missing or wrong format. Add it and retry."))
return
method = self.paintmethod_combo.get_value()
contour = self.paintcontour_cb.get_value()
@ -1053,7 +1054,8 @@ class TransformEditorTool(FlatCAMTool):
def template(self):
if not self.fcdraw.selected:
self.app.inform.emit(_("[WARNING_NOTCL] Transformation cancelled. No shape selected."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Transformation cancelled. No shape selected."))
return
@ -1074,8 +1076,8 @@ class TransformEditorTool(FlatCAMTool):
try:
value = float(self.rotate_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Rotate, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
self.app.worker_task.emit({'fcn': self.on_rotate_action,
'params': [value]})
@ -1111,8 +1113,8 @@ class TransformEditorTool(FlatCAMTool):
try:
value = float(self.skewx_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Skew X, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# self.on_skew("X", value)
@ -1132,8 +1134,8 @@ class TransformEditorTool(FlatCAMTool):
try:
value = float(self.skewy_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Skew Y, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# self.on_skew("Y", value)
@ -1153,8 +1155,8 @@ class TransformEditorTool(FlatCAMTool):
try:
xvalue = float(self.scalex_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Scale X, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# scaling to zero has no sense so we remove it, because scaling with 1 does nothing
@ -1190,8 +1192,8 @@ class TransformEditorTool(FlatCAMTool):
try:
yvalue = float(self.scaley_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Scale Y, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# scaling to zero has no sense so we remove it, because scaling with 1 does nothing
@ -1222,8 +1224,8 @@ class TransformEditorTool(FlatCAMTool):
try:
value = float(self.offx_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Offset X, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# self.on_offset("X", value)
@ -1243,8 +1245,8 @@ class TransformEditorTool(FlatCAMTool):
try:
value = float(self.offy_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Offset Y, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# self.on_offset("Y", value)
@ -1261,7 +1263,8 @@ class TransformEditorTool(FlatCAMTool):
ymaxlist = []
if not shape_list:
self.app.inform.emit(_("[WARNING_NOTCL] No shape selected. Please Select a shape to rotate!"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No shape selected. Please Select a shape to rotate!"))
return
else:
with self.app.proc_container.new(_("Appying Rotate")):
@ -1292,12 +1295,14 @@ class TransformEditorTool(FlatCAMTool):
# self.draw_app.transform_complete.emit()
self.app.inform.emit(_("[success] Done. Rotate completed."))
self.app.inform.emit('[success] %s' %
_("Done. Rotate completed."))
self.app.progress.emit(100)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Due of %s, rotation movement was not executed.") % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Rotation action was not executed"),str(e)))
return
def on_flip(self, axis):
@ -1308,7 +1313,8 @@ class TransformEditorTool(FlatCAMTool):
ymaxlist = []
if not shape_list:
self.app.inform.emit(_("[WARNING_NOTCL] No shape selected. Please Select a shape to flip!"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No shape selected. Please Select a shape to flip!"))
return
else:
with self.app.proc_container.new(_("Applying Flip")):
@ -1341,10 +1347,12 @@ class TransformEditorTool(FlatCAMTool):
for sha in shape_list:
if axis is 'X':
sha.mirror('X', (px, py))
self.app.inform.emit(_('[success] Flip on the Y axis done ...'))
self.app.inform.emit('[success] %s...' %
_('Flip on the Y axis done'))
elif axis is 'Y':
sha.mirror('Y', (px, py))
self.app.inform.emit(_('[success] Flip on the X axis done ...'))
self.app.inform.emit('[success] %s' %
_('Flip on the X axis done'))
self.draw_app.replot()
# self.draw_app.add_shape(DrawToolShape(sha.geo))
@ -1354,7 +1362,8 @@ class TransformEditorTool(FlatCAMTool):
self.app.progress.emit(100)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Due of %s, Flip action was not executed.") % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Flip action was not executed"), str(e)))
return
def on_skew(self, axis, num):
@ -1363,7 +1372,8 @@ class TransformEditorTool(FlatCAMTool):
yminlist = []
if not shape_list:
self.app.inform.emit(_("[WARNING_NOTCL] No shape selected. Please Select a shape to shear/skew!"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No shape selected. Please Select a shape to shear/skew!"))
return
else:
with self.app.proc_container.new(_("Applying Skew")):
@ -1390,12 +1400,17 @@ class TransformEditorTool(FlatCAMTool):
# self.draw_app.add_shape(DrawToolShape(sha.geo))
#
# self.draw_app.transform_complete.emit()
self.app.inform.emit(_('[success] Skew on the %s axis done ...') % str(axis))
if axis == 'X':
self.app.inform.emit('[success] %s...' %
_('Skew on the X axis done'))
else:
self.app.inform.emit('[success] %s...' %
_('Skew on the Y axis done'))
self.app.progress.emit(100)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Due of %s, Skew action was not executed.") % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Skew action was not executed"), str(e)))
return
def on_scale(self, axis, xfactor, yfactor, point=None):
@ -1406,7 +1421,8 @@ class TransformEditorTool(FlatCAMTool):
ymaxlist = []
if not shape_list:
self.app.inform.emit(_("[WARNING_NOTCL] No shape selected. Please Select a shape to scale!"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No shape selected. Please Select a shape to scale!"))
return
else:
with self.app.proc_container.new(_("Applying Scale")):
@ -1442,10 +1458,16 @@ class TransformEditorTool(FlatCAMTool):
#
# self.draw_app.transform_complete.emit()
self.app.inform.emit(_('[success] Scale on the %s axis done ...') % str(axis))
if str(axis) == 'X':
self.app.inform.emit('[success] %s...' %
_('Scale on the X axis done'))
else:
self.app.inform.emit('[success] %s...' %
_('Scale on the Y axis done'))
self.app.progress.emit(100)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Due of %s, Scale action was not executed.") % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Scale action was not executed"), str(e)))
return
def on_offset(self, axis, num):
@ -1454,7 +1476,8 @@ class TransformEditorTool(FlatCAMTool):
yminlist = []
if not shape_list:
self.app.inform.emit(_("[WARNING_NOTCL] No shape selected. Please Select a shape to offset!"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No shape selected. Please Select a shape to offset!"))
return
else:
with self.app.proc_container.new(_("Applying Offset")):
@ -1468,11 +1491,17 @@ class TransformEditorTool(FlatCAMTool):
sha.offset((0, num))
self.draw_app.replot()
self.app.inform.emit(_('[success] Offset on the %s axis done ...') % str(axis))
if axis == 'X':
self.app.inform.emit('[success] %s...' %
_('Offset on the X axis done'))
else:
self.app.inform.emit('[success] %s...' %
_('Offset on the Y axis done'))
self.app.progress.emit(100)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Due of %s, Offset action was not executed.") % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Offset action was not executed"), str(e)))
return
def on_rotate_key(self):
@ -1485,14 +1514,12 @@ class TransformEditorTool(FlatCAMTool):
val, ok = val_box.get_value()
if ok:
self.on_rotate(val=val)
self.app.inform.emit(
_("[success] Geometry shape rotate done...")
)
self.app.inform.emit('[success] %s...' %
_("Geometry shape rotate done"))
return
else:
self.app.inform.emit(
_("[WARNING_NOTCL] Geometry shape rotate cancelled...")
)
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Geometry shape rotate cancelled"))
def on_offx_key(self):
units = self.app.ui.general_defaults_form.general_app_group.units_radio.get_value().lower()
@ -1506,12 +1533,12 @@ class TransformEditorTool(FlatCAMTool):
val, ok = val_box.get_value()
if ok:
self.on_offx(val=val)
self.app.inform.emit(
_("[success] Geometry shape offset on X axis done..."))
self.app.inform.emit('[success] %s' %
_("Geometry shape offset on X axis done"))
return
else:
self.app.inform.emit(
_("[WARNING_NOTCL] Geometry shape offset X cancelled..."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Geometry shape offset X cancelled"))
def on_offy_key(self):
units = self.app.ui.general_defaults_form.general_app_group.units_radio.get_value().lower()
@ -1525,12 +1552,12 @@ class TransformEditorTool(FlatCAMTool):
val, ok = val_box.get_value()
if ok:
self.on_offx(val=val)
self.app.inform.emit(
_("[success] Geometry shape offset on Y axis done..."))
self.app.inform.emit('[success] %s...' %
_("Geometry shape offset on Y axis done"))
return
else:
self.app.inform.emit(
_("[WARNING_NOTCL] Geometry shape offset Y cancelled..."))
self.app.inform.emit('[success] %s...' %
_("Geometry shape offset on Y axis canceled"))
def on_skewx_key(self):
val_box = FCInputDialog(title=_("Skew on X axis ..."),
@ -1542,12 +1569,12 @@ class TransformEditorTool(FlatCAMTool):
val, ok = val_box.get_value()
if ok:
self.on_skewx(val=val)
self.app.inform.emit(
_("[success] Geometry shape skew on X axis done..."))
self.app.inform.emit('[success] %s...' %
_("Geometry shape skew on X axis done"))
return
else:
self.app.inform.emit(
_("[WARNING_NOTCL] Geometry shape skew X cancelled..."))
self.app.inform.emit('[success] %s...' %
_("Geometry shape skew on X axis canceled"))
def on_skewy_key(self):
val_box = FCInputDialog(title=_("Skew on Y axis ..."),
@ -1559,12 +1586,12 @@ class TransformEditorTool(FlatCAMTool):
val, ok = val_box.get_value()
if ok:
self.on_skewx(val=val)
self.app.inform.emit(
_("[success] Geometry shape skew on Y axis done..."))
self.app.inform.emit('[success] %s...' %
_("Geometry shape skew on Y axis done"))
return
else:
self.app.inform.emit(
_("[WARNING_NOTCL] Geometry shape skew Y cancelled..."))
self.app.inform.emit('[success] %s...' %
_("Geometry shape skew on Y axis canceled"))
class DrawToolShape(object):
@ -1964,7 +1991,8 @@ class FCCircle(FCShapeTool):
radius = distance(p1, p2)
self.geometry = DrawToolShape(Point(p1).buffer(radius, int(self.steps_per_circ / 4)))
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Adding Circle completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Adding Circle completed."))
class FCArc(FCShapeTool):
@ -2178,7 +2206,8 @@ class FCArc(FCShapeTool):
self.geometry = DrawToolShape(LineString(arc(center, radius, startangle, stopangle,
self.direction, self.steps_per_circ)))
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Arc completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Arc completed."))
class FCRectangle(FCShapeTool):
@ -2231,7 +2260,8 @@ class FCRectangle(FCShapeTool):
# self.geometry = LinearRing([p1, (p2[0], p1[1]), p2, (p1[0], p2[1])])
self.geometry = DrawToolShape(Polygon([p1, (p2[0], p1[1]), p2, (p1[0], p2[1])]))
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Rectangle completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Rectangle completed."))
class FCPolygon(FCShapeTool):
@ -2285,7 +2315,8 @@ class FCPolygon(FCShapeTool):
self.geometry = DrawToolShape(Polygon(self.points))
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Polygon completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Polygon completed."))
def on_key(self, key):
if key == 'Backspace' or key == QtCore.Qt.Key_Backspace:
@ -2440,7 +2471,8 @@ class FCMove(FCShapeTool):
self.selection_shape = self.selection_bbox()
if len(self.draw_app.get_selected()) == 0:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] MOVE: No shape selected. Select a shape to move ..."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s...' %
_("MOVE: No shape selected. Select a shape to move"))
else:
self.draw_app.app.inform.emit(_(" MOVE: Click on reference point ..."))
@ -2479,7 +2511,8 @@ class FCMove(FCShapeTool):
# Delete old
self.draw_app.delete_selected()
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Geometry(s) Move completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Geometry(s) Move completed."))
def selection_bbox(self):
geo_list = []
@ -2599,7 +2632,8 @@ class FCCopy(FCMove):
self.geometry = [DrawToolShape(affinity.translate(geom.geo, xoff=dx, yoff=dy))
for geom in self.draw_app.get_selected()]
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Geometry(s) Copy completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Geometry(s) Copy completed."))
class FCText(FCShapeTool):
@ -2635,20 +2669,23 @@ class FCText(FCShapeTool):
self.geometry = DrawToolShape(affinity.translate(self.text_gui.text_path, xoff=dx, yoff=dy))
except Exception as e:
log.debug("Font geometry is empty or incorrect: %s" % str(e))
self.draw_app.app.inform.emit(_("[ERROR]Font not supported. Only Regular, Bold, Italic and BoldItalic are "
"supported. Error: %s") % str(e))
self.draw_app.app.inform.emit('[ERROR] %s: %s' %
(_("Font not supported. Only Regular, Bold, Italic and BoldItalic are "
"supported. Error"), str(e)))
self.text_gui.text_path = []
self.text_gui.hide_tool()
self.draw_app.select_tool('select')
return
else:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] No text to add."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("No text to add."))
return
self.text_gui.text_path = []
self.text_gui.hide_tool()
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Adding Text completed."))
self.draw_app.app.inform.emit('[success]%s' %
_(" Done. Adding Text completed."))
def utility_geometry(self, data=None):
"""
@ -2687,7 +2724,8 @@ class FCBuffer(FCShapeTool):
def on_buffer(self):
if not self.draw_app.selected:
self.app.inform.emit(_("[WARNING_NOTCL] Buffer cancelled. No shape selected."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Buffer cancelled. No shape selected."))
return
try:
@ -2698,8 +2736,8 @@ class FCBuffer(FCShapeTool):
buffer_distance = float(self.buff_tool.buffer_distance_entry.get_value().replace(',', '.'))
self.buff_tool.buffer_distance_entry.set_value(buffer_distance)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Buffer distance value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Buffer distance value is missing or wrong format. Add it and retry."))
return
# the cb index start from 0 but the join styles for the buffer start from 1 therefore the adjustment
# I populated the combobox such that the index coincide with the join styles value (whcih is really an INT)
@ -2711,11 +2749,13 @@ class FCBuffer(FCShapeTool):
self.disactivate()
if ret_val == 'fail':
return
self.draw_app.app.inform.emit(_("[success] Done. Buffer Tool completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Buffer Tool completed."))
def on_buffer_int(self):
if not self.draw_app.selected:
self.app.inform.emit(_("[WARNING_NOTCL] Buffer cancelled. No shape selected."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Buffer cancelled. No shape selected."))
return
try:
@ -2726,8 +2766,8 @@ class FCBuffer(FCShapeTool):
buffer_distance = float(self.buff_tool.buffer_distance_entry.get_value().replace(',', '.'))
self.buff_tool.buffer_distance_entry.set_value(buffer_distance)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Buffer distance value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Buffer distance value is missing or wrong format. Add it and retry."))
return
# the cb index start from 0 but the join styles for the buffer start from 1 therefore the adjustment
# I populated the combobox such that the index coincide with the join styles value (whcih is really an INT)
@ -2739,11 +2779,13 @@ class FCBuffer(FCShapeTool):
self.disactivate()
if ret_val == 'fail':
return
self.draw_app.app.inform.emit(_("[success] Done. Buffer Int Tool completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Buffer Int Tool completed."))
def on_buffer_ext(self):
if not self.draw_app.selected:
self.app.inform.emit(_("[WARNING_NOTCL] Buffer cancelled. No shape selected."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Buffer cancelled. No shape selected."))
return
try:
@ -2754,8 +2796,8 @@ class FCBuffer(FCShapeTool):
buffer_distance = float(self.buff_tool.buffer_distance_entry.get_value().replace(',', '.'))
self.buff_tool.buffer_distance_entry.set_value(buffer_distance)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Buffer distance value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Buffer distance value is missing or wrong format. Add it and retry."))
return
# the cb index start from 0 but the join styles for the buffer start from 1 therefore the adjustment
# I populated the combobox such that the index coincide with the join styles value (whcih is really an INT)
@ -2767,7 +2809,8 @@ class FCBuffer(FCShapeTool):
self.disactivate()
if ret_val == 'fail':
return
self.draw_app.app.inform.emit(_("[success] Done. Buffer Ext Tool completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Buffer Ext Tool completed."))
def activate(self):
self.buff_tool.buffer_button.clicked.disconnect()
@ -2862,7 +2905,8 @@ class FCEraser(FCShapeTool):
self.draw_app.delete_utility_geometry()
self.draw_app.plot_all()
self.draw_app.app.inform.emit(_("[success] Done. Eraser tool action completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Eraser tool action completed."))
def utility_geometry(self, data=None):
"""
@ -3497,8 +3541,13 @@ class FlatCAMGeoEditor(QtCore.QObject):
if multigeo_tool:
self.multigeo_tool = multigeo_tool
geo_to_edit = fcgeometry.flatten(geometry=fcgeometry.tools[self.multigeo_tool]['solid_geometry'])
self.app.inform.emit(_("[WARNING_NOTCL] Editing MultiGeo Geometry, tool: {tool} with diameter: {dia}").
format(tool=self.multigeo_tool, dia=fcgeometry.tools[self.multigeo_tool]['tooldia']))
self.app.inform.emit('[WARNING_NOTCL] %s: %s %s: %s' %
(_("Editing MultiGeo Geometry, tool"),
str(self.multigeo_tool),
_("with diameter"),
str(fcgeometry.tools[self.multigeo_tool]['tooldia'])
)
)
else:
geo_to_edit = fcgeometry.flatten()
@ -3738,7 +3787,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
self.active_tool.complete = True
self.in_action = False
self.delete_utility_geometry()
self.app.inform.emit(_("[success] Done."))
self.app.inform.emit('[success] %s' %
_("Done."))
self.select_tool('select')
else:
self.app.cursor = QtGui.QCursor()
@ -3752,7 +3802,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
self.active_tool.make()
if self.active_tool.complete:
self.on_shape_complete()
self.app.inform.emit(_("[success] Done."))
self.app.inform.emit('[success] %s' %
_("Done."))
self.select_tool(self.active_tool.name)
except Exception as e:
log.warning("Error: %s" % str(e))
@ -3869,7 +3920,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
def on_copy_click(self):
if not self.selected:
self.app.inform.emit(_("[WARNING_NOTCL] Copy cancelled. No shape selected."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Copy cancelled. No shape selected."))
return
self.app.ui.geo_copy_btn.setChecked(True)
@ -4119,8 +4171,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
results = geo_shapes[0].geo
except Exception as e:
log.debug("FlatCAMGeoEditor.intersection() --> %s" % str(e))
self.app.inform.emit(
_("[WARNING_NOTCL] A selection of at least 2 geo items is required to do Intersection."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("A selection of at least 2 geo items is required to do Intersection."))
self.select_tool('select')
return
@ -4154,8 +4206,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
intersector = geo_shapes[0].geo
except Exception as e:
log.debug("FlatCAMGeoEditor.intersection() --> %s" % str(e))
self.app.inform.emit(
_("[WARNING_NOTCL] A selection of at least 2 geo items is required to do Intersection."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("A selection of at least 2 geo items is required to do Intersection."))
self.select_tool('select')
return
@ -4240,9 +4292,9 @@ class FlatCAMGeoEditor(QtCore.QObject):
selected = self.get_selected()
if buf_distance < 0:
self.app.inform.emit(
_("[ERROR_NOTCL] Negative buffer value is not accepted. "
"Use Buffer interior to generate an 'inside' shape"))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Negative buffer value is not accepted. Use Buffer interior to generate an "
"'inside' shape"))
# deselect everything
self.selected = []
@ -4250,11 +4302,13 @@ class FlatCAMGeoEditor(QtCore.QObject):
return 'fail'
if len(selected) == 0:
self.app.inform.emit(_("[WARNING_NOTCL] Nothing selected for buffering."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Nothing selected for buffering."))
return 'fail'
if not isinstance(buf_distance, float):
self.app.inform.emit(_("[WARNING_NOTCL] Invalid distance for buffering."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Invalid distance for buffering."))
# deselect everything
self.selected = []
@ -4277,7 +4331,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
)
if not results:
self.app.inform.emit(_("[ERROR_NOTCL] Failed, the result is empty. Choose a different buffer value."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Failed, the result is empty. Choose a different buffer value."))
# deselect everything
self.selected = []
self.replot()
@ -4287,14 +4342,15 @@ class FlatCAMGeoEditor(QtCore.QObject):
self.add_shape(DrawToolShape(sha))
self.replot()
self.app.inform.emit(_("[success] Full buffer geometry created."))
self.app.inform.emit('[success] %s' %
_("Full buffer geometry created."))
def buffer_int(self, buf_distance, join_style):
selected = self.get_selected()
if buf_distance < 0:
self.app.inform.emit(
_("[ERROR_NOTCL] Negative buffer value is not accepted.")
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Negative buffer value is not accepted.")
)
# deselect everything
self.selected = []
@ -4302,11 +4358,13 @@ class FlatCAMGeoEditor(QtCore.QObject):
return 'fail'
if len(selected) == 0:
self.app.inform.emit(_("[WARNING_NOTCL] Nothing selected for buffering."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Nothing selected for buffering."))
return 'fail'
if not isinstance(buf_distance, float):
self.app.inform.emit(_("[WARNING_NOTCL] Invalid distance for buffering."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Invalid distance for buffering."))
# deselect everything
self.selected = []
self.replot()
@ -4325,7 +4383,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
)
if not results:
self.app.inform.emit(_("[ERROR_NOTCL] Failed, the result is empty. Choose a smaller buffer value."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Failed, the result is empty. Choose a smaller buffer value."))
# deselect everything
self.selected = []
self.replot()
@ -4335,25 +4394,29 @@ class FlatCAMGeoEditor(QtCore.QObject):
self.add_shape(DrawToolShape(sha))
self.replot()
self.app.inform.emit(_("[success] Interior buffer geometry created."))
self.app.inform.emit('[success] %s' %
_("Interior buffer geometry created."))
def buffer_ext(self, buf_distance, join_style):
selected = self.get_selected()
if buf_distance < 0:
self.app.inform.emit(_("[ERROR_NOTCL] Negative buffer value is not accepted. "
"Use Buffer interior to generate an 'inside' shape"))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Negative buffer value is not accepted. Use Buffer interior to generate an "
"'inside' shape"))
# deselect everything
self.selected = []
self.replot()
return
if len(selected) == 0:
self.app.inform.emit(_("[WARNING_NOTCL] Nothing selected for buffering."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Nothing selected for buffering."))
return
if not isinstance(buf_distance, float):
self.app.inform.emit(_("[WARNING_NOTCL] Invalid distance for buffering."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Invalid distance for buffering."))
# deselect everything
self.selected = []
self.replot()
@ -4372,7 +4435,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
)
if not results:
self.app.inform.emit(_("[ERROR_NOTCL] Failed, the result is empty. Choose a different buffer value."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Failed, the result is empty. Choose a different buffer value."))
# deselect everything
self.selected = []
self.replot()
@ -4382,7 +4446,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
self.add_shape(DrawToolShape(sha))
self.replot()
self.app.inform.emit(_("[success] Exterior buffer geometry created."))
self.app.inform.emit('[success] %s' %
_("Exterior buffer geometry created."))
# def paint(self, tooldia, overlap, margin, method):
# selected = self.get_selected()
@ -4446,19 +4511,21 @@ class FlatCAMGeoEditor(QtCore.QObject):
selected = self.get_selected()
if len(selected) == 0:
self.app.inform.emit(_("[WARNING_NOTCL] Nothing selected for painting."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Nothing selected for painting."))
return
for param in [tooldia, overlap, margin]:
if not isinstance(param, float):
param_name = [k for k, v in locals().items() if v is param][0]
self.app.inform.emit(_("[WARNING] Invalid value for {}").format(param))
self.app.inform.emit('[WARNING] %s: %s' %
(_("Invalid value for"), str(param)))
results = []
if overlap >= 1:
self.app.inform.emit(
_("[ERROR_NOTCL] Could not do Paint. Overlap value has to be less than 1.00 (100%)."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Could not do Paint. Overlap value has to be less than 1.00 (100%%)."))
return
def recurse(geometry, reset=True):
@ -4516,8 +4583,8 @@ class FlatCAMGeoEditor(QtCore.QObject):
local_results += list(cp.get_objects())
except Exception as e:
log.debug("Could not Paint the polygons. %s" % str(e))
self.app.inform.emit(
_("[ERROR] Could not do Paint. Try a different combination of parameters. "
self.app.inform.emit('[ERROR] %s' %
_("Could not do Paint. Try a different combination of parameters. "
"Or a different method of Paint\n%s") % str(e))
return

View File

@ -204,14 +204,15 @@ class FCPad(FCShapeTool):
try:
self.radius = float(self.draw_app.storage_dict[self.draw_app.last_aperture_selected]['size']) / 2
except KeyError:
self.draw_app.app.inform.emit(_(
"[WARNING_NOTCL] To add an Pad first select a aperture in Aperture Table"))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("To add an Pad first select a aperture in Aperture Table"))
self.draw_app.in_action = False
self.complete = True
return
if self.radius == 0:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Aperture size is zero. It needs to be greater than zero."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Aperture size is zero. It needs to be greater than zero."))
self.dont_execute = True
return
else:
@ -374,7 +375,8 @@ class FCPad(FCShapeTool):
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Adding Pad completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Adding Pad completed."))
def clean_up(self):
self.draw_app.selected = []
@ -395,15 +397,16 @@ class FCPadArray(FCShapeTool):
try:
self.radius = float(self.draw_app.storage_dict[self.draw_app.last_aperture_selected]['size']) / 2
except KeyError:
self.draw_app.app.inform.emit(_(
"[WARNING_NOTCL] To add an Pad Array first select a aperture in Aperture Table"))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("To add an Pad Array first select a aperture in Aperture Table"))
self.complete = True
self.draw_app.in_action = False
self.draw_app.array_frame.hide()
return
if self.radius == 0:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Aperture size is zero. It needs to be greater than zero."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Aperture size is zero. It needs to be greater than zero."))
self.dont_execute = True
return
else:
@ -498,11 +501,12 @@ class FCPadArray(FCShapeTool):
self.pad_linear_angle = float(self.draw_app.linear_angle_spinner.get_value())
self.pad_angle = float(self.draw_app.pad_angle_entry.get_value())
except TypeError:
self.draw_app.app.inform.emit(
_("[ERROR_NOTCL] The value is not Float. Check for comma instead of dot separator."))
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' %
_("The value is not Float. Check for comma instead of dot separator."))
return
except Exception as e:
self.draw_app.app.inform.emit(_("[ERROR_NOTCL] The value is mistyped. Check the value."))
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' %
_("The value is mistyped. Check the value."))
return
if self.pad_array == 'Linear':
@ -692,7 +696,8 @@ class FCPadArray(FCShapeTool):
self.geometry.append(DrawToolShape(geo))
else:
if (self.pad_angle * self.pad_array_size) > 360:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Too many Pads for the selected spacing angle."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Too many Pads for the selected spacing angle."))
return
radius = distance(self.destination, self.origin)
@ -714,7 +719,8 @@ class FCPadArray(FCShapeTool):
self.geometry.append(DrawToolShape(geo))
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Pad Array added."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Pad Array added."))
self.draw_app.in_action = False
self.draw_app.array_frame.hide()
return
@ -746,7 +752,8 @@ class FCPoligonize(FCShapeTool):
if not self.draw_app.selected:
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[ERROR_NOTCL] Failed. Nothing selected."))
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' %
_("Failed. Nothing selected."))
self.draw_app.select_tool("select")
return
@ -761,8 +768,9 @@ class FCPoligonize(FCShapeTool):
if len(apid_set) > 1:
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Failed. Poligonize works only on "
"geometries belonging to the same aperture."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
_("Failed. Poligonize works only on geometries belonging "
"to the same aperture."))
self.draw_app.select_tool("select")
return
@ -814,7 +822,8 @@ class FCPoligonize(FCShapeTool):
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done. Poligonize completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Poligonize completed."))
# MS: always return to the Select Tool if modifier key is not pressed
# else return to the current tool
@ -1054,7 +1063,8 @@ class FCRegion(FCShapeTool):
self.geometry = DrawToolShape(new_geo_el)
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done."))
def clean_up(self):
self.draw_app.selected = []
@ -1157,7 +1167,8 @@ class FCTrack(FCRegion):
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done."))
def clean_up(self):
self.draw_app.selected = []
@ -1430,7 +1441,8 @@ class FCDisc(FCShapeTool):
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done."))
def clean_up(self):
self.draw_app.selected = []
@ -1687,7 +1699,8 @@ class FCSemiDisc(FCShapeTool):
self.draw_app.in_action = False
self.complete = True
self.draw_app.app.inform.emit(_("[success] Done."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done."))
def clean_up(self):
self.draw_app.selected = []
@ -1835,7 +1848,8 @@ class FCApertureMove(FCShapeTool):
self.selected_apertures = []
if len(self.draw_app.get_selected()) == 0:
self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Nothing selected to move ..."))
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s...' %
_("Nothing selected to move"))
self.complete = True
self.draw_app.select_tool("select")
return
@ -1958,7 +1972,8 @@ class FCApertureMove(FCShapeTool):
self.draw_app.plot_all()
self.draw_app.build_ui()
self.draw_app.app.inform.emit(_("[success] Done. Apertures Move completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Apertures Move completed."))
def clean_up(self):
self.draw_app.selected = []
@ -2034,7 +2049,8 @@ class FCApertureCopy(FCApertureMove):
sel_shapes_to_be_deleted = []
self.draw_app.build_ui()
self.draw_app.app.inform.emit(_("[success] Done. Apertures copied."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Apertures copied."))
class FCEraser(FCShapeTool):
@ -2141,7 +2157,8 @@ class FCEraser(FCShapeTool):
self.draw_app.delete_utility_geometry()
self.draw_app.plot_all()
self.draw_app.app.inform.emit(_("[success] Done. Eraser tool action completed."))
self.draw_app.app.inform.emit('[success] %s' %
_("Done. Eraser tool action completed."))
def clean_up(self):
self.draw_app.selected = []
@ -3132,12 +3149,12 @@ class FlatCAMGrbEditor(QtCore.QObject):
try:
ap_id = str(self.apcode_entry.get_value())
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Aperture code value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Aperture code value is missing or wrong format. Add it and retry."))
return
if ap_id == '':
self.app.inform.emit(_("[WARNING_NOTCL] Aperture code value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Aperture code value is missing or wrong format. Add it and retry."))
return
if ap_id == '0':
@ -3172,7 +3189,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
except Exception as e:
log.error("FlatCAMGrbEditor.on_aperture_add() --> the R or O aperture dims has to be in a "
"tuple format (x,y)\nError: %s" % str(e))
self.app.inform.emit(_("[WARNING_NOTCL] Aperture dimensions value is missing or wrong format. "
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Aperture dimensions value is missing or wrong format. "
"Add it in format (width, height) and retry."))
return
else:
@ -3184,8 +3202,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
size_val = float(self.apsize_entry.get_value().replace(',', '.'))
self.apsize_entry.set_value(size_val)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Aperture size value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Aperture size value is missing or wrong format. Add it and retry."))
return
self.storage_dict[ap_id]['size'] = size_val
@ -3195,14 +3213,16 @@ class FlatCAMGrbEditor(QtCore.QObject):
# values each time a aperture code is edited or added
self.olddia_newdia[ap_id] = ap_id
else:
self.app.inform.emit(_("[WARNING_NOTCL] Aperture already in the aperture table."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Aperture already in the aperture table."))
return
# since we add a new tool, we update also the initial state of the tool_table through it's dictionary
# we add a new entry in the tool2tooldia dict
self.tool2tooldia[len(self.olddia_newdia)] = int(ap_id)
self.app.inform.emit(_("[success] Added new aperture with code: {apid}").format(apid=str(ap_id)))
self.app.inform.emit('[success] %s: %s' %
(_("Added new aperture with code"), str(ap_id)))
self.build_ui()
@ -3230,13 +3250,15 @@ class FlatCAMGrbEditor(QtCore.QObject):
else:
# deleted_tool_dia = float(self.apertures_table.item(self.apertures_table.currentRow(), 1).text())
if len(self.apertures_table.selectionModel().selectedRows()) == 0:
self.app.inform.emit(_("[WARNING_NOTCL] Select an aperture in Aperture Table"))
self.app.inform.emit('[WARNING_NOTCL]%s' %
_(" Select an aperture in Aperture Table"))
return
for index in self.apertures_table.selectionModel().selectedRows():
row = index.row()
deleted_apcode_list.append(self.apertures_table.item(row, 1).text())
except Exception as exc:
self.app.inform.emit(_("[WARNING_NOTCL] Select an aperture in Aperture Table --> %s" % str(exc)))
self.app.inform.emit('[WARNING_NOTCL] %s %s' %
(_("Select an aperture in Aperture Table -->", str(exc))))
return
if deleted_apcode_list:
@ -3259,8 +3281,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
self.olddia_newdia.pop(deleted_aperture, None)
self.app.inform.emit(_("[success] Deleted aperture with code: {del_dia}").format(
del_dia=str(deleted_aperture)))
self.app.inform.emit('[success] %s: %s' %
(_("Deleted aperture with code"), str(deleted_aperture)))
self.plot_all()
self.build_ui()
@ -3910,11 +3932,11 @@ class FlatCAMGrbEditor(QtCore.QObject):
try:
grb_obj.create_geometry()
except KeyError:
self.app.inform.emit(
_("[ERROR_NOTCL] There are no Aperture definitions in the file. Aborting Gerber creation.")
)
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("There are no Aperture definitions in the file. Aborting Gerber creation."))
except Exception as e:
msg = _("[ERROR] An internal error has occurred. See shell.\n")
msg = '[ERROR] %s' % \
_("An internal error has occurred. See shell.\n")
msg += traceback.format_exc()
app_obj.inform.emit(msg)
raise
@ -3927,7 +3949,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
self.app.progress.emit(100)
return
self.app.inform.emit(_("[success] Gerber editing finished."))
self.app.inform.emit('[success] %s' %
_("Done. Gerber editing finished."))
def on_tool_select(self, tool):
"""
@ -3943,7 +3966,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
# self.draw_app.select_tool('select')
self.complete = True
current_tool = 'select'
self.app.inform.emit(_("[WARNING_NOTCL] Cancelled. No aperture is selected"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Cancelled. No aperture is selected"))
# This is to make the group behave as radio group
if current_tool in self.tools_gerber:
@ -4094,7 +4118,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
self.app.clipboard.setText(
self.app.defaults["global_point_clipboard_format"] % (self.pos[0], self.pos[1])
)
self.app.inform.emit(_("[success] Coordinates copied to clipboard."))
self.app.inform.emit('[success] %s' %
_("Coordinates copied to clipboard."))
return
# Dispatch event to active_tool
@ -4153,7 +4178,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
self.active_tool.complete = True
self.in_action = False
self.delete_utility_geometry()
self.app.inform.emit(_("[success] Done."))
self.app.inform.emit('[success] %s' %
_("Done."))
self.select_tool('select')
else:
self.app.cursor = QtGui.QCursor()
@ -4167,7 +4193,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
self.active_tool.make()
if self.active_tool.complete:
self.on_grb_shape_complete()
self.app.inform.emit(_("[success] Done."))
self.app.inform.emit('[success] %s' %
_("Done."))
# MS: always return to the Select Tool if modifier key is not pressed
# else return to the current tool but not for FCTrack
@ -4474,7 +4501,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
temp_ref = [s for s in self.selected]
if len(temp_ref) == 0:
self.app.inform.emit(_("[ERROR_NOTCL] Failed. No aperture geometry is selected."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Failed. No aperture geometry is selected."))
return
for shape_sel in temp_ref:
@ -4482,7 +4510,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
self.selected = []
self.build_ui()
self.app.inform.emit(_("[success] Done. Apertures geometry deleted."))
self.app.inform.emit('[success] %s' %
_("Done. Apertures geometry deleted."))
def delete_shape(self, geo_el):
self.is_modified = True
@ -4596,8 +4625,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
buff_value = float(self.buffer_distance_entry.get_value().replace(',', '.'))
self.buffer_distance_entry.set_value(buff_value)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Buffer distance value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Buffer distance value is missing or wrong format. Add it and retry."))
return
# the cb index start from 0 but the join styles for the buffer start from 1 therefore the adjustment
# I populated the combobox such that the index coincide with the join styles value (which is really an INT)
@ -4624,9 +4653,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
return geom_el
if not self.apertures_table.selectedItems():
self.app.inform.emit(_(
"[WARNING_NOTCL] No aperture to buffer. Select at least one aperture and try again."
))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No aperture to buffer. Select at least one aperture and try again."))
return
for x in self.apertures_table.selectedItems():
@ -4638,10 +4666,12 @@ class FlatCAMGrbEditor(QtCore.QObject):
self.storage_dict[apid]['geometry'] = temp_storage
except Exception as e:
log.debug("FlatCAMGrbEditor.buffer() --> %s\n%s" % str(e))
self.app.inform.emit(_("[ERROR_NOTCL] Failed.\n%s") % str(traceback.print_exc()))
self.app.inform.emit('[ERROR_NOTCL] %s\n%s' %
(_("Failed."), str(traceback.print_exc())))
return
self.plot_all()
self.app.inform.emit(_("[success] Done. Buffer Tool completed."))
self.app.inform.emit('[success] %s' %
_("Done. Buffer Tool completed."))
def on_scale(self):
scale_factor = 1.0
@ -4655,8 +4685,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
scale_factor = float(self.scale_factor_entry.get_value().replace(',', '.'))
self.scale_factor_entry.set_value(scale_factor)
except ValueError:
self.app.inform.emit(_("[WARNING_NOTCL] Scale factor value is missing or wrong format. "
"Add it and retry."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Scale factor value is missing or wrong format. Add it and retry."))
return
def scale_recursion(geom_el, selection):
@ -4687,9 +4717,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
return geom_el
if not self.apertures_table.selectedItems():
self.app.inform.emit(_(
"[WARNING_NOTCL] No aperture to scale. Select at least one aperture and try again."
))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No aperture to scale. Select at least one aperture and try again."))
return
for x in self.apertures_table.selectedItems():
@ -4704,7 +4733,8 @@ class FlatCAMGrbEditor(QtCore.QObject):
log.debug("FlatCAMGrbEditor.on_scale() --> %s" % str(e))
self.plot_all()
self.app.inform.emit(_("[success] Done. Scale Tool completed."))
self.app.inform.emit('[success] %s' %
_("Done. Scale Tool completed."))
def on_markarea(self):
# clear previous marking
@ -4741,9 +4771,11 @@ class FlatCAMGrbEditor(QtCore.QObject):
self.ma_annotation.set(text=text, pos=position, visible=True,
font_size=self.app.defaults["cncjob_annotation_fontsize"],
color=self.app.defaults["global_sel_draw_color"])
self.app.inform.emit(_("[success] Polygon areas marked."))
self.app.inform.emit('[success] %s' %
_("Polygon areas marked."))
else:
self.app.inform.emit(_("[WARNING_NOTCL] There are no polygons to mark area."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("There are no polygons to mark area."))
def on_eraser(self):
self.select_tool('eraser')
@ -5226,7 +5258,8 @@ class TransformEditorTool(FlatCAMTool):
def template(self):
if not self.fcdraw.selected:
self.app.inform.emit(_("[WARNING_NOTCL] Transformation cancelled. No shape selected."))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("Transformation cancelled. No shape selected."))
return
self.draw_app.select_tool("select")
@ -5246,8 +5279,8 @@ class TransformEditorTool(FlatCAMTool):
try:
value = float(self.rotate_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Rotate, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
self.app.worker_task.emit({'fcn': self.on_rotate_action,
'params': [value]})
@ -5289,8 +5322,8 @@ class TransformEditorTool(FlatCAMTool):
try:
value = float(self.skewx_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Skew X, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# self.on_skew("X", value)
@ -5316,8 +5349,8 @@ class TransformEditorTool(FlatCAMTool):
try:
value = float(self.skewy_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Skew Y, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# self.on_skew("Y", value)
@ -5343,8 +5376,8 @@ class TransformEditorTool(FlatCAMTool):
try:
x_value = float(self.scalex_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Scale X, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# scaling to zero has no sense so we remove it, because scaling with 1 does nothing
@ -5384,8 +5417,8 @@ class TransformEditorTool(FlatCAMTool):
try:
y_value = float(self.scaley_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Scale Y, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# scaling to zero has no sense so we remove it, because scaling with 1 does nothing
@ -5422,8 +5455,8 @@ class TransformEditorTool(FlatCAMTool):
try:
value = float(self.offx_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Offset X, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# self.on_offset("X", value)
@ -5448,8 +5481,8 @@ class TransformEditorTool(FlatCAMTool):
try:
value = float(self.offy_entry.get_value().replace(',', '.'))
except ValueError:
self.app.inform.emit(_("[ERROR_NOTCL] Wrong value format entered for Offset Y, "
"use a number."))
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("Wrong value format entered, use a number."))
return
# self.on_offset("Y", value)
@ -5471,7 +5504,8 @@ class TransformEditorTool(FlatCAMTool):
ymaxlist = []
if not elem_list:
self.app.inform.emit(_("[WARNING_NOTCL] No shape selected. Please Select a shape to rotate!"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No shape selected. Please Select a shape to rotate!"))
return
with self.app.proc_container.new(_("Appying Rotate")):
@ -5507,10 +5541,12 @@ class TransformEditorTool(FlatCAMTool):
sel_el['clear'] = affinity.rotate(sel_el['clear'], angle=-num, origin=(px, py))
self.draw_app.plot_all()
self.app.inform.emit(_("[success] Done. Rotate completed."))
self.app.inform.emit('[success] %s' %
_("Done. Rotate completed."))
self.app.progress.emit(100)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Due of %s, rotation movement was not executed.") % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Rotation action was not executed."), str(e)))
return
def on_flip(self, axis):
@ -5526,7 +5562,8 @@ class TransformEditorTool(FlatCAMTool):
ymaxlist = []
if not elem_list:
self.app.inform.emit(_("[WARNING_NOTCL] No shape selected. Please Select a shape to flip!"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No shape selected. Please Select a shape to flip!"))
return
with self.app.proc_container.new(_("Applying Flip")):
@ -5568,7 +5605,8 @@ class TransformEditorTool(FlatCAMTool):
sel_el['follow'] = affinity.scale(sel_el['follow'], xfact=1, yfact=-1, origin=(px, py))
if 'clear' in sel_el:
sel_el['clear'] = affinity.scale(sel_el['clear'], xfact=1, yfact=-1, origin=(px, py))
self.app.inform.emit(_('[success] Flip on the Y axis done ...'))
self.app.inform.emit('[success] %s...' %
_('Flip on the Y axis done'))
elif axis is 'Y':
if 'solid' in sel_el:
sel_el['solid'] = affinity.scale(sel_el['solid'], xfact=-1, yfact=1, origin=(px, py))
@ -5576,12 +5614,14 @@ class TransformEditorTool(FlatCAMTool):
sel_el['follow'] = affinity.scale(sel_el['follow'], xfact=-1, yfact=1, origin=(px, py))
if 'clear' in sel_el:
sel_el['clear'] = affinity.scale(sel_el['clear'], xfact=-1, yfact=1, origin=(px, py))
self.app.inform.emit(_('[success] Flip on the X axis done ...'))
self.app.inform.emit('[success] %s...' %
_('Flip on the X axis done'))
self.draw_app.plot_all()
self.app.progress.emit(100)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Due of %s, Flip action was not executed.") % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Flip action was not executed."), str(e)))
return
def on_skew(self, axis, num):
@ -5596,7 +5636,8 @@ class TransformEditorTool(FlatCAMTool):
yminlist = []
if not elem_list:
self.app.inform.emit(_("[WARNING_NOTCL] No shape selected. Please Select a shape to shear/skew!"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No shape selected. Please Select a shape to shear/skew!"))
return
else:
with self.app.proc_container.new(_("Applying Skew")):
@ -5634,11 +5675,17 @@ class TransformEditorTool(FlatCAMTool):
sel_el['clear'] = affinity.skew(sel_el['clear'], 0, num, origin=(xminimal, yminimal))
self.draw_app.plot_all()
self.app.inform.emit(_('[success] Skew on the %s axis done ...') % str(axis))
if str(axis) == 'X':
self.app.inform.emit('[success] %s...' %
_('Skew on the X axis done'))
else:
self.app.inform.emit('[success] %s...' %
_('Skew on the Y axis done'))
self.app.progress.emit(100)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Due of %s, Skew action was not executed.") % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Skew action was not executed."), str(e)))
return
def on_scale(self, axis, xfactor, yfactor, point=None):
@ -5657,7 +5704,8 @@ class TransformEditorTool(FlatCAMTool):
ymaxlist = []
if not elem_list:
self.app.inform.emit(_("[WARNING_NOTCL] No shape selected. Please Select a shape to scale!"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No shape selected. Please Select a shape to scale!"))
return
else:
with self.app.proc_container.new(_("Applying Scale")):
@ -5698,10 +5746,16 @@ class TransformEditorTool(FlatCAMTool):
sel_el['clear'] = affinity.scale(sel_el['clear'], xfactor, yfactor, origin=(px, py))
self.draw_app.plot_all()
self.app.inform.emit(_('[success] Scale on the %s axis done ...') % str(axis))
if str(axis) == 'X':
self.app.inform.emit('[success] %s...' %
_('Scale on the X axis done'))
else:
self.app.inform.emit('[success] %s...' %
_('Scale on the Y axis done'))
self.app.progress.emit(100)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Due of %s, Scale action was not executed.") % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Scale action was not executed."), str(e)))
return
def on_offset(self, axis, num):
@ -5714,7 +5768,8 @@ class TransformEditorTool(FlatCAMTool):
elem_list = self.draw_app.selected
if not elem_list:
self.app.inform.emit(_("[WARNING_NOTCL] No shape selected. Please Select a shape to offset!"))
self.app.inform.emit('[WARNING_NOTCL] %s' %
_("No shape selected. Please Select a shape to offset!"))
return
else:
with self.app.proc_container.new(_("Applying Offset")):
@ -5739,11 +5794,17 @@ class TransformEditorTool(FlatCAMTool):
sel_el['clear'] = affinity.translate(sel_el['clear'], 0, num)
self.draw_app.plot_all()
self.app.inform.emit(_('[success] Offset on the %s axis done ...') % str(axis))
if str(axis) == 'X':
self.app.inform.emit('[success] %s...' %
_('Offset on the X axis done'))
else:
self.app.inform.emit('[success] %s...' %
_('Offset on the Y axis done'))
self.app.progress.emit(100)
except Exception as e:
self.app.inform.emit(_("[ERROR_NOTCL] Due of %s, Offset action was not executed.") % str(e))
self.app.inform.emit('[ERROR_NOTCL] %s: %s' %
(_("Offset action was not executed."), str(e)))
return
def on_rotate_key(self):
@ -5756,14 +5817,12 @@ class TransformEditorTool(FlatCAMTool):
val, ok = val_box.get_value()
if ok:
self.on_rotate(val=val)
self.app.inform.emit(
_("[success] Geometry shape rotate done...")
)
self.app.inform.emit('[success] %s...' %
_("Geometry shape rotate done"))
return
else:
self.app.inform.emit(
_("[WARNING_NOTCL] Geometry shape rotate cancelled...")
)
self.app.inform.emit('[WARNING_NOTCL] %s...' %
_("Geometry shape rotate cancelled"))
def on_offx_key(self):
units = self.app.ui.general_defaults_form.general_app_group.units_radio.get_value().lower()
@ -5777,12 +5836,12 @@ class TransformEditorTool(FlatCAMTool):
val, ok = val_box.get_value()
if ok:
self.on_offx(val=val)
self.app.inform.emit(
_("[success] Geometry shape offset on X axis done..."))
self.app.inform.emit('[success] %s...' %
_("Geometry shape offset on X axis done"))
return
else:
self.app.inform.emit(
_("[WARNING_NOTCL] Geometry shape offset X cancelled..."))
self.app.inform.emit('[WARNING_NOTCL] %s...' %
_("Geometry shape offset X cancelled"))
def on_offy_key(self):
units = self.app.ui.general_defaults_form.general_app_group.units_radio.get_value().lower()
@ -5796,12 +5855,12 @@ class TransformEditorTool(FlatCAMTool):
val, ok = val_box.get_value()
if ok:
self.on_offx(val=val)
self.app.inform.emit(
_("[success] Geometry shape offset on Y axis done..."))
self.app.inform.emit('[success] %s...' %
_("Geometry shape offset on Y axis done"))
return
else:
self.app.inform.emit(
_("[WARNING_NOTCL] Geometry shape offset Y cancelled..."))
self.app.inform.emit('[WARNING_NOTCL] %s...' %
_("Geometry shape offset Y cancelled"))
def on_skewx_key(self):
val_box = FCInputDialog(title=_("Skew on X axis ..."),
@ -5813,12 +5872,12 @@ class TransformEditorTool(FlatCAMTool):
val, ok = val_box.get_value()
if ok:
self.on_skewx(val=val)
self.app.inform.emit(
_("[success] Geometry shape skew on X axis done..."))
self.app.inform.emit('[success] %s...' %
_("Geometry shape skew on X axis done"))
return
else:
self.app.inform.emit(
_("[WARNING_NOTCL] Geometry shape skew X cancelled..."))
self.app.inform.emit('[WARNING_NOTCL] %s...' %
_("Geometry shape skew X cancelled"))
def on_skewy_key(self):
val_box = FCInputDialog(title=_("Skew on Y axis ..."),
@ -5830,12 +5889,12 @@ class TransformEditorTool(FlatCAMTool):
val, ok = val_box.get_value()
if ok:
self.on_skewx(val=val)
self.app.inform.emit(
_("[success] Geometry shape skew on Y axis done..."))
self.app.inform.emit('[success] %s...' %
_("Geometry shape skew on Y axis done"))
return
else:
self.app.inform.emit(
_("[WARNING_NOTCL] Geometry shape skew Y cancelled..."))
self.app.inform.emit('[WARNING_NOTCL] %s...' %
_("Geometry shape skew Y cancelled"))
def get_shapely_list_bounds(geometry_list):

View File

@ -6665,7 +6665,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
# ## Plotting type
self.ncc_plotting_radio = RadioSet([{'label': _('Normal'), 'value': 'normal'},
{"label": _("progressive"), "value": "progressive"}])
{"label": _("Progressive"), "value": "progressive"}])
plotting_label = QtWidgets.QLabel('%s:' % _("NCC Plotting"))
plotting_label.setToolTip(
_("- 'Normal' - normal plotting, done at the end of the NCC job\n"
@ -6971,7 +6971,7 @@ class ToolsPaintPrefGroupUI(OptionsGroupUI):
# ## Plotting type
self.paint_plotting_radio = RadioSet([{'label': _('Normal'), 'value': 'normal'},
{"label": _("progressive"), "value": "progressive"}])
{"label": _("Progressive"), "value": "progressive"}])
plotting_label = QtWidgets.QLabel('%s:' % _("Paint Plotting"))
plotting_label.setToolTip(
_("- 'Normal' - normal plotting, done at the end of the Paint job\n"

View File

@ -23,6 +23,13 @@ import freetype as ft
from fontTools import ttLib
import logging
import gettext
import FlatCAMTranslation as fcTranslate
import builtins
fcTranslate.apply_language('strings')
if '_' not in builtins.__dict__:
_ = gettext.gettext
log = logging.getLogger('base2')
@ -295,7 +302,7 @@ class ParseFont():
elif font_type == 'regular':
path_filename = regular_dict[font_name]
except Exception as e:
self.app.inform.emit("[ERROR_NOTCL] Font not supported, try another one.")
self.app.inform.emit('[ERROR_NOTCL] %s' % _("Font not supported, try another one."))
log.debug("[ERROR_NOTCL] Font Loading: %s" % str(e))
return "flatcam font parse failed"

View File

@ -2564,7 +2564,10 @@ class NonCopperClear(FlatCAMTool, Gerber):
the given boundary polygon. If not specified, it defaults to
the rectangular bounding box of target geometry.
"""
geo_len = len(target)
if isinstance(target, Polygon):
geo_len = 1
else:
geo_len = len(target)
pol_nr = 0
old_disp_number = 0

View File

@ -350,6 +350,8 @@ class ToolPaint(FlatCAMTool, Gerber):
self.obj_name = ""
self.paint_obj = None
self.bound_obj_name = ""
self.bound_obj = None
self.units = ''
self.paint_tools = {}
@ -680,8 +682,8 @@ class ToolPaint(FlatCAMTool, Gerber):
try:
self.tools_table.itemChanged.disconnect()
except Exception as e:
log.debug("ToolPaint.on_tool_add() --> %s" % str(e))
except TypeError:
pass
if dia:
tool_dia = dia
@ -751,8 +753,8 @@ class ToolPaint(FlatCAMTool, Gerber):
try:
self.tools_table.itemChanged.disconnect()
except Exception as e:
log.debug("ToolPaint.on_tool_edit() --> %s" % str(e))
except TypeError:
pass
tool_dias = []
for k, v in self.paint_tools.items():
@ -850,8 +852,7 @@ class ToolPaint(FlatCAMTool, Gerber):
def on_tool_delete(self, rows_to_delete=None, all=None):
try:
self.tools_table.itemChanged.disconnect()
except Exception as e:
log.debug("ToolPaint.on_tool_delete() --> %s" % str(e))
except TypeError:
pass
deleted_tools_list = []
@ -1277,13 +1278,13 @@ class ToolPaint(FlatCAMTool, Gerber):
else:
pass
def paint_p(polyg, tooldia):
def paint_p(polyg, tooldiameter):
cpoly = None
try:
if paint_method == "seed":
# Type(cp) == FlatCAMRTreeStorage | None
cpoly = self.clear_polygon2(polyg,
tooldia=tooldia,
tooldia=tooldiameter,
steps_per_circle=self.app.defaults["geometry_circle_steps"],
overlap=over,
contour=cont,
@ -1293,7 +1294,7 @@ class ToolPaint(FlatCAMTool, Gerber):
elif paint_method == "lines":
# Type(cp) == FlatCAMRTreeStorage | None
cpoly = self.clear_polygon3(polyg,
tooldia=tooldia,
tooldia=tooldiameter,
steps_per_circle=self.app.defaults["geometry_circle_steps"],
overlap=over,
contour=cont,
@ -1303,12 +1304,12 @@ class ToolPaint(FlatCAMTool, Gerber):
else:
# Type(cp) == FlatCAMRTreeStorage | None
cpoly = self.clear_polygon(polyg,
tooldia=tooldia,
tooldia=tooldiameter,
steps_per_circle=self.app.defaults["geometry_circle_steps"],
overlap=over,
contour=cont,
connect=conn,
prog_plot=prog_plot)
prog_plot=prog_plot)
except FlatCAMApp.GracefulException:
return "fail"
except Exception as e:
@ -1318,8 +1319,8 @@ class ToolPaint(FlatCAMTool, Gerber):
geo_obj.solid_geometry += list(cpoly.get_objects())
return cpoly
else:
self.app.inform.emit('[ERROR_NOTCL] %s' %
_('Geometry could not be painted completely'))
app_obj.inform.emit('[ERROR_NOTCL] %s' %
_('Geometry could not be painted completely'))
return None
try:
@ -1363,10 +1364,12 @@ class ToolPaint(FlatCAMTool, Gerber):
return "fail"
except Exception as e:
log.debug("Could not Paint the polygons. %s" % str(e))
self.app.inform.emit('[ERROR] %s\n%s' %
(_("Could not do Paint. Try a different combination of parameters. "
"Or a different strategy of paint"),
str(e)))
app_obj.inform.emit('[ERROR] %s\n%s' %
(_("Could not do Paint. Try a different combination of parameters. "
"Or a different strategy of paint"),
str(e)
)
)
return "fail"
# add the solid_geometry to the current too in self.paint_tools (tools_storage)
@ -1636,7 +1639,7 @@ class ToolPaint(FlatCAMTool, Gerber):
painted_area = recurse(obj.solid_geometry)
# variables to display the percentage of work done
geo_len = len(painted_area)
disp_number = 0
old_disp_number = 0
log.warning("Total number of polygons to be cleared. %s" % str(geo_len))
@ -1800,7 +1803,7 @@ class ToolPaint(FlatCAMTool, Gerber):
painted_area = recurse(obj.solid_geometry)
# variables to display the percentage of work done
geo_len = int(len(painted_area) / 100)
disp_number = 0
old_disp_number = 0
log.warning("Total number of polygons to be cleared. %s" % str(geo_len))
@ -2099,7 +2102,6 @@ class ToolPaint(FlatCAMTool, Gerber):
# variables to display the percentage of work done
geo_len = len(painted_area)
disp_number = 0
old_disp_number = 0
log.warning("Total number of polygons to be cleared. %s" % str(geo_len))
@ -2111,7 +2113,6 @@ class ToolPaint(FlatCAMTool, Gerber):
continue
poly_buf = geo.buffer(-paint_margin)
cp = None
if paint_method == "seed":
# Type(cp) == FlatCAMRTreeStorage | None
cp = self.clear_polygon2(poly_buf,
@ -2140,7 +2141,7 @@ class ToolPaint(FlatCAMTool, Gerber):
overlap=over,
contour=cont,
connect=conn,
prog_plot=prog_plot)
prog_plot=prog_plot)
if cp is not None:
total_geometry += list(cp.get_objects())
@ -2269,7 +2270,6 @@ class ToolPaint(FlatCAMTool, Gerber):
# variables to display the percentage of work done
geo_len = len(painted_area)
disp_number = 0
old_disp_number = 0
log.warning("Total number of polygons to be cleared. %s" % str(geo_len))

View File

@ -565,12 +565,7 @@ class Panelize(FlatCAMTool):
if isinstance(panel_obj, FlatCAMGerber):
obj_fin.apertures = deepcopy(panel_obj.apertures)
for ap in obj_fin.apertures:
if 'solid_geometry' in obj_fin.apertures[ap]:
obj_fin.apertures[ap]['solid_geometry'] = []
if 'clear_geometry' in obj_fin.apertures[ap]:
obj_fin.apertures[ap]['clear_geometry'] = []
if 'follow_geometry' in obj_fin.apertures[ap]:
obj_fin.apertures[ap]['follow_geometry'] = []
obj_fin.apertures[ap]['geometry'] = list()
self.app.progress.emit(0)
for row in range(rows):
@ -599,36 +594,29 @@ class Panelize(FlatCAMTool):
obj_fin.solid_geometry.append(geo)
for apid in panel_obj.apertures:
if 'solid_geometry' in panel_obj.apertures[apid]:
geo_aper = translate_recursion(panel_obj.apertures[apid]['solid_geometry'])
if isinstance(geo_aper, list):
obj_fin.apertures[apid]['solid_geometry'] += geo_aper
else:
obj_fin.apertures[apid]['solid_geometry'].append(geo_aper)
for el in panel_obj.apertures[apid]['geometry']:
new_el = dict()
if 'solid' in el:
geo_aper = translate_recursion(el['solid'])
new_el['solid'] = deepcopy(geo_aper)
if 'clear_geometry' in panel_obj.apertures[apid]:
geo_aper = translate_recursion(panel_obj.apertures[apid]['clear_geometry'])
if isinstance(geo_aper, list):
obj_fin.apertures[apid]['clear_geometry'] += geo_aper
else:
obj_fin.apertures[apid]['clear_geometry'].append(geo_aper)
if 'clear' in el:
geo_aper = translate_recursion(el['clear'])
new_el['clear'] = deepcopy(geo_aper)
if 'follow_geometry' in panel_obj.apertures[apid]:
geo_aper = translate_recursion(panel_obj.apertures[apid]['follow_geometry'])
if isinstance(geo_aper, list):
obj_fin.apertures[apid]['follow_geometry'] += geo_aper
else:
obj_fin.apertures[apid]['follow_geometry'].append(geo_aper)
if 'follow' in el:
geo_aper = translate_recursion(el['follow'])
new_el['follow'] = deepcopy(geo_aper)
obj_fin.apertures[apid]['geometry'].append(deepcopy(new_el))
currentx += lenghtx
currenty += lenghty
app_obj.log.debug("Found %s geometries. Creating a panel geometry cascaded union ..." %
len(obj_fin.solid_geometry))
self.app.inform.emit(_("Found %s geometries. Creating a final panel geometry ...") %
len(obj_fin.solid_geometry))
obj_fin.solid_geometry = cascaded_union(obj_fin.solid_geometry)
# obj_fin.solid_geometry = cascaded_union(obj_fin.solid_geometry)
app_obj.log.debug("Finished creating a cascaded union for the panel.")
if isinstance(panel_obj, FlatCAMExcellon):

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff