- GCode Editor - GCode tool selection when clicking on tool in Tools table is working. The only issue is that the first tool gcode includes the start gcode which confuse the algorithm

This commit is contained in:
Marius Stanciu
2020-08-03 17:01:52 +03:00
parent f557eeb98d
commit 7d47a133f6
2 changed files with 69 additions and 15 deletions

View File

@@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta
================================================= =================================================
3.08.2020
- GCode Editor - GCode tool selection when clicking on tool in Tools table is working. The only issue is that the first tool gcode includes the start gcode which confuse the algorithm
2.08.2020 2.08.2020
- GCode Editor - closing the Editor will close also the Code Editor Tab - GCode Editor - closing the Editor will close also the Code Editor Tab

View File

@@ -38,6 +38,7 @@ class AppGCodeEditor(QtCore.QObject):
self.ui = AppGCodeEditorUI(app=self.app) self.ui = AppGCodeEditorUI(app=self.app)
self.edited_obj_name = "" self.edited_obj_name = ""
self.edit_area = None
self.gcode_obj = None self.gcode_obj = None
self.code_edited = '' self.code_edited = ''
@@ -241,7 +242,7 @@ class AppGCodeEditor(QtCore.QObject):
start_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) start_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
self.ui.exc_cnc_tools_table.setItem(row_no, 1, start_item) self.ui.exc_cnc_tools_table.setItem(row_no, 1, start_item)
for tooldia_key, dia_value in self.gcode_obj.exc_cnc_tools.items(): for tooldia_key, dia_value in self.gcode_obj.exc_cnc_tools.items():
tool_idx += 1 tool_idx += 1
row_no += 1 row_no += 1
@@ -251,7 +252,7 @@ class AppGCodeEditor(QtCore.QObject):
nr_drills_item = QtWidgets.QTableWidgetItem('%d' % int(dia_value['nr_drills'])) nr_drills_item = QtWidgets.QTableWidgetItem('%d' % int(dia_value['nr_drills']))
nr_slots_item = QtWidgets.QTableWidgetItem('%d' % int(dia_value['nr_slots'])) nr_slots_item = QtWidgets.QTableWidgetItem('%d' % int(dia_value['nr_slots']))
cutz_item = QtWidgets.QTableWidgetItem('%.*f' % ( cutz_item = QtWidgets.QTableWidgetItem('%.*f' % (
self.decimals, float(dia_value['offset']) + float(dia_value['data']['tools_drill_cutz']))) self.decimals, float(dia_value['offset']) + float(dia_value['data']['tools_drill_cutz'])))
t_id.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) t_id.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
dia_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) dia_item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
@@ -404,18 +405,24 @@ class AppGCodeEditor(QtCore.QObject):
my_text_cursor.setPosition(end_sel, QtGui.QTextCursor.KeepAnchor) my_text_cursor.setPosition(end_sel, QtGui.QTextCursor.KeepAnchor)
self.edit_area.setTextCursor(my_text_cursor) self.edit_area.setTextCursor(my_text_cursor)
sel_list = []
for row in sel_rows: for row in sel_rows:
# those are special rows treated before so we except them # those are special rows treated before so we except them
if row not in [0, 1, 2]: if row not in [0, 1, 2]:
tool_no = int(t_table.item(row, 0).text()) tool_no = int(t_table.item(row, 0).text())
text_to_be_found = None
if self.gcode_obj.cnc_tools: if self.gcode_obj.cnc_tools:
text_to_be_found = self.gcode_obj.cnc_tools[tool_no]['gcode'] text_to_be_found = self.gcode_obj.cnc_tools[tool_no]['gcode']
elif self.gcode_obj.exc_cnc_tools: elif self.gcode_obj.exc_cnc_tools:
tool_dia = float(t_table.item(row, 1).text()) tool_dia = self.app.dec_format(float(t_table.item(row, 1).text()), dec=self.decimals)
text_to_be_found = self.gcode_obj.exc_cnc_tools[tool_dia]['gcode'] for tool_d in self.gcode_obj.exc_cnc_tools:
if self.app.dec_format(tool_d, dec=self.decimals) == tool_dia:
text_to_be_found = self.gcode_obj.exc_cnc_tools[tool_d]['gcode']
if text_to_be_found is None:
continue
else: else:
return continue
text_list = [x for x in text_to_be_found.split("\n") if x != ''] text_list = [x for x in text_to_be_found.split("\n") if x != '']
@@ -423,32 +430,76 @@ class AppGCodeEditor(QtCore.QObject):
# my_text_cursor = self.edit_area.textCursor() # my_text_cursor = self.edit_area.textCursor()
# start_sel = my_text_cursor.selectionStart() # start_sel = my_text_cursor.selectionStart()
# first I search for the tool
found_tool = self.edit_area.find('T%d' % tool_no, flags) found_tool = self.edit_area.find('T%d' % tool_no, flags)
if found_tool is False: if found_tool is False:
return continue
# once the tool found then I set the text Cursor position to the tool Tx position
my_text_cursor = self.edit_area.textCursor() my_text_cursor = self.edit_area.textCursor()
tool_pos = my_text_cursor.selectionStart() tool_pos = my_text_cursor.selectionStart()
my_text_cursor.setPosition(tool_pos) my_text_cursor.setPosition(tool_pos)
# I search for the first finding of the first line in the Tool GCode
f = self.edit_area.find(str(text_list[0]), flags) f = self.edit_area.find(str(text_list[0]), flags)
if f is False: if f is False:
return continue
# once found I set the text Cursor position here
my_text_cursor = self.edit_area.textCursor() my_text_cursor = self.edit_area.textCursor()
start_sel = my_text_cursor.selectionStart() start_sel = my_text_cursor.selectionStart()
end_sel = 0 # I search for the next find of M6 (which belong to the next tool
while True: m6 = self.edit_area.find('M6', flags)
f = self.edit_area.find(str(text_list[-1]), flags) if m6 is False:
m6 = self.edit_area.find('M6', flags) # this mean that we are in the last tool, we take all to the end
if f is False or m6: self.edit_area.moveCursor(QtGui.QTextCursor.End)
break
my_text_cursor = self.edit_area.textCursor() my_text_cursor = self.edit_area.textCursor()
end_sel = my_text_cursor.selectionEnd() end_sel = my_text_cursor.selectionEnd()
else:
pos_list = []
end_sel = 0
my_text_cursor = self.edit_area.textCursor()
m6_pos = my_text_cursor.selectionEnd()
# move cursor back to the start of the tool gcode so the find method will work on the tool gcode
t_curs = self.edit_area.textCursor()
t_curs.setPosition(start_sel)
self.edit_area.setTextCursor(t_curs)
# search for all findings of the last line in the tool gcode
# yet, we may find in multiple locations or in the gcode that belong to other tools
while True:
f = self.edit_area.find(str(text_list[-1]), flags)
if f is False:
break
my_text_cursor = self.edit_area.textCursor()
pos_list.append(my_text_cursor.selectionEnd())
# now we find a position that is less than the m6_pos but also the closest (maximum)
belong_to_tool_list = []
for last_line_pos in pos_list:
if last_line_pos < m6_pos:
belong_to_tool_list.append(last_line_pos)
if belong_to_tool_list:
end_sel = max(belong_to_tool_list)
else:
# this mean that we are in the last tool, we take all to the end
self.edit_area.moveCursor(QtGui.QTextCursor.End)
my_text_cursor = self.edit_area.textCursor()
end_sel = my_text_cursor.selectionEnd()
my_text_cursor.setPosition(start_sel) my_text_cursor.setPosition(start_sel)
my_text_cursor.setPosition(end_sel, QtGui.QTextCursor.KeepAnchor) my_text_cursor.setPosition(end_sel, QtGui.QTextCursor.KeepAnchor)
self.edit_area.setTextCursor(my_text_cursor) self.edit_area.setTextCursor(my_text_cursor)
tool_selection = QtWidgets.QTextEdit.ExtraSelection()
tool_selection.cursor = self.edit_area.textCursor()
tool_selection.format.setFontUnderline(True)
sel_list.append(tool_selection)
self.edit_area.setExtraSelections(sel_list)
def on_toggle_all_rows(self): def on_toggle_all_rows(self):
""" """
@@ -525,8 +576,6 @@ class AppGCodeEditor(QtCore.QObject):
:return: :return:
:rtype: :rtype:
""" """
preamble = str(self.ui.prepend_text.get_value())
postamble = str(self.ui.append_text.get_value())
my_gcode = self.ui.gcode_editor_tab.code_editor.toPlainText() my_gcode = self.ui.gcode_editor_tab.code_editor.toPlainText()
self.gcode_obj.source_file = my_gcode self.gcode_obj.source_file = my_gcode
@@ -556,6 +605,7 @@ class AppGCodeEditor(QtCore.QObject):
def on_name_activate(self): def on_name_activate(self):
self.edited_obj_name = self.ui.name_entry.get_value() self.edited_obj_name = self.ui.name_entry.get_value()
class AppGCodeEditorUI: class AppGCodeEditorUI:
def __init__(self, app): def __init__(self, app):
self.app = app self.app = app