- SolderPaste Tool - fixed the UI
- SolderPaste Tool - fixed various issues
This commit is contained in:
@@ -6,12 +6,11 @@
|
||||
# ##########################################################
|
||||
|
||||
from PyQt5 import QtGui, QtCore, QtWidgets
|
||||
from PyQt5.QtCore import Qt
|
||||
|
||||
from appTool import AppTool
|
||||
from appCommon.Common import LoudDict
|
||||
from appGUI.GUIElements import FCComboBox, FCEntry, FCTable, FCDoubleSpinner, FCSpinner, FCFileSaveDialog, \
|
||||
FCInputSpinner
|
||||
FCInputSpinner, FCButton
|
||||
|
||||
from camlib import distance
|
||||
from appEditors.AppTextEditor import AppTextEditor
|
||||
@@ -345,11 +344,11 @@ class SolderPaste(AppTool):
|
||||
def ui_connect(self):
|
||||
# on any change to the widgets that matter it will be called self.gui_form_to_storage which will save the
|
||||
# changes in geometry UI
|
||||
for i in range(self.ui.gcode_form_layout.count()):
|
||||
if isinstance(self.ui.gcode_form_layout.itemAt(i).widget(), FCComboBox):
|
||||
self.ui.gcode_form_layout.itemAt(i).widget().currentIndexChanged.connect(self.read_form_to_tooldata)
|
||||
if isinstance(self.ui.gcode_form_layout.itemAt(i).widget(), FCEntry):
|
||||
self.ui.gcode_form_layout.itemAt(i).widget().editingFinished.connect(self.read_form_to_tooldata)
|
||||
for i in range(self.ui.param_grid.count()):
|
||||
if isinstance(self.ui.param_grid.itemAt(i).widget(), FCComboBox):
|
||||
self.ui.param_grid.itemAt(i).widget().currentIndexChanged.connect(self.form_to_storage)
|
||||
if isinstance(self.ui.param_grid.itemAt(i).widget(), FCEntry):
|
||||
self.ui.param_grid.itemAt(i).widget().editingFinished.connect(self.form_to_storage)
|
||||
|
||||
self.ui.tools_table.itemChanged.connect(self.on_tool_edit)
|
||||
self.ui.tools_table.currentItemChanged.connect(self.on_row_selection_change)
|
||||
@@ -357,15 +356,15 @@ class SolderPaste(AppTool):
|
||||
def ui_disconnect(self):
|
||||
# if connected, disconnect the signal from the slot on item_changed as it creates issues
|
||||
|
||||
for i in range(self.ui.gcode_form_layout.count()):
|
||||
if isinstance(self.ui.gcode_form_layout.itemAt(i).widget(), FCComboBox):
|
||||
for i in range(self.ui.param_grid.count()):
|
||||
if isinstance(self.ui.param_grid.itemAt(i).widget(), FCComboBox):
|
||||
try:
|
||||
self.ui.gcode_form_layout.itemAt(i).widget().currentIndexChanged.disconnect()
|
||||
self.ui.param_grid.itemAt(i).widget().currentIndexChanged.disconnect()
|
||||
except (TypeError, AttributeError):
|
||||
pass
|
||||
if isinstance(self.ui.gcode_form_layout.itemAt(i).widget(), FCEntry):
|
||||
if isinstance(self.ui.param_grid.itemAt(i).widget(), FCEntry):
|
||||
try:
|
||||
self.ui.gcode_form_layout.itemAt(i).widget().editingFinished.disconnect()
|
||||
self.ui.param_grid.itemAt(i).widget().editingFinished.disconnect()
|
||||
except (TypeError, AttributeError):
|
||||
pass
|
||||
|
||||
@@ -417,7 +416,7 @@ class SolderPaste(AppTool):
|
||||
for key in self.form_fields:
|
||||
self.options[key] = self.form_fields[key].get_value()
|
||||
|
||||
def read_form_to_tooldata(self, tooluid=None):
|
||||
def form_to_storage(self, tooluid=None):
|
||||
"""
|
||||
Will read all the items in the UI form and set the self.tools data accordingly
|
||||
:param tooluid: the uid of the tool to be updated in the obj.tools
|
||||
@@ -923,20 +922,20 @@ class SolderPaste(AppTool):
|
||||
|
||||
# Object initialization function for app.app_obj.new_object()
|
||||
# RUNNING ON SEPARATE THREAD!
|
||||
def job_init(job_obj):
|
||||
assert job_obj.kind == 'cncjob', \
|
||||
"Initializer expected a CNCJobObject, got %s" % type(job_obj)
|
||||
def job_init(new_obj, app_obj):
|
||||
assert new_obj.kind == 'cncjob', \
|
||||
"Initializer expected a CNCJobObject, got %s" % type(new_obj)
|
||||
|
||||
# this turn on the FlatCAMCNCJob plot for multiple tools
|
||||
job_obj.multitool = True
|
||||
job_obj.multigeo = True
|
||||
job_obj.cnc_tools.clear()
|
||||
job_obj.special_group = 'solder_paste_tool'
|
||||
new_obj.multitool = True
|
||||
new_obj.multigeo = True
|
||||
new_obj.cnc_tools.clear()
|
||||
new_obj.special_group = 'solder_paste_tool'
|
||||
|
||||
job_obj.options['xmin'] = xmin
|
||||
job_obj.options['ymin'] = ymin
|
||||
job_obj.options['xmax'] = xmax
|
||||
job_obj.options['ymax'] = ymax
|
||||
new_obj.options['xmin'] = xmin
|
||||
new_obj.options['ymin'] = ymin
|
||||
new_obj.options['xmax'] = xmax
|
||||
new_obj.options['ymax'] = ymax
|
||||
|
||||
total_gcode = ''
|
||||
for tooluid_key, tooluid_value in obj.tools.items():
|
||||
@@ -944,47 +943,46 @@ class SolderPaste(AppTool):
|
||||
tool_dia = tooluid_value['tooldia']
|
||||
tool_cnc_dict = deepcopy(tooluid_value)
|
||||
|
||||
job_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"]
|
||||
job_obj.fr_decimals = self.app.defaults["cncjob_fr_decimals"]
|
||||
job_obj.tool = int(tooluid_key)
|
||||
new_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"]
|
||||
new_obj.fr_decimals = self.app.defaults["cncjob_fr_decimals"]
|
||||
new_obj.tool = int(tooluid_key)
|
||||
|
||||
# Propagate options
|
||||
job_obj.options["tooldia"] = tool_dia
|
||||
job_obj.options['tool_dia'] = tool_dia
|
||||
new_obj.options["tooldia"] = tool_dia
|
||||
new_obj.options['tool_dia'] = tool_dia
|
||||
|
||||
# ## CREATE GCODE # ##
|
||||
res = job_obj.generate_gcode_from_solderpaste_geo(**tooluid_value)
|
||||
res = new_obj.generate_gcode_from_solderpaste_geo(**tooluid_value)
|
||||
|
||||
if res == 'fail':
|
||||
self.app.log.debug("GeometryObject.mtool_gen_cncjob() --> generate_from_geometry2() failed")
|
||||
app_obj.log.debug("GeometryObject.mtool_gen_cncjob() --> generate_from_geometry2() failed")
|
||||
return 'fail'
|
||||
else:
|
||||
tool_cnc_dict['gcode'] = res
|
||||
tool_cnc_dict['gcode'] = StringIO(res)
|
||||
total_gcode += res
|
||||
|
||||
# ## PARSE GCODE # ##
|
||||
tool_cnc_dict['gcode_parsed'] = job_obj.gcode_parse()
|
||||
tool_cnc_dict['gcode_parsed'] = new_obj.gcode_parse()
|
||||
|
||||
# TODO this serve for bounding box creation only; should be optimized
|
||||
tool_cnc_dict['solid_geometry'] = unary_union([geo['geom'] for geo in tool_cnc_dict['gcode_parsed']])
|
||||
|
||||
# tell gcode_parse from which point to start drawing the lines depending on what kind of
|
||||
# object is the source of gcode
|
||||
job_obj.toolchange_xy_type = "geometry"
|
||||
job_obj.cnc_tools.update({
|
||||
new_obj.toolchange_xy_type = "geometry"
|
||||
new_obj.cnc_tools.update({
|
||||
tooluid_key: deepcopy(tool_cnc_dict)
|
||||
})
|
||||
tool_cnc_dict.clear()
|
||||
|
||||
job_obj.source_file = total_gcode
|
||||
new_obj.source_file = StringIO(total_gcode)
|
||||
|
||||
if use_thread:
|
||||
# To be run in separate thread
|
||||
def job_thread(app_obj):
|
||||
with self.app.proc_container.new('%s...' % _("Working")):
|
||||
if app_obj.app_obj.new_object("cncjob", name, job_init) != 'fail':
|
||||
app_obj.inform.emit('[success] [success] %s: %s' %
|
||||
(_("ToolSolderPaste CNCjob created"), name))
|
||||
app_obj.inform.emit('[success] %s: %s' % (_("ToolSolderPaste CNCjob created"), name))
|
||||
# Create a promise with the name
|
||||
self.app.collection.promise(name)
|
||||
# Send to worker
|
||||
@@ -1037,21 +1035,26 @@ class SolderPaste(AppTool):
|
||||
gcode += '(Created on ' + time_str + ')\n' + '\n'
|
||||
|
||||
for tool in obj.cnc_tools:
|
||||
gcode += obj.cnc_tools[tool]['gcode']
|
||||
try:
|
||||
# it's text
|
||||
gcode += obj.cnc_tools[tool]['gcode']
|
||||
except TypeError:
|
||||
# it's StringIO
|
||||
gcode += obj.cnc_tools[tool]['gcode'].getvalue()
|
||||
|
||||
# then append the text from GCode to the text editor
|
||||
try:
|
||||
lines = StringIO(gcode)
|
||||
except Exception as e:
|
||||
self.app.log.debug("ToolSolderpaste.on_view_gcode() --> %s" % str(e))
|
||||
self.app.inform.emit('[ERROR_NOTCL] %s...' % _("No Gcode in the object"))
|
||||
return
|
||||
# try:
|
||||
# lines = StringIO(gcode)
|
||||
# except Exception as e:
|
||||
# self.app.log.debug("ToolSolderpaste.on_view_gcode() --> %s" % str(e))
|
||||
# self.app.inform.emit('[ERROR_NOTCL] %s...' % _("No Gcode in the object"))
|
||||
# return
|
||||
|
||||
try:
|
||||
# for line in lines:
|
||||
# proc_line = str(line).strip('\n')
|
||||
# self.text_editor_tab.code_editor.append(proc_line)
|
||||
self.text_editor_tab.load_text(lines, move_to_start=True)
|
||||
self.text_editor_tab.load_text(gcode, move_to_start=True)
|
||||
except Exception as e:
|
||||
self.app.log.debug('ToolSolderPaste.on_view_gcode() -->%s' % str(e))
|
||||
self.app.inform.emit('[ERROR] %s --> %s' % ('ToolSolderPaste.on_view_gcode()', str(e)))
|
||||
@@ -1206,10 +1209,12 @@ class SolderUI:
|
||||
"is the width of the solder paste dispensed."))
|
||||
|
||||
# ### Add a new Tool ## ##
|
||||
hlay_tools = QtWidgets.QHBoxLayout()
|
||||
self.layout.addLayout(hlay_tools)
|
||||
grid0 = QtWidgets.QGridLayout()
|
||||
grid0.setColumnStretch(0, 0)
|
||||
grid0.setColumnStretch(1, 1)
|
||||
self.layout.addLayout(grid0)
|
||||
|
||||
self.addtool_entry_lbl = QtWidgets.QLabel('<b>%s:</b>' % _('New Nozzle Tool'))
|
||||
self.addtool_entry_lbl = QtWidgets.QLabel('<b>%s:</b>' % _('New Tool'))
|
||||
self.addtool_entry_lbl.setToolTip(
|
||||
_("Diameter for the new tool to add in the Tool Table")
|
||||
)
|
||||
@@ -1218,59 +1223,44 @@ class SolderUI:
|
||||
self.addtool_entry.set_precision(self.decimals)
|
||||
self.addtool_entry.setSingleStep(0.1)
|
||||
|
||||
# hlay.addWidget(self.addtool_label)
|
||||
# hlay.addStretch()
|
||||
hlay_tools.addWidget(self.addtool_entry_lbl)
|
||||
hlay_tools.addWidget(self.addtool_entry)
|
||||
|
||||
grid0 = QtWidgets.QGridLayout()
|
||||
self.layout.addLayout(grid0)
|
||||
|
||||
self.addtool_btn = QtWidgets.QPushButton(_('Add'))
|
||||
self.addtool_btn = QtWidgets.QToolButton()
|
||||
self.addtool_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/plus16.png'))
|
||||
self.addtool_btn.setToolTip(
|
||||
_("Add a new nozzle tool to the Tool Table\n"
|
||||
"with the diameter specified above.")
|
||||
)
|
||||
|
||||
self.deltool_btn = QtWidgets.QPushButton(_('Delete'))
|
||||
self.deltool_btn = QtWidgets.QToolButton()
|
||||
self.deltool_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/trash16.png'))
|
||||
self.deltool_btn.setToolTip(
|
||||
_("Delete a selection of tools in the Tool Table\n"
|
||||
"by first selecting a row in the Tool Table.")
|
||||
)
|
||||
|
||||
grid0.addWidget(self.addtool_btn, 0, 0)
|
||||
grid0.addWidget(self.deltool_btn, 0, 2)
|
||||
grid0.addWidget(self.addtool_entry_lbl, 0, 0)
|
||||
grid0.addWidget(self.addtool_entry, 0, 1)
|
||||
grid0.addWidget(self.addtool_btn, 0, 2)
|
||||
grid0.addWidget(self.deltool_btn, 0, 3)
|
||||
|
||||
separator_line = QtWidgets.QFrame()
|
||||
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
grid0.addWidget(separator_line, 1, 0, 1, 3)
|
||||
|
||||
# ## Buttons
|
||||
grid0_1 = QtWidgets.QGridLayout()
|
||||
self.layout.addLayout(grid0_1)
|
||||
|
||||
step1_lbl = QtWidgets.QLabel("<b>%s:</b>" % _('STEP 1'))
|
||||
step1_lbl.setToolTip(
|
||||
_("First step is to select a number of nozzle tools for usage\n"
|
||||
"and then optionally modify the GCode parameters below.")
|
||||
)
|
||||
step1_description_lbl = QtWidgets.QLabel(_("Select tools.\n"
|
||||
"Modify parameters."))
|
||||
|
||||
grid0_1.addWidget(step1_lbl, 0, 0, alignment=Qt.AlignTop)
|
||||
grid0_1.addWidget(step1_description_lbl, 0, 2, alignment=Qt.AlignBottom)
|
||||
grid0.addWidget(separator_line, 2, 0, 1, 4)
|
||||
|
||||
self.gcode_frame = QtWidgets.QFrame()
|
||||
self.gcode_frame.setContentsMargins(0, 0, 0, 0)
|
||||
self.layout.addWidget(self.gcode_frame)
|
||||
self.gcode_box = QtWidgets.QVBoxLayout()
|
||||
self.gcode_box.setContentsMargins(0, 0, 0, 0)
|
||||
self.gcode_frame.setLayout(self.gcode_box)
|
||||
|
||||
# ## Form Layout
|
||||
self.gcode_form_layout = QtWidgets.QFormLayout()
|
||||
self.gcode_box.addLayout(self.gcode_form_layout)
|
||||
self.tool_box = QtWidgets.QVBoxLayout()
|
||||
self.tool_box.setContentsMargins(0, 0, 0, 0)
|
||||
self.gcode_frame.setLayout(self.tool_box)
|
||||
|
||||
# Parameter Layout
|
||||
self.param_grid = QtWidgets.QGridLayout()
|
||||
self.tool_box.addLayout(self.param_grid)
|
||||
|
||||
step1_lbl = QtWidgets.QLabel("<b>%s:</b>" % _('Parameters'))
|
||||
self.param_grid.addWidget(step1_lbl, 0, 0)
|
||||
|
||||
# Z dispense start
|
||||
self.z_start_entry = FCDoubleSpinner(callback=self.confirmation_message)
|
||||
@@ -1282,7 +1272,8 @@ class SolderUI:
|
||||
self.z_start_label.setToolTip(
|
||||
_("The height (Z) when solder paste dispensing starts.")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.z_start_label, self.z_start_entry)
|
||||
self.param_grid.addWidget(self.z_start_label, 2, 0)
|
||||
self.param_grid.addWidget(self.z_start_entry, 2, 1)
|
||||
|
||||
# Z dispense
|
||||
self.z_dispense_entry = FCDoubleSpinner(callback=self.confirmation_message)
|
||||
@@ -1294,7 +1285,8 @@ class SolderUI:
|
||||
self.z_dispense_label.setToolTip(
|
||||
_("The height (Z) when doing solder paste dispensing.")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.z_dispense_label, self.z_dispense_entry)
|
||||
self.param_grid.addWidget(self.z_dispense_label, 4, 0)
|
||||
self.param_grid.addWidget(self.z_dispense_entry, 4, 1)
|
||||
|
||||
# Z dispense stop
|
||||
self.z_stop_entry = FCDoubleSpinner(callback=self.confirmation_message)
|
||||
@@ -1306,7 +1298,13 @@ class SolderUI:
|
||||
self.z_stop_label.setToolTip(
|
||||
_("The height (Z) when solder paste dispensing stops.")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.z_stop_label, self.z_stop_entry)
|
||||
self.param_grid.addWidget(self.z_stop_label, 6, 0)
|
||||
self.param_grid.addWidget(self.z_stop_entry, 6, 1)
|
||||
|
||||
separator_line = QtWidgets.QFrame()
|
||||
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
self.param_grid.addWidget(separator_line, 7, 0, 1, 2)
|
||||
|
||||
# Z travel
|
||||
self.z_travel_entry = FCDoubleSpinner(callback=self.confirmation_message)
|
||||
@@ -1314,12 +1312,13 @@ class SolderUI:
|
||||
self.z_travel_entry.set_precision(self.decimals)
|
||||
self.z_travel_entry.setSingleStep(0.1)
|
||||
|
||||
self.z_travel_label = QtWidgets.QLabel('%s:' % _("Z Travel"))
|
||||
self.z_travel_label = QtWidgets.QLabel('%s:' % _("Travel Z"))
|
||||
self.z_travel_label.setToolTip(
|
||||
_("The height (Z) for travel between pads\n"
|
||||
"(without dispensing solder paste).")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.z_travel_label, self.z_travel_entry)
|
||||
self.param_grid.addWidget(self.z_travel_label, 8, 0)
|
||||
self.param_grid.addWidget(self.z_travel_entry, 8, 1)
|
||||
|
||||
# Z toolchange location
|
||||
self.z_toolchange_entry = FCDoubleSpinner(callback=self.confirmation_message)
|
||||
@@ -1327,11 +1326,12 @@ class SolderUI:
|
||||
self.z_toolchange_entry.set_precision(self.decimals)
|
||||
self.z_toolchange_entry.setSingleStep(0.1)
|
||||
|
||||
self.z_toolchange_label = QtWidgets.QLabel('%s:' % _("Z Toolchange"))
|
||||
self.z_toolchange_label = QtWidgets.QLabel('%s:' % _("Tool change Z"))
|
||||
self.z_toolchange_label.setToolTip(
|
||||
_("The height (Z) for tool (nozzle) change.")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.z_toolchange_label, self.z_toolchange_entry)
|
||||
self.param_grid.addWidget(self.z_toolchange_label, 10, 0)
|
||||
self.param_grid.addWidget(self.z_toolchange_entry, 10, 1)
|
||||
|
||||
# X,Y Toolchange location
|
||||
self.xy_toolchange_entry = FCEntry()
|
||||
@@ -1340,7 +1340,13 @@ class SolderUI:
|
||||
_("The X,Y location for tool (nozzle) change.\n"
|
||||
"The format is (x, y) where x and y are real numbers.")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.xy_toolchange_label, self.xy_toolchange_entry)
|
||||
self.param_grid.addWidget(self.xy_toolchange_label, 12, 0)
|
||||
self.param_grid.addWidget(self.xy_toolchange_entry, 12, 1)
|
||||
|
||||
separator_line = QtWidgets.QFrame()
|
||||
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
self.param_grid.addWidget(separator_line, 13, 0, 1, 2)
|
||||
|
||||
# Feedrate X-Y
|
||||
self.frxy_entry = FCDoubleSpinner(callback=self.confirmation_message)
|
||||
@@ -1352,7 +1358,8 @@ class SolderUI:
|
||||
self.frxy_label.setToolTip(
|
||||
_("Feedrate (speed) while moving on the X-Y plane.")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.frxy_label, self.frxy_entry)
|
||||
self.param_grid.addWidget(self.frxy_label, 14, 0)
|
||||
self.param_grid.addWidget(self.frxy_entry, 14, 1)
|
||||
|
||||
# Feedrate Z
|
||||
self.frz_entry = FCDoubleSpinner(callback=self.confirmation_message)
|
||||
@@ -1365,7 +1372,8 @@ class SolderUI:
|
||||
_("Feedrate (speed) while moving vertically\n"
|
||||
"(on Z plane).")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.frz_label, self.frz_entry)
|
||||
self.param_grid.addWidget(self.frz_label, 16, 0)
|
||||
self.param_grid.addWidget(self.frz_entry, 16, 1)
|
||||
|
||||
# Feedrate Z Dispense
|
||||
self.frz_dispense_entry = FCDoubleSpinner(callback=self.confirmation_message)
|
||||
@@ -1378,7 +1386,13 @@ class SolderUI:
|
||||
_("Feedrate (speed) while moving up vertically\n"
|
||||
"to Dispense position (on Z plane).")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.frz_dispense_label, self.frz_dispense_entry)
|
||||
self.param_grid.addWidget(self.frz_dispense_label, 18, 0)
|
||||
self.param_grid.addWidget(self.frz_dispense_entry, 18, 1)
|
||||
|
||||
separator_line = QtWidgets.QFrame()
|
||||
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
self.param_grid.addWidget(separator_line, 19, 0, 1, 2)
|
||||
|
||||
# Spindle Speed Forward
|
||||
self.speedfwd_entry = FCSpinner(callback=self.confirmation_message_int)
|
||||
@@ -1390,7 +1404,8 @@ class SolderUI:
|
||||
_("The dispenser speed while pushing solder paste\n"
|
||||
"through the dispenser nozzle.")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.speedfwd_label, self.speedfwd_entry)
|
||||
self.param_grid.addWidget(self.speedfwd_label, 20, 0)
|
||||
self.param_grid.addWidget(self.speedfwd_entry, 20, 1)
|
||||
|
||||
# Dwell Forward
|
||||
self.dwellfwd_entry = FCDoubleSpinner(callback=self.confirmation_message)
|
||||
@@ -1402,7 +1417,8 @@ class SolderUI:
|
||||
self.dwellfwd_label.setToolTip(
|
||||
_("Pause after solder dispensing.")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.dwellfwd_label, self.dwellfwd_entry)
|
||||
self.param_grid.addWidget(self.dwellfwd_label, 22, 0)
|
||||
self.param_grid.addWidget(self.dwellfwd_entry, 22, 1)
|
||||
|
||||
# Spindle Speed Reverse
|
||||
self.speedrev_entry = FCSpinner(callback=self.confirmation_message_int)
|
||||
@@ -1414,7 +1430,8 @@ class SolderUI:
|
||||
_("The dispenser speed while retracting solder paste\n"
|
||||
"through the dispenser nozzle.")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.speedrev_label, self.speedrev_entry)
|
||||
self.param_grid.addWidget(self.speedrev_label, 24, 0)
|
||||
self.param_grid.addWidget(self.speedrev_entry, 24, 1)
|
||||
|
||||
# Dwell Reverse
|
||||
self.dwellrev_entry = FCDoubleSpinner(callback=self.confirmation_message)
|
||||
@@ -1427,7 +1444,13 @@ class SolderUI:
|
||||
_("Pause after solder paste dispenser retracted,\n"
|
||||
"to allow pressure equilibrium.")
|
||||
)
|
||||
self.gcode_form_layout.addRow(self.dwellrev_label, self.dwellrev_entry)
|
||||
self.param_grid.addWidget(self.dwellrev_label, 26, 0)
|
||||
self.param_grid.addWidget(self.dwellrev_entry, 26, 1)
|
||||
|
||||
separator_line = QtWidgets.QFrame()
|
||||
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
self.param_grid.addWidget(separator_line, 27, 0, 1, 2)
|
||||
|
||||
# Preprocessors
|
||||
pp_label = QtWidgets.QLabel('%s:' % _('Preprocessor'))
|
||||
@@ -1436,14 +1459,59 @@ class SolderUI:
|
||||
)
|
||||
|
||||
self.pp_combo = FCComboBox()
|
||||
# self.pp_combo.setStyleSheet('background-color: rgb(255,255,255)')
|
||||
self.gcode_form_layout.addRow(pp_label, self.pp_combo)
|
||||
self.param_grid.addWidget(pp_label, 28, 0)
|
||||
self.param_grid.addWidget(self.pp_combo, 28, 1)
|
||||
|
||||
separator_line = QtWidgets.QFrame()
|
||||
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
self.param_grid.addWidget(separator_line, 30, 0, 1, 2)
|
||||
|
||||
# Buttons Grid
|
||||
self.button_grid = QtWidgets.QGridLayout()
|
||||
self.button_grid.setColumnStretch(0, 0)
|
||||
self.button_grid.setColumnStretch(1, 1)
|
||||
self.tool_box.addLayout(self.button_grid)
|
||||
|
||||
# Generate Geometry
|
||||
self.soldergeo_btn = FCButton(_("Generate Geometry"))
|
||||
self.soldergeo_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/geometry32.png'))
|
||||
|
||||
self.soldergeo_btn.setToolTip(
|
||||
_("Generate solder paste dispensing geometry.")
|
||||
)
|
||||
self.soldergeo_btn.setStyleSheet("""
|
||||
QPushButton
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
""")
|
||||
self.button_grid.addWidget(self.soldergeo_btn, 0, 0, 1, 2)
|
||||
|
||||
# Geometry Object to be used for Solderpaste dispensing
|
||||
self.geo_obj_combo = FCComboBox(callback=solder_class.on_rmb_combo)
|
||||
self.geo_obj_combo.setModel(self.app.collection)
|
||||
self.geo_obj_combo.setRootModelIndex(self.app.collection.index(2, 0, QtCore.QModelIndex()))
|
||||
self.geo_obj_combo.is_last = True
|
||||
self.geo_obj_combo.obj_type = "Geometry"
|
||||
|
||||
self.geo_object_label = QtWidgets.QLabel('%s:' % _("Geometry"))
|
||||
self.geo_object_label.setToolTip(
|
||||
_("Geometry Solder Paste object.\n"
|
||||
"The name of the object has to end in:\n"
|
||||
"'_solderpaste' as a protection.")
|
||||
)
|
||||
self.button_grid.addWidget(self.geo_object_label, 2, 0)
|
||||
self.button_grid.addWidget(self.geo_obj_combo, 2, 1)
|
||||
|
||||
separator_line = QtWidgets.QFrame()
|
||||
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
self.button_grid.addWidget(separator_line, 4, 0, 1, 2)
|
||||
|
||||
# ## Buttons
|
||||
# grid1 = QtWidgets.QGridLayout()
|
||||
# self.gcode_box.addLayout(grid1)
|
||||
|
||||
self.solder_gcode_btn = QtWidgets.QPushButton(_("Generate GCode"))
|
||||
self.solder_gcode_btn = FCButton(_("Generate CNCJob object"))
|
||||
self.solder_gcode_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/cnc16.png'))
|
||||
self.solder_gcode_btn.setToolTip(
|
||||
_("Generate GCode for Solder Paste dispensing\n"
|
||||
"on PCB pads.")
|
||||
@@ -1454,108 +1522,34 @@ class SolderUI:
|
||||
font-weight: bold;
|
||||
}
|
||||
""")
|
||||
self.button_grid.addWidget(self.solder_gcode_btn, 6, 0, 1, 2)
|
||||
|
||||
self.generation_frame = QtWidgets.QFrame()
|
||||
self.generation_frame.setContentsMargins(0, 0, 0, 0)
|
||||
self.layout.addWidget(self.generation_frame)
|
||||
self.generation_box = QtWidgets.QVBoxLayout()
|
||||
self.generation_box.setContentsMargins(0, 0, 0, 0)
|
||||
self.generation_frame.setLayout(self.generation_box)
|
||||
|
||||
# ## Buttons
|
||||
grid2 = QtWidgets.QGridLayout()
|
||||
self.generation_box.addLayout(grid2)
|
||||
|
||||
step2_lbl = QtWidgets.QLabel("<b>%s:</b>" % _('STEP 2'))
|
||||
step2_lbl.setToolTip(
|
||||
_("Second step is to create a solder paste dispensing\n"
|
||||
"geometry out of an Solder Paste Mask Gerber file.")
|
||||
)
|
||||
|
||||
self.soldergeo_btn = QtWidgets.QPushButton(_("Generate Geo"))
|
||||
self.soldergeo_btn.setToolTip(
|
||||
_("Generate solder paste dispensing geometry.")
|
||||
)
|
||||
self.soldergeo_btn.setStyleSheet("""
|
||||
QPushButton
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
""")
|
||||
|
||||
grid2.addWidget(step2_lbl, 0, 0)
|
||||
grid2.addWidget(self.soldergeo_btn, 0, 2)
|
||||
|
||||
# ## Form Layout
|
||||
geo_form_layout = QtWidgets.QFormLayout()
|
||||
self.generation_box.addLayout(geo_form_layout)
|
||||
|
||||
# ## Geometry Object to be used for solderpaste dispensing
|
||||
self.geo_obj_combo = FCComboBox(callback=solder_class.on_rmb_combo)
|
||||
self.geo_obj_combo.setModel(self.app.collection)
|
||||
self.geo_obj_combo.setRootModelIndex(self.app.collection.index(2, 0, QtCore.QModelIndex()))
|
||||
self.geo_obj_combo.is_last = True
|
||||
self.geo_obj_combo.obj_type = "Geometry"
|
||||
|
||||
self.geo_object_label = QtWidgets.QLabel('%s:' % _("Geo Result"))
|
||||
self.geo_object_label.setToolTip(
|
||||
_("Geometry Solder Paste object.\n"
|
||||
"The name of the object has to end in:\n"
|
||||
"'_solderpaste' as a protection.")
|
||||
)
|
||||
geo_form_layout.addRow(self.geo_object_label, self.geo_obj_combo)
|
||||
|
||||
grid3 = QtWidgets.QGridLayout()
|
||||
self.generation_box.addLayout(grid3)
|
||||
|
||||
step3_lbl = QtWidgets.QLabel("<b>%s:</b>" % _('STEP 3'))
|
||||
step3_lbl.setToolTip(
|
||||
_("Third step is to select a solder paste dispensing geometry,\n"
|
||||
"and then generate a CNCJob object.\n\n"
|
||||
"REMEMBER: if you want to create a CNCJob with new parameters,\n"
|
||||
"first you need to generate a geometry with those new params,\n"
|
||||
"and only after that you can generate an updated CNCJob.")
|
||||
)
|
||||
|
||||
grid3.addWidget(step3_lbl, 0, 0)
|
||||
grid3.addWidget(self.solder_gcode_btn, 0, 2)
|
||||
|
||||
# ## Form Layout
|
||||
cnc_form_layout = QtWidgets.QFormLayout()
|
||||
self.generation_box.addLayout(cnc_form_layout)
|
||||
|
||||
# ## Gerber Object to be used for solderpaste dispensing
|
||||
# Gerber Object to be used for solderpaste dispensing
|
||||
self.cnc_obj_combo = FCComboBox(callback=solder_class.on_rmb_combo)
|
||||
self.cnc_obj_combo.setModel(self.app.collection)
|
||||
self.cnc_obj_combo.setRootModelIndex(self.app.collection.index(3, 0, QtCore.QModelIndex()))
|
||||
self.cnc_obj_combo.is_last = True
|
||||
self.geo_obj_combo.obj_type = "CNCJob"
|
||||
|
||||
self.cnc_object_label = QtWidgets.QLabel('%s:' % _("CNC Result"))
|
||||
self.cnc_object_label = QtWidgets.QLabel('%s:' % _("CNCJob"))
|
||||
self.cnc_object_label.setToolTip(
|
||||
_("CNCJob Solder paste object.\n"
|
||||
"In order to enable the GCode save section,\n"
|
||||
"the name of the object has to end in:\n"
|
||||
"'_solderpaste' as a protection.")
|
||||
)
|
||||
cnc_form_layout.addRow(self.cnc_object_label, self.cnc_obj_combo)
|
||||
self.button_grid.addWidget(self.cnc_object_label, 8, 0)
|
||||
self.button_grid.addWidget(self.cnc_obj_combo, 8, 1)
|
||||
|
||||
grid4 = QtWidgets.QGridLayout()
|
||||
self.generation_box.addLayout(grid4)
|
||||
separator_line = QtWidgets.QFrame()
|
||||
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
self.button_grid.addWidget(separator_line, 10, 0, 1, 2)
|
||||
|
||||
self.solder_gcode_view_btn = QtWidgets.QPushButton(_("View GCode"))
|
||||
self.solder_gcode_view_btn.setToolTip(
|
||||
_("View the generated GCode for Solder Paste dispensing\n"
|
||||
"on PCB pads.")
|
||||
)
|
||||
self.solder_gcode_view_btn.setStyleSheet("""
|
||||
QPushButton
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
""")
|
||||
|
||||
self.solder_gcode_save_btn = QtWidgets.QPushButton(_("Save GCode"))
|
||||
# Save and Review GCode
|
||||
buttons_hlay = QtWidgets.QHBoxLayout()
|
||||
self.solder_gcode_save_btn = FCButton(_("Save GCode"))
|
||||
self.solder_gcode_save_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/save_as.png'))
|
||||
self.solder_gcode_save_btn.setToolTip(
|
||||
_("Save the generated GCode for Solder Paste dispensing\n"
|
||||
"on PCB pads, to a file.")
|
||||
@@ -1567,20 +1561,18 @@ class SolderUI:
|
||||
}
|
||||
""")
|
||||
|
||||
step4_lbl = QtWidgets.QLabel("<b>%s:</b>" % _('STEP 4'))
|
||||
step4_lbl.setToolTip(
|
||||
_("Fourth step (and last) is to select a CNCJob made from \n"
|
||||
"a solder paste dispensing geometry, and then view/save it's GCode.")
|
||||
)
|
||||
self.solder_gcode_view_btn = QtWidgets.QToolButton()
|
||||
self.solder_gcode_view_btn.setToolTip(_("Review CNC Code."))
|
||||
self.solder_gcode_view_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/find32.png'))
|
||||
|
||||
grid4.addWidget(step4_lbl, 0, 0)
|
||||
grid4.addWidget(self.solder_gcode_view_btn, 0, 2)
|
||||
grid4.addWidget(self.solder_gcode_save_btn, 1, 0, 1, 3)
|
||||
buttons_hlay.addWidget(self.solder_gcode_save_btn)
|
||||
buttons_hlay.addWidget(self.solder_gcode_view_btn)
|
||||
self.button_grid.addLayout(buttons_hlay, 12, 0, 1, 2)
|
||||
|
||||
self.layout.addStretch()
|
||||
self.layout.addStretch(1)
|
||||
|
||||
# ## Reset Tool
|
||||
self.reset_button = QtWidgets.QPushButton(_("Reset Tool"))
|
||||
self.reset_button = FCButton(_("Reset Tool"))
|
||||
self.reset_button.setIcon(QtGui.QIcon(self.app.resource_location + '/reset32.png'))
|
||||
self.reset_button.setToolTip(
|
||||
_("Will reset the tool parameters.")
|
||||
|
||||
Reference in New Issue
Block a user