- fixed issue with arrays of items could not be added in the Gerber/Excellon Editor when a translation is used
- fixed issue in the Excellon Editor where the Space key did not toggle the direction of the array of drills - combed the application strings all over the app and trimmed them up until those starting with letter 'O' - updated the translation strings
This commit is contained in:
parent
e5569360a7
commit
90e3b26b68
|
@ -10,6 +10,10 @@ CHANGELOG for FlatCAM beta
|
|||
4.11.2020
|
||||
|
||||
- updated all the translation files
|
||||
- fixed issue with arrays of items could not be added in the Gerber/Excellon Editor when a translation is used
|
||||
- fixed issue in the Excellon Editor where the Space key did not toggle the direction of the array of drills
|
||||
- combed the application strings all over the app and trimmed them up until those starting with letter 'O'
|
||||
- updated the translation strings
|
||||
|
||||
3.11.2020
|
||||
|
||||
|
|
|
@ -607,7 +607,7 @@ class ToolsDB2UI:
|
|||
# Milling Type Radio Button
|
||||
self.milling_type_label = FCLabel('%s:' % _('Milling Type'))
|
||||
self.milling_type_label.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -615,7 +615,7 @@ class ToolsDB2UI:
|
|||
self.ncc_milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
|
||||
{'label': _('Conventional'), 'value': 'cv'}])
|
||||
self.ncc_milling_type_radio.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -629,8 +629,8 @@ class ToolsDB2UI:
|
|||
nccoverlabel.setToolTip(
|
||||
_("How much (percentage) of the tool width to overlap each tool pass.\n"
|
||||
"Adjust the value starting with lower values\n"
|
||||
"and increasing it if areas that should be cleared are still \n"
|
||||
"not cleared.\n"
|
||||
"and increasing it if areas that should be processed are still \n"
|
||||
"not processed.\n"
|
||||
"Lower values = faster processing, faster execution on CNC.\n"
|
||||
"Higher values = slow processing and slow execution on CNC\n"
|
||||
"due of too many paths.")
|
||||
|
@ -703,8 +703,7 @@ class ToolsDB2UI:
|
|||
self.ncc_choice_offset_cb.setToolTip(
|
||||
_("If used, it will add an offset to the copper features.\n"
|
||||
"The copper clearing will finish to a distance\n"
|
||||
"from the copper features.\n"
|
||||
"The value can be between 0 and 10 FlatCAM units.")
|
||||
"from the copper features.")
|
||||
)
|
||||
self.grid2.addWidget(self.ncc_choice_offset_cb, 19, 0)
|
||||
|
||||
|
@ -738,8 +737,8 @@ class ToolsDB2UI:
|
|||
ovlabel.setToolTip(
|
||||
_("How much (percentage) of the tool width to overlap each tool pass.\n"
|
||||
"Adjust the value starting with lower values\n"
|
||||
"and increasing it if areas that should be painted are still \n"
|
||||
"not painted.\n"
|
||||
"and increasing it if areas that should be processed are still \n"
|
||||
"not processed.\n"
|
||||
"Lower values = faster processing, faster execution on CNC.\n"
|
||||
"Higher values = slow processing and slow execution on CNC\n"
|
||||
"due of too many paths.")
|
||||
|
@ -853,7 +852,7 @@ class ToolsDB2UI:
|
|||
# Milling Type Radio Button
|
||||
self.iso_milling_type_label = FCLabel('%s:' % _('Milling Type'))
|
||||
self.iso_milling_type_label.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -861,7 +860,7 @@ class ToolsDB2UI:
|
|||
self.iso_milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
|
||||
{'label': _('Conventional'), 'value': 'cv'}])
|
||||
self.iso_milling_type_radio.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -454,8 +454,8 @@ class PaintOptionsTool(AppTool):
|
|||
ovlabel.setToolTip(
|
||||
_("How much (percentage) of the tool width to overlap each tool pass.\n"
|
||||
"Adjust the value starting with lower values\n"
|
||||
"and increasing it if areas that should be painted are still \n"
|
||||
"not painted.\n"
|
||||
"and increasing it if areas that should be processed are still \n"
|
||||
"not processed.\n"
|
||||
"Lower values = faster processing, faster execution on CNC.\n"
|
||||
"Higher values = slow processing and slow execution on CNC\n"
|
||||
"due of too many paths.")
|
||||
|
@ -582,7 +582,7 @@ class PaintOptionsTool(AppTool):
|
|||
|
||||
def on_paint(self):
|
||||
if not self.fcdraw.selected:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
|
||||
return
|
||||
|
||||
tooldia = self.painttooldia_entry.get_value()
|
||||
|
@ -1071,7 +1071,7 @@ class TransformEditorTool(AppTool):
|
|||
|
||||
def template(self):
|
||||
if not self.draw_app.selected:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
|
||||
return
|
||||
|
||||
self.draw_app.select_tool("select")
|
||||
|
@ -1427,7 +1427,7 @@ class TransformEditorTool(AppTool):
|
|||
shape_list = self.draw_app.selected
|
||||
|
||||
if not shape_list:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected."))
|
||||
return
|
||||
else:
|
||||
with self.app.proc_container.new(_("Applying Buffer")):
|
||||
|
@ -1455,10 +1455,10 @@ class TransformEditorTool(AppTool):
|
|||
val, ok = val_box.get_value()
|
||||
if ok:
|
||||
self.on_rotate(val=val, ref=1)
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape rotate done"))
|
||||
self.app.inform.emit('[success] %s...' % _("Rotate done"))
|
||||
return
|
||||
else:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Geometry shape rotate cancelled"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Rotate cancelled"))
|
||||
|
||||
def on_offx_key(self):
|
||||
units = self.app.defaults['units'].lower()
|
||||
|
@ -1473,10 +1473,10 @@ class TransformEditorTool(AppTool):
|
|||
val, ok = val_box.get_value()
|
||||
if ok:
|
||||
self.on_offx(val=val)
|
||||
self.app.inform.emit('[success] %s' % _("Geometry shape offset on X axis done"))
|
||||
self.app.inform.emit('[success] %s' % _("Offset on the X axis done"))
|
||||
return
|
||||
else:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Geometry shape offset X cancelled"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Offset X cancelled"))
|
||||
|
||||
def on_offy_key(self):
|
||||
units = self.app.defaults['units'].lower()
|
||||
|
@ -1491,10 +1491,10 @@ class TransformEditorTool(AppTool):
|
|||
val, ok = val_box.get_value()
|
||||
if ok:
|
||||
self.on_offx(val=val)
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape offset on Y axis done"))
|
||||
self.app.inform.emit('[success] %s...' % _("Offset on Y axis done"))
|
||||
return
|
||||
else:
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape offset on Y axis canceled"))
|
||||
self.app.inform.emit('[success] %s...' % _("Offset on the Y axis canceled"))
|
||||
|
||||
def on_skewx_key(self):
|
||||
val_box = FCInputDialog(title=_("Skew on X axis ..."),
|
||||
|
@ -1507,10 +1507,10 @@ class TransformEditorTool(AppTool):
|
|||
val, ok = val_box.get_value()
|
||||
if ok:
|
||||
self.on_skewx(val=val, ref=3)
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape skew on X axis done"))
|
||||
self.app.inform.emit('[success] %s...' % _("Skew on X axis done"))
|
||||
return
|
||||
else:
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape skew on X axis canceled"))
|
||||
self.app.inform.emit('[success] %s...' % _("Skew on X axis canceled"))
|
||||
|
||||
def on_skewy_key(self):
|
||||
val_box = FCInputDialog(title=_("Skew on Y axis ..."),
|
||||
|
@ -1523,10 +1523,10 @@ class TransformEditorTool(AppTool):
|
|||
val, ok = val_box.get_value()
|
||||
if ok:
|
||||
self.on_skewx(val=val, ref=3)
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape skew on Y axis done"))
|
||||
self.app.inform.emit('[success] %s...' % _("Skew on Y axis done"))
|
||||
return
|
||||
else:
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape skew on Y axis canceled"))
|
||||
self.app.inform.emit('[success] %s...' % _("Skew on Y axis canceled"))
|
||||
|
||||
@staticmethod
|
||||
def alt_bounds(shapelist):
|
||||
|
@ -2606,7 +2606,7 @@ class FCExplode(FCShapeTool):
|
|||
|
||||
self.draw_app.active_tool = self
|
||||
if len(self.draw_app.get_selected()) == 0:
|
||||
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s...' % _("No shape selected. Select a shape to explode"))
|
||||
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected."))
|
||||
else:
|
||||
self.make()
|
||||
|
||||
|
@ -2670,11 +2670,10 @@ 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] %s...' %
|
||||
_("MOVE: No shape selected. Select a shape to move"))
|
||||
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected."))
|
||||
return
|
||||
else:
|
||||
self.draw_app.app.inform.emit(_(" MOVE: Click on reference point ..."))
|
||||
self.draw_app.app.inform.emit(_("Click on reference location ..."))
|
||||
|
||||
self.draw_app.app.jump_signal.connect(lambda x: self.draw_app.update_utility_geometry(data=x))
|
||||
|
||||
|
@ -2694,7 +2693,7 @@ class FCMove(FCShapeTool):
|
|||
# self.draw_app.app.inform.emit(_("[WARNING_NOTCL] Move cancelled. No shape selected."))
|
||||
self.select_shapes(point)
|
||||
self.draw_app.replot()
|
||||
self.draw_app.app.inform.emit(_(" MOVE: Click on reference point ..."))
|
||||
self.draw_app.app.inform.emit(_("Click on reference location ..."))
|
||||
return
|
||||
|
||||
if self.origin is None:
|
||||
|
@ -2709,7 +2708,7 @@ class FCMove(FCShapeTool):
|
|||
return "Done."
|
||||
|
||||
def make(self):
|
||||
with self.draw_app.app.proc_container.new(_("Working ...")):
|
||||
with self.draw_app.app.proc_container.new(_("Moving ...")):
|
||||
# Create new geometry
|
||||
dx = self.destination[0] - self.origin[0]
|
||||
dy = self.destination[1] - self.origin[1]
|
||||
|
@ -2973,7 +2972,7 @@ class FCBuffer(FCShapeTool):
|
|||
|
||||
def on_buffer(self):
|
||||
if not self.draw_app.selected:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
|
||||
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
|
||||
return
|
||||
|
||||
try:
|
||||
|
@ -3001,7 +3000,7 @@ class FCBuffer(FCShapeTool):
|
|||
|
||||
def on_buffer_int(self):
|
||||
if not self.draw_app.selected:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
|
||||
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
|
||||
return
|
||||
|
||||
try:
|
||||
|
@ -3029,7 +3028,7 @@ class FCBuffer(FCShapeTool):
|
|||
|
||||
def on_buffer_ext(self):
|
||||
if not self.draw_app.selected:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
|
||||
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
|
||||
return
|
||||
|
||||
try:
|
||||
|
@ -3040,7 +3039,7 @@ 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] %s' %
|
||||
self.draw_app.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
|
||||
|
@ -4410,7 +4409,7 @@ class AppGeoEditor(QtCore.QObject):
|
|||
|
||||
def on_copy_click(self):
|
||||
if not self.selected:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
|
||||
return
|
||||
|
||||
self.app.ui.geo_copy_btn.setChecked(True)
|
||||
|
@ -4934,13 +4933,11 @@ class AppGeoEditor(QtCore.QObject):
|
|||
return 'fail'
|
||||
|
||||
if len(selected) == 0:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' %
|
||||
_("Nothing selected for buffering."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected."))
|
||||
return 'fail'
|
||||
|
||||
if not isinstance(buf_distance, float):
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' %
|
||||
_("Invalid distance for buffering."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Invalid distance."))
|
||||
|
||||
# deselect everything
|
||||
self.selected = []
|
||||
|
@ -4988,11 +4985,11 @@ class AppGeoEditor(QtCore.QObject):
|
|||
return 'fail'
|
||||
|
||||
if len(selected) == 0:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected for buffering."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected."))
|
||||
return 'fail'
|
||||
|
||||
if not isinstance(buf_distance, float):
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Invalid distance for buffering."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Invalid distance."))
|
||||
# deselect everything
|
||||
self.selected = []
|
||||
self.replot()
|
||||
|
@ -5037,13 +5034,11 @@ class AppGeoEditor(QtCore.QObject):
|
|||
return
|
||||
|
||||
if len(selected) == 0:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' %
|
||||
_("Nothing selected for buffering."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected."))
|
||||
return
|
||||
|
||||
if not isinstance(buf_distance, float):
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' %
|
||||
_("Invalid distance for buffering."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Invalid distance."))
|
||||
# deselect everything
|
||||
self.selected = []
|
||||
self.replot()
|
||||
|
@ -5086,7 +5081,7 @@ class AppGeoEditor(QtCore.QObject):
|
|||
selected = self.get_selected()
|
||||
|
||||
if len(selected) == 0:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected for painting."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Nothing selected."))
|
||||
return
|
||||
|
||||
for param in [tooldia, overlap, margin]:
|
||||
|
@ -5162,7 +5157,7 @@ class AppGeoEditor(QtCore.QObject):
|
|||
# This is a dirty patch:
|
||||
for r in results:
|
||||
self.add_shape(DrawToolShape(r))
|
||||
self.app.inform.emit('[success] %s' % _("Paint done."))
|
||||
self.app.inform.emit('[success] %s' % _("Done."))
|
||||
self.replot()
|
||||
|
||||
def flatten(self, geometry, orient_val=1, reset=True, pathonly=False):
|
||||
|
|
|
@ -19,7 +19,7 @@ import logging
|
|||
|
||||
from camlib import distance, arc, three_point_circle
|
||||
from appGUI.GUIElements import FCEntry, FCComboBox, FCTable, FCDoubleSpinner, FCSpinner, RadioSet, \
|
||||
EvalEntry2, FCInputDialog, FCButton, OptionalInputSection, FCCheckBox, NumericalEvalTupleEntry
|
||||
EvalEntry2, FCInputDialog, FCButton, OptionalInputSection, FCCheckBox, NumericalEvalTupleEntry, FCComboBox2
|
||||
from appTool import AppTool
|
||||
|
||||
import numpy as np
|
||||
|
@ -455,7 +455,7 @@ class FCPadArray(FCShapeTool):
|
|||
|
||||
self.selected_size = None
|
||||
self.pad_axis = 'X'
|
||||
self.pad_array = 'linear'
|
||||
self.pad_array = 0 # 'linear'
|
||||
self.pad_array_size = None
|
||||
self.pad_pitch = None
|
||||
self.pad_linear_angle = None
|
||||
|
@ -487,7 +487,7 @@ class FCPadArray(FCShapeTool):
|
|||
|
||||
def click(self, point):
|
||||
|
||||
if self.pad_array == 'Linear':
|
||||
if self.draw_app.ui.array_type_combo.get_value() == 0: # 'Linear'
|
||||
self.make()
|
||||
return
|
||||
else:
|
||||
|
@ -529,7 +529,7 @@ class FCPadArray(FCShapeTool):
|
|||
self.draw_app.app.inform.emit('[ERROR_NOTCL] %s' % _("The value is mistyped. Check the value."))
|
||||
return
|
||||
|
||||
if self.pad_array == 'Linear':
|
||||
if self.pad_array == 0: # 'Linear'
|
||||
if data[0] is None and data[1] is None:
|
||||
dx = self.draw_app.x
|
||||
dy = self.draw_app.y
|
||||
|
@ -573,7 +573,7 @@ class FCPadArray(FCShapeTool):
|
|||
self.last_dx = dx
|
||||
self.last_dy = dy
|
||||
return DrawToolUtilityShape(geo_el_list)
|
||||
else:
|
||||
else: # 'Circular'
|
||||
if data[0] is None and data[1] is None:
|
||||
cdx = self.draw_app.x
|
||||
cdy = self.draw_app.y
|
||||
|
@ -700,7 +700,7 @@ class FCPadArray(FCShapeTool):
|
|||
|
||||
self.draw_app.current_storage = self.storage_obj
|
||||
|
||||
if self.pad_array == 'Linear':
|
||||
if self.pad_array == 0: # 'Linear'
|
||||
for item in range(self.pad_array_size):
|
||||
if self.pad_axis == 'X':
|
||||
geo = self.util_shape(((self.points[0] + (self.pad_pitch * item)), self.points[1]))
|
||||
|
@ -714,7 +714,7 @@ class FCPadArray(FCShapeTool):
|
|||
)
|
||||
|
||||
self.geometry.append(DrawToolShape(geo))
|
||||
else:
|
||||
else: # 'Circular'
|
||||
if (self.pad_angle * self.pad_array_size) > 360:
|
||||
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s' %
|
||||
_("Too many items for the selected spacing angle."))
|
||||
|
@ -3013,7 +3013,7 @@ class AppGerberEditor(QtCore.QObject):
|
|||
if ap_code not in self.oldapcode_newapcode:
|
||||
self.storage_dict[ap_code] = {}
|
||||
|
||||
type_val = self.aptype_cb.currentText()
|
||||
type_val = self.ui.aptype_cb.currentText()
|
||||
self.storage_dict[ap_code]['type'] = type_val
|
||||
|
||||
if type_val == 'R' or type_val == 'O':
|
||||
|
@ -3092,7 +3092,7 @@ class AppGerberEditor(QtCore.QObject):
|
|||
else:
|
||||
# deleted_tool_dia = float(self.ui.apertures_table.item(self.ui.apertures_table.currentRow(), 1).text())
|
||||
if len(self.ui.apertures_table.selectionModel().selectedRows()) == 0:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _(" Select an aperture in Aperture Table"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Select an aperture in Aperture Table"))
|
||||
return
|
||||
|
||||
deleted_apcode_list = []
|
||||
|
@ -5279,7 +5279,7 @@ class AppGerberEditorUI:
|
|||
)
|
||||
self.array_box.addWidget(self.padarray_label)
|
||||
|
||||
self.array_type_combo = FCComboBox()
|
||||
self.array_type_combo = FCComboBox2()
|
||||
self.array_type_combo.setToolTip(
|
||||
_("Select the type of pads array to create.\n"
|
||||
"It can be Linear X(Y) or Circular")
|
||||
|
@ -5885,7 +5885,7 @@ class TransformEditorTool(AppTool):
|
|||
|
||||
def template(self):
|
||||
if not self.draw_app.selected:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. No shape selected."))
|
||||
self.draw_app.app.inform.emit('[WARNING_NOTCL] %s %s' % (_("Cancelled."), _("No shape selected.")))
|
||||
return
|
||||
|
||||
self.draw_app.select_tool("select")
|
||||
|
@ -6278,7 +6278,7 @@ class TransformEditorTool(AppTool):
|
|||
elem_list = self.draw_app.selected
|
||||
|
||||
if not elem_list:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No shape selected."))
|
||||
return
|
||||
|
||||
with self.app.proc_container.new(_("Applying Buffer")):
|
||||
|
@ -6321,10 +6321,10 @@ class TransformEditorTool(AppTool):
|
|||
val, ok = val_box.get_value()
|
||||
if ok:
|
||||
self.on_rotate(val=val, ref=1)
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape rotate done"))
|
||||
self.app.inform.emit('[success] %s...' % _("Rotate done"))
|
||||
return
|
||||
else:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Geometry shape rotate cancelled"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Rotate cancelled"))
|
||||
|
||||
def on_offx_key(self):
|
||||
units = self.app.defaults['units'].lower()
|
||||
|
@ -6339,10 +6339,10 @@ class TransformEditorTool(AppTool):
|
|||
val, ok = val_box.get_value()
|
||||
if ok:
|
||||
self.on_offx(val=val)
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape offset on X axis done"))
|
||||
self.app.inform.emit('[success] %s...' % _("Offset on the X axis done"))
|
||||
return
|
||||
else:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Geometry shape offset X cancelled"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Offset X cancelled"))
|
||||
|
||||
def on_offy_key(self):
|
||||
units = self.app.defaults['units'].lower()
|
||||
|
@ -6357,10 +6357,10 @@ class TransformEditorTool(AppTool):
|
|||
val, ok = val_box.get_value()
|
||||
if ok:
|
||||
self.on_offx(val=val)
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape offset on Y axis done"))
|
||||
self.app.inform.emit('[success] %s...' % _("Offset on Y axis done"))
|
||||
return
|
||||
else:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Geometry shape offset Y cancelled"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Offset Y cancelled"))
|
||||
|
||||
def on_skewx_key(self):
|
||||
val_box = FCInputDialog(title=_("Skew on X axis ..."),
|
||||
|
@ -6373,10 +6373,10 @@ class TransformEditorTool(AppTool):
|
|||
val, ok = val_box.get_value()
|
||||
if ok:
|
||||
self.on_skewx(val=val, ref=3)
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape skew on X axis done"))
|
||||
self.app.inform.emit('[success] %s...' % _("Skew on X axis done"))
|
||||
return
|
||||
else:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Geometry shape skew X cancelled"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Skew X cancelled"))
|
||||
|
||||
def on_skewy_key(self):
|
||||
val_box = FCInputDialog(title=_("Skew on Y axis ..."),
|
||||
|
@ -6389,10 +6389,10 @@ class TransformEditorTool(AppTool):
|
|||
val, ok = val_box.get_value()
|
||||
if ok:
|
||||
self.on_skewx(val=val, ref=3)
|
||||
self.app.inform.emit('[success] %s...' % _("Geometry shape skew on Y axis done"))
|
||||
self.app.inform.emit('[success] %s...' % _("Skew on Y axis done"))
|
||||
return
|
||||
else:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Geometry shape skew Y cancelled"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s...' % _("Skew Y cancelled"))
|
||||
|
||||
@staticmethod
|
||||
def alt_bounds(shapelist):
|
||||
|
|
|
@ -4173,7 +4173,7 @@ class FCJog(QtWidgets.QFrame):
|
|||
self.jog_origin_button = QtWidgets.QToolButton()
|
||||
self.jog_origin_button.setIcon(QtGui.QIcon(self.app.resource_location + '/origin2_32.png'))
|
||||
self.jog_origin_button.setToolTip(
|
||||
_("Move to Origin.")
|
||||
'%s' % _("Move to Origin")
|
||||
)
|
||||
|
||||
grbl_jog_grid.addWidget(self.jog_origin_button, 3, 1)
|
||||
|
@ -4534,23 +4534,23 @@ class FlatCAMSystemTray(QtWidgets.QSystemTrayIcon):
|
|||
|
||||
# Open Project ...
|
||||
menu_openproject = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/folder16.png'),
|
||||
_('Open Project ...'), self)
|
||||
'%s ...' % _('Open Project'), self)
|
||||
self.menu_open.addAction(menu_openproject)
|
||||
self.menu_open.addSeparator()
|
||||
|
||||
# Open Gerber ...
|
||||
menu_opengerber = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/flatcam_icon24.png'),
|
||||
_('Open &Gerber ...\tCtrl+G'), self)
|
||||
'%s ...\t%s' % (_('Open Gerber'), _('Ctrl+G')), self)
|
||||
self.menu_open.addAction(menu_opengerber)
|
||||
|
||||
# Open Excellon ...
|
||||
menu_openexcellon = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/open_excellon32.png'),
|
||||
_('Open &Excellon ...\tCtrl+E'), self)
|
||||
'%s ...\t%s' % (_('Open Excellon'), _('Ctrl+E')), self)
|
||||
self.menu_open.addAction(menu_openexcellon)
|
||||
|
||||
# Open G-Code ...
|
||||
menu_opengcode = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/code.png'),
|
||||
_('Open G-&Code ...'), self)
|
||||
'%s ...' % _('Open G-Code'), self)
|
||||
self.menu_open.addAction(menu_opengcode)
|
||||
|
||||
self.menu_open.addSeparator()
|
||||
|
|
|
@ -737,7 +737,7 @@ class MainGUI(QtWidgets.QMainWindow):
|
|||
|
||||
self.exc_move_drill_menuitem = self.exc_editor_menu.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/move32.png'),
|
||||
'%s\t%s' % (_('Move Drill(s)'), _('M')))
|
||||
'%s\t%s' % (_('Move Drill'), _('M')))
|
||||
|
||||
# ########################################################################
|
||||
# ########################## GERBER Editor # #############################
|
||||
|
@ -860,7 +860,7 @@ class MainGUI(QtWidgets.QMainWindow):
|
|||
self.menuproject.addSeparator()
|
||||
|
||||
self.menuprojectgeneratecnc = self.menuproject.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/cnc32.png'), _('Generate CNC'))
|
||||
QtGui.QIcon(self.app.resource_location + '/cnc32.png'), _('Create CNCJob'))
|
||||
self.menuprojectviewsource = self.menuproject.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/source32.png'), _('View Source'))
|
||||
|
||||
|
@ -971,7 +971,7 @@ class MainGUI(QtWidgets.QMainWindow):
|
|||
QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Open Excellon"))
|
||||
self.toolbarfile.addSeparator()
|
||||
self.file_open_btn = self.toolbarfile.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open project"))
|
||||
QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open Project"))
|
||||
self.file_save_btn = self.toolbarfile.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save project"))
|
||||
|
||||
|
@ -1026,11 +1026,11 @@ class MainGUI(QtWidgets.QMainWindow):
|
|||
self.shell_btn = self.toolbarshell.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/shell32.png'), _("Command Line"))
|
||||
self.new_script_btn = self.toolbarshell.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/script_new24.png'), _('New Script ...'))
|
||||
QtGui.QIcon(self.app.resource_location + '/script_new24.png'), '%s ...' % _('New Script'))
|
||||
self.open_script_btn = self.toolbarshell.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/open_script32.png'), _('Open Script ...'))
|
||||
QtGui.QIcon(self.app.resource_location + '/open_script32.png'), '%s ...' % _('Open Script'))
|
||||
self.run_script_btn = self.toolbarshell.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/script16.png'), _('Run Script ...'))
|
||||
QtGui.QIcon(self.app.resource_location + '/script16.png'), '%s ...' % _('Run Script'))
|
||||
|
||||
# ########################################################################
|
||||
# ########################## Tools Toolbar# ##############################
|
||||
|
@ -1167,7 +1167,7 @@ class MainGUI(QtWidgets.QMainWindow):
|
|||
QtGui.QIcon(self.app.resource_location + '/transform.png'), _("Transformations"))
|
||||
self.geo_edit_toolbar.addSeparator()
|
||||
self.geo_move_btn = self.geo_edit_toolbar.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects "))
|
||||
QtGui.QIcon(self.app.resource_location + '/move32.png'), _("Move Objects"))
|
||||
|
||||
# ########################################################################
|
||||
# ########################## Gerber Editor Toolbar# ######################
|
||||
|
@ -2142,9 +2142,9 @@ class MainGUI(QtWidgets.QMainWindow):
|
|||
QtGui.QIcon(self.app.resource_location + '/drill32.png'), _("Open Excellon"))
|
||||
self.toolbarfile.addSeparator()
|
||||
self.file_open_btn = self.toolbarfile.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open project"))
|
||||
QtGui.QIcon(self.app.resource_location + '/folder32.png'), _("Open Project"))
|
||||
self.file_save_btn = self.toolbarfile.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save project"))
|
||||
QtGui.QIcon(self.app.resource_location + '/project_save32.png'), _("Save Project"))
|
||||
|
||||
# ########################################################################
|
||||
# ######################### Edit Toolbar #################################
|
||||
|
@ -2195,11 +2195,11 @@ class MainGUI(QtWidgets.QMainWindow):
|
|||
self.shell_btn = self.toolbarshell.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/shell32.png'), _("Command Line"))
|
||||
self.new_script_btn = self.toolbarshell.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/script_new24.png'), _('New Script ...'))
|
||||
QtGui.QIcon(self.app.resource_location + '/script_new24.png'), '%s ...' % _('New Script'))
|
||||
self.open_script_btn = self.toolbarshell.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/open_script32.png'), _('Open Script ...'))
|
||||
QtGui.QIcon(self.app.resource_location + '/open_script32.png'), '%s ...' % _('Open Script'))
|
||||
self.run_script_btn = self.toolbarshell.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/script16.png'), _('Run Script ...'))
|
||||
QtGui.QIcon(self.app.resource_location + '/script16.png'), '%s ...' % _('Run Script'))
|
||||
|
||||
# #########################################################################
|
||||
# ######################### Tools Toolbar #################################
|
||||
|
@ -2290,7 +2290,7 @@ class MainGUI(QtWidgets.QMainWindow):
|
|||
# ################### Geometry Editor Toolbar ############################
|
||||
# ########################################################################
|
||||
self.geo_select_btn = self.geo_edit_toolbar.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select 'Esc'"))
|
||||
QtGui.QIcon(self.app.resource_location + '/pointer32.png'), _("Select"))
|
||||
self.geo_add_circle_btn = self.geo_edit_toolbar.addAction(
|
||||
QtGui.QIcon(self.app.resource_location + '/circle32.png'), _('Add Circle'))
|
||||
self.geo_add_arc_btn = self.geo_edit_toolbar.addAction(
|
||||
|
@ -3555,13 +3555,12 @@ class MainGUI(QtWidgets.QMainWindow):
|
|||
self.app.exc_editor.select_tool('slot_add')
|
||||
return
|
||||
|
||||
# Propagate to tool
|
||||
|
||||
# Show Shortcut list
|
||||
if key == QtCore.Qt.Key_F3 or key == 'F3':
|
||||
self.app.on_shortcut_list()
|
||||
return
|
||||
|
||||
# Propagate to tool
|
||||
# we do this so we can reuse the following keys while inside a Tool
|
||||
# the above keys are general enough so were left outside
|
||||
if self.app.exc_editor.active_tool is not None and self.select_drill_btn.isChecked() is False:
|
||||
|
@ -3646,7 +3645,7 @@ class MainGUI(QtWidgets.QMainWindow):
|
|||
self.app.exc_editor.launched_from_shortcuts = True
|
||||
# ## Current application units in Upper Case
|
||||
self.units = self.general_defaults_form.general_app_group.units_radio.get_value().upper()
|
||||
tool_add_popup = FCInputDialog(title=_("New Tool ..."),
|
||||
tool_add_popup = FCInputDialog(title='%s ...' % _("New Tool"),
|
||||
text='%s:' % _('Enter a Tool Diameter'),
|
||||
min=0.0000, max=99.9999, decimals=4)
|
||||
tool_add_popup.setWindowIcon(QtGui.QIcon(self.app.resource_location + '/letter_t_32.png'))
|
||||
|
|
|
@ -721,7 +721,7 @@ class ExcellonObjectUI(ObjectUI):
|
|||
self.drill_button = QtWidgets.QPushButton(_('Drilling Tool'))
|
||||
self.drill_button.setIcon(QtGui.QIcon(self.app.resource_location + '/drilling_tool32.png'))
|
||||
self.drill_button.setToolTip(
|
||||
_("Generate GCode out of drill holes in an Excellon object.")
|
||||
_("Generate GCode from the drill holes in an Excellon object.")
|
||||
)
|
||||
self.drill_button.setStyleSheet("""
|
||||
QPushButton
|
||||
|
|
|
@ -161,7 +161,7 @@ class ExcellonEditorPrefGroupUI(OptionsGroupUI):
|
|||
# Slot length
|
||||
self.slot_length_label = QtWidgets.QLabel('%s:' % _('Length'))
|
||||
self.slot_length_label.setToolTip(
|
||||
_("Length = The length of the slot.")
|
||||
_("Length. The length of the slot.")
|
||||
)
|
||||
self.slot_length_label.setMinimumWidth(100)
|
||||
|
||||
|
|
|
@ -43,8 +43,8 @@ class ExcellonExpPrefGroupUI(OptionsGroupUI):
|
|||
_("The units used in the Excellon file.")
|
||||
)
|
||||
|
||||
self.excellon_units_radio = RadioSet([{'label': _('INCH'), 'value': 'INCH'},
|
||||
{'label': _('MM'), 'value': 'METRIC'}])
|
||||
self.excellon_units_radio = RadioSet([{'label': _('Inch'), 'value': 'INCH'},
|
||||
{'label': _('mm'), 'value': 'METRIC'}])
|
||||
self.excellon_units_radio.setToolTip(
|
||||
_("The units used in the Excellon file.")
|
||||
)
|
||||
|
|
|
@ -179,8 +179,8 @@ class ExcellonGenPrefGroupUI(OptionsGroupUI):
|
|||
"therefore this parameter will be used.")
|
||||
)
|
||||
|
||||
self.excellon_units_radio = RadioSet([{'label': _('INCH'), 'value': 'INCH'},
|
||||
{'label': _('MM'), 'value': 'METRIC'}])
|
||||
self.excellon_units_radio = RadioSet([{'label': _('Inch'), 'value': 'INCH'},
|
||||
{'label': _('mm'), 'value': 'METRIC'}])
|
||||
self.excellon_units_radio.setToolTip(
|
||||
_("This sets the units of Excellon files.\n"
|
||||
"Some Excellon files don't have an header\n"
|
||||
|
|
|
@ -30,7 +30,7 @@ class ExcellonOptPrefGroupUI(OptionsGroupUI):
|
|||
self.decimals = decimals
|
||||
|
||||
# ## Create CNC Job
|
||||
self.cncjob_label = QtWidgets.QLabel('<b>%s</b>' % _('Create CNC Job'))
|
||||
self.cncjob_label = QtWidgets.QLabel('<b>%s</b>' % _('Create CNCJob'))
|
||||
self.cncjob_label.setToolTip(
|
||||
_("Parameters used to create a CNC Job object\n"
|
||||
"for this drill object.")
|
||||
|
|
|
@ -61,7 +61,7 @@ class GeneralAppPrefGroupUI(OptionsGroupUI):
|
|||
grid0.addWidget(self.precision_metric_entry, 1, 1)
|
||||
|
||||
# Precision Inch
|
||||
self.precision_inch_label = QtWidgets.QLabel('%s:' % _('Precision INCH'))
|
||||
self.precision_inch_label = QtWidgets.QLabel('%s:' % _('Precision Inch'))
|
||||
self.precision_inch_label.setToolTip(
|
||||
_("The number of decimals used throughout the application\n"
|
||||
"when the set units are in INCH system.\n"
|
||||
|
|
|
@ -32,7 +32,7 @@ class GeometryOptPrefGroupUI(OptionsGroupUI):
|
|||
# ------------------------------
|
||||
# ## Create CNC Job
|
||||
# ------------------------------
|
||||
self.cncjob_label = QtWidgets.QLabel('<b>%s:</b>' % _('Create CNC Job'))
|
||||
self.cncjob_label = QtWidgets.QLabel('<b>%s:</b>' % _('Create CNCJob'))
|
||||
self.cncjob_label.setToolTip(
|
||||
_("Create a CNC Job object\n"
|
||||
"tracing the contours of this\n"
|
||||
|
|
|
@ -44,8 +44,8 @@ class GerberExpPrefGroupUI(OptionsGroupUI):
|
|||
_("The units used in the Gerber file.")
|
||||
)
|
||||
|
||||
self.gerber_units_radio = RadioSet([{'label': _('INCH'), 'value': 'IN'},
|
||||
{'label': _('MM'), 'value': 'MM'}])
|
||||
self.gerber_units_radio = RadioSet([{'label': _('Inch'), 'value': 'IN'},
|
||||
{'label': _('mm'), 'value': 'MM'}])
|
||||
self.gerber_units_radio.setToolTip(
|
||||
_("The units used in the Gerber file.")
|
||||
)
|
||||
|
|
|
@ -84,8 +84,8 @@ class GerberGenPrefGroupUI(OptionsGroupUI):
|
|||
_("The units used in the Gerber file.")
|
||||
)
|
||||
|
||||
self.gerber_units_radio = RadioSet([{'label': _('INCH'), 'value': 'IN'},
|
||||
{'label': _('MM'), 'value': 'MM'}])
|
||||
self.gerber_units_radio = RadioSet([{'label': _('Inch'), 'value': 'IN'},
|
||||
{'label': _('mm'), 'value': 'MM'}])
|
||||
self.gerber_units_radio.setToolTip(
|
||||
_("The units used in the Gerber file.")
|
||||
)
|
||||
|
|
|
@ -73,7 +73,7 @@ class Tools2FiducialsPrefGroupUI(OptionsGroupUI):
|
|||
{'label': _('Auto'), 'value': 'auto'},
|
||||
{"label": _("Manual"), "value": "manual"}
|
||||
], stretch=False)
|
||||
self.mode_label = QtWidgets.QLabel(_("Mode:"))
|
||||
self.mode_label = QtWidgets.QLabel('%s:' % _("Mode"))
|
||||
self.mode_label.setToolTip(
|
||||
_("- 'Auto' - automatic placement of fiducials in the corners of the bounding box.\n"
|
||||
"- 'Manual' - manual placement of fiducials.")
|
||||
|
|
|
@ -66,7 +66,7 @@ class Tools2sidedPrefGroupUI(OptionsGroupUI):
|
|||
# ## Axis
|
||||
self.mirror_axis_radio = RadioSet([{'label': 'X', 'value': 'X'},
|
||||
{'label': 'Y', 'value': 'Y'}])
|
||||
self.mirax_label = QtWidgets.QLabel(_("Mirror Axis:"))
|
||||
self.mirax_label = QtWidgets.QLabel('%s:' % _("Mirror Axis"))
|
||||
self.mirax_label.setToolTip(
|
||||
_("Mirror vertically (X) or horizontally (Y).")
|
||||
)
|
||||
|
|
|
@ -306,7 +306,7 @@ class ToolsDrillPrefGroupUI(OptionsGroupUI):
|
|||
# Start Z
|
||||
startzlabel = FCLabel('%s:' % _('Start Z'))
|
||||
startzlabel.setToolTip(
|
||||
_("Height of the tool just after start.\n"
|
||||
_("Height of the tool just after starting the work.\n"
|
||||
"Delete the value if you don't need this feature.")
|
||||
)
|
||||
self.estartz_entry = NumericalEvalEntry(border_color='#0069A9')
|
||||
|
|
|
@ -198,7 +198,7 @@ class ToolsFilmPrefGroupUI(OptionsGroupUI):
|
|||
{'label': _('Y'), 'value': 'y'},
|
||||
{'label': _('Both'), 'value': 'both'}],
|
||||
stretch=False)
|
||||
self.film_mirror_axis_label = FCLabel('%s:' % _("Mirror axis"))
|
||||
self.film_mirror_axis_label = FCLabel('%s:' % _("Mirror Axis"))
|
||||
|
||||
grid0.addWidget(self.film_mirror_axis_label, 13, 0)
|
||||
grid0.addWidget(self.film_mirror_axis, 13, 1)
|
||||
|
|
|
@ -181,7 +181,7 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||
# Milling Type Radio Button
|
||||
self.milling_type_label = QtWidgets.QLabel('%s:' % _('Milling Type'))
|
||||
self.milling_type_label.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -189,7 +189,7 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||
self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
|
||||
{'label': _('Conventional'), 'value': 'cv'}])
|
||||
self.milling_type_radio.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -244,11 +244,11 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||
self.rest_cb.setObjectName("i_rest_machining")
|
||||
self.rest_cb.setToolTip(
|
||||
_("If checked, use 'rest machining'.\n"
|
||||
"Basically it will isolate outside PCB features,\n"
|
||||
"Basically it will process copper outside PCB features,\n"
|
||||
"using the biggest tool and continue with the next tools,\n"
|
||||
"from bigger to smaller, to isolate the copper features that\n"
|
||||
"could not be cleared by previous tool, until there is\n"
|
||||
"no more copper features to isolate or there are no more tools.\n"
|
||||
"from bigger to smaller, to process the copper features that\n"
|
||||
"could not be processed by previous tool, until there is\n"
|
||||
"nothing left to process or there are no more tools.\n\n"
|
||||
"If not checked, use the standard algorithm.")
|
||||
)
|
||||
|
||||
|
|
|
@ -136,7 +136,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
|
|||
# Milling Type Radio Button
|
||||
self.milling_type_label = QtWidgets.QLabel('%s:' % _('Milling Type'))
|
||||
self.milling_type_label.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -144,7 +144,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
|
|||
self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
|
||||
{'label': _('Conventional'), 'value': 'cv'}])
|
||||
self.milling_type_radio.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -183,8 +183,8 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
|
|||
nccoverlabel.setToolTip(
|
||||
_("How much (percentage) of the tool width to overlap each tool pass.\n"
|
||||
"Adjust the value starting with lower values\n"
|
||||
"and increasing it if areas that should be cleared are still \n"
|
||||
"not cleared.\n"
|
||||
"and increasing it if areas that should be processed are still \n"
|
||||
"not processed.\n"
|
||||
"Lower values = faster processing, faster execution on CNC.\n"
|
||||
"Higher values = slow processing and slow execution on CNC\n"
|
||||
"due of too many paths.")
|
||||
|
@ -256,8 +256,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
|
|||
self.ncc_choice_offset_cb.setToolTip(
|
||||
_("If used, it will add an offset to the copper features.\n"
|
||||
"The copper clearing will finish to a distance\n"
|
||||
"from the copper features.\n"
|
||||
"The value can be between 0 and 10 FlatCAM units.")
|
||||
"from the copper features.")
|
||||
)
|
||||
|
||||
grid0.addWidget(self.ncc_choice_offset_cb, 14, 0, 1, 2)
|
||||
|
@ -267,8 +266,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
|
|||
self.ncc_offset_label.setToolTip(
|
||||
_("If used, it will add an offset to the copper features.\n"
|
||||
"The copper clearing will finish to a distance\n"
|
||||
"from the copper features.\n"
|
||||
"The value can be between 0.0 and 9999.9 FlatCAM units.")
|
||||
"from the copper features.")
|
||||
)
|
||||
self.ncc_offset_spinner = FCDoubleSpinner()
|
||||
self.ncc_offset_spinner.set_range(0.00, 10000.0000)
|
||||
|
@ -288,11 +286,11 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
|
|||
self.ncc_rest_cb = FCCheckBox('%s' % _("Rest"))
|
||||
self.ncc_rest_cb.setToolTip(
|
||||
_("If checked, use 'rest machining'.\n"
|
||||
"Basically it will clear copper outside PCB features,\n"
|
||||
"Basically it will process copper outside PCB features,\n"
|
||||
"using the biggest tool and continue with the next tools,\n"
|
||||
"from bigger to smaller, to clear areas of copper that\n"
|
||||
"could not be cleared by previous tool, until there is\n"
|
||||
"no more copper to clear or there are no more tools.\n"
|
||||
"from bigger to smaller, to process the copper features that\n"
|
||||
"could not be processed by previous tool, until there is\n"
|
||||
"nothing left to process or there are no more tools.\n\n"
|
||||
"If not checked, use the standard algorithm.")
|
||||
)
|
||||
|
||||
|
|
|
@ -162,8 +162,8 @@ class ToolsPaintPrefGroupUI(OptionsGroupUI):
|
|||
ovlabel.setToolTip(
|
||||
_("How much (percentage) of the tool width to overlap each tool pass.\n"
|
||||
"Adjust the value starting with lower values\n"
|
||||
"and increasing it if areas that should be painted are still \n"
|
||||
"not painted.\n"
|
||||
"and increasing it if areas that should be processed are still \n"
|
||||
"not processed.\n"
|
||||
"Lower values = faster processing, faster execution on CNC.\n"
|
||||
"Higher values = slow processing and slow execution on CNC\n"
|
||||
"due of too many paths.")
|
||||
|
@ -243,11 +243,11 @@ class ToolsPaintPrefGroupUI(OptionsGroupUI):
|
|||
self.rest_cb.setObjectName(_("Rest"))
|
||||
self.rest_cb.setToolTip(
|
||||
_("If checked, use 'rest machining'.\n"
|
||||
"Basically it will clear copper outside PCB features,\n"
|
||||
"Basically it will process copper outside PCB features,\n"
|
||||
"using the biggest tool and continue with the next tools,\n"
|
||||
"from bigger to smaller, to clear areas of copper that\n"
|
||||
"could not be cleared by previous tool, until there is\n"
|
||||
"no more copper to clear or there are no more tools.\n\n"
|
||||
"from bigger to smaller, to process the copper features that\n"
|
||||
"could not be processed by previous tool, until there is\n"
|
||||
"nothing left to process or there are no more tools.\n\n"
|
||||
"If not checked, use the standard algorithm.")
|
||||
)
|
||||
grid0.addWidget(self.rest_cb, 14, 0, 1, 2)
|
||||
|
|
|
@ -1679,7 +1679,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
|
|||
return 'fail'
|
||||
|
||||
def on_edit_probing_gcode(self):
|
||||
self.app.proc_container.view.set_busy(_("Loading..."))
|
||||
self.app.proc_container.view.set_busy('%s...' % _("Loading"))
|
||||
|
||||
gco = self.probing_gcode_text
|
||||
if gco is None or gco == '':
|
||||
|
@ -1969,7 +1969,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
|
|||
:return:
|
||||
"""
|
||||
|
||||
self.app.proc_container.view.set_busy(_("Loading..."))
|
||||
self.app.proc_container.view.set_busy('%s...' % _("Loading"))
|
||||
|
||||
preamble = self.prepend_snippet
|
||||
postamble = self.append_snippet
|
||||
|
|
|
@ -2001,7 +2001,7 @@ class GeometryObject(FlatCAMObj, Geometry):
|
|||
if self.special_group:
|
||||
self.app.inform.emit(
|
||||
'[WARNING_NOTCL] %s %s %s.' %
|
||||
(_("This Geometry can't be processed because it is"), str(self.special_group), _("geometry"))
|
||||
(_("This Geometry can't be processed because it is"), str(self.special_group), _("Geometry"))
|
||||
)
|
||||
return
|
||||
except AttributeError:
|
||||
|
|
|
@ -126,7 +126,7 @@ class ScriptObject(FlatCAMObj):
|
|||
# ---------------------------------------------------- #
|
||||
# ----------- LOAD THE TEXT SOURCE FILE -------------- #
|
||||
# ---------------------------------------------------- #
|
||||
self.app.proc_container.view.set_busy(_("Loading..."))
|
||||
self.app.proc_container.view.set_busy('%s...' % _("Loading"))
|
||||
self.script_editor_tab.t_frame.hide()
|
||||
|
||||
try:
|
||||
|
|
|
@ -421,7 +421,7 @@ class Gerber(Geometry):
|
|||
|
||||
s_tol = float(self.app.defaults["gerber_simp_tolerance"])
|
||||
|
||||
self.app.inform.emit('%s %d %s.' % (_("Gerber processing. Parsing"), len(glines), _("lines")))
|
||||
self.app.inform.emit('%s %d %s.' % (_("Gerber processing. Parsing"), len(glines), _("Lines").lower()))
|
||||
try:
|
||||
for gline in glines:
|
||||
if self.app.abort_flag:
|
||||
|
@ -2042,7 +2042,7 @@ class Gerber(Geometry):
|
|||
log.debug('camlib.Gerber.scale() Exception --> %s' % str(e))
|
||||
return 'fail'
|
||||
|
||||
self.app.inform.emit('[success] %s' % _("Gerber Scale done."))
|
||||
self.app.inform.emit('[success] %s' % _("Done."))
|
||||
self.app.proc_container.new_text = ''
|
||||
|
||||
# ## solid_geometry ???
|
||||
|
@ -2133,8 +2133,7 @@ class Gerber(Geometry):
|
|||
log.debug('camlib.Gerber.offset() Exception --> %s' % str(e))
|
||||
return 'fail'
|
||||
|
||||
self.app.inform.emit('[success] %s' %
|
||||
_("Gerber Offset done."))
|
||||
self.app.inform.emit('[success] %s' % _("Done."))
|
||||
self.app.proc_container.new_text = ''
|
||||
|
||||
def mirror(self, axis, point):
|
||||
|
@ -2209,8 +2208,7 @@ class Gerber(Geometry):
|
|||
log.debug('camlib.Gerber.mirror() Exception --> %s' % str(e))
|
||||
return 'fail'
|
||||
|
||||
self.app.inform.emit('[success] %s' %
|
||||
_("Gerber Mirror done."))
|
||||
self.app.inform.emit('[success] %s' % _("Done."))
|
||||
self.app.proc_container.new_text = ''
|
||||
|
||||
def skew(self, angle_x, angle_y, point):
|
||||
|
@ -2284,7 +2282,7 @@ class Gerber(Geometry):
|
|||
log.debug('camlib.Gerber.skew() Exception --> %s' % str(e))
|
||||
return 'fail'
|
||||
|
||||
self.app.inform.emit('[success] %s' % _("Gerber Skew done."))
|
||||
self.app.inform.emit('[success] %s' % _("Done."))
|
||||
self.app.proc_container.new_text = ''
|
||||
|
||||
def rotate(self, angle, point):
|
||||
|
@ -2346,7 +2344,7 @@ class Gerber(Geometry):
|
|||
except Exception as e:
|
||||
log.debug('camlib.Gerber.rotate() Exception --> %s' % str(e))
|
||||
return 'fail'
|
||||
self.app.inform.emit('[success] %s' % _("Gerber Rotate done."))
|
||||
self.app.inform.emit('[success] %s' % _("Done."))
|
||||
self.app.proc_container.new_text = ''
|
||||
|
||||
def buffer(self, distance, join=2, factor=None):
|
||||
|
|
|
@ -198,7 +198,7 @@ class HPGL2:
|
|||
line_num = 0
|
||||
gline = ""
|
||||
|
||||
self.app.inform.emit('%s %d %s.' % (_("HPGL2 processing. Parsing"), len(glines), _("lines")))
|
||||
self.app.inform.emit('%s %d %s.' % (_("HPGL2 processing. Parsing"), len(glines), _("Lines").lower()))
|
||||
try:
|
||||
for gline in glines:
|
||||
if self.app.abort_flag:
|
||||
|
|
|
@ -600,7 +600,7 @@ class ToolCalibration(AppTool):
|
|||
self.cal_object = model_index.internalPointer().obj
|
||||
except Exception as e:
|
||||
log.debug("ToolCalibration.on_cal_button_click() --> %s" % str(e))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no FlatCAM object selected..."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return 'fail'
|
||||
|
||||
obj_name = self.cal_object.options["name"] + "_calibrated"
|
||||
|
@ -696,7 +696,7 @@ class ToolCalibration(AppTool):
|
|||
obj_name = obj_name
|
||||
|
||||
if obj is None:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no FlatCAM object selected..."))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
log.debug("ToolCalibration.new_calibrated_object() --> No object to calibrate")
|
||||
return 'fail'
|
||||
|
||||
|
|
|
@ -403,7 +403,7 @@ class DblSidedTool(AppTool):
|
|||
obj_list = self.app.collection.get_selected()
|
||||
|
||||
if not obj_list:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed. No object(s) selected..."))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
|
||||
return
|
||||
|
||||
for obj in obj_list:
|
||||
|
|
|
@ -1670,7 +1670,7 @@ class ToolDrilling(AppTool, Excellon):
|
|||
# Object initialization function for app.app_obj.new_object()
|
||||
def job_init(job_obj, app_obj):
|
||||
assert job_obj.kind == 'cncjob', "Initializer expected a CNCJobObject, got %s" % type(job_obj)
|
||||
app_obj.inform.emit(_("Generating Excellon CNCJob..."))
|
||||
app_obj.inform.emit(_("Generating CNCJob..."))
|
||||
|
||||
# #########################################################################################################
|
||||
# #########################################################################################################
|
||||
|
@ -2414,7 +2414,7 @@ class DrillingUI:
|
|||
# Start move Z:
|
||||
self.estartz_label = QtWidgets.QLabel('%s:' % _("Start Z"))
|
||||
self.estartz_label.setToolTip(
|
||||
_("Height of the tool just after start.\n"
|
||||
_("Height of the tool just after starting the work.\n"
|
||||
"Delete the value if you don't need this feature.")
|
||||
)
|
||||
self.estartz_entry = NumericalEvalEntry(border_color='#0069A9')
|
||||
|
|
|
@ -156,19 +156,19 @@ class Film(AppTool):
|
|||
try:
|
||||
name = self.ui.tf_object_combo.currentText()
|
||||
except Exception:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' %
|
||||
_("No FlatCAM object selected. Load an object for Film and retry."))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s %s' %
|
||||
(_("No object is selected."), _("Load an object for Film and retry.")))
|
||||
return
|
||||
|
||||
try:
|
||||
boxname = self.ui.tf_box_combo.currentText()
|
||||
except Exception:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' %
|
||||
_("No FlatCAM object selected. Load an object for Box and retry."))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s %s' %
|
||||
(_("No object is selected."), _("Load an object for Box and retry.")))
|
||||
return
|
||||
|
||||
if name == '' or boxname == '':
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("No FlatCAM object selected."))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
scale_stroke_width = float(self.ui.film_scale_stroke_entry.get_value())
|
||||
|
@ -1108,7 +1108,7 @@ class FilmUI:
|
|||
{'label': _('Y'), 'value': 'y'},
|
||||
{'label': _('Both'), 'value': 'both'}],
|
||||
stretch=False)
|
||||
self.film_mirror_axis_label = FCLabel('%s:' % _("Mirror axis"))
|
||||
self.film_mirror_axis_label = FCLabel('%s:' % _("Mirror Axis"))
|
||||
|
||||
grid0.addWidget(self.film_mirror_axis_label, 16, 0)
|
||||
grid0.addWidget(self.film_mirror_axis, 16, 1)
|
||||
|
|
|
@ -1476,7 +1476,7 @@ class ToolIsolation(AppTool, Gerber):
|
|||
self.find_safe_tooldia_multiprocessing()
|
||||
|
||||
def worker_task(iso_obj):
|
||||
with self.app.proc_container.new(_("Isolating ...")):
|
||||
with self.app.proc_container.new('%s ...' % _("Isolating")):
|
||||
self.isolate_handler(iso_obj)
|
||||
|
||||
self.app.worker_task.emit({'fcn': worker_task, 'params': [self.grb_obj]})
|
||||
|
@ -3308,7 +3308,7 @@ class IsoUI:
|
|||
# Milling Type Radio Button
|
||||
self.milling_type_label = FCLabel('%s:' % _('Milling Type'))
|
||||
self.milling_type_label.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -3316,7 +3316,7 @@ class IsoUI:
|
|||
self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
|
||||
{'label': _('Conventional'), 'value': 'cv'}])
|
||||
self.milling_type_radio.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -3392,11 +3392,11 @@ class IsoUI:
|
|||
self.rest_cb.setObjectName("i_rest")
|
||||
self.rest_cb.setToolTip(
|
||||
_("If checked, use 'rest machining'.\n"
|
||||
"Basically it will isolate outside PCB features,\n"
|
||||
"Basically it will process copper outside PCB features,\n"
|
||||
"using the biggest tool and continue with the next tools,\n"
|
||||
"from bigger to smaller, to isolate the copper features that\n"
|
||||
"could not be cleared by previous tool, until there is\n"
|
||||
"no more copper features to isolate or there are no more tools.\n"
|
||||
"from bigger to smaller, to process the copper features that\n"
|
||||
"could not be processed by previous tool, until there is\n"
|
||||
"nothing left to process or there are no more tools.\n\n"
|
||||
"If not checked, use the standard algorithm.")
|
||||
)
|
||||
|
||||
|
|
|
@ -1352,7 +1352,7 @@ class ToolMilling(AppTool, Excellon):
|
|||
def job_init(job_obj, app_obj):
|
||||
assert job_obj.kind == 'cncjob', "Initializer expected a CNCJobObject, got %s" % type(job_obj)
|
||||
|
||||
app_obj.inform.emit(_("Generating Excellon CNCJob..."))
|
||||
app_obj.inform.emit(_("Generating CNCJob..."))
|
||||
|
||||
# get the tool_table items in a list of row items
|
||||
tool_table_items = self.get_selected_tools_table_items()
|
||||
|
@ -2086,7 +2086,7 @@ class MillingUI:
|
|||
# Start move Z:
|
||||
self.estartz_label = QtWidgets.QLabel('%s:' % _("Start Z"))
|
||||
self.estartz_label.setToolTip(
|
||||
_("Height of the tool just after start.\n"
|
||||
_("Height of the tool just after starting the work.\n"
|
||||
"Delete the value if you don't need this feature.")
|
||||
)
|
||||
self.estartz_entry = NumericalEvalEntry(border_color='#0069A9')
|
||||
|
@ -2163,7 +2163,7 @@ class MillingUI:
|
|||
self.feedrate_probe_entry.setVisible(False)
|
||||
|
||||
# Preprocessor Excellon selection
|
||||
pp_excellon_label = QtWidgets.QLabel('%s:' % _("Preprocessor E"))
|
||||
pp_excellon_label = QtWidgets.QLabel('%s:' % _("Preprocessor"))
|
||||
pp_excellon_label.setToolTip(
|
||||
_("The preprocessor JSON file that dictates\n"
|
||||
"Gcode output for Excellon Objects.")
|
||||
|
@ -2175,7 +2175,7 @@ class MillingUI:
|
|||
self.grid3.addWidget(self.pp_excellon_name_cb, 15, 1)
|
||||
|
||||
# Preprocessor Geometry selection
|
||||
pp_geo_label = QtWidgets.QLabel('%s:' % _("Preprocessor G"))
|
||||
pp_geo_label = QtWidgets.QLabel('%s:' % _("Preprocessor"))
|
||||
pp_geo_label.setToolTip(
|
||||
_("The preprocessor JSON file that dictates\n"
|
||||
"Gcode output for Geometry (Milling) Objects.")
|
||||
|
|
|
@ -163,7 +163,8 @@ class ToolMove(AppTool):
|
|||
with self.app.proc_container.new(_("Moving ...")):
|
||||
|
||||
if not obj_list:
|
||||
app_obj.app.inform.emit('[WARNING_NOTCL] %s' % _("No object(s) selected."))
|
||||
app_obj.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."),
|
||||
_("No object is selected.")))
|
||||
return "fail"
|
||||
|
||||
try:
|
||||
|
|
|
@ -2167,9 +2167,9 @@ class NonCopperClear(AppTool, Gerber):
|
|||
log.debug("Executing the handler ...")
|
||||
|
||||
if run_threaded:
|
||||
proc = self.app.proc_container.new(_("Non-Copper clearing ..."))
|
||||
proc = self.app.proc_container.new('%s...' % _("Non-Copper Clearing"))
|
||||
else:
|
||||
self.app.proc_container.view.set_busy(_("Non-Copper clearing ..."))
|
||||
self.app.proc_container.view.set_busy('%s...' % _("Non-Copper Clearing"))
|
||||
QtWidgets.QApplication.processEvents()
|
||||
|
||||
# ######################################################################################################
|
||||
|
@ -2751,9 +2751,9 @@ class NonCopperClear(AppTool, Gerber):
|
|||
:return:
|
||||
"""
|
||||
if run_threaded:
|
||||
proc = self.app.proc_container.new(_("Non-Copper clearing ..."))
|
||||
proc = self.app.proc_container.new('%s...' % _("Non-Copper Clearing"))
|
||||
else:
|
||||
self.app.proc_container.view.set_busy(_("Non-Copper clearing ..."))
|
||||
self.app.proc_container.view.set_busy('%s...' % _("Non-Copper Clearing"))
|
||||
QtWidgets.QApplication.processEvents()
|
||||
|
||||
# #####################################################################
|
||||
|
@ -4180,7 +4180,7 @@ class NccUI:
|
|||
# Milling Type Radio Button
|
||||
self.milling_type_label = FCLabel('%s:' % _('Milling Type'))
|
||||
self.milling_type_label.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -4188,7 +4188,7 @@ class NccUI:
|
|||
self.milling_type_radio = RadioSet([{'label': _('Climb'), 'value': 'cl'},
|
||||
{'label': _('Conventional'), 'value': 'cv'}])
|
||||
self.milling_type_radio.setToolTip(
|
||||
_("Milling type when the selected tool is of type: 'iso_op':\n"
|
||||
_("Milling type:\n"
|
||||
"- climb / best for precision milling and to reduce tool usage\n"
|
||||
"- conventional / useful when there is no backlash compensation")
|
||||
)
|
||||
|
@ -4205,8 +4205,8 @@ class NccUI:
|
|||
self.nccoverlabel.setToolTip(
|
||||
_("How much (percentage) of the tool width to overlap each tool pass.\n"
|
||||
"Adjust the value starting with lower values\n"
|
||||
"and increasing it if areas that should be cleared are still \n"
|
||||
"not cleared.\n"
|
||||
"and increasing it if areas that should be processed are still \n"
|
||||
"not processed.\n"
|
||||
"Lower values = faster processing, faster execution on CNC.\n"
|
||||
"Higher values = slow processing and slow execution on CNC\n"
|
||||
"due of too many paths.")
|
||||
|
@ -4284,8 +4284,7 @@ class NccUI:
|
|||
self.ncc_choice_offset_cb.setToolTip(
|
||||
_("If used, it will add an offset to the copper features.\n"
|
||||
"The copper clearing will finish to a distance\n"
|
||||
"from the copper features.\n"
|
||||
"The value can be between 0 and 10 FlatCAM units.")
|
||||
"from the copper features.")
|
||||
)
|
||||
self.grid3.addWidget(self.ncc_choice_offset_cb, 19, 0)
|
||||
|
||||
|
@ -4337,11 +4336,11 @@ class NccUI:
|
|||
|
||||
self.ncc_rest_cb.setToolTip(
|
||||
_("If checked, use 'rest machining'.\n"
|
||||
"Basically it will clear copper outside PCB features,\n"
|
||||
"Basically it will process copper outside PCB features,\n"
|
||||
"using the biggest tool and continue with the next tools,\n"
|
||||
"from bigger to smaller, to clear areas of copper that\n"
|
||||
"could not be cleared by previous tool, until there is\n"
|
||||
"no more copper to clear or there are no more tools.\n"
|
||||
"from bigger to smaller, to process the copper features that\n"
|
||||
"could not be processed by previous tool, until there is\n"
|
||||
"nothing left to process or there are no more tools.\n\n"
|
||||
"If not checked, use the standard algorithm.")
|
||||
)
|
||||
|
||||
|
@ -4381,8 +4380,7 @@ class NccUI:
|
|||
self.rest_ncc_choice_offset_cb.setToolTip(
|
||||
_("If used, it will add an offset to the copper features.\n"
|
||||
"The copper clearing will finish to a distance\n"
|
||||
"from the copper features.\n"
|
||||
"The value can be between 0 and 10 FlatCAM units.")
|
||||
"from the copper features.")
|
||||
)
|
||||
self.grid3.addWidget(self.rest_ncc_choice_offset_cb, 28, 0)
|
||||
|
||||
|
|
|
@ -2182,13 +2182,13 @@ class ToolPaint(AppTool, Gerber):
|
|||
proc.done()
|
||||
|
||||
if ret == 'fail':
|
||||
self.app.inform.emit('[ERROR] %s' % _("Paint failed."))
|
||||
self.app.inform.emit('[ERROR] %s' % _("Failed."))
|
||||
return
|
||||
|
||||
# focus on Properties Tab
|
||||
# self.app.ui.notebook.setCurrentWidget(self.app.ui.properties_tab)
|
||||
|
||||
self.app.inform.emit('[success] %s' % _("Paint Done."))
|
||||
self.app.inform.emit('[success] %s' % _("Done."))
|
||||
|
||||
# Promise object with the new name
|
||||
self.app.collection.promise(name)
|
||||
|
@ -2974,8 +2974,8 @@ class PaintUI:
|
|||
ovlabel.setToolTip(
|
||||
_("How much (percentage) of the tool width to overlap each tool pass.\n"
|
||||
"Adjust the value starting with lower values\n"
|
||||
"and increasing it if areas that should be painted are still \n"
|
||||
"not painted.\n"
|
||||
"and increasing it if areas that should be processed are still \n"
|
||||
"not processed.\n"
|
||||
"Lower values = faster processing, faster execution on CNC.\n"
|
||||
"Higher values = slow processing and slow execution on CNC\n"
|
||||
"due of too many paths.")
|
||||
|
@ -3077,11 +3077,11 @@ class PaintUI:
|
|||
self.rest_cb.setObjectName('p_rest_machining')
|
||||
self.rest_cb.setToolTip(
|
||||
_("If checked, use 'rest machining'.\n"
|
||||
"Basically it will clear copper outside PCB features,\n"
|
||||
"Basically it will process copper outside PCB features,\n"
|
||||
"using the biggest tool and continue with the next tools,\n"
|
||||
"from bigger to smaller, to clear areas of copper that\n"
|
||||
"could not be cleared by previous tool, until there is\n"
|
||||
"no more copper to clear or there are no more tools.\n\n"
|
||||
"from bigger to smaller, to process the copper features that\n"
|
||||
"could not be processed by previous tool, until there is\n"
|
||||
"nothing left to process or there are no more tools.\n\n"
|
||||
"If not checked, use the standard algorithm.")
|
||||
)
|
||||
grid4.addWidget(self.rest_cb, 16, 0, 1, 2)
|
||||
|
|
|
@ -603,24 +603,21 @@ class Panelize(AppTool):
|
|||
panel_type, self.outname, job_init_geometry, plot=True, autoselected=True)
|
||||
|
||||
if self.constrain_flag is False:
|
||||
self.app.inform.emit('[success] %s' % _("Panel done..."))
|
||||
self.app.inform.emit('[success] %s' % _("Done."))
|
||||
else:
|
||||
self.constrain_flag = False
|
||||
self.app.inform.emit(_("{text} Too big for the constrain area. "
|
||||
"Final panel has {col} columns and {row} rows").format(
|
||||
text='[WARNING] ', col=columns, row=rows))
|
||||
|
||||
proc = self.app.proc_container.new(_("Working ..."))
|
||||
|
||||
def job_thread(app_obj):
|
||||
try:
|
||||
panelize_worker()
|
||||
app_obj.inform.emit('[success] %s' % _("Panel created successfully."))
|
||||
except Exception as ee:
|
||||
proc.done()
|
||||
log.debug(str(ee))
|
||||
return
|
||||
proc.done()
|
||||
with self.app.proc_container.new(_("Working ...")):
|
||||
try:
|
||||
panelize_worker()
|
||||
app_obj.inform.emit('[success] %s' % _("Panel created successfully."))
|
||||
except Exception as ee:
|
||||
log.debug(str(ee))
|
||||
return
|
||||
|
||||
self.app.collection.promise(self.outname)
|
||||
self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]})
|
||||
|
|
|
@ -450,8 +450,8 @@ class WizardUI:
|
|||
form_layout1.addRow(self.zeros_label, self.zeros_radio)
|
||||
|
||||
# Units type
|
||||
self.units_radio = RadioSet([{'label': _('INCH'), 'value': 'INCH'},
|
||||
{'label': _('MM'), 'value': 'METRIC'}])
|
||||
self.units_radio = RadioSet([{'label': _('Inch'), 'value': 'INCH'},
|
||||
{'label': _('mm'), 'value': 'METRIC'}])
|
||||
self.units_label = FCLabel("<b>%s:</b>" % _('Units'))
|
||||
self.units_label.setToolTip(
|
||||
_("The type of units that the coordinates and tool\n"
|
||||
|
@ -463,7 +463,7 @@ class WizardUI:
|
|||
|
||||
self.import_button = QtWidgets.QPushButton(_("Import Excellon"))
|
||||
self.import_button.setToolTip(
|
||||
_("Import in FlatCAM an Excellon file\n"
|
||||
_("Import an Excellon file\n"
|
||||
"that store it's information's in 2 files.\n"
|
||||
"One usually has .DRL extension while\n"
|
||||
"the other has .INF extension.")
|
||||
|
|
|
@ -109,7 +109,7 @@ class Properties(AppTool):
|
|||
def properties(self):
|
||||
obj_list = self.app.collection.get_selected()
|
||||
if not obj_list:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object selected."))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object is selected."))
|
||||
self.app.ui.notebook.setTabText(2, _("Tools"))
|
||||
self.properties_frame.hide()
|
||||
self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab)
|
||||
|
|
|
@ -139,7 +139,7 @@ class ToolTransform(AppTool):
|
|||
py = (ymax + ymin) * 0.5
|
||||
return px, py
|
||||
else:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object selected."))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("No object is selected."))
|
||||
return "fail"
|
||||
elif ref_val == 2: # "Point" reference
|
||||
point_val = self.uipoint_entry.get_value()
|
||||
|
@ -290,7 +290,7 @@ class ToolTransform(AppTool):
|
|||
obj_list = self.app.collection.get_selected()
|
||||
|
||||
if not obj_list:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object selected. Please Select an object to rotate!"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
else:
|
||||
with self.app.proc_container.new(_("Appying Rotate")):
|
||||
|
@ -315,7 +315,7 @@ class ToolTransform(AppTool):
|
|||
obj_list = self.app.collection.get_selected()
|
||||
|
||||
if not obj_list:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s!' % _("No object selected. Please Select an object to flip"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s!' % _("No object is selected."))
|
||||
return
|
||||
else:
|
||||
with self.app.proc_container.new(_("Applying Flip")):
|
||||
|
@ -360,8 +360,7 @@ class ToolTransform(AppTool):
|
|||
return
|
||||
|
||||
if not obj_list:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' %
|
||||
_("No object selected. Please Select an object to shear/skew!"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
else:
|
||||
with self.app.proc_container.new(_("Applying Skew")):
|
||||
|
@ -387,7 +386,7 @@ class ToolTransform(AppTool):
|
|||
obj_list = self.app.collection.get_selected()
|
||||
|
||||
if not obj_list:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object selected. Please Select an object to scale!"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
else:
|
||||
with self.app.proc_container.new(_("Applying Scale")):
|
||||
|
@ -414,7 +413,7 @@ class ToolTransform(AppTool):
|
|||
obj_list = self.app.collection.get_selected()
|
||||
|
||||
if not obj_list:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object selected. Please Select an object to offset!"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
else:
|
||||
with self.app.proc_container.new(_("Applying Offset")):
|
||||
|
@ -443,7 +442,7 @@ class ToolTransform(AppTool):
|
|||
obj_list = self.app.collection.get_selected()
|
||||
|
||||
if not obj_list:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object selected. Please Select an object to buffer!"))
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
else:
|
||||
with self.app.proc_container.new(_("Applying Buffer")):
|
||||
|
|
57
app_Main.py
57
app_Main.py
|
@ -4763,7 +4763,7 @@ class App(QtCore.QObject):
|
|||
self.exc_areas.clear_shapes()
|
||||
self.inform.emit('%s...' % _("Object(s) deleted"))
|
||||
else:
|
||||
self.inform.emit('[ERROR_NOTCL] %s' % _("Failed. No object(s) selected..."))
|
||||
self.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
|
||||
else:
|
||||
self.inform.emit(_("Save the work in Editor and try again ..."))
|
||||
|
||||
|
@ -5104,7 +5104,7 @@ class App(QtCore.QObject):
|
|||
self.defaults.report_usage("on_locate()")
|
||||
|
||||
if obj is None:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return 'fail'
|
||||
|
||||
class DialogBoxChoice(QtWidgets.QDialog):
|
||||
|
@ -5433,7 +5433,7 @@ class App(QtCore.QObject):
|
|||
if not self.collection.get_selected():
|
||||
log.warning("App.convert_any2geo --> No object selected")
|
||||
self.inform.emit('[WARNING_NOTCL] %s' %
|
||||
_("No object is selected. Select an object and try again."))
|
||||
_("No object is selected."))
|
||||
return
|
||||
|
||||
for obj in self.collection.get_selected():
|
||||
|
@ -5511,7 +5511,7 @@ class App(QtCore.QObject):
|
|||
if not self.collection.get_selected():
|
||||
log.warning("App.convert_any2gerber --> No object selected")
|
||||
self.inform.emit('[WARNING_NOTCL] %s' %
|
||||
_("No object is selected. Select an object and try again."))
|
||||
_("No object is selected."))
|
||||
return
|
||||
|
||||
for obj in self.collection.get_selected():
|
||||
|
@ -5681,7 +5681,7 @@ class App(QtCore.QObject):
|
|||
|
||||
if not self.collection.get_selected():
|
||||
log.warning("App.convert_any2excellon--> No object selected")
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected. Select an object and try again."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
for obj in self.collection.get_selected():
|
||||
|
@ -6019,7 +6019,7 @@ class App(QtCore.QObject):
|
|||
ymaxlist = []
|
||||
|
||||
if not obj_list:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Flip on Y axis."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
else:
|
||||
try:
|
||||
# first get a bounding box to fit all
|
||||
|
@ -6065,7 +6065,7 @@ class App(QtCore.QObject):
|
|||
ymaxlist = []
|
||||
|
||||
if not obj_list:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Flip on X axis."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
else:
|
||||
try:
|
||||
# first get a bounding box to fit all
|
||||
|
@ -6112,7 +6112,7 @@ class App(QtCore.QObject):
|
|||
ymaxlist = []
|
||||
|
||||
if not obj_list:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Rotate."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
else:
|
||||
if silent is False:
|
||||
rotatebox = FCInputDialog(title=_("Transform"), text=_("Enter the Angle value:"),
|
||||
|
@ -6165,7 +6165,7 @@ class App(QtCore.QObject):
|
|||
yminlist = []
|
||||
|
||||
if not obj_list:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Skew/Shear on X axis."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
else:
|
||||
skewxbox = FCInputDialog(title=_("Transform"), text=_("Enter the Angle value:"),
|
||||
min=-360, max=360, decimals=4,
|
||||
|
@ -6203,7 +6203,7 @@ class App(QtCore.QObject):
|
|||
yminlist = []
|
||||
|
||||
if not obj_list:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected to Skew/Shear on Y axis."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
else:
|
||||
skewybox = FCInputDialog(title=_("Transform"), text=_("Enter the Angle value:"),
|
||||
min=-360, max=360, decimals=4,
|
||||
|
@ -6348,7 +6348,7 @@ class App(QtCore.QObject):
|
|||
try:
|
||||
self.defaults["global_grid_context_menu"][str(units)].remove(val)
|
||||
except ValueError:
|
||||
self.inform.emit('[ERROR_NOTCL]%s...' % _(" Grid Value does not exist"))
|
||||
self.inform.emit('[ERROR_NOTCL]%s...' % _("Grid Value does not exist"))
|
||||
return
|
||||
self.inform.emit('[success] %s...' % _("Grid Value deleted"))
|
||||
else:
|
||||
|
@ -6394,12 +6394,11 @@ class App(QtCore.QObject):
|
|||
name = obj.options["name"]
|
||||
except AttributeError:
|
||||
self.log.debug("on_copy_name() --> No object selected to copy it's name")
|
||||
self.inform.emit('[WARNING_NOTCL] %s' %
|
||||
_(" No object selected to copy it's name"))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
self.clipboard.setText(name)
|
||||
self.inform.emit(_("Name copied on clipboard ..."))
|
||||
self.inform.emit(_("Name copied to clipboard ..."))
|
||||
|
||||
def on_mouse_click_over_plot(self, event):
|
||||
"""
|
||||
|
@ -7173,7 +7172,7 @@ class App(QtCore.QObject):
|
|||
return 'fail'
|
||||
|
||||
self.inform.emit('%s' % _("Viewing the source code of the selected object."))
|
||||
self.proc_container.view.set_busy(_("Loading..."))
|
||||
self.proc_container.view.set_busy('%s...' % _("Loading"))
|
||||
|
||||
flt = "All Files (*.*)"
|
||||
if obj.kind == 'gerber':
|
||||
|
@ -7271,7 +7270,7 @@ class App(QtCore.QObject):
|
|||
:return: None
|
||||
"""
|
||||
dia_box = Dialog_box(title=_("Go to Line ..."),
|
||||
label=_("Line:"),
|
||||
label='%s:' % _("Line"),
|
||||
icon=QtGui.QIcon(self.resource_location + '/jump_to16.png'),
|
||||
initial_text='')
|
||||
try:
|
||||
|
@ -8506,7 +8505,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
|
||||
obj = self.app.collection.get_active()
|
||||
if obj is None:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
msg = _("Please Select a Geometry object to export")
|
||||
msgbox = QtWidgets.QMessageBox()
|
||||
msgbox.setIcon(QtWidgets.QMessageBox.Warning)
|
||||
|
@ -8608,7 +8607,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
|
||||
obj = self.app.collection.get_active()
|
||||
if obj is None:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
# Check for more compatible types and add as required
|
||||
|
@ -8650,7 +8649,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
|
||||
obj = self.app.collection.get_active()
|
||||
if obj is None:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
# Check for more compatible types and add as required
|
||||
|
@ -8692,7 +8691,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
|
||||
obj = self.app.collection.get_active()
|
||||
if obj is None:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
# Check for more compatible types and add as required
|
||||
|
@ -8734,7 +8733,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
|
||||
obj = self.app.collection.get_active()
|
||||
if obj is None:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
# Check for more compatible types and add as required
|
||||
|
@ -8775,7 +8774,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
|
||||
obj = self.app.collection.get_active()
|
||||
if obj is None:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
# Check for more compatible types and add as required
|
||||
|
@ -8820,7 +8819,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
|
||||
obj = self.app.collection.get_active()
|
||||
if obj is None:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
# Check for more compatible types and add as required
|
||||
|
@ -8865,7 +8864,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
|
||||
obj = self.app.collection.get_active()
|
||||
if obj is None:
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[WARNING_NOTCL] %s' % _("No object is selected."))
|
||||
msg = _("Please Select a Geometry object to export")
|
||||
msgbox = QtWidgets.QMessageBox()
|
||||
msgbox.setIcon(QtWidgets.QMessageBox.Warning)
|
||||
|
@ -9328,11 +9327,11 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
obj_name = _("FlatCAM objects print")
|
||||
except AttributeError as err:
|
||||
self.app.log.debug("App.on_file_save_object_pdf() --> %s" % str(err))
|
||||
self.inform.emit('[ERROR_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[ERROR_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
if not obj_selection:
|
||||
self.inform.emit('[ERROR_NOTCL] %s' % _("No object selected."))
|
||||
self.inform.emit('[ERROR_NOTCL] %s' % _("No object is selected."))
|
||||
return
|
||||
|
||||
filter_ = "PDF File .pdf (*.PDF);; All Files (*.*)"
|
||||
|
@ -10067,7 +10066,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
# appGUI feedback
|
||||
app_obj.inform.emit('[success] %s: %s' % (_("Opened"), filename))
|
||||
|
||||
with self.app.proc_container.new(_("Importing ...")):
|
||||
with self.app.proc_container.new('%s ...' % _("Importing")):
|
||||
|
||||
# Object name
|
||||
name = outname or filename.split('/')[-1].split('\\')[-1]
|
||||
|
@ -10122,7 +10121,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
# appGUI feedback
|
||||
app_obj.inform.emit('[success] %s: %s' % (_("Opened"), filename))
|
||||
|
||||
with self.app.proc_container.new(_("Importing ...")):
|
||||
with self.app.proc_container.new('%s ...' % _("Importing")):
|
||||
|
||||
# Object name
|
||||
name = outname or filename.split('/')[-1].split('\\')[-1]
|
||||
|
@ -10385,7 +10384,7 @@ class MenuFileHandlers(QtCore.QObject):
|
|||
# # ## Object creation # ##
|
||||
ret = self.app.app_obj.new_object("geometry", name, obj_init, autoselected=False)
|
||||
if ret == 'fail':
|
||||
self.inform.emit('[ERROR_NOTCL]%s' % _(' Open HPGL2 failed. Probable not a HPGL2 file.'))
|
||||
self.inform.emit('[ERROR_NOTCL]%s' % _('Failed. Probable not a HPGL2 file.'))
|
||||
return 'fail'
|
||||
|
||||
# Register recent file
|
||||
|
|
13
camlib.py
13
camlib.py
|
@ -2400,7 +2400,8 @@ class Geometry(object):
|
|||
self.solid_geometry = mirror_geom(self.solid_geometry)
|
||||
self.app.inform.emit('[success] %s...' % _('Object was mirrored'))
|
||||
except AttributeError:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to mirror. No object selected"))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
|
||||
|
||||
|
||||
self.app.proc_container.new_text = ''
|
||||
|
||||
|
@ -2467,7 +2468,7 @@ class Geometry(object):
|
|||
self.solid_geometry = rotate_geom(self.solid_geometry)
|
||||
self.app.inform.emit('[success] %s...' % _('Object was rotated'))
|
||||
except AttributeError:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to rotate. No object selected"))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
|
||||
|
||||
self.app.proc_container.new_text = ''
|
||||
|
||||
|
@ -2535,7 +2536,7 @@ class Geometry(object):
|
|||
self.solid_geometry = skew_geom(self.solid_geometry)
|
||||
self.app.inform.emit('[success] %s...' % _('Object was skewed'))
|
||||
except AttributeError:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to skew. No object selected"))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
|
||||
|
||||
self.app.proc_container.new_text = ''
|
||||
|
||||
|
@ -2613,7 +2614,7 @@ class Geometry(object):
|
|||
|
||||
self.app.inform.emit('[success] %s...' % _('Object was buffered'))
|
||||
except AttributeError:
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s' % _("Failed to buffer. No object selected"))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed."), _("No object is selected.")))
|
||||
|
||||
self.app.proc_container.new_text = ''
|
||||
|
||||
|
@ -5955,7 +5956,7 @@ class CNCjob(Geometry):
|
|||
self.gcode += self.doformat(p.lift_code, x=current_pt[0], y=current_pt[1])
|
||||
self.gcode += self.doformat(p.end_code, x=0, y=0)
|
||||
self.app.inform.emit(
|
||||
'%s... %s %s' % (_("Finished G-Code generation"), str(path_count), _(" paths traced."))
|
||||
'%s... %s %s.' % (_("Finished G-Code generation"), str(path_count), _("paths traced"))
|
||||
)
|
||||
|
||||
return self.gcode, start_gcode
|
||||
|
@ -6073,7 +6074,7 @@ class CNCjob(Geometry):
|
|||
|
||||
log.debug("Finishing SolderPste G-Code... %s paths traced." % path_count)
|
||||
self.app.inform.emit(
|
||||
'%s... %s %s' % (_("Finished SolderPaste G-Code generation"), str(path_count), _("paths traced."))
|
||||
'%s... %s %s.' % (_("Finished SolderPaste G-Code generation"), str(path_count), _("paths traced"))
|
||||
)
|
||||
|
||||
# Finish
|
||||
|
|
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
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
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
120
make_freezed.py
120
make_freezed.py
|
@ -1,120 +0,0 @@
|
|||
# ##########################################################
|
||||
# FlatCAM: 2D Post-processing for Manufacturing #
|
||||
# http://flatcam.org #
|
||||
# Author: Juan Pablo Caram (c) #
|
||||
# Date: 12/20/2018 #
|
||||
# MIT Licence #
|
||||
# #
|
||||
# Creates a portable copy of FlatCAM, including Python #
|
||||
# itself and all dependencies. #
|
||||
# #
|
||||
# This is not an aid to install FlatCAM from source on #
|
||||
# Windows platforms. It is only useful when FlatCAM is up #
|
||||
# and running and ready to be packaged. #
|
||||
# ##########################################################
|
||||
|
||||
# ##########################################################
|
||||
# File Modified: Marius Adrian Stanciu #
|
||||
# Date: 3/10/2019 #
|
||||
# ##########################################################
|
||||
|
||||
|
||||
# Files not needed: Qt, tk.dll, tcl.dll, tk/, tcl/, vtk/,
|
||||
# scipy.lib.lapack.flapack.pyd, scipy.lib.blas.fblas.pyd,
|
||||
# numpy.core._dotblas.pyd, scipy.sparse.sparsetools._bsr.pyd,
|
||||
# scipy.sparse.sparsetools._csr.pyd, scipy.sparse.sparsetools._csc.pyd,
|
||||
# scipy.sparse.sparsetools._coo.pyd
|
||||
|
||||
import os
|
||||
import site
|
||||
import sys
|
||||
import platform
|
||||
from cx_Freeze import setup, Executable
|
||||
|
||||
# this is done to solve the tkinter not being found
|
||||
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
|
||||
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
|
||||
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')
|
||||
|
||||
# Get the site-package folder, not everybody will install
|
||||
# Python into C:\PythonXX
|
||||
site_dir = site.getsitepackages()[1]
|
||||
|
||||
include_files = []
|
||||
|
||||
include_files.append((os.path.join(site_dir, "shapely"), "shapely"))
|
||||
include_files.append((os.path.join(site_dir, "svg"), "svg"))
|
||||
include_files.append((os.path.join(site_dir, "svg/path"), "svg"))
|
||||
include_files.append((os.path.join(site_dir, "vispy"), "vispy"))
|
||||
include_files.append((os.path.join(site_dir, "vispy/app"), "vispy/app"))
|
||||
include_files.append((os.path.join(site_dir, "vispy/app/backends"), "vispy/app/backends"))
|
||||
# include_files.append((os.path.join(site_dir, "matplotlib"), "matplotlib"))
|
||||
include_files.append((os.path.join(site_dir, "rtree"), "rtree"))
|
||||
|
||||
if platform.architecture()[0] == '64bit':
|
||||
include_files.append((os.path.join(site_dir, "google"), "google"))
|
||||
include_files.append((os.path.join(site_dir, "google/protobuf"), "google/protobuf"))
|
||||
include_files.append((os.path.join(site_dir, "ortools"), "ortools"))
|
||||
|
||||
include_files.append(("locale", "lib/locale"))
|
||||
include_files.append(("preprocessors", "lib/preprocessors"))
|
||||
# include_files.append(("assets", "lib/assets"))
|
||||
include_files.append(("assets/examples", "lib/assets/examples"))
|
||||
include_files.append(("assets/linux", "lib/assets/linux"))
|
||||
include_files.append(("assets/resources", "lib/assets/resources"))
|
||||
# include_files.append(("share", "lib/share"))
|
||||
include_files.append(("appGUI/VisPyData", "lib/vispy"))
|
||||
include_files.append(("config", "lib/config"))
|
||||
|
||||
include_files.append(("README.md", "README.md"))
|
||||
include_files.append(("LICENSE", "LICENSE"))
|
||||
include_files.append(("CHANGELOG.md", "CHANGELOG.md"))
|
||||
base = None
|
||||
|
||||
# Lets not open the console while running the app
|
||||
if sys.platform == "win32":
|
||||
base = "Win32GUI"
|
||||
|
||||
if platform.architecture()[0] == '64bit':
|
||||
buildOptions = dict(
|
||||
include_files=include_files,
|
||||
excludes=['scipy', 'pytz', "matplotlib.tests", "numpy.random._examples"],
|
||||
# packages=['OpenGL','numpy','vispy','ortools','google']
|
||||
# packages=['numpy','google', 'rasterio'] # works for Python 3.7
|
||||
packages=['opengl', 'numpy', 'google', 'rasterio'], # works for Python 3.6.5 and Python 3.7.1
|
||||
)
|
||||
else:
|
||||
buildOptions = dict(
|
||||
include_files=include_files,
|
||||
excludes=['scipy', 'pytz'],
|
||||
# packages=['OpenGL','numpy','vispy','ortools','google']
|
||||
# packages=['numpy', 'rasterio'] # works for Python 3.7
|
||||
packages=['opengl', 'numpy', 'rasterio'], # works for Python 3.6.5 and Python 3.7.1
|
||||
)
|
||||
|
||||
if sys.platform == "win32":
|
||||
buildOptions["include_msvcr"] = True
|
||||
|
||||
print("INCLUDE_FILES", include_files)
|
||||
|
||||
|
||||
def getTargetName():
|
||||
my_OS = platform.system()
|
||||
if my_OS == 'Linux':
|
||||
return "FlatCAM"
|
||||
elif my_OS == 'Windows':
|
||||
return "FlatCAM.exe"
|
||||
else:
|
||||
return "FlatCAM.dmg"
|
||||
|
||||
|
||||
exe = Executable("FlatCAM.py", icon='assets/resources/flatcam_icon48.ico', base=base, targetName=getTargetName())
|
||||
|
||||
setup(
|
||||
name="FlatCAM",
|
||||
author="Community effort",
|
||||
version="8.9",
|
||||
description="FlatCAM Evo: 2D Computer Aided PCB Manufacturing",
|
||||
options=dict(build_exe=buildOptions),
|
||||
executables=[exe]
|
||||
)
|
|
@ -73,7 +73,7 @@ class TclCommandImportSvg(TclCommandSignaled):
|
|||
if obj_type != "geometry" and obj_type != "gerber":
|
||||
self.raise_tcl_error("Option type can be 'geometry' or 'gerber' only, got '%s'." % obj_type)
|
||||
|
||||
with self.app.proc_container.new('%s' % _("Importing ...")):
|
||||
with self.app.proc_container.new('%s ...' % _("Importing")):
|
||||
|
||||
# Object creation
|
||||
self.app.app_obj.new_object(obj_type, outname, obj_init, plot=False)
|
||||
|
|
Loading…
Reference in New Issue