From 9dfbae7515d0beec3d388e6ea088fdbcc3ff3800 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 6 Feb 2019 20:29:53 +0200 Subject: [PATCH] - added plot kind for CNC Job in the App Preferences --- FlatCAM.py | 4 +++- FlatCAMApp.py | 7 ++++++- FlatCAMGUI.py | 47 ++++++++++++++++++++++++++++++++++------------- FlatCAMObj.py | 2 +- ObjectUI.py | 9 +++++++-- README.md | 1 + 6 files changed, 52 insertions(+), 18 deletions(-) diff --git a/FlatCAM.py b/FlatCAM.py index 440181f0..28eb08bf 100644 --- a/FlatCAM.py +++ b/FlatCAM.py @@ -5,7 +5,7 @@ from PyQt5 import QtGui, QtCore, QtWidgets from FlatCAMApp import App from multiprocessing import freeze_support import VisPyPatches - +import qtmodern.styles, qtmodern.windows if sys.platform == "win32": # cx_freeze 'module win32' workaround @@ -34,5 +34,7 @@ if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) fc = App() + + # qtmodern.styles.dark(app) sys.exit(app.exec_()) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 7cdd099f..de12606f 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -394,6 +394,7 @@ class App(QtCore.QObject): "geometry_extracut": self.geometry_defaults_form.geometry_opt_group.extracut_cb, "cncjob_plot": self.cncjob_defaults_form.cncjob_gen_group.plot_cb, + "cncjob_plot_kind": self.cncjob_defaults_form.cncjob_gen_group.cncplot_method_radio, "cncjob_tooldia": self.cncjob_defaults_form.cncjob_gen_group.tooldia_entry, "cncjob_coords_decimals": self.cncjob_defaults_form.cncjob_gen_group.coords_dec_entry, "cncjob_fr_decimals": self.cncjob_defaults_form.cncjob_gen_group.fr_dec_entry, @@ -580,6 +581,7 @@ class App(QtCore.QObject): "geometry_circle_steps": 64, "cncjob_plot": True, + "cncjob_plot_kind": 'all', "cncjob_tooldia": 0.0393701, "cncjob_coords_decimals": 4, "cncjob_fr_decimals": 2, @@ -2288,7 +2290,10 @@ class App(QtCore.QObject): def worker_task(obj): with self.proc_container.new("Plotting"): - obj.plot() + if isinstance(obj, FlatCAMCNCjob): + obj.plot(kind=self.defaults["cncjob_plot_kind"]) + else: + obj.plot() t1 = time.time() # DEBUG self.log.debug("%f seconds adding object and plotting." % (t1 - t0)) self.object_plotted.emit(obj) diff --git a/FlatCAMGUI.py b/FlatCAMGUI.py index e1e30c9e..efdb7cc6 100644 --- a/FlatCAMGUI.py +++ b/FlatCAMGUI.py @@ -1968,7 +1968,7 @@ class CNCJobPreferencesUI(QtWidgets.QWidget): self.setLayout(self.layout) self.cncjob_gen_group = CNCJobGenPrefGroupUI() - self.cncjob_gen_group.setFixedWidth(260) + self.cncjob_gen_group.setFixedWidth(270) self.cncjob_opt_group = CNCJobOptPrefGroupUI() self.cncjob_opt_group.setFixedWidth(260) @@ -3333,24 +3333,45 @@ class CNCJobGenPrefGroupUI(OptionsGroupUI): grid0 = QtWidgets.QGridLayout() self.layout.addLayout(grid0) + grid0.setColumnStretch(1, 1) + grid0.setColumnStretch(2, 1) # Plot CB # self.plot_cb = QtWidgets.QCheckBox('Plot') - self.plot_cb = FCCheckBox('Plot') + self.plot_cb = FCCheckBox('Plot Object') self.plot_cb.setToolTip( "Plot (show) this object." ) grid0.addWidget(self.plot_cb, 0, 0) + # Plot Kind + self.cncplot_method_label = QtWidgets.QLabel("Plot kind:") + self.cncplot_method_label.setToolTip( + "This selects the kind of geometries on the canvas to plot.\n" + "Those can be either of type 'Travel' which means the moves\n" + "above the work piece or it can be of type 'Cut',\n" + "which means the moves that cut into the material." + ) + + self.cncplot_method_radio = RadioSet([ + {"label": "All", "value": "all"}, + {"label": "Travel", "value": "travel"}, + {"label": "Cut", "value": "cut"} + ], stretch=False) + + grid0.addWidget(self.cncplot_method_label, 1, 0) + grid0.addWidget(self.cncplot_method_radio, 1, 1) + grid0.addWidget(QtWidgets.QLabel(''), 1, 2) + # Number of circle steps for circular aperture linear approximation self.steps_per_circle_label = QtWidgets.QLabel("Circle Steps:") self.steps_per_circle_label.setToolTip( "The number of circle steps for GCode \n" "circle and arc shapes linear approximation." ) - grid0.addWidget(self.steps_per_circle_label, 1, 0) + grid0.addWidget(self.steps_per_circle_label, 2, 0) self.steps_per_circle_entry = IntEntry() - grid0.addWidget(self.steps_per_circle_entry, 1, 1) + grid0.addWidget(self.steps_per_circle_entry, 2, 1) # Tool dia for plot tdlabel = QtWidgets.QLabel('Tool dia:') @@ -3358,29 +3379,29 @@ class CNCJobGenPrefGroupUI(OptionsGroupUI): "Diameter of the tool to be\n" "rendered in the plot." ) - grid0.addWidget(tdlabel, 2, 0) + grid0.addWidget(tdlabel, 3, 0) self.tooldia_entry = LengthEntry() - grid0.addWidget(self.tooldia_entry, 2, 1) + grid0.addWidget(self.tooldia_entry, 3, 1) # Number of decimals to use in GCODE coordinates - cdeclabel = QtWidgets.QLabel('Coords decimals:') + cdeclabel = QtWidgets.QLabel('Coords dec.:') cdeclabel.setToolTip( "The number of decimals to be used for \n" "the X, Y, Z coordinates in CNC code (GCODE, etc.)" ) - grid0.addWidget(cdeclabel, 3, 0) + grid0.addWidget(cdeclabel, 4, 0) self.coords_dec_entry = IntEntry() - grid0.addWidget(self.coords_dec_entry, 3, 1) + grid0.addWidget(self.coords_dec_entry, 4, 1) # Number of decimals to use in GCODE feedrate - frdeclabel = QtWidgets.QLabel('Feedrate decimals:') + frdeclabel = QtWidgets.QLabel('Feedrate dec.:') frdeclabel.setToolTip( "The number of decimals to be used for \n" - "the feedrate in CNC code (GCODE, etc.)" + "the Feedrate parameter in CNC code (GCODE, etc.)" ) - grid0.addWidget(frdeclabel, 4, 0) + grid0.addWidget(frdeclabel, 5, 0) self.fr_dec_entry = IntEntry() - grid0.addWidget(self.fr_dec_entry, 4, 1) + grid0.addWidget(self.fr_dec_entry, 5, 1) self.layout.addStretch() diff --git a/FlatCAMObj.py b/FlatCAMObj.py index 645c4573..00875ec8 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -4235,7 +4235,7 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob): self.to_form() # set the kind of geometries are plotted by default with plot2() from camlib.CNCJob - self.ui.cncplot_method_combo.set_value('all') + self.ui.cncplot_method_combo.set_value(self.app.defaults["cncjob_plot_kind"]) self.ui.updateplot_button.clicked.connect(self.on_updateplot_button_click) self.ui.export_gcode_button.clicked.connect(self.on_exportgcode_button_click) diff --git a/ObjectUI.py b/ObjectUI.py index fc8a8287..35f29727 100644 --- a/ObjectUI.py +++ b/ObjectUI.py @@ -1129,9 +1129,14 @@ class CNCObjectUI(ObjectUI): {"label": "Cut", "value": "cut"} ], stretch=False) - f_lay = QtWidgets.QFormLayout() + f_lay = QtWidgets.QGridLayout() + f_lay.setColumnStretch(1, 1) + f_lay.setColumnStretch(2, 1) + self.custom_box.addLayout(f_lay) - f_lay.addRow(self.cncplot_method_label, self.cncplot_method_combo) + f_lay.addWidget(self.cncplot_method_label, 0, 0) + f_lay.addWidget(self.cncplot_method_combo, 0, 1) + f_lay.addWidget(QtWidgets.QLabel(''), 0, 2) e1_lbl = QtWidgets.QLabel('') self.custom_box.addWidget(e1_lbl) diff --git a/README.md b/README.md index aba4d043..172ea83a 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ CAD program, and create G-Code for Isolation routing. - changed the messages for Units Conversion - all key shortcuts work across the entire application; moved all the shortcuts definitions in FlatCAMGUI.keyPressEvent() - renamed the theme to layout because it is really a layout change +- added plot kind for CNC Job in the App Preferences - combined the geocutout and cutout_any TCL commands - work in progress 5.02.3019