- if extracut_length is zero then the extracut will cut up until the first point in path no matter what the distance is

This commit is contained in:
Marius Stanciu 2019-12-10 23:57:00 +02:00 committed by Marius
parent e26953a6f3
commit 5f739d1baf
9 changed files with 62 additions and 49 deletions

View File

@ -591,7 +591,7 @@ class App(QtCore.QObject):
"excellon_travelz": 2, "excellon_travelz": 2,
"excellon_endz": 0.5, "excellon_endz": 0.5,
"excellon_feedrate": 300, "excellon_feedrate": 300,
"excellon_spindlespeed": None, "excellon_spindlespeed": 0,
"excellon_dwell": False, "excellon_dwell": False,
"excellon_dwelltime": 1, "excellon_dwelltime": 1,
"excellon_toolchange": False, "excellon_toolchange": False,
@ -658,7 +658,7 @@ class App(QtCore.QObject):
"geometry_endz": 15.0, "geometry_endz": 15.0,
"geometry_feedrate": 120, "geometry_feedrate": 120,
"geometry_feedrate_z": 60, "geometry_feedrate_z": 60,
"geometry_spindlespeed": None, "geometry_spindlespeed": 0,
"geometry_dwell": False, "geometry_dwell": False,
"geometry_dwelltime": 1, "geometry_dwelltime": 1,
"geometry_ppname_g": 'default', "geometry_ppname_g": 'default',

View File

@ -12,7 +12,7 @@
# ########################################################## # ##########################################################
from PyQt5 import QtGui, QtCore, QtWidgets from PyQt5 import QtGui, QtCore, QtWidgets
from flatcamGUI.GUIElements import FCTable, FCEntry, FCButton, FCDoubleSpinner, FCComboBox, FCCheckBox from flatcamGUI.GUIElements import FCTable, FCEntry, FCButton, FCDoubleSpinner, FCComboBox, FCCheckBox, FCSpinner
from camlib import to_dict from camlib import to_dict
import sys import sys
@ -908,8 +908,11 @@ class ToolsDB(QtWidgets.QWidget):
frrapids_item.set_value(float(data['feedrate_rapid'])) frrapids_item.set_value(float(data['feedrate_rapid']))
widget.setCellWidget(row, 15, frrapids_item) widget.setCellWidget(row, 15, frrapids_item)
spindlespeed_item = QtWidgets.QTableWidgetItem(str(data['spindlespeed']) if data['spindlespeed'] else '') spindlespeed_item = FCSpinner()
widget.setItem(row, 16, spindlespeed_item) spindlespeed_item.set_range(0, 1000000)
spindlespeed_item.set_range(int(data['spindlespeed']))
spindlespeed_item.setSingleStep(100)
widget.setCellWidget(row, 16, spindlespeed_item)
dwell_item = FCCheckBox() dwell_item = FCCheckBox()
dwell_item.set_value(data['dwell']) dwell_item.set_value(data['dwell'])
@ -1282,8 +1285,7 @@ class ToolsDB(QtWidgets.QWidget):
elif column_header_text == 'FR Rapids': elif column_header_text == 'FR Rapids':
default_data['feedrate_rapid'] = self.table_widget.cellWidget(row, col).get_value() default_data['feedrate_rapid'] = self.table_widget.cellWidget(row, col).get_value()
elif column_header_text == 'Spindle Speed': elif column_header_text == 'Spindle Speed':
default_data['spindlespeed'] = float(self.table_widget.item(row, col).text()) \ default_data['spindlespeed'] = self.table_widget.cellWidget(row, col).get_value()
if self.table_widget.item(row, col).text() is not '' else None
elif column_header_text == 'Dwell': elif column_header_text == 'Dwell':
default_data['dwell'] = self.table_widget.cellWidget(row, col).get_value() default_data['dwell'] = self.table_widget.cellWidget(row, col).get_value()
elif column_header_text == 'Dwelltime': elif column_header_text == 'Dwelltime':

View File

