Explorar el Código

Merged in Beta_8.994 (pull request #326)

Beta - 8.994 fixes
Marius Stanciu hace 5 años
padre
commit
d8eb1d0690
Se han modificado 5 ficheros con 602 adiciones y 571 borrados
  1. 2 0
      CHANGELOG.md
  2. 37 26
      appObjects/FlatCAMCNCJob.py
  3. 21 17
      appObjects/FlatCAMGeometry.py
  4. 541 528
      camlib.py
  5. 1 0
      tclCommands/TclCommandDrillcncjob.py

+ 2 - 0
CHANGELOG.md

@@ -23,6 +23,8 @@ CHANGELOG for FlatCAM beta
 - fixed the usage for Tools Database in Unix-like OS's
 - fixed the usage for Tools Database in Unix-like OS's
 - done some modest refactoring
 - done some modest refactoring
 - fixed the Search and Add feature in Geometry Object UI
 - fixed the Search and Add feature in Geometry Object UI
+- fixed issue with preamble not being inserted when used alone
+- modified the way that the start GCode is stored such that now the bug in GCode Editor that did not allowed selection of the first tool is now solved
 
 
 28.10.2020
 28.10.2020
 
 

+ 37 - 26
appObjects/FlatCAMCNCJob.py

@@ -2164,7 +2164,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
         if preamble == '':
         if preamble == '':
             preamble = self.app.defaults["cncjob_prepend"]
             preamble = self.app.defaults["cncjob_prepend"]
         if postamble == '':
         if postamble == '':
-            preamble = self.app.defaults["cncjob_append"]
+            postamble = self.app.defaults["cncjob_append"]
 
 
         try:
         try:
             if self.special_group:
             if self.special_group:
@@ -2190,7 +2190,6 @@ class CNCJobObject(FlatCAMObj, CNCjob):
 
 
         gcode = ''
         gcode = ''
         if include_header is False:
         if include_header is False:
-            g = preamble
             # detect if using multi-tool and make the Gcode summation correctly for each case
             # detect if using multi-tool and make the Gcode summation correctly for each case
             if self.multitool is True:
             if self.multitool is True:
                 for tooluid_key in self.cnc_tools:
                 for tooluid_key in self.cnc_tools:
@@ -2201,7 +2200,7 @@ class CNCJobObject(FlatCAMObj, CNCjob):
             else:
             else:
                 gcode += self.gcode
                 gcode += self.gcode
 
 
-            g = g + gcode + postamble
+            g = preamble + '\n' + gcode + '\n' + postamble
         else:
         else:
             # search for the GCode beginning which is usually a G20 or G21
             # search for the GCode beginning which is usually a G20 or G21
             # fix so the preamble gets inserted in between the comments header and the actual start of GCODE
             # fix so the preamble gets inserted in between the comments header and the actual start of GCODE
@@ -2251,39 +2250,51 @@ class CNCJobObject(FlatCAMObj, CNCjob):
                             break
                             break
 
 
             if hpgl:
             if hpgl:
-                processed_gcode = ''
+                processed_body_gcode = ''
                 pa_re = re.compile(r"^PA\s*(-?\d+\.\d*),?\s*(-?\d+\.\d*)*;?$")
                 pa_re = re.compile(r"^PA\s*(-?\d+\.\d*),?\s*(-?\d+\.\d*)*;?$")
+
+                # process body gcode
                 for gline in gcode.splitlines():
                 for gline in gcode.splitlines():
                     match = pa_re.search(gline)
                     match = pa_re.search(gline)
                     if match:
                     if match:
                         x_int = int(float(match.group(1)))
                         x_int = int(float(match.group(1)))
                         y_int = int(float(match.group(2)))
                         y_int = int(float(match.group(2)))
                         new_line = 'PA%d,%d;\n' % (x_int, y_int)
                         new_line = 'PA%d,%d;\n' % (x_int, y_int)
-                        processed_gcode += new_line
+                        processed_body_gcode += new_line
                     else:
                     else:
-                        processed_gcode += gline + '\n'
+                        processed_body_gcode += gline + '\n'
 
 
-                gcode = processed_gcode
-                g = self.gc_header + '\n' + preamble + '\n' + gcode + postamble + end_gcode
+                gcode = processed_body_gcode
+                g = self.gc_header + '\n' + self.gc_start + '\n'  + preamble + '\n' + \
+                    gcode + '\n' + postamble + end_gcode
             else:
             else:
-                try:
-                    g_idx = gcode.index('G94')
-                    if preamble != '' and postamble != '':
-                        g = self.gc_header + gcode[:g_idx + 3] + '\n' + preamble + '\n' + \
-                            gcode[(g_idx + 3):] + postamble + end_gcode
-                    elif preamble == '':
-                        g = self.gc_header + gcode[:g_idx + 3] + '\n' + \
-                            gcode[(g_idx + 3):] + postamble + end_gcode
-                    elif postamble == '':
-                        g = self.gc_header + gcode[:g_idx + 3] + '\n' + preamble + '\n' + \
-                            gcode[(g_idx + 3):] + end_gcode
-                    else:
-                        g = self.gc_header + gcode[:g_idx + 3] + gcode[(g_idx + 3):] + end_gcode
-                except ValueError:
-                    self.app.inform.emit('[ERROR_NOTCL] %s' %
-                                         _("G-code does not have a G94 code.\n"
-                                           "Append Code snippet will not be used.."))
-                    g = self.gc_header + '\n' + gcode + postamble + end_gcode
+                # try:
+                #     g_idx = gcode.index('G94')
+                #     if preamble != '' and postamble != '':
+                #         g = self.gc_header + gcode[:g_idx + 3] + '\n' + preamble + '\n' + \
+                #             gcode[(g_idx + 3):] + postamble + end_gcode
+                #     elif preamble == '':
+                #         g = self.gc_header + gcode[:g_idx + 3] + '\n' + \
+                #             gcode[(g_idx + 3):] + postamble + end_gcode
+                #     elif postamble == '':
+                #         g = self.gc_header + gcode[:g_idx + 3] + '\n' + preamble + '\n' + \
+                #             gcode[(g_idx + 3):] + end_gcode
+                #     else:
+                #         g = self.gc_header + gcode[:g_idx + 3] + gcode[(g_idx + 3):] + end_gcode
+                # except ValueError:
+                #     self.app.inform.emit('[ERROR_NOTCL] %s' %
+                #                          _("G-code does not have a G94 code.\n"
+                #                            "Append Code snippet will not be used.."))
+                #     g = self.gc_header + '\n' + gcode + postamble + end_gcode
+                if preamble != '' and postamble != '':
+                    g = self.gc_header + self.gc_start + '\n' + preamble + '\n' + gcode + '\n' + \
+                        postamble + '\n' + end_gcode
+                if preamble == '':
+                    g = self.gc_header + self.gc_start + '\n' + gcode + '\n' + postamble + '\n' + end_gcode
+                if postamble == '':
+                    g = self.gc_header + self.gc_start + '\n' + preamble + '\n' + gcode + '\n' + end_gcode
+                if preamble == '' and postamble == '':
+                    g = self.gc_header + self.gc_start + '\n' + gcode + '\n' + end_gcode
 
 
         # if toolchange custom is used, replace M6 code with the code from the Toolchange Custom Text box
         # if toolchange custom is used, replace M6 code with the code from the Toolchange Custom Text box
         # if self.ui.toolchange_cb.get_value() is True:
         # if self.ui.toolchange_cb.get_value() is True:

+ 21 - 17
appObjects/FlatCAMGeometry.py

@@ -2172,10 +2172,13 @@ class GeometryObject(FlatCAMObj, Geometry):
                 job_obj.options['type'] = 'Geometry'
                 job_obj.options['type'] = 'Geometry'
                 job_obj.options['tool_dia'] = tooldia_val
                 job_obj.options['tool_dia'] = tooldia_val
 
 
+                tool_lst = list(tools_dict.keys())
+                is_first = True if tooluid_key == tool_lst[0] else False
+
                 # it seems that the tolerance needs to be a lot lower value than 0.01 and it was hardcoded initially
                 # it seems that the tolerance needs to be a lot lower value than 0.01 and it was hardcoded initially
                 # to a value of 0.0005 which is 20 times less than 0.01
                 # to a value of 0.0005 which is 20 times less than 0.01
                 tol = float(self.app.defaults['global_tolerance']) / 20
                 tol = float(self.app.defaults['global_tolerance']) / 20
-                res = job_obj.generate_from_geometry_2(
+                res, start_gcode = job_obj.generate_from_geometry_2(
                     self, tooldia=tooldia_val, offset=tool_offset, tolerance=tol,
                     self, tooldia=tooldia_val, offset=tool_offset, tolerance=tol,
                     z_cut=z_cut, z_move=z_move,
                     z_cut=z_cut, z_move=z_move,
                     feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid,
                     feedrate=feedrate, feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid,
@@ -2184,13 +2187,15 @@ class GeometryObject(FlatCAMObj, Geometry):
                     extracut=extracut, extracut_length=extracut_length, startz=startz, endz=endz, endxy=endxy,
                     extracut=extracut, extracut_length=extracut_length, startz=startz, endz=endz, endxy=endxy,
                     toolchange=toolchange, toolchangez=toolchangez, toolchangexy=toolchangexy,
                     toolchange=toolchange, toolchangez=toolchangez, toolchangexy=toolchangexy,
                     pp_geometry_name=pp_geometry_name,
                     pp_geometry_name=pp_geometry_name,
-                    tool_no=tool_cnt)
+                    tool_no=tool_cnt, is_first=is_first)
 
 
                 if res == 'fail':
                 if res == 'fail':
                     log.debug("GeometryObject.mtool_gen_cncjob() --> generate_from_geometry2() failed")
                     log.debug("GeometryObject.mtool_gen_cncjob() --> generate_from_geometry2() failed")
                     return 'fail'
                     return 'fail'
-                else:
-                    dia_cnc_dict['gcode'] = res
+
+                dia_cnc_dict['gcode'] = res
+                if start_gcode != '':
+                    job_obj.gc_start = start_gcode
 
 
                 total_gcode += res
                 total_gcode += res
 
 
@@ -2216,7 +2221,7 @@ class GeometryObject(FlatCAMObj, Geometry):
                 })
                 })
                 dia_cnc_dict.clear()
                 dia_cnc_dict.clear()
 
 
