diff --git a/CHANGELOG.md b/CHANGELOG.md
index bfcfa52a..94531fff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,7 @@ CHANGELOG for FlatCAM beta
- in Etch Compensation Plugin updated the GUI
- small UI updates in other Plugins
- in Align Plugin treated a possible exception DivideByZero
+- in Isolation Plugin updated the GUI
5.09.2021
diff --git a/appGUI/GUIElements.py b/appGUI/GUIElements.py
index 4eb825fa..412ba9c1 100644
--- a/appGUI/GUIElements.py
+++ b/appGUI/GUIElements.py
@@ -1364,8 +1364,9 @@ class FCDoubleSpinner(QtWidgets.QDoubleSpinBox):
# by default don't allow the minus sign to be entered as the default for QDoubleSpinBox is the positive range
# between 0.00 and 99.00 (2 decimals)
- self.lineEdit().setValidator(
- QtGui.QRegularExpressionValidator(QtCore.QRegularExpression("\+?[0-9]*[.,]?[0-9]{%d}" % self.decimals()), self))
+ validator = QtGui.QRegularExpressionValidator(
+ QtCore.QRegularExpression("\+?[0-9]*[.,]?[0-9]{%d}" % self.decimals()), self)
+ self.lineEdit().setValidator(validator)
if suffix:
self.setSuffix(' %s' % str(suffix))
@@ -1383,7 +1384,8 @@ class FCDoubleSpinner(QtWidgets.QDoubleSpinBox):
self.menu = None
if policy:
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored,
+ QtWidgets.QSizePolicy.Policy.Preferred)
self.setSizePolicy(sizePolicy)
def on_edit_finished(self):
diff --git a/appPlugins/ToolIsolation.py b/appPlugins/ToolIsolation.py
index 3c1a7cae..4d3b27a0 100644
--- a/appPlugins/ToolIsolation.py
+++ b/appPlugins/ToolIsolation.py
@@ -10,7 +10,7 @@ from PyQt6 import QtWidgets, QtCore, QtGui
from appTool import AppTool
from appGUI.GUIElements import FCCheckBox, FCDoubleSpinner, RadioSet, FCTable, FCButton, \
FCComboBox, OptionalInputSection, FCSpinner, FCLabel, FCInputDialogSpinnerButton, FCComboBox2, \
- VerticalScrollArea, FCGridLayout
+ VerticalScrollArea, FCGridLayout, FCFrame
from appParsers.ParseGerber import Gerber
from camlib import grace
@@ -454,14 +454,7 @@ class ToolIsolation(AppTool, Gerber):
""")
# Add Tool section
- self.ui.tool_sel_label.hide()
- self.ui.new_tooldia_lbl.hide()
- self.ui.new_tooldia_entry.hide()
- self.ui.find_optimal_button.hide()
- self.ui.search_and_add_btn.hide()
- self.ui.addtool_from_db_btn.hide()
- self.ui.deltool_btn.hide()
- self.ui.add_tool_separator_line.hide()
+ self.ui.add_tool_frame.hide()
# Tool parameters section
if self.iso_tools:
@@ -478,7 +471,6 @@ class ToolIsolation(AppTool, Gerber):
self.ui.iso_type_radio.hide()
# All param section
- self.ui.all_param_separator_line2.hide()
self.ui.apply_param_to_all.hide()
# Common Parameters
@@ -495,6 +487,18 @@ class ToolIsolation(AppTool, Gerber):
self.ui.select_label.hide()
self.ui.select_combo.hide()
+ # make sure that on hide is selected an option that does not display child widgets
+ self.ui.select_combo.set_value(0)
+
+ self.ui.reference_combo_type_label.hide()
+ self.ui.reference_combo_type.hide()
+ self.ui.reference_combo.hide()
+ self.ui.poly_int_cb.hide()
+ self.ui.sel_all_btn.hide()
+ self.ui.clear_all_btn.hide()
+ self.ui.area_shape_label.hide()
+ self.ui.area_shape_radio.hide()
+
# Context Menu section
self.ui.tools_table.removeContextMenu()
else:
@@ -507,14 +511,7 @@ class ToolIsolation(AppTool, Gerber):
""")
# Add Tool section
- self.ui.tool_sel_label.show()
- self.ui.new_tooldia_lbl.show()
- self.ui.new_tooldia_entry.show()
- self.ui.find_optimal_button.show()
- self.ui.search_and_add_btn.show()
- self.ui.addtool_from_db_btn.show()
- self.ui.deltool_btn.show()
- self.ui.add_tool_separator_line.show()
+ self.ui.add_tool_frame.show()
# Tool parameters section
app_defaults = self.app.defaults
@@ -533,7 +530,6 @@ class ToolIsolation(AppTool, Gerber):
self.ui.iso_type_radio.show()
# All param section
- self.ui.all_param_separator_line2.show()
self.ui.apply_param_to_all.show()
# Common Parameters
@@ -3160,11 +3156,11 @@ class IsoUI:
self.level.setCheckable(True)
self.title_box.addWidget(self.level)
- self.obj_combo_label = FCLabel('%s:' % _("GERBER"))
- self.obj_combo_label.setToolTip(
- _("Gerber object for isolation routing.")
- )
-
+ # #############################################################################################################
+ # Source Object for Isolation
+ # #############################################################################################################
+ self.obj_combo_label = FCLabel('%s' % _("Source Object"))
+ self.obj_combo_label.setToolTip(_("Gerber object for isolation routing."))
self.tools_box.addWidget(self.obj_combo_label)
# #############################################################################################################
@@ -3178,21 +3174,32 @@ class IsoUI:
self.tools_box.addWidget(self.object_combo)
- separator_line = QtWidgets.QFrame()
- separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
- separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
- self.tools_box.addWidget(separator_line)
+ # separator_line = QtWidgets.QFrame()
+ # separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
+ # separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
+ # self.tools_box.addWidget(separator_line)
- # ### Tools ## ##
- self.tools_table_label = FCLabel('%s' % _('Tools Table'))
+ # #############################################################################################################
+ # Tool Table Frame
+ # #############################################################################################################
+ self.tools_table_label = FCLabel('%s' % _('Tools Table'))
self.tools_table_label.setToolTip(
_("Tools pool from which the algorithm\n"
"will pick the ones used for copper clearing.")
)
self.tools_box.addWidget(self.tools_table_label)
+ tt_frame = FCFrame()
+ self.tools_box.addWidget(tt_frame)
+
+ # Grid Layout
+ grid1 = FCGridLayout(v_spacing=5, h_spacing=3)
+ grid1.setColumnStretch(0, 0)
+ grid1.setColumnStretch(1, 1)
+ tt_frame.setLayout(grid1)
+
self.tools_table = FCTable(drag_drop=True)
- self.tools_box.addWidget(self.tools_table)
+ grid1.addWidget(self.tools_table, 0, 0, 1, 2)
self.tools_table.setColumnCount(4)
# 3rd column is reserved (and hidden) for the tool ID
@@ -3214,11 +3221,6 @@ class IsoUI:
_("Tool Diameter. Its value\n"
"is the cut width into the material."))
- grid1 = FCGridLayout(v_spacing=5, h_spacing=3)
- grid1.setColumnStretch(0, 0)
- grid1.setColumnStretch(1, 1)
- self.tools_box.addLayout(grid1)
-
# Tool order
self.order_label = FCLabel('%s:' % _('Tool order'))
self.order_label.setToolTip(_("This set the way that the tools in the tools table are used.\n"
@@ -3232,42 +3234,46 @@ class IsoUI:
{'label': _('Forward'), 'value': 'fwd'},
{'label': _('Reverse'), 'value': 'rev'}])
- grid1.addWidget(self.order_label, 1, 0)
- grid1.addWidget(self.order_radio, 1, 1)
-
- separator_line = QtWidgets.QFrame()
- separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
- separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
- grid1.addWidget(separator_line, 2, 0, 1, 2)
+ grid1.addWidget(self.order_label, 2, 0)
+ grid1.addWidget(self.order_radio, 2, 1)
# #############################################################
# ############### Tool adding #################################
# #############################################################
+ self.add_tool_frame = QtWidgets.QFrame()
+ self.add_tool_frame.setContentsMargins(0, 0, 0, 0)
+ grid1.addWidget(self.add_tool_frame, 6, 0, 1, 2)
- self.grid3 = FCGridLayout(v_spacing=5, h_spacing=3)
- self.grid3.setColumnStretch(0, 0)
- self.grid3.setColumnStretch(1, 1)
- self.tools_box.addLayout(self.grid3)
+ grid_add_tool = FCGridLayout(v_spacing=5, h_spacing=3)
+ grid_add_tool.setColumnStretch(0, 0)
+ grid_add_tool.setColumnStretch(1, 1)
+ grid_add_tool.setContentsMargins(0, 0, 0, 0)
+ self.add_tool_frame.setLayout(grid_add_tool)
+
+ separator_line = QtWidgets.QFrame()
+ separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
+ separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
+ grid_add_tool.addWidget(separator_line, 0, 0, 1, 2)
self.tool_sel_label = FCLabel('%s' % _('Add from DB'))
- self.grid3.addWidget(self.tool_sel_label, 0, 0, 1, 2)
+ grid_add_tool.addWidget(self.tool_sel_label, 2, 0, 1, 2)
# ### Tool Diameter ####
- self.new_tooldia_lbl = FCLabel('%s:' % _('Tool Dia'))
+ self.new_tooldia_lbl = FCLabel('%s: ' % _('Tool Dia'))
self.new_tooldia_lbl.setToolTip(
_("Diameter for the new tool")
)
- self.grid3.addWidget(self.new_tooldia_lbl, 2, 0)
+ grid_add_tool.addWidget(self.new_tooldia_lbl, 4, 0)
new_tool_lay = QtWidgets.QHBoxLayout()
+ grid_add_tool.addLayout(new_tool_lay, 4, 1)
+ # Tool diameter entry
self.new_tooldia_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.new_tooldia_entry.set_precision(self.decimals)
self.new_tooldia_entry.set_range(-10000.0000, 10000.0000)
self.new_tooldia_entry.setObjectName("i_new_tooldia")
- new_tool_lay.addWidget(self.new_tooldia_entry)
-
# Find Optimal Tooldia
self.find_optimal_button = QtWidgets.QToolButton()
self.find_optimal_button.setText(_('Optimal'))
@@ -3278,17 +3284,16 @@ class IsoUI:
"to do a complete isolation.")
)
+ new_tool_lay.addWidget(self.new_tooldia_entry)
new_tool_lay.addWidget(self.find_optimal_button)
- self.grid3.addLayout(new_tool_lay, 2, 1)
-
# #############################################################################################################
# ################################ Button Grid ###########################################################
# #############################################################################################################
button_grid = FCGridLayout(v_spacing=5, h_spacing=3)
button_grid.setColumnStretch(0, 1)
button_grid.setColumnStretch(1, 0)
- self.grid3.addLayout(button_grid, 7, 0, 1, 2)
+ grid_add_tool.addLayout(button_grid, 6, 0, 1, 2)
self.search_and_add_btn = FCButton(_('Search and Add'))
self.search_and_add_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/plus16.png'))
@@ -3324,11 +3329,9 @@ class IsoUI:
button_grid.addWidget(self.deltool_btn, 0, 1, 2, 1)
# #############################################################################################################
- self.add_tool_separator_line = QtWidgets.QFrame()
- self.add_tool_separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
- self.add_tool_separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
- self.grid3.addWidget(self.add_tool_separator_line, 9, 0, 1, 2)
-
+ # #############################################################################################################
+ # ALL Parameters Frame
+ # #############################################################################################################
self.tool_data_label = FCLabel(
"%s: %s %d" % (_('Parameters for'), _("Tool"), int(1)))
self.tool_data_label.setToolTip(
@@ -3337,7 +3340,28 @@ class IsoUI:
"Each tool store it's own set of such data."
)
)
- self.grid3.addWidget(self.tool_data_label, 11, 0, 1, 2)
+ self.tools_box.addWidget(self.tool_data_label)
+
+ self.param_frame = QtWidgets.QFrame()
+ self.param_frame.setContentsMargins(0, 0, 0, 0)
+ self.tools_box.addWidget(self.param_frame)
+
+ self.tool_params_box = QtWidgets.QVBoxLayout()
+ self.tool_params_box.setContentsMargins(0, 0, 0, 0)
+ self.param_frame.setLayout(self.tool_params_box)
+
+ # #############################################################################################################
+ # Tool Parameters Frame
+ # #############################################################################################################
+
+ tp_frame = FCFrame()
+ self.tool_params_box.addWidget(tp_frame)
+
+ # Grid Layout
+ grid2 = FCGridLayout(v_spacing=5, h_spacing=3)
+ grid2.setColumnStretch(0, 0)
+ grid2.setColumnStretch(1, 1)
+ tp_frame.setLayout(grid2)
# Tool Type
self.tool_shape_label = FCLabel('%s:' % _('Shape'))
@@ -3360,8 +3384,8 @@ class IsoUI:
else:
self.tool_shape_combo.setCurrentIndex(idx)
- self.grid3.addWidget(self.tool_shape_label, 13, 0)
- self.grid3.addWidget(self.tool_shape_combo, 13, 1)
+ grid2.addWidget(self.tool_shape_label, 0, 0)
+ grid2.addWidget(self.tool_shape_combo, 0, 1)
# Passes
passlabel = FCLabel('%s:' % _('Passes'))
@@ -3373,8 +3397,8 @@ class IsoUI:
self.passes_entry.set_range(1, 999)
self.passes_entry.setObjectName("i_passes")
- self.grid3.addWidget(passlabel, 15, 0)
- self.grid3.addWidget(self.passes_entry, 15, 1)
+ grid2.addWidget(passlabel, 2, 0)
+ grid2.addWidget(self.passes_entry, 2, 1)
# Pad Passes
padpasslabel = FCLabel('%s:' % _('Pad Passes'))
@@ -3386,8 +3410,8 @@ class IsoUI:
self.pad_passes_entry.set_range(0, 999)
self.pad_passes_entry.setObjectName("i_pad_passes")
- self.grid3.addWidget(padpasslabel, 16, 0)
- self.grid3.addWidget(self.pad_passes_entry, 16, 1, 1, 2)
+ grid2.addWidget(padpasslabel, 4, 0)
+ grid2.addWidget(self.pad_passes_entry, 4, 1, 1, 2)
# Overlap Entry
overlabel = FCLabel('%s:' % _('Overlap'))
@@ -3401,8 +3425,8 @@ class IsoUI:
self.iso_overlap_entry.setSingleStep(0.1)
self.iso_overlap_entry.setObjectName("i_overlap")
- self.grid3.addWidget(overlabel, 17, 0)
- self.grid3.addWidget(self.iso_overlap_entry, 17, 1)
+ grid2.addWidget(overlabel, 6, 0)
+ grid2.addWidget(self.iso_overlap_entry, 6, 1)
# Milling Type Radio Button
self.milling_type_label = FCLabel('%s:' % _('Milling Type'))
@@ -3421,8 +3445,8 @@ class IsoUI:
)
self.milling_type_radio.setObjectName("i_milling_type")
- self.grid3.addWidget(self.milling_type_label, 19, 0)
- self.grid3.addWidget(self.milling_type_radio, 19, 1)
+ grid2.addWidget(self.milling_type_label, 8, 0)
+ grid2.addWidget(self.milling_type_radio, 8, 1)
# Isolation Type
self.iso_type_label = FCLabel('%s:' % _('Isolation Type'))
@@ -3441,33 +3465,37 @@ class IsoUI:
{'label': _('Int'), 'value': 'int'}])
self.iso_type_radio.setObjectName("i_iso_type")
- self.grid3.addWidget(self.iso_type_label, 21, 0)
- self.grid3.addWidget(self.iso_type_radio, 21, 1)
-
- separator_line = QtWidgets.QFrame()
- separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
- separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
- self.grid3.addWidget(separator_line, 23, 0, 1, 2)
+ grid2.addWidget(self.iso_type_label, 10, 0)
+ grid2.addWidget(self.iso_type_radio, 10, 1)
+ # ##############################################################################################################
+ # Apply to All Parameters Button
+ # ##############################################################################################################
self.apply_param_to_all = FCButton(_("Apply parameters to all tools"))
self.apply_param_to_all.setIcon(QtGui.QIcon(self.app.resource_location + '/param_all32.png'))
self.apply_param_to_all.setToolTip(
_("The parameters in the current form will be applied\n"
"on all the tools from the Tool Table.")
)
- self.grid3.addWidget(self.apply_param_to_all, 25, 0, 1, 2)
-
- self.all_param_separator_line2 = QtWidgets.QFrame()
- self.all_param_separator_line2.setFrameShape(QtWidgets.QFrame.Shape.HLine)
- self.all_param_separator_line2.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
- self.grid3.addWidget(self.all_param_separator_line2, 27, 0, 1, 2)
+ self.tool_params_box.addWidget(self.apply_param_to_all)
+ # #############################################################################################################
+ # COMMON PARAMETERS
+ # #############################################################################################################
# General Parameters
- self.gen_param_label = FCLabel('%s' % _("Common Parameters"))
+ self.gen_param_label = FCLabel('%s' % _("Common Parameters"))
self.gen_param_label.setToolTip(
_("Parameters that are common for all tools.")
)
- self.grid3.addWidget(self.gen_param_label, 29, 0, 1, 2)
+ self.tool_params_box.addWidget(self.gen_param_label)
+
+ gp_frame = FCFrame()
+ self.tool_params_box.addWidget(gp_frame)
+
+ grid3 = FCGridLayout(v_spacing=5, h_spacing=3)
+ grid3.setColumnStretch(0, 0)
+ grid3.setColumnStretch(1, 1)
+ gp_frame.setLayout(grid3)
# Rest Machining
self.rest_cb = FCCheckBox('%s' % _("Rest"))
@@ -3482,7 +3510,7 @@ class IsoUI:
"If not checked, use the standard algorithm.")
)
- self.grid3.addWidget(self.rest_cb, 31, 0)
+ grid3.addWidget(self.rest_cb, 0, 0)
# Force isolation even if the interiors are not isolated
self.forced_rest_iso_cb = FCCheckBox(_("Forced Rest"))
@@ -3492,7 +3520,7 @@ class IsoUI:
"Works when 'rest machining' is used.")
)
- self.grid3.addWidget(self.forced_rest_iso_cb, 31, 1)
+ grid3.addWidget(self.forced_rest_iso_cb, 0, 1)
# Combine All Passes
self.combine_passes_cb = FCCheckBox(label=_('Combine'))
@@ -3501,7 +3529,7 @@ class IsoUI:
)
self.combine_passes_cb.setObjectName("i_combine")
- self.grid3.addWidget(self.combine_passes_cb, 33, 0, 1, 2)
+ grid3.addWidget(self.combine_passes_cb, 2, 0, 1, 2)
# Check Tool validity
self.valid_cb = FCCheckBox(label=_('Check validity'))
@@ -3511,7 +3539,7 @@ class IsoUI:
)
self.valid_cb.setObjectName("i_check")
- self.grid3.addWidget(self.valid_cb, 35, 0, 1, 2)
+ grid3.addWidget(self.valid_cb, 4, 0, 1, 2)
# Exception Areas
self.except_cb = FCCheckBox(label=_('Except'))
@@ -3519,7 +3547,7 @@ class IsoUI:
"by checking this, the area of the object below\n"
"will be subtracted from the isolation geometry."))
self.except_cb.setObjectName("i_except")
- self.grid3.addWidget(self.except_cb, 37, 0)
+ grid3.addWidget(self.except_cb, 6, 0)
# Type of object to be excepted
self.type_excobj_radio = RadioSet([{'label': _("Geometry"), 'value': 'geometry'},
@@ -3531,7 +3559,7 @@ class IsoUI:
"of objects that will populate the 'Object' combobox.")
)
- self.grid3.addWidget(self.type_excobj_radio, 37, 1)
+ grid3.addWidget(self.type_excobj_radio, 6, 1)
# The object to be excepted
self.exc_obj_combo = FCComboBox()
@@ -3543,7 +3571,7 @@ class IsoUI:
self.exc_obj_combo.is_last = True
self.exc_obj_combo.obj_type = "gerber"
- self.grid3.addWidget(self.exc_obj_combo, 39, 0, 1, 2)
+ grid3.addWidget(self.exc_obj_combo, 8, 0, 1, 2)
self.e_ois = OptionalInputSection(self.except_cb,
[
@@ -3566,8 +3594,8 @@ class IsoUI:
)
self.select_combo.setObjectName("i_selection")
- self.grid3.addWidget(self.select_label, 41, 0)
- self.grid3.addWidget(self.select_combo, 41, 1)
+ grid3.addWidget(self.select_label, 10, 0)
+ grid3.addWidget(self.select_combo, 10, 1)
# Reference Type
self.reference_combo_type_label = FCLabel('%s:' % _("Type"))
@@ -3575,15 +3603,15 @@ class IsoUI:
self.reference_combo_type = FCComboBox2()
self.reference_combo_type.addItems([_("Gerber"), _("Excellon"), _("Geometry")])
- self.grid3.addWidget(self.reference_combo_type_label, 43, 0)
- self.grid3.addWidget(self.reference_combo_type, 43, 1)
+ grid3.addWidget(self.reference_combo_type_label, 12, 0)
+ grid3.addWidget(self.reference_combo_type, 12, 1)
self.reference_combo = FCComboBox()
self.reference_combo.setModel(self.app.collection)
self.reference_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
self.reference_combo.is_last = True
- self.grid3.addWidget(self.reference_combo, 45, 0, 1, 2)
+ grid3.addWidget(self.reference_combo, 14, 0, 1, 2)
self.reference_combo.hide()
self.reference_combo_type.hide()
@@ -3596,7 +3624,7 @@ class IsoUI:
"(holes in the polygon).")
)
- self.grid3.addWidget(self.poly_int_cb, 47, 0)
+ grid3.addWidget(self.poly_int_cb, 16, 0)
self.poly_int_cb.hide()
@@ -3620,7 +3648,7 @@ class IsoUI:
sel_hlay.addWidget(self.sel_all_btn)
sel_hlay.addWidget(self.clear_all_btn)
- self.grid3.addLayout(sel_hlay, 49, 0, 1, 2)
+ grid3.addLayout(sel_hlay, 18, 0, 1, 2)
# Area Selection shape
self.area_shape_label = FCLabel('%s:' % _("Shape"))
@@ -3631,17 +3659,15 @@ class IsoUI:
self.area_shape_radio = RadioSet([{'label': _("Square"), 'value': 'square'},
{'label': _("Polygon"), 'value': 'polygon'}])
- self.grid3.addWidget(self.area_shape_label, 51, 0)
- self.grid3.addWidget(self.area_shape_radio, 51, 1)
+ grid3.addWidget(self.area_shape_label, 20, 0)
+ grid3.addWidget(self.area_shape_radio, 20, 1)
self.area_shape_label.hide()
self.area_shape_radio.hide()
- separator_line = QtWidgets.QFrame()
- separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
- separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
- self.grid3.addWidget(separator_line, 53, 0, 1, 2)
-
+ # #############################################################################################################
+ # Generate Geometry object
+ # #############################################################################################################
self.generate_iso_button = FCButton("%s" % _("Generate Geometry"))
self.generate_iso_button.setIcon(QtGui.QIcon(self.app.resource_location + '/geometry32.png'))
self.generate_iso_button.setStyleSheet("""
@@ -3672,7 +3698,7 @@ class IsoUI:
)
self.tools_box.addWidget(self.create_buffer_button)
- self.tools_box.addStretch()
+ self.tools_box.addStretch(1)
# ## Reset Tool
self.reset_button = FCButton(_("Reset Tool"))
diff --git a/appPlugins/ToolMilling.py b/appPlugins/ToolMilling.py
index d9c235da..c42ec23f 100644
--- a/appPlugins/ToolMilling.py
+++ b/appPlugins/ToolMilling.py
@@ -3590,7 +3590,6 @@ class MillingUI:
# #############################################################################################################
# Tool Table Frame
# #############################################################################################################
- # ### Tools ####
# Grid Layout
grid_title_tool_table = FCGridLayout(v_spacing=5, h_spacing=3)
@@ -3775,7 +3774,9 @@ class MillingUI:
self.order_label.hide()
self.order_radio.hide()
+ # #############################################################################################################
# ADD TOOLS FOR GEOMETRY OBJECT
+ # #############################################################################################################
self.add_tool_frame = QtWidgets.QFrame()
self.add_tool_frame.setContentsMargins(0, 0, 0, 0)
grid1.addWidget(self.add_tool_frame, 6, 0, 1, 2)
@@ -3849,7 +3850,6 @@ class MillingUI:
# #############################################################################################################
# ALL Parameters Frame
# #############################################################################################################
-
self.tool_data_label = FCLabel(
"%s: %s %d" % (_('Parameters for'), _("Tool"), int(1)))
self.tool_data_label.setToolTip(
@@ -4294,7 +4294,9 @@ class MillingUI:
self.ois_dwell = OptionalInputSection(self.dwell_cb, [self.dwelltime_entry])
+ # ##############################################################################################################
# Apply to All Parameters Button
+ # ##############################################################################################################
self.apply_param_to_all = FCButton(_("Apply parameters to all tools"))
self.apply_param_to_all.setIcon(QtGui.QIcon(self.app.resource_location + '/param_all32.png'))
self.apply_param_to_all.setToolTip(
@@ -4548,6 +4550,9 @@ class MillingUI:
# -------------------------- EXCLUSION AREAS END -------------------------------------------------------------
# ------------------------------------------------------------------------------------------------------------
+ # #############################################################################################################
+ # Generate CNC Job object
+ # #############################################################################################################
self.generate_cnc_button = QtWidgets.QPushButton(_('Generate CNCJob object'))
self.generate_cnc_button.setIcon(QtGui.QIcon(self.app.resource_location + '/cnc16.png'))
self.generate_cnc_button.setToolTip(