diff --git a/FlatCAMApp.py b/FlatCAMApp.py
index 26e6abbc..14031adc 100644
--- a/FlatCAMApp.py
+++ b/FlatCAMApp.py
@@ -300,6 +300,7 @@ class App(QtCore.QObject):
# when adding entries here read the comments in the method found bellow named:
# def new_object(self, kind, name, initialize, active=True, fit=True, plot=True)
self.defaults_form_fields = {
+ # General App
"units": self.ui.general_defaults_form.general_app_group.units_radio,
"global_shell_at_startup": self.ui.general_defaults_form.general_app_group.shell_startup_cb,
"global_version_check": self.ui.general_defaults_form.general_app_group.version_check_cb,
@@ -311,6 +312,7 @@ class App(QtCore.QObject):
"global_save_compressed": self.ui.general_defaults_form.general_app_group.save_type_cb,
"global_toggle_tooltips": self.ui.general_defaults_form.general_app_group.toggle_tooltips_cb,
+ # General GUI
"global_gridx": self.ui.general_defaults_form.general_gui_group.gridx_entry,
"global_gridy": self.ui.general_defaults_form.general_gui_group.gridy_entry,
"global_snap_max": self.ui.general_defaults_form.general_gui_group.snap_max_dist_entry,
@@ -343,6 +345,7 @@ class App(QtCore.QObject):
"gerber_bboxmargin": self.ui.gerber_defaults_form.gerber_opt_group.bbmargin_entry,
"gerber_bboxrounded": self.ui.gerber_defaults_form.gerber_opt_group.bbrounded_cb,
+ # Excellon General
"excellon_plot": self.ui.excellon_defaults_form.excellon_gen_group.plot_cb,
"excellon_solid": self.ui.excellon_defaults_form.excellon_gen_group.solid_cb,
"excellon_format_upper_in": self.ui.excellon_defaults_form.excellon_gen_group.excellon_format_upper_in_entry,
@@ -353,16 +356,8 @@ class App(QtCore.QObject):
"excellon_units": self.ui.excellon_defaults_form.excellon_gen_group.excellon_units_radio,
"excellon_optimization_type": self.ui.excellon_defaults_form.excellon_gen_group.excellon_optimization_radio,
"excellon_search_time": self.ui.excellon_defaults_form.excellon_gen_group.optimization_time_entry,
- "excellon_offset": self.ui.excellon_defaults_form.excellon_gen_group.offset_entry,
- "excellon_toolchangexy": self.ui.excellon_defaults_form.excellon_gen_group.toolchangexy_entry,
- "excellon_startz": self.ui.excellon_defaults_form.excellon_gen_group.estartz_entry,
- "excellon_endz": self.ui.excellon_defaults_form.excellon_gen_group.eendz_entry,
- "excellon_feedrate_rapid": self.ui.excellon_defaults_form.excellon_gen_group.feedrate_rapid_entry,
- "excellon_z_pdepth": self.ui.excellon_defaults_form.excellon_gen_group.pdepth_entry,
- "excellon_feedrate_probe": self.ui.excellon_defaults_form.excellon_gen_group.feedrate_probe_entry,
- "excellon_f_plunge": self.ui.excellon_defaults_form.excellon_gen_group.fplunge_cb,
- "excellon_f_retract": self.ui.excellon_defaults_form.excellon_gen_group.fretract_cb,
+ # Excellon Options
"excellon_drillz": self.ui.excellon_defaults_form.excellon_opt_group.cutz_entry,
"excellon_travelz": self.ui.excellon_defaults_form.excellon_opt_group.travelz_entry,
"excellon_feedrate": self.ui.excellon_defaults_form.excellon_opt_group.feedrate_entry,
@@ -376,26 +371,30 @@ class App(QtCore.QObject):
"excellon_slot_tooldia": self.ui.excellon_defaults_form.excellon_opt_group.slot_tooldia_entry,
"excellon_gcode_type": self.ui.excellon_defaults_form.excellon_opt_group.excellon_gcode_type_radio,
+ # Excellon Advanced Options
+ "excellon_offset": self.ui.excellon_defaults_form.excellon_adv_opt_group.offset_entry,
+ "excellon_toolchangexy": self.ui.excellon_defaults_form.excellon_adv_opt_group.toolchangexy_entry,
+ "excellon_startz": self.ui.excellon_defaults_form.excellon_adv_opt_group.estartz_entry,
+ "excellon_endz": self.ui.excellon_defaults_form.excellon_adv_opt_group.eendz_entry,
+ "excellon_feedrate_rapid": self.ui.excellon_defaults_form.excellon_adv_opt_group.feedrate_rapid_entry,
+ "excellon_z_pdepth": self.ui.excellon_defaults_form.excellon_adv_opt_group.pdepth_entry,
+ "excellon_feedrate_probe": self.ui.excellon_defaults_form.excellon_adv_opt_group.feedrate_probe_entry,
+ "excellon_f_plunge": self.ui.excellon_defaults_form.excellon_adv_opt_group.fplunge_cb,
+ "excellon_f_retract": self.ui.excellon_defaults_form.excellon_adv_opt_group.fretract_cb,
+
+ # Excellon Export
"excellon_exp_units": self.ui.excellon_defaults_form.excellon_exp_group.excellon_units_radio,
"excellon_exp_format": self.ui.excellon_defaults_form.excellon_exp_group.format_radio,
"excellon_exp_integer": self.ui.excellon_defaults_form.excellon_exp_group.format_whole_entry,
"excellon_exp_decimals": self.ui.excellon_defaults_form.excellon_exp_group.format_dec_entry,
"excellon_exp_zeros": self.ui.excellon_defaults_form.excellon_exp_group.zeros_radio,
+ # Geometry General
"geometry_plot": self.ui.geometry_defaults_form.geometry_gen_group.plot_cb,
- "geometry_cnctooldia": self.ui.geometry_defaults_form.geometry_gen_group.cnctooldia_entry,
"geometry_circle_steps": self.ui.geometry_defaults_form.geometry_gen_group.circle_steps_entry,
- "geometry_segx": self.ui.geometry_defaults_form.geometry_gen_group.segx_entry,
- "geometry_segy": self.ui.geometry_defaults_form.geometry_gen_group.segy_entry,
- "geometry_feedrate_rapid": self.ui.geometry_defaults_form.geometry_gen_group.cncfeedrate_rapid_entry,
- "geometry_feedrate_probe": self.ui.geometry_defaults_form.geometry_gen_group.feedrate_probe_entry,
- "geometry_z_pdepth": self.ui.geometry_defaults_form.geometry_gen_group.pdepth_entry,
- "geometry_f_plunge": self.ui.geometry_defaults_form.geometry_gen_group.fplunge_cb,
- "geometry_toolchangexy": self.ui.geometry_defaults_form.geometry_gen_group.toolchangexy_entry,
- "geometry_startz": self.ui.geometry_defaults_form.geometry_gen_group.gstartz_entry,
- "geometry_endz": self.ui.geometry_defaults_form.geometry_gen_group.gendz_entry,
- "geometry_extracut": self.ui.geometry_defaults_form.geometry_gen_group.extracut_cb,
+ "geometry_cnctooldia": self.ui.geometry_defaults_form.geometry_gen_group.cnctooldia_entry,
+ # Geometry Options
"geometry_cutz": self.ui.geometry_defaults_form.geometry_opt_group.cutz_entry,
"geometry_travelz": self.ui.geometry_defaults_form.geometry_opt_group.travelz_entry,
"geometry_feedrate": self.ui.geometry_defaults_form.geometry_opt_group.cncfeedrate_entry,
@@ -409,6 +408,19 @@ class App(QtCore.QObject):
"geometry_depthperpass": self.ui.geometry_defaults_form.geometry_opt_group.depthperpass_entry,
"geometry_multidepth": self.ui.geometry_defaults_form.geometry_opt_group.multidepth_cb,
+ # Geometry Advanced Options
+ "geometry_toolchangexy": self.ui.geometry_defaults_form.geometry_adv_opt_group.toolchangexy_entry,
+ "geometry_startz": self.ui.geometry_defaults_form.geometry_adv_opt_group.gstartz_entry,
+ "geometry_endz": self.ui.geometry_defaults_form.geometry_adv_opt_group.gendz_entry,
+ "geometry_feedrate_rapid": self.ui.geometry_defaults_form.geometry_adv_opt_group.cncfeedrate_rapid_entry,
+ "geometry_extracut": self.ui.geometry_defaults_form.geometry_adv_opt_group.extracut_cb,
+ "geometry_z_pdepth": self.ui.geometry_defaults_form.geometry_adv_opt_group.pdepth_entry,
+ "geometry_feedrate_probe": self.ui.geometry_defaults_form.geometry_adv_opt_group.feedrate_probe_entry,
+ "geometry_f_plunge": self.ui.geometry_defaults_form.geometry_adv_opt_group.fplunge_cb,
+ "geometry_segx": self.ui.geometry_defaults_form.geometry_adv_opt_group.segx_entry,
+ "geometry_segy": self.ui.geometry_defaults_form.geometry_adv_opt_group.segy_entry,
+
+ # CNCJob General
"cncjob_plot": self.ui.cncjob_defaults_form.cncjob_gen_group.plot_cb,
"cncjob_plot_kind": self.ui.cncjob_defaults_form.cncjob_gen_group.cncplot_method_radio,
"cncjob_tooldia": self.ui.cncjob_defaults_form.cncjob_gen_group.tooldia_entry,
@@ -419,6 +431,7 @@ class App(QtCore.QObject):
"cncjob_prepend": self.ui.cncjob_defaults_form.cncjob_opt_group.prepend_text,
"cncjob_append": self.ui.cncjob_defaults_form.cncjob_opt_group.append_text,
+ # NCC Tool
"tools_ncctools": self.ui.tools_defaults_form.tools_ncc_group.ncc_tool_dia_entry,
"tools_nccoverlap": self.ui.tools_defaults_form.tools_ncc_group.ncc_overlap_entry,
"tools_nccmargin": self.ui.tools_defaults_form.tools_ncc_group.ncc_margin_entry,
@@ -427,12 +440,14 @@ class App(QtCore.QObject):
"tools_ncccontour": self.ui.tools_defaults_form.tools_ncc_group.ncc_contour_cb,
"tools_nccrest": self.ui.tools_defaults_form.tools_ncc_group.ncc_rest_cb,
+ # CutOut Tool
"tools_cutouttooldia": self.ui.tools_defaults_form.tools_cutout_group.cutout_tooldia_entry,
"tools_cutoutmargin": self.ui.tools_defaults_form.tools_cutout_group.cutout_margin_entry,
"tools_cutoutgapsize": self.ui.tools_defaults_form.tools_cutout_group.cutout_gap_entry,
"tools_gaps_rect": self.ui.tools_defaults_form.tools_cutout_group.gaps_radio,
"tools_gaps_ff": self.ui.tools_defaults_form.tools_cutout_group.gaps_combo,
+ # Paint Area Tool
"tools_painttooldia": self.ui.tools_defaults_form.tools_paint_group.painttooldia_entry,
"tools_paintoverlap": self.ui.tools_defaults_form.tools_paint_group.paintoverlap_entry,
"tools_paintmargin": self.ui.tools_defaults_form.tools_paint_group.paintmargin_entry,
@@ -441,14 +456,17 @@ class App(QtCore.QObject):
"tools_pathconnect": self.ui.tools_defaults_form.tools_paint_group.pathconnect_cb,
"tools_paintcontour": self.ui.tools_defaults_form.tools_paint_group.contour_cb,
+ # 2-sided Tool
"tools_2sided_mirror_axis": self.ui.tools_defaults_form.tools_2sided_group.mirror_axis_radio,
"tools_2sided_axis_loc": self.ui.tools_defaults_form.tools_2sided_group.axis_location_radio,
"tools_2sided_drilldia": self.ui.tools_defaults_form.tools_2sided_group.drill_dia_entry,
+ # Film Tool
"tools_film_type": self.ui.tools_defaults_form.tools_film_group.film_type_radio,
"tools_film_boundary": self.ui.tools_defaults_form.tools_film_group.film_boundary_entry,
"tools_film_scale": self.ui.tools_defaults_form.tools_film_group.film_scale_entry,
+ # Panelize Tool
"tools_panelize_spacing_columns": self.ui.tools_defaults_form.tools_panelize_group.pspacing_columns,
"tools_panelize_spacing_rows": self.ui.tools_defaults_form.tools_panelize_group.pspacing_rows,
"tools_panelize_columns": self.ui.tools_defaults_form.tools_panelize_group.pcolumns,
@@ -458,6 +476,7 @@ class App(QtCore.QObject):
"tools_panelize_constrainy": self.ui.tools_defaults_form.tools_panelize_group.py_height_entry,
"tools_panelize_panel_type": self.ui.tools_defaults_form.tools_panelize_group.panel_type_radio,
+ # Calculators Tool
"tools_calc_vshape_tip_dia": self.ui.tools_defaults_form.tools_calculators_group.tip_dia_entry,
"tools_calc_vshape_tip_angle": self.ui.tools_defaults_form.tools_calculators_group.tip_angle_entry,
"tools_calc_vshape_cut_z": self.ui.tools_defaults_form.tools_calculators_group.cut_z_entry,
@@ -466,6 +485,7 @@ class App(QtCore.QObject):
"tools_calc_electro_cdensity": self.ui.tools_defaults_form.tools_calculators_group.cdensity_entry,
"tools_calc_electro_growth": self.ui.tools_defaults_form.tools_calculators_group.growth_entry,
+ # Transformations Tool
"tools_transform_rotate": self.ui.tools_defaults_form.tools_transform_group.rotate_entry,
"tools_transform_skew_x": self.ui.tools_defaults_form.tools_transform_group.skewx_entry,
"tools_transform_skew_y": self.ui.tools_defaults_form.tools_transform_group.skewy_entry,
@@ -478,6 +498,7 @@ class App(QtCore.QObject):
"tools_transform_mirror_reference": self.ui.tools_defaults_form.tools_transform_group.mirror_reference_cb,
"tools_transform_mirror_point": self.ui.tools_defaults_form.tools_transform_group.flip_ref_entry,
+ # SolderPaste Dispensing Tool
"tools_solderpaste_tools": self.ui.tools_defaults_form.tools_solderpaste_group.nozzle_tool_dia_entry,
"tools_solderpaste_new": self.ui.tools_defaults_form.tools_solderpaste_group.addtool_entry,
"tools_solderpaste_z_start": self.ui.tools_defaults_form.tools_solderpaste_group.z_start_entry,
@@ -600,6 +621,7 @@ class App(QtCore.QObject):
"gerber_circle_steps": 64,
"gerber_use_buffer_for_union": True,
+ # Excellon General
"excellon_plot": True,
"excellon_solid": True,
"excellon_format_upper_in": 2,
@@ -611,59 +633,68 @@ class App(QtCore.QObject):
"excellon_optimization_type": 'B',
"excellon_search_time": 3,
+ # Excellon Options
"excellon_drillz": -0.1,
"excellon_travelz": 0.1,
"excellon_feedrate": 3.0,
- "excellon_feedrate_rapid": 3.0,
"excellon_feedrate_probe": 3.0,
"excellon_spindlespeed": None,
"excellon_dwell": False,
"excellon_dwelltime": 1,
"excellon_toolchange": False,
"excellon_toolchangez": 1.0,
- "excellon_toolchangexy": "0.0, 0.0",
+ "excellon_ppname_e": 'default',
"excellon_tooldia": 0.016,
- "excellon_offset": 0.0,
"excellon_slot_tooldia": 0.016,
+ "excellon_gcode_type": "drills",
+
+ # Excellon Advanced Options
+ "excellon_offset": 0.0,
+ "excellon_toolchangexy": "0.0, 0.0",
"excellon_startz": None,
"excellon_endz": 2.0,
- "excellon_ppname_e": 'default',
+ "excellon_feedrate_rapid": 3.0,
"excellon_z_pdepth": -0.02,
"excellon_f_plunge": False,
"excellon_f_retract": False,
- "excellon_gcode_type": "drills",
+ # Excellon Export
"excellon_exp_units": 'INCH',
"excellon_exp_format": 'ndec',
"excellon_exp_integer": 2,
"excellon_exp_decimals": 4,
"excellon_exp_zeros": 'LZ',
+ # Geometry General
"geometry_plot": True,
- "geometry_segx": 0.0,
- "geometry_segy": 0.0,
+ "geometry_circle_steps": 64,
+ "geometry_cnctooldia": 0.016,
+
+ # Geometry Options
"geometry_cutz": -0.002,
+ "geometry_multidepth": False,
+ "geometry_depthperpass": 0.002,
"geometry_travelz": 0.1,
"geometry_toolchange": False,
"geometry_toolchangez": 1.0,
- "geometry_toolchangexy": "0.0, 0.0",
- "geometry_startz": None,
- "geometry_endz": 2.0,
"geometry_feedrate": 3.0,
"geometry_feedrate_z": 3.0,
- "geometry_feedrate_rapid": 3.0,
- "geometry_feedrate_probe": 3.0,
- "geometry_cnctooldia": 0.016,
"geometry_spindlespeed": None,
"geometry_dwell": False,
"geometry_dwelltime": 1,
"geometry_ppname_g": 'default',
+
+ # Geometry Advanced Options
+ "geometry_toolchangexy": "0.0, 0.0",
+ "geometry_startz": None,
+ "geometry_endz": 2.0,
+ "geometry_feedrate_rapid": 3.0,
+ "geometry_extracut": False,
"geometry_z_pdepth": -0.02,
"geometry_f_plunge": False,
- "geometry_depthperpass": 0.002,
- "geometry_multidepth": False,
- "geometry_extracut": False,
- "geometry_circle_steps": 64,
+ "geometry_feedrate_probe": 3.0,
+ "geometry_segx": 0.0,
+ "geometry_segy": 0.0,
"cncjob_plot": True,
"cncjob_plot_kind": 'all',
@@ -805,11 +836,6 @@ class App(QtCore.QObject):
"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.ui.excellon_options_form.excellon_opt_group.cutz_entry,
"excellon_travelz": self.ui.excellon_options_form.excellon_opt_group.travelz_entry,
@@ -822,16 +848,14 @@ class App(QtCore.QObject):
"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,
+ "excellon_feedrate_rapid": self.ui.excellon_options_form.excellon_adv_opt_group.feedrate_rapid_entry,
+ "excellon_toolchangexy": self.ui.excellon_options_form.excellon_adv_opt_group.toolchangexy_entry,
+ "excellon_f_plunge": self.ui.excellon_options_form.excellon_adv_opt_group.fplunge_cb,
+ "excellon_startz": self.ui.excellon_options_form.excellon_adv_opt_group.estartz_entry,
+ "excellon_endz": self.ui.excellon_options_form.excellon_adv_opt_group.eendz_entry,
+
"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.ui.geometry_options_form.geometry_opt_group.cutz_entry,
"geometry_travelz": self.ui.geometry_options_form.geometry_opt_group.travelz_entry,
@@ -846,6 +870,15 @@ class App(QtCore.QObject):
"geometry_depthperpass": self.ui.geometry_options_form.geometry_opt_group.depthperpass_entry,
"geometry_multidepth": self.ui.geometry_options_form.geometry_opt_group.multidepth_cb,
+ "geometry_segx": self.ui.geometry_options_form.geometry_adv_opt_group.segx_entry,
+ "geometry_segy": self.ui.geometry_options_form.geometry_adv_opt_group.segy_entry,
+ "geometry_feedrate_rapid": self.ui.geometry_options_form.geometry_adv_opt_group.cncfeedrate_rapid_entry,
+ "geometry_f_plunge": self.ui.geometry_options_form.geometry_adv_opt_group.fplunge_cb,
+ "geometry_toolchangexy": self.ui.geometry_options_form.geometry_adv_opt_group.toolchangexy_entry,
+ "geometry_startz": self.ui.geometry_options_form.geometry_adv_opt_group.gstartz_entry,
+ "geometry_endz": self.ui.geometry_options_form.geometry_adv_opt_group.gendz_entry,
+ "geometry_extracut": self.ui.geometry_options_form.geometry_adv_opt_group.extracut_cb,
+
"cncjob_plot": self.ui.cncjob_options_form.cncjob_gen_group.plot_cb,
"cncjob_tooldia": self.ui.cncjob_options_form.cncjob_gen_group.tooldia_entry,
diff --git a/FlatCAMGUI.py b/FlatCAMGUI.py
index e2a34c19..ffacd647 100644
--- a/FlatCAMGUI.py
+++ b/FlatCAMGUI.py
@@ -2535,10 +2535,16 @@ class ExcellonPreferencesUI(QtWidgets.QWidget):
self.excellon_opt_group.setFixedWidth(250)
self.excellon_exp_group = ExcellonExpPrefGroupUI()
self.excellon_exp_group.setFixedWidth(250)
+ self.excellon_adv_opt_group = ExcellonAdvOptPrefGroupUI()
+ self.excellon_adv_opt_group.setFixedWidth(250)
+
+ self.vlay = QtWidgets.QVBoxLayout()
+ self.vlay.addWidget(self.excellon_opt_group)
+ self.vlay.addWidget(self.excellon_exp_group)
self.layout.addWidget(self.excellon_gen_group)
- self.layout.addWidget(self.excellon_opt_group)
- self.layout.addWidget(self.excellon_exp_group)
+ self.layout.addLayout(self.vlay)
+ self.layout.addWidget(self.excellon_adv_opt_group)
self.layout.addStretch()
@@ -2554,9 +2560,13 @@ class GeometryPreferencesUI(QtWidgets.QWidget):
self.geometry_gen_group.setFixedWidth(220)
self.geometry_opt_group = GeometryOptPrefGroupUI()
self.geometry_opt_group.setFixedWidth(250)
+ self.geometry_adv_opt_group = GeometryAdvOptPrefGroupUI()
+ self.geometry_adv_opt_group.setFixedWidth(250)
self.layout.addWidget(self.geometry_gen_group)
self.layout.addWidget(self.geometry_opt_group)
+ self.layout.addWidget(self.geometry_adv_opt_group)
+
self.layout.addStretch()
@@ -3618,109 +3628,6 @@ class ExcellonGenPrefGroupUI(OptionsGroupUI):
self.optimization_time_label.setDisabled(True)
self.optimization_time_entry.setDisabled(True)
- ######################
- ## ADVANCED OPTIONS ##
- ######################
-
- self.cncjob_label = QtWidgets.QLabel('Advanced Options:')
- self.cncjob_label.setToolTip(
- "Parameters used to create a CNC Job object\n"
- "for this drill object that are not changed very often."
- )
- self.layout.addWidget(self.cncjob_label)
-
- grid1 = QtWidgets.QGridLayout()
- self.layout.addLayout(grid1)
-
- offsetlabel = QtWidgets.QLabel('Offset Z:')
- offsetlabel.setToolTip(
- "Some drill bits (the larger ones) need to drill deeper\n"
- "to create the desired exit hole diameter due of the tip shape.\n"
- "The value here can compensate the Cut Z parameter.")
- grid1.addWidget(offsetlabel, 0, 0)
- self.offset_entry = LengthEntry()
- grid1.addWidget(self.offset_entry, 0, 1)
-
- toolchange_xy_label = QtWidgets.QLabel('Toolchange X,Y:')
- toolchange_xy_label.setToolTip(
- "Toolchange X,Y position."
- )
- grid1.addWidget(toolchange_xy_label, 1, 0)
- self.toolchangexy_entry = FCEntry()
- grid1.addWidget(self.toolchangexy_entry, 1, 1)
-
- startzlabel = QtWidgets.QLabel('Start move Z:')
- startzlabel.setToolTip(
- "Height of the tool just after start.\n"
- "Delete the value if you don't need this feature."
- )
- grid1.addWidget(startzlabel, 2, 0)
- self.estartz_entry = FloatEntry()
- grid1.addWidget(self.estartz_entry, 2, 1)
-
- endzlabel = QtWidgets.QLabel('End move Z:')
- endzlabel.setToolTip(
- "Height of the tool after\n"
- "the last move at the end of the job."
- )
- grid1.addWidget(endzlabel, 3, 0)
- self.eendz_entry = LengthEntry()
- grid1.addWidget(self.eendz_entry, 3, 1)
-
-
- fr_rapid_label = QtWidgets.QLabel('Feedrate Rapids:')
- fr_rapid_label.setToolTip(
- "Tool speed while drilling\n"
- "with rapid move\n"
- "(in units per minute)."
- )
- grid1.addWidget(fr_rapid_label, 4, 0)
- self.feedrate_rapid_entry = LengthEntry()
- grid1.addWidget(self.feedrate_rapid_entry, 4, 1)
-
- # Probe depth
- self.pdepth_label = QtWidgets.QLabel("Probe Z depth:")
- self.pdepth_label.setToolTip(
- "The maximum depth that the probe is allowed\n"
- "to probe. Negative value, in current units."
- )
- grid1.addWidget(self.pdepth_label, 5, 0)
- self.pdepth_entry = FCEntry()
- grid1.addWidget(self.pdepth_entry, 5, 1)
-
- # Probe feedrate
- self.feedrate_probe_label = QtWidgets.QLabel("Feedrate Probe:")
- self.feedrate_probe_label.setToolTip(
- "The feedrate used while the probe is probing."
- )
- grid1.addWidget(self.feedrate_probe_label, 6, 0)
- self.feedrate_probe_entry = FCEntry()
- grid1.addWidget(self.feedrate_probe_entry, 6, 1)
-
- fplungelabel = QtWidgets.QLabel('Fast Plunge:')
- fplungelabel.setToolTip(
- "By checking this, the vertical move from\n"
- "Z_Toolchange to Z_move is done with G0,\n"
- "meaning the fastest speed available.\n"
- "WARNING: the move is done at Toolchange X,Y coords."
- )
- self.fplunge_cb = FCCheckBox()
- grid1.addWidget(fplungelabel, 7, 0)
- grid1.addWidget(self.fplunge_cb, 7, 1)
-
- fretractlabel = QtWidgets.QLabel('Fast Retract:')
- fretractlabel.setToolTip(
- "Exit hole strategy.\n"
- " - When uncheked, while exiting the drilled hole the drill bit\n"
- "will travel slow, with set feedrate (G1), up to zero depth and then\n"
- "travel as fast as possible (G0) to the Z Move (travel height).\n"
- " - When checked the travel from Z cut (cut depth) to Z_move\n"
- "(travel height) is done as fast as possible (G0) in one move."
- )
- self.fretract_cb = FCCheckBox()
- grid1.addWidget(fretractlabel, 8, 0)
- grid1.addWidget(self.fretract_cb, 8, 1)
-
self.layout.addStretch()
def optimization_selection(self):
@@ -3892,6 +3799,119 @@ class ExcellonOptPrefGroupUI(OptionsGroupUI):
self.layout.addStretch()
+class ExcellonAdvOptPrefGroupUI(OptionsGroupUI):
+
+ def __init__(self, parent=None):
+ # OptionsGroupUI.__init__(self, "Excellon Advanced Options", parent=parent)
+ super(ExcellonAdvOptPrefGroupUI, self).__init__(self)
+
+ self.setTitle(str("Excellon Adv. Options"))
+
+ ######################
+ ## ADVANCED OPTIONS ##
+ ######################
+
+ self.cncjob_label = QtWidgets.QLabel('Advanced Options:')
+ self.cncjob_label.setToolTip(
+ "Parameters used to create a CNC Job object\n"
+ "for this drill object that are shown when App Level is Advanced."
+ )
+ self.layout.addWidget(self.cncjob_label)
+
+ grid1 = QtWidgets.QGridLayout()
+ self.layout.addLayout(grid1)
+
+ offsetlabel = QtWidgets.QLabel('Offset Z:')
+ offsetlabel.setToolTip(
+ "Some drill bits (the larger ones) need to drill deeper\n"
+ "to create the desired exit hole diameter due of the tip shape.\n"
+ "The value here can compensate the Cut Z parameter.")
+ grid1.addWidget(offsetlabel, 0, 0)
+ self.offset_entry = LengthEntry()
+ grid1.addWidget(self.offset_entry, 0, 1)
+
+ toolchange_xy_label = QtWidgets.QLabel('Toolchange X,Y:')
+ toolchange_xy_label.setToolTip(
+ "Toolchange X,Y position."
+ )
+ grid1.addWidget(toolchange_xy_label, 1, 0)
+ self.toolchangexy_entry = FCEntry()
+ grid1.addWidget(self.toolchangexy_entry, 1, 1)
+
+ startzlabel = QtWidgets.QLabel('Start move Z:')
+ startzlabel.setToolTip(
+ "Height of the tool just after start.\n"
+ "Delete the value if you don't need this feature."
+ )
+ grid1.addWidget(startzlabel, 2, 0)
+ self.estartz_entry = FloatEntry()
+ grid1.addWidget(self.estartz_entry, 2, 1)
+
+ endzlabel = QtWidgets.QLabel('End move Z:')
+ endzlabel.setToolTip(
+ "Height of the tool after\n"
+ "the last move at the end of the job."
+ )
+ grid1.addWidget(endzlabel, 3, 0)
+ self.eendz_entry = LengthEntry()
+ grid1.addWidget(self.eendz_entry, 3, 1)
+
+ fr_rapid_label = QtWidgets.QLabel('Feedrate Rapids:')
+ fr_rapid_label.setToolTip(
+ "Tool speed while drilling\n"
+ "with rapid move\n"
+ "(in units per minute)."
+ )
+ grid1.addWidget(fr_rapid_label, 4, 0)
+ self.feedrate_rapid_entry = LengthEntry()
+ grid1.addWidget(self.feedrate_rapid_entry, 4, 1)
+
+ # Probe depth
+ self.pdepth_label = QtWidgets.QLabel("Probe Z depth:")
+ self.pdepth_label.setToolTip(
+ "The maximum depth that the probe is allowed\n"
+ "to probe. Negative value, in current units."
+ )
+ grid1.addWidget(self.pdepth_label, 5, 0)
+ self.pdepth_entry = FCEntry()
+ grid1.addWidget(self.pdepth_entry, 5, 1)
+
+ # Probe feedrate
+ self.feedrate_probe_label = QtWidgets.QLabel("Feedrate Probe:")
+ self.feedrate_probe_label.setToolTip(
+ "The feedrate used while the probe is probing."
+ )
+ grid1.addWidget(self.feedrate_probe_label, 6, 0)
+ self.feedrate_probe_entry = FCEntry()
+ grid1.addWidget(self.feedrate_probe_entry, 6, 1)
+
+ fplungelabel = QtWidgets.QLabel('Fast Plunge:')
+ fplungelabel.setToolTip(
+ "By checking this, the vertical move from\n"
+ "Z_Toolchange to Z_move is done with G0,\n"
+ "meaning the fastest speed available.\n"
+ "WARNING: the move is done at Toolchange X,Y coords."
+ )
+ self.fplunge_cb = FCCheckBox()
+ grid1.addWidget(fplungelabel, 7, 0)
+ grid1.addWidget(self.fplunge_cb, 7, 1)
+
+ fretractlabel = QtWidgets.QLabel('Fast Retract:')
+ fretractlabel.setToolTip(
+ "Exit hole strategy.\n"
+ " - When uncheked, while exiting the drilled hole the drill bit\n"
+ "will travel slow, with set feedrate (G1), up to zero depth and then\n"
+ "travel as fast as possible (G0) to the Z Move (travel height).\n"
+ " - When checked the travel from Z cut (cut depth) to Z_move\n"
+ "(travel height) is done as fast as possible (G0) in one move."
+ )
+ self.fretract_cb = FCCheckBox()
+ grid1.addWidget(fretractlabel, 8, 0)
+ grid1.addWidget(self.fretract_cb, 8, 1)
+
+ self.layout.addStretch()
+
+
class ExcellonExpPrefGroupUI(OptionsGroupUI):
def __init__(self, parent=None):
@@ -4065,122 +4085,6 @@ class GeometryGenPrefGroupUI(OptionsGroupUI):
self.cnctooldia_entry = LengthEntry()
grid0_b.addWidget(self.cnctooldia_entry, 0, 1)
-
- # ------------------------------
- ## Advanced Options
- # ------------------------------
- self.cncjob_label = QtWidgets.QLabel('Advanced Options:')
- self.cncjob_label.setToolTip(
- "Parameters to create a CNC Job object\n"
- "tracing the contours of a Geometry object."
- )
- self.layout.addWidget(self.cncjob_label)
-
- grid1 = QtWidgets.QGridLayout()
- self.layout.addLayout(grid1)
-
- # Toolchange X,Y
- toolchange_xy_label = QtWidgets.QLabel('Toolchange X,Y:')
- toolchange_xy_label.setToolTip(
- "Toolchange X,Y position."
- )
- grid1.addWidget(toolchange_xy_label, 1, 0)
- self.toolchangexy_entry = FCEntry()
- grid1.addWidget(self.toolchangexy_entry, 1, 1)
-
- # Start move Z
- startzlabel = QtWidgets.QLabel('Start move Z:')
- startzlabel.setToolTip(
- "Height of the tool just after starting the work.\n"
- "Delete the value if you don't need this feature."
- )
- grid1.addWidget(startzlabel, 2, 0)
- self.gstartz_entry = FloatEntry()
- grid1.addWidget(self.gstartz_entry, 2, 1)
-
- # End move Z
- endzlabel = QtWidgets.QLabel('End move Z:')
- endzlabel.setToolTip(
- "Height of the tool after\n"
- "the last move at the end of the job."
- )
- grid1.addWidget(endzlabel, 3, 0)
- self.gendz_entry = LengthEntry()
- grid1.addWidget(self.gendz_entry, 3, 1)
-
- # Feedrate rapids
- fr_rapid_label = QtWidgets.QLabel('Feedrate Rapids:')
- fr_rapid_label.setToolTip(
- "Cutting speed in the XY\n"
- "plane in units per minute"
- )
- grid1.addWidget(fr_rapid_label, 4, 0)
- self.cncfeedrate_rapid_entry = LengthEntry()
- grid1.addWidget(self.cncfeedrate_rapid_entry, 4, 1)
-
- # End move extra cut
- self.extracut_cb = FCCheckBox(label='Re-cut 1st pt.')
- self.extracut_cb.setToolTip(
- "In order to remove possible\n"
- "copper leftovers where first cut\n"
- "meet with last cut, we generate an\n"
- "extended cut over the first cut section."
- )
- grid1.addWidget(self.extracut_cb, 5, 0)
-
- # Probe depth
- self.pdepth_label = QtWidgets.QLabel("Probe Z depth:")
- self.pdepth_label.setToolTip(
- "The maximum depth that the probe is allowed\n"
- "to probe. Negative value, in current units."
- )
- grid1.addWidget(self.pdepth_label, 6, 0)
- self.pdepth_entry = FCEntry()
- grid1.addWidget(self.pdepth_entry, 6, 1)
-
- # Probe feedrate
- self.feedrate_probe_label = QtWidgets.QLabel("Feedrate Probe:")
- self.feedrate_probe_label.setToolTip(
- "The feedrate used while the probe is probing."
- )
- grid1.addWidget(self.feedrate_probe_label, 7, 0)
- self.feedrate_probe_entry = FCEntry()
- grid1.addWidget(self.feedrate_probe_entry, 7, 1)
-
- # Fast Move from Z Toolchange
- fplungelabel = QtWidgets.QLabel('Fast Plunge:')
- fplungelabel.setToolTip(
- "By checking this, the vertical move from\n"
- "Z_Toolchange to Z_move is done with G0,\n"
- "meaning the fastest speed available.\n"
- "WARNING: the move is done at Toolchange X,Y coords."
- )
- self.fplunge_cb = FCCheckBox()
- grid1.addWidget(fplungelabel, 8, 0)
- grid1.addWidget(self.fplunge_cb, 8, 1)
-
- # Size of trace segment on X axis
- segx_label = QtWidgets.QLabel("Seg. X size:")
- segx_label.setToolTip(
- "The size of the trace segment on the X axis.\n"
- "Useful for auto-leveling.\n"
- "A value of 0 means no segmentation on the X axis."
- )
- grid1.addWidget(segx_label, 9, 0)
- self.segx_entry = FCEntry()
- grid1.addWidget(self.segx_entry, 9, 1)
-
- # Size of trace segment on Y axis
- segy_label = QtWidgets.QLabel("Seg. Y size:")
- segy_label.setToolTip(
- "The size of the trace segment on the Y axis.\n"
- "Useful for auto-leveling.\n"
- "A value of 0 means no segmentation on the Y axis."
- )
- grid1.addWidget(segy_label, 10, 0)
- self.segy_entry = FCEntry()
- grid1.addWidget(self.segy_entry, 10, 1)
-
self.layout.addStretch()
@@ -4329,6 +4233,131 @@ class GeometryOptPrefGroupUI(OptionsGroupUI):
self.layout.addStretch()
+class GeometryAdvOptPrefGroupUI(OptionsGroupUI):
+ def __init__(self, parent=None):
+ # OptionsGroupUI.__init__(self, "Geometry Advanced Options Preferences", parent=parent)
+ super(GeometryAdvOptPrefGroupUI, self).__init__(self)
+
+ self.setTitle(str("Geometry Adv. Options"))
+
+ # ------------------------------
+ ## Advanced Options
+ # ------------------------------
+ self.cncjob_label = QtWidgets.QLabel('Advanced Options:')
+ self.cncjob_label.setToolTip(
+ "Parameters to create a CNC Job object\n"
+ "tracing the contours of a Geometry object."
+ )
+ self.layout.addWidget(self.cncjob_label)
+
+ grid1 = QtWidgets.QGridLayout()
+ self.layout.addLayout(grid1)
+
+ # Toolchange X,Y
+ toolchange_xy_label = QtWidgets.QLabel('Toolchange X,Y:')
+ toolchange_xy_label.setToolTip(
+ "Toolchange X,Y position."
+ )
+ grid1.addWidget(toolchange_xy_label, 1, 0)
+ self.toolchangexy_entry = FCEntry()
+ grid1.addWidget(self.toolchangexy_entry, 1, 1)
+
+ # Start move Z
+ startzlabel = QtWidgets.QLabel('Start move Z:')
+ startzlabel.setToolTip(
+ "Height of the tool just after starting the work.\n"
+ "Delete the value if you don't need this feature."
+ )
+ grid1.addWidget(startzlabel, 2, 0)
+ self.gstartz_entry = FloatEntry()
+ grid1.addWidget(self.gstartz_entry, 2, 1)
+
+ # End move Z
+ endzlabel = QtWidgets.QLabel('End move Z:')
+ endzlabel.setToolTip(
+ "Height of the tool after\n"
+ "the last move at the end of the job."
+ )
+ grid1.addWidget(endzlabel, 3, 0)
+ self.gendz_entry = LengthEntry()
+ grid1.addWidget(self.gendz_entry, 3, 1)
+
+ # Feedrate rapids
+ fr_rapid_label = QtWidgets.QLabel('Feedrate Rapids:')
+ fr_rapid_label.setToolTip(
+ "Cutting speed in the XY\n"
+ "plane in units per minute"
+ )
+ grid1.addWidget(fr_rapid_label, 4, 0)
+ self.cncfeedrate_rapid_entry = LengthEntry()
+ grid1.addWidget(self.cncfeedrate_rapid_entry, 4, 1)
+
+ # End move extra cut
+ self.extracut_cb = FCCheckBox(label='Re-cut 1st pt.')
+ self.extracut_cb.setToolTip(
+ "In order to remove possible\n"
+ "copper leftovers where first cut\n"
+ "meet with last cut, we generate an\n"
+ "extended cut over the first cut section."
+ )
+ grid1.addWidget(self.extracut_cb, 5, 0)
+
+ # Probe depth
+ self.pdepth_label = QtWidgets.QLabel("Probe Z depth:")
+ self.pdepth_label.setToolTip(
+ "The maximum depth that the probe is allowed\n"
+ "to probe. Negative value, in current units."
+ )
+ grid1.addWidget(self.pdepth_label, 6, 0)
+ self.pdepth_entry = FCEntry()
+ grid1.addWidget(self.pdepth_entry, 6, 1)
+
+ # Probe feedrate
+ self.feedrate_probe_label = QtWidgets.QLabel("Feedrate Probe:")
+ self.feedrate_probe_label.setToolTip(
+ "The feedrate used while the probe is probing."
+ )
+ grid1.addWidget(self.feedrate_probe_label, 7, 0)
+ self.feedrate_probe_entry = FCEntry()
+ grid1.addWidget(self.feedrate_probe_entry, 7, 1)
+
+ # Fast Move from Z Toolchange
+ fplungelabel = QtWidgets.QLabel('Fast Plunge:')
+ fplungelabel.setToolTip(
+ "By checking this, the vertical move from\n"
+ "Z_Toolchange to Z_move is done with G0,\n"
+ "meaning the fastest speed available.\n"
+ "WARNING: the move is done at Toolchange X,Y coords."
+ )
+ self.fplunge_cb = FCCheckBox()
+ grid1.addWidget(fplungelabel, 8, 0)
+ grid1.addWidget(self.fplunge_cb, 8, 1)
+
+ # Size of trace segment on X axis
+ segx_label = QtWidgets.QLabel("Seg. X size:")
+ segx_label.setToolTip(
+ "The size of the trace segment on the X axis.\n"
+ "Useful for auto-leveling.\n"
+ "A value of 0 means no segmentation on the X axis."
+ )
+ grid1.addWidget(segx_label, 9, 0)
+ self.segx_entry = FCEntry()
+ grid1.addWidget(self.segx_entry, 9, 1)
+
+ # Size of trace segment on Y axis
+ segy_label = QtWidgets.QLabel("Seg. Y size:")
+ segy_label.setToolTip(
+ "The size of the trace segment on the Y axis.\n"
+ "Useful for auto-leveling.\n"
+ "A value of 0 means no segmentation on the Y axis."
+ )
+ grid1.addWidget(segy_label, 10, 0)
+ self.segy_entry = FCEntry()
+ grid1.addWidget(self.segy_entry, 10, 1)
+
+ self.layout.addStretch()
+
+
class CNCJobGenPrefGroupUI(OptionsGroupUI):
def __init__(self, parent=None):
# OptionsGroupUI.__init__(self, "CNC Job General Preferences", parent=None)
diff --git a/FlatCAMObj.py b/FlatCAMObj.py
index 730ea4cb..e80361f1 100644
--- a/FlatCAMObj.py
+++ b/FlatCAMObj.py
@@ -1135,7 +1135,7 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
# store the source file here
self.source_file = ""
- self.multigeo = False
+ self.multigeo = True
# Attributes to be included in serialization
# Always append to it because it carries contents
diff --git a/README.md b/README.md
index c76521ae..39422c70 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,8 @@ CAD program, and create G-Code for Isolation routing.
23.02.2019
- remade the SolderPaste geometry generation function in ToolSoderPaste to work in certain scenarios where the Gerber pads in the SolderPaste mask Gerber may be just pads outlines
--
+- updated the Properties Tool to include more information's, also details if a Geometry is of type MultiGeo or SingleGeo
+- remade the Preferences GUI to include the Advanced Options in a separate way so it is obvious which are displayed when App Level is Advanced.
22.02.2019
diff --git a/camlib.py b/camlib.py
index 409cc021..06655b23 100644
--- a/camlib.py
+++ b/camlib.py
@@ -3281,6 +3281,7 @@ class Excellon(Geometry):
Key Value
================ ====================================
C Diameter of the tool
+ solid_geometry Geometry list for each tool
Others Not supported (Ignored).
================ ====================================
diff --git a/flatcamTools/ToolProperties.py b/flatcamTools/ToolProperties.py
index 3fe0cadd..a6f9437c 100644
--- a/flatcamTools/ToolProperties.py
+++ b/flatcamTools/ToolProperties.py
@@ -91,14 +91,31 @@ class Properties(FlatCAMTool):
obj_type = self.addParent(parent, 'TYPE', expanded=True, color=QtGui.QColor("#000000"), font=font)
obj_name = self.addParent(parent, 'NAME', expanded=True, color=QtGui.QColor("#000000"), font=font)
dims = self.addParent(parent, 'Dimensions', expanded=True, color=QtGui.QColor("#000000"), font=font)
+ units = self.addParent(parent, 'Units', expanded=True, color=QtGui.QColor("#000000"), font=font)
+
options = self.addParent(parent, 'Options', color=QtGui.QColor("#000000"), font=font)
+ if obj.kind.lower() == 'gerber':
+ apertures = self.addParent(parent, 'Apertures', expanded=True, color=QtGui.QColor("#000000"), font=font)
+ else:
+ tools = self.addParent(parent, 'Tools', expanded=True, color=QtGui.QColor("#000000"), font=font)
+
separator = self.addParent(parent, '')
- self.addChild(obj_type, [obj.kind.upper()])
+ self.addChild(obj_type, ['Object Type:', ('%s' % (obj.kind.capitalize()))], True)
+ try:
+ self.addChild(obj_type, ['Geo Type:', ('%s' % ({False: "Single-Geo", True: "Multi-Geo"}[obj.multigeo]))], True)
+ except Exception as e:
+ pass
+
self.addChild(obj_name, [obj.options['name']])
# calculate physical dimensions
- xmin, ymin, xmax, ymax = obj.bounds()
+ try:
+ xmin, ymin, xmax, ymax = obj.bounds()
+ except Exception as e:
+ log.debug("PropertiesTool.addItems() --> %s" % str(e))
+ return
+
length = abs(xmax - xmin)
width = abs(ymax - ymin)
@@ -113,11 +130,60 @@ class Properties(FlatCAMTool):
area = length * width
self.addChild(dims, ['Box Area:', '%.4f %s' % (area, 'in2')], True)
+ self.addChild(units,
+ ['FlatCAM units:',
+ {
+ 'in': 'Inch',
+ 'mm': 'Metric'
+ }
+ [str(self.app.ui.general_options_form.general_app_group.units_radio.get_value().lower())]], True)
+
for option in obj.options:
if option is 'name':
continue
self.addChild(options, [str(option), str(obj.options[option])], True)
+ if obj.kind.lower() == 'gerber':
+ for ap in obj.apertures:
+ self.addChild(apertures, [str(ap), str(obj.apertures[ap])], True)
+ elif obj.kind.lower() == 'excellon':
+ for tool, value in obj.tools.items():
+ self.addChild(tools, [str(tool), str(value['C'])], True)
+ elif obj.kind.lower() == 'geometry':
+ for tool, value in obj.tools.items():
+ geo_tool = self.addParent(tools, str(tool), expanded=True, color=QtGui.QColor("#000000"), font=font)
+ for k, v in value.items():
+ if k == 'solid_geometry':
+ printed_value = 'Present' if v else 'None'
+ self.addChild(geo_tool, [str(k), printed_value], True)
+ elif k == 'data':
+ tool_data = self.addParent(geo_tool, str(k).capilalize(),
+ color=QtGui.QColor("#000000"), font=font)
+ for data_k, data_v in v.items():
+ self.addChild(tool_data, [str(data_k), str(data_v)], True)
+ else:
+ self.addChild(geo_tool, [str(k), str(v)], True)
+ elif obj.kind.lower() == 'cncjob':
+ for tool, value in obj.cnc_tools.items():
+ geo_tool = self.addParent(tools, str(tool), expanded=True, color=QtGui.QColor("#000000"), font=font)
+ for k, v in value.items():
+ if k == 'solid_geometry':
+ printed_value = 'Present' if v else 'None'
+ self.addChild(geo_tool, [str(k), printed_value], True)
+ elif k == 'gcode':
+ printed_value = 'Present' if v != '' else 'None'
+ self.addChild(geo_tool, [str(k), printed_value], True)
+ elif k == 'gcode_parsed':
+ printed_value = 'Present' if v else 'None'
+ self.addChild(geo_tool, [str(k), printed_value], True)
+ elif k == 'data':
+ tool_data = self.addParent(geo_tool, str(k).capitalize(),
+ color=QtGui.QColor("#000000"), font=font)
+ for data_k, data_v in v.items():
+ self.addChild(tool_data, [str(data_k), str(data_v)], True)
+ else:
+ self.addChild(geo_tool, [str(k), str(v)], True)
+
self.addChild(separator, [''])
def addParent(self, parent, title, expanded=False, color=None, font=None):