@ -2195,7 +2195,7 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
"toolchangexy": "0.0, 0.0", "toolchangexy": "0.0, 0.0",
"endz": 2.0, "endz": 2.0,
"startz": None, "startz": None,
"spindlespeed": None, "spindlespeed": 0,
"dwell": True, "dwell": True,
"dwelltime": 1000, "dwelltime": 1000,
"ppname_e": 'defaults', "ppname_e": 'defaults',
@ -3253,7 +3253,7 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
job_obj.feedrate = float(self.options["feedrate"]) job_obj.feedrate = float(self.options["feedrate"])
job_obj.feedrate_rapid = float(self.options["feedrate_rapid"]) job_obj.feedrate_rapid = float(self.options["feedrate_rapid"])
job_obj.spindlespeed = float(self.options["spindlespeed"]) if self.options["spindlespeed"] else None job_obj.spindlespeed = float(self.options["spindlespeed"]) if self.options["spindlespeed"] != 0 else None
job_obj.spindledir = self.app.defaults['excellon_spindledir'] job_obj.spindledir = self.app.defaults['excellon_spindledir']
job_obj.dwell = self.options["dwell"] job_obj.dwell = self.options["dwell"]
job_obj.dwelltime = float(self.options["dwelltime"]) job_obj.dwelltime = float(self.options["dwelltime"])
@ -3332,30 +3332,31 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
def convert_units(self, units): def convert_units(self, units):
log.debug("FlatCAMObj.FlatCAMExcellon.convert_units()") log.debug("FlatCAMObj.FlatCAMExcellon.convert_units()")
factor = Excellon.convert_units(self, units) Excellon.convert_units(self, units)
self.options['drillz'] = float(self.options['drillz']) * factor # factor = Excellon.convert_units(self, units)
self.options['travelz'] = float(self.options['travelz']) * factor # self.options['drillz'] = float(self.options['drillz']) * factor
self.options['feedrate'] = float(self.options['feedrate']) * factor # self.options['travelz'] = float(self.options['travelz']) * factor
self.options['feedrate_rapid'] = float(self.options['feedrate_rapid']) * factor # self.options['feedrate'] = float(self.options['feedrate']) * factor
self.options['toolchangez'] = float(self.options['toolchangez']) * factor # self.options['feedrate_rapid'] = float(self.options['feedrate_rapid']) * factor
# self.options['toolchangez'] = float(self.options['toolchangez']) * factor
if self.app.defaults["excellon_toolchangexy"] == '': #
self.options['toolchangexy'] = "0.0, 0.0" # if self.app.defaults["excellon_toolchangexy"] == '':
else: # self.options['toolchangexy'] = "0.0, 0.0"
coords_xy = [float(eval(coord)) for coord in self.app.defaults["excellon_toolchangexy"].split(",")] # else:
if len(coords_xy) < 2: # coords_xy = [float(eval(coord)) for coord in self.app.defaults["excellon_toolchangexy"].split(",")]
self.app.inform.emit('[ERROR] %s' % _("The Toolchange X,Y field in Edit -> Preferences has to be " # if len(coords_xy) < 2:
"in the format (x, y) \n" # self.app.inform.emit('[ERROR] %s' % _("The Toolchange X,Y field in Edit -> Preferences has to be "
"but now there is only one value, not two. ")) # "in the format (x, y) \n"
return 'fail' # "but now there is only one value, not two. "))
coords_xy[0] *= factor # return 'fail'
coords_xy[1] *= factor # coords_xy[0] *= factor
self.options['toolchangexy'] = "%f, %f" % (coords_xy[0], coords_xy[1]) # coords_xy[1] *= factor
# self.options['toolchangexy'] = "%f, %f" % (coords_xy[0], coords_xy[1])
if self.options['startz'] is not None: #
self.options['startz'] = float(self.options['startz']) * factor # if self.options['startz'] is not None:
self.options['endz'] = float(self.options['endz']) * factor # self.options['startz'] = float(self.options['startz']) * factor
# self.options['endz'] = float(self.options['endz']) * factor
def on_solid_cb_click(self, *args): def on_solid_cb_click(self, *args):
if self.muted_ui: if self.muted_ui:
@ -3517,7 +3518,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
"feedrate": 5.0, "feedrate": 5.0,
"feedrate_z": 5.0, "feedrate_z": 5.0,
"feedrate_rapid": 5.0, "feedrate_rapid": 5.0,
"spindlespeed": None, "spindlespeed": 0,
"dwell": True, "dwell": True,
"dwelltime": 1000, "dwelltime": 1000,
"multidepth": False, "multidepth": False,
@ -3806,7 +3807,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
"toolchange": None, "toolchange": None,
"toolchangez": None, "toolchangez": None,
"endz": None, "endz": None,
"spindlespeed": None, "spindlespeed": 0,
"toolchangexy": None, "toolchangexy": None,
"startz": None "startz": None
}) })
@ -5713,7 +5714,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
tooldia = self.ui.addtool_entry.get_value() tooldia = self.ui.addtool_entry.get_value()
if tooldia: if tooldia:
tooldia *= factor tooldia *= factor
# limit the decimals to 2 for METRIC and 3 for INCH
tooldia = float('%.*f' % (self.decimals, tooldia)) tooldia = float('%.*f' % (self.decimals, tooldia))
self.ui.addtool_entry.set_value(tooldia) self.ui.addtool_entry.set_value(tooldia)

