- added a new parameter in the Tool Film which control the thickness of the stroke width in the resulting SVG. It's a scale parameter.

- whatever was the visibility of the corresponding toolbar when we enter in the Editor, it will be set after exit from the Editor (either Geometry Editor or Excellon Editor).
- added ability to be detached for the tabs in the Notebook section (Project, Selected and Tool)
- added ability for all detachable tabs to be restored to the same position from where they were detached.
- restored the way the tools autoloaded the objects in the comboboxes
This commit is contained in:
Marius Stanciu 2019-02-04 20:49:37 +02:00 committed by Marius S
parent 166fa0470b
commit 713b584841
11 changed files with 129 additions and 50 deletions

View File

@ -426,7 +426,7 @@ class App(QtCore.QObject):
"tools_film_type": self.tools_defaults_form.tools_film_group.film_type_radio, "tools_film_type": self.tools_defaults_form.tools_film_group.film_type_radio,
"tools_film_boundary": self.tools_defaults_form.tools_film_group.film_boundary_entry, "tools_film_boundary": self.tools_defaults_form.tools_film_group.film_boundary_entry,
"tools_film_adjust": self.tools_defaults_form.tools_film_group.film_adjust_entry, "tools_film_scale": self.tools_defaults_form.tools_film_group.film_scale_entry,
"tools_panelize_spacing_columns": self.tools_defaults_form.tools_panelize_group.pspacing_columns, "tools_panelize_spacing_columns": self.tools_defaults_form.tools_panelize_group.pspacing_columns,
"tools_panelize_spacing_rows": self.tools_defaults_form.tools_panelize_group.pspacing_rows, "tools_panelize_spacing_rows": self.tools_defaults_form.tools_panelize_group.pspacing_rows,
@ -607,7 +607,7 @@ class App(QtCore.QObject):
"tools_film_type": 'neg', "tools_film_type": 'neg',
"tools_film_boundary": 1, "tools_film_boundary": 1,
"tools_film_adjust": 0, "tools_film_scale": 0,
"tools_panelize_spacing_columns": 0, "tools_panelize_spacing_columns": 0,
"tools_panelize_spacing_rows": 0, "tools_panelize_spacing_rows": 0,
@ -749,7 +749,7 @@ class App(QtCore.QObject):
"tools_film_type": self.tools_options_form.tools_film_group.film_type_radio, "tools_film_type": self.tools_options_form.tools_film_group.film_type_radio,
"tools_film_boundary": self.tools_options_form.tools_film_group.film_boundary_entry, "tools_film_boundary": self.tools_options_form.tools_film_group.film_boundary_entry,
"tools_film_adjust": self.tools_options_form.tools_film_group.film_adjust_entry, "tools_film_scale": self.tools_options_form.tools_film_group.film_scale_entry,
"tools_panelize_spacing_columns": self.tools_options_form.tools_panelize_group.pspacing_columns, "tools_panelize_spacing_columns": self.tools_options_form.tools_panelize_group.pspacing_columns,
"tools_panelize_spacing_rows": self.tools_options_form.tools_panelize_group.pspacing_rows, "tools_panelize_spacing_rows": self.tools_options_form.tools_panelize_group.pspacing_rows,
@ -867,7 +867,7 @@ class App(QtCore.QObject):
"tools_film_type": 'neg', "tools_film_type": 'neg',
"tools_film_boundary": 1, "tools_film_boundary": 1,
"tools_film_adjust": 0, "tools_film_scale": 0,
"tools_panelize_spacing_columns": 0, "tools_panelize_spacing_columns": 0,
"tools_panelize_spacing_rows": 0, "tools_panelize_spacing_rows": 0,
@ -1564,11 +1564,15 @@ class App(QtCore.QObject):
self.inform.emit("[WARNING_NOTCL]Editing a MultiGeo Geometry is not possible for the moment.") self.inform.emit("[WARNING_NOTCL]Editing a MultiGeo Geometry is not possible for the moment.")
return return
# store the Geometry Editor Toolbar visibility before entering in the Editor
self.geo_editor.toolbar_old_state = True if self.ui.geo_edit_toolbar.isVisible() else False
self.geo_editor.edit_fcgeometry(edited_object) self.geo_editor.edit_fcgeometry(edited_object)
# set call source to the Editor we go into # set call source to the Editor we go into
self.call_source = 'geo_editor' self.call_source = 'geo_editor'
elif isinstance(edited_object, FlatCAMExcellon): elif isinstance(edited_object, FlatCAMExcellon):
# store the Excellon Editor Toolbar visibility before entering in the Editor
self.exc_editor.toolbar_old_state = True if self.ui.exc_edit_toolbar.isVisible() else False
self.exc_editor.edit_fcexcellon(edited_object) self.exc_editor.edit_fcexcellon(edited_object)
# set call source to the Editor we go into # set call source to the Editor we go into

