From 2843810ab3ba9368db743cb61c7a73a44bc80bcf Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sat, 23 Feb 2019 06:11:42 +0200 Subject: [PATCH] - some GUI elements changes --- FlatCAMApp.py | 246 ++++++++++++++--------------- FlatCAMEditor.py | 12 +- FlatCAMGUI.py | 13 +- FlatCAMObj.py | 2 +- ObjectCollection.py | 4 +- PlotCanvas.py | 4 +- README.md | 1 + camlib.py | 2 +- flatcamTools/ToolCalculators.py | 2 +- flatcamTools/ToolMeasurement.py | 6 +- flatcamTools/ToolNonCopperClear.py | 4 +- flatcamTools/ToolPaint.py | 4 +- flatcamTools/ToolProperties.py | 6 +- flatcamTools/ToolSolderPaste.py | 76 ++++----- 14 files changed, 194 insertions(+), 188 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 4c422a9d..26e6abbc 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -776,127 +776,121 @@ class App(QtCore.QObject): # QtCore.QTimer.singleShot(self.defaults["global_defaults_save_period_ms"], auto_save_defaults) # self.options_form = PreferencesUI() - self.general_options_form = GeneralPreferencesUI() - self.gerber_options_form = GerberPreferencesUI() - self.excellon_options_form = ExcellonPreferencesUI() - self.geometry_options_form = GeometryPreferencesUI() - self.cncjob_options_form = CNCJobPreferencesUI() - self.tools_options_form = ToolsPreferencesUI() self.options_form_fields = { - "units": self.general_options_form.general_app_group.units_radio, - "global_gridx": self.general_options_form.general_gui_group.gridx_entry, - "global_gridy": self.general_options_form.general_gui_group.gridy_entry, - "global_snap_max": self.general_options_form.general_gui_group.snap_max_dist_entry, + "units": self.ui.general_options_form.general_app_group.units_radio, + "global_gridx": self.ui.general_options_form.general_gui_group.gridx_entry, + "global_gridy": self.ui.general_options_form.general_gui_group.gridy_entry, + "global_snap_max": self.ui.general_options_form.general_gui_group.snap_max_dist_entry, - "gerber_plot": self.gerber_options_form.gerber_gen_group.plot_cb, - "gerber_solid": self.gerber_options_form.gerber_gen_group.solid_cb, - "gerber_multicolored": self.gerber_options_form.gerber_gen_group.multicolored_cb, + "gerber_plot": self.ui.gerber_options_form.gerber_gen_group.plot_cb, + "gerber_solid": self.ui.gerber_options_form.gerber_gen_group.solid_cb, + "gerber_multicolored": self.ui.gerber_options_form.gerber_gen_group.multicolored_cb, - "gerber_isotooldia": self.gerber_options_form.gerber_opt_group.iso_tool_dia_entry, - "gerber_isopasses": self.gerber_options_form.gerber_opt_group.iso_width_entry, - "gerber_isooverlap": self.gerber_options_form.gerber_opt_group.iso_overlap_entry, - "gerber_combine_passes": self.gerber_options_form.gerber_opt_group.combine_passes_cb, - "gerber_noncoppermargin": self.gerber_options_form.gerber_opt_group.noncopper_margin_entry, - "gerber_noncopperrounded": self.gerber_options_form.gerber_opt_group.noncopper_rounded_cb, - "gerber_bboxmargin": self.gerber_options_form.gerber_opt_group.bbmargin_entry, - "gerber_bboxrounded": self.gerber_options_form.gerber_opt_group.bbrounded_cb, + "gerber_isotooldia": self.ui.gerber_options_form.gerber_opt_group.iso_tool_dia_entry, + "gerber_isopasses": self.ui.gerber_options_form.gerber_opt_group.iso_width_entry, + "gerber_isooverlap": self.ui.gerber_options_form.gerber_opt_group.iso_overlap_entry, + "gerber_combine_passes": self.ui.gerber_options_form.gerber_opt_group.combine_passes_cb, + "gerber_noncoppermargin": self.ui.gerber_options_form.gerber_opt_group.noncopper_margin_entry, + "gerber_noncopperrounded": self.ui.gerber_options_form.gerber_opt_group.noncopper_rounded_cb, + "gerber_bboxmargin": self.ui.gerber_options_form.gerber_opt_group.bbmargin_entry, + "gerber_bboxrounded": self.ui.gerber_options_form.gerber_opt_group.bbrounded_cb, - "excellon_plot": self.excellon_options_form.excellon_gen_group.plot_cb, - "excellon_solid": self.excellon_options_form.excellon_gen_group.solid_cb, - "excellon_format_upper_in": self.excellon_options_form.excellon_gen_group.excellon_format_upper_in_entry, - "excellon_format_lower_in": self.excellon_options_form.excellon_gen_group.excellon_format_lower_in_entry, - "excellon_format_upper_mm": self.excellon_options_form.excellon_gen_group.excellon_format_upper_mm_entry, - "excellon_format_lower_mm": self.excellon_options_form.excellon_gen_group.excellon_format_lower_mm_entry, - "excellon_zeros": self.excellon_options_form.excellon_gen_group.excellon_zeros_radio, - "excellon_units": self.excellon_options_form.excellon_gen_group.excellon_units_radio, - "excellon_optimization_type": self.excellon_options_form.excellon_gen_group.excellon_optimization_radio, - "excellon_feedrate_rapid": self.excellon_options_form.excellon_gen_group.feedrate_rapid_entry, - "excellon_toolchangexy": self.excellon_options_form.excellon_gen_group.toolchangexy_entry, - "excellon_f_plunge": self.excellon_options_form.excellon_gen_group.fplunge_cb, - "excellon_startz": self.excellon_options_form.excellon_gen_group.estartz_entry, - "excellon_endz": self.excellon_options_form.excellon_gen_group.eendz_entry, + "excellon_plot": self.ui.excellon_options_form.excellon_gen_group.plot_cb, + "excellon_solid": self.ui.excellon_options_form.excellon_gen_group.solid_cb, + "excellon_format_upper_in": self.ui.excellon_options_form.excellon_gen_group.excellon_format_upper_in_entry, + "excellon_format_lower_in": self.ui.excellon_options_form.excellon_gen_group.excellon_format_lower_in_entry, + "excellon_format_upper_mm": self.ui.excellon_options_form.excellon_gen_group.excellon_format_upper_mm_entry, + "excellon_format_lower_mm": self.ui.excellon_options_form.excellon_gen_group.excellon_format_lower_mm_entry, + "excellon_zeros": self.ui.excellon_options_form.excellon_gen_group.excellon_zeros_radio, + "excellon_units": self.ui.excellon_options_form.excellon_gen_group.excellon_units_radio, + "excellon_optimization_type": self.ui.excellon_options_form.excellon_gen_group.excellon_optimization_radio, + "excellon_feedrate_rapid": self.ui.excellon_options_form.excellon_gen_group.feedrate_rapid_entry, + "excellon_toolchangexy": self.ui.excellon_options_form.excellon_gen_group.toolchangexy_entry, + "excellon_f_plunge": self.ui.excellon_options_form.excellon_gen_group.fplunge_cb, + "excellon_startz": self.ui.excellon_options_form.excellon_gen_group.estartz_entry, + "excellon_endz": self.ui.excellon_options_form.excellon_gen_group.eendz_entry, - "excellon_drillz": self.excellon_options_form.excellon_opt_group.cutz_entry, - "excellon_travelz": self.excellon_options_form.excellon_opt_group.travelz_entry, - "excellon_feedrate": self.excellon_options_form.excellon_opt_group.feedrate_entry, - "excellon_spindlespeed": self.excellon_options_form.excellon_opt_group.spindlespeed_entry, - "excellon_dwell": self.excellon_options_form.excellon_opt_group.dwell_cb, - "excellon_dwelltime": self.excellon_options_form.excellon_opt_group.dwelltime_entry, - "excellon_toolchange": self.excellon_options_form.excellon_opt_group.toolchange_cb, - "excellon_toolchangez": self.excellon_options_form.excellon_opt_group.toolchangez_entry, - "excellon_tooldia": self.excellon_options_form.excellon_opt_group.tooldia_entry, - "excellon_ppname_e": self.excellon_options_form.excellon_opt_group.pp_excellon_name_cb, + "excellon_drillz": self.ui.excellon_options_form.excellon_opt_group.cutz_entry, + "excellon_travelz": self.ui.excellon_options_form.excellon_opt_group.travelz_entry, + "excellon_feedrate": self.ui.excellon_options_form.excellon_opt_group.feedrate_entry, + "excellon_spindlespeed": self.ui.excellon_options_form.excellon_opt_group.spindlespeed_entry, + "excellon_dwell": self.ui.excellon_options_form.excellon_opt_group.dwell_cb, + "excellon_dwelltime": self.ui.excellon_options_form.excellon_opt_group.dwelltime_entry, + "excellon_toolchange": self.ui.excellon_options_form.excellon_opt_group.toolchange_cb, + "excellon_toolchangez": self.ui.excellon_options_form.excellon_opt_group.toolchangez_entry, + "excellon_tooldia": self.ui.excellon_options_form.excellon_opt_group.tooldia_entry, + "excellon_ppname_e": self.ui.excellon_options_form.excellon_opt_group.pp_excellon_name_cb, - "geometry_plot": self.geometry_options_form.geometry_gen_group.plot_cb, - "geometry_cnctooldia": self.geometry_options_form.geometry_gen_group.cnctooldia_entry, - "geometry_segx": self.geometry_options_form.geometry_gen_group.segx_entry, - "geometry_segy": self.geometry_options_form.geometry_gen_group.segy_entry, - "geometry_feedrate_rapid": self.geometry_options_form.geometry_gen_group.cncfeedrate_rapid_entry, - "geometry_f_plunge": self.geometry_options_form.geometry_gen_group.fplunge_cb, - "geometry_toolchangexy": self.geometry_options_form.geometry_gen_group.toolchangexy_entry, - "geometry_startz": self.geometry_options_form.geometry_gen_group.gstartz_entry, - "geometry_endz": self.geometry_options_form.geometry_gen_group.gendz_entry, - "geometry_extracut": self.geometry_options_form.geometry_gen_group.extracut_cb, + "geometry_plot": self.ui.geometry_options_form.geometry_gen_group.plot_cb, + "geometry_cnctooldia": self.ui.geometry_options_form.geometry_gen_group.cnctooldia_entry, + "geometry_segx": self.ui.geometry_options_form.geometry_gen_group.segx_entry, + "geometry_segy": self.ui.geometry_options_form.geometry_gen_group.segy_entry, + "geometry_feedrate_rapid": self.ui.geometry_options_form.geometry_gen_group.cncfeedrate_rapid_entry, + "geometry_f_plunge": self.ui.geometry_options_form.geometry_gen_group.fplunge_cb, + "geometry_toolchangexy": self.ui.geometry_options_form.geometry_gen_group.toolchangexy_entry, + "geometry_startz": self.ui.geometry_options_form.geometry_gen_group.gstartz_entry, + "geometry_endz": self.ui.geometry_options_form.geometry_gen_group.gendz_entry, + "geometry_extracut": self.ui.geometry_options_form.geometry_gen_group.extracut_cb, - "geometry_cutz": self.geometry_options_form.geometry_opt_group.cutz_entry, - "geometry_travelz": self.geometry_options_form.geometry_opt_group.travelz_entry, - "geometry_feedrate": self.geometry_options_form.geometry_opt_group.cncfeedrate_entry, - "geometry_feedrate_z": self.geometry_options_form.geometry_opt_group.cncplunge_entry, - "geometry_spindlespeed": self.geometry_options_form.geometry_opt_group.cncspindlespeed_entry, - "geometry_dwell": self.geometry_options_form.geometry_opt_group.dwell_cb, - "geometry_dwelltime": self.geometry_options_form.geometry_opt_group.dwelltime_entry, - "geometry_ppname_g": self.geometry_options_form.geometry_opt_group.pp_geometry_name_cb, - "geometry_toolchange": self.geometry_options_form.geometry_opt_group.toolchange_cb, - "geometry_toolchangez": self.geometry_options_form.geometry_opt_group.toolchangez_entry, - "geometry_depthperpass": self.geometry_options_form.geometry_opt_group.depthperpass_entry, - "geometry_multidepth": self.geometry_options_form.geometry_opt_group.multidepth_cb, + "geometry_cutz": self.ui.geometry_options_form.geometry_opt_group.cutz_entry, + "geometry_travelz": self.ui.geometry_options_form.geometry_opt_group.travelz_entry, + "geometry_feedrate": self.ui.geometry_options_form.geometry_opt_group.cncfeedrate_entry, + "geometry_feedrate_z": self.ui.geometry_options_form.geometry_opt_group.cncplunge_entry, + "geometry_spindlespeed": self.ui.geometry_options_form.geometry_opt_group.cncspindlespeed_entry, + "geometry_dwell": self.ui.geometry_options_form.geometry_opt_group.dwell_cb, + "geometry_dwelltime": self.ui.geometry_options_form.geometry_opt_group.dwelltime_entry, + "geometry_ppname_g": self.ui.geometry_options_form.geometry_opt_group.pp_geometry_name_cb, + "geometry_toolchange": self.ui.geometry_options_form.geometry_opt_group.toolchange_cb, + "geometry_toolchangez": self.ui.geometry_options_form.geometry_opt_group.toolchangez_entry, + "geometry_depthperpass": self.ui.geometry_options_form.geometry_opt_group.depthperpass_entry, + "geometry_multidepth": self.ui.geometry_options_form.geometry_opt_group.multidepth_cb, - "cncjob_plot": self.cncjob_options_form.cncjob_gen_group.plot_cb, - "cncjob_tooldia": self.cncjob_options_form.cncjob_gen_group.tooldia_entry, + "cncjob_plot": self.ui.cncjob_options_form.cncjob_gen_group.plot_cb, + "cncjob_tooldia": self.ui.cncjob_options_form.cncjob_gen_group.tooldia_entry, - "cncjob_prepend": self.cncjob_options_form.cncjob_opt_group.prepend_text, - "cncjob_append": self.cncjob_options_form.cncjob_opt_group.append_text, + "cncjob_prepend": self.ui.cncjob_options_form.cncjob_opt_group.prepend_text, + "cncjob_append": self.ui.cncjob_options_form.cncjob_opt_group.append_text, - "tools_ncctools": self.tools_options_form.tools_ncc_group.ncc_tool_dia_entry, - "tools_nccoverlap": self.tools_options_form.tools_ncc_group.ncc_overlap_entry, - "tools_nccmargin": self.tools_options_form.tools_ncc_group.ncc_margin_entry, + "tools_ncctools": self.ui.tools_options_form.tools_ncc_group.ncc_tool_dia_entry, + "tools_nccoverlap": self.ui.tools_options_form.tools_ncc_group.ncc_overlap_entry, + "tools_nccmargin": self.ui.tools_options_form.tools_ncc_group.ncc_margin_entry, - "tools_cutouttooldia": self.tools_options_form.tools_cutout_group.cutout_tooldia_entry, - "tools_cutoutmargin": self.tools_options_form.tools_cutout_group.cutout_margin_entry, - "tools_cutoutgapsize": self.tools_options_form.tools_cutout_group.cutout_gap_entry, - "tools_gaps_rect": self.tools_options_form.tools_cutout_group.gaps_radio, - "tools_gaps_ff": self.tools_options_form.tools_cutout_group.gaps_combo, + "tools_cutouttooldia": self.ui.tools_options_form.tools_cutout_group.cutout_tooldia_entry, + "tools_cutoutmargin": self.ui.tools_options_form.tools_cutout_group.cutout_margin_entry, + "tools_cutoutgapsize": self.ui.tools_options_form.tools_cutout_group.cutout_gap_entry, + "tools_gaps_rect": self.ui.tools_options_form.tools_cutout_group.gaps_radio, + "tools_gaps_ff": self.ui.tools_options_form.tools_cutout_group.gaps_combo, - "tools_painttooldia": self.tools_options_form.tools_paint_group.painttooldia_entry, - "tools_paintoverlap": self.tools_options_form.tools_paint_group.paintoverlap_entry, - "tools_paintmargin": self.tools_options_form.tools_paint_group.paintmargin_entry, - "tools_paintmethod": self.tools_options_form.tools_paint_group.paintmethod_combo, - "tools_selectmethod": self.tools_options_form.tools_paint_group.selectmethod_combo, - "tools_pathconnect": self.tools_options_form.tools_paint_group.pathconnect_cb, - "tools_paintcontour": self.tools_options_form.tools_paint_group.contour_cb, + "tools_painttooldia": self.ui.tools_options_form.tools_paint_group.painttooldia_entry, + "tools_paintoverlap": self.ui.tools_options_form.tools_paint_group.paintoverlap_entry, + "tools_paintmargin": self.ui.tools_options_form.tools_paint_group.paintmargin_entry, + "tools_paintmethod": self.ui.tools_options_form.tools_paint_group.paintmethod_combo, + "tools_selectmethod": self.ui.tools_options_form.tools_paint_group.selectmethod_combo, + "tools_pathconnect": self.ui.tools_options_form.tools_paint_group.pathconnect_cb, + "tools_paintcontour": self.ui.tools_options_form.tools_paint_group.contour_cb, - "tools_2sided_mirror_axis": self.tools_options_form.tools_2sided_group.mirror_axis_radio, - "tools_2sided_axis_loc": self.tools_options_form.tools_2sided_group.axis_location_radio, - "tools_2sided_drilldia": self.tools_options_form.tools_2sided_group.drill_dia_entry, + "tools_2sided_mirror_axis": self.ui.tools_options_form.tools_2sided_group.mirror_axis_radio, + "tools_2sided_axis_loc": self.ui.tools_options_form.tools_2sided_group.axis_location_radio, + "tools_2sided_drilldia": self.ui.tools_options_form.tools_2sided_group.drill_dia_entry, - "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_scale": self.tools_options_form.tools_film_group.film_scale_entry, + "tools_film_type": self.ui.tools_options_form.tools_film_group.film_type_radio, + "tools_film_boundary": self.ui.tools_options_form.tools_film_group.film_boundary_entry, + "tools_film_scale": self.ui.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_rows": self.tools_options_form.tools_panelize_group.pspacing_rows, - "tools_panelize_columns": self.tools_options_form.tools_panelize_group.pcolumns, - "tools_panelize_rows": self.tools_options_form.tools_panelize_group.prows, - "tools_panelize_constrain": self.tools_options_form.tools_panelize_group.pconstrain_cb, - "tools_panelize_constrainx": self.tools_options_form.tools_panelize_group.px_width_entry, - "tools_panelize_constrainy": self.tools_options_form.tools_panelize_group.py_height_entry + "tools_panelize_spacing_columns": self.ui.tools_options_form.tools_panelize_group.pspacing_columns, + "tools_panelize_spacing_rows": self.ui.tools_options_form.tools_panelize_group.pspacing_rows, + "tools_panelize_columns": self.ui.tools_options_form.tools_panelize_group.pcolumns, + "tools_panelize_rows": self.ui.tools_options_form.tools_panelize_group.prows, + "tools_panelize_constrain": self.ui.tools_options_form.tools_panelize_group.pconstrain_cb, + "tools_panelize_constrainx": self.ui.tools_options_form.tools_panelize_group.px_width_entry, + "tools_panelize_constrainy": self.ui.tools_options_form.tools_panelize_group.py_height_entry } for name in list(self.postprocessors.keys()): - self.geometry_options_form.geometry_opt_group.pp_geometry_name_cb.addItem(name) - self.excellon_options_form.excellon_opt_group.pp_excellon_name_cb.addItem(name) + self.ui.geometry_options_form.geometry_opt_group.pp_geometry_name_cb.addItem(name) + self.ui.excellon_options_form.excellon_opt_group.pp_excellon_name_cb.addItem(name) self.options = LoudDict() self.options.set_change_callback(self.on_options_dict_change) @@ -1298,7 +1292,7 @@ class App(QtCore.QObject): ############################### ### GUI PREFERENCES SIGNALS ### ############################### - self.general_options_form.general_app_group.units_radio.group_toggle_fn = self.on_toggle_units + self.ui.general_options_form.general_app_group.units_radio.group_toggle_fn = self.on_toggle_units self.ui.general_defaults_form.general_app_group.language_apply_btn.clicked.connect(self.on_language_apply) ############################### @@ -1360,7 +1354,7 @@ class App(QtCore.QObject): self.on_excellon_defaults_button) # Load the defaults values into the Excellon Format and Excellon Zeros fields - self.excellon_options_form.excellon_opt_group.excellon_defaults_button.clicked.connect( + self.ui.excellon_options_form.excellon_opt_group.excellon_defaults_button.clicked.connect( self.on_excellon_options_button) # this is a flag to signal to other tools that the ui tooltab is locked and not accessible @@ -2946,7 +2940,7 @@ class App(QtCore.QObject): return # If option is the same, then ignore - if self.general_options_form.general_app_group.units_radio.get_value().upper() == self.options["units"].upper(): + if self.ui.general_options_form.general_app_group.units_radio.get_value().upper() == self.options["units"].upper(): self.log.debug("on_toggle_units(): Same as options, so ignoring.") return @@ -2980,7 +2974,7 @@ class App(QtCore.QObject): # The scaling factor depending on choice of units. factor = 1/25.4 - if self.general_options_form.general_app_group.units_radio.get_value().upper() == 'MM': + if self.ui.general_options_form.general_app_group.units_radio.get_value().upper() == 'MM': factor = 25.4 @@ -3010,7 +3004,7 @@ class App(QtCore.QObject): self.ui.grid_gap_y_entry.set_value(float(self.ui.grid_gap_y_entry.get_value()) * factor) for obj in self.collection.get_list(): - units = self.general_options_form.general_app_group.units_radio.get_value().upper() + units = self.ui.general_options_form.general_app_group.units_radio.get_value().upper() obj.convert_units(units) # make that the properties stored in the object are also updated @@ -3030,10 +3024,10 @@ class App(QtCore.QObject): else: # Undo toggling self.toggle_units_ignore = True - if self.general_options_form.general_app_group.units_radio.get_value().upper() == 'MM': - self.general_options_form.general_app_group.units_radio.set_value('IN') + if self.ui.general_options_form.general_app_group.units_radio.get_value().upper() == 'MM': + self.ui.general_options_form.general_app_group.units_radio.set_value('IN') else: - self.general_options_form.general_app_group.units_radio.set_value('MM') + self.ui.general_options_form.general_app_group.units_radio.set_value('MM') self.toggle_units_ignore = False self.inform.emit("[WARNING_NOTCL]Units conversion cancelled.") @@ -3041,9 +3035,9 @@ class App(QtCore.QObject): def on_toggle_units_click(self): if self.options["units"] == 'MM': - self.general_options_form.general_app_group.units_radio.set_value("IN") + self.ui.general_options_form.general_app_group.units_radio.set_value("IN") else: - self.general_options_form.general_app_group.units_radio.set_value("MM") + self.ui.general_options_form.general_app_group.units_radio.set_value("MM") self.on_toggle_units() def on_language_apply(self): @@ -3138,12 +3132,12 @@ class App(QtCore.QObject): self.cnc_form = self.ui.cncjob_defaults_form self.tools_form = self.ui.tools_defaults_form elif sel == 1: - self.gen_form = self.general_options_form - self.ger_form = self.gerber_options_form - self.exc_form = self.excellon_options_form - self.geo_form = self.geometry_options_form - self.cnc_form = self.cncjob_options_form - self.tools_form = self.tools_options_form + self.gen_form = self.ui.general_options_form + self.ger_form = self.ui.gerber_options_form + self.exc_form = self.ui.excellon_options_form + self.geo_form = self.ui.geometry_options_form + self.cnc_form = self.ui.cncjob_options_form + self.tools_form = self.ui.tools_options_form else: return @@ -3671,7 +3665,7 @@ class App(QtCore.QObject): def on_tool_add_keypress(self): ## Current application units in Upper Case - self.units = self.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.ui.general_options_form.general_app_group.units_radio.get_value().upper() notebook_widget_name = self.ui.notebook.currentWidget().objectName() @@ -4262,7 +4256,7 @@ class App(QtCore.QObject): return 0 def populate_cmenu_grids(self): - units = self.general_options_form.general_app_group.units_radio.get_value().lower() + units = self.ui.general_options_form.general_app_group.units_radio.get_value().lower() self.ui.cmenu_gridmenu.clear() sorted_list = sorted(self.defaults["global_grid_context_menu"][str(units)]) @@ -4283,7 +4277,7 @@ class App(QtCore.QObject): def on_grid_add(self): ## Current application units in lower Case - units = self.general_options_form.general_app_group.units_radio.get_value().lower() + units = self.ui.general_options_form.general_app_group.units_radio.get_value().lower() grid_add_popup = FCInputDialog(title="New Grid ...", text='Enter a Grid VAlue:', @@ -4310,7 +4304,7 @@ class App(QtCore.QObject): def on_grid_delete(self): ## Current application units in lower Case - units = self.general_options_form.general_app_group.units_radio.get_value().lower() + units = self.ui.general_options_form.general_app_group.units_radio.get_value().lower() grid_del_popup = FCInputDialog(title="Delete Grid ...", text='Enter a Grid Value:', @@ -5754,7 +5748,7 @@ class App(QtCore.QObject): ezeros = self.defaults["excellon_exp_zeros"] eformat = self.defaults[ "excellon_exp_format"] - fc_units = self.general_options_form.general_app_group.units_radio.get_value().upper() + fc_units = self.ui.general_options_form.general_app_group.units_radio.get_value().upper() if fc_units == 'MM': factor = 1 if eunits == 'METRIC' else 0.03937 else: @@ -5872,7 +5866,7 @@ class App(QtCore.QObject): return "Could not retrieve object: %s" % obj_name # updated units - units = self.general_options_form.general_app_group.units_radio.get_value().upper() + units = self.ui.general_options_form.general_app_group.units_radio.get_value().upper() if units == 'IN' or units == 'INCH': units = 'INCH' elif units == 'MM' or units == 'METIRC': @@ -5927,7 +5921,7 @@ class App(QtCore.QObject): "Only Geometry and Gerber are supported") return - units = self.general_options_form.general_app_group.units_radio.get_value().upper() + units = self.ui.general_options_form.general_app_group.units_radio.get_value().upper() def obj_init(geo_obj, app_obj): geo_obj.import_svg(filename, obj_type, units=units) @@ -5969,7 +5963,7 @@ class App(QtCore.QObject): "Only Geometry and Gerber are supported") return - units = self.general_options_form.general_app_group.units_radio.get_value().upper() + units = self.ui.general_options_form.general_app_group.units_radio.get_value().upper() def obj_init(geo_obj, app_obj): geo_obj.import_dxf(filename, obj_type, units=units) @@ -6018,7 +6012,7 @@ class App(QtCore.QObject): # Object name name = outname or filename.split('/')[-1].split('\\')[-1] - units = self.general_options_form.general_app_group.units_radio.get_value() + units = self.ui.general_options_form.general_app_group.units_radio.get_value() self.new_object(obj_type, name, obj_init) self.progress.emit(20) diff --git a/FlatCAMEditor.py b/FlatCAMEditor.py index 214f62dc..1b737fdc 100644 --- a/FlatCAMEditor.py +++ b/FlatCAMEditor.py @@ -346,7 +346,7 @@ class TextInputTool(FlatCAMTool): font_name=self.font_name, font_size=font_to_geo_size, font_type=font_to_geo_type, - units=self.app.general_options_form.general_app_group.units_radio.get_value().upper()) + units=self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper()) def font_family(self, font): self.text_input_entry.selectAll() @@ -1483,7 +1483,7 @@ class TransformEditorTool(FlatCAMTool): "[WARNING_NOTCL] Geometry shape rotate cancelled...") def on_offx_key(self): - units = self.app.general_options_form.general_app_group.units_radio.get_value().lower() + units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().lower() val_box = FCInputDialog(title="Offset on X axis ...", text=('Enter a distance Value (%s):' % str(units)), @@ -1502,7 +1502,7 @@ class TransformEditorTool(FlatCAMTool): "[WARNING_NOTCL] Geometry shape offset X cancelled...") def on_offy_key(self): - units = self.app.general_options_form.general_app_group.units_radio.get_value().lower() + units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().lower() val_box = FCInputDialog(title="Offset on Y axis ...", text=('Enter a distance Value (%s):' % str(units)), @@ -4985,7 +4985,7 @@ class FlatCAMExcEditor(QtCore.QObject): self.move_timer.setSingleShot(True) ## Current application units in Upper Case - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() self.key = None # Currently pressed key self.modifiers = None @@ -5059,7 +5059,7 @@ class FlatCAMExcEditor(QtCore.QObject): def set_ui(self): # updated units - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() self.olddia_newdia.clear() self.tool2tooldia.clear() @@ -5099,7 +5099,7 @@ class FlatCAMExcEditor(QtCore.QObject): pass # updated units - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() # make a new name for the new Excellon object (the one with edited content) self.edited_obj_name = self.exc_obj.options['name'] diff --git a/FlatCAMGUI.py b/FlatCAMGUI.py index 97e4aa08..e2a34c19 100644 --- a/FlatCAMGUI.py +++ b/FlatCAMGUI.py @@ -1458,6 +1458,13 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.cncjob_defaults_form = CNCJobPreferencesUI() self.tools_defaults_form = ToolsPreferencesUI() + self.general_options_form = GeneralPreferencesUI() + self.gerber_options_form = GerberPreferencesUI() + self.excellon_options_form = ExcellonPreferencesUI() + self.geometry_options_form = GeometryPreferencesUI() + self.cncjob_options_form = CNCJobPreferencesUI() + self.tools_options_form = ToolsPreferencesUI() + QtWidgets.qApp.installEventFilter(self) # restore the Toolbar State from file @@ -1885,9 +1892,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow): # Change Units if key == QtCore.Qt.Key_Q: if self.app.options["units"] == 'MM': - self.app.general_options_form.general_app_group.units_radio.set_value("IN") + self.app.ui.general_options_form.general_app_group.units_radio.set_value("IN") else: - self.app.general_options_form.general_app_group.units_radio.set_value("MM") + self.app.ui.general_options_form.general_app_group.units_radio.set_value("MM") self.app.on_toggle_units() # Rotate Object by 90 degree CW @@ -2354,7 +2361,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): if key == QtCore.Qt.Key_T or key == 'T': self.app.exc_editor.launched_from_shortcuts = True ## Current application units in Upper Case - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.general_defaults_group.general_app_group.units_radio.get_value().upper() tool_add_popup = FCInputDialog(title="New Tool ...", text='Enter a Tool Diameter:', min=0.0000, max=99.9999, decimals=4) diff --git a/FlatCAMObj.py b/FlatCAMObj.py index be6d8a0b..730ea4cb 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -3533,7 +3533,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): self.ui.geo_tools_table.setCurrentItem(self.ui.geo_tools_table.item(row, 0)) def export_dxf(self): - units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() dwg = None try: dwg = ezdxf.new('R2010') diff --git a/ObjectCollection.py b/ObjectCollection.py index be98ed07..c10c1baf 100644 --- a/ObjectCollection.py +++ b/ObjectCollection.py @@ -451,9 +451,9 @@ class ObjectCollection(QtCore.QAbstractItemModel): # # Change Units # if key == QtCore.Qt.Key_Q: # if self.app.options["units"] == 'MM': - # self.app.general_options_form.general_app_group.units_radio.set_value("IN") + # self.app.ui.general_options_form.general_app_group.units_radio.set_value("IN") # else: - # self.app.general_options_form.general_app_group.units_radio.set_value("MM") + # self.app.ui.general_options_form.general_app_group.units_radio.set_value("MM") # self.app.on_toggle_units() # # # Rotate Object by 90 degree CW diff --git a/PlotCanvas.py b/PlotCanvas.py index 6d66f3d7..e0f2e75f 100644 --- a/PlotCanvas.py +++ b/PlotCanvas.py @@ -65,7 +65,7 @@ class PlotCanvas(QtCore.QObject): self.draw_workspace() # if self.app.defaults['global_workspace'] is True: - # if self.app.general_options_form.general_app_group.units_radio.get_value().upper() == 'MM': + # if self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() == 'MM': # self.wkspace_t = Line(pos=) self.shape_collections = [] @@ -92,7 +92,7 @@ class PlotCanvas(QtCore.QObject): a3p_mm = np.array([(0, 0), (297, 0), (297, 420), (0, 420)]) a3l_mm = np.array([(0, 0), (420, 0), (420, 297), (0, 297)]) - if self.app.general_options_form.general_app_group.units_radio.get_value().upper() == 'MM': + if self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() == 'MM': if self.app.defaults['global_workspaceT'] == 'A4P': a = a4p_mm elif self.app.defaults['global_workspaceT'] == 'A4L': diff --git a/README.md b/README.md index 269e141f..5f6c2121 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ CAD program, and create G-Code for Isolation routing. - added true fullscreen support (for Windows OS) - added the ability of context menu inside the GuiElements.FCCombobox() object. - remade the UI for ToolSolderPaste. The object comboboxes now have context menu's that allow object deletion. Also the last object created is set as current item in comboboxes. +- some GUI elements changes 21.02.2019 diff --git a/camlib.py b/camlib.py index 2a1f3cd8..409cc021 100644 --- a/camlib.py +++ b/camlib.py @@ -6314,7 +6314,7 @@ class CNCjob(Geometry): temp_gcode = '' header_start = False header_stop = False - units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() lines = StringIO(g) for line in lines: diff --git a/flatcamTools/ToolCalculators.py b/flatcamTools/ToolCalculators.py index 92460c78..60c5a3e1 100644 --- a/flatcamTools/ToolCalculators.py +++ b/flatcamTools/ToolCalculators.py @@ -238,7 +238,7 @@ class ToolCalculator(FlatCAMTool): FlatCAMTool.install(self, icon, separator, shortcut='ALT+C', **kwargs) def set_tool_ui(self): - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() ## Initialize form self.mm_entry.set_value('0') diff --git a/flatcamTools/ToolMeasurement.py b/flatcamTools/ToolMeasurement.py index 9890f28a..4694178b 100644 --- a/flatcamTools/ToolMeasurement.py +++ b/flatcamTools/ToolMeasurement.py @@ -12,7 +12,7 @@ class Measurement(FlatCAMTool): def __init__(self, app): FlatCAMTool.__init__(self, app) - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().lower() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().lower() ## Title title_label = QtWidgets.QLabel("%s
" % self.toolName) @@ -173,7 +173,7 @@ class Measurement(FlatCAMTool): # Switch notebook to tool page self.app.ui.notebook.setCurrentWidget(self.app.ui.tool_tab) - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().lower() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().lower() self.show() def toggle(self): @@ -210,7 +210,7 @@ class Measurement(FlatCAMTool): else: # ENABLE the Measuring TOOL self.active = True - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().lower() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().lower() # we disconnect the mouse/key handlers from wherever the measurement tool was called if self.app.call_source == 'app': diff --git a/flatcamTools/ToolNonCopperClear.py b/flatcamTools/ToolNonCopperClear.py index bf42f8f7..e995480b 100644 --- a/flatcamTools/ToolNonCopperClear.py +++ b/flatcamTools/ToolNonCopperClear.py @@ -339,13 +339,13 @@ class NonCopperClear(FlatCAMTool, Gerber): self.obj_name = "" self.ncc_obj = None self.tool_type_item_options = ["C1", "C2", "C3", "C4", "B", "V"] - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() def build_ui(self): self.ui_disconnect() # updated units - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() if self.units == "IN": self.addtool_entry.set_value(0.039) diff --git a/flatcamTools/ToolPaint.py b/flatcamTools/ToolPaint.py index 1f263c1f..977fdd46 100644 --- a/flatcamTools/ToolPaint.py +++ b/flatcamTools/ToolPaint.py @@ -347,7 +347,7 @@ class ToolPaint(FlatCAMTool, Gerber): self.paintoverlap_entry.set_value(self.default_data["paintoverlap"]) # updated units - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() if self.units == "IN": self.addtool_entry.set_value(0.039) @@ -415,7 +415,7 @@ class ToolPaint(FlatCAMTool, Gerber): pass # updated units - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() sorted_tools = [] for k, v in self.paint_tools.items(): diff --git a/flatcamTools/ToolProperties.py b/flatcamTools/ToolProperties.py index 5a7c6280..3fe0cadd 100644 --- a/flatcamTools/ToolProperties.py +++ b/flatcamTools/ToolProperties.py @@ -103,10 +103,10 @@ class Properties(FlatCAMTool): width = abs(ymax - ymin) self.addChild(dims, ['Length:', '%.4f %s' % ( - length, self.app.general_options_form.general_app_group.units_radio.get_value().lower())], True) + length, self.app.ui.general_options_form.general_app_group.units_radio.get_value().lower())], True) self.addChild(dims, ['Width:', '%.4f %s' % ( - width, self.app.general_options_form.general_app_group.units_radio.get_value().lower())], True) - if self.app.general_options_form.general_app_group.units_radio.get_value().lower() == 'mm': + width, self.app.ui.general_options_form.general_app_group.units_radio.get_value().lower())], True) + if self.app.ui.general_options_form.general_app_group.units_radio.get_value().lower() == 'mm': area = (length * width) / 100 self.addChild(dims, ['Box Area:', '%.4f %s' % (area, 'cm2')], True) else: diff --git a/flatcamTools/ToolSolderPaste.py b/flatcamTools/ToolSolderPaste.py index 54cbb774..7bfacb8f 100644 --- a/flatcamTools/ToolSolderPaste.py +++ b/flatcamTools/ToolSolderPaste.py @@ -8,6 +8,8 @@ from FlatCAMObj import FlatCAMGeometry, FlatCAMExcellon, FlatCAMGerber from PyQt5 import QtGui, QtCore, QtWidgets from copy import copy,deepcopy +from shapely.geometry import MultiPolygon, Polygon, LineString + class SolderPaste(FlatCAMTool): @@ -466,7 +468,7 @@ class SolderPaste(FlatCAMTool): self.name = "" self.obj = None - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() for name in list(self.app.postprocessors.keys()): # populate only with postprocessor files that start with 'Paste_' @@ -484,7 +486,7 @@ class SolderPaste(FlatCAMTool): self.ui_disconnect() # updated units - self.units = self.app.general_options_form.general_app_group.units_radio.get_value().upper() + self.units = self.app.ui.general_options_form.general_app_group.units_radio.get_value().upper() sorted_tools = [] for k, v in self.tooltable_tools.items(): @@ -647,7 +649,6 @@ class SolderPaste(FlatCAMTool): idx = self.cnc_obj_combo.findText(obj_name) if idx != -1: self.cnc_obj_combo.setCurrentIndex(idx) - print(obj_name) def read_form_to_options(self): """ @@ -925,7 +926,7 @@ class SolderPaste(FlatCAMTool): self.on_create_geo(name=name, work_object=obj) - def on_create_geo(self, name, work_object): + def on_create_geo(self, name, work_object, use_thread=True): """ The actual work for creating solderpaste dispensing geometry is done here. @@ -958,47 +959,48 @@ class SolderPaste(FlatCAMTool): geo_obj.special_group = 'solder_paste_tool' def solder_line(p, offset): - xmin, ymin, xmax, ymax = p.bounds + x_min, y_min, x_max, y_max = p.bounds - min = [xmin, ymin] - max = [xmax, ymax] - min_r = [xmin, ymax] - max_r = [xmax, ymin] + diag_1_intersect = LineString([(x_min, y_min), (x_max, y_max)]).intersection(p) + diag_2_intersect = LineString([(x_min, y_max), (x_max, y_min)]).intersection(p) - diagonal_1 = LineString([min, max]) - diagonal_2 = LineString([min_r, max_r]) if self.units == 'MM': - round_diag_1 = round(diagonal_1.intersection(p).length, 1) - round_diag_2 = round(diagonal_2.intersection(p).length, 1) + round_diag_1 = round(diag_1_intersect.length, 1) + round_diag_2 = round(diag_2_intersect.length, 1) else: - round_diag_1 = round(diagonal_1.intersection(p).length, 2) - round_diag_2 = round(diagonal_2.intersection(p).length, 2) + round_diag_1 = round(diag_1_intersect.length, 2) + round_diag_2 = round(diag_2_intersect.length, 2) if round_diag_1 == round_diag_2: - l = distance((xmin, ymin), (xmax, ymin)) - h = distance((xmin, ymin), (xmin, ymax)) + l = distance((x_min, y_min), (x_max, y_min)) + h = distance((x_min, y_min), (x_min, y_max)) if offset >= l /2 or offset >= h / 2: return "fail" if l > h: h_half = h / 2 - start = [xmin, (ymin + h_half)] - stop = [(xmin + l), (ymin + h_half)] + start = [x_min, (y_min + h_half)] + stop = [(x_min + l), (y_min + h_half)] else: l_half = l / 2 - start = [(xmin + l_half), ymin] - stop = [(xmin + l_half), (ymin + h)] + start = [(x_min + l_half), y_min] + stop = [(x_min + l_half), (y_min + h)] geo = LineString([start, stop]) elif round_diag_1 > round_diag_2: - geo = diagonal_1.intersection(p) + geo = round_diag_1 else: - geo = diagonal_2.intersection(p) + geo = round_diag_2 offseted_poly = p.buffer(-offset) geo = geo.intersection(offseted_poly) return geo work_geo = obj.solid_geometry + try: + _ = iter(work_geo) + except TypeError: + work_geo = [work_geo] + rest_geo = [] tooluid = 1 @@ -1053,22 +1055,24 @@ class SolderPaste(FlatCAMTool): "due of inadequate nozzle diameters...") return 'fail' - def job_thread(app_obj): - try: - app_obj.new_object("geometry", name + "_solderpaste", geo_init) - except Exception as e: - log.error("SolderPaste.on_create_geo() --> %s" % str(e)) + if use_thread: + def job_thread(app_obj): + try: + app_obj.new_object("geometry", name + "_solderpaste", geo_init) + except Exception as e: + log.error("SolderPaste.on_create_geo() --> %s" % str(e)) + proc.done() + return proc.done() - return - proc.done() - self.app.inform.emit("Generating Solder Paste dispensing geometry...") - # Promise object with the new name - self.app.collection.promise(name) + self.app.inform.emit("Generating Solder Paste dispensing geometry...") + # Promise object with the new name + self.app.collection.promise(name) - # Background - self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) - # self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab) + # Background + self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]}) + else: + self.app.new_object("geometry", name + "_solderpaste", geo_init) def on_create_gcode_click(self, signal): """