View File

@ -19,6 +19,8 @@ CAD program, and create G-Code for Isolation routing.
- fixed a cummulative error when using the Tool Offset for Excellon objects - fixed a cummulative error when using the Tool Offset for Excellon objects
- added the display of the real depth of cut (cut z + offset_z) for CNC tools made out of an Excellon object - added the display of the real depth of cut (cut z + offset_z) for CNC tools made out of an Excellon object
- for OpenGL graphic mode added a fit_view() execution on canvas initialization - for OpenGL graphic mode added a fit_view() execution on canvas initialization
- fixed Excellon scaling the UI values
- replaced the SpindleSpeed entry with a FCSpinner() GUI element; if speed is set to 0 it will amount to None
9.12.2019 9.12.2019

View File

@ -3036,7 +3036,7 @@ class CNCjob(Geometry):
self.z_feedrate = float(feedrate_z) if feedrate_z is not None else None self.z_feedrate = float(feedrate_z) if feedrate_z is not None else None
self.feedrate_rapid = float(feedrate_rapid) if feedrate_rapid else None self.feedrate_rapid = float(feedrate_rapid) if feedrate_rapid else None
self.spindlespeed = int(spindlespeed) if spindlespeed else None self.spindlespeed = int(spindlespeed) if spindlespeed != 0 else None
self.spindledir = spindledir self.spindledir = spindledir
self.dwell = dwell self.dwell = dwell
self.dwelltime = float(dwelltime) if dwelltime else None self.dwelltime = float(dwelltime) if dwelltime else None
@ -3388,7 +3388,7 @@ class CNCjob(Geometry):
self.z_feedrate = float(feedrate_z) if feedrate_z is not None else None self.z_feedrate = float(feedrate_z) if feedrate_z is not None else None
self.feedrate_rapid = float(feedrate_rapid) if feedrate_rapid else None self.feedrate_rapid = float(feedrate_rapid) if feedrate_rapid else None
self.spindlespeed = int(spindlespeed) if spindlespeed else None self.spindlespeed = int(spindlespeed) if spindlespeed != 0 else None
self.spindledir = spindledir self.spindledir = spindledir
self.dwell = dwell self.dwell = dwell
self.dwelltime = float(dwelltime) if dwelltime else None self.dwelltime = float(dwelltime) if dwelltime else None

View File

@ -932,7 +932,9 @@ class ExcellonObjectUI(ObjectUI):
"in RPM (optional)") "in RPM (optional)")
) )
grid1.addWidget(spdlabel, 8, 0) grid1.addWidget(spdlabel, 8, 0)
self.spindlespeed_entry = IntEntry(allow_empty=True) self.spindlespeed_entry = FCSpinner()
self.spindlespeed_entry.set_range(0, 1000000)
self.spindlespeed_entry.setSingleStep(100)
grid1.addWidget(self.spindlespeed_entry, 8, 1) grid1.addWidget(self.spindlespeed_entry, 8, 1)
# Dwell # Dwell
@ -1571,7 +1573,9 @@ class GeometryObjectUI(ObjectUI):
"this value is the power of laser." "this value is the power of laser."
) )
) )
self.cncspindlespeed_entry = IntEntry(allow_empty=True) self.cncspindlespeed_entry = FCSpinner()
self.cncspindlespeed_entry.set_range(0, 1000000)
self.cncspindlespeed_entry.setSingleStep(100)
self.grid3.addWidget(spdlabel, 14, 0) self.grid3.addWidget(spdlabel, 14, 0)
self.grid3.addWidget(self.cncspindlespeed_entry, 14, 1) self.grid3.addWidget(self.cncspindlespeed_entry, 14, 1)

View File