View File

@ -1970,6 +1970,9 @@ class FlatCAMGeoEditor(QtCore.QObject):
self.move_timer = QtCore.QTimer() self.move_timer = QtCore.QTimer()
self.move_timer.setSingleShot(True) self.move_timer.setSingleShot(True)
# this var will store the state of the toolbar before starting the editor
self.toolbar_old_state = False
self.key = None # Currently pressed key self.key = None # Currently pressed key
self.geo_key_modifiers = None self.geo_key_modifiers = None
self.x = None # Current mouse cursor pos self.x = None # Current mouse cursor pos
@ -2083,24 +2086,29 @@ class FlatCAMGeoEditor(QtCore.QObject):
if settings.contains("theme"): if settings.contains("theme"):
theme = settings.value('theme', type=str) theme = settings.value('theme', type=str)
if theme == 'standard': if theme == 'standard':
self.app.ui.geo_edit_toolbar.setVisible(False) # self.app.ui.geo_edit_toolbar.setVisible(False)
self.app.ui.snap_max_dist_entry.setEnabled(False) self.app.ui.snap_max_dist_entry.setEnabled(False)
self.app.ui.corner_snap_btn.setEnabled(False) self.app.ui.corner_snap_btn.setEnabled(False)
self.app.ui.snap_magnet.setVisible(False) self.app.ui.snap_magnet.setVisible(False)
self.app.ui.corner_snap_btn.setVisible(False) self.app.ui.corner_snap_btn.setVisible(False)
elif theme == 'compact': elif theme == 'compact':
self.app.ui.snap_max_dist_entry.setEnabled(False) # self.app.ui.geo_edit_toolbar.setVisible(True)
self.app.ui.snap_max_dist_entry.setEnabled(False)
self.app.ui.corner_snap_btn.setEnabled(False) self.app.ui.corner_snap_btn.setEnabled(False)
else: else:
self.app.ui.geo_edit_toolbar.setVisible(False) # self.app.ui.geo_edit_toolbar.setVisible(False)
self.app.ui.snap_magnet.setVisible(False) self.app.ui.snap_magnet.setVisible(False)
self.app.ui.corner_snap_btn.setVisible(False) self.app.ui.corner_snap_btn.setVisible(False)
self.app.ui.snap_max_dist_entry.setEnabled(False) self.app.ui.snap_max_dist_entry.setEnabled(False)
self.app.ui.corner_snap_btn.setEnabled(False) self.app.ui.corner_snap_btn.setEnabled(False)
# set the Editor Toolbar visibility to what was before entering in the Editor
self.app.ui.geo_edit_toolbar.setVisible(False) if self.toolbar_old_state is False \
else self.app.ui.geo_edit_toolbar.setVisible(True)
# Disable visuals # Disable visuals
self.shapes.enabled = False self.shapes.enabled = False
self.tool_shape.enabled = False self.tool_shape.enabled = False
@ -3695,6 +3703,9 @@ class FlatCAMExcEditor(QtCore.QObject):
# this will flag if the Editor "tools" are launched from key shortcuts (True) or from menu toolbar (False) # this will flag if the Editor "tools" are launched from key shortcuts (True) or from menu toolbar (False)
self.launched_from_shortcuts = False self.launched_from_shortcuts = False
# this var will store the state of the toolbar before starting the editor
self.toolbar_old_state = False
self.app.ui.delete_drill_btn.triggered.connect(self.on_delete_btn) self.app.ui.delete_drill_btn.triggered.connect(self.on_delete_btn)
self.name_entry.returnPressed.connect(self.on_name_activate) self.name_entry.returnPressed.connect(self.on_name_activate)
self.addtool_btn.clicked.connect(self.on_tool_add) self.addtool_btn.clicked.connect(self.on_tool_add)
@ -4216,27 +4227,31 @@ class FlatCAMExcEditor(QtCore.QObject):
if settings.contains("theme"): if settings.contains("theme"):
theme = settings.value('theme', type=str) theme = settings.value('theme', type=str)
if theme == 'standard': if theme == 'standard':
self.app.ui.exc_edit_toolbar.setVisible(False) # self.app.ui.exc_edit_toolbar.setVisible(False)
self.app.ui.snap_max_dist_entry.setEnabled(False) self.app.ui.snap_max_dist_entry.setEnabled(False)
self.app.ui.corner_snap_btn.setEnabled(False) self.app.ui.corner_snap_btn.setEnabled(False)
self.app.ui.snap_magnet.setVisible(False) self.app.ui.snap_magnet.setVisible(False)
self.app.ui.corner_snap_btn.setVisible(False) self.app.ui.corner_snap_btn.setVisible(False)
elif theme == 'compact': elif theme == 'compact':
self.app.ui.exc_edit_toolbar.setVisible(True) # self.app.ui.exc_edit_toolbar.setVisible(True)
self.app.ui.snap_max_dist_entry.setEnabled(False) self.app.ui.snap_max_dist_entry.setEnabled(False)
self.app.ui.corner_snap_btn.setEnabled(False) self.app.ui.corner_snap_btn.setEnabled(False)
self.app.ui.snap_magnet.setVisible(True) self.app.ui.snap_magnet.setVisible(True)
self.app.ui.corner_snap_btn.setVisible(True) self.app.ui.corner_snap_btn.setVisible(True)
else: else:
self.app.ui.exc_edit_toolbar.setVisible(False) # self.app.ui.exc_edit_toolbar.setVisible(False)
self.app.ui.snap_max_dist_entry.setEnabled(False) self.app.ui.snap_max_dist_entry.setEnabled(False)
self.app.ui.corner_snap_btn.setEnabled(False) self.app.ui.corner_snap_btn.setEnabled(False)
self.app.ui.snap_magnet.setVisible(False) self.app.ui.snap_magnet.setVisible(False)
self.app.ui.corner_snap_btn.setVisible(False) self.app.ui.corner_snap_btn.setVisible(False)
# set the Editor Toolbar visibility to what was before entering in the Editor
self.app.ui.exc_edit_toolbar.setVisible(False) if self.toolbar_old_state is False \
else self.app.ui.exc_edit_toolbar.setVisible(True)
# Disable visuals # Disable visuals
self.shapes.enabled = False self.shapes.enabled = False
self.tool_shape.enabled = False self.tool_shape.enabled = False

