- upgraded the Preferences UI section for Check Rules Plugin

This commit is contained in:
Marius Stanciu
2021-10-05 10:18:18 +03:00
committed by Marius
parent 1860730b79
commit 0a232055cd
3 changed files with 190 additions and 139 deletions

View File

@@ -12,6 +12,7 @@ CHANGELOG for FlatCAM beta
- Corners Plugin made sure that Drill in Locations and Check in Locations functionality works for manual mode - Corners Plugin made sure that Drill in Locations and Check in Locations functionality works for manual mode
- Check Rules Plugin - upgraded the UI to the new look and grouped better the rules - Check Rules Plugin - upgraded the UI to the new look and grouped better the rules
- updated the language strings - updated the language strings
- upgraded the Preferences UI section for Check Rules Plugin
4.10.2021 4.10.2021

View File

@@ -28,7 +28,7 @@ class Plugins2PreferencesUI(QtWidgets.QWidget):
self.defaults = defaults self.defaults = defaults
self.tools2_checkrules_group = Tools2RulesCheckPrefGroupUI(decimals=self.decimals, defaults=self.defaults) self.tools2_checkrules_group = Tools2RulesCheckPrefGroupUI(decimals=self.decimals, defaults=self.defaults)
self.tools2_checkrules_group.setMinimumWidth(220) self.tools2_checkrules_group.setMinimumWidth(150)
self.tools2_optimal_group = Tools2OptimalPrefGroupUI(decimals=self.decimals, defaults=self.defaults) self.tools2_optimal_group = Tools2OptimalPrefGroupUI(decimals=self.decimals, defaults=self.defaults)
self.tools2_optimal_group.setMinimumWidth(220) self.tools2_optimal_group.setMinimumWidth(220)

View File

