- Calibrate Tool - working on it
This commit is contained in:
parent
ee1665fe6a
commit
3201359c8a
|
@ -4354,7 +4354,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
|
|||
if row is None:
|
||||
try:
|
||||
current_row = self.ui.geo_tools_table.currentRow()
|
||||
except Exception as e:
|
||||
except Exception:
|
||||
current_row = 0
|
||||
else:
|
||||
current_row = row
|
||||
|
@ -4375,6 +4375,11 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
|
|||
log.debug("Tool missing. Add a tool in Geo Tool Table. %s" % str(e))
|
||||
return
|
||||
|
||||
# update the QLabel that shows for which Tool we have the parameters in the UI form
|
||||
self.ui.tool_data_label.setText(
|
||||
"<b>%s: <font color='#0000FF'>%s %d</font></b>" % (_('Parameters for'), _("Tool"), tooluid)
|
||||
)
|
||||
|
||||
# update the form with the V-Shape fields if V-Shape selected in the geo_tool_table
|
||||
# also modify the Cut Z form entry to reflect the calculated Cut Z from values got from V-Shape Fields
|
||||
try:
|
||||
|
@ -5382,8 +5387,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
|
|||
# variables to display the percentage of work done
|
||||
self.geo_len = 0
|
||||
try:
|
||||
for g in self.solid_geometry:
|
||||
self.geo_len += 1
|
||||
self.geo_len = len(self.solid_geometry)
|
||||
except TypeError:
|
||||
self.geo_len = 1
|
||||
self.old_disp_number = 0
|
||||
|
@ -5395,7 +5399,8 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
|
|||
return
|
||||
|
||||
self.app.proc_container.new_text = ''
|
||||
self.app.inform.emit('[success] %s' % _("Geometry Scale done."))
|
||||
if xfactor != 1 and yfactor != 1:
|
||||
self.app.inform.emit('[success] %s' % _("Geometry Scale done."))
|
||||
|
||||
def offset(self, vect):
|
||||
"""
|
||||
|
|
|
@ -9,6 +9,11 @@ CAD program, and create G-Code for Isolation routing.
|
|||
|
||||
=================================================
|
||||
|
||||
8.12.2019
|
||||
|
||||
- Calibrate Tool - rearranged the GUI
|
||||
- in Geometry UI made sure that the Label that points to the Tool parameters show clearly that those parameters apply only for the selected tool
|
||||
|
||||
7.12.2019
|
||||
|
||||
- renamed Calibrate Excellon Tool to a simpler Calibrate Tool
|
||||
|
|
|
@ -1193,6 +1193,17 @@ class FCButton(QtWidgets.QPushButton):
|
|||
self.setText(str(val))
|
||||
|
||||
|
||||
class FCLabel(QtWidgets.QLabel):
|
||||
def __init__(self, parent=None):
|
||||
super(FCLabel, self).__init__(parent)
|
||||
|
||||
def get_value(self):
|
||||
return self.text()
|
||||
|
||||
def set_value(self, val):
|
||||
self.setText(str(val))
|
||||
|
||||
|
||||
class FCMenu(QtWidgets.QMenu):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
|
|
@ -1267,7 +1267,8 @@ class GeometryObjectUI(ObjectUI):
|
|||
# Create CNC Job ###
|
||||
# ##################
|
||||
# ### Tools Data ## ##
|
||||
self.tool_data_label = QtWidgets.QLabel('<b>%s</b>' % _('Tool Data'))
|
||||
self.tool_data_label = QtWidgets.QLabel(
|
||||
"<b>%s: <font color='#0000FF'>%s %d</font></b>" % (_('Parameters for'), _("Tool"), int(1)))
|
||||
self.tool_data_label.setToolTip(
|
||||
_(
|
||||
"The data used for creating GCode.\n"
|
||||
|
@ -1592,7 +1593,7 @@ class GeometryObjectUI(ObjectUI):
|
|||
self.grid3.addWidget(warning_lbl, 19, 0, 1, 2)
|
||||
|
||||
# Button
|
||||
self.generate_cnc_button = QtWidgets.QPushButton(_('Generate'))
|
||||
self.generate_cnc_button = QtWidgets.QPushButton(_('Generate CNCJob object'))
|
||||
self.generate_cnc_button.setToolTip(
|
||||
_("Generate the CNC Job object.")
|
||||
)
|
||||
|
|
|
@ -8,7 +8,8 @@
|
|||
from PyQt5 import QtWidgets, QtCore, QtGui
|
||||
|
||||
from FlatCAMTool import FlatCAMTool
|
||||
from flatcamGUI.GUIElements import FCDoubleSpinner, EvalEntry, FCCheckBox, OptionalInputSection, FCTable, FCComboBox
|
||||
from flatcamGUI.GUIElements import FCDoubleSpinner, EvalEntry, FCCheckBox, OptionalInputSection
|
||||
from flatcamGUI.GUIElements import FCTable, FCComboBox, RadioSet
|
||||
from flatcamEditors.FlatCAMTextEditor import TextEditor
|
||||
|
||||
from shapely.geometry import Point
|
||||
|
@ -52,116 +53,69 @@ class ToolCalibrate(FlatCAMTool):
|
|||
""")
|
||||
self.layout.addWidget(title_label)
|
||||
|
||||
# ## Grid Layout
|
||||
i_grid_lay = QtWidgets.QGridLayout()
|
||||
self.layout.addLayout(i_grid_lay)
|
||||
i_grid_lay.setColumnStretch(0, 0)
|
||||
i_grid_lay.setColumnStretch(1, 1)
|
||||
i_grid_lay.setColumnStretch(2, 1)
|
||||
|
||||
self.obj_type_label = QtWidgets.QLabel("<b>%s:</b>" % _("Object Type"))
|
||||
|
||||
self.obj_type_combo = FCComboBox()
|
||||
self.obj_type_combo.addItem(_("Gerber"))
|
||||
self.obj_type_combo.addItem(_("Excellon"))
|
||||
self.obj_type_combo.setCurrentIndex(1)
|
||||
|
||||
i_grid_lay.addWidget(self.obj_type_label, 0, 0)
|
||||
i_grid_lay.addWidget(self.obj_type_combo, 0, 1, 1,2)
|
||||
|
||||
self.object_combo = FCComboBox()
|
||||
self.object_combo.setModel(self.app.collection)
|
||||
self.object_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex()))
|
||||
self.object_combo.setCurrentIndex(1)
|
||||
|
||||
self.excobj_label = QtWidgets.QLabel("<b>%s:</b>" % _("Target Object"))
|
||||
self.excobj_label.setToolTip(
|
||||
_("FlatCAM Object to be used as a source for reference points.")
|
||||
)
|
||||
|
||||
i_grid_lay.addWidget(self.excobj_label, 1, 0, 1, 3)
|
||||
i_grid_lay.addWidget(self.object_combo, 2, 0, 1, 3)
|
||||
i_grid_lay.addWidget(QtWidgets.QLabel(''), 3, 0)
|
||||
|
||||
self.gcode_title_label = QtWidgets.QLabel('<b>%s</b>' % _('GCode Parameters'))
|
||||
self.gcode_title_label.setToolTip(
|
||||
_("Parameters used when creating the GCode in this tool.")
|
||||
)
|
||||
i_grid_lay.addWidget(self.gcode_title_label, 4, 0, 1, 3)
|
||||
|
||||
# Travel Z entry
|
||||
travelz_lbl = QtWidgets.QLabel('%s:' % _("Travel Z"))
|
||||
travelz_lbl.setToolTip(
|
||||
_("Height (Z) for travelling between the points.")
|
||||
)
|
||||
|
||||
self.travelz_entry = FCDoubleSpinner()
|
||||
self.travelz_entry.set_range(-9999.9999, 9999.9999)
|
||||
self.travelz_entry.set_precision(self.decimals)
|
||||
self.travelz_entry.setSingleStep(0.1)
|
||||
|
||||
i_grid_lay.addWidget(travelz_lbl, 5, 0)
|
||||
i_grid_lay.addWidget(self.travelz_entry, 5, 1, 1, 2)
|
||||
|
||||
# Verification Z entry
|
||||
verz_lbl = QtWidgets.QLabel('%s:' % _("Verification Z"))
|
||||
verz_lbl.setToolTip(
|
||||
_("Height (Z) for checking the point.")
|
||||
)
|
||||
|
||||
self.verz_entry = FCDoubleSpinner()
|
||||
self.verz_entry.set_range(-9999.9999, 9999.9999)
|
||||
self.verz_entry.set_precision(self.decimals)
|
||||
self.verz_entry.setSingleStep(0.1)
|
||||
|
||||
i_grid_lay.addWidget(verz_lbl, 6, 0)
|
||||
i_grid_lay.addWidget(self.verz_entry, 6, 1, 1, 2)
|
||||
|
||||
# Zero the Z of the verification tool
|
||||
self.zeroz_cb = FCCheckBox('%s' % _("Zero Z tool"))
|
||||
self.zeroz_cb.setToolTip(
|
||||
_("Include a sequence to zero the height (Z)\n"
|
||||
"of the verification tool.")
|
||||
)
|
||||
|
||||
i_grid_lay.addWidget(self.zeroz_cb, 7, 0, 1, 3)
|
||||
|
||||
# Toochange Z entry
|
||||
toolchangez_lbl = QtWidgets.QLabel('%s:' % _("Toolchange Z"))
|
||||
toolchangez_lbl.setToolTip(
|
||||
_("Height (Z) for mounting the verification probe.")
|
||||
)
|
||||
|
||||
self.toolchangez_entry = FCDoubleSpinner()
|
||||
self.toolchangez_entry.set_range(0.0000, 9999.9999)
|
||||
self.toolchangez_entry.set_precision(self.decimals)
|
||||
self.toolchangez_entry.setSingleStep(0.1)
|
||||
|
||||
i_grid_lay.addWidget(toolchangez_lbl, 8, 0)
|
||||
i_grid_lay.addWidget(self.toolchangez_entry, 8, 1, 1, 2)
|
||||
|
||||
self.z_ois = OptionalInputSection(self.zeroz_cb, [toolchangez_lbl, self.toolchangez_entry])
|
||||
|
||||
i_grid_lay.addWidget(QtWidgets.QLabel(''), 9, 0, 1, 3)
|
||||
self.layout.addWidget(QtWidgets.QLabel(''))
|
||||
|
||||
# ## Grid Layout
|
||||
grid_lay = QtWidgets.QGridLayout()
|
||||
self.layout.addLayout(grid_lay)
|
||||
grid_lay.setColumnStretch(0, 0)
|
||||
grid_lay.setColumnStretch(1, 1)
|
||||
grid_lay.setColumnStretch(2, 1)
|
||||
grid_lay.setColumnStretch(2, 0)
|
||||
|
||||
step_1 = QtWidgets.QLabel('<b>%s</b>' % _("STEP 1: Acquire Calibration Points"))
|
||||
step_1.setToolTip(
|
||||
_("Pick four points by clicking inside the drill holes.\n"
|
||||
"Those four points should be in the four\n"
|
||||
"(as much as possible) corners of the Excellon object.")
|
||||
)
|
||||
grid_lay.addWidget(step_1, 0, 0, 1, 3)
|
||||
|
||||
self.cal_source_lbl = QtWidgets.QLabel("<b>%s:</b>" % _("Source Type"))
|
||||
self.cal_source_lbl.setToolTip(_("The source of calibration points.\n"
|
||||
"It can be:\n"
|
||||
"- Object -> click a hole geo for Excellon or a pad for Gerber\n"
|
||||
"- Free -> click freely on canvas to acquire the calibration points"))
|
||||
self.cal_source_radio = RadioSet([{'label': _('Object'), 'value': 'object'},
|
||||
{'label': _('Free'), 'value': 'free'}],
|
||||
stretch=False)
|
||||
|
||||
grid_lay.addWidget(self.cal_source_lbl, 1, 0)
|
||||
grid_lay.addWidget(self.cal_source_radio, 1, 1, 1, 2)
|
||||
|
||||
self.obj_type_label = QtWidgets.QLabel("%s:" % _("Object Type"))
|
||||
|
||||
self.obj_type_combo = FCComboBox()
|
||||
self.obj_type_combo.addItem(_("Gerber"))
|
||||
self.obj_type_combo.addItem(_("Excellon"))
|
||||
self.obj_type_combo.setCurrentIndex(1)
|
||||
|
||||
grid_lay.addWidget(self.obj_type_label, 2, 0)
|
||||
grid_lay.addWidget(self.obj_type_combo, 2, 1, 1, 2)
|
||||
|
||||
self.object_combo = FCComboBox()
|
||||
self.object_combo.setModel(self.app.collection)
|
||||
self.object_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex()))
|
||||
self.object_combo.setCurrentIndex(1)
|
||||
|
||||
self.object_label = QtWidgets.QLabel("%s:" % _("Source object selection"))
|
||||
self.object_label.setToolTip(
|
||||
_("FlatCAM Object to be used as a source for reference points.")
|
||||
)
|
||||
|
||||
grid_lay.addWidget(self.object_label, 3, 0, 1, 3)
|
||||
grid_lay.addWidget(self.object_combo, 4, 0, 1, 3)
|
||||
|
||||
self.points_table_label = QtWidgets.QLabel('<b>%s</b>' % _('Calibration Points'))
|
||||
self.points_table_label.setToolTip(
|
||||
_("Contain the expected calibration points and the\n"
|
||||
"ones measured.")
|
||||
)
|
||||
grid_lay.addWidget(self.points_table_label, 1, 0, 1, 3)
|
||||
grid_lay.addWidget(self.points_table_label, 5, 0, 1, 3)
|
||||
|
||||
self.points_table = FCTable()
|
||||
self.points_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
|
||||
# self.points_table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
|
||||
grid_lay.addWidget(self.points_table, 2, 0, 9, 3)
|
||||
grid_lay.addWidget(self.points_table, 6, 0, 1, 3)
|
||||
|
||||
self.points_table.setColumnCount(4)
|
||||
self.points_table.setHorizontalHeaderLabels(
|
||||
|
@ -299,18 +253,11 @@ class ToolCalibrate(FlatCAMTool):
|
|||
self.points_table.setMinimumHeight(self.points_table.getHeight() + 2)
|
||||
self.points_table.setMaximumHeight(self.points_table.getHeight() + 3)
|
||||
|
||||
step_1 = QtWidgets.QLabel('<b>%s</b>' % _("STEP 1"))
|
||||
step_1.setToolTip(
|
||||
_("Pick four points by clicking inside the drill holes.\n"
|
||||
"Those four points should be in the four\n"
|
||||
"(as much as possible) corners of the Excellon object.")
|
||||
)
|
||||
grid_lay.addWidget(step_1, 15, 0, 1, 3)
|
||||
|
||||
# ## Start Button
|
||||
self.start_button = QtWidgets.QPushButton(_("Acquire Calibration Points"))
|
||||
# ## Get Points Button
|
||||
self.start_button = QtWidgets.QPushButton(_("Get Points"))
|
||||
self.start_button.setToolTip(
|
||||
_("Pick four points by clicking inside the drill holes.\n"
|
||||
_("Pick four points by clicking on canvas if the source choice\n"
|
||||
"is 'free' or inside the object geometry if the source is 'object'.\n"
|
||||
"Those four points should be in the four squares of\n"
|
||||
"the object.")
|
||||
)
|
||||
|
@ -320,15 +267,81 @@ class ToolCalibrate(FlatCAMTool):
|
|||
font-weight: bold;
|
||||
}
|
||||
""")
|
||||
grid_lay.addWidget(self.start_button, 16, 0, 1, 3)
|
||||
grid_lay.addWidget(self.start_button, 7, 0, 1, 3)
|
||||
|
||||
separator_line = QtWidgets.QFrame()
|
||||
separator_line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
grid_lay.addWidget(separator_line, 8, 0, 1, 3)
|
||||
|
||||
grid_lay.addWidget(QtWidgets.QLabel(''), 9, 0)
|
||||
|
||||
# STEP 2 #
|
||||
step_2 = QtWidgets.QLabel('<b>%s</b>' % _("STEP 2"))
|
||||
step_2 = QtWidgets.QLabel('<b>%s</b>' % _("STEP 2: Verification GCode"))
|
||||
step_2.setToolTip(
|
||||
_("Generate GCode file to locate and align the PCB by using\n"
|
||||
"the four points acquired above.")
|
||||
)
|
||||
grid_lay.addWidget(step_2, 17, 0, 1, 3)
|
||||
grid_lay.addWidget(step_2, 10, 0, 1, 3)
|
||||
|
||||
self.gcode_title_label = QtWidgets.QLabel('<b>%s</b>' % _('GCode Parameters'))
|
||||
self.gcode_title_label.setToolTip(
|
||||
_("Parameters used when creating the GCode in this tool.")
|
||||
)
|
||||
grid_lay.addWidget(self.gcode_title_label, 11, 0, 1, 3)
|
||||
|
||||
# Travel Z entry
|
||||
travelz_lbl = QtWidgets.QLabel('%s:' % _("Travel Z"))
|
||||
travelz_lbl.setToolTip(
|
||||
_("Height (Z) for travelling between the points.")
|
||||
)
|
||||
|
||||
self.travelz_entry = FCDoubleSpinner()
|
||||
self.travelz_entry.set_range(-9999.9999, 9999.9999)
|
||||
self.travelz_entry.set_precision(self.decimals)
|
||||
self.travelz_entry.setSingleStep(0.1)
|
||||
|
||||
grid_lay.addWidget(travelz_lbl, 12, 0)
|
||||
grid_lay.addWidget(self.travelz_entry, 12, 1, 1, 2)
|
||||
|
||||
# Verification Z entry
|
||||
verz_lbl = QtWidgets.QLabel('%s:' % _("Verification Z"))
|
||||
verz_lbl.setToolTip(
|
||||
_("Height (Z) for checking the point.")
|
||||
)
|
||||
|
||||
self.verz_entry = FCDoubleSpinner()
|
||||
self.verz_entry.set_range(-9999.9999, 9999.9999)
|
||||
self.verz_entry.set_precision(self.decimals)
|
||||
self.verz_entry.setSingleStep(0.1)
|
||||
|
||||
grid_lay.addWidget(verz_lbl, 13, 0)
|
||||
grid_lay.addWidget(self.verz_entry, 13, 1, 1, 2)
|
||||
|
||||
# Zero the Z of the verification tool
|
||||
self.zeroz_cb = FCCheckBox('%s' % _("Zero Z tool"))
|
||||
self.zeroz_cb.setToolTip(
|
||||
_("Include a sequence to zero the height (Z)\n"
|
||||
"of the verification tool.")
|
||||
)
|
||||
|
||||
grid_lay.addWidget(self.zeroz_cb, 14, 0, 1, 3)
|
||||
|
||||
# Toochange Z entry
|
||||
toolchangez_lbl = QtWidgets.QLabel('%s:' % _("Toolchange Z"))
|
||||
toolchangez_lbl.setToolTip(
|
||||
_("Height (Z) for mounting the verification probe.")
|
||||
)
|
||||
|
||||
self.toolchangez_entry = FCDoubleSpinner()
|
||||
self.toolchangez_entry.set_range(0.0000, 9999.9999)
|
||||
self.toolchangez_entry.set_precision(self.decimals)
|
||||
self.toolchangez_entry.setSingleStep(0.1)
|
||||
|
||||
grid_lay.addWidget(toolchangez_lbl, 15, 0)
|
||||
grid_lay.addWidget(self.toolchangez_entry, 15, 1, 1, 2)
|
||||
|
||||
self.z_ois = OptionalInputSection(self.zeroz_cb, [toolchangez_lbl, self.toolchangez_entry])
|
||||
|
||||
# ## GCode Button
|
||||
self.gcode_button = QtWidgets.QPushButton(_("Generate GCode"))
|
||||
|
@ -342,10 +355,17 @@ class ToolCalibrate(FlatCAMTool):
|
|||
font-weight: bold;
|
||||
}
|
||||
""")
|
||||
grid_lay.addWidget(self.gcode_button, 18, 0, 1, 3)
|
||||
grid_lay.addWidget(self.gcode_button, 16, 0, 1, 3)
|
||||
|
||||
separator_line1 = QtWidgets.QFrame()
|
||||
separator_line1.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line1.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
grid_lay.addWidget(separator_line1, 17, 0, 1, 3)
|
||||
|
||||
grid_lay.addWidget(QtWidgets.QLabel(''), 18, 0, 1, 3)
|
||||
|
||||
# STEP 3 #
|
||||
step_3 = QtWidgets.QLabel('<b>%s</b>' % _("STEP 3"))
|
||||
step_3 = QtWidgets.QLabel('<b>%s</b>' % _("STEP 3: Adjustments"))
|
||||
step_3.setToolTip(
|
||||
_("Calculate Scale and Skew factors based on the differences (delta)\n"
|
||||
"found when checking the PCB pattern. The differences must be filled\n"
|
||||
|
@ -368,7 +388,7 @@ class ToolCalibrate(FlatCAMTool):
|
|||
""")
|
||||
grid_lay.addWidget(self.generate_factors_button, 20, 0, 1, 3)
|
||||
|
||||
scale_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Scale"))
|
||||
scale_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Scale Factors"))
|
||||
grid_lay.addWidget(scale_lbl, 21, 0, 1, 3)
|
||||
|
||||
self.scalex_label = QtWidgets.QLabel(_("Factor X:"))
|
||||
|
@ -395,7 +415,7 @@ class ToolCalibrate(FlatCAMTool):
|
|||
grid_lay.addWidget(self.scaley_label, 23, 0)
|
||||
grid_lay.addWidget(self.scaley_entry, 23, 1, 1, 2)
|
||||
|
||||
self.scale_button = QtWidgets.QPushButton(_("Scale"))
|
||||
self.scale_button = QtWidgets.QPushButton(_("Apply Scale Factors"))
|
||||
self.scale_button.setToolTip(
|
||||
_("Apply Scale factors on the calibration points.")
|
||||
)
|
||||
|
@ -407,7 +427,7 @@ class ToolCalibrate(FlatCAMTool):
|
|||
""")
|
||||
grid_lay.addWidget(self.scale_button, 24, 0, 1, 3)
|
||||
|
||||
skew_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Skew"))
|
||||
skew_lbl = QtWidgets.QLabel('<b>%s</b>' % _("Skew Factors"))
|
||||
grid_lay.addWidget(skew_lbl, 25, 0, 1, 3)
|
||||
|
||||
self.skewx_label = QtWidgets.QLabel(_("Angle X:"))
|
||||
|
@ -436,7 +456,7 @@ class ToolCalibrate(FlatCAMTool):
|
|||
grid_lay.addWidget(self.skewy_label, 27, 0)
|
||||
grid_lay.addWidget(self.skewy_entry, 27, 1, 1, 2)
|
||||
|
||||
self.skew_button = QtWidgets.QPushButton(_("Skew"))
|
||||
self.skew_button = QtWidgets.QPushButton(_("Apply Skew Factors"))
|
||||
self.skew_button.setToolTip(
|
||||
_("Apply Skew factors on the calibration points.")
|
||||
)
|
||||
|
@ -448,13 +468,20 @@ class ToolCalibrate(FlatCAMTool):
|
|||
""")
|
||||
grid_lay.addWidget(self.skew_button, 28, 0, 1, 3)
|
||||
|
||||
separator_line1 = QtWidgets.QFrame()
|
||||
separator_line1.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line1.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
grid_lay.addWidget(separator_line1, 29, 0, 1, 3)
|
||||
|
||||
grid_lay.addWidget(QtWidgets.QLabel(''), 30, 0, 1, 3)
|
||||
|
||||
# STEP 4 #
|
||||
step_4 = QtWidgets.QLabel('<b>%s</b>' % _("STEP 4"))
|
||||
step_4 = QtWidgets.QLabel('<b>%s</b>' % _("STEP 4: Adjusted GCode"))
|
||||
step_4.setToolTip(
|
||||
_("Generate verification GCode file adjusted with\n"
|
||||
"the factors above.")
|
||||
)
|
||||
grid_lay.addWidget(step_4, 29, 0, 1, 3)
|
||||
grid_lay.addWidget(step_4, 31, 0, 1, 3)
|
||||
|
||||
# ## Adjusted GCode Button
|
||||
self.adj_gcode_button = QtWidgets.QPushButton(_("Generate Adjusted GCode"))
|
||||
|
@ -468,44 +495,51 @@ class ToolCalibrate(FlatCAMTool):
|
|||
font-weight: bold;
|
||||
}
|
||||
""")
|
||||
grid_lay.addWidget(self.adj_gcode_button, 30, 0, 1, 3)
|
||||
grid_lay.addWidget(self.adj_gcode_button, 32, 0, 1, 3)
|
||||
|
||||
separator_line1 = QtWidgets.QFrame()
|
||||
separator_line1.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line1.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
grid_lay.addWidget(separator_line1, 33, 0, 1, 3)
|
||||
|
||||
grid_lay.addWidget(QtWidgets.QLabel(''), 34, 0, 1, 3)
|
||||
|
||||
# STEP 5 #
|
||||
step_5 = QtWidgets.QLabel('<b>%s</b>' % _("STEP 5"))
|
||||
step_5 = QtWidgets.QLabel('<b>%s</b>' % _("STEP 5: Calibrate FlatCAM Objects"))
|
||||
step_5.setToolTip(
|
||||
_("Ajust the Excellon and Cutout Geometry objects\n"
|
||||
_("Adjust the Excellon and Cutout Geometry objects\n"
|
||||
"with the factors determined, and verified, above.")
|
||||
)
|
||||
grid_lay.addWidget(step_5, 31, 0, 1, 3)
|
||||
grid_lay.addWidget(step_5, 35, 0, 1, 3)
|
||||
|
||||
self.adj_exc_object_combo = QtWidgets.QComboBox()
|
||||
self.adj_exc_object_combo.setModel(self.app.collection)
|
||||
self.adj_exc_object_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex()))
|
||||
self.adj_exc_object_combo.setCurrentIndex(1)
|
||||
|
||||
self.adj_excobj_label = QtWidgets.QLabel("<b>%s:</b>" % _("EXCELLON"))
|
||||
self.adj_excobj_label = QtWidgets.QLabel("%s:" % _("EXCELLON"))
|
||||
self.adj_excobj_label.setToolTip(
|
||||
_("Excellon Object to be adjusted.")
|
||||
)
|
||||
|
||||
grid_lay.addWidget(self.adj_excobj_label, 32, 0)
|
||||
grid_lay.addWidget(self.adj_exc_object_combo, 32, 1, 1, 2)
|
||||
grid_lay.addWidget(self.adj_excobj_label, 36, 0, 1, 3)
|
||||
grid_lay.addWidget(self.adj_exc_object_combo, 37, 0, 1, 3)
|
||||
|
||||
self.adj_geo_object_combo = QtWidgets.QComboBox()
|
||||
self.adj_geo_object_combo.setModel(self.app.collection)
|
||||
self.adj_geo_object_combo.setRootModelIndex(self.app.collection.index(2, 0, QtCore.QModelIndex()))
|
||||
self.adj_geo_object_combo.setCurrentIndex(1)
|
||||
|
||||
self.adj_geoobj_label = QtWidgets.QLabel("<b>%s:</b>" % _("GEOMETRY"))
|
||||
self.adj_geoobj_label = QtWidgets.QLabel("%s:" % _("GEOMETRY"))
|
||||
self.adj_geoobj_label.setToolTip(
|
||||
_("Geometry Object to be adjusted.")
|
||||
)
|
||||
|
||||
grid_lay.addWidget(self.adj_geoobj_label, 33, 0)
|
||||
grid_lay.addWidget(self.adj_geo_object_combo, 33, 1, 1, 2)
|
||||
grid_lay.addWidget(self.adj_geoobj_label, 38, 0, 1, 3)
|
||||
grid_lay.addWidget(self.adj_geo_object_combo, 39, 0, 1, 3)
|
||||
|
||||
# ## Adjust Objects Button
|
||||
self.adj_obj_button = QtWidgets.QPushButton(_("Adjust Objects"))
|
||||
self.adj_obj_button = QtWidgets.QPushButton(_("Calibrate"))
|
||||
self.adj_obj_button.setToolTip(
|
||||
_("Adjust (scale and/or skew) the objects\n"
|
||||
"with the factors determined above.")
|
||||
|
@ -516,9 +550,14 @@ class ToolCalibrate(FlatCAMTool):
|
|||
font-weight: bold;
|
||||
}
|
||||
""")
|
||||
grid_lay.addWidget(self.adj_obj_button, 34, 0, 1, 3)
|
||||
grid_lay.addWidget(self.adj_obj_button, 40, 0, 1, 3)
|
||||
|
||||
grid_lay.addWidget(QtWidgets.QLabel(''), 35, 0)
|
||||
separator_line2 = QtWidgets.QFrame()
|
||||
separator_line2.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
separator_line2.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
grid_lay.addWidget(separator_line2, 41, 0, 1, 3)
|
||||
|
||||
grid_lay.addWidget(QtWidgets.QLabel(''), 42, 0, 1, 3)
|
||||
|
||||
self.layout.addStretch()
|
||||
|
||||
|
@ -552,6 +591,8 @@ class ToolCalibrate(FlatCAMTool):
|
|||
self.generate_factors_button.clicked.connect(self.calculate_factors)
|
||||
self.reset_button.clicked.connect(self.set_tool_ui)
|
||||
|
||||
self.cal_source_radio.activated_custom.connect(self.on_cal_source_radio)
|
||||
|
||||
self.obj_type_combo.currentIndexChanged.connect(self.on_obj_type_combo)
|
||||
|
||||
def run(self, toggle=True):
|
||||
|
@ -596,6 +637,18 @@ class ToolCalibrate(FlatCAMTool):
|
|||
self.object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
|
||||
self.object_combo.setCurrentIndex(0)
|
||||
|
||||
def on_cal_source_radio(self, val):
|
||||
if val == 'object':
|
||||
self.obj_type_label.setDisabled(False)
|
||||
self.obj_type_combo.setDisabled(False)
|
||||
self.object_label.setDisabled(False)
|
||||
self.object_combo.setDisabled(False)
|
||||
else:
|
||||
self.obj_type_label.setDisabled(True)
|
||||
self.obj_type_combo.setDisabled(True)
|
||||
self.object_label.setDisabled(True)
|
||||
self.object_combo.setDisabled(True)
|
||||
|
||||
def on_start_collect_points(self):
|
||||
# disengage the grid snapping since it will be hard to find the drills on grid
|
||||
if self.app.ui.grid_snap_btn.isChecked():
|
||||
|
@ -611,13 +664,16 @@ class ToolCalibrate(FlatCAMTool):
|
|||
else:
|
||||
self.canvas.graph_event_disconnect(self.app.mr)
|
||||
|
||||
selection_index = self.object_combo.currentIndex()
|
||||
model_index = self.app.collection.index(selection_index, 0, self.object_combo.rootModelIndex())
|
||||
try:
|
||||
self.target_obj = model_index.internalPointer().obj
|
||||
except Exception:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no target object loaded ..."))
|
||||
return
|
||||
if self.cal_source_radio.get_value() == 'object':
|
||||
selection_index = self.object_combo.currentIndex()
|
||||
model_index = self.app.collection.index(selection_index, 0, self.object_combo.rootModelIndex())
|
||||
try:
|
||||
self.target_obj = model_index.internalPointer().obj
|
||||
except Exception:
|
||||
self.app.inform.emit('[WARNING_NOTCL] %s' % _("There is no target object loaded ..."))
|
||||
return
|
||||
|
||||
self.reset_calibration_points()
|
||||
|
||||
self.app.inform.emit(_("Click inside the First drill point. Bottom Left..."))
|
||||
|
||||
|
@ -631,21 +687,42 @@ class ToolCalibrate(FlatCAMTool):
|
|||
pos_canvas = self.canvas.translate_coords(event_pos)
|
||||
click_pt = Point([pos_canvas[0], pos_canvas[1]])
|
||||
|
||||
if self.target_obj.kind.lower() == 'excellon':
|
||||
for tool, tool_dict in self.target_obj.tools.items():
|
||||
for geo in tool_dict['solid_geometry']:
|
||||
if click_pt.within(geo):
|
||||
center_pt = geo.centroid
|
||||
self.click_points.append(
|
||||
(
|
||||
float('%.*f' % (self.decimals, center_pt.x)),
|
||||
float('%.*f' % (self.decimals, center_pt.y))
|
||||
if self.cal_source_radio.get_value() == 'object':
|
||||
if self.target_obj.kind.lower() == 'excellon':
|
||||
for tool, tool_dict in self.target_obj.tools.items():
|
||||
for geo in tool_dict['solid_geometry']:
|
||||
if click_pt.within(geo):
|
||||
center_pt = geo.centroid
|
||||
self.click_points.append(
|
||||
(
|
||||
float('%.*f' % (self.decimals, center_pt.x)),
|
||||
float('%.*f' % (self.decimals, center_pt.y))
|
||||
)
|
||||
)
|
||||
)
|
||||
self.check_points()
|
||||
self.check_points()
|
||||
else:
|
||||
for apid, apid_val in self.target_obj.apertures.items():
|
||||
for geo_el in apid_val['geometry']:
|
||||
if 'solid' in geo_el:
|
||||
if click_pt.within(geo_el['solid']):
|
||||
print(type(geo_el['follow']))
|
||||
if isinstance(geo_el['follow'], Point):
|
||||
center_pt = geo_el['solid'].centroid
|
||||
self.click_points.append(
|
||||
(
|
||||
float('%.*f' % (self.decimals, center_pt.x)),
|
||||
float('%.*f' % (self.decimals, center_pt.y))
|
||||
)
|
||||
)
|
||||
self.check_points()
|
||||
else:
|
||||
for tool, tool_dict in self.target_obj.apertures.items():
|
||||
pass
|
||||
self.click_points.append(
|
||||
(
|
||||
float('%.*f' % (self.decimals, click_pt.x)),
|
||||
float('%.*f' % (self.decimals, click_pt.y))
|
||||
)
|
||||
)
|
||||
self.check_points()
|
||||
|
||||
def check_points(self):
|
||||
if len(self.click_points) == 1:
|
||||
|
@ -670,6 +747,21 @@ class ToolCalibrate(FlatCAMTool):
|
|||
if self.grid_status_memory is True:
|
||||
self.app.ui.grid_snap_btn.trigger()
|
||||
|
||||
def reset_calibration_points(self):
|
||||
self.click_points = list()
|
||||
|
||||
self.bottom_left_coordx_tgt.set_value('')
|
||||
self.bottom_left_coordy_tgt.set_value('')
|
||||
|
||||
self.bottom_right_coordx_tgt.set_value('')
|
||||
self.bottom_right_coordy_tgt.set_value('')
|
||||
|
||||
self.top_left_coordx_tgt.set_value('')
|
||||
self.top_left_coordy_tgt.set_value('')
|
||||
|
||||
self.top_right_coordx_tgt.set_value('')
|
||||
self.top_right_coordy_tgt.set_value('')
|
||||
|
||||
def gcode_header(self):
|
||||
log.debug("ToolCalibrate.gcode_header()")
|
||||
time_str = "{:%A, %d %B %Y at %H:%M}".format(datetime.now())
|
||||
|
|
Loading…
Reference in New Issue