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):
"""