diff --git a/CHANGELOG.md b/CHANGELOG.md index 375b3743..6bd7f963 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta ================================================= +11.01.2021 + +- working on Tool Follow, Milling Tool, camlib to adapt them to the new changes in the Geometry Object + 10.01.2021 - renamed the Tool menu category to Plugins diff --git a/appObjects/FlatCAMCNCJob.py b/appObjects/FlatCAMCNCJob.py index 31418b96..9fedb02e 100644 --- a/appObjects/FlatCAMCNCJob.py +++ b/appObjects/FlatCAMCNCJob.py @@ -932,7 +932,8 @@ class CNCJobObject(FlatCAMObj, CNCjob): # if this dict is not empty then the object is a Geometry object if self.cnc_tools: first_key = next(iter(self.cnc_tools)) - include_header = self.app.preprocessors[self.cnc_tools[first_key]['data']['ppname_g']].include_header + include_header = self.app.preprocessors[self.cnc_tools[first_key]['data']['tools_mill_ppname_g']] + include_header = include_header.include_header # if this dict is not empty then the object is an Excellon object if self.exc_cnc_tools: @@ -997,8 +998,8 @@ class CNCJobObject(FlatCAMObj, CNCjob): hpgl = False if self.cnc_tools: for key in self.cnc_tools: - if 'ppname_g' in self.cnc_tools[key]['data']: - if 'hpgl' in self.cnc_tools[key]['data']['ppname_g']: + if 'tools_mill_ppname_g' in self.cnc_tools[key]['data']: + if 'hpgl' in self.cnc_tools[key]['data']['tools_mill_ppname_g']: hpgl = True break elif self.exc_cnc_tools: @@ -1238,11 +1239,18 @@ class CNCJobObject(FlatCAMObj, CNCjob): # Geometry shapes plotting try: if self.multitool is False: # single tool usage - try: - dia_plot = float(self.options["tooldia"]) - except ValueError: - # we may have a tuple with only one element and a comma - dia_plot = [float(el) for el in self.options["tooldia"].split(',') if el != ''][0] + if self.origin_kind == "excellon": + try: + dia_plot = float(self.options["tooldia"]) + except ValueError: + # we may have a tuple with only one element and a comma + dia_plot = [float(el) for el in self.options["tooldia"].split(',') if el != ''][0] + else: + try: + dia_plot = float(self.options["tools_mill_tooldia"]) + except ValueError: + # we may have a tuple with only one element and a comma + dia_plot = [float(el) for el in self.options["tools_mill_tooldia"].split(',') if el != ''][0] self.plot2(tooldia=dia_plot, obj=self, visible=visible, kind=kind) else: # I do this so the travel lines thickness will reflect the tool diameter @@ -1261,7 +1269,10 @@ class CNCJobObject(FlatCAMObj, CNCjob): # multiple tools usage if self.cnc_tools: for tooluid_key in self.cnc_tools: - tooldia = self.app.dec_format(float(self.cnc_tools[tooluid_key]['tooldia']), self.decimals) + tooldia = self.app.dec_format( + float(self.cnc_tools[tooluid_key]['tools_mill_tooldia']), + self.decimals + ) gcode_parsed = self.cnc_tools[tooluid_key]['gcode_parsed'] self.plot2(tooldia=tooldia, obj=self, visible=visible, gcode_parsed=gcode_parsed, kind=kind) diff --git a/appObjects/FlatCAMGeometry.py b/appObjects/FlatCAMGeometry.py index 123a7f7f..7fc65f20 100644 --- a/appObjects/FlatCAMGeometry.py +++ b/appObjects/FlatCAMGeometry.py @@ -142,15 +142,15 @@ class GeometryObject(FlatCAMObj, Geometry): # engine of FlatCAM. Most likely are generated by some of tools and are special cases of geometries. self.special_group = None - # self.old_pp_state = self.app.defaults["geometry_multidepth"] - # self.old_toolchangeg_state = self.app.defaults["geometry_toolchange"] + # self.old_pp_state = self.app.defaults["tools_mill_multidepth"] + # self.old_toolchangeg_state = self.app.defaults["tools_mill_toolchange"] self.units_found = self.app.defaults['units'] # this variable can be updated by the Object that generates the geometry self.tool_type = 'C1' # save here the old value for the Cut Z before it is changed by selecting a V-shape type tool in the tool table - self.old_cutz = self.app.defaults["geometry_cutz"] + self.old_cutz = self.app.defaults["tools_mill_cutz"] self.fill_color = self.app.defaults['geometry_plot_line'] self.outline_color = self.app.defaults['geometry_plot_line'] @@ -159,7 +159,7 @@ class GeometryObject(FlatCAMObj, Geometry): self.param_fields = {} # store here the state of the exclusion checkbox state to be restored after building the UI - self.exclusion_area_cb_is_checked = self.app.defaults["geometry_area_exclusion"] + self.exclusion_area_cb_is_checked = self.app.defaults["tools_mill_area_exclusion"] # Attributes to be included in serialization # Always append to it because it carries contents @@ -431,22 +431,6 @@ class GeometryObject(FlatCAMObj, Geometry): self.units = self.app.defaults['units'].upper() self.units_found = self.app.defaults['units'] - # # make sure the preprocessor combobox is clear - # self.ui.pp_geometry_name_cb.clear() - # # populate preprocessor names in the combobox - # pp_list = [] - # for name in list(self.app.preprocessors.keys()): - # pp_list.append(name) - # pp_list.sort() - # if 'default' in pp_list: - # pp_list.remove('default') - # pp_list.insert(0, 'default') - # self.ui.pp_geometry_name_cb.addItems(pp_list) - # # add tooltips - # for it in range(self.ui.pp_geometry_name_cb.count()): - # self.ui.pp_geometry_name_cb.setItemData( - # it, self.ui.pp_geometry_name_cb.itemText(it), QtCore.Qt.ToolTipRole) - self.form_fields.update({ "plot": self.ui.plot_cb, "multicolored": self.ui.multicolored_cb, @@ -1743,7 +1727,7 @@ class GeometryObject(FlatCAMObj, Geometry): # store the new CutZ value into storage (self.tools) for tooluid_key, tooluid_value in self.tools.items(): if int(tooluid_key) == tool_uid: - tooluid_value['data']['cutz'] = new_cutz + tooluid_value['data']['tools_mill_cutz'] = new_cutz def on_tooltable_cellwidget_change(self): cw = self.sender() @@ -1958,13 +1942,13 @@ class GeometryObject(FlatCAMObj, Geometry): def update_common_param_in_storage(self): for tooluid_value in self.tools.values(): - tooluid_value['data']['toolchange'] = self.ui.toolchangeg_cb.get_value() - tooluid_value['data']['toolchangez'] = self.ui.toolchangez_entry.get_value() - tooluid_value['data']['endz'] = self.ui.endz_entry.get_value() - tooluid_value['data']['endxy'] = self.ui.endxy_entry.get_value() - tooluid_value['data']['ppname_g'] = self.ui.pp_geometry_name_cb.get_value() - tooluid_value['data']['area_exclusion'] = self.ui.exclusion_cb.get_value() - tooluid_value['data']['polish'] = self.ui.polish_cb.get_value() + tooluid_value['data']['tools_mill_toolchange'] = self.ui.toolchangeg_cb.get_value() + tooluid_value['data']['tools_mill_toolchangez'] = self.ui.toolchangez_entry.get_value() + tooluid_value['data']['tools_mill_endz'] = self.ui.endz_entry.get_value() + tooluid_value['data']['tools_mill_endxy'] = self.ui.endxy_entry.get_value() + tooluid_value['data']['tools_mill_ppname_g'] = self.ui.pp_geometry_name_cb.get_value() + tooluid_value['data']['tools_mill_area_exclusion'] = self.ui.exclusion_cb.get_value() + tooluid_value['data']['tools_mill_polish'] = self.ui.polish_cb.get_value() def select_tools_table_row(self, row, clearsel=None): if clearsel: @@ -2296,8 +2280,8 @@ class GeometryObject(FlatCAMObj, Geometry): job_obj.segx = segx if segx else float(self.app.defaults["geometry_segx"]) job_obj.segy = segy if segy else float(self.app.defaults["geometry_segy"]) - job_obj.z_pdepth = float(self.app.defaults["geometry_z_pdepth"]) - job_obj.feedrate_probe = float(self.app.defaults["geometry_feedrate_probe"]) + job_obj.z_pdepth = float(self.app.defaults["tools_mill_z_pdepth"]) + job_obj.feedrate_probe = float(self.app.defaults["tools_mill_feedrate_probe"]) total_gcode = '' for tooluid_key in list(tools_dict.keys()): @@ -2338,27 +2322,27 @@ class GeometryObject(FlatCAMObj, Geometry): 'offset_value': tool_offset }) - z_cut = tools_dict[tooluid_key]['data']["cutz"] - z_move = tools_dict[tooluid_key]['data']["travelz"] - feedrate = tools_dict[tooluid_key]['data']["feedrate"] - feedrate_z = tools_dict[tooluid_key]['data']["feedrate_z"] - feedrate_rapid = tools_dict[tooluid_key]['data']["feedrate_rapid"] - multidepth = tools_dict[tooluid_key]['data']["multidepth"] - extracut = tools_dict[tooluid_key]['data']["extracut"] - extracut_length = tools_dict[tooluid_key]['data']["extracut_length"] - depthpercut = tools_dict[tooluid_key]['data']["depthperpass"] - toolchange = tools_dict[tooluid_key]['data']["toolchange"] - toolchangez = tools_dict[tooluid_key]['data']["toolchangez"] - toolchangexy = tools_dict[tooluid_key]['data']["toolchangexy"] - startz = tools_dict[tooluid_key]['data']["startz"] - endz = tools_dict[tooluid_key]['data']["endz"] - endxy = self.options["endxy"] - spindlespeed = tools_dict[tooluid_key]['data']["spindlespeed"] - dwell = tools_dict[tooluid_key]['data']["dwell"] - dwelltime = tools_dict[tooluid_key]['data']["dwelltime"] - pp_geometry_name = tools_dict[tooluid_key]['data']["ppname_g"] + z_cut = tools_dict[tooluid_key]['data']["tools_mill_cutz"] + z_move = tools_dict[tooluid_key]['data']["tools_mill_travelz"] + feedrate = tools_dict[tooluid_key]['data']["tools_mill_feedrate"] + feedrate_z = tools_dict[tooluid_key]['data']["tools_mill_feedrate_z"] + feedrate_rapid = tools_dict[tooluid_key]['data']["tools_mill_feedrate_rapid"] + multidepth = tools_dict[tooluid_key]['data']["tools_mill_multidepth"] + extracut = tools_dict[tooluid_key]['data']["tools_mill_extracut"] + extracut_length = tools_dict[tooluid_key]['data']["tools_mill_extracut_length"] + depthpercut = tools_dict[tooluid_key]['data']["tools_mill_depthperpass"] + toolchange = tools_dict[tooluid_key]['data']["tools_mill_toolchange"] + toolchangez = tools_dict[tooluid_key]['data']["tools_mill_toolchangez"] + toolchangexy = tools_dict[tooluid_key]['data']["tools_mill_toolchangexy"] + startz = tools_dict[tooluid_key]['data']["tools_mill_startz"] + endz = tools_dict[tooluid_key]['data']["tools_mill_endz"] + endxy = self.options["tools_mill_endxy"] + spindlespeed = tools_dict[tooluid_key]['data']["tools_mill_spindlespeed"] + dwell = tools_dict[tooluid_key]['data']["tools_mill_dwell"] + dwelltime = tools_dict[tooluid_key]['data']["tools_mill_dwelltime"] + pp_geometry_name = tools_dict[tooluid_key]['data']["tools_mill_ppname_g"] - spindledir = self.app.defaults['geometry_spindledir'] + spindledir = self.app.defaults['tools_mill_spindledir'] tool_solid_geometry = self.solid_geometry job_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"] @@ -2445,8 +2429,8 @@ class GeometryObject(FlatCAMObj, Geometry): job_obj.segx = segx if segx else float(self.app.defaults["geometry_segx"]) job_obj.segy = segy if segy else float(self.app.defaults["geometry_segy"]) - job_obj.z_pdepth = float(self.app.defaults["geometry_z_pdepth"]) - job_obj.feedrate_probe = float(self.app.defaults["geometry_feedrate_probe"]) + job_obj.z_pdepth = float(self.app.defaults["tools_mill_z_pdepth"]) + job_obj.feedrate_probe = float(self.app.defaults["tools_mill_feedrate_probe"]) # make sure that trying to make a CNCJob from an empty file is not creating an app crash if not self.solid_geometry: @@ -2467,8 +2451,8 @@ class GeometryObject(FlatCAMObj, Geometry): 'tooldia': tooldia_val }) if "optimization_type" not in tools_dict[tooluid_key]['data']: - tools_dict[tooluid_key]['data']["optimization_type"] = \ - self.app.defaults["geometry_optimization_type"] + tools_dict[tooluid_key]['data']["tools_mill_optimization_type"] = \ + self.app.defaults["tools_mill_optimization_type"] # find the tool_dia associated with the tooluid_key # search in the self.tools for the sel_tool_dia and when found see what tooluid has @@ -3029,10 +3013,10 @@ class GeometryObject(FlatCAMObj, Geometry): self.options["toolchangez"] = float(self.options["toolchangez"]) * factor - if self.app.defaults["geometry_toolchangexy"] == '': + if self.app.defaults["tools_mill_toolchangexy"] == '': self.options['toolchangexy'] = "0.0, 0.0" else: - coords_xy = [float(eval(coord)) for coord in self.app.defaults["geometry_toolchangexy"].split(",")] + coords_xy = [float(eval(coord)) for coord in self.app.defaults["tools_mill_toolchangexy"].split(",")] if len(coords_xy) < 2: self.app.inform.emit('[ERROR] %s' % _("The Toolchange X,Y field in Edit -> Preferences " diff --git a/appTools/ToolFollow.py b/appTools/ToolFollow.py index f9dea8b2..307b70bf 100644 --- a/appTools/ToolFollow.py +++ b/appTools/ToolFollow.py @@ -281,13 +281,12 @@ class ToolFollow(AppTool, Gerber): # store here the default data for Geometry Data new_data = {} - for opt_key, opt_val in app_obj.options.items(): + for opt_key in app_obj.options: if opt_key.find('geometry' + "_") == 0: oname = opt_key[len('geometry') + 1:] new_data[oname] = app_obj.options[opt_key] - if opt_key.find('tools_mill' + "_") == 0: - oname = opt_key[len('tools_mill') + 1:] - new_data[oname] = app_obj.options[opt_key] + if opt_key.find('tools_') == 0: + new_data[opt_key] = app_obj.options[opt_key] try: __ = iter(followed_obj.follow_geometry) @@ -299,6 +298,10 @@ class ToolFollow(AppTool, Gerber): g.geom_type != 'Point' ] + if not follow_geo: + self.app.log.warning("ToolFollow.follow_geo() -> Empty Follow Geometry") + return 'fail' + # Propagate options new_obj.options["tools_mill_tooldia"] = app_obj.defaults["tools_mill_tooldia"] new_obj.solid_geometry = follow_geo diff --git a/appTools/ToolMilling.py b/appTools/ToolMilling.py index e85aef43..900e0903 100644 --- a/appTools/ToolMilling.py +++ b/appTools/ToolMilling.py @@ -2307,10 +2307,10 @@ class ToolMilling(AppTool, Excellon): tools = self.get_selected_tools_list() if outname is None: - outname = self.options["name"] + "_mill" + outname = self.target_obj.options["name"] + "_mill" if tooldia is None: - tooldia = float(self.options["tooldia"]) + tooldia = float(self.target_obj.options["tooldia"]) # Sort tools by diameter. items() -> [('name', diameter), ...] sorted_tools = sorted(list(self.tools.items()), key=lambda tl: tl[1]['tooldia']) @@ -2364,7 +2364,7 @@ class ToolMilling(AppTool, Excellon): geo_obj.options['Tools_in_use'] = tool_table_items geo_obj.options['type'] = 'Excellon Geometry' geo_obj.options["tools_mill_tooldia"] = str(tooldia) - geo_obj.options["multidepth"] = self.options["multidepth"] + geo_obj.options["tools_mill_multidepth"] = self.target_obj.options["tools_mill_multidepth"] geo_obj.solid_geometry = [] # in case that the tool used has the same diameter with the hole, and since the maximum resolution @@ -2423,10 +2423,10 @@ class ToolMilling(AppTool, Excellon): tools = self.get_selected_tools_list() if outname is None: - outname = self.options["name"] + "_mill" + outname = self.target_obj.options["name"] + "_mill" if tooldia is None: - tooldia = float(self.options["slot_tooldia"]) + tooldia = float(self.target_obj.options["slot_tooldia"]) # Sort tools by diameter. items() -> [('name', diameter), ...] sorted_tools = sorted(list(self.tools.items()), key=lambda tl: tl[1]['tooldia']) @@ -2468,7 +2468,7 @@ class ToolMilling(AppTool, Excellon): geo_obj.options['Tools_in_use'] = tool_table_items geo_obj.options['type'] = 'Excellon Geometry' geo_obj.options["tools_mill_tooldia"] = str(tooldia) - geo_obj.options["multidepth"] = self.options["multidepth"] + geo_obj.options["tools_mill_multidepth"] = self.target_obj.options["tools_mill_multidepth"] geo_obj.solid_geometry = [] # in case that the tool used has the same diameter with the hole, and since the maximum resolution @@ -2766,20 +2766,20 @@ class ToolMilling(AppTool, Excellon): tool_cnt += 1 dia_cnc_dict = deepcopy(tools_dict[tooluid_key]) - tooldia_val = app_obj.dec_format(float(tools_dict[tooluid_key]['tooldia']), self.decimals) + tooldia_val = app_obj.dec_format(float(tools_dict[tooluid_key]['tools_mill_tooldia']), self.decimals) dia_cnc_dict.update({ - 'tooldia': tooldia_val + 'tools_mill_tooldia': tooldia_val }) if "optimization_type" not in tools_dict[tooluid_key]['data']: def_optimization_type = self.app.defaults["tools_mill_optimization_type"] tools_dict[tooluid_key]['data']["tools_mill_optimization_type"] = def_optimization_type - if dia_cnc_dict['data']['tools_mill_offset'] == 'in': - tool_offset = -dia_cnc_dict['tooldia'] / 2 - elif dia_cnc_dict['data']['tools_mill_offset'].lower() == 'out': - tool_offset = dia_cnc_dict['tooldia'] / 2 - elif dia_cnc_dict['data']['tools_mill_offset'].lower() == 'custom': + if dia_cnc_dict['data']['tools_mill_offset'] == 1: # 'in' + tool_offset = -dia_cnc_dict['tools_mill_tooldia'] / 2 + elif dia_cnc_dict['data']['tools_mill_offset'] == 2: # 'out' + tool_offset = dia_cnc_dict['tools_mill_tooldia'] / 2 + elif dia_cnc_dict['data']['tools_mill_offset'] == 3: # 'custom' try: offset_value = float(self.ui.offset_entry.get_value()) except ValueError: @@ -2801,7 +2801,7 @@ class ToolMilling(AppTool, Excellon): tool_offset = 0.0 dia_cnc_dict.update({ - 'offset_value': tool_offset + 'tools_mill_offset_value': tool_offset }) z_cut = tools_dict[tooluid_key]['data']["tools_mill_cutz"] @@ -2818,13 +2818,13 @@ class ToolMilling(AppTool, Excellon): toolchangexy = tools_dict[tooluid_key]['data']["tools_mill_toolchangexy"] startz = tools_dict[tooluid_key]['data']["tools_mill_startz"] endz = tools_dict[tooluid_key]['data']["tools_mill_endz"] - endxy = self.options["tools_mill_endxy"] + endxy = self.target_obj.options["tools_mill_endxy"] spindlespeed = tools_dict[tooluid_key]['data']["tools_mill_spindlespeed"] dwell = tools_dict[tooluid_key]['data']["tools_mill_dwell"] dwelltime = tools_dict[tooluid_key]['data']["tools_mill_dwelltime"] pp_geometry_name = tools_dict[tooluid_key]['data']["tools_mill_ppname_g"] - spindledir = self.app.defaults['tools_mill__spindledir'] + spindledir = self.app.defaults['tools_mill_spindledir'] tool_solid_geometry = self.solid_geometry job_obj.coords_decimals = self.app.defaults["cncjob_coords_decimals"] @@ -2844,7 +2844,7 @@ class ToolMilling(AppTool, Excellon): tol = glob_tol / 20 if self.units.lower() == 'in' else glob_tol res, start_gcode = job_obj.generate_from_geometry_2( - self, tooldia=tooldia_val, offset=tool_offset, tolerance=tol, + self.target_obj, tooldia=tooldia_val, offset=tool_offset, tolerance=tol, z_cut=z_cut, z_move=z_move, feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid, spindlespeed=spindlespeed, spindledir=spindledir, dwell=dwell, dwelltime=dwelltime, diff --git a/camlib.py b/camlib.py index ca4a56dd..d1664a5a 100644 --- a/camlib.py +++ b/camlib.py @@ -3501,13 +3501,13 @@ class CNCjob(Geometry): tool_dict = tools[tool]['data'] # this is the tool diameter, it is used as such to accommodate the preprocessor who need the tool diameter # given under the name 'toolC' - self.postdata['toolC'] = float(tools[tool]['tooldia']) - self.tooldia = float(tools[tool]['tooldia']) + self.postdata['toolC'] = float(tools[tool]['tools_mill_tooldia']) + self.tooldia = float(tools[tool]['tools_mill_tooldia']) self.use_ui = True self.tolerance = tolerance # Optimization type. Can be: 'M', 'B', 'T', 'R', 'No' - opt_type = tool_dict['optimization_type'] + opt_type = tool_dict['tools_mill_optimization_type'] opt_time = tool_dict['search_time'] if 'search_time' in tool_dict else 'R' if opt_type == 'M': @@ -3522,17 +3522,17 @@ class CNCjob(Geometry): log.debug("Using no path optimization.") # Preprocessor - self.pp_geometry_name = tool_dict['ppname_g'] + self.pp_geometry_name = tool_dict['tools_mill_ppname_g'] self.pp_geometry = self.app.preprocessors[self.pp_geometry_name] p = self.pp_geometry # Offset the Geometry if it is the case - if tools[tool]['offset'].lower() == 'in': + if tools[tool]['tools_mill_offset'] == 1: # 'in' tool_offset = -float(tools[tool]['tooldia']) / 2.0 - elif tools[tool]['offset'].lower() == 'out': + elif tools[tool]['tools_mill_offset'] == 2: # 'out' tool_offset = float(tools[tool]['tooldia']) / 2.0 - elif tools[tool]['offset'].lower() == 'custom': - tool_offset = tools[tool]['offset_value'] + elif tools[tool]['tools_mill_offset'] == 3: # 'custom' + tool_offset = tools[tool]['tools_mill_offset_value'] else: tool_offset = 0.0 @@ -3593,31 +3593,31 @@ class CNCjob(Geometry): self.z_depthpercut = abs(self.z_cut) # Depth parameters - self.z_cut = float(tool_dict['cutz']) - self.multidepth = tool_dict['multidepth'] - self.z_depthpercut = float(tool_dict['depthperpass']) - self.z_move = float(tool_dict['travelz']) - self.f_plunge = self.app.defaults["geometry_f_plunge"] + self.z_cut = float(tool_dict['tools_mill_cutz']) + self.multidepth = tool_dict['tools_mill_multidepth'] + self.z_depthpercut = float(tool_dict['tools_mill_depthperpass']) + self.z_move = float(tool_dict['tools_mill_travelz']) + self.f_plunge = self.app.defaults["tools_mill_f_plunge"] - self.feedrate = float(tool_dict['feedrate']) - self.z_feedrate = float(tool_dict['feedrate_z']) - self.feedrate_rapid = float(tool_dict['feedrate_rapid']) + self.feedrate = float(tool_dict['tools_mill_feedrate']) + self.z_feedrate = float(tool_dict['tools_mill_feedrate_z']) + self.feedrate_rapid = float(tool_dict['tools_mill_feedrate_rapid']) - self.spindlespeed = float(tool_dict['spindlespeed']) + self.spindlespeed = float(tool_dict['tools_mill_spindlespeed']) try: - self.spindledir = tool_dict['spindledir'] + self.spindledir = tool_dict['tools_mill_spindledir'] except KeyError: - self.spindledir = self.app.defaults["geometry_spindledir"] + self.spindledir = self.app.defaults["tools_mill_spindledir"] - self.dwell = tool_dict['dwell'] - self.dwelltime = float(tool_dict['dwelltime']) + self.dwell = tool_dict['tools_mill_dwell'] + self.dwelltime = float(tool_dict['tools_mill_dwelltime']) - self.startz = float(tool_dict['startz']) if tool_dict['startz'] else None + self.startz = float(tool_dict['tools_mill_startz']) if tool_dict['tools_mill_startz'] else None if self.startz == '': self.startz = None - self.z_end = float(tool_dict['endz']) - self.xy_end = tool_dict['endxy'] + self.z_end = float(tool_dict['tools_mill_endz']) + self.xy_end = tool_dict['tools_mill_endxy'] try: if self.xy_end == '' or self.xy_end is None: self.xy_end = None @@ -3636,8 +3636,8 @@ class CNCjob(Geometry): log.error("camlib.CNCJob.geometry_from_excellon_by_tool() xy_end --> %s" % str(e)) self.xy_end = [0, 0] - self.z_toolchange = tool_dict['toolchangez'] - self.xy_toolchange = tool_dict["toolchangexy"] + self.z_toolchange = tool_dict['tools_mill_toolchangez'] + self.xy_toolchange = tool_dict["tools_mill_toolchangexy"] try: if self.xy_toolchange == '': self.xy_toolchange = None @@ -3656,8 +3656,8 @@ class CNCjob(Geometry): log.error("camlib.CNCJob.geometry_from_excellon_by_tool() --> %s" % str(e)) pass - self.extracut = tool_dict['extracut'] - self.extracut_length = tool_dict['extracut_length'] + self.extracut = tool_dict['tools_mill_extracut'] + self.extracut_length = tool_dict['tools_mill_extracut_length'] # Probe parameters # self.z_pdepth = tool_dict["tools_drill_z_pdepth"] @@ -5555,7 +5555,7 @@ class CNCjob(Geometry): ) return self.gcode - def generate_from_geometry_2(self, geometry, append=True, tooldia=None, offset=0.0, tolerance=0, z_cut=None, + def generate_from_geometry_2(self, geo_obj, append=True, tooldia=None, offset=0.0, tolerance=0, z_cut=None, z_move=None, feedrate=None, feedrate_z=None, feedrate_rapid=None, spindlespeed=None, spindledir='CW', dwell=False, dwelltime=None, multidepth=False, depthpercut=None, toolchange=False, toolchangez=None, toolchangexy="0.0, 0.0", extracut=False, @@ -5568,7 +5568,7 @@ class CNCjob(Geometry): ---------------------- Uses RTree to find the nearest path to follow. - :param geometry: + :param geo_obj: :param append: :param tooldia: :param offset: @@ -5601,7 +5601,7 @@ class CNCjob(Geometry): log.debug("Executing camlib.CNCJob.generate_from_geometry_2()") # if solid_geometry is empty raise an exception - if not geometry.solid_geometry: + if not geo_obj.solid_geometry: self.app.inform.emit( '[ERROR_NOTCL] %s' % _("Trying to generate a CNC Job from a Geometry object without solid_geometry.") ) @@ -5639,7 +5639,7 @@ class CNCjob(Geometry): offset_for_use = offset if offset < 0: - a, b, c, d = bounds_rec(geometry.solid_geometry) + a, b, c, d = bounds_rec(geo_obj.solid_geometry) # if the offset is less than half of the total length or less than half of the total width of the # solid geometry it's obvious we can't do the offset if -offset > ((c - a) / 2) or -offset > ((d - b) / 2): @@ -5654,7 +5654,7 @@ class CNCjob(Geometry): elif -offset == ((c - a) / 2) or -offset == ((d - b) / 2): offset_for_use = offset - 0.0000000001 - for it in geometry.solid_geometry: + for it in geo_obj.solid_geometry: # if the geometry is a closed shape then create a Polygon out of it if isinstance(it, LineString): c = it.coords @@ -5662,7 +5662,7 @@ class CNCjob(Geometry): it = Polygon(it) temp_solid_geometry.append(it.buffer(offset_for_use, join_style=2)) else: - temp_solid_geometry = geometry.solid_geometry + temp_solid_geometry = geo_obj.solid_geometry # ## Flatten the geometry. Only linear elements (no polygons) remain. flat_geometry = self.flatten(temp_solid_geometry, pathonly=True) @@ -5688,24 +5688,24 @@ class CNCjob(Geometry): self.app.inform.emit('[ERROR] %s' % _("Failed.")) return 'fail' - self.z_cut = float(z_cut) if z_cut is not None else self.app.defaults["geometry_cutz"] - self.z_move = float(z_move) if z_move is not None else self.app.defaults["geometry_travelz"] + self.z_cut = float(z_cut) if z_cut is not None else self.app.defaults["tools_mill_cutz"] + self.z_move = float(z_move) if z_move is not None else self.app.defaults["tools_mill_travelz"] - self.feedrate = float(feedrate) if feedrate is not None else self.app.defaults["geometry_feedrate"] - self.z_feedrate = float(feedrate_z) if feedrate_z is not None else self.app.defaults["geometry_feedrate_z"] + self.feedrate = float(feedrate) if feedrate is not None else self.app.defaults["tools_mill_feedrate"] + self.z_feedrate = float(feedrate_z) if feedrate_z is not None else self.app.defaults["tools_mill_feedrate_z"] self.feedrate_rapid = float(feedrate_rapid) if feedrate_rapid is not None else \ - self.app.defaults["geometry_feedrate_rapid"] + self.app.defaults["tools_mill_feedrate_rapid"] self.spindlespeed = int(spindlespeed) if spindlespeed != 0 and spindlespeed is not None else None self.spindledir = spindledir self.dwell = dwell - self.dwelltime = float(dwelltime) if dwelltime is not None else self.app.defaults["geometry_dwelltime"] + self.dwelltime = float(dwelltime) if dwelltime is not None else self.app.defaults["tools_mill_dwelltime"] - self.startz = float(startz) if startz is not None and startz != '' else self.app.defaults["geometry_startz"] + self.startz = float(startz) if startz is not None and startz != '' else self.app.defaults["tools_mill_startz"] - self.z_end = float(endz) if endz is not None else self.app.defaults["geometry_endz"] + self.z_end = float(endz) if endz is not None else self.app.defaults["tools_mill_endz"] - self.xy_end = endxy if endxy != '' and endxy else self.app.defaults["geometry_endxy"] + self.xy_end = endxy if endxy != '' and endxy else self.app.defaults["tools_mill_endxy"] self.xy_end = re.sub('[()\[\]]', '', str(self.xy_end)) if self.xy_end else None if self.xy_end is not None and self.xy_end != '': @@ -5718,9 +5718,10 @@ class CNCjob(Geometry): self.z_depthpercut = float(depthpercut) if depthpercut is not None and depthpercut != 0 else abs(self.z_cut) self.multidepth = multidepth - self.z_toolchange = float(toolchangez) if toolchangez is not None else self.app.defaults["geometry_toolchangez"] + self.z_toolchange = float(toolchangez) if toolchangez is not None else \ + self.app.defaults["tools_mill_toolchangez"] self.extracut_length = float(extracut_length) if extracut_length is not None else \ - self.app.defaults["geometry_extracut_length"] + self.app.defaults["tools_mill_extracut_length"] try: if toolchangexy == '': @@ -5739,7 +5740,7 @@ class CNCjob(Geometry): pass self.pp_geometry_name = pp_geometry_name if pp_geometry_name else 'default' - self.f_plunge = self.app.defaults["geometry_f_plunge"] + self.f_plunge = self.app.defaults["tools_mill_f_plunge"] if self.z_cut is None: if 'laser' not in self.pp_geometry_name: @@ -5762,7 +5763,7 @@ class CNCjob(Geometry): elif self.z_cut == 0 and 'laser' not in self.pp_geometry_name: self.app.inform.emit( '[WARNING] %s: %s' % (_("The Cut Z parameter is zero. There will be no cut, skipping file"), - geometry.options['name']) + geo_obj.options['name']) ) return 'fail' @@ -6388,10 +6389,11 @@ class CNCjob(Geometry): if len(pos_xy) != 2: pos_xy = (0, 0) else: - if self.app.defaults["geometry_toolchangexy"] == '' or self.app.defaults["geometry_toolchangexy"] is None: + if self.app.defaults["tools_mill_toolchangexy"] == '' or \ + self.app.defaults["tools_mill_toolchangexy"] is None: pos_xy = (0, 0) else: - pos_xy = self.app.defaults["geometry_toolchangexy"] + pos_xy = self.app.defaults["tools_mill_toolchangexy"] try: pos_xy = [float(eval(a)) for a in pos_xy.split(",")] except Exception: