- in CNCJob object, for CNCJob objects created when importing a foreign Gcode file, fixed the updating of the tool diameter

- in CNCJob object, when there are no tools in the Tools Table (it happens when importing foreign GCode files) the Tool Table is now displayed in a correct way
This commit is contained in:
Marius Stanciu
2021-04-29 21:34:56 +03:00
committed by Marius
parent 3025a43d34
commit c84364e605
3 changed files with 45 additions and 28 deletions

View File

@@ -147,7 +147,7 @@ class AppObject(QtCore.QObject):
obj.options[option] = self.app.options[option]
# the milling options should be inherited by all manufacturing objects
if kind in ['excellon', 'gerber', 'geometry']:
if kind in ['excellon', 'gerber', 'geometry', 'cncjob']:
for option in self.app.options:
if option.find('tools_mill_') == 0:
obj.options[option] = self.app.options[option]

View File

@@ -183,6 +183,8 @@ class CNCJobObject(FlatCAMObj, CNCjob):
self.ui_disconnect()
FlatCAMObj.build_ui(self)
self.app.log.debug("CNCJobObject.build_ui()")
self.units = self.app.defaults['units'].upper()
# if the FlatCAM object is Excellon don't build the CNC Tools Table but hide it
@@ -204,10 +206,10 @@ class CNCJobObject(FlatCAMObj, CNCjob):
# for the case when self.tools is empty: it can happen for old projects who stored the data elsewhere
if not self.tools:
return
n = len(self.tools)
self.ui.cnc_tools_table.setRowCount(n)
self.ui.cnc_tools_table.setRowCount(1)
else:
n = len(self.tools)
self.ui.cnc_tools_table.setRowCount(n)
for dia_key, dia_value in self.tools.items():
@@ -562,9 +564,15 @@ class CNCJobObject(FlatCAMObj, CNCjob):
def ui_connect(self):
for row in range(self.ui.cnc_tools_table.rowCount()):
self.ui.cnc_tools_table.cellWidget(row, 6).clicked.connect(self.on_plot_cb_click_table)
try:
self.ui.cnc_tools_table.cellWidget(row, 6).clicked.connect(self.on_plot_cb_click_table)
except AttributeError:
pass
for row in range(self.ui.exc_cnc_tools_table.rowCount()):
self.ui.exc_cnc_tools_table.cellWidget(row, 6).clicked.connect(self.on_plot_cb_click_table)
try:
self.ui.exc_cnc_tools_table.cellWidget(row, 6).clicked.connect(self.on_plot_cb_click_table)
except AttributeError:
pass
self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click)
def ui_disconnect(self):
@@ -609,14 +617,14 @@ class CNCJobObject(FlatCAMObj, CNCjob):
and plots the object.
"""
self.read_form()
self.on_plot_kind_change()
self.on_plot_kind_change(dia=self.ui.tooldia_entry.get_value())
def on_plot_kind_change(self):
def on_plot_kind_change(self, dia=None):
kind = self.ui.cncplot_method_combo.get_value()
def worker_task():
with self.app.proc_container.new('%s ...' % _("Plotting")):
self.plot(kind=kind)
self.plot(kind=kind, dia=dia)
self.app.worker_task.emit({'fcn': worker_task, 'params': []})
@@ -933,7 +941,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
first_key = list(self.tools.keys())[0]
include_header = self.app.preprocessors[self.tools[first_key]['data']['tools_mill_ppname_g']]
include_header = include_header.include_header
except TypeError:
except (TypeError, IndexError):
include_header = self.app.preprocessors['default'].include_header
# if this dict is not empty then the object is an Excellon object
@@ -1241,13 +1249,14 @@ class CNCJobObject(FlatCAMObj, CNCjob):
self.ui.plot_cb.setChecked(True)
self.ui_connect()
def plot(self, visible=None, kind='all'):
def plot(self, visible=None, kind='all', dia=None):
"""
# Does all the required setup and returns False
# if the 'ptint' option is set to False.
:param visible: Boolean to decide if the object will be plotted as visible or disabled on canvas
:param kind: String. Can be "all" or "travel" or "cut". For CNCJob plotting
:param dia: The diameter used to render the tool paths
:return: None
"""
if not FlatCAMObj.plot(self):
@@ -1258,18 +1267,21 @@ class CNCJobObject(FlatCAMObj, CNCjob):
# Geometry shapes plotting
try:
if self.multitool is False: # single tool usage
if self.options['type'].lower() == "excellon":
try:
dia_plot = float(self.options["tooldia"])
except ValueError:
# we may have a tuple with only one element and a comma
dia_plot = [float(el) for el in self.options["tooldia"].split(',') if el != ''][0]
else:
try:
dia_plot = float(self.options["tools_mill_tooldia"])
except ValueError:
# we may have a tuple with only one element and a comma
dia_plot = [float(el) for el in self.options["tools_mill_tooldia"].split(',') if el != ''][0]
dia_plot = dia
if dia_plot is None:
if self.options['type'].lower() == "excellon":
try:
dia_plot = float(self.options["tooldia"])
except ValueError:
# we may have a tuple with only one element and a comma
dia_plot = [float(el) for el in self.options["tooldia"].split(',') if el != ''][0]
else:
try:
dia_plot = float(self.options["tools_mill_tooldia"])
except ValueError:
# we may have a tuple with only one element and a comma
dia_plot = [float(el) for el in self.options["tools_mill_tooldia"].split(',') if el != ''][0]
self.plot2(tooldia=dia_plot, obj=self, visible=visible, kind=kind)
else:
# I do this so the travel lines thickness will reflect the tool diameter
@@ -1278,22 +1290,22 @@ class CNCJobObject(FlatCAMObj, CNCjob):
if self.options['type'].lower() == "excellon":
if self.tools:
for toolid_key in self.tools:
tooldia = self.app.dec_format(float(self.tools[toolid_key]['tooldia']), self.decimals)
dia_plot = self.app.dec_format(float(self.tools[toolid_key]['tooldia']), self.decimals)
gcode_parsed = self.tools[toolid_key]['gcode_parsed']
if not gcode_parsed:
continue
# gcode_parsed = self.gcode_parsed
self.plot2(tooldia=tooldia, obj=self, visible=visible, gcode_parsed=gcode_parsed, kind=kind)
self.plot2(tooldia=dia_plot, obj=self, visible=visible, gcode_parsed=gcode_parsed, kind=kind)
else:
# multiple tools usage
if self.tools:
for tooluid_key in self.tools:
tooldia = self.app.dec_format(
dia_plot = self.app.dec_format(
float(self.tools[tooluid_key]['data']['tools_mill_tooldia']),
self.decimals
)
gcode_parsed = self.tools[tooluid_key]['gcode_parsed']
self.plot2(tooldia=tooldia, obj=self, visible=visible, gcode_parsed=gcode_parsed, kind=kind)
self.plot2(tooldia=dia_plot, obj=self, visible=visible, gcode_parsed=gcode_parsed, kind=kind)
self.shapes.redraw()
except (ObjectDeleted, AttributeError):