- started the work in adding to Isolation Plugin a new feature to extra isolate the pads
This commit is contained in:
@@ -12,6 +12,7 @@ CHANGELOG for FlatCAM beta
|
|||||||
- some cleaning up in the Preferences
|
- some cleaning up in the Preferences
|
||||||
- cleaned up the Geometry and Gerber object classes
|
- cleaned up the Geometry and Gerber object classes
|
||||||
- more cleanup in Isolation Plugin
|
- more cleanup in Isolation Plugin
|
||||||
|
- started the work in adding to Isolation Plugin a new feature to extra isolate the pads
|
||||||
|
|
||||||
18.08.2021
|
18.08.2021
|
||||||
|
|
||||||
|
|||||||
@@ -286,6 +286,7 @@ class PreferencesUIManager:
|
|||||||
|
|
||||||
"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_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_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,
|
||||||
"tools_iso_milling_type": self.ui.plugin_eng_pref_form.tools_iso_group.milling_type_radio,
|
"tools_iso_milling_type": self.ui.plugin_eng_pref_form.tools_iso_group.milling_type_radio,
|
||||||
"tools_iso_isotype": self.ui.plugin_eng_pref_form.tools_iso_group.iso_type_radio,
|
"tools_iso_isotype": self.ui.plugin_eng_pref_form.tools_iso_group.iso_type_radio,
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
"In application units.")
|
"In application units.")
|
||||||
)
|
)
|
||||||
|
|
||||||
grid0.addWidget(cutzlabel, 10, 0)
|
grid0.addWidget(cutzlabel, 6, 0)
|
||||||
grid0.addWidget(self.cutz_entry, 10, 1, 1, 2)
|
grid0.addWidget(self.cutz_entry, 6, 1, 1, 2)
|
||||||
|
|
||||||
# New Diameter
|
# New Diameter
|
||||||
self.newdialabel = FCLabel('%s:' % _('New Dia'))
|
self.newdialabel = FCLabel('%s:' % _('New Dia'))
|
||||||
@@ -91,15 +91,15 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
self.newdia_entry.set_range(0.0001, 10000.0000)
|
self.newdia_entry.set_range(0.0001, 10000.0000)
|
||||||
self.newdia_entry.setSingleStep(0.1)
|
self.newdia_entry.setSingleStep(0.1)
|
||||||
|
|
||||||
grid0.addWidget(self.newdialabel, 12, 0)
|
grid0.addWidget(self.newdialabel, 8, 0)
|
||||||
grid0.addWidget(self.newdia_entry, 12, 1, 1, 2)
|
grid0.addWidget(self.newdia_entry, 8, 1, 1, 2)
|
||||||
|
|
||||||
separator_line = QtWidgets.QFrame()
|
separator_line = QtWidgets.QFrame()
|
||||||
separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
|
separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
|
||||||
separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
|
separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
|
||||||
grid0.addWidget(separator_line, 14, 0, 1, 3)
|
grid0.addWidget(separator_line, 10, 0, 1, 3)
|
||||||
|
|
||||||
# Tool Type
|
# Shape
|
||||||
tool_shape_label = FCLabel('%s:' % _('Shape'))
|
tool_shape_label = FCLabel('%s:' % _('Shape'))
|
||||||
tool_shape_label.setToolTip(
|
tool_shape_label.setToolTip(
|
||||||
_("Tool Shape. \n"
|
_("Tool Shape. \n"
|
||||||
@@ -110,11 +110,10 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.tool_shape_combo = FCComboBox2(policy=False)
|
self.tool_shape_combo = FCComboBox2(policy=False)
|
||||||
self.tool_shape_combo.setObjectName('i_tool_shape')
|
|
||||||
self.tool_shape_combo.addItems(["C1", "C2", "C3", "C4", "B", "V"])
|
self.tool_shape_combo.addItems(["C1", "C2", "C3", "C4", "B", "V"])
|
||||||
|
|
||||||
grid0.addWidget(tool_shape_label, 16, 0)
|
grid0.addWidget(tool_shape_label, 12, 0)
|
||||||
grid0.addWidget(self.tool_shape_combo, 16, 1, 1, 2)
|
grid0.addWidget(self.tool_shape_combo, 12, 1, 1, 2)
|
||||||
|
|
||||||
# Passes
|
# Passes
|
||||||
passlabel = FCLabel('%s:' % _('Passes'))
|
passlabel = FCLabel('%s:' % _('Passes'))
|
||||||
@@ -124,10 +123,21 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
)
|
)
|
||||||
self.passes_entry = FCSpinner()
|
self.passes_entry = FCSpinner()
|
||||||
self.passes_entry.set_range(1, 999)
|
self.passes_entry.set_range(1, 999)
|
||||||
self.passes_entry.setObjectName("i_passes")
|
|
||||||
|
|
||||||
grid0.addWidget(passlabel, 18, 0)
|
grid0.addWidget(passlabel, 14, 0)
|
||||||
grid0.addWidget(self.passes_entry, 18, 1, 1, 2)
|
grid0.addWidget(self.passes_entry, 14, 1, 1, 2)
|
||||||
|
|
||||||
|
# Pad Passes
|
||||||
|
padpasslabel = FCLabel('%s:' % _('Pad Passes'))
|
||||||
|
padpasslabel.setToolTip(
|
||||||
|
_("Width of the extra isolation gap for pads only,\n"
|
||||||
|
"in number (integer) of tool widths.")
|
||||||
|
)
|
||||||
|
self.pad_passes_entry = FCSpinner()
|
||||||
|
self.pad_passes_entry.set_range(0, 999)
|
||||||
|
|
||||||
|
grid0.addWidget(padpasslabel, 16, 0)
|
||||||
|
grid0.addWidget(self.pad_passes_entry, 16, 1, 1, 2)
|
||||||
|
|
||||||
# Overlap Entry
|
# Overlap Entry
|
||||||
overlabel = FCLabel('%s:' % _('Overlap'))
|
overlabel = FCLabel('%s:' % _('Overlap'))
|
||||||
@@ -139,7 +149,6 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
self.overlap_entry.setWrapping(True)
|
self.overlap_entry.setWrapping(True)
|
||||||
self.overlap_entry.set_range(0.0000, 99.9999)
|
self.overlap_entry.set_range(0.0000, 99.9999)
|
||||||
self.overlap_entry.setSingleStep(0.1)
|
self.overlap_entry.setSingleStep(0.1)
|
||||||
self.overlap_entry.setObjectName("i_overlap")
|
|
||||||
|
|
||||||
grid0.addWidget(overlabel, 20, 0)
|
grid0.addWidget(overlabel, 20, 0)
|
||||||
grid0.addWidget(self.overlap_entry, 20, 1, 1, 2)
|
grid0.addWidget(self.overlap_entry, 20, 1, 1, 2)
|
||||||
@@ -178,7 +187,6 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
self.iso_type_radio = RadioSet([{'label': _('Full'), 'value': 'full'},
|
self.iso_type_radio = RadioSet([{'label': _('Full'), 'value': 'full'},
|
||||||
{'label': _('Ext'), 'value': 'ext'},
|
{'label': _('Ext'), 'value': 'ext'},
|
||||||
{'label': _('Int'), 'value': 'int'}])
|
{'label': _('Int'), 'value': 'int'}])
|
||||||
self.iso_type_radio.setObjectName("i_type")
|
|
||||||
|
|
||||||
grid0.addWidget(self.iso_type_label, 24, 0)
|
grid0.addWidget(self.iso_type_label, 24, 0)
|
||||||
grid0.addWidget(self.iso_type_radio, 24, 1, 1, 2)
|
grid0.addWidget(self.iso_type_radio, 24, 1, 1, 2)
|
||||||
@@ -190,7 +198,6 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
|
|
||||||
# Rest machining CheckBox
|
# Rest machining CheckBox
|
||||||
self.rest_cb = FCCheckBox('%s' % _("Rest"))
|
self.rest_cb = FCCheckBox('%s' % _("Rest"))
|
||||||
self.rest_cb.setObjectName("i_rest_machining")
|
|
||||||
self.rest_cb.setToolTip(
|
self.rest_cb.setToolTip(
|
||||||
_("If checked, use 'rest machining'.\n"
|
_("If checked, use 'rest machining'.\n"
|
||||||
"Basically it will process copper outside PCB features,\n"
|
"Basically it will process copper outside PCB features,\n"
|
||||||
@@ -208,7 +215,6 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
self.combine_passes_cb.setToolTip(
|
self.combine_passes_cb.setToolTip(
|
||||||
_("Combine all passes into one object")
|
_("Combine all passes into one object")
|
||||||
)
|
)
|
||||||
self.combine_passes_cb.setObjectName("i_combine")
|
|
||||||
|
|
||||||
grid0.addWidget(self.combine_passes_cb, 28, 1)
|
grid0.addWidget(self.combine_passes_cb, 28, 1)
|
||||||
|
|
||||||
@@ -217,7 +223,6 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
self.except_cb.setToolTip(_("When the isolation geometry is generated,\n"
|
self.except_cb.setToolTip(_("When the isolation geometry is generated,\n"
|
||||||
"by checking this, the area of the object below\n"
|
"by checking this, the area of the object below\n"
|
||||||
"will be subtracted from the isolation geometry."))
|
"will be subtracted from the isolation geometry."))
|
||||||
self.except_cb.setObjectName("i_except")
|
|
||||||
grid0.addWidget(self.except_cb, 28, 2)
|
grid0.addWidget(self.except_cb, 28, 2)
|
||||||
|
|
||||||
# Check Tool validity
|
# Check Tool validity
|
||||||
@@ -226,7 +231,6 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
_("If checked then the tools diameters are verified\n"
|
_("If checked then the tools diameters are verified\n"
|
||||||
"if they will provide a complete isolation.")
|
"if they will provide a complete isolation.")
|
||||||
)
|
)
|
||||||
self.valid_cb.setObjectName("i_check")
|
|
||||||
|
|
||||||
grid0.addWidget(self.valid_cb, 30, 0, 1, 3)
|
grid0.addWidget(self.valid_cb, 30, 0, 1, 3)
|
||||||
|
|
||||||
@@ -243,7 +247,6 @@ class ToolsISOPrefGroupUI(OptionsGroupUI):
|
|||||||
self.select_combo.addItems(
|
self.select_combo.addItems(
|
||||||
[_("All"), _("Area Selection"), _("Polygon Selection"), _("Reference Object")]
|
[_("All"), _("Area Selection"), _("Polygon Selection"), _("Reference Object")]
|
||||||
)
|
)
|
||||||
self.select_combo.setObjectName("i_selection")
|
|
||||||
|
|
||||||
grid0.addWidget(self.select_label, 32, 0)
|
grid0.addWidget(self.select_label, 32, 0)
|
||||||
grid0.addWidget(self.select_combo, 32, 1, 1, 2)
|
grid0.addWidget(self.select_combo, 32, 1, 1, 2)
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ 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_iso_passes": self.ui.passes_entry,
|
"tools_iso_passes": self.ui.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,
|
||||||
"tools_iso_milling_type": self.ui.milling_type_radio,
|
"tools_iso_milling_type": self.ui.milling_type_radio,
|
||||||
"tools_iso_combine": self.ui.combine_passes_cb,
|
"tools_iso_combine": self.ui.combine_passes_cb,
|
||||||
@@ -127,6 +128,7 @@ class ToolIsolation(AppTool, Gerber):
|
|||||||
self.name2option = {
|
self.name2option = {
|
||||||
"i_tool_shape": "tools_mill_tool_shape",
|
"i_tool_shape": "tools_mill_tool_shape",
|
||||||
"i_passes": "tools_iso_passes",
|
"i_passes": "tools_iso_passes",
|
||||||
|
"i_pad_passes": "tools_iso_pad_passes",
|
||||||
"i_overlap": "tools_iso_overlap",
|
"i_overlap": "tools_iso_overlap",
|
||||||
"i_milling_type": "tools_iso_milling_type",
|
"i_milling_type": "tools_iso_milling_type",
|
||||||
"i_combine": "tools_iso_combine",
|
"i_combine": "tools_iso_combine",
|
||||||
@@ -278,6 +280,7 @@ 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_iso_passes": self.ui.passes_entry,
|
"tools_iso_passes": self.ui.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,
|
||||||
"tools_iso_milling_type": self.ui.milling_type_radio,
|
"tools_iso_milling_type": self.ui.milling_type_radio,
|
||||||
"tools_iso_combine": self.ui.combine_passes_cb,
|
"tools_iso_combine": self.ui.combine_passes_cb,
|
||||||
@@ -324,6 +327,7 @@ class ToolIsolation(AppTool, Gerber):
|
|||||||
self.ui.order_radio.set_value(self.app.defaults["tools_iso_order"])
|
self.ui.order_radio.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.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.iso_overlap_entry.set_value(self.app.defaults["tools_iso_overlap"])
|
self.ui.iso_overlap_entry.set_value(self.app.defaults["tools_iso_overlap"])
|
||||||
self.ui.milling_type_radio.set_value(self.app.defaults["tools_iso_milling_type"])
|
self.ui.milling_type_radio.set_value(self.app.defaults["tools_iso_milling_type"])
|
||||||
self.ui.combine_passes_cb.set_value(self.app.defaults["tools_iso_combine_passes"])
|
self.ui.combine_passes_cb.set_value(self.app.defaults["tools_iso_combine_passes"])
|
||||||
@@ -1668,7 +1672,7 @@ class ToolIsolation(AppTool, Gerber):
|
|||||||
self.iso_tools[tool_iso][key]["tools_iso_selection"] = self.ui.select_combo.get_value()
|
self.iso_tools[tool_iso][key]["tools_iso_selection"] = self.ui.select_combo.get_value()
|
||||||
self.iso_tools[tool_iso][key]["tools_iso_area_shape"] = self.ui.area_shape_radio.get_value()
|
self.iso_tools[tool_iso][key]["tools_iso_area_shape"] = self.ui.area_shape_radio.get_value()
|
||||||
self.iso_tools[tool_iso][key]["tools_mill_job_type"] = 2 # _("Isolation")
|
self.iso_tools[tool_iso][key]["tools_mill_job_type"] = 2 # _("Isolation")
|
||||||
self.iso_tools[tool_iso][key]["tools_mill_tool_shape"] = 5 # "V"
|
self.iso_tools[tool_iso][key]["tools_mill_tool_shape"] = self.ui.tool_shape_combo.get_value()
|
||||||
|
|
||||||
if combine:
|
if combine:
|
||||||
if self.ui.rest_cb.get_value():
|
if self.ui.rest_cb.get_value():
|
||||||
@@ -1704,8 +1708,6 @@ class ToolIsolation(AppTool, Gerber):
|
|||||||
|
|
||||||
tool_dia = tools_storage[tool]['tooldia']
|
tool_dia = tools_storage[tool]['tooldia']
|
||||||
for i in range(passes):
|
for i in range(passes):
|
||||||
tool_type = tools_storage[tool]['data']['tools_mill_tool_shape']
|
|
||||||
|
|
||||||
iso_offset = tool_dia * ((2 * i + 1) / 2.0000001) - (i * overlap * tool_dia)
|
iso_offset = tool_dia * ((2 * i + 1) / 2.0000001) - (i * overlap * tool_dia)
|
||||||
if negative_dia:
|
if negative_dia:
|
||||||
iso_offset = -iso_offset
|
iso_offset = -iso_offset
|
||||||
@@ -1770,10 +1772,6 @@ class ToolIsolation(AppTool, Gerber):
|
|||||||
geo_obj.tools.update({
|
geo_obj.tools.update({
|
||||||
'1': {
|
'1': {
|
||||||
'tooldia': float(tool_dia),
|
'tooldia': float(tool_dia),
|
||||||
'offset': 'Path',
|
|
||||||
'offset_value': 0.0,
|
|
||||||
'type': 'Rough',
|
|
||||||
'tool_type': tool_type,
|
|
||||||
'data': tool_data,
|
'data': tool_data,
|
||||||
'solid_geometry': geo_obj.solid_geometry
|
'solid_geometry': geo_obj.solid_geometry
|
||||||
}
|
}
|
||||||
@@ -1878,7 +1876,6 @@ class ToolIsolation(AppTool, Gerber):
|
|||||||
if float('%.*f' % (self.decimals, tools_storage[tool]['tooldia'])) == sorted_tool:
|
if float('%.*f' % (self.decimals, tools_storage[tool]['tooldia'])) == sorted_tool:
|
||||||
|
|
||||||
tool_dia = tools_storage[tool]['tooldia']
|
tool_dia = tools_storage[tool]['tooldia']
|
||||||
tool_type = tools_storage[tool]['data']['tools_mill_tool_shape']
|
|
||||||
tool_data = tools_storage[tool]['data']
|
tool_data = tools_storage[tool]['data']
|
||||||
|
|
||||||
passes = tool_data['tools_iso_passes']
|
passes = tool_data['tools_iso_passes']
|
||||||
@@ -1932,10 +1929,6 @@ class ToolIsolation(AppTool, Gerber):
|
|||||||
tools_storage.update({
|
tools_storage.update({
|
||||||
tool: {
|
tool: {
|
||||||
'tooldia': float(tool_dia),
|
'tooldia': float(tool_dia),
|
||||||
'offset': 'Path',
|
|
||||||
'offset_value': 0.0,
|
|
||||||
'type': 'Rough',
|
|
||||||
'tool_type': tool_type,
|
|
||||||
'data': tool_data,
|
'data': tool_data,
|
||||||
'solid_geometry': deepcopy(new_solid_geo)
|
'solid_geometry': deepcopy(new_solid_geo)
|
||||||
}
|
}
|
||||||
@@ -3379,6 +3372,19 @@ class IsoUI:
|
|||||||
self.grid3.addWidget(passlabel, 15, 0)
|
self.grid3.addWidget(passlabel, 15, 0)
|
||||||
self.grid3.addWidget(self.passes_entry, 15, 1)
|
self.grid3.addWidget(self.passes_entry, 15, 1)
|
||||||
|
|
||||||
|
# Pad Passes
|
||||||
|
padpasslabel = FCLabel('%s:' % _('Pad Passes'))
|
||||||
|
padpasslabel.setToolTip(
|
||||||
|
_("Width of the extra isolation gap for pads only,\n"
|
||||||
|
"in number (integer) of tool widths.")
|
||||||
|
)
|
||||||
|
self.pad_passes_entry = FCSpinner()
|
||||||
|
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)
|
||||||
|
|
||||||
# Overlap Entry
|
# Overlap Entry
|
||||||
overlabel = FCLabel('%s:' % _('Overlap'))
|
overlabel = FCLabel('%s:' % _('Overlap'))
|
||||||
overlabel.setToolTip(
|
overlabel.setToolTip(
|
||||||
|
|||||||
@@ -355,6 +355,7 @@ class FlatCAMDefaults:
|
|||||||
|
|
||||||
"tools_iso_tool_shape": 0, # "C1"
|
"tools_iso_tool_shape": 0, # "C1"
|
||||||
"tools_iso_passes": 1,
|
"tools_iso_passes": 1,
|
||||||
|
"tools_iso_pad_passes": 0,
|
||||||
"tools_iso_overlap": 10,
|
"tools_iso_overlap": 10,
|
||||||
"tools_iso_milling_type": "cl",
|
"tools_iso_milling_type": "cl",
|
||||||
"tools_iso_isotype": "full",
|
"tools_iso_isotype": "full",
|
||||||
|
|||||||
Reference in New Issue
Block a user