View File

@ -394,7 +394,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.splitter = QtWidgets.QSplitter() self.splitter = QtWidgets.QSplitter()
self.setCentralWidget(self.splitter) self.setCentralWidget(self.splitter)
self.notebook = QtWidgets.QTabWidget() # self.notebook = QtWidgets.QTabWidget()
self.notebook = FCDetachableTab(protect=True)
self.notebook.setTabsClosable(False)
self.notebook.useOldIndex(True)
self.splitter.addWidget(self.notebook) self.splitter.addWidget(self.notebook)
self.splitter_left = QtWidgets.QSplitter(Qt.Vertical) self.splitter_left = QtWidgets.QSplitter(Qt.Vertical)
@ -585,7 +589,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.right_lay.setContentsMargins(0, 0, 0, 0) self.right_lay.setContentsMargins(0, 0, 0, 0)
self.right_widget.setLayout(self.right_lay) self.right_widget.setLayout(self.right_lay)
# self.plot_tab_area = FCTab() # self.plot_tab_area = FCTab()
self.plot_tab_area = FCDetachableTab() self.plot_tab_area = FCDetachableTab(protect=False, protect_by_name=['Plot Area'])
self.plot_tab_area.useOldIndex(True)
self.right_lay.addWidget(self.plot_tab_area) self.right_lay.addWidget(self.plot_tab_area)
self.plot_tab_area.setTabsClosable(True) self.plot_tab_area.setTabsClosable(True)
@ -2840,7 +2845,7 @@ class ToolsNCCPrefGroupUI(OptionsGroupUI):
self.setTitle(str("NCC Tool Options")) self.setTitle(str("NCC Tool Options"))
## Clear non-copper regions ## Clear non-copper regions
self.clearcopper_label = QtWidgets.QLabel("<b>Clear non-copper:</b>") self.clearcopper_label = QtWidgets.QLabel("<b>Parameters:</b>")
self.clearcopper_label.setToolTip( self.clearcopper_label.setToolTip(
"Create a Geometry object with\n" "Create a Geometry object with\n"
"toolpaths to cut all non-copper regions." "toolpaths to cut all non-copper regions."
@ -2941,7 +2946,7 @@ class ToolsCutoutPrefGroupUI(OptionsGroupUI):
self.setTitle(str("Cutout Tool Options")) self.setTitle(str("Cutout Tool Options"))
## Board cuttout ## Board cuttout
self.board_cutout_label = QtWidgets.QLabel("<b>Board cutout:</b>") self.board_cutout_label = QtWidgets.QLabel("<b>Parameters:</b>")
self.board_cutout_label.setToolTip( self.board_cutout_label.setToolTip(
"Create toolpaths to cut around\n" "Create toolpaths to cut around\n"
"the PCB and separate it from\n" "the PCB and separate it from\n"
@ -3024,7 +3029,7 @@ class Tools2sidedPrefGroupUI(OptionsGroupUI):
self.setTitle(str("2Sided Tool Options")) self.setTitle(str("2Sided Tool Options"))
## Board cuttout ## Board cuttout
self.dblsided_label = QtWidgets.QLabel("<b>Double Sided:</b>") self.dblsided_label = QtWidgets.QLabel("<b>Parameters:</b>")
self.dblsided_label.setToolTip( self.dblsided_label.setToolTip(
"A tool to help in creating a double sided\n" "A tool to help in creating a double sided\n"
"PCB using alignment holes." "PCB using alignment holes."
@ -3083,7 +3088,7 @@ class ToolsPaintPrefGroupUI(OptionsGroupUI):
# ------------------------------ # ------------------------------
## Paint area ## Paint area
# ------------------------------ # ------------------------------
self.paint_label = QtWidgets.QLabel('<b>Paint Area:</b>') self.paint_label = QtWidgets.QLabel('<b>Parameters:</b>')
self.paint_label.setToolTip( self.paint_label.setToolTip(
"Creates tool paths to cover the\n" "Creates tool paths to cover the\n"
"whole area of a polygon (remove\n" "whole area of a polygon (remove\n"
@ -3186,7 +3191,7 @@ class ToolsFilmPrefGroupUI(OptionsGroupUI):
self.setTitle(str("Film Tool Options")) self.setTitle(str("Film Tool Options"))
## Board cuttout ## Board cuttout
self.film_label = QtWidgets.QLabel("<b>Film parameters:</b>") self.film_label = QtWidgets.QLabel("<b>Parameters:</b>")
self.film_label.setToolTip( self.film_label.setToolTip(
"Create a PCB film from a Gerber or Geometry\n" "Create a PCB film from a Gerber or Geometry\n"
"FlatCAM object.\n" "FlatCAM object.\n"
@ -3225,14 +3230,15 @@ class ToolsFilmPrefGroupUI(OptionsGroupUI):
grid0.addWidget(self.film_boundary_label, 1, 0) grid0.addWidget(self.film_boundary_label, 1, 0)
grid0.addWidget(self.film_boundary_entry, 1, 1) grid0.addWidget(self.film_boundary_entry, 1, 1)
self.film_adjust_entry = FCEntry() self.film_scale_entry = FCEntry()
self.film_adjust_label = QtWidgets.QLabel("Adjust:") self.film_scale_label = QtWidgets.QLabel("Scale Stroke:")
self.film_adjust_label.setToolTip( self.film_scale_label.setToolTip(
"Adjust the line thickness of each feature in the SVG file.\n" "Scale the line stroke thickness of each feature in the SVG file.\n"
"In pixels." "It means that the line that envelope each SVG feature will be thicker or thinner,\n"
"therefore the fine features may be more affected by this parameter."
) )
grid0.addWidget(self.film_adjust_label, 2, 0) grid0.addWidget(self.film_scale_label, 2, 0)
grid0.addWidget(self.film_adjust_entry, 2, 1) grid0.addWidget(self.film_scale_entry, 2, 1)
self.layout.addStretch() self.layout.addStretch()
@ -3245,7 +3251,7 @@ class ToolsPanelizePrefGroupUI(OptionsGroupUI):
self.setTitle(str("Panelize Tool Options")) self.setTitle(str("Panelize Tool Options"))
## Board cuttout ## Board cuttout
self.panelize_label = QtWidgets.QLabel("<b>Board cutout:</b>") self.panelize_label = QtWidgets.QLabel("<b>Parameters:</b>")
self.panelize_label.setToolTip( self.panelize_label.setToolTip(
"Create an object that contains an array of (x, y) elements,\n" "Create an object that contains an array of (x, y) elements,\n"
"each element is a copy of the source object spaced\n" "each element is a copy of the source object spaced\n"

View File

@ -554,7 +554,7 @@ class FCTab(QtWidgets.QTabWidget):
class FCDetachableTab(QtWidgets.QTabWidget): class FCDetachableTab(QtWidgets.QTabWidget):
# From here: https://stackoverflow.com/questions/47267195/in-pyqt4-is-it-possible-to-detach-tabs-from-a-qtabwidget # From here: https://stackoverflow.com/questions/47267195/in-pyqt4-is-it-possible-to-detach-tabs-from-a-qtabwidget
def __init__(self, parent=None): def __init__(self, protect=None, protect_by_name=None, parent=None):
super().__init__() super().__init__()
@ -569,12 +569,26 @@ class FCDetachableTab(QtWidgets.QTabWidget):
# does not have a parent # does not have a parent
self.detachedTabs = {} self.detachedTabs = {}
# a way to make sure that tabs can't be closed after they attach to the parent tab
self.protect_tab = True if protect is not None and protect is True else False
self.protect_by_name = protect_by_name if isinstance(protect_by_name, list) else None
# Close all detached tabs if the application is closed explicitly # Close all detached tabs if the application is closed explicitly
QtWidgets.qApp.aboutToQuit.connect(self.closeDetachedTabs) # @UndefinedVariable QtWidgets.qApp.aboutToQuit.connect(self.closeDetachedTabs) # @UndefinedVariable
# used by the property self.useOldIndex(param)
self.use_old_index = None
self.old_index = None
self.setTabsClosable(True) self.setTabsClosable(True)
self.tabCloseRequested.connect(self.closeTab) self.tabCloseRequested.connect(self.closeTab)
def useOldIndex(self, param):
if param:
self.use_old_index = True
else:
self.use_old_index = False
def deleteTab(self, currentIndex): def deleteTab(self, currentIndex):
widget = self.widget(currentIndex) widget = self.widget(currentIndex)
@ -610,7 +624,6 @@ class FCDetachableTab(QtWidgets.QTabWidget):
self.insertTab(toIndex, widget, icon, text) self.insertTab(toIndex, widget, icon, text)
self.setCurrentIndex(toIndex) self.setCurrentIndex(toIndex)
## ##
# Detach the tab by removing it's contents and placing them in # Detach the tab by removing it's contents and placing them in
# a DetachedTab window # a DetachedTab window
@ -620,6 +633,8 @@ class FCDetachableTab(QtWidgets.QTabWidget):
@pyqtSlot(int, QtCore.QPoint) @pyqtSlot(int, QtCore.QPoint)
def detachTab(self, index, point): def detachTab(self, index, point):
self.old_index = index
# Get the tab content # Get the tab content
name = self.tabText(index) name = self.tabText(index)
icon = self.tabIcon(index) icon = self.tabIcon(index)
@ -663,6 +678,9 @@ class FCDetachableTab(QtWidgets.QTabWidget):
# Remove the reference # Remove the reference
del self.detachedTabs[name] del self.detachedTabs[name]
# helps in restoring the tab to the same index that it was before was detached
insert_index = self.old_index if self.use_old_index is True else insertAt
# Create an image from the given icon (for comparison) # Create an image from the given icon (for comparison)
if not icon.isNull(): if not icon.isNull():
try: try:
@ -686,21 +704,30 @@ class FCDetachableTab(QtWidgets.QTabWidget):
# Determine if the given image and the main window icon are the same. # Determine if the given image and the main window icon are the same.
# If they are, then do not add the icon to the tab # If they are, then do not add the icon to the tab
if tabIconImage == windowIconImage: if tabIconImage == windowIconImage:
if insertAt == None: if insert_index is None:
index = self.addTab(contentWidget, name) index = self.addTab(contentWidget, name)
else: else:
index = self.insertTab(insertAt, contentWidget, name) index = self.insertTab(insert_index, contentWidget, name)
else: else:
if insertAt == None: if insert_index is None:
index = self.addTab(contentWidget, icon, name) index = self.addTab(contentWidget, icon, name)
else: else:
index = self.insertTab(insertAt, contentWidget, icon, name) index = self.insertTab(insert_index, contentWidget, icon, name)
# on reattaching the tab if protect is true then the closure button is not added
if self.protect_tab is True:
self.protectTab(index)
# on reattaching the tab disable the closure button for the tabs with the name in the self.protect_by_name list
if self.protect_by_name is not None:
for tab_name in self.protect_by_name:
for index in range(self.count()):
if str(tab_name) == str(self.tabText(index)):
self.protectTab(index)
# Make this tab the current tab # Make this tab the current tab
if index > -1: if index > -1:
self.setCurrentIndex(index) self.setCurrentIndex(insert_index) if self.use_old_index else self.setCurrentIndex(index)
## ##
# Remove the tab with the given name, even if it is detached # Remove the tab with the given name, even if it is detached
@ -986,8 +1013,6 @@ class FCDetachableTab(QtWidgets.QTabWidget):
self.dragDropedPos = event.pos() self.dragDropedPos = event.pos()
QtWidgets.QTabBar.dropEvent(self, event) QtWidgets.QTabBar.dropEvent(self, event)
# Determine if the detached tab drop event occurred on an existing tab, # Determine if the detached tab drop event occurred on an existing tab,
# then send the event to the DetachableTabWidget # then send the event to the DetachableTabWidget
def detachedTabDrop(self, name, dropPos): def detachedTabDrop(self, name, dropPos):

View File

@ -9,11 +9,15 @@ CAD program, and create G-Code for Isolation routing.
================================================= =================================================
24.02.2019 4.02.2019
- modified the Toolchange_Probe_general postprocessor file to remove any Z moves before the actual toolchange event - modified the Toolchange_Probe_general postprocessor file to remove any Z moves before the actual toolchange event
- created a prototype postprocessor file for usage with tool probing in MACH3 - created a prototype postprocessor file for usage with tool probing in MACH3
- added the default values for Tool Film and Tool Panelize to the Edit -> Preferences - added the default values for Tool Film and Tool Panelize to the Edit -> Preferences
- added a new parameter in the Tool Film which control the thickness of the stroke width in the resulting SVG. It's a scale parameter.
- whatever was the visibility of the corresponding toolbar when we enter in the Editor, it will be set after exit from the Editor (either Geometry Editor or Excellon Editor).
- added ability to be detached for the tabs in the Notebook section (Project, Selected and Tool)
- added ability for all detachable tabs to be restored to the same position from where they were detached.
3.3.2019 3.3.2019

View File

@ -48,6 +48,8 @@ class ToolCutOut(FlatCAMTool):
self.obj_combo = QtWidgets.QComboBox() self.obj_combo = QtWidgets.QComboBox()
self.obj_combo.setModel(self.app.collection) self.obj_combo.setModel(self.app.collection)
self.obj_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.obj_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
self.obj_combo.setCurrentIndex(1)
self.object_label = QtWidgets.QLabel("Object:") self.object_label = QtWidgets.QLabel("Object:")
self.object_label.setToolTip( self.object_label.setToolTip(
"Object to be cutout. " "Object to be cutout. "
@ -201,7 +203,6 @@ class ToolCutOut(FlatCAMTool):
def set_tool_ui(self): def set_tool_ui(self):
self.reset_fields() self.reset_fields()
self.obj_combo.setCurrentIndex(1)
self.dia.set_value(float(self.app.defaults["tools_cutouttooldia"])) self.dia.set_value(float(self.app.defaults["tools_cutouttooldia"]))
self.margin.set_value(float(self.app.defaults["tools_cutoutmargin"])) self.margin.set_value(float(self.app.defaults["tools_cutoutmargin"]))

View File

@ -29,6 +29,7 @@ class DblSidedTool(FlatCAMTool):
self.gerber_object_combo = QtWidgets.QComboBox() self.gerber_object_combo = QtWidgets.QComboBox()
self.gerber_object_combo.setModel(self.app.collection) self.gerber_object_combo.setModel(self.app.collection)
self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
self.gerber_object_combo.setCurrentIndex(1)
self.botlay_label = QtWidgets.QLabel("<b>GERBER:</b>") self.botlay_label = QtWidgets.QLabel("<b>GERBER:</b>")
self.botlay_label.setToolTip( self.botlay_label.setToolTip(
@ -52,6 +53,7 @@ class DblSidedTool(FlatCAMTool):
self.exc_object_combo = QtWidgets.QComboBox() self.exc_object_combo = QtWidgets.QComboBox()
self.exc_object_combo.setModel(self.app.collection) self.exc_object_combo.setModel(self.app.collection)
self.exc_object_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex())) self.exc_object_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex()))
self.exc_object_combo.setCurrentIndex(1)
self.excobj_label = QtWidgets.QLabel("<b>EXCELLON:</b>") self.excobj_label = QtWidgets.QLabel("<b>EXCELLON:</b>")
self.excobj_label.setToolTip( self.excobj_label.setToolTip(
@ -262,9 +264,6 @@ class DblSidedTool(FlatCAMTool):
def set_tool_ui(self): def set_tool_ui(self):
self.reset_fields() self.reset_fields()
self.gerber_object_combo.setCurrentIndex(1)
self.exc_object_combo.setCurrentIndex(1)
self.point_entry.set_value("") self.point_entry.set_value("")
self.alignment_holes.set_value("") self.alignment_holes.set_value("")

View File

@ -43,6 +43,8 @@ class Film(FlatCAMTool):
self.tf_object_combo = QtWidgets.QComboBox() self.tf_object_combo = QtWidgets.QComboBox()
self.tf_object_combo.setModel(self.app.collection) self.tf_object_combo.setModel(self.app.collection)
self.tf_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.tf_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
self.tf_object_combo.setCurrentIndex(1)
self.tf_object_label = QtWidgets.QLabel("Film Object:") self.tf_object_label = QtWidgets.QLabel("Film Object:")
self.tf_object_label.setToolTip( self.tf_object_label.setToolTip(
"Object for which to create the film." "Object for which to create the film."
@ -74,6 +76,7 @@ class Film(FlatCAMTool):
self.tf_box_combo = QtWidgets.QComboBox() self.tf_box_combo = QtWidgets.QComboBox()
self.tf_box_combo.setModel(self.app.collection) self.tf_box_combo.setModel(self.app.collection)
self.tf_box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.tf_box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
self.tf_box_combo.setCurrentIndex(1)
self.tf_box_combo_label = QtWidgets.QLabel("Box Object:") self.tf_box_combo_label = QtWidgets.QLabel("Box Object:")
self.tf_box_combo_label.setToolTip( self.tf_box_combo_label.setToolTip(
@ -113,6 +116,15 @@ class Film(FlatCAMTool):
) )
tf_form_layout.addRow(self.boundary_label, self.boundary_entry) tf_form_layout.addRow(self.boundary_label, self.boundary_entry)
self.film_scale_entry = FCEntry()
self.film_scale_label = QtWidgets.QLabel("Scale Stroke:")
self.film_scale_label.setToolTip(
"Scale the line stroke thickness of each feature in the SVG file.\n"
"It means that the line that envelope each SVG feature will be thicker or thinner,\n"
"therefore the fine features may be more affected by this parameter."
)
tf_form_layout.addRow(self.film_scale_label, self.film_scale_entry)
# Buttons # Buttons
hlay = QtWidgets.QHBoxLayout() hlay = QtWidgets.QHBoxLayout()
self.layout.addLayout(hlay) self.layout.addLayout(hlay)
@ -157,19 +169,22 @@ class Film(FlatCAMTool):
def set_tool_ui(self): def set_tool_ui(self):
self.reset_fields() self.reset_fields()
self.tf_object_combo.setCurrentIndex(1)
self.tf_box_combo.setCurrentIndex(1)
f_type = self.app.defaults["tools_film_type"] if self.app.defaults["tools_film_type"] else 'neg' f_type = self.app.defaults["tools_film_type"] if self.app.defaults["tools_film_type"] else 'neg'
self.film_type.set_value(str(f_type)) self.film_type.set_value(str(f_type))
b_entry = self.app.defaults[ "tools_film_boundary"] if self.app.defaults[ "tools_film_boundary"] else 0.0 b_entry = self.app.defaults[ "tools_film_boundary"] if self.app.defaults[ "tools_film_boundary"] else 0.0
self.boundary_entry.set_value(float(b_entry)) self.boundary_entry.set_value(float(b_entry))
scale_stroke_width = self.app.defaults["tools_film_scale"] if self.app.defaults["tools_film_scale"] else 0.0
self.film_scale_entry.set_value(int(scale_stroke_width))
def on_film_creation(self): def on_film_creation(self):
try: try:
name = self.tf_object_combo.currentText() name = self.tf_object_combo.currentText()
except: except:
self.app.inform.emit("[ERROR_NOTCL] No FlatCAM object selected. Load an object for Film and retry.") self.app.inform.emit("[ERROR_NOTCL] No FlatCAM object selected. Load an object for Film and retry.")
return return
try: try:
boxname = self.tf_box_combo.currentText() boxname = self.tf_box_combo.currentText()
except: except:
@ -187,6 +202,13 @@ class Film(FlatCAMTool):
"use a number.") "use a number.")
return return
try:
scale_stroke_width = int(self.film_scale_entry.get_value())
except ValueError:
self.app.inform.emit("[ERROR_NOTCL]Wrong value format entered, "
"use a number.")
return
if border is None: if border is None:
border = 0 border = 0
@ -207,7 +229,7 @@ class Film(FlatCAMTool):
self.app.inform.emit("[WARNING_NOTCL]Export SVG positive cancelled.") self.app.inform.emit("[WARNING_NOTCL]Export SVG positive cancelled.")
return return
else: else:
self.app.export_svg_black(name, boxname, filename) self.app.export_svg_black(name, boxname, filename, scale_factor=scale_stroke_width)
else: else:
try: try:
filename, _ = QtWidgets.QFileDialog.getSaveFileName( filename, _ = QtWidgets.QFileDialog.getSaveFileName(
@ -223,7 +245,7 @@ class Film(FlatCAMTool):
self.app.inform.emit("[WARNING_NOTCL]Export SVG negative cancelled.") self.app.inform.emit("[WARNING_NOTCL]Export SVG negative cancelled.")
return return
else: else:
self.app.export_svg_negative(name, boxname, filename, border) self.app.export_svg_negative(name, boxname, filename, border, scale_factor=scale_stroke_width)
def reset_fields(self): def reset_fields(self):
self.tf_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.tf_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))

View File

@ -34,6 +34,8 @@ class NonCopperClear(FlatCAMTool, Gerber):
self.object_combo = QtWidgets.QComboBox() self.object_combo = QtWidgets.QComboBox()
self.object_combo.setModel(self.app.collection) self.object_combo.setModel(self.app.collection)
self.object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
self.object_combo.setCurrentIndex(1)
self.object_label = QtWidgets.QLabel("Gerber:") self.object_label = QtWidgets.QLabel("Gerber:")
self.object_label.setToolTip( self.object_label.setToolTip(
"Gerber object to be cleared of excess copper. " "Gerber object to be cleared of excess copper. "
@ -246,8 +248,6 @@ class NonCopperClear(FlatCAMTool, Gerber):
def set_tool_ui(self): def set_tool_ui(self):
self.tools_frame.show() self.tools_frame.show()
self.object_combo.setCurrentIndex(1)
self.ncc_overlap_entry.set_value(self.app.defaults["tools_nccoverlap"]) self.ncc_overlap_entry.set_value(self.app.defaults["tools_nccoverlap"])
self.ncc_margin_entry.set_value(self.app.defaults["tools_nccmargin"]) self.ncc_margin_entry.set_value(self.app.defaults["tools_nccmargin"])
self.ncc_method_radio.set_value(self.app.defaults["tools_nccmethod"]) self.ncc_method_radio.set_value(self.app.defaults["tools_nccmethod"])

View File

@ -32,6 +32,8 @@ class ToolPaint(FlatCAMTool, Gerber):
self.object_combo = QtWidgets.QComboBox() self.object_combo = QtWidgets.QComboBox()
self.object_combo.setModel(self.app.collection) self.object_combo.setModel(self.app.collection)
self.object_combo.setRootModelIndex(self.app.collection.index(2, 0, QtCore.QModelIndex())) self.object_combo.setRootModelIndex(self.app.collection.index(2, 0, QtCore.QModelIndex()))
self.object_combo.setCurrentIndex(1)
self.object_label = QtWidgets.QLabel("Geometry:") self.object_label = QtWidgets.QLabel("Geometry:")
self.object_label.setToolTip( self.object_label.setToolTip(
"Geometry object to be painted. " "Geometry object to be painted. "
@ -323,7 +325,6 @@ class ToolPaint(FlatCAMTool, Gerber):
def set_tool_ui(self): def set_tool_ui(self):
self.tools_frame.show() self.tools_frame.show()
self.reset_fields() self.reset_fields()
self.object_combo.setCurrentIndex(1)
## Init the GUI interface ## Init the GUI interface
self.paintmargin_entry.set_value(self.default_data["paintmargin"]) self.paintmargin_entry.set_value(self.default_data["paintmargin"])

View File

@ -43,6 +43,8 @@ class Panelize(FlatCAMTool):
self.object_combo = QtWidgets.QComboBox() self.object_combo = QtWidgets.QComboBox()
self.object_combo.setModel(self.app.collection) self.object_combo.setModel(self.app.collection)
self.object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
self.object_combo.setCurrentIndex(1)
self.object_label = QtWidgets.QLabel("Object:") self.object_label = QtWidgets.QLabel("Object:")
self.object_label.setToolTip( self.object_label.setToolTip(
"Object to be panelized. This means that it will\n" "Object to be panelized. This means that it will\n"
@ -74,6 +76,8 @@ class Panelize(FlatCAMTool):
self.box_combo = QtWidgets.QComboBox() self.box_combo = QtWidgets.QComboBox()
self.box_combo.setModel(self.app.collection) self.box_combo.setModel(self.app.collection)
self.box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.box_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
self.box_combo.setCurrentIndex(1)
self.box_combo_label = QtWidgets.QLabel("Box Object:") self.box_combo_label = QtWidgets.QLabel("Box Object:")
self.box_combo_label.setToolTip( self.box_combo_label.setToolTip(
"The actual object that is used a container for the\n " "The actual object that is used a container for the\n "
@ -187,8 +191,6 @@ class Panelize(FlatCAMTool):
def set_tool_ui(self): def set_tool_ui(self):
self.reset_fields() self.reset_fields()
self.object_combo.setCurrentIndex(1)
self.box_combo.setCurrentIndex(1)
sp_c = self.app.defaults["tools_panelize_spacing_columns"] if \ sp_c = self.app.defaults["tools_panelize_spacing_columns"] if \
self.app.defaults["tools_panelize_spacing_columns"] else 0.0 self.app.defaults["tools_panelize_spacing_columns"] else 0.0