-            job_obj.source_file = total_gcode
+            job_obj.source_file = job_obj.gc_start + total_gcode
 
 
         # Object initialization function for app.app_obj.new_object()
         # Object initialization function for app.app_obj.new_object()
         # RUNNING ON SEPARATE THREAD!
         # RUNNING ON SEPARATE THREAD!
@@ -2513,18 +2518,17 @@ class GeometryObject(FlatCAMObj, Geometry):
             # it seems that the tolerance needs to be a lot lower value than 0.01 and it was hardcoded initially
             # it seems that the tolerance needs to be a lot lower value than 0.01 and it was hardcoded initially
             # to a value of 0.0005 which is 20 times less than 0.01
             # to a value of 0.0005 which is 20 times less than 0.01
             tol = float(self.app.defaults['global_tolerance']) / 20
             tol = float(self.app.defaults['global_tolerance']) / 20
-            res = job_obj.generate_from_geometry_2(self, tooldia=tooldia, offset=offset, tolerance=tol,
-                                                   z_cut=z_cut, z_move=z_move, feedrate=feedrate,
-                                                   feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid,
-                                                   spindlespeed=spindlespeed, dwell=dwell, dwelltime=dwelltime,
-                                                   multidepth=multidepth, depthpercut=depthperpass,
-                                                   toolchange=toolchange, toolchangez=toolchangez,
-                                                   toolchangexy=toolchangexy,
-                                                   extracut=extracut, extracut_length=extracut_length,
-                                                   startz=startz, endz=endz, endxy=endxy,
-                                                   pp_geometry_name=ppname_g)
-
-            job_obj.source_file = res
+            res, start_gcode = job_obj.generate_from_geometry_2(
+                self, tooldia=tooldia, offset=offset, tolerance=tol, z_cut=z_cut, z_move=z_move, feedrate=feedrate,
+                feedrate_z=feedrate_z, feedrate_rapid=feedrate_rapid, spindlespeed=spindlespeed, dwell=dwell,
+                dwelltime=dwelltime, multidepth=multidepth, depthpercut=depthperpass, toolchange=toolchange,
+                toolchangez=toolchangez, toolchangexy=toolchangexy, extracut=extracut, extracut_length=extracut_length,
+                startz=startz, endz=endz, endxy=endxy, pp_geometry_name=ppname_g, is_first=True)
+
+            if start_gcode != '':
+                job_obj.gc_start = start_gcode
+
+            job_obj.source_file = start_gcode + res
             # tell gcode_parse from which point to start drawing the lines depending on what kind of object is the
             # tell gcode_parse from which point to start drawing the lines depending on what kind of object is the
             # source of gcode
             # source of gcode
             job_obj.toolchange_xy_type = "geometry"
             job_obj.toolchange_xy_type = "geometry"

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 541 - 528
camlib.py


+ 1 - 0
tclCommands/TclCommandDrillcncjob.py

@@ -337,6 +337,7 @@ class TclCommandDrillcncjob(TclCommandSignaled):
 
 
             if ret_val == 'fail':
             if ret_val == 'fail':
                 return 'fail'
                 return 'fail'
+            job_obj.gc_start = ret_val[1]
 
 
             for t_item in job_obj.exc_cnc_tools:
             for t_item in job_obj.exc_cnc_tools:
                 job_obj.exc_cnc_tools[t_item]['data']['tools_drill_offset'] = \
                 job_obj.exc_cnc_tools[t_item]['data']['tools_drill_offset'] = \

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio