- in Isolation Plugin: if using a V-shape tool, restored the ability to change the tool diameter as a function of tip diameter, tip angle and the depth of cut

This commit is contained in:
Marius Stanciu
2021-10-30 16:13:32 +03:00
committed by Marius
parent b309a14929
commit 1596f69e2b
5 changed files with 229 additions and 59 deletions

View File

@@ -10,7 +10,7 @@ CHANGELOG for FlatCAM beta
30.10.2021 30.10.2021
- small changes in the VisPyVisuals that should improve a bit the performance - small changes in the VisPyVisuals that should improve a bit the performance
- in Isolation Plugin: if using a V-shape tool, restored the ability to change the tool diameter as a function of tip diameter, tip angle and the depth of cut
28.10.2021 28.10.2021

View File

@@ -286,6 +286,10 @@ class PreferencesUIManager:
"tools_iso_newdia": self.ui.plugin_eng_pref_form.tools_iso_group.newdia_entry, "tools_iso_newdia": self.ui.plugin_eng_pref_form.tools_iso_group.newdia_entry,
"tools_iso_tool_shape": self.ui.plugin_eng_pref_form.tools_iso_group.tool_shape_combo, # "C1" "tools_iso_tool_shape": self.ui.plugin_eng_pref_form.tools_iso_group.tool_shape_combo, # "C1"
"tools_iso_cutz": self.ui.plugin_eng_pref_form.tools_iso_group.cutz_entry,
"tools_iso_vtipdia": self.ui.plugin_eng_pref_form.tools_iso_group.tipdia_entry,
"tools_iso_vtipangle": self.ui.plugin_eng_pref_form.tools_iso_group.tipangle_entry,
"tools_iso_passes": self.ui.plugin_eng_pref_form.tools_iso_group.passes_entry, "tools_iso_passes": self.ui.plugin_eng_pref_form.tools_iso_group.passes_entry,
"tools_iso_pad_passes": self.ui.plugin_eng_pref_form.tools_iso_group.pad_passes_entry, "tools_iso_pad_passes": self.ui.plugin_eng_pref_form.tools_iso_group.pad_passes_entry,
"tools_iso_overlap": self.ui.plugin_eng_pref_form.tools_iso_group.overlap_entry, "tools_iso_overlap": self.ui.plugin_eng_pref_form.tools_iso_group.overlap_entry,

View File

@@ -15,6 +15,7 @@ from appParsers.ParseGerber import Gerber
from camlib import grace from camlib import grace
from copy import deepcopy from copy import deepcopy
import math
import numpy as np import numpy as np
import simplejson as json import simplejson as json
@@ -117,6 +118,9 @@ class ToolIsolation(AppTool, Gerber):
self.form_fields = { self.form_fields = {
"tools_mill_tool_shape": self.ui.tool_shape_combo, "tools_mill_tool_shape": self.ui.tool_shape_combo,
"tools_mill_cutz": self.ui.cutz_entry,
"tools_mill_vtipdia": self.ui.tipdia_entry,
"tools_mill_vtipangle": self.ui.tipangle_entry,
"tools_iso_passes": self.ui.passes_entry, "tools_iso_passes": self.ui.passes_entry,
"tools_iso_pad_passes": self.ui.pad_passes_entry, "tools_iso_pad_passes": self.ui.pad_passes_entry,
"tools_iso_overlap": self.ui.iso_overlap_entry, "tools_iso_overlap": self.ui.iso_overlap_entry,
@@ -127,6 +131,9 @@ class ToolIsolation(AppTool, Gerber):
self.name2option = { self.name2option = {
"i_tool_shape": "tools_mill_tool_shape", "i_tool_shape": "tools_mill_tool_shape",
"i_cutz": "tools_mill_cutz",
"i_tipdia": "tools_mill_vtipdia",
"i_tipangle": "tools_mill_vtipangle",
"i_passes": "tools_iso_passes", "i_passes": "tools_iso_passes",
"i_pad_passes": "tools_iso_pad_passes", "i_pad_passes": "tools_iso_pad_passes",
"i_overlap": "tools_iso_overlap", "i_overlap": "tools_iso_overlap",
@@ -279,6 +286,9 @@ class ToolIsolation(AppTool, Gerber):
self.form_fields = { self.form_fields = {
"tools_mill_tool_shape": self.ui.tool_shape_combo, "tools_mill_tool_shape": self.ui.tool_shape_combo,
"tools_mill_cutz": self.ui.cutz_entry,
"tools_mill_vtipdia": self.ui.tipdia_entry,
"tools_mill_vtipangle": self.ui.tipangle_entry,
"tools_iso_passes": self.ui.passes_entry, "tools_iso_passes": self.ui.passes_entry,
"tools_iso_pad_passes": self.ui.pad_passes_entry, "tools_iso_pad_passes": self.ui.pad_passes_entry,
"tools_iso_overlap": self.ui.iso_overlap_entry, "tools_iso_overlap": self.ui.iso_overlap_entry,
@@ -326,6 +336,11 @@ class ToolIsolation(AppTool, Gerber):
self.ui.iso_order_combo.set_value(self.app.defaults["tools_iso_order"]) self.ui.iso_order_combo.set_value(self.app.defaults["tools_iso_order"])
self.ui.tool_shape_combo.set_value(self.app.defaults["tools_iso_tool_shape"]) self.ui.tool_shape_combo.set_value(self.app.defaults["tools_iso_tool_shape"])
self.ui.tipdia_entry.set_value(self.app.defaults["tools_iso_vtipdia"])
self.ui.tipangle_entry.set_value(self.app.defaults["tools_iso_vtipangle"])
self.ui.cutz_entry.set_value(self.app.defaults["tools_iso_cutz"])
self.ui.passes_entry.set_value(self.app.defaults["tools_iso_passes"]) self.ui.passes_entry.set_value(self.app.defaults["tools_iso_passes"])
self.ui.pad_passes_entry.set_value(self.app.defaults["tools_iso_pad_passes"]) self.ui.pad_passes_entry.set_value(self.app.defaults["tools_iso_pad_passes"])
self.ui.iso_overlap_entry.set_value(self.app.defaults["tools_iso_overlap"]) self.ui.iso_overlap_entry.set_value(self.app.defaults["tools_iso_overlap"])
@@ -355,6 +370,11 @@ class ToolIsolation(AppTool, Gerber):
if option.find('tools_') == 0: if option.find('tools_') == 0:
self.default_data[option] = self.app.options[option] self.default_data[option] = self.app.options[option]
# transfer some Isolation Plugin values to the Milling Plugin; that works only for adding a default tool
self.default_data['tools_mill_cutz'] = deepcopy(self.default_data['tools_iso_cutz'])
self.default_data['tools_mill_vtipdia'] = deepcopy(self.default_data['tools_iso_vtipdia'])
self.default_data['tools_mill_vtipangle'] = deepcopy(self.default_data['tools_iso_vtipangle'])
# self.default_data.update({ # self.default_data.update({
# "name": outname + '_iso', # "name": outname + '_iso',
# "plot": self.app.defaults["geometry_plot"], # "plot": self.app.defaults["geometry_plot"],
@@ -644,8 +664,15 @@ class ToolIsolation(AppTool, Gerber):
) )
def ui_connect(self): def ui_connect(self):
self.ui.tool_shape_combo.currentIndexChanged.connect(self.on_tt_change)
self.ui.tools_table.itemChanged.connect(self.on_tool_edit) self.ui.tools_table.itemChanged.connect(self.on_tool_edit)
# V-shape tool parameters changes
self.ui.cutz_entry.editingFinished.connect(self.on_update_tool_dia)
self.ui.tipdia_entry.editingFinished.connect(self.on_update_tool_dia)
self.ui.tipangle_entry.editingFinished.connect(self.on_update_tool_dia)
# rows selected # rows selected
self.ui.tools_table.clicked.connect(self.on_row_selection_change) self.ui.tools_table.clicked.connect(self.on_row_selection_change)
self.ui.tools_table.horizontalHeader().sectionClicked.connect(self.on_toggle_all_rows) self.ui.tools_table.horizontalHeader().sectionClicked.connect(self.on_toggle_all_rows)
@@ -667,12 +694,31 @@ class ToolIsolation(AppTool, Gerber):
def ui_disconnect(self): def ui_disconnect(self):
try:
self.ui.tool_shape_combo.currentIndexChanged.disconnect()
except (TypeError, AttributeError):
pass
try: try:
# if connected, disconnect the signal from the slot on item_changed as it creates issues # if connected, disconnect the signal from the slot on item_changed as it creates issues
self.ui.tools_table.itemChanged.disconnect() self.ui.tools_table.itemChanged.disconnect()
except (TypeError, AttributeError): except (TypeError, AttributeError):
pass pass
# V-shape tool parameters changes
try:
self.ui.cutz_entry.editingFinished.disconnect()
except (TypeError, AttributeError):
pass
try:
self.ui.tipdia_entry.editingFinished.disconnect()
except (TypeError, AttributeError):
pass
try:
self.ui.tipangle_entry.editingFinished.disconnect()
except (TypeError, AttributeError):
pass
# rows selected # rows selected
try: try:
self.ui.tools_table.clicked.disconnect() self.ui.tools_table.clicked.disconnect()
@@ -737,6 +783,60 @@ class ToolIsolation(AppTool, Gerber):
new_toolid += 1 new_toolid += 1
self.iso_tools[new_toolid] = tool[1] self.iso_tools[new_toolid] = tool[1]
def on_tt_change(self):
tool_type = self.ui.tool_shape_combo.get_value()
self.ui_update_v_shape(tool_type)
self.form_to_storage()
def ui_update_v_shape(self, tool_type_txt):
if tool_type_txt == 5: # 'V'
self.ui.v_frame.show()
self.on_update_tool_dia()
return
self.ui.v_frame.hide()
def on_update_tool_dia(self):
if not self.ui.v_frame.isVisible():
return
self.ui_disconnect()
vdia = float(self.ui.tipdia_entry.get_value())
half_vangle = float(self.ui.tipangle_entry.get_value()) / 2
cut_z = self.ui.cutz_entry.get_value()
cut_z = -cut_z if cut_z < 0 else cut_z # cut_z param has to have a positive value here
row = self.ui.tools_table.currentRow()
tool_uid_item = self.ui.tools_table.item(row, 3)
if tool_uid_item is None:
return
tool_uid = int(tool_uid_item.text())
tool_dia_item = self.ui.tools_table.item(row, 1)
if tool_dia_item is None:
return
try:
new_tooldia = vdia + (2 * cut_z * math.tan(math.radians(half_vangle)))
except ZeroDivisionError:
self.ui_connect()
return
f_new_tool_dia = self.app.dec_format(new_tooldia, self.decimals)
tool_dias = [
self.app.dec_format(v['tooldia'], self.decimals) for v in self.iso_tools.values() if 'tooldia' in v]
if f_new_tool_dia in tool_dias:
# if the new diameter is already in the current tools abort: we don't want duplicates
self.ui_connect()
return
self.iso_tools[tool_uid]['tooldia'] = deepcopy(f_new_tool_dia)
self.iso_tools[tool_uid]['data']['tools_iso_tooldia'] = deepcopy(f_new_tool_dia)
self.ui.tools_table.item(row, 1).setText(str(f_new_tool_dia))
self.ui_connect()
def on_toggle_all_rows(self): def on_toggle_all_rows(self):
""" """
will toggle the selection of all rows in Tools table will toggle the selection of all rows in Tools table
@@ -1386,14 +1486,6 @@ class ToolIsolation(AppTool, Gerber):
tool_dias.append(self.app.dec_format(v[tool_v], self.decimals)) tool_dias.append(self.app.dec_format(v[tool_v], self.decimals))
truncated_tooldia = self.app.dec_format(tool_dia, self.decimals) truncated_tooldia = self.app.dec_format(tool_dia, self.decimals)
# if truncated_tooldia in tool_dias:
# if muted is None:
# self.app.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled. Tool already in Tool Table."))
# # self.ui.tools_table.itemChanged.connect(self.on_tool_edit)
# self.blockSignals(False)
# return
# print("before", self.iso_tools)
self.iso_tools.update({ self.iso_tools.update({
int(self.tooluid): { int(self.tooluid): {
'tooldia': truncated_tooldia, 'tooldia': truncated_tooldia,
@@ -3437,6 +3529,72 @@ class IsoUI:
tool_param_grid.addWidget(self.tool_shape_label, 0, 0) tool_param_grid.addWidget(self.tool_shape_label, 0, 0)
tool_param_grid.addWidget(self.tool_shape_combo, 0, 1) tool_param_grid.addWidget(self.tool_shape_combo, 0, 1)
# V-Shape Frame
self.v_frame = QtWidgets.QFrame()
self.v_frame.setContentsMargins(0, 0, 0, 0)
tool_param_grid.addWidget(self.v_frame, 2, 0, 1, 2)
v_grid = FCGridLayout(v_spacing=5, h_spacing=3)
v_grid.setContentsMargins(0, 0, 0, 0)
self.v_frame.setLayout(v_grid)
# Tip Dia
self.tipdialabel = FCLabel('%s:' % _('V-Tip Dia'))
self.tipdialabel.setToolTip(
_(
"The tip diameter for V-Shape Tool"
)
)
self.tipdia_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.tipdia_entry.set_precision(self.decimals)
self.tipdia_entry.set_range(0.00001, 10000.0000)
self.tipdia_entry.setSingleStep(0.1)
self.tipdia_entry.setObjectName("i_tipdia")
v_grid.addWidget(self.tipdialabel, 0, 0)
v_grid.addWidget(self.tipdia_entry, 0, 1)
# Tip Angle
self.tipanglelabel = FCLabel('%s:' % _('V-Tip Angle'))
self.tipanglelabel.setToolTip(
_(
"The tip angle for V-Shape Tool.\n"
"In degree."
)
)
self.tipangle_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.tipangle_entry.set_precision(self.decimals)
self.tipangle_entry.set_range(1.0, 180.0)
self.tipangle_entry.setSingleStep(1)
self.tipangle_entry.setObjectName("i_tipangle")
v_grid.addWidget(self.tipanglelabel, 2, 0)
v_grid.addWidget(self.tipangle_entry, 2, 1)
# Cut Z
self.cutzlabel = FCLabel('%s:' % _('Cut Z'))
self.cutzlabel.setToolTip(
_("Cutting depth (negative)\n"
"below the copper surface."))
self.cutz_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.cutz_entry.set_precision(self.decimals)
self.cutz_entry.set_range(-10000.0000, 10000.0000)
self.cutz_entry.setSingleStep(0.1)
self.cutz_entry.setObjectName("i_cutz")
v_grid.addWidget(self.cutzlabel, 4, 0)
v_grid.addWidget(self.cutz_entry, 4, 1)
separator_line = QtWidgets.QFrame()
separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
v_grid.addWidget(separator_line, 6, 0, 1, 2)
self.v_frame.hide()
# Passes # Passes
passlabel = FCLabel('%s:' % _('Passes')) passlabel = FCLabel('%s:' % _('Passes'))
passlabel.setToolTip( passlabel.setToolTip(
@@ -3447,8 +3605,8 @@ class IsoUI:
self.passes_entry.set_range(1, 999) self.passes_entry.set_range(1, 999)
self.passes_entry.setObjectName("i_passes") self.passes_entry.setObjectName("i_passes")
tool_param_grid.addWidget(passlabel, 2, 0) tool_param_grid.addWidget(passlabel, 6, 0)
tool_param_grid.addWidget(self.passes_entry, 2, 1) tool_param_grid.addWidget(self.passes_entry, 6, 1)
# Pad Passes # Pad Passes
padpasslabel = FCLabel('%s:' % _('Pad Passes')) padpasslabel = FCLabel('%s:' % _('Pad Passes'))
@@ -3460,8 +3618,8 @@ class IsoUI:
self.pad_passes_entry.set_range(0, 999) self.pad_passes_entry.set_range(0, 999)
self.pad_passes_entry.setObjectName("i_pad_passes") self.pad_passes_entry.setObjectName("i_pad_passes")
tool_param_grid.addWidget(padpasslabel, 4, 0) tool_param_grid.addWidget(padpasslabel, 8, 0)
tool_param_grid.addWidget(self.pad_passes_entry, 4, 1) tool_param_grid.addWidget(self.pad_passes_entry, 8, 1)
# Overlap Entry # Overlap Entry
overlabel = FCLabel('%s:' % _('Overlap')) overlabel = FCLabel('%s:' % _('Overlap'))
@@ -3475,8 +3633,8 @@ class IsoUI:
self.iso_overlap_entry.setSingleStep(0.1) self.iso_overlap_entry.setSingleStep(0.1)
self.iso_overlap_entry.setObjectName("i_overlap") self.iso_overlap_entry.setObjectName("i_overlap")
tool_param_grid.addWidget(overlabel, 6, 0) tool_param_grid.addWidget(overlabel, 10, 0)
tool_param_grid.addWidget(self.iso_overlap_entry, 6, 1) tool_param_grid.addWidget(self.iso_overlap_entry, 10, 1)
# Milling Type Radio Button # Milling Type Radio Button
self.milling_type_label = FCLabel('%s:' % _('Milling Type')) self.milling_type_label = FCLabel('%s:' % _('Milling Type'))
@@ -3495,8 +3653,8 @@ class IsoUI:
) )
self.milling_type_radio.setObjectName("i_milling_type") self.milling_type_radio.setObjectName("i_milling_type")
tool_param_grid.addWidget(self.milling_type_label, 8, 0) tool_param_grid.addWidget(self.milling_type_label, 12, 0)
tool_param_grid.addWidget(self.milling_type_radio, 8, 1) tool_param_grid.addWidget(self.milling_type_radio, 12, 1)
# Isolation Type # Isolation Type
self.iso_type_label = FCLabel('%s:' % _('Isolation Type')) self.iso_type_label = FCLabel('%s:' % _('Isolation Type'))
@@ -3515,8 +3673,8 @@ class IsoUI:
{'label': _('Int'), 'value': 'int'}]) {'label': _('Int'), 'value': 'int'}])
self.iso_type_radio.setObjectName("i_iso_type") self.iso_type_radio.setObjectName("i_iso_type")
tool_param_grid.addWidget(self.iso_type_label, 10, 0) tool_param_grid.addWidget(self.iso_type_label, 14, 0)
tool_param_grid.addWidget(self.iso_type_radio, 10, 1) tool_param_grid.addWidget(self.iso_type_radio, 14, 1)
# ############################################################################################################## # ##############################################################################################################
# Apply to All Parameters Button # Apply to All Parameters Button
@@ -3713,7 +3871,7 @@ class IsoUI:
self.area_shape_label.hide() self.area_shape_label.hide()
self.area_shape_radio.hide() self.area_shape_radio.hide()
FCGridLayout.set_common_column_size([tool_grid, new_tool_grid, tool_param_grid, gen_grid], 0) FCGridLayout.set_common_column_size([tool_grid, new_tool_grid, tool_param_grid, v_grid, gen_grid], 0)
# ############################################################################################################# # #############################################################################################################
# Generate Geometry object # Generate Geometry object

View File

@@ -1915,7 +1915,7 @@ class ToolMilling(AppTool, Excellon):
try: try:
new_cutz = (tooldia - vdia) / (2 * math.tan(math.radians(half_vangle))) new_cutz = (tooldia - vdia) / (2 * math.tan(math.radians(half_vangle)))
except ZeroDivisionError: except ZeroDivisionError:
new_cutz = self.old_cutz new_cutz = 0.0
new_cutz = self.app.dec_format(new_cutz, self.decimals) * -1.0 # this value has to be negative new_cutz = self.app.dec_format(new_cutz, self.decimals) * -1.0 # this value has to be negative
@@ -3996,7 +3996,7 @@ class MillingUI:
self.offset_separator_line = QtWidgets.QFrame() self.offset_separator_line = QtWidgets.QFrame()
self.offset_separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) self.offset_separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
self.offset_separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.offset_separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
param_grid.addWidget(self.offset_separator_line, 7, 0, 1, 2) param_grid.addWidget(self.offset_separator_line, 8, 0, 1, 2)
# Tool Type # Tool Type
self.tool_shape_label = FCLabel('%s:' % _('Shape')) self.tool_shape_label = FCLabel('%s:' % _('Shape'))
@@ -4019,8 +4019,13 @@ class MillingUI:
else: else:
self.tool_shape_combo.setCurrentIndex(idx) self.tool_shape_combo.setCurrentIndex(idx)
param_grid.addWidget(self.tool_shape_label, 8, 0) param_grid.addWidget(self.tool_shape_label, 10, 0)
param_grid.addWidget(self.tool_shape_combo, 8, 1) param_grid.addWidget(self.tool_shape_combo, 10, 1)
# separator_line = QtWidgets.QFrame()
# separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
# separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
# param_grid.addWidget(separator_line, 12, 0, 1, 2)
# Job Type # Job Type
self.job_type_lbl = FCLabel('%s:' % _('Job')) self.job_type_lbl = FCLabel('%s:' % _('Job'))
@@ -4039,8 +4044,8 @@ class MillingUI:
) )
self.job_type_combo.setObjectName('mill_job_type') self.job_type_combo.setObjectName('mill_job_type')
param_grid.addWidget(self.job_type_lbl, 10, 0) param_grid.addWidget(self.job_type_lbl, 14, 0)
param_grid.addWidget(self.job_type_combo, 10, 1) param_grid.addWidget(self.job_type_combo, 14, 1)
# Polish Margin # Polish Margin
self.polish_margin_lbl = FCLabel('%s:' % _('Margin')) self.polish_margin_lbl = FCLabel('%s:' % _('Margin'))
@@ -4052,8 +4057,8 @@ class MillingUI:
self.polish_margin_entry.set_range(-10000.0000, 10000.0000) self.polish_margin_entry.set_range(-10000.0000, 10000.0000)
self.polish_margin_entry.setObjectName("mill_polish_margin") self.polish_margin_entry.setObjectName("mill_polish_margin")
param_grid.addWidget(self.polish_margin_lbl, 12, 0) param_grid.addWidget(self.polish_margin_lbl, 16, 0)
param_grid.addWidget(self.polish_margin_entry, 12, 1) param_grid.addWidget(self.polish_margin_entry, 16, 1)
# Polish Overlap # Polish Overlap
self.polish_over_lbl = FCLabel('%s:' % _('Overlap')) self.polish_over_lbl = FCLabel('%s:' % _('Overlap'))
@@ -4067,8 +4072,8 @@ class MillingUI:
self.polish_over_entry.setSingleStep(0.1) self.polish_over_entry.setSingleStep(0.1)
self.polish_over_entry.setObjectName("mill_polish_overlap") self.polish_over_entry.setObjectName("mill_polish_overlap")
param_grid.addWidget(self.polish_over_lbl, 14, 0) param_grid.addWidget(self.polish_over_lbl, 18, 0)
param_grid.addWidget(self.polish_over_entry, 14, 1) param_grid.addWidget(self.polish_over_entry, 18, 1)
# Polish Method # Polish Method
self.polish_method_lbl = FCLabel('%s:' % _('Method')) self.polish_method_lbl = FCLabel('%s:' % _('Method'))
@@ -4085,8 +4090,8 @@ class MillingUI:
) )
self.polish_method_combo.setObjectName('mill_polish_method') self.polish_method_combo.setObjectName('mill_polish_method')
param_grid.addWidget(self.polish_method_lbl, 16, 0) param_grid.addWidget(self.polish_method_lbl, 20, 0)
param_grid.addWidget(self.polish_method_combo, 16, 1) param_grid.addWidget(self.polish_method_combo, 20, 1)
self.polish_margin_lbl.hide() self.polish_margin_lbl.hide()
self.polish_margin_entry.hide() self.polish_margin_entry.hide()
@@ -4098,7 +4103,7 @@ class MillingUI:
self.job_separator_line = QtWidgets.QFrame() self.job_separator_line = QtWidgets.QFrame()
self.job_separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) self.job_separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
self.job_separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.job_separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
param_grid.addWidget(self.job_separator_line, 18, 0, 1, 2) param_grid.addWidget(self.job_separator_line, 22, 0, 1, 2)
# Tip Dia # Tip Dia
self.tipdialabel = FCLabel('%s:' % _('V-Tip Dia')) self.tipdialabel = FCLabel('%s:' % _('V-Tip Dia'))
@@ -4113,8 +4118,8 @@ class MillingUI:
self.tipdia_entry.setSingleStep(0.1) self.tipdia_entry.setSingleStep(0.1)
self.tipdia_entry.setObjectName("mill_tipdia") self.tipdia_entry.setObjectName("mill_tipdia")
param_grid.addWidget(self.tipdialabel, 20, 0) param_grid.addWidget(self.tipdialabel, 24, 0)
param_grid.addWidget(self.tipdia_entry, 20, 1) param_grid.addWidget(self.tipdia_entry, 24, 1)
# Tip Angle # Tip Angle
self.tipanglelabel = FCLabel('%s:' % _('V-Tip Angle')) self.tipanglelabel = FCLabel('%s:' % _('V-Tip Angle'))
@@ -4130,8 +4135,8 @@ class MillingUI:
self.tipangle_entry.setSingleStep(1) self.tipangle_entry.setSingleStep(1)
self.tipangle_entry.setObjectName("mill_tipangle") self.tipangle_entry.setObjectName("mill_tipangle")
param_grid.addWidget(self.tipanglelabel, 22, 0) param_grid.addWidget(self.tipanglelabel, 26, 0)
param_grid.addWidget(self.tipangle_entry, 22, 1) param_grid.addWidget(self.tipangle_entry, 26, 1)
self.tipdialabel.hide() self.tipdialabel.hide()
self.tipdia_entry.hide() self.tipdia_entry.hide()
@@ -4141,9 +4146,8 @@ class MillingUI:
# Cut Z # Cut Z
self.cutzlabel = FCLabel('%s:' % _('Cut Z')) self.cutzlabel = FCLabel('%s:' % _('Cut Z'))
self.cutzlabel.setToolTip( self.cutzlabel.setToolTip(
_("Drill depth (negative)\n" _("Cutting depth (negative)\n"
"below the copper surface.") "below the copper surface."))
)
self.cutz_entry = FCDoubleSpinner(callback=self.confirmation_message) self.cutz_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.cutz_entry.set_precision(self.decimals) self.cutz_entry.set_precision(self.decimals)
@@ -4153,8 +4157,8 @@ class MillingUI:
self.cutz_entry.setSingleStep(0.1) self.cutz_entry.setSingleStep(0.1)
self.cutz_entry.setObjectName("mill_cutz") self.cutz_entry.setObjectName("mill_cutz")
param_grid.addWidget(self.cutzlabel, 24, 0) param_grid.addWidget(self.cutzlabel, 28, 0)
param_grid.addWidget(self.cutz_entry, 24, 1) param_grid.addWidget(self.cutz_entry, 28, 1)
# Multi-Depth # Multi-Depth
self.mpass_cb = FCCheckBox('%s:' % _("Multi-Depth")) self.mpass_cb = FCCheckBox('%s:' % _("Multi-Depth"))
@@ -4178,8 +4182,8 @@ class MillingUI:
self.mis_mpass_geo = OptionalInputSection(self.mpass_cb, [self.maxdepth_entry]) self.mis_mpass_geo = OptionalInputSection(self.mpass_cb, [self.maxdepth_entry])
param_grid.addWidget(self.mpass_cb, 26, 0) param_grid.addWidget(self.mpass_cb, 30, 0)
param_grid.addWidget(self.maxdepth_entry, 26, 1) param_grid.addWidget(self.maxdepth_entry, 30, 1)
# Travel Z (z_move) # Travel Z (z_move)
self.travelzlabel = FCLabel('%s:' % _('Travel Z')) self.travelzlabel = FCLabel('%s:' % _('Travel Z'))
@@ -4196,8 +4200,8 @@ class MillingUI:
self.travelz_entry.setSingleStep(0.1) self.travelz_entry.setSingleStep(0.1)
self.travelz_entry.setObjectName("mill_travelz") self.travelz_entry.setObjectName("mill_travelz")
param_grid.addWidget(self.travelzlabel, 28, 0) param_grid.addWidget(self.travelzlabel, 32, 0)
param_grid.addWidget(self.travelz_entry, 28, 1) param_grid.addWidget(self.travelz_entry, 32, 1)
# Feedrate X-Y # Feedrate X-Y
self.frxylabel = FCLabel('%s:' % _('Feedrate X-Y')) self.frxylabel = FCLabel('%s:' % _('Feedrate X-Y'))
@@ -4211,8 +4215,8 @@ class MillingUI:
self.xyfeedrate_entry.setSingleStep(0.1) self.xyfeedrate_entry.setSingleStep(0.1)
self.xyfeedrate_entry.setObjectName("mill_feedratexy") self.xyfeedrate_entry.setObjectName("mill_feedratexy")
param_grid.addWidget(self.frxylabel, 30, 0) param_grid.addWidget(self.frxylabel, 34, 0)
param_grid.addWidget(self.xyfeedrate_entry, 30, 1) param_grid.addWidget(self.xyfeedrate_entry, 34, 1)
self.frxylabel.hide() self.frxylabel.hide()
self.xyfeedrate_entry.hide() self.xyfeedrate_entry.hide()
@@ -4231,8 +4235,8 @@ class MillingUI:
self.feedrate_z_entry.setSingleStep(0.1) self.feedrate_z_entry.setSingleStep(0.1)
self.feedrate_z_entry.setObjectName("mill_feedratez") self.feedrate_z_entry.setObjectName("mill_feedratez")
param_grid.addWidget(self.frzlabel, 32, 0) param_grid.addWidget(self.frzlabel, 36, 0)
param_grid.addWidget(self.feedrate_z_entry, 32, 1) param_grid.addWidget(self.feedrate_z_entry, 36, 1)
# Rapid Feedrate # Rapid Feedrate
self.feedrate_rapid_label = FCLabel('%s:' % _('Feedrate Rapids')) self.feedrate_rapid_label = FCLabel('%s:' % _('Feedrate Rapids'))
@@ -4249,8 +4253,8 @@ class MillingUI:
self.feedrate_rapid_entry.setSingleStep(0.1) self.feedrate_rapid_entry.setSingleStep(0.1)
self.feedrate_rapid_entry.setObjectName("mill_fr_rapid") self.feedrate_rapid_entry.setObjectName("mill_fr_rapid")
param_grid.addWidget(self.feedrate_rapid_label, 34, 0) param_grid.addWidget(self.feedrate_rapid_label, 38, 0)
param_grid.addWidget(self.feedrate_rapid_entry, 34, 1) param_grid.addWidget(self.feedrate_rapid_entry, 38, 1)
# default values is to hide # default values is to hide
self.feedrate_rapid_label.hide() self.feedrate_rapid_label.hide()
@@ -4284,8 +4288,8 @@ class MillingUI:
self.extracut_cb.hide() self.extracut_cb.hide()
self.e_cut_entry.hide() self.e_cut_entry.hide()
param_grid.addWidget(self.extracut_cb, 36, 0) param_grid.addWidget(self.extracut_cb, 40, 0)
param_grid.addWidget(self.e_cut_entry, 36, 1) param_grid.addWidget(self.e_cut_entry, 40, 1)
# Spindlespeed # Spindlespeed
self.spindle_label = FCLabel('%s:' % _('Spindle speed')) self.spindle_label = FCLabel('%s:' % _('Spindle speed'))
@@ -4299,8 +4303,8 @@ class MillingUI:
self.spindlespeed_entry.set_step(100) self.spindlespeed_entry.set_step(100)
self.spindlespeed_entry.setObjectName("mill_spindlespeed") self.spindlespeed_entry.setObjectName("mill_spindlespeed")
param_grid.addWidget(self.spindle_label, 38, 0) param_grid.addWidget(self.spindle_label, 42, 0)
param_grid.addWidget(self.spindlespeed_entry, 38, 1) param_grid.addWidget(self.spindlespeed_entry, 42, 1)
# Dwell # Dwell
self.dwell_cb = FCCheckBox('%s:' % _('Dwell')) self.dwell_cb = FCCheckBox('%s:' % _('Dwell'))
@@ -4320,8 +4324,8 @@ class MillingUI:
) )
self.dwelltime_entry.setObjectName("mill_dwelltime") self.dwelltime_entry.setObjectName("mill_dwelltime")
param_grid.addWidget(self.dwell_cb, 40, 0) param_grid.addWidget(self.dwell_cb, 44, 0)
param_grid.addWidget(self.dwelltime_entry, 40, 1) param_grid.addWidget(self.dwelltime_entry, 44, 1)
self.ois_dwell = OptionalInputSection(self.dwell_cb, [self.dwelltime_entry]) self.ois_dwell = OptionalInputSection(self.dwell_cb, [self.dwelltime_entry])

View File

@@ -358,6 +358,10 @@ class FlatCAMDefaults:
"tools_iso_newdia": 0.1, "tools_iso_newdia": 0.1,
"tools_iso_tool_shape": 0, # "C1" "tools_iso_tool_shape": 0, # "C1"
"tools_iso_cutz": -0.07,
"tools_iso_vtipdia": 0.1,
"tools_iso_vtipangle": 30,
"tools_iso_passes": 1, "tools_iso_passes": 1,
"tools_iso_pad_passes": 0, "tools_iso_pad_passes": 0,
"tools_iso_overlap": 10, "tools_iso_overlap": 10,