Просмотр исходного кода

- added CNCJob geometry for the holes created by the drills from Excellon objects

Marius Stanciu 6 лет назад
Родитель
Сommit
1aabb1c084
3 измененных файлов с 42 добавлено и 2 удалено
  1. 2 1
      FlatCAMObj.py
  2. 1 0
      README.md
  3. 39 1
      camlib.py

+ 2 - 1
FlatCAMObj.py

@@ -2419,6 +2419,8 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
 
 
             ### Add properties to the object
             ### Add properties to the object
 
 
+            job_obj.origin_kind = 'excellon'
+
             job_obj.options['Tools_in_use'] = tool_table_items
             job_obj.options['Tools_in_use'] = tool_table_items
             job_obj.options['type'] = 'Excellon'
             job_obj.options['type'] = 'Excellon'
             job_obj.options['ppname_e'] = pp_excellon_name
             job_obj.options['ppname_e'] = pp_excellon_name
@@ -5715,7 +5717,6 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
             self.ui.plot_cb.setChecked(True)
             self.ui.plot_cb.setChecked(True)
         self.ui_connect()
         self.ui_connect()
 
 
-
     def plot(self, visible=None, kind='all'):
     def plot(self, visible=None, kind='all'):
 
 
         # Does all the required setup and returns False
         # Does all the required setup and returns False

+ 1 - 0
README.md

@@ -13,6 +13,7 @@ CAD program, and create G-Code for Isolation routing.
 
 
 - fixed an issue where the Geometry plot function protested that it does not have an parameter that is used by the CNCJob plot function. But both inherit from FaltCAMObj plot function which does not have that parameter so something may need to be changed. Until then I provided a phony keyboard parameter to make that function 'shut up'
 - fixed an issue where the Geometry plot function protested that it does not have an parameter that is used by the CNCJob plot function. But both inherit from FaltCAMObj plot function which does not have that parameter so something may need to be changed. Until then I provided a phony keyboard parameter to make that function 'shut up'
 - fixed bug: after using Paint Tool shortcut keys are disabled
 - fixed bug: after using Paint Tool shortcut keys are disabled
+- added CNCJob geometry for the holes created by the drills from Excellon objects
 
 
 25.03.2019
 25.03.2019
 
 

+ 39 - 1
camlib.py

@@ -4718,6 +4718,8 @@ class CNCjob(Geometry):
         Geometry.__init__(self, geo_steps_per_circle=int(steps_per_circle))
         Geometry.__init__(self, geo_steps_per_circle=int(steps_per_circle))
 
 
         self.kind = kind
         self.kind = kind
+        self.origin_kind = None
+
         self.units = units
         self.units = units
 
 
         self.z_cut = z_cut
         self.z_cut = z_cut
@@ -4782,6 +4784,10 @@ class CNCjob(Geometry):
 
 
         self.tool = 0.0
         self.tool = 0.0
 
 
+        # used for creating drill CCode geometry; will be updated in the generate_from_excellon_by_tool()
+        self.exc_drills = None
+        self.exc_tools = None
+
         # search for toolchange parameters in the Toolchange Custom Code
         # search for toolchange parameters in the Toolchange Custom Code
         self.re_toolchange_custom = re.compile(r'(%[a-zA-Z0-9\-_]+%)')
         self.re_toolchange_custom = re.compile(r'(%[a-zA-Z0-9\-_]+%)')
 
 
@@ -4903,6 +4909,11 @@ class CNCjob(Geometry):
         :return: None
         :return: None
         :rtype: None
         :rtype: None
         """
         """
+
+        # create a local copy of the exobj.drills so it can be used for creating drill CCode geometry
+        self.exc_drills = deepcopy(exobj.drills)
+        self.exc_tools = deepcopy(exobj.tools)
+
         if drillz > 0:
         if drillz > 0:
             self.app.inform.emit(_("[WARNING] The Cut Z parameter has positive value. "
             self.app.inform.emit(_("[WARNING] The Cut Z parameter has positive value. "
                                  "It is the depth value to drill into material.\n"
                                  "It is the depth value to drill into material.\n"
@@ -6129,6 +6140,23 @@ class CNCjob(Geometry):
                                      "kind": kind})
                                      "kind": kind})
                     path = [path[-1]]  # Start with the last point of last path.
                     path = [path[-1]]  # Start with the last point of last path.
 
 
+                # create the geometry for the holes created when drilling Excellon drills
+                if self.origin_kind == 'excellon':
+                    if current['Z'] < 0:
+                        current_drill_point_coords = (float('%.4f' % current['X']), float('%.4f' % current['Y']))
+                        # find the drill diameter knowing the drill coordinates
+                        for pt_dict in self.exc_drills:
+                            point_in_dict_coords = (float('%.4f' % pt_dict['point'].x),
+                                                   float('%.4f' % pt_dict['point'].y))
+                            if point_in_dict_coords == current_drill_point_coords:
+                                tool = pt_dict['tool']
+                                dia = self.exc_tools[tool]['C']
+                                kind = ['C', 'F']
+                                geometry.append({"geom": Point(current_drill_point_coords).
+                                                buffer(dia/2).exterior,
+                                                 "kind": kind})
+                                break
+
             if 'G' in gobj:
             if 'G' in gobj:
                 current['G'] = int(gobj['G'])
                 current['G'] = int(gobj['G'])
                 
                 
@@ -6255,7 +6283,17 @@ class CNCjob(Geometry):
                 text.append(str(path_num))
                 text.append(str(path_num))
                 pos.append(geo['geom'].coords[0])
                 pos.append(geo['geom'].coords[0])
 
 
-                poly = geo['geom'].buffer(tooldia / 2.0).simplify(tool_tolerance)
+                # plot the geometry of Excellon objects
+                if self.origin_kind == 'excellon':
+                    try:
+                        poly = Polygon(geo['geom'])
+                    except ValueError:
+                        # if the geos are travel lines it will enter into Exception
+                        poly = geo['geom'].buffer(tooldia / 2.0).simplify(tool_tolerance)
+                else:
+                    # plot the geometry of any objects other than Excellon
+                    poly = geo['geom'].buffer(tooldia / 2.0).simplify(tool_tolerance)
+
                 if kind == 'all':
                 if kind == 'all':
                     obj.add_shape(shape=poly, color=color[geo['kind'][0]][1], face_color=color[geo['kind'][0]][0],
                     obj.add_shape(shape=poly, color=color[geo['kind'][0]][1], face_color=color[geo['kind'][0]][0],
                               visible=visible, layer=1 if geo['kind'][0] == 'C' else 2)
                               visible=visible, layer=1 if geo['kind'][0] == 'C' else 2)