@ -2430,7 +2430,9 @@ class ExcellonOptPrefGroupUI(OptionsGroupUI):
"in RPM (optional)") "in RPM (optional)")
) )
grid2.addWidget(spdlabel, 6, 0) grid2.addWidget(spdlabel, 6, 0)
self.spindlespeed_entry = IntEntry(allow_empty=True) self.spindlespeed_entry = FCSpinner()
self.spindlespeed_entry.set_range(0, 1000000)
self.spindlespeed_entry.setSingleStep(100)
grid2.addWidget(self.spindlespeed_entry, 6, 1) grid2.addWidget(self.spindlespeed_entry, 6, 1)
# Dwell # Dwell
@ -3341,7 +3343,10 @@ class GeometryOptPrefGroupUI(OptionsGroupUI):
) )
) )
grid1.addWidget(spdlabel, 9, 0) grid1.addWidget(spdlabel, 9, 0)
self.cncspindlespeed_entry = IntEntry(allow_empty=True) self.cncspindlespeed_entry = FCSpinner()
self.cncspindlespeed_entry.set_range(0, 1000000)
self.cncspindlespeed_entry.setSingleStep(100)
grid1.addWidget(self.cncspindlespeed_entry, 9, 1) grid1.addWidget(self.cncspindlespeed_entry, 9, 1)
# Dwell # Dwell

View File

@ -94,11 +94,11 @@ class Excellon(Geometry):
Geometry.__init__(self, geo_steps_per_circle=int(geo_steps_per_circle)) Geometry.__init__(self, geo_steps_per_circle=int(geo_steps_per_circle))
# dictionary to store tools, see above for description # dictionary to store tools, see above for description
self.tools = {} self.tools = dict()
# list to store the drills, see above for description # list to store the drills, see above for description
self.drills = [] self.drills = list()
# self.slots (list) to store the slots; each is a dictionary # self.slots (list) to store the slots; each is a dictionary
self.slots = [] self.slots = list()
self.source_file = '' self.source_file = ''
@ -109,8 +109,8 @@ class Excellon(Geometry):
self.match_routing_start = None self.match_routing_start = None
self.match_routing_stop = None self.match_routing_stop = None
self.num_tools = [] # List for keeping the tools sorted self.num_tools = list() # List for keeping the tools sorted
self.index_per_tool = {} # Dictionary to store the indexed points for each tool self.index_per_tool = dict() # Dictionary to store the indexed points for each tool
# ## IN|MM -> Units are inherited from Geometry # ## IN|MM -> Units are inherited from Geometry
self.units = self.app.defaults['units'] self.units = self.app.defaults['units']
@ -118,8 +118,8 @@ class Excellon(Geometry):
# Trailing "T" or leading "L" (default) # Trailing "T" or leading "L" (default)
# self.zeros = "T" # self.zeros = "T"
self.zeros = zeros or self.defaults["zeros"] self.zeros = zeros or self.defaults["zeros"]
self.zeros_found = self.zeros self.zeros_found = deepcopy(self.zeros)
self.units_found = self.units self.units_found = deepcopy(self.units)
# this will serve as a default if the Excellon file has no info regarding of tool diameters (this info may be # this will serve as a default if the Excellon file has no info regarding of tool diameters (this info may be
# in another file like for PCB WIzard ECAD software # in another file like for PCB WIzard ECAD software

View File

@ -147,7 +147,7 @@ class TclCommandCncjob(TclCommandSignaled):
self.app.defaults["geometry_startz"] self.app.defaults["geometry_startz"]
args["endz"] = args["endz"] if "endz" in args and args["endz"] else obj.options["endz"] args["endz"] = args["endz"] if "endz" in args and args["endz"] else obj.options["endz"]
args["spindlespeed"] = args["spindlespeed"] if "spindlespeed" in args and args["spindlespeed"] else None args["spindlespeed"] = args["spindlespeed"] if "spindlespeed" in args and args["spindlespeed"] != 0 else None
args["dwell"] = bool(args["dwell"]) if "dwell" in args else obj.options["dwell"] args["dwell"] = bool(args["dwell"]) if "dwell" in args else obj.options["dwell"]
args["dwelltime"] = args["dwelltime"] if "dwelltime" in args and args["dwelltime"] else obj.options["dwelltime"] args["dwelltime"] = args["dwelltime"] if "dwelltime" in args and args["dwelltime"] else obj.options["dwelltime"]