@@ -1,6 +1,6 @@
from PyQt6 import QtWidgets from PyQt6 import QtWidgets
from appGUI.GUIElements import FCCheckBox, FCDoubleSpinner, FCLabel, FCGridLayout from appGUI.GUIElements import FCCheckBox, FCDoubleSpinner, FCLabel, FCGridLayout, FCFrame
from appGUI.preferences.OptionsGroupUI import OptionsGroupUI from appGUI.preferences.OptionsGroupUI import OptionsGroupUI
import gettext import gettext
@@ -18,39 +18,45 @@ class Tools2RulesCheckPrefGroupUI(OptionsGroupUI):
super(Tools2RulesCheckPrefGroupUI, self).__init__(self, parent=parent) super(Tools2RulesCheckPrefGroupUI, self).__init__(self, parent=parent)
self.setTitle(str(_("Check Rules Plugin"))) self.setTitle(str(_("Check Rules Plugin")))
self.decimals = decimals self.setToolTip(
self.defaults = defaults
self.crlabel = FCLabel("<b>%s:</b>" % _("Parameters"))
self.crlabel.setToolTip(
_("A tool to check if Gerber files are within a set\n" _("A tool to check if Gerber files are within a set\n"
"of Manufacturing Rules.") "of Manufacturing Rules.")
) )
self.layout.addWidget(self.crlabel) self.decimals = decimals
self.defaults = defaults
# Form Layout # #############################################################################################################
self.grid0 = FCGridLayout(v_spacing=5, h_spacing=3) # Rules Frame
self.layout.addLayout(self.grid0) # #############################################################################################################
rules_copper_label = FCLabel('<span style="color:darkorange;"><b>%s %s</b></span>' % (_("Copper"), _("Rules")))
self.layout.addWidget(rules_copper_label)
copper_frame = FCFrame()
self.layout.addWidget(copper_frame)
self.copper_grid = FCGridLayout(v_spacing=5, h_spacing=3)
copper_frame.setLayout(self.copper_grid)
# Trace size # Trace size
self.trace_size_cb = FCCheckBox('%s:' % _("Trace Size")) self.trace_size_cb = FCCheckBox('%s:' % _("Trace Size"))
self.trace_size_cb.setToolTip( self.trace_size_cb.setToolTip(
_("This checks if the minimum size for traces is met.") _("This checks if the minimum size for traces is met.")
) )
self.grid0.addWidget(self.trace_size_cb, 0, 0, 1, 2) self.copper_grid.addWidget(self.trace_size_cb, 0, 0, 1, 2)
# Trace size value # Trace size value
self.trace_size_lbl = FCLabel('%s:' % _("Value"))
self.trace_size_lbl.setToolTip(
_("Minimum acceptable trace size.")
)
self.trace_size_entry = FCDoubleSpinner() self.trace_size_entry = FCDoubleSpinner()
self.trace_size_entry.set_range(0.0000, 10000.0000) self.trace_size_entry.set_range(0.0000, 10000.0000)
self.trace_size_entry.set_precision(self.decimals) self.trace_size_entry.set_precision(self.decimals)
self.trace_size_entry.setSingleStep(0.1) self.trace_size_entry.setSingleStep(0.1)
self.trace_size_lbl = FCLabel('%s:' % _("Min value")) self.copper_grid.addWidget(self.trace_size_lbl, 2, 0)
self.trace_size_lbl.setToolTip( self.copper_grid.addWidget(self.trace_size_entry, 2, 1)
_("Minimum acceptable trace size.")
)
self.grid0.addWidget(self.trace_size_lbl, 2, 0)
self.grid0.addWidget(self.trace_size_entry, 2, 1)
# Copper2copper clearance # Copper2copper clearance
self.clearance_copper2copper_cb = FCCheckBox('%s:' % _("Copper to Copper clearance")) self.clearance_copper2copper_cb = FCCheckBox('%s:' % _("Copper to Copper clearance"))
@@ -58,20 +64,21 @@ class Tools2RulesCheckPrefGroupUI(OptionsGroupUI):
_("This checks if the minimum clearance between copper\n" _("This checks if the minimum clearance between copper\n"
"features is met.") "features is met.")
) )
self.grid0.addWidget(self.clearance_copper2copper_cb, 4, 0, 1, 2) self.copper_grid.addWidget(self.clearance_copper2copper_cb, 4, 0, 1, 2)
# Copper2copper clearance value # Copper2copper clearance value
self.clearance_copper2copper_lbl = FCLabel('%s:' % _("Value"))
self.clearance_copper2copper_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.clearance_copper2copper_entry = FCDoubleSpinner() self.clearance_copper2copper_entry = FCDoubleSpinner()
self.clearance_copper2copper_entry.set_range(0.0000, 10000.0000) self.clearance_copper2copper_entry.set_range(0.0000, 10000.0000)
self.clearance_copper2copper_entry.set_precision(self.decimals) self.clearance_copper2copper_entry.set_precision(self.decimals)
self.clearance_copper2copper_entry.setSingleStep(0.1) self.clearance_copper2copper_entry.setSingleStep(0.1)
self.clearance_copper2copper_lbl = FCLabel('%s:' % _("Min value")) self.copper_grid.addWidget(self.clearance_copper2copper_lbl, 6, 0)
self.clearance_copper2copper_lbl.setToolTip( self.copper_grid.addWidget(self.clearance_copper2copper_entry, 6, 1)
_("Minimum acceptable clearance value.")
)
self.grid0.addWidget(self.clearance_copper2copper_lbl, 6, 0)
self.grid0.addWidget(self.clearance_copper2copper_entry, 6, 1)
# Copper2outline clearance # Copper2outline clearance
self.clearance_copper2ol_cb = FCCheckBox('%s:' % _("Copper to Outline clearance")) self.clearance_copper2ol_cb = FCCheckBox('%s:' % _("Copper to Outline clearance"))
@@ -79,104 +86,21 @@ class Tools2RulesCheckPrefGroupUI(OptionsGroupUI):
_("This checks if the minimum clearance between copper\n" _("This checks if the minimum clearance between copper\n"
"features and the outline is met.") "features and the outline is met.")
) )
self.grid0.addWidget(self.clearance_copper2ol_cb, 8, 0, 1, 2) self.copper_grid.addWidget(self.clearance_copper2ol_cb, 8, 0, 1, 2)
# Copper2outline clearance value # Copper2outline clearance value
self.clearance_copper2ol_lbl = FCLabel('%s:' % _("Value"))
self.clearance_copper2ol_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.clearance_copper2ol_entry = FCDoubleSpinner() self.clearance_copper2ol_entry = FCDoubleSpinner()
self.clearance_copper2ol_entry.set_range(0.0000, 10000.0000) self.clearance_copper2ol_entry.set_range(0.0000, 10000.0000)
self.clearance_copper2ol_entry.set_precision(self.decimals) self.clearance_copper2ol_entry.set_precision(self.decimals)
self.clearance_copper2ol_entry.setSingleStep(0.1) self.clearance_copper2ol_entry.setSingleStep(0.1)
self.clearance_copper2ol_lbl = FCLabel('%s:' % _("Min value")) self.copper_grid.addWidget(self.clearance_copper2ol_lbl, 10, 0)
self.clearance_copper2ol_lbl.setToolTip( self.copper_grid.addWidget(self.clearance_copper2ol_entry, 10, 1)
_("Minimum acceptable clearance value.")
)
self.grid0.addWidget(self.clearance_copper2ol_lbl, 10, 0)
self.grid0.addWidget(self.clearance_copper2ol_entry, 10, 1)
# Silkscreen2silkscreen clearance
self.clearance_silk2silk_cb = FCCheckBox('%s:' % _("Silk to Silk Clearance"))
self.clearance_silk2silk_cb.setToolTip(
_("This checks if the minimum clearance between silkscreen\n"
"features and silkscreen features is met.")
)
self.grid0.addWidget(self.clearance_silk2silk_cb, 12, 0, 1, 2)
# Copper2silkscreen clearance value
self.clearance_silk2silk_entry = FCDoubleSpinner()
self.clearance_silk2silk_entry.set_range(0.0000, 10000.0000)
self.clearance_silk2silk_entry.set_precision(self.decimals)
self.clearance_silk2silk_entry.setSingleStep(0.1)
self.clearance_silk2silk_lbl = FCLabel('%s:' % _("Min value"))
self.clearance_silk2silk_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.grid0.addWidget(self.clearance_silk2silk_lbl, 14, 0)
self.grid0.addWidget(self.clearance_silk2silk_entry, 14, 1)
# Silkscreen2soldermask clearance
self.clearance_silk2sm_cb = FCCheckBox('%s:' % _("Silk to Solder Mask Clearance"))
self.clearance_silk2sm_cb.setToolTip(
_("This checks if the minimum clearance between silkscreen\n"
"features and soldermask features is met.")
)
self.grid0.addWidget(self.clearance_silk2sm_cb, 16, 0, 1, 2)
# Silkscreen2soldermask clearance value
self.clearance_silk2sm_entry = FCDoubleSpinner()
self.clearance_silk2sm_entry.set_range(0.0000, 10000.0000)
self.clearance_silk2sm_entry.set_precision(self.decimals)
self.clearance_silk2sm_entry.setSingleStep(0.1)
self.clearance_silk2sm_lbl = FCLabel('%s:' % _("Min value"))
self.clearance_silk2sm_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.grid0.addWidget(self.clearance_silk2sm_lbl, 18, 0)
self.grid0.addWidget(self.clearance_silk2sm_entry, 18, 1)
# Silk2outline clearance
self.clearance_silk2ol_cb = FCCheckBox('%s:' % _("Silk to Outline Clearance"))
self.clearance_silk2ol_cb.setToolTip(
_("This checks if the minimum clearance between silk\n"
"features and the outline is met.")
)
self.grid0.addWidget(self.clearance_silk2ol_cb, 20, 0, 1, 2)
# Silk2outline clearance value
self.clearance_silk2ol_entry = FCDoubleSpinner()
self.clearance_silk2ol_entry.set_range(0.0000, 10000.0000)
self.clearance_silk2ol_entry.set_precision(self.decimals)
self.clearance_silk2ol_entry.setSingleStep(0.1)
self.clearance_silk2ol_lbl = FCLabel('%s:' % _("Min value"))
self.clearance_silk2ol_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.grid0.addWidget(self.clearance_silk2ol_lbl, 22, 0)
self.grid0.addWidget(self.clearance_silk2ol_entry, 22, 1)
# Soldermask2soldermask clearance
self.clearance_sm2sm_cb = FCCheckBox('%s:' % _("Minimum Solder Mask Sliver"))
self.clearance_sm2sm_cb.setToolTip(
_("This checks if the minimum clearance between soldermask\n"
"features and soldermask features is met.")
)
self.grid0.addWidget(self.clearance_sm2sm_cb, 24, 0, 1, 2)
# Soldermask2soldermask clearance value
self.clearance_sm2sm_entry = FCDoubleSpinner()
self.clearance_sm2sm_entry.set_range(0.0000, 10000.0000)
self.clearance_sm2sm_entry.set_precision(self.decimals)
self.clearance_sm2sm_entry.setSingleStep(0.1)
self.clearance_sm2sm_lbl = FCLabel('%s:' % _("Min value"))
self.clearance_sm2sm_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.grid0.addWidget(self.clearance_sm2sm_lbl, 26, 0)
self.grid0.addWidget(self.clearance_sm2sm_entry, 26, 1)
# Ring integrity check # Ring integrity check
self.ring_integrity_cb = FCCheckBox('%s:' % _("Minimum Annular Ring")) self.ring_integrity_cb = FCCheckBox('%s:' % _("Minimum Annular Ring"))
@@ -184,22 +108,146 @@ class Tools2RulesCheckPrefGroupUI(OptionsGroupUI):
_("This checks if the minimum copper ring left by drilling\n" _("This checks if the minimum copper ring left by drilling\n"
"a hole into a pad is met.") "a hole into a pad is met.")
) )
self.grid0.addWidget(self.ring_integrity_cb, 28, 0, 1, 2) self.copper_grid.addWidget(self.ring_integrity_cb, 12, 0, 1, 2)
# Ring integrity value # Ring integrity value
self.ring_integrity_lbl = FCLabel('%s:' % _("Value"))
self.ring_integrity_lbl.setToolTip(
_("Minimum acceptable ring value.")
)
self.ring_integrity_entry = FCDoubleSpinner() self.ring_integrity_entry = FCDoubleSpinner()
self.ring_integrity_entry.set_range(0.0000, 10000.0000) self.ring_integrity_entry.set_range(0.0000, 10000.0000)
self.ring_integrity_entry.set_precision(self.decimals) self.ring_integrity_entry.set_precision(self.decimals)
self.ring_integrity_entry.setSingleStep(0.1) self.ring_integrity_entry.setSingleStep(0.1)
self.ring_integrity_lbl = FCLabel('%s:' % _("Min value")) self.copper_grid.addWidget(self.ring_integrity_lbl, 14, 0)
self.ring_integrity_lbl.setToolTip( self.copper_grid.addWidget(self.ring_integrity_entry, 14, 1)
_("Minimum acceptable ring value.")
)
self.grid0.addWidget(self.ring_integrity_lbl, 30, 0)
self.grid0.addWidget(self.ring_integrity_entry, 30, 1)
self.grid0.addWidget(FCLabel(''), 32, 0, 1, 2) # #############################################################################################################
# Silk Frame
# #############################################################################################################
silk_copper_label = FCLabel('<span style="color:teal;"><b>%s %s</b></span>' % (_("Silk"), _("Rules")))
self.layout.addWidget(silk_copper_label)
silk_frame = FCFrame()
self.layout.addWidget(silk_frame)
self.silk_grid = FCGridLayout(v_spacing=5, h_spacing=3)
silk_frame.setLayout(self.silk_grid)
# Silkscreen2silkscreen clearance
self.clearance_silk2silk_cb = FCCheckBox('%s:' % _("Silk to Silk Clearance"))
self.clearance_silk2silk_cb.setToolTip(
_("This checks if the minimum clearance between silkscreen\n"
"features and silkscreen features is met.")
)
self.silk_grid.addWidget(self.clearance_silk2silk_cb, 0, 0, 1, 2)
# Copper2silkscreen clearance value
self.clearance_silk2silk_lbl = FCLabel('%s:' % _("Value"))
self.clearance_silk2silk_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.clearance_silk2silk_entry = FCDoubleSpinner()
self.clearance_silk2silk_entry.set_range(0.0000, 10000.0000)
self.clearance_silk2silk_entry.set_precision(self.decimals)
self.clearance_silk2silk_entry.setSingleStep(0.1)
self.silk_grid.addWidget(self.clearance_silk2silk_lbl, 2, 0)
self.silk_grid.addWidget(self.clearance_silk2silk_entry, 2, 1)
# Silkscreen2soldermask clearance
self.clearance_silk2sm_cb = FCCheckBox('%s:' % _("Silk to Solder Mask Clearance"))
self.clearance_silk2sm_cb.setToolTip(
_("This checks if the minimum clearance between silkscreen\n"
"features and soldermask features is met.")
)
self.silk_grid.addWidget(self.clearance_silk2sm_cb, 4, 0, 1, 2)
# Silkscreen2soldermask clearance value
self.clearance_silk2sm_lbl = FCLabel('%s:' % _("Value"))
self.clearance_silk2sm_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.clearance_silk2sm_entry = FCDoubleSpinner()
self.clearance_silk2sm_entry.set_range(0.0000, 10000.0000)
self.clearance_silk2sm_entry.set_precision(self.decimals)
self.clearance_silk2sm_entry.setSingleStep(0.1)
self.silk_grid.addWidget(self.clearance_silk2sm_lbl, 6, 0)
self.silk_grid.addWidget(self.clearance_silk2sm_entry, 6, 1)
# Silk2outline clearance
self.clearance_silk2ol_cb = FCCheckBox('%s:' % _("Silk to Outline Clearance"))
self.clearance_silk2ol_cb.setToolTip(
_("This checks if the minimum clearance between silk\n"
"features and the outline is met.")
)
self.silk_grid.addWidget(self.clearance_silk2ol_cb, 8, 0, 1, 2)
# Silk2outline clearance value
self.clearance_silk2ol_lbl = FCLabel('%s:' % _("Value"))
self.clearance_silk2ol_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.clearance_silk2ol_entry = FCDoubleSpinner()
self.clearance_silk2ol_entry.set_range(0.0000, 10000.0000)
self.clearance_silk2ol_entry.set_precision(self.decimals)
self.clearance_silk2ol_entry.setSingleStep(0.1)
self.silk_grid.addWidget(self.clearance_silk2ol_lbl, 10, 0)
self.silk_grid.addWidget(self.clearance_silk2ol_entry, 10, 1)
# #############################################################################################################
# Soldermask Frame
# #############################################################################################################
sm_copper_label = FCLabel('<span style="color:magenta;"><b>%s %s</b></span>' % (_("Soldermask"), _("Rules")))
self.layout.addWidget(sm_copper_label)
solder_frame = FCFrame()
self.layout.addWidget(solder_frame)
self.solder_grid = FCGridLayout(v_spacing=5, h_spacing=3)
solder_frame.setLayout(self.solder_grid)
# Soldermask2soldermask clearance
self.clearance_sm2sm_cb = FCCheckBox('%s:' % _("Minimum Solder Mask Sliver"))
self.clearance_sm2sm_cb.setToolTip(
_("This checks if the minimum clearance between soldermask\n"
"features and soldermask features is met.")
)
self.solder_grid.addWidget(self.clearance_sm2sm_cb, 0, 0, 1, 2)
# Soldermask2soldermask clearance value
self.clearance_sm2sm_lbl = FCLabel('%s:' % _("Value"))
self.clearance_sm2sm_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.clearance_sm2sm_entry = FCDoubleSpinner()
self.clearance_sm2sm_entry.set_range(0.0000, 10000.0000)
self.clearance_sm2sm_entry.set_precision(self.decimals)
self.clearance_sm2sm_entry.setSingleStep(0.1)
self.solder_grid.addWidget(self.clearance_sm2sm_lbl, 2, 0)
self.solder_grid.addWidget(self.clearance_sm2sm_entry, 2, 1)
# #############################################################################################################
# Holes Frame
# #############################################################################################################
holes_copper_label = FCLabel('<span style="color:brown;"><b>%s %s</b></span>' % (_("Holes"), _("Rules")))
self.layout.addWidget(holes_copper_label)
holes_frame = FCFrame()
self.layout.addWidget(holes_frame)
self.holes_grid = FCGridLayout(v_spacing=5, h_spacing=3)
holes_frame.setLayout(self.holes_grid)
# Hole2Hole clearance # Hole2Hole clearance
self.clearance_d2d_cb = FCCheckBox('%s:' % _("Hole to Hole Clearance")) self.clearance_d2d_cb = FCCheckBox('%s:' % _("Hole to Hole Clearance"))
@@ -207,20 +255,21 @@ class Tools2RulesCheckPrefGroupUI(OptionsGroupUI):
_("This checks if the minimum clearance between a drill hole\n" _("This checks if the minimum clearance between a drill hole\n"
"and another drill hole is met.") "and another drill hole is met.")
) )
self.grid0.addWidget(self.clearance_d2d_cb, 34, 0, 1, 2) self.holes_grid.addWidget(self.clearance_d2d_cb, 0, 0, 1, 2)
# Hole2Hole clearance value # Hole2Hole clearance value
self.clearance_d2d_lbl = FCLabel('%s:' % _("Value"))
self.clearance_d2d_lbl.setToolTip(
_("Minimum acceptable clearance value.")
)
self.clearance_d2d_entry = FCDoubleSpinner() self.clearance_d2d_entry = FCDoubleSpinner()
self.clearance_d2d_entry.set_range(0.0000, 10000.0000) self.clearance_d2d_entry.set_range(0.0000, 10000.0000)
self.clearance_d2d_entry.set_precision(self.decimals) self.clearance_d2d_entry.set_precision(self.decimals)
self.clearance_d2d_entry.setSingleStep(0.1) self.clearance_d2d_entry.setSingleStep(0.1)
self.clearance_d2d_lbl = FCLabel('%s:' % _("Min value")) self.holes_grid.addWidget(self.clearance_d2d_lbl, 2, 0)
self.clearance_d2d_lbl.setToolTip( self.holes_grid.addWidget(self.clearance_d2d_entry, 2, 1)
_("Minimum acceptable drill size.")
)
self.grid0.addWidget(self.clearance_d2d_lbl, 36, 0)
self.grid0.addWidget(self.clearance_d2d_entry, 36, 1)
# Drill holes size check # Drill holes size check
self.drill_size_cb = FCCheckBox('%s:' % _("Hole Size")) self.drill_size_cb = FCCheckBox('%s:' % _("Hole Size"))
@@ -228,19 +277,20 @@ class Tools2RulesCheckPrefGroupUI(OptionsGroupUI):
_("This checks if the drill holes\n" _("This checks if the drill holes\n"
"sizes are above the threshold.") "sizes are above the threshold.")
) )
self.grid0.addWidget(self.drill_size_cb, 38, 0, 1, 2) self.holes_grid.addWidget(self.drill_size_cb, 4, 0, 1, 2)
# Drills holes value
self.drill_size_lbl = FCLabel('%s:' % _("Value"))
self.drill_size_lbl.setToolTip(
_("Minimum acceptable drill size.")
)
# Drile holes value
self.drill_size_entry = FCDoubleSpinner() self.drill_size_entry = FCDoubleSpinner()
self.drill_size_entry.set_range(0.0000, 10000.0000) self.drill_size_entry.set_range(0.0000, 10000.0000)
self.drill_size_entry.set_precision(self.decimals) self.drill_size_entry.set_precision(self.decimals)
self.drill_size_entry.setSingleStep(0.1) self.drill_size_entry.setSingleStep(0.1)
self.drill_size_lbl = FCLabel('%s:' % _("Min value")) self.holes_grid.addWidget(self.drill_size_lbl, 6, 0)
self.drill_size_lbl.setToolTip( self.holes_grid.addWidget(self.drill_size_entry, 6, 1)
_("Minimum acceptable clearance value.")
)
self.grid0.addWidget(self.drill_size_lbl, 40, 0)
self.grid0.addWidget(self.drill_size_entry, 40, 1)
self.layout.addStretch(1) self.layout.addStretch(1)